Forráskód Böngészése

BETA: L2AttackableAI fix:
* Fixed short/long range skills mapping.
* Proper logger for L2AttackableAI and L2ControllableMobAI.
* Thanks pmq, dljac, UnAfraid for report.
* Fox for #5781

Zoey76 13 éve
szülő
commit
90d67b6b60

+ 17 - 11
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -21,6 +21,7 @@ import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
 import java.util.Collection;
 import java.util.concurrent.Future;
 import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javolution.util.FastList;
 
@@ -62,7 +63,7 @@ import com.l2jserver.util.Rnd;
  */
 public class L2AttackableAI extends L2CharacterAI implements Runnable
 {
-	//protected static final Logger _log = Logger.getLogger(L2AttackableAI.class.getName());
+	private static final Logger _log = Logger.getLogger(L2AttackableAI.class.getName());
 	
 	private static final int RANDOM_WALK_RATE = 30; // confirmed
 	// private static final int MAX_DRIFT_RANGE = 300;
@@ -83,6 +84,8 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 	private int timepass = 0;
 	private int chaostime = 0;
 	private final L2NpcTemplate _skillrender;
+	private FastList<L2Skill> shortRangeSkills = new FastList<>();
+	private FastList<L2Skill> longRangeSkills = new FastList<>();
 	int lastBuffTick;
 	
 	/**
@@ -1099,19 +1102,20 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 			}
 			
 			// --------------------------------------------------------------------------------
-			// Long/Short Range skill Usage
+			// Long/Short Range skill usage.
 			if (npc.hasLSkill() || npc.hasSSkill())
 			{
 				final FastList<L2Skill> shortRangeSkills = shortRangeSkillRender();
 				if (npc.hasSSkill() && dist2 <= 150 && Rnd.get(100) <= npc.getSSkillChance())
 				{
-					if (cast(shortRangeSkills.get(Rnd.nextInt(shortRangeSkills.size()))))
+					final L2Skill shortRangeSkill = shortRangeSkills.get(Rnd.get(shortRangeSkills.size()));
+					if ((shortRangeSkill != null) && cast(shortRangeSkill))
 					{
 						return;
 					}
 					for (L2Skill sk : shortRangeSkills)
 					{
-						if (cast(sk))
+						if ((sk != null) && cast(sk))
 						{
 							return;
 						}
@@ -1123,7 +1127,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				{
 					for (L2Skill sk : longRangeSkills)
 					{
-						if (cast(sk))
+						if ((sk != null) && cast(sk))
 						{
 							return;
 						}
@@ -2363,20 +2367,22 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 	
 	private FastList<L2Skill> longRangeSkillRender()
 	{
-		if (_skillrender.getLongRangeSkills().isEmpty())
+		longRangeSkills = _skillrender.getLongRangeSkills();
+		if (longRangeSkills.isEmpty())
 		{
-			return getActiveChar().getLongRangeSkill();
+			longRangeSkills = getActiveChar().getLongRangeSkill();
 		}
-		return _skillrender.getLongRangeSkills();
+		return longRangeSkills;
 	}
 	
 	private FastList<L2Skill> shortRangeSkillRender()
 	{
-		if (_skillrender.getShortRangeSkills().isEmpty())
+		shortRangeSkills = _skillrender.getLongRangeSkills();
+		if (shortRangeSkills.isEmpty())
 		{
-			return getActiveChar().getShortRangeSkill();
+			shortRangeSkills = getActiveChar().getShortRangeSkill();
 		}
-		return _skillrender.getShortRangeSkills();
+		return shortRangeSkills;
 	}
 	
 	/**

+ 4 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2ControllableMobAI.java

@@ -20,6 +20,7 @@ import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
 import java.util.Collection;
 import java.util.List;
 import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javolution.util.FastList;
 
@@ -40,12 +41,13 @@ import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 
 /**
- * @author littlecrow
  * AI for controllable mobs
- *
+ * @author littlecrow
  */
 public class L2ControllableMobAI extends L2AttackableAI
 {
+	private static final Logger _log = Logger.getLogger(L2AttackableAI.class.getName());
+	
 	public static final int AI_IDLE = 1;
 	public static final int AI_NORMAL = 2;
 	public static final int AI_FORCEATTACK = 3;