Explorar o código

BETA: Minor speed rework.
* Also enabling keyboard movement when geodata is disabled and player is flying.

Rumen Nikiforov %!s(int64=11) %!d(string=hai) anos
pai
achega
3f02f68fe7

+ 21 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/NpcTable.java

@@ -47,6 +47,7 @@ import com.l2jserver.gameserver.model.base.ClassId;
 import com.l2jserver.gameserver.model.items.type.L2WeaponType;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.stats.BaseStats;
+import com.l2jserver.gameserver.model.stats.MoveType;
 
 public class NpcTable extends DocumentParser
 {
@@ -182,6 +183,26 @@ public class NpcTable extends DocumentParser
 										template.setParameters(set);
 										break;
 									}
+									case "speed":
+									{
+										for (Node b = c.getFirstChild(); b != null; b = b.getNextSibling())
+										{
+											attrs = b.getAttributes();
+											if ("run".equals(b.getNodeName()))
+											{
+												template.setBaseMoveSpeed(MoveType.RUN, parseFloat(attrs, "ground"));
+												template.setBaseMoveSpeed(MoveType.FAST_SWIM, parseFloat(attrs, "underWater"));
+												template.setBaseMoveSpeed(MoveType.FAST_FLY, parseFloat(attrs, "flying"));
+											}
+											else if ("walk".equals(b.getNodeName()))
+											{
+												template.setBaseMoveSpeed(MoveType.WALK, parseFloat(attrs, "ground"));
+												template.setBaseMoveSpeed(MoveType.SLOW_SWIM, parseFloat(attrs, "underWater"));
+												template.setBaseMoveSpeed(MoveType.SLOW_FLY, parseFloat(attrs, "flying"));
+											}
+										}
+										break;
+									}
 								}
 							}
 						}

+ 11 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/engines/DocumentParser.java

@@ -250,6 +250,17 @@ public abstract class DocumentParser
 		return Long.valueOf(n.getNamedItem(name).getNodeValue());
 	}
 	
+	/**
+	 * Parses the float.
+	 * @param n the named node map.
+	 * @param name the attribute name.
+	 * @return a parsed float.
+	 */
+	protected static float parseFloat(NamedNodeMap n, String name)
+	{
+		return Float.parseFloat(n.getNamedItem(name).getNodeValue());
+	}
+	
 	/**
 	 * Parses the double.
 	 * @param n the named node map.

+ 10 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -6858,6 +6858,11 @@ public abstract class L2Character extends L2Object implements ISkillsHolder
 		return getStat().getRunSpeed();
 	}
 	
+	public int getSwimRunSpeed()
+	{
+		return getStat().getSwimRunSpeed();
+	}
+	
 	public final int getShldDef()
 	{
 		return getStat().getShldDef();
@@ -6873,6 +6878,11 @@ public abstract class L2Character extends L2Object implements ISkillsHolder
 		return getStat().getWalkSpeed();
 	}
 	
+	public final int getSwimWalkSpeed()
+	{
+		return getStat().getSwimWalkSpeed();
+	}
+	
 	public int getWIT()
 	{
 		return getStat().getWIT();

+ 30 - 38
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/CharStat.java

@@ -24,10 +24,7 @@ import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.Elementals;
 import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.transform.TransformTemplate;
-import com.l2jserver.gameserver.model.items.L2Weapon;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
-import com.l2jserver.gameserver.model.items.type.L2WeaponType;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.stats.Calculator;
 import com.l2jserver.gameserver.model.stats.Env;
@@ -382,30 +379,16 @@ public class CharStat
 	
 	public float getMovementSpeedMultiplier()
 	{
-		return (getMoveSpeed() / getBaseMoveSpeed(getMoveType()));
+		return (getRunSpeed() / getBaseMoveSpeed(MoveType.RUN));
 	}
 	
 	/**
-	 * @param mt movement type
+	 * @param type movement type
 	 * @return the base move speed of given movement type.
 	 */
-	protected float getBaseMoveSpeed(MoveType mt)
+	public float getBaseMoveSpeed(MoveType type)
 	{
-		final TransformTemplate template = _activeChar.isTransformed() ? _activeChar.getTransformation().getTemplate(_activeChar.getActingPlayer()) : null;
-		return (float) (template != null ? template.getSpeed(mt) : _activeChar.getTemplate().getBaseMoveSpd(mt));
-	}
-	
-	public MoveType getMoveType()
-	{
-		if (_activeChar.isFlying())
-		{
-			return _activeChar.isRunning() ? MoveType.FAST_FLY : MoveType.SLOW_FLY;
-		}
-		else if (_activeChar.isInsideZone(ZoneId.WATER))
-		{
-			return _activeChar.isRunning() ? MoveType.FAST_SWIM : MoveType.SLOW_SWIM;
-		}
-		return _activeChar.isRunning() ? MoveType.RUN : MoveType.WALK;
+		return _activeChar.getTemplate().getBaseMoveSpeed(type);
 	}
 	
 	/**
@@ -471,18 +454,6 @@ public class CharStat
 	 */
 	public final int getPhysicalAttackRange()
 	{
-		if (_activeChar.isTransformed())
-		{
-			return _activeChar.getTemplate().getBaseAttackRange();
-		}
-		// Polearm handled here for now. Basically L2PcInstance could have a function
-		// similar to FuncBowAtkRange and NPC are defined in DP.
-		final L2Weapon weaponItem = _activeChar.getActiveWeaponItem();
-		if ((weaponItem != null) && (weaponItem.getItemType() == L2WeaponType.POLE))
-		{
-			return (int) calcStat(Stats.POWER_ATTACK_RANGE, 66);
-		}
-		
 		return (int) calcStat(Stats.POWER_ATTACK_RANGE, _activeChar.getTemplate().getBaseAttackRange());
 	}
 	
