2
0
Эх сурвалжийг харах

BETA: Rework of calculateDistance methods inside Util.
* Moved a copy of them to L2Object, for easier usage.
* Removed a lot of similar methods from L2Character.
* Reviewed by: Zoey76, UnAfraid, jurchiks

xban1x 11 жил өмнө
parent
commit
b576648a23
17 өөрчлөгдсөн 81 нэмэгдсэн , 169 устгасан
  1. 13 13
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2AttackableAI.java
  2. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2ControllableMobAI.java
  3. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java
  4. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2SiegeGuardAI.java
  5. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/WalkingManager.java
  6. 28 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java
  7. 2 91
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java
  8. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/tasks/cubics/CubicAction.java
  9. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionMinDistance.java
  10. 1 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java
  11. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/SkillChannelizer.java
  12. 1 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java
  13. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/AnswerCoupleAction.java
  14. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestActionUse.java
  15. 1 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/TradeDone.java
  16. 1 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/TradeRequest.java
  17. 23 42
      L2J_Server_BETA/java/com/l2jserver/gameserver/util/Util.java

+ 13 - 13
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -589,7 +589,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				npc.setWalking();
 			}
 			
-			if (npc.getPlanDistanceSq(leader) > (offset * offset))
+			if (npc.calculateDistance(leader, false, true) > (offset * offset))
 			{
 				int x1, y1, z1;
 				x1 = Rnd.get(minRadius * 2, offset * 2); // x
@@ -652,7 +652,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				z1 = p[2];
 				
 				// Calculate the distance between the current position of the L2Character and the target (x,y)
-				double distance2 = npc.getPlanDistanceSq(x1, y1);
+				double distance2 = npc.calculateDistance(x1, y1, 0, false, true);
 				
 				if (distance2 > ((range + range) * (range + range)))
 				{
@@ -903,7 +903,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 			if (Rnd.get(100) <= npc.getCanDodge())
 			{
 				// Micht: kepping this one otherwise we should do 2 sqrt
-				double distance2 = npc.getPlanDistanceSq(mostHate.getX(), mostHate.getY());
+				double distance2 = npc.calculateDistance(mostHate, false, true);
 				if (Math.sqrt(distance2) <= (60 + combinedCollision))
 				{
 					int posX = npc.getX();
@@ -1168,7 +1168,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 			}
 		}
 		
-		double dist = Math.sqrt(npc.getPlanDistanceSq(mostHate.getX(), mostHate.getY()));
+		double dist = npc.calculateDistance(mostHate, false, false);
 		int dist2 = (int) dist - collision;
 		int range = npc.getPhysicalAttackRange() + combinedCollision;
 		if (mostHate.isMoving())
@@ -1356,7 +1356,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 		{
 			return false;
 		}
-		double dist = Math.sqrt(caster.getPlanDistanceSq(attackTarget.getX(), attackTarget.getY()));
+		double dist = caster.calculateDistance(attackTarget, false, false);
 		double dist2 = dist - attackTarget.getTemplate().getCollisionRadius();
 		double range = caster.getPhysicalAttackRange() + caster.getTemplate().getCollisionRadius() + attackTarget.getTemplate().getCollisionRadius();
 		double srange = sk.getCastRange() + caster.getTemplate().getCollisionRadius();
@@ -1832,7 +1832,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 			{
 				npc.setTarget(getAttackTarget());
 			}
-			dist = Math.sqrt(npc.getPlanDistanceSq(getAttackTarget().getX(), getAttackTarget().getY()));
+			dist = npc.calculateDistance(getAttackTarget(), false, false);
 			dist2 = dist - npc.getTemplate().getCollisionRadius();
 			range = npc.getPhysicalAttackRange() + npc.getTemplate().getCollisionRadius() + getAttackTarget().getTemplate().getCollisionRadius();
 			if (getAttackTarget().isMoving())
@@ -2083,7 +2083,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 					try
 					{
 						actor.setTarget(getAttackTarget());
-						dist = Math.sqrt(actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+						dist = actor.calculateDistance(obj, false, false);
 						dist2 = dist - actor.getTemplate().getCollisionRadius();
 						range = sk.getCastRange() + actor.getTemplate().getCollisionRadius() + obj.getTemplate().getCollisionRadius();
 						if (obj.isMoving())
@@ -2115,7 +2115,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 					try
 					{
 						actor.setTarget(getAttackTarget());
-						dist = Math.sqrt(actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+						dist = actor.calculateDistance(obj, false, false);
 						dist2 = dist;
 						range = sk.getCastRange() + actor.getTemplate().getCollisionRadius() + obj.getTemplate().getCollisionRadius();
 						if (obj.isMoving())
@@ -2173,7 +2173,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 					try
 					{
 						actor.setTarget(getAttackTarget());
-						dist = Math.sqrt(actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+						dist = actor.calculateDistance(obj, false, false);
 						dist2 = dist - actor.getTemplate().getCollisionRadius();
 						range = sk.getCastRange() + actor.getTemplate().getCollisionRadius() + obj.getTemplate().getCollisionRadius();
 						if (obj.isMoving())
@@ -2210,7 +2210,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				try
 				{
 					actor.setTarget(getAttackTarget());
-					dist = Math.sqrt(actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+					dist = actor.calculateDistance(obj, false, false);
 					dist2 = dist - actor.getTemplate().getCollisionRadius();
 					range = sk.getCastRange() + actor.getTemplate().getCollisionRadius() + obj.getTemplate().getCollisionRadius();
 					if (obj.isMoving())
@@ -2268,7 +2268,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				try
 				{
 					actor.setTarget(getAttackTarget());
-					dist = Math.sqrt(actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+					dist = actor.calculateDistance(obj, false, false);
 					dist2 = dist - actor.getTemplate().getCollisionRadius();
 					range = sk.getCastRange() + actor.getTemplate().getCollisionRadius() + getAttackTarget().getTemplate().getCollisionRadius();
 					// if(obj.isMoving())
@@ -2293,7 +2293,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				try
 				{
 					actor.setTarget(getAttackTarget());
-					dist = Math.sqrt(actor.getPlanDistanceSq(target.getX(), target.getY()));
+					dist = actor.calculateDistance(target, false, false);
 					dist2 = dist;
 					range = sk.getCastRange() + actor.getTemplate().getCollisionRadius() + getAttackTarget().getTemplate().getCollisionRadius();
 					// if(obj.isMoving())
@@ -2359,7 +2359,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				}
 				try
 				{
-					dist = Math.sqrt(actor.getPlanDistanceSq(obj.getX(), obj.getY()));
+					dist = actor.calculateDistance(obj, false, false);
 					dist2 = dist - actor.getTemplate().getCollisionRadius();
 					range = actor.getPhysicalAttackRange() + actor.getTemplate().getCollisionRadius() + obj.getTemplate().getCollisionRadius();
 					if (obj.isMoving())

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2ControllableMobAI.java

@@ -190,7 +190,7 @@ public class L2ControllableMobAI extends L2AttackableAI
 		L2ControllableMobAI ctrlAi = (L2ControllableMobAI) theTarget.getAI();
 		ctrlAi.forceAttack(_actor);
 		
-		double dist2 = _actor.getPlanDistanceSq(target.getX(), target.getY());
+		double dist2 = _actor.calculateDistance(target, false, true);
 		int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + target.getTemplate().getCollisionRadius();
 		int max_range = range;
 		
@@ -230,7 +230,7 @@ public class L2ControllableMobAI extends L2AttackableAI
 		}
 		
 		_actor.setTarget(getForcedTarget());
-		double dist2 = _actor.getPlanDistanceSq(getForcedTarget().getX(), getForcedTarget().getY());
+		double dist2 = _actor.calculateDistance(getForcedTarget(), false, true);
 		int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getForcedTarget().getTemplate().getCollisionRadius();
 		int max_range = range;
 		
@@ -305,7 +305,7 @@ public class L2ControllableMobAI extends L2AttackableAI
 			}
 			
 			_actor.setTarget(getAttackTarget());
-			double dist2 = _actor.getPlanDistanceSq(getAttackTarget().getX(), getAttackTarget().getY());
+			double dist2 = _actor.calculateDistance(getAttackTarget(), false, true);
 			int range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + getAttackTarget().getTemplate().getCollisionRadius();
 			int max_range = range;
 			

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java

@@ -564,7 +564,7 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 		{
 			_actor.setTarget(attackTarget);
 			skills = _actor.getAllSkills();
-			dist_2 = _actor.getPlanDistanceSq(attackTarget.getX(), attackTarget.getY());
+			dist_2 = _actor.calculateDistance(attackTarget, false, true);
 			range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + attackTarget.getTemplate().getCollisionRadius();
 			if (attackTarget.isMoving())
 			{

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2SiegeGuardAI.java

@@ -534,7 +534,7 @@ public class L2SiegeGuardAI extends L2CharacterAI implements Runnable
 		{
 			_actor.setTarget(attackTarget);
 			skills = _actor.getAllSkills();
-			dist_2 = _actor.getPlanDistanceSq(attackTarget.getX(), attackTarget.getY());
+			dist_2 = _actor.calculateDistance(attackTarget, false, true);
 			range = _actor.getPhysicalAttackRange() + _actor.getTemplate().getCollisionRadius() + attackTarget.getTemplate().getCollisionRadius();
 			if (attackTarget.isMoving())
 			{

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/WalkingManager.java

@@ -272,7 +272,7 @@ public final class WalkingManager extends DocumentParser
 					
 					if (!npc.isInsideRadius(node, 3000, true, false))
 					{
-						final String message = "Route '" + routeName + "': NPC (id=" + npc.getId() + ", x=" + npc.getX() + ", y=" + npc.getY() + ", z=" + npc.getZ() + ") is too far from starting point (node x=" + node.getX() + ", y=" + node.getY() + ", z=" + node.getZ() + ", range=" + npc.getDistanceSq(node.getX(), node.getY(), node.getZ()) + "), walking will not start";
+						final String message = "Route '" + routeName + "': NPC (id=" + npc.getId() + ", x=" + npc.getX() + ", y=" + npc.getY() + ", z=" + npc.getZ() + ") is too far from starting point (node x=" + node.getX() + ", y=" + node.getY() + ", z=" + node.getZ() + ", range=" + npc.calculateDistance(node, true, true) + "), walking will not start";
 						_log.warning(getClass().getSimpleName() + ": " + message);
 						npc.sendDebugMessage(message);
 						return;

+ 28 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java

@@ -37,6 +37,7 @@ import com.l2jserver.gameserver.model.actor.poly.ObjectPoly;
 import com.l2jserver.gameserver.model.entity.Instance;
 import com.l2jserver.gameserver.model.interfaces.IDecayable;
 import com.l2jserver.gameserver.model.interfaces.IIdentifiable;
+import com.l2jserver.gameserver.model.interfaces.ILocational;
 import com.l2jserver.gameserver.model.interfaces.INamable;
 import com.l2jserver.gameserver.model.interfaces.ISpawnable;
 import com.l2jserver.gameserver.model.interfaces.IUniqueId;
@@ -713,6 +714,33 @@ public abstract class L2Object extends Point3D implements IIdentifiable, INamabl
 		_worldRegion = value;
 	}
 	
+	/**
+	 * Calculates distance between this L2Object and given x, y , z.
+	 * @param x - X coordinate.
+	 * @param y - Y coordinate.
+	 * @param z - Z coordinate.
+	 * @param includeZAxis - If set to true, Z coordinate will be included.
+	 * @param squared - If set to true, distance returned will be squared.
+	 * @return {@code double} - Distance between object and given x, y , z.
+	 */
+	public double calculateDistance(int x, int y, int z, boolean includeZAxis, boolean squared)
+	{
+		final double distance = Math.pow(x - getX(), 2) + Math.pow(y - getY(), 2) + (includeZAxis ? Math.pow(z - getZ(), 2) : 0);
+		return (squared) ? distance : Math.sqrt(distance);
+	}
+	
+	/**
+	 * Calculates distance between this L2Object and given location.
+	 * @param loc - Location on map.
+	 * @param includeZAxis - If set to true, Z coordinate will be included.
+	 * @param squared - If set to true, distance returned will be squared.
+	 * @return {@code double} - Distance between object and given location.
+	 */
+	public double calculateDistance(ILocational loc, boolean includeZAxis, boolean squared)
+	{
+		return calculateDistance(loc.getX(), loc.getY(), loc.getZ(), includeZAxis, squared);
+	}
+	
 	@Override
 	public String toString()
 	{

+ 2 - 91
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -1187,7 +1187,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 			
 			// Bows Ranged Damage Formula (Damage gradually decreases when 60% or lower than full hit range, and increases when 60% or higher).
 			// full hit range is 500 which is the base bow range, and the 60% of this is 800.
-			damage1 *= (Math.sqrt(getDistanceSq(target)) / 4000) + 0.8;
+			damage1 *= (calculateDistance(target, true, false) / 4000) + 0.8;
 		}
 		
 		// Check if the L2Character is a L2PcInstance
@@ -4643,92 +4643,6 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		return result;
 	}
 	
-	/**
-	 * Return the distance between the current position of the L2Character and the target (x,y).
-	 * @param x X position of the target
-	 * @param y Y position of the target
-	 * @return the plan distance
-	 * @deprecated use getPlanDistanceSq(int x, int y, int z)
-	 */
-	@Deprecated
-	public final double getDistance(int x, int y)
-	{
-		double dx = x - getX();
-		double dy = y - getY();
-		
-		return Math.sqrt((dx * dx) + (dy * dy));
-	}
-	
-	/**
-	 * Return the distance between the current position of the L2Character and the target (x,y).
-	 * @param x X position of the target
-	 * @param y Y position of the target
-	 * @param z
-	 * @return the plan distance
-	 * @deprecated use getPlanDistanceSq(int x, int y, int z)
-	 */
-	@Deprecated
-	public final double getDistance(int x, int y, int z)
-	{
-		double dx = x - getX();
-		double dy = y - getY();
-		double dz = z - getZ();
-		
-		return Math.sqrt((dx * dx) + (dy * dy) + (dz * dz));
-	}
-	
-	/**
-	 * Return the squared distance between the current position of the L2Character and the given object.
-	 * @param object L2Object
-	 * @return the squared distance
-	 */
-	public final double getDistanceSq(L2Object object)
-	{
-		return getDistanceSq(object.getX(), object.getY(), object.getZ());
-	}
-	
-	/**
-	 * Return the squared distance between the current position of the L2Character and the given x, y, z.
-	 * @param x X position of the target
-	 * @param y Y position of the target
-	 * @param z Z position of the target
-	 * @return the squared distance
-	 */
-	public final double getDistanceSq(int x, int y, int z)
-	{
-		double dx = x - getX();
-		double dy = y - getY();
-		double dz = z - getZ();
-		
-		return ((dx * dx) + (dy * dy) + (dz * dz));
-	}
-	
-	/**
-	 * Return the squared plan distance between the current position of the L2Character and the given object.<BR>
-	 * (check only x and y, not z)
-	 * @param object L2Object
-	 * @return the squared plan distance
-	 */
-	public final double getPlanDistanceSq(L2Object object)
-	{
-		return getPlanDistanceSq(object.getX(), object.getY());
-	}
-	
-	/**
-	 * Return the squared plan distance between the current position of the L2Character and the given x, y, z.<BR>
-	 * (check only x and y, not z)
-	 * @param x X position of the target
-	 * @param y Y position of the target
-	 * @return the squared plan distance
-	 */
-	public final double getPlanDistanceSq(int x, int y)
-	{
-		double dx = x - getX();
-		double dy = y - getY();
-		
-		return ((dx * dx) + (dy * dy));
-	}
-	
 	/**
 	 * Check if this object is inside the given radius around the given point.
 	 * @param loc Location of the target
@@ -4754,10 +4668,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 */
 	public final boolean isInsideRadius(int x, int y, int z, int radius, boolean checkZAxis, boolean strictCheck)
 	{
-		final double dx = x - getX();
-		final double dy = y - getY();
-		final double dz = z - getZ();
-		final double distance = (dx * dx) + (dy * dy) + (checkZAxis ? (dz * dz) : 0);
+		final double distance = calculateDistance(x, y, z, checkZAxis, true);
 		return (strictCheck) ? (distance < (radius * radius)) : (distance <= (radius * radius));
 	}
 	

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/tasks/cubics/CubicAction.java

@@ -142,7 +142,7 @@ public final class CubicAction implements Runnable
 						if (Config.DEBUG)
 						{
 							_log.info("L2CubicInstance: Action.run();");
-							_log.info("Cubic ID: " + _cubic.getId() + " Target: " + target.getName() + " distance: " + Math.sqrt(target.getDistanceSq(_cubic.getOwner().getX(), _cubic.getOwner().getY(), _cubic.getOwner().getZ())));
+							_log.info("Cubic ID: " + _cubic.getId() + " Target: " + target.getName() + " distance: " + target.calculateDistance(_cubic.getOwner(), true, false));
 						}
 						
 						_cubic.getOwner().broadcastPacket(new MagicSkillUse(_cubic.getOwner(), target, skill.getId(), skill.getLevel(), 0, 0));

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionMinDistance.java

@@ -40,6 +40,6 @@ public class ConditionMinDistance extends Condition
 	@Override
 	public boolean testImpl(Env env)
 	{
-		return (env.getTarget() != null) && (env.getCharacter().getDistanceSq(env.getTarget()) >= _sqDistance);
+		return (env.getTarget() != null) && (env.getCharacter().calculateDistance(env.getTarget(), true, true) >= _sqDistance);
 	}
 }

+ 1 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java

@@ -1529,7 +1529,6 @@ public class Siege implements Siegable
 		if (!getSiegeGuardManager().getSiegeGuardSpawn().isEmpty())
 		{
 			L2ControlTowerInstance closestCt;
-			int x, y, z;
 			double distance;
 			double distanceClosest = 0;
 			for (L2Spawn spawn : getSiegeGuardManager().getSiegeGuardSpawn())
@@ -1542,10 +1541,6 @@ public class Siege implements Siegable
 				closestCt = null;
 				distanceClosest = Integer.MAX_VALUE;
 				
-				x = spawn.getX();
-				y = spawn.getY();
-				z = spawn.getZ();
-				
 				for (L2ControlTowerInstance ct : _controlTowers)
 				{
 					if (ct == null)
@@ -1553,7 +1548,7 @@ public class Siege implements Siegable
 						continue;
 					}
 					
-					distance = ct.getDistanceSq(x, y, z);
+					distance = ct.calculateDistance(spawn, true, true);
 					
 					if (distance < distanceClosest)
 					{

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/SkillChannelizer.java

@@ -277,7 +277,7 @@ public class SkillChannelizer implements Runnable
 					}
 					
 					// Target is too far.
-					if (Util.calculateDistance(x, y, z, cha.getX(), cha.getY(), cha.getZ(), true) > _skill.getAffectRange())
+					if (cha.calculateDistance(x, y, z, true, false) > _skill.getAffectRange())
 					{
 						continue;
 					}

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

@@ -528,7 +528,6 @@ public final class Formulas
 		return (cha.calcStat(Stats.REGENERATE_CP_RATE, Math.max(1, init), null, null) * cpRegenMultiplier) + cpRegenBonus;
 	}
 	
-	@SuppressWarnings("deprecation")
 	public static final double calcFestivalRegenModifier(L2PcInstance activeChar)
 	{
 		final int[] festivalInfo = SevenSignsFestival.getInstance().getFestivalForPlayer(activeChar);
@@ -553,7 +552,7 @@ public final class Formulas
 		}
 		
 		// Check the distance between the player and the player spawn point, in the center of the arena.
-		double distToCenter = activeChar.getDistance(festivalCenter[0], festivalCenter[1]);
+		double distToCenter = activeChar.calculateDistance(festivalCenter[0], festivalCenter[1], 0, false, false);
 		
 		if (Config.DEBUG)
 		{

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/AnswerCoupleAction.java

@@ -64,7 +64,7 @@ public class AnswerCoupleAction extends L2GameClientPacket
 		}
 		else if (_answer == 1) // approve
 		{
-			final int distance = (int) Math.sqrt(activeChar.getPlanDistanceSq(target));
+			final int distance = (int) activeChar.calculateDistance(target, false, false);
 			if ((distance > 125) || (distance < 15) || (activeChar.getObjectId() == target.getObjectId()))
 			{
 				sendPacket(SystemMessageId.TARGET_DO_NOT_MEET_LOC_REQUIREMENTS);

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestActionUse.java

@@ -955,7 +955,7 @@ public final class RequestActionUse extends L2GameClientPacket
 			return;
 		}
 		
-		final int distance = (int) Math.sqrt(requester.getPlanDistanceSq(target));
+		final int distance = (int) requester.calculateDistance(target, false, false);
 		if ((distance > 125) || (distance < 15) || (requester.getObjectId() == target.getObjectId()))
 		{
 			sendPacket(SystemMessageId.TARGET_DO_NOT_MEET_LOC_REQUIREMENTS);

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/TradeDone.java

@@ -23,7 +23,6 @@ import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.TradeList;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * This packet manages the trade response.
@@ -96,7 +95,7 @@ public final class TradeDone extends L2GameClientPacket
 				return;
 			}
 			
-			if (Util.calculateDistance(player, trade.getPartner(), true) > 150)
+			if (player.calculateDistance(trade.getPartner(), true, false) > 150)
 			{
 				player.cancelActiveTrade();
 				return;

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/TradeRequest.java

@@ -30,7 +30,6 @@ import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.SendTradeRequest;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
-import com.l2jserver.gameserver.util.Util;
 
 /**
  * This packet manages the trade request.
@@ -170,7 +169,7 @@ public final class TradeRequest extends L2GameClientPacket
 			return;
 		}
 		
-		if (Util.calculateDistance(player, partner, true) > 150)
+		if (player.calculateDistance(partner, true, false) > 150)
 		{
 			player.sendPacket(SystemMessageId.TARGET_TOO_FAR);
 			return;

+ 23 - 42
L2J_Server_BETA/java/com/l2jserver/gameserver/util/Util.java

@@ -42,6 +42,7 @@ import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.tasks.player.IllegalPlayerActionTask;
+import com.l2jserver.gameserver.model.interfaces.ILocational;
 import com.l2jserver.gameserver.network.serverpackets.AbstractHtmlPacket;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
@@ -133,54 +134,34 @@ public final class Util
 	}
 	
 	/**
-	 * @param x1
-	 * @param y1
-	 * @param x2
-	 * @param y2
-	 * @return the distance between the two coordinates in 2D plane
+	 * Calculates distance between one set of x, y, z and another set of x, y, z.
+	 * @param x1 - X coordinate of first point.
+	 * @param y1 - Y coordinate of first point.
+	 * @param z1 - Z coordinate of first point.
+	 * @param x2 - X coordinate of second point.
+	 * @param y2 - Y coordinate of second point.
+	 * @param z2 - Z coordinate of second point.
+	 * @param includeZAxis - If set to true, Z coordinates will be included.
+	 * @param squared - If set to true, distance returned will be squared.
+	 * @return {@code double} - Distance between object and given x, y , z.
 	 */
-	public static double calculateDistance(int x1, int y1, int x2, int y2)
+	public static double calculateDistance(int x1, int y1, int z1, int x2, int y2, int z2, boolean includeZAxis, boolean squared)
 	{
-		return calculateDistance(x1, y1, 0, x2, y2, 0, false);
+		final double distance = Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2) + (includeZAxis ? Math.pow(z1 - z2, 2) : 0);
+		return (squared) ? distance : Math.sqrt(distance);
 	}
 	
 	/**
-	 * @param x1
-	 * @param y1
-	 * @param z1
-	 * @param x2
-	 * @param y2
-	 * @param z2
-	 * @param includeZAxis - if true, includes also the Z axis in the calculation
-	 * @return the distance between the two coordinates
+	 * Calculates distance between 2 locations.
+	 * @param loc1 - First location.
+	 * @param loc2 - Second location.
+	 * @param includeZAxis - If set to true, Z coordinates will be included.
+	 * @param squared - If set to true, distance returned will be squared.
+	 * @return {@code double} - Distance between object and given location.
 	 */
-	public static double calculateDistance(int x1, int y1, int z1, int x2, int y2, int z2, boolean includeZAxis)
+	public static double calculateDistance(ILocational loc1, ILocational loc2, boolean includeZAxis, boolean squared)
 	{
-		double dx = (double) x1 - x2;
-		double dy = (double) y1 - y2;
-		
-		if (includeZAxis)
-		{
-			double dz = z1 - z2;
-			return Math.sqrt((dx * dx) + (dy * dy) + (dz * dz));
-		}
-		return Math.sqrt((dx * dx) + (dy * dy));
-	}
-	
-	/**
-	 * @param obj1
-	 * @param obj2
-	 * @param includeZAxis - if true, includes also the Z axis in the calculation
-	 * @return the distance between the two objects
-	 */
-	public static double calculateDistance(L2Object obj1, L2Object obj2, boolean includeZAxis)
-	{
-		if ((obj1 == null) || (obj2 == null))
-		{
-			return 1000000;
-		}
-		
-		return calculateDistance(obj1.getX(), obj1.getY(), obj1.getZ(), obj2.getX(), obj2.getY(), obj2.getZ(), includeZAxis);
+		return calculateDistance(loc1.getX(), loc1.getY(), loc1.getZ(), loc2.getX(), loc2.getY(), loc2.getZ(), includeZAxis, squared);
 	}
 	
 	/**
@@ -769,7 +750,7 @@ public final class Util
 			return false;
 		}
 		
-		if (Util.calculateDistance(obj, target, false) > radius)
+		if (obj.calculateDistance(target, false, false) > radius)
 		{
 			return false;
 		}