Browse Source

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 years ago
parent
commit
80ec4c6f87

+ 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;
 			}