@@ -500,10 +471,18 @@ public class CharStat
 	 */
 	public int getRunSpeed()
 	{
-		// err we should be adding TO the persons run speed
-		// not making it a constant
-		double baseRunSpd = getBaseMoveSpeed(MoveType.RUN);
+		final float baseRunSpd = _activeChar.isInsideZone(ZoneId.WATER) ? getSwimRunSpeed() : getBaseMoveSpeed(MoveType.RUN);
+		if (baseRunSpd == 0)
+		{
+			return 0;
+		}
 		
+		return (int) Math.round(calcStat(Stats.MOVE_SPEED, baseRunSpd, null, null));
+	}
+	
+	public int getSwimRunSpeed()
+	{
+		final float baseRunSpd = getBaseMoveSpeed(MoveType.FAST_SWIM);
 		if (baseRunSpd == 0)
 		{
 			return 0;
@@ -543,14 +522,27 @@ public class CharStat
 	 */
 	public int getWalkSpeed()
 	{
-		double baseWalkSpd = getBaseMoveSpeed(MoveType.WALK);
+		final float baseWalkSpd = _activeChar.isInsideZone(ZoneId.WATER) ? getSwimWalkSpeed() : getBaseMoveSpeed(MoveType.WALK);
+		if (baseWalkSpd == 0)
+		{
+			return 0;
+		}
 		
+		return (int) Math.round(calcStat(Stats.MOVE_SPEED, baseWalkSpd));
+	}
+	
+	/**
+	 * @return the WalkSpeed (base+modifier) of the L2Character.
+	 */
+	public int getSwimWalkSpeed()
+	{
+		final float baseWalkSpd = getBaseMoveSpeed(MoveType.SLOW_SWIM);
 		if (baseWalkSpd == 0)
 		{
 			return 0;
 		}
 		
-		return (int) calcStat(Stats.MOVE_SPEED, baseWalkSpd);
+		return (int) Math.round(calcStat(Stats.MOVE_SPEED, baseWalkSpd));
 	}
 	
 	/**

+ 0 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/NpcStat.java

@@ -19,8 +19,6 @@
 package com.l2jserver.gameserver.model.actor.stat;
 
 import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.stats.MoveType;
-import com.l2jserver.gameserver.model.stats.Stats;
 
 public class NpcStat extends CharStat
 {
@@ -40,10 +38,4 @@ public class NpcStat extends CharStat
 	{
 		return (L2Npc) super.getActiveChar();
 	}
-	
-	@Override
-	public int getWalkSpeed()
-	{
-		return (int) calcStat(Stats.MOVE_SPEED, getActiveChar().getTemplate().getBaseMoveSpd(MoveType.WALK), null, null);
-	}
 }

+ 44 - 79
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/PcStat.java

@@ -22,20 +22,18 @@ import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.ExperienceTable;
 import com.l2jserver.gameserver.datatables.NpcTable;
 import com.l2jserver.gameserver.datatables.PetDataTable;
-import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.L2PetLevelData;
 import com.l2jserver.gameserver.model.PcCondOverride;
-import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2ClassMasterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.actor.transform.TransformTemplate;
 import com.l2jserver.gameserver.model.entity.RecoBonus;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.stats.Formulas;
 import com.l2jserver.gameserver.model.stats.MoveType;
 import com.l2jserver.gameserver.model.stats.Stats;
 import com.l2jserver.gameserver.model.zone.ZoneId;
-import com.l2jserver.gameserver.model.zone.type.L2SwampZone;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
 import com.l2jserver.gameserver.network.serverpackets.ExVitalityPointInfo;
@@ -501,50 +499,55 @@ public class PcStat extends PlayableStat
 	}
 	
 	/**
-	 * @param mt movement type
+	 * @param type movement type
 	 * @return the base move speed of given movement type.
 	 */
 	@Override
-	protected float getBaseMoveSpeed(MoveType mt)
+	public float getBaseMoveSpeed(MoveType type)
 	{
-		L2PcInstance player = getActiveChar();
-		float val = 0;
+		final L2PcInstance player = getActiveChar();
+		float val = super.getBaseMoveSpeed(type);
 		
-		final L2PetLevelData data = getActiveChar().isMounted() ? PetDataTable.getInstance().getPetLevelData(getActiveChar().getMountNpcId(), getActiveChar().getMountLevel()) : null;
-		if (player.isInsideZone(ZoneId.WATER))
+		if (getActiveChar().isTransformed())
 		{
-			if (player.isMounted())
+			final TransformTemplate template = getActiveChar().getTransformation().getTemplate(getActiveChar());
+			if (template != null)
 			{
-				val = data != null ? data.getSpeedOnRide(mt) : NpcTable.getInstance().getTemplate(getActiveChar().getMountNpcId()).getBaseMoveSpd(mt);
-			}
-			else
-			{
-				val = player.getTemplate().getBaseMoveSpd(mt);
+				return template.getBaseMoveSpeed(type);
 			}
 		}
-		else
+		else if (player.isMounted())
 		{
-			val = player.isMounted() ? data != null ? data.getSpeedOnRide(mt) : NpcTable.getInstance().getTemplate(getActiveChar().getMountNpcId()).getBaseMoveSpd(mt) : player.getTemplate().getBaseMoveSpd(mt);
-			
-			if (player.isInsideZone(ZoneId.SWAMP))
+			final L2PetLevelData data = PetDataTable.getInstance().getPetLevelData(getActiveChar().getMountNpcId(), getActiveChar().getMountLevel());
+			if (data != null)
 			{
-				L2SwampZone zone = ZoneManager.getInstance().getZone(getActiveChar(), L2SwampZone.class);
-				int bonus = zone == null ? 0 : zone.getMoveBonus();
-				double dbonus = bonus / 100.0; // %
-				val += val * dbonus;
+				return data.getSpeedOnRide(type);
 			}
 		}
+		return val;
+	}
+	
+	@Override
+	public int getRunSpeed()
+	{
+		int val = super.getRunSpeed() + Config.RUN_SPD_BOOST;
+		
+		// Apply max run speed cap.
+		if ((val > Config.MAX_RUN_SPEED) && !getActiveChar().canOverrideCond(PcCondOverride.MAX_STATS_VALUE))
+		{
+			return Config.MAX_RUN_SPEED;
+		}
 		
 		// Check for mount penalties
-		if (player.isMounted())
+		if (getActiveChar().isMounted())
 		{
 			// if level diff with mount >= 10, it decreases move speed by 50%
-			if ((player.getMountLevel() - player.getLevel()) >= 10)
+			if ((getActiveChar().getMountLevel() - getActiveChar().getLevel()) >= 10)
 			{
 				val /= 2;
 			}
 			// if mount is hungry, it decreases move speed by 50%
-			if (player.isHungry())
+			if (getActiveChar().isHungry())
 			{
 				val /= 2;
 			}
@@ -554,15 +557,9 @@ public class PcStat extends PlayableStat
 	}
 	
 	@Override
-	public int getRunSpeed()
+	public int getWalkSpeed()
 	{
-		if (getActiveChar() == null)
-		{
-			return 1;
-		}
-		
-		int val = super.getRunSpeed();
-		val += Config.RUN_SPD_BOOST;
+		int val = super.getWalkSpeed() + Config.RUN_SPD_BOOST;
 		
 		// Apply max run speed cap.
 		if ((val > Config.MAX_RUN_SPEED) && !getActiveChar().canOverrideCond(PcCondOverride.MAX_STATS_VALUE))
@@ -570,24 +567,18 @@ public class PcStat extends PlayableStat
 			return Config.MAX_RUN_SPEED;
 		}
 		
-		return val;
-	}
-	
-	@Override
-	public int getWalkSpeed()
-	{
-		if (getActiveChar() == null)
-		{
-			return 1;
-		}
-		
-		int val = super.getWalkSpeed();
-		val += Config.RUN_SPD_BOOST;
-		
-		// Apply max run speed cap.
-		if ((val > Config.MAX_RUN_SPEED) && !getActiveChar().canOverrideCond(PcCondOverride.MAX_STATS_VALUE))
+		if (getActiveChar().isMounted())
 		{
-			return Config.MAX_RUN_SPEED;
+			// if level diff with mount >= 10, it decreases move speed by 50%
+			if ((getActiveChar().getMountLevel() - getActiveChar().getLevel()) >= 10)
+			{
+				val /= 2;
+			}
+			// if mount is hungry, it decreases move speed by 50%
+			if (getActiveChar().isHungry())
+			{
+				val /= 2;
+			}
 		}
 		
 		return val;
@@ -606,40 +597,14 @@ public class PcStat extends PlayableStat
 		return val;
 	}
 	
-	@Override
-	public int getEvasionRate(L2Character target)
-	{
-		int val = super.getEvasionRate(target);
-		
-		if ((val > Config.MAX_EVASION) && !getActiveChar().canOverrideCond(PcCondOverride.MAX_STATS_VALUE))
-		{
-			return Config.MAX_EVASION;
-		}
-		
-		return val;
-	}
-	
-	@Override
-	public int getMAtkSpd()
-	{
-		int val = super.getMAtkSpd();
-		
-		if ((val > Config.MAX_MATK_SPEED) && !getActiveChar().canOverrideCond(PcCondOverride.MAX_STATS_VALUE))
-		{
-			return Config.MAX_MATK_SPEED;
-		}
-		
-		return val;
-	}
-	
 	@Override
 	public float getMovementSpeedMultiplier()
 	{
 		if (getActiveChar().isMounted())
 		{
 			final L2PetLevelData data = PetDataTable.getInstance().getPetLevelData(getActiveChar().getMountNpcId(), getActiveChar().getMountLevel());
-			float baseSpeed = data != null ? data.getSpeedOnRide(getActiveChar().isRunning() ? MoveType.RUN : MoveType.WALK) : NpcTable.getInstance().getTemplate(getActiveChar().getMountNpcId()).getBaseMoveSpd(getActiveChar().isRunning() ? MoveType.RUN : MoveType.WALK);
-			return (getMoveSpeed() / baseSpeed);
+			float baseSpeed = data != null ? data.getSpeedOnRide(MoveType.RUN) : NpcTable.getInstance().getTemplate(getActiveChar().getMountNpcId()).getBaseMoveSpeed(MoveType.RUN);
+			return (getRunSpeed() / baseSpeed);
 		}
 		
 		return super.getMovementSpeedMultiplier();

+ 17 - 12
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/PlayableStat.java

@@ -27,7 +27,6 @@ import com.l2jserver.gameserver.instancemanager.ZoneManager;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
-import com.l2jserver.gameserver.model.stats.MoveType;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.model.zone.type.L2SwampZone;
 import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
@@ -234,23 +233,29 @@ public class PlayableStat extends CharStat
 		return level;
 	}
 	
-	/**
-	 * @param mt movement type
-	 * @return the base move speed of given movement type.
-	 */
 	@Override
-	protected float getBaseMoveSpeed(MoveType mt)
+	public int getRunSpeed()
 	{
-		float val = super.getBaseMoveSpeed(mt);
-		
+		int val = super.getRunSpeed();
 		if (getActiveChar().isInsideZone(ZoneId.SWAMP))
 		{
-			L2SwampZone zone = ZoneManager.getInstance().getZone(getActiveChar(), L2SwampZone.class);
+			final L2SwampZone zone = ZoneManager.getInstance().getZone(getActiveChar(), L2SwampZone.class);
 			int bonus = zone == null ? 0 : zone.getMoveBonus();
-			double dbonus = bonus / 100.0; // %
-			val += val * dbonus;
+			val += val * (bonus / 100.0f);
+		}
+		return val;
+	}
+	
+	@Override
+	public int getWalkSpeed()
+	{
+		int val = super.getWalkSpeed();
+		if (getActiveChar().isInsideZone(ZoneId.SWAMP))
+		{
+			final L2SwampZone zone = ZoneManager.getInstance().getZone(getActiveChar(), L2SwampZone.class);
+			int bonus = zone == null ? 0 : zone.getMoveBonus();
+			val += val * (bonus / 100.0f);
 		}
-		
 		return val;
 	}
 	

+ 10 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2CharTemplate.java

@@ -183,10 +183,10 @@ public class L2CharTemplate
 		
 		// speed.
 		Arrays.fill(_moveType, 1);
-		_moveType[MoveType.RUN.ordinal()] = set.getInteger("baseRunSpd", 1);
-		_moveType[MoveType.WALK.ordinal()] = set.getInteger("baseWalkSpd", 1);
-		_moveType[MoveType.FAST_SWIM.ordinal()] = set.getInteger("baseSwimRunSpd", 1);
-		_moveType[MoveType.SLOW_SWIM.ordinal()] = set.getInteger("baseSwimWalkSpd", 1);
+		setBaseMoveSpeed(MoveType.RUN, set.getInteger("baseRunSpd", 1));
+		setBaseMoveSpeed(MoveType.WALK, set.getInteger("baseWalkSpd", 1));
+		setBaseMoveSpeed(MoveType.FAST_SWIM, set.getInteger("baseSwimRunSpd", 1));
+		setBaseMoveSpeed(MoveType.SLOW_SWIM, set.getInteger("baseSwimWalkSpd", 1));
 	}
 	
 	/**
@@ -469,7 +469,12 @@ public class L2CharTemplate
 		return _baseMCritRate;
 	}
 	
-	public float getBaseMoveSpd(MoveType mt)
+	public void setBaseMoveSpeed(MoveType type, float val)
+	{
+		_moveType[type.ordinal()] = val;
+	}
+	
+	public float getBaseMoveSpeed(MoveType mt)
 	{
 		return _moveType[mt.ordinal()];
 	}

+ 9 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/transform/TransformTemplate.java

@@ -49,7 +49,7 @@ public final class TransformTemplate
 	private List<AdditionalItemHolder> _additionalItems;
 	private Map<Integer, Integer> _baseDefense;
 	private Map<Integer, Double> _baseStats;
-	private Map<Integer, Double> _baseSpeed;
+	private Map<Integer, Float> _baseSpeed;
 	
 	private ExBasicActionList _list;
 	private final Map<Integer, TransformLevelData> _data = new LinkedHashMap<>(100);
@@ -61,12 +61,12 @@ public final class TransformTemplate
 		_baseAttackType = L2WeaponType.findByName(set.getString("attackType", "FIST"));
 		_baseRandomDamage = set.getDouble("randomDamage", 0);
 		
-		addSpeed(MoveType.WALK, set.getDouble("walk", 0));
-		addSpeed(MoveType.RUN, set.getDouble("run", 0));
-		addSpeed(MoveType.SLOW_SWIM, set.getDouble("waterWalk", 0));
-		addSpeed(MoveType.FAST_SWIM, set.getDouble("waterRun", 0));
-		addSpeed(MoveType.SLOW_FLY, set.getDouble("flyWalk", 0));
-		addSpeed(MoveType.FAST_FLY, set.getDouble("flyRun", 0));
+		addSpeed(MoveType.WALK, set.getFloat("walk", 0));
+		addSpeed(MoveType.RUN, set.getFloat("run", 0));
+		addSpeed(MoveType.SLOW_SWIM, set.getFloat("waterWalk", 0));
+		addSpeed(MoveType.FAST_SWIM, set.getFloat("waterRun", 0));
+		addSpeed(MoveType.SLOW_FLY, set.getFloat("flyWalk", 0));
+		addSpeed(MoveType.FAST_FLY, set.getFloat("flyRun", 0));
 		
 		addStats(Stats.POWER_ATTACK, set.getDouble("pAtk", 0));
 		addStats(Stats.MAGIC_ATTACK, set.getDouble("mAtk", 0));
@@ -94,7 +94,7 @@ public final class TransformTemplate
 		addDefense(Inventory.PAPERDOLL_NECK, set.getInteger("neck", 0));
 	}
 	
-	private void addSpeed(MoveType type, double val)
+	private void addSpeed(MoveType type, float val)
 	{
 		if (_baseSpeed == null)
 		{
@@ -103,7 +103,7 @@ public final class TransformTemplate
 		_baseSpeed.put(type.ordinal(), val);
 	}
 	
-	public double getSpeed(MoveType type)
+	public float getBaseMoveSpeed(MoveType type)
 	{
 		if ((_baseSpeed == null) || !_baseSpeed.containsKey(type.ordinal()))
 		{

+ 2 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/MoveBackwardToLocation.java

@@ -126,7 +126,8 @@ public class MoveBackwardToLocation extends L2GameClientPacket
 			return;
 		}
 		
-		if ((_moveMovement == 0) && (Config.GEODATA < 1)) // cursor movement without geodata is disabled
+		// Disable keyboard movement when geodata is not enabled and player is not flying.
+		if ((_moveMovement == 0) && (Config.GEODATA < 1) && !activeChar.isFlying())
 		{
 			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
 		}
@@ -141,10 +142,6 @@ public class MoveBackwardToLocation extends L2GameClientPacket
 				return;
 			}
 			activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(_targetX, _targetY, _targetZ));
-			
-			/*
-			 * if (activeChar.getParty() != null) activeChar.getParty().broadcastToPartyMembers(activeChar, new PartyMemberPosition(activeChar));
-			 */
 		}
 	}
 	

