Ver código fonte

BETA: Fixing critical error when player enters inside a water.
* Reported by: lion

Rumen Nikiforov 11 anos atrás
pai
commit
383afafaf1

+ 8 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/CharTemplateTable.java

@@ -117,6 +117,14 @@ public final class CharTemplateTable extends DocumentParser
 									{
 										set.set("baseRunSpd", cnd.getTextContent());
 									}
+									else if ("slowSwim".equals(cnd.getNodeName()))
+									{
+										set.set("baseSwimWalkSpd", cnd.getTextContent());
+									}
+									else if ("fastSwim".equals(cnd.getNodeName()))
+									{
+										set.set("baseSwimRunSpd", cnd.getTextContent());
+									}
 									else if (!cnd.getNodeName().equals("#text"))
 									{
 										set.set((nd.getNodeName() + cnd.getNodeName()), cnd.getTextContent());

+ 3 - 19
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/PcStat.java

@@ -508,34 +508,18 @@ public class PcStat extends PlayableStat
 	protected float getBaseMoveSpeed(MoveType mt)
 	{
 		L2PcInstance player = getActiveChar();
-		int val = 0;
+		float val = 0;
 		
 		final L2PetLevelData data = getActiveChar().isMounted() ? PetDataTable.getInstance().getPetLevelData(getActiveChar().getMountNpcId(), getActiveChar().getMountLevel()) : null;
 		if (player.isInsideZone(ZoneId.WATER))
 		{
 			if (player.isMounted())
 			{
-				switch (mt)
-				{
-					case WALK:
-						val = data != null ? data.getSpeedOnRide(MoveType.SLOW_SWIM) : NpcTable.getInstance().getTemplate(getActiveChar().getMountNpcId()).getBaseMoveSpd(MoveType.SLOW_SWIM);
-						break;
-					case RUN:
-						val = data != null ? data.getSpeedOnRide(MoveType.FAST_SWIM) : NpcTable.getInstance().getTemplate(getActiveChar().getMountNpcId()).getBaseMoveSpd(MoveType.FAST_SWIM);
-						break;
-				}
+				val = data != null ? data.getSpeedOnRide(mt) : NpcTable.getInstance().getTemplate(getActiveChar().getMountNpcId()).getBaseMoveSpd(mt);
 			}
 			else
 			{
-				switch (mt)
-				{
-					case WALK:
-						val = player.getTemplate().getBaseSlowSwimSpd();
-						break;
-					case RUN:
-						val = player.getTemplate().getBaseFastSwimSpd();
-						break;
-				}
+				val = player.getTemplate().getBaseMoveSpd(mt);
 			}
 		}
 		else

+ 12 - 14
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2CharTemplate.java

@@ -18,6 +18,7 @@
  */
 package com.l2jserver.gameserver.model.actor.templates;
 
+import java.util.Arrays;
 import java.util.Map;
 
 import com.l2jserver.gameserver.model.StatsSet;
@@ -55,8 +56,6 @@ public class L2CharTemplate
 	private int _baseShldRate;
 	private int _baseCritRate;
 	private int _baseMCritRate;
-	private int _baseWalkSpd;
-	private int _baseRunSpd;
 	// SpecialStats
 	private int _baseBreath;
 	private int _baseAggression;
@@ -105,6 +104,8 @@ public class L2CharTemplate
 	private double _fCollisionRadius;
 	private double _fCollisionHeight;
 	
+	private final float[] _moveType = new float[MoveType.values().length];
+	
 	public L2CharTemplate(StatsSet set)
 	{
 		set(set);
@@ -137,8 +138,6 @@ public class L2CharTemplate
 		_baseShldRate = set.getInteger("baseShldRate", 0);
 		_baseCritRate = set.getInteger("baseCritRate", 4);
 		_baseMCritRate = set.getInteger("baseMCritRate", 0);
-		_baseWalkSpd = set.getInteger("baseWalkSpd", 0);
-		_baseRunSpd = set.getInteger("baseRunSpd", 0);
 		
 		// SpecialStats
 		_baseBreath = set.getInteger("baseBreath", 100);
@@ -181,6 +180,13 @@ public class L2CharTemplate
 		_fCollisionRadius = set.getDouble("collision_radius", 0);
 		_collisionRadius = (int) _fCollisionRadius;
 		_collisionHeight = (int) _fCollisionHeight;
+		
+		// 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);
 	}
 	
 	/**
@@ -463,17 +469,9 @@ public class L2CharTemplate
 		return _baseMCritRate;
 	}
 	
-	public int getBaseMoveSpd(MoveType mt)
+	public float getBaseMoveSpd(MoveType mt)
 	{
-		switch (mt)
-		{
-			case WALK:
-				return _baseWalkSpd;
-			case RUN:
-				return _baseRunSpd;
-		}
-		
-		return 0;
+		return _moveType[mt.ordinal()];
 	}
 	
 	/**

+ 0 - 21
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2PcTemplate.java

@@ -30,7 +30,6 @@ import com.l2jserver.gameserver.model.base.ClassId;
 import com.l2jserver.gameserver.model.base.Race;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
 import com.l2jserver.gameserver.model.items.PcItemTemplate;
-import com.l2jserver.gameserver.model.stats.MoveType;
 import com.l2jserver.util.Rnd;
 
 /**
@@ -52,8 +51,6 @@ public class L2PcTemplate extends L2CharTemplate
 	private final double _fCollisionRadiusFemale;
 	
 	private final int _baseSafeFallHeight;
-	private final int _baseSlowSwimSpd;
-	private final int _baseFastSwimSpd;
 	
 	private final List<PcItemTemplate> _initialEquipment;
 	private final List<Location> _creationPoints;
@@ -89,8 +86,6 @@ public class L2PcTemplate extends L2CharTemplate
 		_fCollisionHeightFemale = set.getDouble("collisionFemaleheight");
 		
 		_baseSafeFallHeight = set.getInteger("baseSafeFall", 333);
-		_baseSlowSwimSpd = set.getInteger("baseMoveSpdslowSwim", (super.getBaseMoveSpd(MoveType.WALK) / 2));
-		_baseFastSwimSpd = set.getInteger("baseMoveSpdfastSwim", (super.getBaseMoveSpd(MoveType.RUN) / 2));
 		
 		_initialEquipment = InitialEquipmentData.getInstance().getEquipmentList(_classId);
 		_creationPoints = creationPoints;
@@ -250,22 +245,6 @@ public class L2PcTemplate extends L2CharTemplate
 		return _baseSafeFallHeight;
 	}
 	
-	/**
-	 * @return the base slow (walk) swim speed.
-	 */
-	public int getBaseSlowSwimSpd()
-	{
-		return _baseSlowSwimSpd;
-	}
-	
-	/**
-	 * @return the base fast (run) swim speed.
-	 */
-	public int getBaseFastSwimSpd()
-	{
-		return _baseFastSwimSpd;
-	}
-	
 	/**
 	 * @return the initial equipment for this Pc template.
 	 */