Fixed capturing holy artefact under the shrine.

Thanks to Sahar.
This commit is contained in:
MobiusDevelopment 2019-11-07 23:34:43 +00:00
parent 7ba832c6a7
commit 6e1df8a43a
103 changed files with 391 additions and 208 deletions

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -356,7 +356,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor()) if (target.isDoor() || target.isArtefact())
{ {
return true; return true;
} }

View File

@ -134,7 +134,7 @@ public class TakeCastle implements ISkillHandler
{ {
sm.addString("You must be on castle ground to use this skill"); sm.addString("You must be on castle ground to use this skill");
} }
else if ((player.getTarget() == null) || !(player.getTarget() instanceof ArtefactInstance)) else if ((player.getTarget() == null) || !player.getTarget().isArtefact())
{ {
sm.addString("You can only use this skill on an artifact"); sm.addString("You can only use this skill on an artifact");
} }
@ -142,7 +142,7 @@ public class TakeCastle implements ISkillHandler
{ {
sm.addString("You can only use this skill during a siege."); sm.addString("You can only use this skill during a siege.");
} }
else if (!Util.checkIfInRange(200, player, player.getTarget(), true)) else if (!Util.checkIfInRange(200, player, player.getTarget(), true) || (Math.abs(player.getZ() - player.getTarget().getZ()) > 40))
{ {
sm.addString("You are not in range of the artifact."); sm.addString("You are not in range of the artifact.");
} }
@ -186,7 +186,7 @@ public class TakeCastle implements ISkillHandler
{ {
sm.addString("You must be on fort ground to use this skill"); sm.addString("You must be on fort ground to use this skill");
} }
else if ((player.getTarget() == null) && !(player.getTarget() instanceof ArtefactInstance)) else if ((player.getTarget() == null) && !player.getTarget().isArtefact())
{ {
sm.addString("You can only use this skill on an flagpole"); sm.addString("You can only use this skill on an flagpole");
} }

View File

@ -47,10 +47,12 @@ public class ArtefactInstance extends NpcInstance
super(objectId, template); super(objectId, template);
} }
/** @Override
* Return False.<BR> public boolean isArtefact()
* <BR> {
*/ return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {
@ -122,10 +124,4 @@ public class ArtefactInstance extends NpcInstance
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
} }
@Override
public boolean isArtefact()
{
return true;
}
} }

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
@ -31,7 +30,7 @@ public class Holy implements ITargetTypeHandler
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if (!(target instanceof ArtefactInstance)) if ((target == null) || !target.isArtefact())
{ {
return EMPTY_TARGET_LIST; return EMPTY_TARGET_LIST;
} }

View File

@ -356,7 +356,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -294,6 +294,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -42,9 +42,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -61,7 +61,7 @@ public class ConditionPlayerCanTakeCastle extends Condition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
return false; return false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, effected, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, effected, true) || (Math.abs(player.getZ() - effected.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
return false; return false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
@ -31,7 +30,7 @@ public class Holy implements ITargetTypeHandler
@Override @Override
public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target) public WorldObject[] getTargetList(Skill skill, Creature creature, boolean onlyFirst, Creature target)
{ {
if (!(target instanceof ArtefactInstance)) if ((target == null) || !target.isArtefact())
{ {
return EMPTY_TARGET_LIST; return EMPTY_TARGET_LIST;
} }

View File

@ -356,7 +356,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -294,6 +294,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -42,9 +42,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -61,7 +61,7 @@ public class ConditionPlayerCanTakeCastle extends Condition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
return false; return false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, effected, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, effected, true) || (Math.abs(player.getZ() - effected.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
return false; return false;

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

View File

@ -358,7 +358,7 @@ public class GeoEngine
*/ */
public boolean canSeeTarget(WorldObject origin, WorldObject target) public boolean canSeeTarget(WorldObject origin, WorldObject target)
{ {
if (target.isDoor() || (target.isCreature() && ((Creature) target).isFlying())) if (target.isDoor() || target.isArtefact() || (target.isCreature() && ((Creature) target).isFlying()))
{ {
return true; return true;
} }

View File

@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
return false; return false;
} }
/**
* Verify if object is instance of ArtefactInstance.
* @return {@code true} if object is instance of ArtefactInstance, {@code false} otherwise
*/
public boolean isArtefact()
{
return false;
}
/** /**
* Verify if object is instance of MonsterInstance. * Verify if object is instance of MonsterInstance.
* @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise * @return {@code true} if object is instance of MonsterInstance, {@code false} otherwise

View File

@ -54,9 +54,12 @@ public class ArtefactInstance extends Npc
getCastle().registerArtefact(this); getCastle().registerArtefact(this);
} }
/** @Override
* Return False. public boolean isArtefact()
*/ {
return true;
}
@Override @Override
public boolean isAutoAttackable(Creature attacker) public boolean isAutoAttackable(Creature attacker)
{ {

View File

@ -26,7 +26,6 @@ import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance; import org.l2jmobius.gameserver.model.actor.instance.FishermanInstance;
import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance; import org.l2jmobius.gameserver.model.actor.instance.FlyTerrainObjectInstance;
import org.l2jmobius.gameserver.model.actor.instance.GuardInstance; import org.l2jmobius.gameserver.model.actor.instance.GuardInstance;
@ -70,8 +69,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -105,8 +104,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance) // && !(obj instanceof FlyTerrainObjectInstance) //
&& !results.contains(obj.getId())) && !results.contains(obj.getId()))
{ {
@ -138,8 +137,8 @@ public class AdminMissingHtmls implements IAdminCommandHandler
{ {
if (obj.isNpc() // if (obj.isNpc() //
&& !obj.isMonster() // && !obj.isMonster() //
&& !(obj.isArtefact()) //
&& !(obj instanceof ObservationInstance) // && !(obj instanceof ObservationInstance) //
&& !(obj instanceof ArtefactInstance) //
&& !(obj instanceof FlyTerrainObjectInstance)) && !(obj instanceof FlyTerrainObjectInstance))
{ {
final Npc npc = (Npc) obj; final Npc npc = (Npc) obj;

View File

@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET); player.sendPacket(SystemMessageId.INVALID_TARGET);
canTakeCastle = false; canTakeCastle = false;
} }
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true)) else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 40))
{ {
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
canTakeCastle = false; canTakeCastle = false;

View File

@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler; import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject; import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.ArtefactInstance;
import org.l2jmobius.gameserver.model.skills.Skill; import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.targets.TargetType; import org.l2jmobius.gameserver.model.skills.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override @Override
public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage) public WorldObject getTarget(Creature creature, WorldObject selectedTarget, Skill skill, boolean forceUse, boolean dontMove, boolean sendMessage)
{ {
if (creature.getTarget() instanceof ArtefactInstance) final WorldObject target = creature.getTarget();
if ((target != null) && target.isArtefact())
{ {
return creature.getTarget(); return target;
} }
if (sendMessage) if (sendMessage)

Some files were not shown because too many files have changed in this diff Show More