+ 29 - 33
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/AbstractNpcInfo.java

@@ -39,16 +39,14 @@ public abstract class AbstractNpcInfo extends L2GameServerPacket
 	protected int _idTemplate;
 	protected boolean _isAttackable, _isSummoned;
 	protected int _mAtkSpd, _pAtkSpd;
+	protected final int _runSpd, _walkSpd;
+	protected final int _swimRunSpd;
+	protected final int _swimWalkSpd;
+	protected final int _flRunSpd = 0;
+	protected final int _flWalkSpd = 0;
+	protected final int _flyRunSpd;
+	protected final int _flyWalkSpd;
 	protected float _moveMultiplier;
-	/**
-	 * Run speed, swimming run speed and flying run speed
-	 */
-	protected int _runSpd;
-	
-	/**
-	 * Walking speed, swimming walking speed and flying walking speed
-	 */
-	protected int _walkSpd;
 	
 	protected int _rhand, _lhand, _chest, _enchantEffect;
 	protected double _collisionHeight, _collisionRadius;
@@ -67,6 +65,10 @@ public abstract class AbstractNpcInfo extends L2GameServerPacket
 		_moveMultiplier = cha.getMovementSpeedMultiplier();
 		_runSpd = Math.round(cha.getRunSpeed() / _moveMultiplier);
 		_walkSpd = Math.round(cha.getWalkSpeed() / _moveMultiplier);
