浏览代码

Redone [4104]. For all those that do not understand. We work with pointers. Even when the pointer yet point on an valid not null variable, it`s not given he do so a moment later (when it`s changeable by another thread).
But we can copy the pointer, so it will not get changed by externals and keep pointing on the object.

Forsaiken 15 年之前
父节点
当前提交
80ec4c6f87
共有 1 个文件被更改,包括 20 次插入36 次删除
  1. 20 36
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Character.java

+ 20 - 36
L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -26,6 +26,10 @@ import java.util.concurrent.Future;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javolution.util.FastList;
+import javolution.util.FastMap;
+import javolution.util.FastSet;
+
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.GameTimeController;
 import com.l2jserver.gameserver.GeoData;
@@ -36,8 +40,8 @@ import com.l2jserver.gameserver.ai.L2AttackableAI;
 import com.l2jserver.gameserver.ai.L2CharacterAI;
 import com.l2jserver.gameserver.datatables.DoorTable;
 import com.l2jserver.gameserver.datatables.MapRegionTable;
-import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.datatables.MapRegionTable.TeleportWhereType;
+import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.handler.ActionHandler;
 import com.l2jserver.gameserver.handler.IActionHandler;
 import com.l2jserver.gameserver.handler.ISkillHandler;
@@ -56,17 +60,17 @@ import com.l2jserver.gameserver.model.L2ItemInstance;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.L2Skill.SkillTargetType;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2WorldRegion;
 import com.l2jserver.gameserver.model.Location;
-import com.l2jserver.gameserver.model.L2Skill.SkillTargetType;
 import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2MinionInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcWalkerInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance.SkillDat;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2RiftInvaderInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance.SkillDat;
 import com.l2jserver.gameserver.model.actor.knownlist.CharKnownList;
 import com.l2jserver.gameserver.model.actor.position.CharPosition;
 import com.l2jserver.gameserver.model.actor.stat.CharStat;
@@ -81,6 +85,7 @@ import com.l2jserver.gameserver.network.serverpackets.Attack;
 import com.l2jserver.gameserver.network.serverpackets.ChangeMoveType;
 import com.l2jserver.gameserver.network.serverpackets.ChangeWaitType;
 import com.l2jserver.gameserver.network.serverpackets.FlyToLocation;
+import com.l2jserver.gameserver.network.serverpackets.FlyToLocation.FlyType;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillCanceld;
 import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched;
@@ -93,7 +98,6 @@ import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.StopMove;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.TeleportToLocation;
-import com.l2jserver.gameserver.network.serverpackets.FlyToLocation.FlyType;
 import com.l2jserver.gameserver.pathfinding.AbstractNodeLoc;
 import com.l2jserver.gameserver.pathfinding.PathFinding;
 import com.l2jserver.gameserver.skills.AbnormalEffect;
@@ -115,10 +119,6 @@ import com.l2jserver.gameserver.templates.skills.L2SkillType;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Point3D;
 import com.l2jserver.util.Rnd;
-
-import javolution.util.FastList;
-import javolution.util.FastMap;
-import javolution.util.FastSet;
 /**
  * Mother class of all character objects of the world (PC, NPC...)<BR><BR>
  *
@@ -1875,14 +1875,10 @@ public abstract class L2Character extends L2Object
 
 			if (simultaneously)
 			{
-				if (_skillCast2 != null)
+				Future<?> future = _skillCast2;
+				if (future != null)
 				{
-					try 
-					{
-						_skillCast2.cancel(true);
-					}
-					catch (NullPointerException e) {}
-					
+					future.cancel(true);
 					_skillCast2 = null;
 				}
 
@@ -1895,14 +1891,10 @@ public abstract class L2Character extends L2Object
 			}
 			else
 			{
-				if (_skillCast != null)
+				Future<?> future = _skillCast;
+				if (future != null)
 				{
-					try 
-					{
-						_skillCast.cancel(true);
-					}
-					catch (NullPointerException e) {}
-					
+					future.cancel(true);
 					_skillCast = null;
 				}
 
@@ -4064,25 +4056,17 @@ public abstract class L2Character extends L2Object
 	{
 		if (isCastingNow() || isCastingSimultaneouslyNow())
 		{
+			Future<?> future = _skillCast;
 			// cancels the skill hit scheduled task
-			if (_skillCast != null)
+			if (future != null)
 			{
-				try 
-				{
-					_skillCast.cancel(true);
-				}
-				catch (NullPointerException e) {}
-				
+				future.cancel(true);
 				_skillCast = null;
 			}
-			if (_skillCast2 != null)
+			future = _skillCast2;
+			if (future != null)
 			{
-				try 
-				{
-					_skillCast2.cancel(true);
-				}
-				catch (NullPointerException e) {}
-				
+				future.cancel(true);
 				_skillCast2 = null;
 			}