فهرست منبع

BETA: Fixing server stuck during zone reload.

Rumen Nikiforov 12 سال پیش
والد
کامیت
05dab4a469
1فایلهای تغییر یافته به همراه10 افزوده شده و 13 حذف شده
  1. 10 13
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java

+ 10 - 13
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java

@@ -14,8 +14,6 @@
  */
 package com.l2jserver.gameserver.instancemanager;
 
-import gnu.trove.procedure.TObjectProcedure;
-
 import java.lang.reflect.Constructor;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -75,6 +73,7 @@ public class ZoneManager extends DocumentParser
 		// Get the world regions
 		int count = 0;
 		L2WorldRegion[][] worldRegions = L2World.getInstance().getAllWorldRegions();
+		
 		// Backup old zone settings
 		for (Map<Integer, ? extends L2ZoneType> map : _classZones.values())
 		{
@@ -86,6 +85,7 @@ public class ZoneManager extends DocumentParser
 				}
 			}
 		}
+		
 		// Clear zones
 		for (int x = 0; x < worldRegions.length; x++)
 		{
@@ -100,19 +100,16 @@ public class ZoneManager extends DocumentParser
 		
 		// Load the zones
 		load();
-		L2World.getInstance().forEachObject(new ForEachCharacterRevalidateZone());
-		_settings.clear();
-	}
-	
-	protected final class ForEachCharacterRevalidateZone implements TObjectProcedure<L2Object>
-	{
-		@Override
-		public final boolean execute(final L2Object o)
+		
+		// Re-validate all characters in zones
+		for (L2Object obj : L2World.getInstance().getAllVisibleObjectsArray())
 		{
-			if (o instanceof L2Character)
-				((L2Character) o).revalidateZone(true);
-			return true;
+			if (obj instanceof L2Character)
+			{
+				((L2Character) obj).revalidateZone(true);
+			}
 		}
+		_settings.clear();
 	}
 	
 	@Override