+		_swimRunSpd = cha.getSwimRunSpeed();
+		_swimWalkSpd = cha.getSwimWalkSpeed();
+		_flyRunSpd = cha.isFlying() ? _runSpd : 0;
+		_flyWalkSpd = cha.isFlying() ? _walkSpd : 0;
 	}
 	
 	/**
@@ -154,12 +156,12 @@ public abstract class AbstractNpcInfo extends L2GameServerPacket
 			writeD(_pAtkSpd);
 			writeD(_runSpd);
 			writeD(_walkSpd);
-			writeD(_runSpd); // swim run speed
-			writeD(_walkSpd); // swim walk speed
-			writeD(_runSpd); // swim run speed
-			writeD(_walkSpd); // swim walk speed
-			writeD(_runSpd); // fly run speed
-			writeD(_walkSpd); // fly run speed
+			writeD(_swimRunSpd);
+			writeD(_swimWalkSpd);
+			writeD(_flRunSpd);
+			writeD(_flWalkSpd);
+			writeD(_flyRunSpd);
+			writeD(_flyWalkSpd);
 			writeF(_moveMultiplier);
 			writeF(_npc.getAttackSpeedMultiplier());
 			writeF(_collisionRadius);
@@ -222,9 +224,6 @@ public abstract class AbstractNpcInfo extends L2GameServerPacket
 				_name = cha.getName();
 			}
 			_title = cha.getOwner() != null ? cha.getOwner().getName() : "";
-			_moveMultiplier = cha.getMovementSpeedMultiplier();
-			_runSpd = Math.round(cha.getRunSpeed() / _moveMultiplier);
-			_walkSpd = Math.round(cha.getWalkSpeed() / _moveMultiplier);
 		}
 		
 		@Override
@@ -243,12 +242,12 @@ public abstract class AbstractNpcInfo extends L2GameServerPacket
 			writeD(_pAtkSpd);
 			writeD(_runSpd);
 			writeD(_walkSpd);
-			writeD(_runSpd); // swim run speed
-			writeD(_walkSpd); // swim walk speed
-			writeD(_runSpd); // fly run speed
-			writeD(_walkSpd); // fly walk speed
-			writeD(_runSpd); // fly run speed
-			writeD(_walkSpd); // fly walk speed
+			writeD(_swimRunSpd);
+			writeD(_swimWalkSpd);
+			writeD(_flRunSpd);
+			writeD(_flWalkSpd);
+			writeD(_flyRunSpd);
+			writeD(_flyWalkSpd);
 			writeF(_moveMultiplier);
 			writeF(_trap.getAttackSpeedMultiplier());
 			writeF(_collisionRadius);
@@ -355,9 +354,6 @@ public abstract class AbstractNpcInfo extends L2GameServerPacket
 			_collisionHeight = cha.getTemplate().getfCollisionHeight();
 			_collisionRadius = cha.getTemplate().getfCollisionRadius();
 			_invisible = cha.getOwner() != null ? cha.getOwner().getAppearance().getInvisible() : false;
-			_moveMultiplier = cha.getMovementSpeedMultiplier();
-			_runSpd = Math.round(cha.getRunSpeed() / _moveMultiplier);
-			_walkSpd = Math.round(cha.getWalkSpeed() / _moveMultiplier);
 		}
 		
 		@Override
@@ -386,12 +382,12 @@ public abstract class AbstractNpcInfo extends L2GameServerPacket
 			writeD(_pAtkSpd);
 			writeD(_runSpd);
 			writeD(_walkSpd);
-			writeD(_runSpd); // swim run speed
-			writeD(_walkSpd); // swim walk speed
-			writeD(_runSpd); // fly run speed
-			writeD(_walkSpd); // fly walk speed
-			writeD(_runSpd); // fly run speed
-			writeD(_walkSpd); // fly walk speed
+			writeD(_swimRunSpd);
+			writeD(_swimWalkSpd);
+			writeD(_flRunSpd);
+			writeD(_flWalkSpd);
+			writeD(_flyRunSpd);
+			writeD(_flyWalkSpd);
 			writeF(_moveMultiplier);
 			writeF(_summon.getAttackSpeedMultiplier());
 			writeF(_collisionRadius);

+ 30 - 25
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/CharInfo.java

@@ -37,15 +37,15 @@ public class CharInfo extends L2GameServerPacket
 	private int _x, _y, _z, _heading;
 	private final int _mAtkSpd, _pAtkSpd;
 	
-	/**
-	 * Run speed, swimming run speed and flying run speed
-	 */
-	private final int _runSpd;
-	/**
-	 * Walking speed, swimming walking speed and flying walking speed
-	 */
-	private final int _walkSpd;
-	private final float _moveMultiplier, _attackSpeedMultiplier;
+	private final int _runSpd, _walkSpd;
+	private final int _swimRunSpd;
+	private final int _swimWalkSpd;
+	private final int _flRunSpd = 0;
+	private final int _flWalkSpd = 0;
+	private final int _flyRunSpd;
+	private final int _flyWalkSpd;
+	private final float _moveMultiplier;
+	private final float _attackSpeedMultiplier;
 	
 	private int _vehicleId, _airShipHelm;
 	
