浏览代码

BETA: Fix for #5555, now all races are checked in condition not only Human.

Zoey76 14 年之前
父节点
当前提交
deb8128151

+ 12 - 18
L2J_Server_BETA/java/com/l2jserver/gameserver/skills/DocumentBase.java

@@ -453,19 +453,16 @@ abstract class DocumentBase
 			Node a = attrs.item(i);
 			if ("races".equalsIgnoreCase(a.getNodeName()))
 			{
-				final String[] races = a.getNodeValue().split(",");
-				Race race = null;
-				for (String raceName : races)
+				final String[] racesVal = a.getNodeValue().split(",");
+				final Race[] races = new Race[racesVal.length];
+				for (int r = 0; r < racesVal.length; r++)
 				{
-					if (raceName != null)
+					if (racesVal[r] != null)
 					{
-						race = Race.valueOf(raceName);
-						if (race != null)
-						{
-							cond = joinAnd(cond, new ConditionPlayerRace(race));
-						}
+						races[r] = Race.valueOf(racesVal[r]);
 					}
 				}
+				cond = joinAnd(cond, new ConditionPlayerRace(races));
 			}
 			else if ("level".equalsIgnoreCase(a.getNodeName()))
 			{
@@ -837,19 +834,16 @@ abstract class DocumentBase
 			// used for pc race
 			else if ("races".equalsIgnoreCase(a.getNodeName()))
 			{
-				final String[] races = a.getNodeValue().split(",");
-				Race race = null;
-				for (String raceName : races)
+				final String[] racesVal = a.getNodeValue().split(",");
+				final Race[] races = new Race[racesVal.length];
+				for (int r = 0; r < racesVal.length; r++)
 				{
-					if (raceName != null)
+					if (racesVal[r] != null)
 					{
-						race = Race.valueOf(raceName);
-						if (race != null)
-						{
-							cond = joinAnd(cond, new ConditionTargetRace(race));
-						}
+						races[r] = Race.valueOf(racesVal[r]);
 					}
 				}
+				cond = joinAnd(cond, new ConditionTargetRace(races));
 			}
 			else if ("using".equalsIgnoreCase(a.getNodeName()))
 			{

+ 7 - 12
L2J_Server_BETA/java/com/l2jserver/gameserver/skills/conditions/ConditionPlayerRace.java

@@ -17,35 +17,30 @@ package com.l2jserver.gameserver.skills.conditions;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.Race;
 import com.l2jserver.gameserver.skills.Env;
+import com.l2jserver.gameserver.util.Util;
 
 /**
  * The Class ConditionPlayerRace.
- *
- * @author mkizub
+ * @author mkizub, Zoey76
  */
 public class ConditionPlayerRace extends Condition
 {
-	
-	private final Race _race;
+	private final Race[] _races;
 	
 	/**
 	 * Instantiates a new condition player race.
-	 *
-	 * @param race the race
+	 * @param races the list containing the allowed races.
 	 */
-	public ConditionPlayerRace(Race race)
+	public ConditionPlayerRace(Race[] races)
 	{
-		_race = race;
+		_races = races;
 	}
 	
-	/* (non-Javadoc)
-	 * @see com.l2jserver.gameserver.skills.conditions.Condition#testImpl(com.l2jserver.gameserver.skills.Env)
-	 */
 	@Override
 	public boolean testImpl(Env env)
 	{
 		if (!(env.player instanceof L2PcInstance))
 			return false;
-		return ((L2PcInstance) env.player).getRace() == _race;
+		return Util.contains(_races, env.player.getActingPlayer().getRace());
 	}
 }

+ 7 - 12
L2J_Server_BETA/java/com/l2jserver/gameserver/skills/conditions/ConditionTargetRace.java

@@ -17,35 +17,30 @@ package com.l2jserver.gameserver.skills.conditions;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.Race;
 import com.l2jserver.gameserver.skills.Env;
+import com.l2jserver.gameserver.util.Util;
 
 /**
  * The Class ConditionTargetRace.
- *
- * @author mkizub
+ * @author mkizub, Zoey76
  */
 public class ConditionTargetRace extends Condition
 {
-	
-	private final Race _race;
+	private final Race[] _races;
 	
 	/**
 	 * Instantiates a new condition target race.
-	 *
-	 * @param race the race
+	 * @param races the list containing the allowed races.
 	 */
-	public ConditionTargetRace(Race race)
+	public ConditionTargetRace(Race[] races)
 	{
-		_race = race;
+		_races = races;
 	}
 	
-	/* (non-Javadoc)
-	 * @see com.l2jserver.gameserver.skills.conditions.Condition#testImpl(com.l2jserver.gameserver.skills.Env)
-	 */
 	@Override
 	public boolean testImpl(Env env)
 	{
 		if (!(env.target instanceof L2PcInstance))
 			return false;
-		return ((L2PcInstance) env.target).getRace() == _race;
+		return Util.contains(_races, env.target.getActingPlayer().getRace());
 	}
 }