|
@@ -352,9 +352,9 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|
{
|
|
{
|
|
int x, y, z;
|
|
int x, y, z;
|
|
|
|
|
|
- // Territory based spawn
|
|
|
|
- if ((npc.getSpawn().getX() == 0) && (npc.getSpawn().getY() == 0))
|
|
|
|
- {
|
|
|
|
|
|
+ // Territory based spawn
|
|
|
|
+ if ((npc.getSpawn().getX() == 0) && (npc.getSpawn().getY() == 0))
|
|
|
|
+ {
|
|
x = npc.getSpawn().getX(npc);
|
|
x = npc.getSpawn().getX(npc);
|
|
y = npc.getSpawn().getY(npc);
|
|
y = npc.getSpawn().getY(npc);
|
|
z = npc.getSpawn().getZ(npc);
|
|
z = npc.getSpawn().getZ(npc);
|
|
@@ -688,18 +688,19 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|
else
|
|
else
|
|
{
|
|
{
|
|
// New territory based spawn - obtain last spawn point
|
|
// New territory based spawn - obtain last spawn point
|
|
- if (npc.getSpawn().getX() == 0 && npc.getSpawn().getY() == 0)
|
|
|
|
|
|
+ if ((npc.getSpawn().getX() == 0) && (npc.getSpawn().getY() == 0))
|
|
{
|
|
{
|
|
x1 = npc.getSpawn().getX(npc);
|
|
x1 = npc.getSpawn().getX(npc);
|
|
y1 = npc.getSpawn().getY(npc);
|
|
y1 = npc.getSpawn().getY(npc);
|
|
z1 = npc.getSpawn().getZ(npc);
|
|
z1 = npc.getSpawn().getZ(npc);
|
|
}
|
|
}
|
|
- else // If NPC with fixed coord
|
|
|
|
|
|
+ else
|
|
|
|
+ // If NPC with fixed coord
|
|
{
|
|
{
|
|
x1 = npc.getSpawn().getX();
|
|
x1 = npc.getSpawn().getX();
|
|
y1 = npc.getSpawn().getY();
|
|
y1 = npc.getSpawn().getY();
|
|
z1 = npc.getSpawn().getZ();
|
|
z1 = npc.getSpawn().getZ();
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
if (!npc.isInsideRadius(x1, y1, 0, range, false, false))
|
|
if (!npc.isInsideRadius(x1, y1, 0, range, false, false))
|
|
{
|
|
{
|
|
@@ -709,9 +710,9 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|
{
|
|
{
|
|
int deltaX = Rnd.nextInt(range * 2); // x
|
|
int deltaX = Rnd.nextInt(range * 2); // x
|
|
int deltaY = Rnd.get(deltaX, range * 2); // distance
|
|
int deltaY = Rnd.get(deltaX, range * 2); // distance
|
|
- deltaY = (int) Math.sqrt(deltaY * deltaY - deltaX * deltaX); // y
|
|
|
|
- x1 = deltaX + x1 - range;
|
|
|
|
- y1 = deltaY + y1 - range;
|
|
|
|
|
|
+ deltaY = (int) Math.sqrt((deltaY * deltaY) - (deltaX * deltaX)); // y
|
|
|
|
+ x1 = (deltaX + x1) - range;
|
|
|
|
+ y1 = (deltaY + y1) - range;
|
|
z1 = npc.getZ();
|
|
z1 = npc.getZ();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1434,46 +1435,46 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- case DEBUFF:
|
|
|
|
|
|
+ default:
|
|
{
|
|
{
|
|
- if (GeoData.getInstance().canSeeTarget(caster, attackTarget) && !canAOE(sk) && !attackTarget.isDead() && (dist2 <= srange))
|
|
|
|
- {
|
|
|
|
- if (!attackTarget.isAffectedBySkill(sk.getId()))
|
|
|
|
- {
|
|
|
|
- clientStopMoving(null);
|
|
|
|
- caster.doCast(sk);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- else if (canAOE(sk))
|
|
|
|
|
|
+ if (sk.isDebuff())
|
|
{
|
|
{
|
|
- if ((sk.getTargetType() == L2TargetType.AURA) || (sk.getTargetType() == L2TargetType.BEHIND_AURA) || (sk.getTargetType() == L2TargetType.FRONT_AURA) || (sk.getTargetType() == L2TargetType.AURA_CORPSE_MOB))
|
|
|
|
|
|
+ if (GeoData.getInstance().canSeeTarget(caster, attackTarget) && !canAOE(sk) && !attackTarget.isDead() && (dist2 <= srange))
|
|
{
|
|
{
|
|
- clientStopMoving(null);
|
|
|
|
- caster.doCast(sk);
|
|
|
|
- return true;
|
|
|
|
|
|
+ if (!attackTarget.isAffectedBySkill(sk.getId()))
|
|
|
|
+ {
|
|
|
|
+ clientStopMoving(null);
|
|
|
|
+ caster.doCast(sk);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
|
|
|
|
|
|
+ else if (canAOE(sk))
|
|
{
|
|
{
|
|
- clientStopMoving(null);
|
|
|
|
- caster.doCast(sk);
|
|
|
|
- return true;
|
|
|
|
|
|
+ if ((sk.getTargetType() == L2TargetType.AURA) || (sk.getTargetType() == L2TargetType.BEHIND_AURA) || (sk.getTargetType() == L2TargetType.FRONT_AURA) || (sk.getTargetType() == L2TargetType.AURA_CORPSE_MOB))
|
|
|
|
+ {
|
|
|
|
+ clientStopMoving(null);
|
|
|
|
+ caster.doCast(sk);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
|
|
|
|
+ {
|
|
|
|
+ clientStopMoving(null);
|
|
|
|
+ caster.doCast(sk);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
- else if (sk.getTargetType() == L2TargetType.ONE)
|
|
|
|
- {
|
|
|
|
- L2Character target = effectTargetReconsider(sk, false);
|
|
|
|
- if (target != null)
|
|
|
|
|
|
+ else if (sk.getTargetType() == L2TargetType.ONE)
|
|
{
|
|
{
|
|
- clientStopMoving(null);
|
|
|
|
- caster.doCast(sk);
|
|
|
|
- return true;
|
|
|
|
|
|
+ L2Character target = effectTargetReconsider(sk, false);
|
|
|
|
+ if (target != null)
|
|
|
|
+ {
|
|
|
|
+ clientStopMoving(null);
|
|
|
|
+ caster.doCast(sk);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- break;
|
|
|
|
- }
|
|
|
|
- default:
|
|
|
|
- {
|
|
|
|
|
|
+
|
|
if (sk.hasEffectType(L2EffectType.DISPEL))
|
|
if (sk.hasEffectType(L2EffectType.DISPEL))
|
|
{
|
|
{
|
|
if (sk.getTargetType() == L2TargetType.ONE)
|
|
if (sk.getTargetType() == L2TargetType.ONE)
|