@@ -83,11 +83,16 @@ public class CharInfo extends L2GameServerPacket
 		_heading = _activeChar.getHeading();
 		_mAtkSpd = _activeChar.getMAtkSpd();
 		_pAtkSpd = _activeChar.getPAtkSpd();
-		_moveMultiplier = _activeChar.getMovementSpeedMultiplier();
 		_attackSpeedMultiplier = _activeChar.getAttackSpeedMultiplier();
-		_runSpd = (int) (_activeChar.getRunSpeed() / _moveMultiplier);
-		_walkSpd = (int) (_activeChar.getWalkSpeed() / _moveMultiplier);
 		_invisible = cha.getAppearance().getInvisible();
+		
+		_moveMultiplier = cha.getMovementSpeedMultiplier();
+		_runSpd = Math.round(cha.getRunSpeed() / _moveMultiplier);
+		_walkSpd = Math.round(cha.getWalkSpeed() / _moveMultiplier);
+		_swimRunSpd = cha.getSwimRunSpeed();
+		_swimWalkSpd = cha.getSwimWalkSpeed();
+		_flyRunSpd = cha.isFlying() ? _runSpd : 0;
+		_flyWalkSpd = cha.isFlying() ? _walkSpd : 0;
 	}
 	
 	public CharInfo(L2Decoy decoy)
