2
0
Эх сурвалжийг харах

NPE fix and use getCastle() for checking TW ward location.

_DS_ 15 жил өмнө
parent
commit
5c43e702c4

+ 8 - 11
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2TerritoryWardInstance.java

@@ -15,12 +15,10 @@
 package com.l2jserver.gameserver.model.actor.instance;
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
 import com.l2jserver.gameserver.model.L2Skill;
 import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected;
@@ -31,21 +29,19 @@ import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
 
 public final class L2TerritoryWardInstance extends L2Attackable
 {
-	private Castle _castle = null; // the castle which owns this Ward
-	
 	public L2TerritoryWardInstance(int objectId, L2NpcTemplate template)
 	{
 		super(objectId, template);
 		
 		disableCoreAI(true);
 	}
-	
+
 	@Override
 	public boolean isAutoAttackable(L2Character attacker)
 	{
 		if (isInvul())
 			return false;
-		if (_castle == null || !_castle.getZone().isActive())
+		if (getCastle() == null || !getCastle().getZone().isActive())
 			return false;
 
 		final L2PcInstance actingPlayer = attacker.getActingPlayer();
@@ -53,7 +49,7 @@ public final class L2TerritoryWardInstance extends L2Attackable
 			return false;
 		if (actingPlayer.getSiegeSide() == 0)
 			return false;
-		if (TerritoryWarManager.getInstance().isAllyField(actingPlayer, _castle.getCastleId()))
+		if (TerritoryWarManager.getInstance().isAllyField(actingPlayer, getCastle().getCastleId()))
 			return false;
 
 		return true;
@@ -70,8 +66,7 @@ public final class L2TerritoryWardInstance extends L2Attackable
 	{
 		super.onSpawn();
 
-		_castle = CastleManager.getInstance().getCastle(getX(), getY(), getZ());
-		if (_castle == null)
+		if (getCastle() == null)
 			_log.warning("L2TerritoryWardInstance(" + getName() + ") spawned outside Castle Zone!");
 	}
 
@@ -88,7 +83,9 @@ public final class L2TerritoryWardInstance extends L2Attackable
 			return;
 		if (actingPlayer.getSiegeSide() == 0)
 			return;
-		if (TerritoryWarManager.getInstance().isAllyField(actingPlayer, _castle.getCastleId()))
+		if (getCastle() == null) // ?
+			return;
+		if (TerritoryWarManager.getInstance().isAllyField(actingPlayer, getCastle().getCastleId()))
 			return;
 
 		super.reduceCurrentHp(damage, attacker, awake, isDOT, skill);
@@ -104,7 +101,7 @@ public final class L2TerritoryWardInstance extends L2Attackable
 	public boolean doDie(L2Character killer)
 	{
 		// Kill the L2NpcInstance (the corpse disappeared after 7 seconds)
-		if (!super.doDie(killer) || _castle == null || !TerritoryWarManager.getInstance().isTWInProgress())
+		if (!super.doDie(killer) || getCastle() == null || !TerritoryWarManager.getInstance().isTWInProgress())
 			return false;
 
 		if (killer instanceof L2PcInstance)