Prechádzať zdrojové kódy

BETA: Fixing more NPEs while un-summoning summons.
* Reported by: laxsur, Sdw, Conteur

Rumen Nikiforov 11 rokov pred
rodič
commit
93b930b139

+ 28 - 19
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Summon.java

@@ -444,26 +444,32 @@ public abstract class L2Summon extends L2Playable
 		if (isVisible() && !isDead())
 		{
 			getAI().stopFollow();
-			owner.sendPacket(new PetDelete(getSummonType(), getObjectId()));
-			final L2Party party = owner.getParty();
-			if (party != null)
+			if (owner != null)
 			{
-				party.broadcastToPartyMembers(owner, new ExPartyPetWindowDelete(this));
-			}
-			
-			if ((getInventory() != null) && (getInventory().getSize() > 0))
-			{
-				getOwner().setPetInvItems(true);
-				sendPacket(SystemMessageId.ITEMS_IN_PET_INVENTORY);
-			}
-			else
-			{
-				getOwner().setPetInvItems(false);
+				owner.sendPacket(new PetDelete(getSummonType(), getObjectId()));
+				final L2Party party = owner.getParty();
+				if (party != null)
+				{
+					party.broadcastToPartyMembers(owner, new ExPartyPetWindowDelete(this));
+				}
+				
+				if ((getInventory() != null) && (getInventory().getSize() > 0))
+				{
+					getOwner().setPetInvItems(true);
+					sendPacket(SystemMessageId.ITEMS_IN_PET_INVENTORY);
+				}
+				else
+				{
+					getOwner().setPetInvItems(false);
+				}
 			}
 			
 			storeMe();
 			storeEffect(true);
-			owner.setPet(null);
+			if (owner != null)
+			{
+				owner.setPet(null);
+			}
 			setOwner(null);
 			
 			// Stop AI tasks
@@ -481,12 +487,15 @@ public abstract class L2Summon extends L2Playable
 			}
 			getKnownList().removeAllKnownObjects();
 			setTarget(null);
-			for (int itemId : owner.getAutoSoulShot())
+			if (owner != null)
 			{
-				String handler = ((L2EtcItem) ItemTable.getInstance().getTemplate(itemId)).getHandlerName();
-				if ((handler != null) && handler.contains("Beast"))
+				for (int itemId : owner.getAutoSoulShot())
 				{
-					owner.disableAutoShot(itemId);
+					String handler = ((L2EtcItem) ItemTable.getInstance().getTemplate(itemId)).getHandlerName();
+					if ((handler != null) && handler.contains("Beast"))
+					{
+						owner.disableAutoShot(itemId);
+					}
 				}
 			}
 		}

+ 10 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2ServitorInstance.java

@@ -520,6 +520,16 @@ public class L2ServitorInstance extends L2Summon implements Runnable
 		int usedtime = 5000;
 		int newTimeRemaining = (_lifeTimeRemaining -= usedtime);
 		
+		if (isDead() || !isVisible())
+		{
+			if (_summonLifeTask != null)
+			{
+				_summonLifeTask.cancel(false);
+				_summonLifeTask = null;
+			}
+			return;
+		}
+		
 		// check if the summon's lifetime has ran out
 		if (newTimeRemaining < 0)
 		{