Avoid front backstab visual character rotation.

This commit is contained in:
MobiusDevelopment 2021-11-07 11:53:34 +00:00
parent aee19fe012
commit ab19b0ba91
2 changed files with 32 additions and 46 deletions

View File

@ -122,7 +122,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import org.l2jmobius.gameserver.network.serverpackets.TargetUnselected; import org.l2jmobius.gameserver.network.serverpackets.TargetUnselected;
import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation;
import org.l2jmobius.gameserver.network.serverpackets.ValidateLocation;
import org.l2jmobius.gameserver.network.serverpackets.ValidateLocationInVehicle; import org.l2jmobius.gameserver.network.serverpackets.ValidateLocationInVehicle;
import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager;
import org.l2jmobius.gameserver.util.Util; import org.l2jmobius.gameserver.util.Util;
@ -7792,10 +7791,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public boolean isBehind(WorldObject target) public boolean isBehind(WorldObject target)
{ {
double angleChar; //
double angleTarget;
double angleDiff;
final double maxAngleDiff = 40;
if (target == null) if (target == null)
{ {
return false; return false;
@ -7803,23 +7798,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
if (target instanceof Creature) if (target instanceof Creature)
{ {
((Creature) target).sendPacket(new ValidateLocation(this)); // This was a Fix for avoid front backstab.
sendPacket(new ValidateLocation(((Creature) target))); // Removed for problem with visual char rotation.
// ((Creature) target).sendPacket(new ValidateLocation(this));
// sendPacket(new ValidateLocation(((Creature) target)));
final Creature target1 = (Creature) target; final Creature target1 = (Creature) target;
angleChar = Util.calculateAngleFrom(target1, this); double angleChar = Util.calculateAngleFrom(target1, this);
angleTarget = Util.convertHeadingToDegree(target1.getHeading()); double angleTarget = Util.convertHeadingToDegree(target1.getHeading());
angleDiff = angleChar - angleTarget; double angleDiff = angleChar - angleTarget;
final double maxAngleDiff = 40;
if (angleDiff <= (-360 + maxAngleDiff)) if (angleDiff <= (-360 + maxAngleDiff))
{ {
angleDiff += 360; angleDiff += 360;
} }
if (angleDiff >= (360 - maxAngleDiff)) if (angleDiff >= (360 - maxAngleDiff))
{ {
angleDiff -= 360; angleDiff -= 360;
} }
if (Math.abs(angleDiff) <= maxAngleDiff) if (Math.abs(angleDiff) <= maxAngleDiff)
{ {
return true; return true;
@ -7880,10 +7876,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public boolean isFront(WorldObject target) public boolean isFront(WorldObject target)
{ {
double angleChar;
double angleTarget;
double angleDiff;
final double maxAngleDiff = 40;
if (target == null) if (target == null)
{ {
return false; return false;
@ -7891,23 +7883,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
if (target instanceof Creature) if (target instanceof Creature)
{ {
((Creature) target).sendPacket(new ValidateLocation(this)); // This was a Fix for avoid front backstab.
sendPacket(new ValidateLocation(((Creature) target))); // Removed for problem with visual char rotation.
// ((Creature) target).sendPacket(new ValidateLocation(this));
// sendPacket(new ValidateLocation(((Creature) target)));
final Creature target1 = (Creature) target; final Creature target1 = (Creature) target;
angleChar = Util.calculateAngleFrom(target1, this); double angleChar = Util.calculateAngleFrom(target1, this);
angleTarget = Util.convertHeadingToDegree(target1.getHeading()); double angleTarget = Util.convertHeadingToDegree(target1.getHeading());
angleDiff = angleChar - angleTarget; double angleDiff = angleChar - angleTarget;
final double maxAngleDiff = 40;
if (angleDiff <= (-180 + maxAngleDiff)) if (angleDiff <= (-180 + maxAngleDiff))
{ {
angleDiff += 180; angleDiff += 180;
} }
if (angleDiff >= (180 - maxAngleDiff)) if (angleDiff >= (180 - maxAngleDiff))
{ {
angleDiff -= 180; angleDiff -= 180;
} }
if (Math.abs(angleDiff) <= maxAngleDiff) if (Math.abs(angleDiff) <= maxAngleDiff)
{ {
return !isBehind(_target); return !isBehind(_target);

View File

@ -124,7 +124,6 @@ import org.l2jmobius.gameserver.network.serverpackets.StopMove;
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import org.l2jmobius.gameserver.network.serverpackets.TargetUnselected; import org.l2jmobius.gameserver.network.serverpackets.TargetUnselected;
import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation; import org.l2jmobius.gameserver.network.serverpackets.TeleportToLocation;
import org.l2jmobius.gameserver.network.serverpackets.ValidateLocation;
import org.l2jmobius.gameserver.network.serverpackets.ValidateLocationInVehicle; import org.l2jmobius.gameserver.network.serverpackets.ValidateLocationInVehicle;
import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager;
import org.l2jmobius.gameserver.util.Util; import org.l2jmobius.gameserver.util.Util;
@ -7839,10 +7838,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public boolean isBehind(WorldObject target) public boolean isBehind(WorldObject target)
{ {
double angleChar; //
double angleTarget;
double angleDiff;
final double maxAngleDiff = 40;
if (target == null) if (target == null)
{ {
return false; return false;
@ -7850,23 +7845,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
if (target instanceof Creature) if (target instanceof Creature)
{ {
((Creature) target).sendPacket(new ValidateLocation(this)); // This was a Fix for avoid front backstab.
sendPacket(new ValidateLocation(((Creature) target))); // Removed for problem with visual char rotation.
// ((Creature) target).sendPacket(new ValidateLocation(this));
// sendPacket(new ValidateLocation(((Creature) target)));
final Creature target1 = (Creature) target; final Creature target1 = (Creature) target;
angleChar = Util.calculateAngleFrom(target1, this); double angleChar = Util.calculateAngleFrom(target1, this);
angleTarget = Util.convertHeadingToDegree(target1.getHeading()); double angleTarget = Util.convertHeadingToDegree(target1.getHeading());
angleDiff = angleChar - angleTarget; double angleDiff = angleChar - angleTarget;
final double maxAngleDiff = 40;
if (angleDiff <= (-360 + maxAngleDiff)) if (angleDiff <= (-360 + maxAngleDiff))
{ {
angleDiff += 360; angleDiff += 360;
} }
if (angleDiff >= (360 - maxAngleDiff)) if (angleDiff >= (360 - maxAngleDiff))
{ {
angleDiff -= 360; angleDiff -= 360;
} }
if (Math.abs(angleDiff) <= maxAngleDiff) if (Math.abs(angleDiff) <= maxAngleDiff)
{ {
return true; return true;
@ -7927,10 +7923,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
*/ */
public boolean isFront(WorldObject target) public boolean isFront(WorldObject target)
{ {
double angleChar;
double angleTarget;
double angleDiff;
final double maxAngleDiff = 40;
if (target == null) if (target == null)
{ {
return false; return false;
@ -7938,23 +7930,24 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
if (target instanceof Creature) if (target instanceof Creature)
{ {
((Creature) target).sendPacket(new ValidateLocation(this)); // This was a Fix for avoid front backstab.
sendPacket(new ValidateLocation(((Creature) target))); // Removed for problem with visual char rotation.
// ((Creature) target).sendPacket(new ValidateLocation(this));
// sendPacket(new ValidateLocation(((Creature) target)));
final Creature target1 = (Creature) target; final Creature target1 = (Creature) target;
angleChar = Util.calculateAngleFrom(target1, this); double angleChar = Util.calculateAngleFrom(target1, this);
angleTarget = Util.convertHeadingToDegree(target1.getHeading()); double angleTarget = Util.convertHeadingToDegree(target1.getHeading());
angleDiff = angleChar - angleTarget; double angleDiff = angleChar - angleTarget;
final double maxAngleDiff = 40;
if (angleDiff <= (-180 + maxAngleDiff)) if (angleDiff <= (-180 + maxAngleDiff))
{ {
angleDiff += 180; angleDiff += 180;
} }
if (angleDiff >= (180 - maxAngleDiff)) if (angleDiff >= (180 - maxAngleDiff))
{ {
angleDiff -= 180; angleDiff -= 180;
} }
if (Math.abs(angleDiff) <= maxAngleDiff) if (Math.abs(angleDiff) <= maxAngleDiff)
{ {
return !isBehind(_target); return !isBehind(_target);