Bläddra i källkod

On forced player restart/logout is removed from boss zone. Thx Gnacik.

JIV 15 år sedan
förälder
incheckning
5f0fd5309c

+ 20 - 0
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -84,6 +84,7 @@ import com.l2jserver.gameserver.instancemanager.DimensionalRiftManager;
 import com.l2jserver.gameserver.instancemanager.DuelManager;
 import com.l2jserver.gameserver.instancemanager.FortManager;
 import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
+import com.l2jserver.gameserver.instancemanager.GrandBossManager;
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
 import com.l2jserver.gameserver.instancemanager.ItemsOnGroundManager;
 import com.l2jserver.gameserver.instancemanager.QuestManager;
@@ -161,6 +162,7 @@ import com.l2jserver.gameserver.model.olympiad.Olympiad;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.quest.State;
+import com.l2jserver.gameserver.model.zone.type.L2BossZone;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
@@ -14812,6 +14814,24 @@ public final class L2PcInstance extends L2Playable
 	{
 		_offlineShopStart = time;
 	}
+
+	/**
+	 * Remove player from BossZones (used on char logout/exit)
+	 */
+	public void removeFromBossZone()
+	{
+		try
+		{
+			for (L2BossZone _zone : GrandBossManager.getInstance().getZones())
+			{
+				_zone.removePlayer(this);
+			}
+		}
+		catch (Exception e)
+		{
+			_log.log(Level.WARNING, "Exception on removeFromBossZone(): " + e.getMessage(), e);
+		}	
+	}
 	
 	/**
 	 * Check all player skills for skill level. If player level is lower than skill learn level - 9, skill level is decreased to next possible level.

+ 9 - 0
L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2BossZone.java

@@ -353,6 +353,15 @@ public class L2BossZone extends L2ZoneType
 		}
 	}
 	
+	public void removePlayer(L2PcInstance player)
+	{
+		if(!player.isGM())
+		{
+			_playersAllowed.remove(Integer.valueOf(player.getObjectId()));
+			_playerAllowedReEntryTimes.remove(player.getObjectId());
+		}
+	}
+	
 	@Override
 	public void onDieInside(L2Character character)
 	{

+ 3 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/Logout.java

@@ -108,7 +108,9 @@ public final class Logout extends L2GameClientPacket
 				player.setOfflineStartTime(System.currentTimeMillis());
 			return;
 		}
-
+		// Remove player from Boss Zone
+		player.removeFromBossZone();
+		
 		LogRecord record = new LogRecord(Level.INFO, "Disconnected");
 		record.setParameters(new Object[]{this.getClient()});
 		_logAccounting.log(record);

+ 3 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java

@@ -109,7 +109,9 @@ public final class RequestRestart extends L2GameClientPacket
 			if (playerParty != null)
 				player.getParty().broadcastToPartyMembers(SystemMessage.sendString(player.getName() + " has been removed from the upcoming festival."));
 		}
-
+		// Remove player from Boss Zone
+		player.removeFromBossZone();
+		
 		final L2GameClient client = getClient();
 
 		LogRecord record = new LogRecord(Level.INFO, "Logged out");