@@ -135,12 +140,12 @@ public class CharInfo extends L2GameServerPacket
 				writeD(_pAtkSpd);
 				writeD(_runSpd);
 				writeD(_walkSpd);
-				writeD(_runSpd); // swim run speed
-				writeD(_walkSpd); // swim walk speed
-				writeD(_runSpd); // fly run speed
-				writeD(_walkSpd); // fly walk speed
-				writeD(_runSpd); // fly run speed ?
-				writeD(_walkSpd); // fly walk speed ?
+				writeD(_swimRunSpd);
+				writeD(_swimWalkSpd);
+				writeD(_flRunSpd);
+				writeD(_flWalkSpd);
+				writeD(_flyRunSpd);
+				writeD(_flyWalkSpd);
 				writeF(_moveMultiplier);
 				writeF(_attackSpeedMultiplier);
 				writeF(template.getfCollisionRadius());
@@ -272,13 +277,13 @@ public class CharInfo extends L2GameServerPacket
 			
 			writeD(_runSpd);
 			writeD(_walkSpd);
-			writeD(_runSpd); // swim run speed
-			writeD(_walkSpd); // swim walk speed
-			writeD(_runSpd); // fly run speed
-			writeD(_walkSpd); // fly walk speed
-			writeD(_runSpd); // fly run speed ?
-			writeD(_walkSpd); // fly walk speed ?
-			writeF(_activeChar.getMovementSpeedMultiplier()); // _activeChar.getProperMultiplier()
+			writeD(_swimRunSpd);
+			writeD(_swimWalkSpd);
+			writeD(_flRunSpd);
+			writeD(_flWalkSpd);
+			writeD(_flyRunSpd);
+			writeD(_flyWalkSpd);
+			writeF(_moveMultiplier);
 			writeF(_activeChar.getAttackSpeedMultiplier()); // _activeChar.getAttackSpeedMultiplier()
 			
 			writeF(_activeChar.getCollisionRadius());

