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

View File

@@ -66,7 +66,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
player.sendPacket(SystemMessageId.INVALID_TARGET);
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);
canTakeCastle = false;

View File

@@ -19,7 +19,6 @@ package handlers.targethandlers;
import org.l2jmobius.gameserver.handler.ITargetTypeHandler;
import org.l2jmobius.gameserver.model.WorldObject;
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.targets.TargetType;
import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -39,9 +38,10 @@ public class HolyThing implements ITargetTypeHandler
@Override
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)

View File

@@ -358,7 +358,7 @@ public class GeoEngine
*/
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;
}

View File

@@ -292,6 +292,15 @@ public abstract class WorldObject extends ListenersContainer implements IIdentif
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.
* @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);
}
/**
* Return False.
*/
@Override
public boolean isArtefact()
{
return true;
}
@Override
public boolean isAutoAttackable(Creature attacker)
{