Avoid arrows dealing damage when the target hides behind something.

Contributed by Iris.
This commit is contained in:
MobiusDevelopment 2021-03-16 11:13:13 +00:00
parent e0e47e55c9
commit 42bc74e1ca
19 changed files with 323 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}