+ 24 - 16
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/GMViewCharacterInfo.java

@@ -26,22 +26,30 @@ import com.l2jserver.gameserver.model.itemcontainer.Inventory;
 public class GMViewCharacterInfo extends L2GameServerPacket
 {
 	private final L2PcInstance _activeChar;
+	private final int _runSpd, _walkSpd;
+	private final int _swimRunSpd;
+	private final int _swimWalkSpd;
+	private final int _flRunSpd = 0;
+	private final int _flWalkSpd = 0;
+	private final int _flyRunSpd;
+	private final int _flyWalkSpd;
+	private final float _moveMultiplier;
 	
-	/**
-	 * @param character
-	 */
-	public GMViewCharacterInfo(L2PcInstance character)
+	public GMViewCharacterInfo(L2PcInstance cha)
 	{
-		_activeChar = character;
+		_activeChar = cha;
+		_moveMultiplier = cha.getMovementSpeedMultiplier();
+		_runSpd = Math.round(cha.getRunSpeed() / _moveMultiplier);
+		_walkSpd = Math.round(cha.getWalkSpeed() / _moveMultiplier);
+		_swimRunSpd = cha.getSwimRunSpeed();
+		_swimWalkSpd = cha.getSwimWalkSpeed();
+		_flyRunSpd = cha.isFlying() ? _runSpd : 0;
+		_flyWalkSpd = cha.isFlying() ? _walkSpd : 0;
 	}
 	
 	@Override
 	protected final void writeImpl()
 	{
-		float moveMultiplier = _activeChar.getMovementSpeedMultiplier();
-		int _runSpd = (int) (_activeChar.getRunSpeed() / moveMultiplier);
-		int _walkSpd = (int) (_activeChar.getWalkSpeed() / moveMultiplier);
-		
 		writeC(0x95);
 		
 		writeD(_activeChar.getX());
@@ -206,13 +214,13 @@ public class GMViewCharacterInfo extends L2GameServerPacket
 		
 		writeD(_runSpd);
 		writeD(_walkSpd);
-		writeD(_runSpd); // swimspeed
-		writeD(_walkSpd); // swimspeed
-		writeD(_runSpd);
-		writeD(_walkSpd);
-		writeD(_runSpd);
-		writeD(_walkSpd);
-		writeF(moveMultiplier);
+		writeD(_swimRunSpd);
+		writeD(_swimWalkSpd);
+		writeD(_flRunSpd);
+		writeD(_flWalkSpd);
+		writeD(_flyRunSpd);
+		writeD(_flyWalkSpd);
+		writeF(_moveMultiplier);
 		writeF(_activeChar.getAttackSpeedMultiplier()); // 2.9);//
 		writeF(_activeChar.getCollisionRadius()); // scale
 		writeF(_activeChar.getCollisionHeight()); // y offset ??!? fem dwarf 4033

+ 29 - 30
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/PetInfo.java

@@ -29,46 +29,46 @@ public class PetInfo extends L2GameServerPacket
 	private final boolean _isSummoned;
 	private final int _val;
 	private final int _mAtkSpd, _pAtkSpd;
-	private final int _runSpd, _walkSpd, _swimRunSpd, _swimWalkSpd;
-	private int _flRunSpd;
-	private int _flWalkSpd;
-	private int _flyRunSpd;
-	private int _flyWalkSpd;
+	private final int _runSpd, _walkSpd;
+	private final int _swimRunSpd;
+	private final int _swimWalkSpd;
+	private final int _flRunSpd = 0;
+	private final int _flWalkSpd = 0;
+	private final int _flyRunSpd;
+	private final int _flyWalkSpd;
+	private final float _moveMultiplier;
 	private final int _maxHp, _maxMp;
 	private int _maxFed, _curFed;
-	private final float _moveMultiplier;
 	
-	/**
-	 * @param summon
-	 * @param val
-	 */
 	public PetInfo(L2Summon summon, int val)
 	{
 		_summon = summon;
-		_isSummoned = _summon.isShowSummonAnimation();
-		_x = _summon.getX();
-		_y = _summon.getY();
-		_z = _summon.getZ();
-		_heading = _summon.getHeading();
-		_mAtkSpd = _summon.getMAtkSpd();
-		_pAtkSpd = _summon.getPAtkSpd();
-		_moveMultiplier = _summon.getMovementSpeedMultiplier();
-		_runSpd = Math.round(_summon.getRunSpeed() / _moveMultiplier);
-		_walkSpd = Math.round(_summon.getWalkSpeed() / _moveMultiplier);
-		_swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd;
-		_swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd;
-		_maxHp = _summon.getMaxHp();
-		_maxMp = _summon.getMaxMp();
+		_isSummoned = summon.isShowSummonAnimation();
+		_x = summon.getX();
+		_y = summon.getY();
+		_z = summon.getZ();
+		_heading = summon.getHeading();
+		_mAtkSpd = summon.getMAtkSpd();
+		_pAtkSpd = summon.getPAtkSpd();
+		_moveMultiplier = summon.getMovementSpeedMultiplier();
+		_runSpd = Math.round(summon.getRunSpeed() / _moveMultiplier);
+		_walkSpd = Math.round(summon.getWalkSpeed() / _moveMultiplier);
+		_swimRunSpd = summon.getSwimRunSpeed();
+		_swimWalkSpd = summon.getSwimWalkSpeed();
+		_flyRunSpd = summon.isFlying() ? _runSpd : 0;
+		_flyWalkSpd = summon.isFlying() ? _walkSpd : 0;
+		_maxHp = summon.getMaxHp();
+		_maxMp = summon.getMaxMp();
 		_val = val;
-		if (_summon instanceof L2PetInstance)
+		if (summon.isPet())
 		{
-			L2PetInstance pet = (L2PetInstance) _summon;
+			final L2PetInstance pet = (L2PetInstance) summon;
 			_curFed = pet.getCurrentFed(); // how fed it is
 			_maxFed = pet.getMaxFed(); // max fed it can be
 		}
-		else if (_summon instanceof L2ServitorInstance)
+		else if (summon.isServitor())
 		{
-			L2ServitorInstance sum = (L2ServitorInstance) _summon;
+			final L2ServitorInstance sum = (L2ServitorInstance) _summon;
 			_curFed = sum.getTimeRemaining();
 			_maxFed = sum.getTotalLifeTime();
 		}
@@ -98,8 +98,7 @@ public class PetInfo extends L2GameServerPacket
 		writeD(_flWalkSpd);
 		writeD(_flyRunSpd);
 		writeD(_flyWalkSpd);
-		
-		writeF(_moveMultiplier); // movement multiplier
+		writeF(_moveMultiplier);
 		writeF(_summon.getAttackSpeedMultiplier()); // attack speed multiplier
 		writeF(_summon.getTemplate().getfCollisionRadius());
 		writeF(_summon.getTemplate().getfCollisionHeight());

+ 26 - 27
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/UserInfo.java

@@ -34,32 +34,23 @@ import com.l2jserver.gameserver.model.itemcontainer.Inventory;
 public final class UserInfo extends L2GameServerPacket
 {
 	private final L2PcInstance _activeChar;
-	
-	/**
-	 * Run speed, swimming run speed and flying run speed
-	 */
-	private final int _runSpd;
-	/**
-	 * Walking speed, swimming walking speed and flying walking speed
-	 */
-	private final int _walkSpd;
 	private int _relation;
-	private final float _moveMultiplier;
-	// private int _territoryId;
-	// private boolean _isDisguised;
 	private int _airShipHelm;
 	
-	/**
-	 * @param character
-	 */
-	public UserInfo(L2PcInstance character)
+	private final int _runSpd, _walkSpd;
+	private final int _swimRunSpd;
+	private final int _swimWalkSpd;
+	private final int _flRunSpd = 0;
+	private final int _flWalkSpd = 0;
+	private final int _flyRunSpd;
+	private final int _flyWalkSpd;
+	private final float _moveMultiplier;
+	
+	public UserInfo(L2PcInstance cha)
 	{
-		_activeChar = character;
+		_activeChar = cha;
 		
-		_moveMultiplier = _activeChar.getMovementSpeedMultiplier();
-		_runSpd = Math.round(_activeChar.getRunSpeed() / _moveMultiplier);
-		_walkSpd = Math.round(_activeChar.getWalkSpeed() / _moveMultiplier);
-		int _territoryId = TerritoryWarManager.getInstance().getRegisteredTerritoryId(character);
+		int _territoryId = TerritoryWarManager.getInstance().getRegisteredTerritoryId(cha);
 		_relation = _activeChar.isClanLeader() ? 0x40 : 0;
 		if (_activeChar.getSiegeState() == 1)
 		{
@@ -85,6 +76,14 @@ public final class UserInfo extends L2GameServerPacket
 		{
 			_airShipHelm = 0;
 		}
+		
+		_moveMultiplier = cha.getMovementSpeedMultiplier();
+		_runSpd = Math.round(cha.getRunSpeed() / _moveMultiplier);
+		_walkSpd = Math.round(cha.getWalkSpeed() / _moveMultiplier);
+		_swimRunSpd = cha.getSwimRunSpeed();
+		_swimWalkSpd = cha.getSwimWalkSpeed();
+		_flyRunSpd = cha.isFlying() ? _runSpd : 0;
+		_flyWalkSpd = cha.isFlying() ? _walkSpd : 0;
 	}
 	
 	@Override
@@ -227,12 +226,12 @@ public final class UserInfo extends L2GameServerPacket
 		
 		writeD(_runSpd);
 		writeD(_walkSpd);
-		writeD(_runSpd); // swim run speed
-		writeD(_walkSpd); // swim walk speed
-		writeD(0x00);
-		writeD(0x00);
-		writeD(_activeChar.isFlying() ? _runSpd : 0); // fly speed
-		writeD(_activeChar.isFlying() ? _walkSpd : 0); // fly speed
+		writeD(_swimRunSpd);
+		writeD(_swimWalkSpd);
+		writeD(_flRunSpd);
+		writeD(_flWalkSpd);
+		writeD(_flyRunSpd);
+		writeD(_flyWalkSpd);
 		writeF(_moveMultiplier);
 		writeF(_activeChar.getAttackSpeedMultiplier());