From 42bc74e1ca9f611c857de073b607b8c37a2cb1e0 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 16 Mar 2021 11:13:13 +0000 Subject: [PATCH] Avoid arrows dealing damage when the target hides behind something. Contributed by Iris. --- .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ .../gameserver/model/actor/Creature.java | 17 +++++++++++++++++ 19 files changed, 323 insertions(+) diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java index b644c502d8..2e5f1ff196 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java index b644c502d8..2e5f1ff196 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java index 4e1a992b17..f671bfe3a9 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java index 4e1a992b17..f671bfe3a9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java index 7a22a5a688..cd2066a465 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java index 7a22a5a688..cd2066a465 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java index 7a22a5a688..cd2066a465 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java index ab3b821e2e..229bf285b1 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3793,6 +3794,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/Creature.java index 2271329177..c6af00fbdd 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3793,6 +3794,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Creature.java index 2271329177..c6af00fbdd 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3793,6 +3794,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java index bac2c00ec7..e588e65e42 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java index bac2c00ec7..e588e65e42 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java index b14290a063..03730467aa 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java index f7daa1670a..35bf66cd37 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -155,6 +155,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3807,6 +3808,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java index f7daa1670a..35bf66cd37 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -155,6 +155,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3807,6 +3808,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java index d7ed439f88..b875281eee 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -155,6 +155,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3806,6 +3807,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java index bac2c00ec7..e588e65e42 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -154,6 +154,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3794,6 +3795,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java index 1d77cd171d..de485971aa 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -155,6 +155,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3809,6 +3810,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } } diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/Creature.java index 8974843bb8..292a6875d3 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -155,6 +155,7 @@ import org.l2jmobius.gameserver.network.serverpackets.SetupGauge; import org.l2jmobius.gameserver.network.serverpackets.SocialAction; import org.l2jmobius.gameserver.network.serverpackets.StatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.StopMove; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; @@ -3816,6 +3817,22 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else { + // Avoid arrows dealing damage when the target hides behind something. + if ((weapon != null) && weapon.getItemType().isRanged() && !GeoEngine.getInstance().canSeeTarget(this, target)) + { + if (target.isPlayer()) + { + final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_AVOIDED_C1_S_ATTACK); + sm.addString(getName()); + target.sendPacket(sm); + } + if (isPlayer()) + { + sendPacket(SystemMessageId.YOU_HAVE_MISSED); + } + continue; + } + onHitTarget(target, weapon, hit); } }