Prechádzať zdrojové kódy

BETA:
* L2Character rework:
* getSkills() returns Collection<L2Skill> no arrays/nulls anymore
* Many FastList/FastMap to ArrayList/HashMap when synchronizations aren't required.
* Javolution where synchronization is required.
* Added getSkills() into L2CharTemplate to prevent from casting.
* L2ZoneType rework:
* Added new methods getCharacters(), getPlayersInside()
* Many FastList/FastMap to ArrayList/HashMap when synchronizations aren't required.
* Javolution where synchronization is required.

Rumen Nikiforov 13 rokov pred
rodič
commit
67d3cfb582
24 zmenil súbory, kde vykonal 238 pridanie a 266 odobranie
  1. 2 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java
  2. 2 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2SiegeGuardAI.java
  3. 28 38
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java
  4. 8 10
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Npc.java
  5. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  6. 12 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2CharTemplate.java
  7. 1 0
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2NpcTemplate.java
  8. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/FortSiege.java
  9. 79 54
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java
  10. 3 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/clanhall/ClanHallSiegeEngine.java
  11. 53 53
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/L2ZoneType.java
  12. 4 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2BossZone.java
  13. 3 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2CastleZone.java
  14. 3 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ClanHallZone.java
  15. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2DamageZone.java
  16. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2DynamicZone.java
  17. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2EffectZone.java
  18. 6 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2FortZone.java
  19. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2OlympiadStadiumZone.java
  20. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ResidenceHallTeleportZone.java
  21. 3 30
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ResidenceTeleportZone.java
  22. 6 9
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2SiegableHallZone.java
  23. 7 30
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2SiegeZone.java
  24. 7 9
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/GMViewSkillInfo.java

+ 2 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java

@@ -18,6 +18,7 @@ import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
 import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
 import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
 
+import java.util.Collection;
 import java.util.concurrent.Future;
 
 import com.l2jserver.Config;
@@ -479,7 +480,7 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 	private void attackPrepare()
 	{
 		// Get all information needed to choose between physical or magical attack
-		L2Skill[] skills = null;
+		Collection<L2Skill> skills = null;
 		double dist_2 = 0;
 		int range = 0;
 		L2DefenderInstance sGuard;

+ 2 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2SiegeGuardAI.java

@@ -18,6 +18,7 @@ import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
 import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
 import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;
 
+import java.util.Collection;
 import java.util.concurrent.Future;
 
 import com.l2jserver.Config;
@@ -464,7 +465,7 @@ public class L2SiegeGuardAI extends L2CharacterAI implements Runnable
 	private void attackPrepare()
 	{
 		// Get all information needed to choose between physical or magical attack
-		L2Skill[] skills = null;
+		Collection<L2Skill> skills = null;
 		double dist_2 = 0;
 		int range = 0;
 		L2DefenderInstance sGuard = (L2DefenderInstance) _actor;

+ 28 - 38
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -20,6 +20,7 @@ import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Future;
 import java.util.concurrent.locks.ReentrantLock;
@@ -153,11 +154,11 @@ public abstract class L2Character extends L2Object
 {
 	public static final Logger _log = Logger.getLogger(L2Character.class.getName());
 	
-	private FastList<AttackListener> attackListeners = new FastList<AttackListener>().shared();
-	private FastList<DeathListener> deathListeners = new FastList<DeathListener>().shared();
-	private static FastList<DeathListener> globalDeathListeners = new FastList<DeathListener>().shared();
-	private static FastList<SkillUseListener> globalSkillUseListeners = new FastList<SkillUseListener>().shared();
-	private FastList<SkillUseListener> skillUseListeners = new FastList<SkillUseListener>().shared();
+	private static List<DeathListener> globalDeathListeners = new FastList<DeathListener>().shared();
+	private static List<SkillUseListener> globalSkillUseListeners = new FastList<SkillUseListener>().shared();
+	private List<AttackListener> attackListeners = new FastList<AttackListener>().shared();
+	private List<DeathListener> deathListeners = new FastList<DeathListener>().shared();
+	private List<SkillUseListener> skillUseListeners = new FastList<SkillUseListener>().shared();
 	
 	private volatile Set<L2Character> _attackByList;
 	private volatile boolean _isCastingNow = false;
@@ -192,12 +193,12 @@ public abstract class L2Character extends L2Object
 	/**
 	 * Map containing all skills of this character.
 	 */
-	protected final L2TIntObjectHashMap<L2Skill> _skills;
+	private final FastMap<Integer, L2Skill> _skills = new FastMap<>();
 	
 	/**
 	 * Map containing all custom skills of this character.
 	 */
-	private FastMap<Integer, SkillHolder> _customSkills;
+	private final FastMap<Integer, SkillHolder> _customSkills = new FastMap<>();
 	
 	/** FastMap containing the active chance skills on this character */
 	private volatile ChanceSkillList _chanceSkills;
@@ -402,15 +403,17 @@ public abstract class L2Character extends L2Object
 		initCharStat();
 		initCharStatus();
 		
+		_skills.shared();
+		_customSkills.shared();
+		
 		// Set its template to the new L2Character
 		_template = template;
 		
-		if (this instanceof L2DoorInstance)
+		if (isDoor())
 		{
 			_calculators = Formulas.getStdDoorCalculators();
-			_skills = null;
 		}
-		else if (template != null && this instanceof L2Npc)
+		else if (template != null && isNpc())
 		{
 			// Copy the Standard Calculators of the L2NPCInstance in _calculators
 			_calculators = NPC_STD_CALCULATOR;
@@ -418,16 +421,18 @@ public abstract class L2Character extends L2Object
 			// Copy the skills of the L2NPCInstance from its template to the L2Character Instance
 			// The skills list can be affected by spell effects so it's necessary to make a copy
 			// to avoid that a spell affecting a L2NPCInstance, affects others L2NPCInstance of the same type too.
-			_skills = new L2TIntObjectHashMap<L2Skill>();
-			if (((L2NpcTemplate) template).getSkills() != null)
-				_skills.putAll(((L2NpcTemplate) template).getSkills());
+			if (template.getSkills() != null)
+			{
+				_skills.putAll(template.getSkills());
+			}
+			
 			if (!_skills.isEmpty())
 			{
 				for (L2Skill skill : getAllSkills())
 				{
 					if (skill.getDisplayId() != skill.getId())
 					{
-						getCustomSkills().put(Integer.valueOf(skill.getDisplayId()), new SkillHolder(skill.getId(), skill.getLevel()));
+						_customSkills.put(Integer.valueOf(skill.getDisplayId()), new SkillHolder(skill));
 					}
 					addStatFuncs(skill.getStatFuncs(null, this));
 				}
@@ -438,12 +443,11 @@ public abstract class L2Character extends L2Object
 			// If L2Character is a L2PcInstance or a L2Summon, create the basic calculator set
 			_calculators = new Calculator[Stats.NUM_STATS];
 			
-			if (this instanceof L2Summon)
+			if (isSummon())
 			{
 				// Copy the skills of the L2Summon from its template to the L2Character Instance
 				// The skills list can be affected by spell effects so it's necessary to make a copy
 				// to avoid that a spell affecting a L2Summon, affects others L2Summon of the same type too.
-				_skills = new L2TIntObjectHashMap<L2Skill>();
 				if (template != null)
 				{
 					_skills.putAll(((L2NpcTemplate) template).getSkills());
@@ -454,16 +458,12 @@ public abstract class L2Character extends L2Object
 					{
 						if (skill.getDisplayId() != skill.getId())
 						{
-							getCustomSkills().put(Integer.valueOf(skill.getDisplayId()), new SkillHolder(skill.getId(), skill.getLevel()));
+							_customSkills.put(Integer.valueOf(skill.getDisplayId()), new SkillHolder(skill));
 						}
 						addStatFuncs(skill.getStatFuncs(null, this));
 					}
 				}
 			}
-			else
-			{
-				_skills = new L2TIntObjectHashMap<L2Skill>();
-			}
 			
 			Formulas.addFuncsToNewCharacter(this);
 		}
@@ -5982,7 +5982,7 @@ public abstract class L2Character extends L2Object
 			oldSkill = _skills.put(newSkill.getId(), newSkill);
 			if (newSkill.getDisplayId() != newSkill.getId())
 			{
-				getCustomSkills().put(Integer.valueOf(newSkill.getDisplayId()), new SkillHolder(newSkill.getId(), newSkill.getLevel()));
+				_customSkills.put(Integer.valueOf(newSkill.getDisplayId()), new SkillHolder(newSkill));
 			}
 			// If an old skill has been replaced, remove all its Func objects
 			if (oldSkill != null)
@@ -6076,7 +6076,7 @@ public abstract class L2Character extends L2Object
 		{
 			if (oldSkill.getDisplayId() != oldSkill.getId())
 			{
-				getCustomSkills().remove(Integer.valueOf(oldSkill.getDisplayId()));
+				_customSkills.remove(Integer.valueOf(oldSkill.getDisplayId()));
 			}
 			//this is just a fail-safe againts buggers and gm dummies...
 			if ((oldSkill.triggerAnotherSkill()) && oldSkill.getTriggeredId() > 0)
@@ -6202,18 +6202,15 @@ public abstract class L2Character extends L2Object
 	 * All skills own by a L2Character are identified in <B>_skills</B> the L2Character <BR><BR>
 	 * @return all skills own by the L2Character in a table of L2Skill.
 	 */
-	public final L2Skill[] getAllSkills()
-	{
-		if (_skills == null)
-			return new L2Skill[0];
-		
-		return _skills.values(new L2Skill[0]);
+	public final Collection<L2Skill> getAllSkills()
+	{	
+		return _skills.values();
 	}
 	
 	/**
 	 * @return the map containing this character skills.
 	 */
-	public L2TIntObjectHashMap<L2Skill> getSkills()
+	public Map<Integer, L2Skill> getSkills()
 	{
 		return _skills;
 	}
@@ -6221,12 +6218,8 @@ public abstract class L2Character extends L2Object
 	/**
 	 * @return all the custom skills (skills with different display Id than skill Id).
 	 */
-	public final FastMap<Integer, SkillHolder> getCustomSkills()
+	public final Map<Integer, SkillHolder> getCustomSkills()
 	{
-		if (_customSkills == null)
-		{
-			_customSkills = new FastMap<Integer, SkillHolder>().shared();
-		}
 		return _customSkills;
 	}
 	
@@ -6258,9 +6251,6 @@ public abstract class L2Character extends L2Object
 	 */
 	public final L2Skill getKnownSkill(int skillId)
 	{
-		if (_skills == null)
-			return null;
-		
 		return _skills.get(skillId);
 	}
 	

+ 8 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Npc.java

@@ -16,11 +16,11 @@ package com.l2jserver.gameserver.model.actor;
 
 import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_ACTIVE;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 import java.util.logging.Level;
 
-import javolution.util.FastList;
-
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.SevenSigns;
 import com.l2jserver.gameserver.SevenSignsFestival;
@@ -299,9 +299,9 @@ public class L2Npc extends L2Character
 		return true;
 	}
 	
-	public FastList<L2Skill> getLongRangeSkill()
+	public List<L2Skill> getLongRangeSkill()
 	{
-		final FastList<L2Skill> skilldata = new FastList<>();
+		final List<L2Skill> skilldata = new ArrayList<>();
 		if (_staticAIData == null || _staticAIData.getLongRangeSkill() == 0)
 		{
 			return skilldata;
@@ -311,8 +311,7 @@ public class L2Npc extends L2Character
 		{
 			case -1:
 			{
-				L2Skill[] skills = null;
-				skills = getAllSkills();
+				Collection<L2Skill> skills = getAllSkills();
 				if (skills != null)
 				{
 					for (L2Skill sk : skills)
@@ -356,9 +355,9 @@ public class L2Npc extends L2Character
 		return skilldata;
 	}
 	
-	public FastList<L2Skill> getShortRangeSkill()
+	public List<L2Skill> getShortRangeSkill()
 	{
-		final FastList<L2Skill> skilldata = new FastList<>();
+		final List<L2Skill> skilldata = new ArrayList<>();
 		if (_staticAIData == null || _staticAIData.getShortRangeSkill() == 0)
 		{
 			return skilldata;
@@ -368,8 +367,7 @@ public class L2Npc extends L2Character
 		{
 			case -1:
 			{
-				L2Skill[] skills = null;
-				skills = getAllSkills();
+				Collection<L2Skill> skills = getAllSkills();
 				if (skills != null)
 				{
 					for (L2Skill sk : skills)

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -10917,7 +10917,7 @@ public final class L2PcInstance extends L2Playable
 			}
 			
 			if (Config.DEBUG)
-				_log.info(getName() + " was given " + getAllSkills().length + " skills for their new sub class.");
+				_log.info(getName() + " was given " + getAllSkills().size() + " skills for their new sub class.");
 			
 			return true;
 		}
@@ -15154,7 +15154,7 @@ public final class L2PcInstance extends L2Playable
 	 */
 	public void checkPlayerSkills()
 	{
-		for (int id : _skills.keys())
+		for (int id : getSkills().keySet())
 		{
 			int level = getSkillLevel(id);
 			if (level >= 100) // enchanted skill
@@ -15187,7 +15187,7 @@ public final class L2PcInstance extends L2Playable
 		if (nextLevel == -1) // there is no lower skill
 		{
 			_log.info("Removing skill id "+id+ " level "+getSkillLevel(id)+" from player "+this);
-			removeSkill(_skills.get(id), true);
+			removeSkill(getSkills().get(id), true);
 		}
 		else // replace with lower one
 		{

+ 12 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2CharTemplate.java

@@ -14,7 +14,10 @@
  */
 package com.l2jserver.gameserver.model.actor.templates;
 
+import java.util.Map;
+
 import com.l2jserver.gameserver.model.StatsSet;
+import com.l2jserver.gameserver.model.skills.L2Skill;
 
 /**
  * @author Zoey76
@@ -740,4 +743,13 @@ public class L2CharTemplate
 	{
 		_baseDarkRes = baseDarkRes;
 	}
+	
+	/**
+	 * Overridden in L2NpcTemplate
+	 * @return
+	 */
+	public Map<Integer, L2Skill> getSkills()
+	{
+		return null;
+	}
 }

+ 1 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2NpcTemplate.java

@@ -797,6 +797,7 @@ public final class L2NpcTemplate extends L2CharTemplate
 		return _shortRangeSkills;
 	}
 	
+	@Override
 	public Map<Integer, L2Skill> getSkills()
 	{
 		return _skills;

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/FortSiege.java

@@ -551,7 +551,7 @@ public class FortSiege implements Siegable
 	 */
 	public List<L2PcInstance> getPlayersInZone()
 	{
-		return getFort().getZone().getAllPlayers();
+		return getFort().getZone().getPlayersInside();
 	}
 	
 	/**

+ 79 - 54
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java

@@ -17,6 +17,7 @@ package com.l2jserver.gameserver.model.entity;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.List;
 import java.util.concurrent.ScheduledFuture;
@@ -63,7 +64,7 @@ public class Siege implements Siegable
 {
 	protected static final Logger _log = Logger.getLogger(Siege.class.getName());
 	
-	private static FastList<SiegeListener> siegeListeners = new FastList<SiegeListener>().shared();
+	private static List<SiegeListener> siegeListeners = new FastList<SiegeListener>().shared();
 	
 	// typeId's
 	public static final byte OWNER = -1;
@@ -73,7 +74,11 @@ public class Siege implements Siegable
 	
 	public static enum TeleportWhoType
 	{
-		All, Attacker, DefenderNotOwner, Owner, Spectator
+		All,
+		Attacker,
+		DefenderNotOwner,
+		Owner,
+		Spectator
 	}
 	
 	private int _controlTowerCount;
@@ -217,13 +222,13 @@ public class Siege implements Siegable
 		}
 	}
 	
-	private final List<L2SiegeClan> _attackerClans = new FastList<L2SiegeClan>();
-	private final List<L2SiegeClan> _defenderClans = new FastList<L2SiegeClan>();
-	private final List<L2SiegeClan> _defenderWaitingClans = new FastList<L2SiegeClan>();
+	private final List<L2SiegeClan> _attackerClans = new ArrayList<L2SiegeClan>();
+	private final List<L2SiegeClan> _defenderClans = new ArrayList<L2SiegeClan>();
+	private final List<L2SiegeClan> _defenderWaitingClans = new ArrayList<L2SiegeClan>();
 	
 	// Castle setting
-	private List<L2ControlTowerInstance> _controlTowers = new FastList<L2ControlTowerInstance>();
-	private List<L2FlameTowerInstance> _flameTowers = new FastList<L2FlameTowerInstance>();
+	private List<L2ControlTowerInstance> _controlTowers = new ArrayList<L2ControlTowerInstance>();
+	private List<L2FlameTowerInstance> _flameTowers = new ArrayList<L2FlameTowerInstance>();
 	private final Castle[] _castle;
 	private boolean _isInProgress = false;
 	private boolean _isNormalSide = true; // true = Atk is Atk, false = Atk is Def
@@ -340,7 +345,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * When control of castle changed during siege<BR><BR>
+	 * When control of castle changed during siege<BR>
+	 * <BR>
 	 */
 	public void midVictory()
 	{
@@ -419,7 +425,7 @@ public class Siege implements Siegable
 				getCastle().spawnDoor(true); // Respawn door to castle but make them weaker (50% hp)
 				removeControlTower(); // Remove all control tower from this castle
 				removeFlameTower();
-				_controlTowerCount = 0;//Each new siege midvictory CT are completely respawned.
+				_controlTowerCount = 0;// Each new siege midvictory CT are completely respawned.
 				_controlTowerMaxCount = 0;
 				_flameTowerCount = 0;
 				_flameTowerMaxCount = 0;
@@ -432,14 +438,15 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * When siege starts<BR><BR>
+	 * When siege starts<BR>
+	 * <BR>
 	 */
 	@Override
 	public void startSiege()
 	{
 		if (!getIsInProgress())
 		{
-			if(!fireSiegeListeners(EventStage.START))
+			if (!fireSiegeListeners(EventStage.START))
 				return;
 			_firstOwnerClanId = getCastle().getOwnerId();
 			
@@ -462,7 +469,7 @@ public class Siege implements Siegable
 			loadSiegeClan(); // Load siege clan from db
 			updatePlayerSiegeStateFlags(false);
 			teleportPlayer(Siege.TeleportWhoType.Attacker, MapRegionManager.TeleportWhereType.Town); // Teleport to the closest town
-			//teleportPlayer(Siege.TeleportWhoType.Spectator, MapRegionTable.TeleportWhereType.Town);      // Teleport to the second closest town
+			// teleportPlayer(Siege.TeleportWhoType.Spectator, MapRegionTable.TeleportWhereType.Town); // Teleport to the second closest town
 			_controlTowerCount = 0;
 			_controlTowerMaxCount = 0;
 			spawnControlTower(getCastle().getCastleId()); // Spawn control tower
@@ -486,7 +493,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Announce to player.<BR><BR>
+	 * Announce to player.<BR>
+	 * <BR>
 	 * @param message The SystemMessage to send to player
 	 * @param bothSides True - broadcast to both attackers and defenders. False - only to defenders.
 	 */
@@ -590,7 +598,7 @@ public class Siege implements Siegable
 				}
 				member.sendPacket(new UserInfo(member));
 				member.sendPacket(new ExBrExtraUserInfo(member));
-
+				
 				for (L2PcInstance player : member.getKnownList().getKnownPlayers().values())
 				{
 					if (player == null)
@@ -604,7 +612,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Approve clan as defender for siege<BR><BR>
+	 * Approve clan as defender for siege<BR>
+	 * <BR>
 	 * @param clanId The int of player's clan id
 	 */
 	public void approveSiegeDefenderClan(int clanId)
@@ -616,7 +625,7 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * @param object 
+	 * @param object
 	 * @return true if object is inside the zone
 	 */
 	public boolean checkIfInZone(L2Object object)
@@ -625,9 +634,9 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * @param x 
-	 * @param y 
-	 * @param z 
+	 * @param x
+	 * @param y
+	 * @param z
 	 * @return true if object is inside the zone
 	 */
 	public boolean checkIfInZone(int x, int y, int z)
@@ -636,7 +645,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Return true if clan is attacker<BR><BR>
+	 * Return true if clan is attacker<BR>
+	 * <BR>
 	 * @param clan The L2Clan of the player
 	 */
 	@Override
@@ -646,7 +656,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Return true if clan is defender<BR><BR>
+	 * Return true if clan is defender<BR>
+	 * <BR>
 	 * @param clan The L2Clan of the player
 	 */
 	@Override
@@ -725,7 +736,7 @@ public class Siege implements Siegable
 	@Override
 	public List<L2PcInstance> getAttackersInZone()
 	{
-		List<L2PcInstance> players = new FastList<L2PcInstance>();
+		List<L2PcInstance> players = new ArrayList<L2PcInstance>();
 		L2Clan clan;
 		for (L2SiegeClan siegeclan : getAttackerClans())
 		{
@@ -747,7 +758,7 @@ public class Siege implements Siegable
 	 */
 	public List<L2PcInstance> getDefendersButNotOwnersInZone()
 	{
-		List<L2PcInstance> players = new FastList<L2PcInstance>();
+		List<L2PcInstance> players = new ArrayList<L2PcInstance>();
 		L2Clan clan;
 		for (L2SiegeClan siegeclan : getDefenderClans())
 		{
@@ -771,7 +782,7 @@ public class Siege implements Siegable
 	 */
 	public List<L2PcInstance> getPlayersInZone()
 	{
-		return getCastle().getZone().getAllPlayers();
+		return getCastle().getZone().getPlayersInside();
 	}
 	
 	/**
@@ -779,7 +790,7 @@ public class Siege implements Siegable
 	 */
 	public List<L2PcInstance> getOwnersInZone()
 	{
-		List<L2PcInstance> players = new FastList<L2PcInstance>();
+		List<L2PcInstance> players = new ArrayList<L2PcInstance>();
 		L2Clan clan;
 		for (L2SiegeClan siegeclan : getDefenderClans())
 		{
@@ -803,9 +814,9 @@ public class Siege implements Siegable
 	 */
 	public List<L2PcInstance> getSpectatorsInZone()
 	{
-		List<L2PcInstance> players = new FastList<L2PcInstance>();
+		List<L2PcInstance> players = new ArrayList<L2PcInstance>();
 		
-		for (L2PcInstance player : getCastle().getZone().getAllPlayers())
+		for (L2PcInstance player : getCastle().getZone().getPlayersInside())
 		{
 			if (player == null)
 				continue;
@@ -817,7 +828,7 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Control Tower was killed 
+	 * Control Tower was killed
 	 * @param ct
 	 */
 	public void killedCT(L2Npc ct)
@@ -828,7 +839,7 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Remove the flag that was killed 
+	 * Remove the flag that was killed
 	 * @param flag
 	 */
 	public void killedFlag(L2Npc flag)
@@ -843,7 +854,7 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Display list of registered clans 
+	 * Display list of registered clans
 	 * @param player
 	 */
 	public void listRegisterClan(L2PcInstance player)
@@ -852,7 +863,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Register clan as attacker<BR><BR>
+	 * Register clan as attacker<BR>
+	 * <BR>
 	 * @param player The L2PcInstance of the player trying to register
 	 */
 	public void registerAttacker(L2PcInstance player)
@@ -880,7 +892,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Register clan as defender<BR><BR>
+	 * Register clan as defender<BR>
+	 * <BR>
 	 * @param player The L2PcInstance of the player trying to register
 	 */
 	public void registerDefender(L2PcInstance player)
@@ -897,7 +910,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Remove clan from siege<BR><BR>
+	 * Remove clan from siege<BR>
+	 * <BR>
 	 * @param clanId The int of player's clan id
 	 */
 	public void removeSiegeClan(int clanId)
@@ -928,7 +942,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Remove clan from siege<BR><BR>
+	 * Remove clan from siege<BR>
+	 * <BR>
 	 * @param clan clan being removed
 	 */
 	public void removeSiegeClan(L2Clan clan)
@@ -939,7 +954,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Remove clan from siege<BR><BR>
+	 * Remove clan from siege<BR>
+	 * <BR>
 	 * @param player The L2PcInstance of player/clan being removed
 	 */
 	public void removeSiegeClan(L2PcInstance player)
@@ -948,7 +964,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Start the auto tasks<BR><BR>
+	 * Start the auto tasks<BR>
+	 * <BR>
 	 */
 	public void startAutoTask()
 	{
@@ -966,8 +983,8 @@ public class Siege implements Siegable
 	
 	/**
 	 * Teleport players
-	 * @param teleportWho 
-	 * @param teleportWhere 
+	 * @param teleportWho
+	 * @param teleportWhere
 	 */
 	public void teleportPlayer(TeleportWhoType teleportWho, MapRegionManager.TeleportWhereType teleportWhere)
 	{
@@ -999,7 +1016,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Add clan as attacker<BR><BR>
+	 * Add clan as attacker<BR>
+	 * <BR>
 	 * @param clanId The int of clan's id
 	 */
 	private void addAttacker(int clanId)
@@ -1008,7 +1026,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Add clan as defender<BR><BR>
+	 * Add clan as defender<BR>
+	 * <BR>
 	 * @param clanId The int of clan's id
 	 */
 	private void addDefender(int clanId)
@@ -1017,7 +1036,9 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * <p>Add clan as defender with the specified type</p>
+	 * <p>
+	 * Add clan as defender with the specified type
+	 * </p>
 	 * @param clanId The int of clan's id
 	 * @param type the type of the clan
 	 */
@@ -1027,7 +1048,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Add clan as defender waiting approval<BR><BR>
+	 * Add clan as defender waiting approval<BR>
+	 * <BR>
 	 * @param clanId The int of clan's id
 	 */
 	private void addDefenderWaiting(int clanId)
@@ -1094,7 +1116,8 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Return the correct siege date as Calendar.<BR><BR>
+	 * Return the correct siege date as Calendar.<BR>
+	 * <BR>
 	 */
 	public void correctSiegeDateTime()
 	{
@@ -1284,10 +1307,11 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Save registration to database.<BR><BR>
+	 * Save registration to database.<BR>
+	 * <BR>
 	 * @param clan The L2Clan of player
 	 * @param typeId -1 = owner 0 = defender, 1 = attacker, 2 = defender waiting
-	 * @param isUpdateRegistration 
+	 * @param isUpdateRegistration
 	 */
 	private void saveSiegeClan(L2Clan clan, byte typeId, boolean isUpdateRegistration)
 	{
@@ -1376,14 +1400,14 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Spawn control tower. 
+	 * Spawn control tower.
 	 * @param Id
 	 */
 	private void spawnControlTower(int Id)
 	{
-		//Set control tower array size if one does not exist
+		// Set control tower array size if one does not exist
 		if (_controlTowers == null)
-			_controlTowers = new FastList<L2ControlTowerInstance>();
+			_controlTowers = new ArrayList<L2ControlTowerInstance>();
 		
 		for (SiegeSpawn _sp : SiegeManager.getInstance().getControlTowerSpawnList(Id))
 		{
@@ -1402,14 +1426,14 @@ public class Siege implements Siegable
 	}
 	
 	/**
-	 * Spawn flame tower. 
+	 * Spawn flame tower.
 	 * @param Id
 	 */
 	private void spawnFlameTower(int Id)
 	{
-		//Set control tower array size if one does not exist
+		// Set control tower array size if one does not exist
 		if (_flameTowers == null)
-			_flameTowers = new FastList<L2FlameTowerInstance>();
+			_flameTowers = new ArrayList<L2FlameTowerInstance>();
 		
 		for (SiegeSpawn _sp : SiegeManager.getInstance().getFlameTowerSpawnList(Id))
 		{
@@ -1430,12 +1454,13 @@ public class Siege implements Siegable
 			_flameTowerMaxCount++;
 			_flameTowers.add(ct);
 		}
-		if (_flameTowerCount == 0) //TODO: temp fix until flame towers are assigned in config
+		if (_flameTowerCount == 0) // TODO: temp fix until flame towers are assigned in config
 			_flameTowerCount = 1;
 	}
 	
 	/**
-	 * Spawn siege guard.<BR><BR>
+	 * Spawn siege guard.<BR>
+	 * <BR>
 	 */
 	private void spawnSiegeGuard()
 	{
@@ -1649,7 +1674,7 @@ public class Siege implements Siegable
 	 */
 	public boolean isTrapsActive()
 	{
-		//return true;
+		// return true;
 		return _flameTowerCount > 0;
 	}
 	

+ 3 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/clanhall/ClanHallSiegeEngine.java

@@ -18,6 +18,7 @@ import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.ScheduledFuture;
 import java.util.logging.Logger;
@@ -271,7 +272,7 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
 	@Override
 	public List<L2PcInstance> getAttackersInZone()
 	{
-		final List<L2PcInstance> list = _hall.getSiegeZone().getAllPlayers();
+		final Collection<L2PcInstance> list = _hall.getSiegeZone().getPlayersInside();
 		List<L2PcInstance> attackers = new FastList<L2PcInstance>();
 		
 		for(L2PcInstance pc : list)
@@ -413,7 +414,7 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
 		}
 		
 		// Update pvp flag for winners when siege zone becomes inactive
-		for(L2Character chr : _hall.getSiegeZone().getCharactersInsideArray())
+		for(L2Character chr : _hall.getSiegeZone().getCharactersInside())
 		{
 			if((chr != null) && chr.isPlayer())
 			{

+ 53 - 53
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/L2ZoneType.java

@@ -14,12 +14,13 @@
  */
 package com.l2jserver.gameserver.model.zone;
 
-import gnu.trove.procedure.TObjectProcedure;
-
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.logging.Logger;
 
-import javolution.util.FastList;
 import javolution.util.FastMap;
 
 import com.l2jserver.gameserver.instancemanager.InstanceManager;
@@ -28,14 +29,12 @@ import com.l2jserver.gameserver.model.L2Object.InstanceType;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.Quest.QuestEventType;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
-import com.l2jserver.gameserver.util.L2TIntObjectHashMap;
 
 /**
- * Abstract base class for any zone type
- * Handles basic operations
- *
- * @author  durgus
+ * Abstract base class for any zone type Handles basic operations
+ * @author durgus
  */
 public abstract class L2ZoneType
 {
@@ -43,7 +42,7 @@ public abstract class L2ZoneType
 	
 	private final int _id;
 	protected L2ZoneForm _zone;
-	protected L2TIntObjectHashMap<L2Character> _characterList;
+	protected FastMap<Integer, L2Character> _characterList;
 	
 	/** Parameters to affect specific characters */
 	private boolean _checkAffected = false;
@@ -56,14 +55,15 @@ public abstract class L2ZoneType
 	private int[] _race;
 	private int[] _class;
 	private char _classType;
-	private Map<Quest.QuestEventType, FastList<Quest>> _questEvents;
+	private Map<QuestEventType, List<Quest>> _questEvents;
 	private InstanceType _target = InstanceType.L2Character; // default all chars
 	private boolean _allowStore;
 	
 	protected L2ZoneType(int id)
 	{
 		_id = id;
-		_characterList = new L2TIntObjectHashMap<L2Character>();
+		_characterList = new FastMap<>();
+		_characterList.shared();
 		
 		_minLvl = 0;
 		_maxLvl = 0xFF;
@@ -182,7 +182,7 @@ public abstract class L2ZoneType
 		}
 		else
 		{
-			_log.info(getClass().getSimpleName()+": Unknown parameter - "+name+" in zone: "+getId());
+			_log.info(getClass().getSimpleName() + ": Unknown parameter - " + name + " in zone: " + getId());
 		}
 	}
 	
@@ -272,7 +272,7 @@ public abstract class L2ZoneType
 	{
 		return _zone;
 	}
-
+	
 	/**
 	 * Set the zone name.
 	 * @param name
@@ -281,7 +281,7 @@ public abstract class L2ZoneType
 	{
 		_name = name;
 	}
-
+	
 	/**
 	 * Returns zone name
 	 * @return
@@ -299,7 +299,7 @@ public abstract class L2ZoneType
 	{
 		_instanceId = instanceId;
 	}
-
+	
 	/**
 	 * Returns zone instanceId
 	 * @return
@@ -317,12 +317,12 @@ public abstract class L2ZoneType
 	{
 		return _instanceTemplate;
 	}
-
+	
 	/**
 	 * Checks if the given coordinates are within zone's plane
 	 * @param x
 	 * @param y
-	 * @return 
+	 * @return
 	 */
 	public boolean isInsideZone(int x, int y)
 	{
@@ -334,7 +334,7 @@ public abstract class L2ZoneType
 	 * @param x
 	 * @param y
 	 * @param z
-	 * @return 
+	 * @return
 	 */
 	public boolean isInsideZone(int x, int y, int z)
 	{
@@ -342,13 +342,12 @@ public abstract class L2ZoneType
 	}
 	
 	/**
-	 * Checks if the given coordinates are within the zone and the instanceId used
-	 * matched the zone's instanceId
+	 * Checks if the given coordinates are within the zone and the instanceId used matched the zone's instanceId
 	 * @param x
 	 * @param y
 	 * @param z
 	 * @param instanceId
-	 * @return 
+	 * @return
 	 */
 	public boolean isInsideZone(int x, int y, int z, int instanceId)
 	{
@@ -362,9 +361,8 @@ public abstract class L2ZoneType
 	
 	/**
 	 * Checks if the given object is inside the zone.
-	 *
 	 * @param object
-	 * @return 
+	 * @return
 	 */
 	public boolean isInsideZone(L2Object object)
 	{
@@ -396,7 +394,7 @@ public abstract class L2ZoneType
 			// Was the character not yet inside this zone?
 			if (!_characterList.containsKey(character.getObjectId()))
 			{
-				FastList<Quest> quests = this.getQuestByEvent(Quest.QuestEventType.ON_ENTER_ZONE);
+				List<Quest> quests = getQuestByEvent(Quest.QuestEventType.ON_ENTER_ZONE);
 				if (quests != null)
 				{
 					for (Quest quest : quests)
@@ -413,7 +411,7 @@ public abstract class L2ZoneType
 			// Was the character inside this zone?
 			if (_characterList.containsKey(character.getObjectId()))
 			{
-				FastList<Quest> quests = this.getQuestByEvent(Quest.QuestEventType.ON_EXIT_ZONE);
+				List<Quest> quests = getQuestByEvent(Quest.QuestEventType.ON_EXIT_ZONE);
 				if (quests != null)
 				{
 					for (Quest quest : quests)
@@ -428,15 +426,14 @@ public abstract class L2ZoneType
 	}
 	
 	/**
-	 * Force fully removes a character from the zone
-	 * Should use during teleport / logoff
+	 * Force fully removes a character from the zone Should use during teleport / logoff
 	 * @param character
 	 */
 	public void removeCharacter(L2Character character)
 	{
 		if (_characterList.containsKey(character.getObjectId()))
 		{
-			FastList<Quest> quests = this.getQuestByEvent(Quest.QuestEventType.ON_EXIT_ZONE);
+			List<Quest> quests = getQuestByEvent(Quest.QuestEventType.ON_EXIT_ZONE);
 			if (quests != null)
 			{
 				for (Quest quest : quests)
@@ -467,29 +464,43 @@ public abstract class L2ZoneType
 	
 	public abstract void onReviveInside(L2Character character);
 	
-	public L2TIntObjectHashMap<L2Character> getCharactersInside()
+	public Map<Integer, L2Character> getCharacters()
 	{
 		return _characterList;
 	}
 	
-	public L2Character[] getCharactersInsideArray()
+	public Collection<L2Character> getCharactersInside()
 	{
-		return _characterList.values(new L2Character[0]);
+		return _characterList.values();
+	}
+	
+	public List<L2PcInstance> getPlayersInside()
+	{
+		List<L2PcInstance> players = new ArrayList<>();
+		for (L2Character ch : _characterList.values())
+		{
+			if (ch != null && ch.isPlayer())
+			{
+				players.add(ch.getActingPlayer());
+			}
+		}
+		
+		return players;
 	}
 	
 	public void addQuestEvent(Quest.QuestEventType EventType, Quest q)
 	{
 		if (_questEvents == null)
-			_questEvents = new FastMap<Quest.QuestEventType, FastList<Quest>>();
-		FastList<Quest> questByEvents = _questEvents.get(EventType);
+			_questEvents = new HashMap<>();
+		List<Quest> questByEvents = _questEvents.get(EventType);
 		if (questByEvents == null)
-			questByEvents = new FastList<Quest>();
+			questByEvents = new ArrayList<Quest>();
 		if (!questByEvents.contains(q))
 			questByEvents.add(q);
 		_questEvents.put(EventType, questByEvents);
 	}
 	
-	public FastList<Quest> getQuestByEvent(Quest.QuestEventType EventType)
+	public List<Quest> getQuestByEvent(Quest.QuestEventType EventType)
 	{
 		if (_questEvents == null)
 			return null;
@@ -498,30 +509,19 @@ public abstract class L2ZoneType
 	
 	/**
 	 * Broadcasts packet to all players inside the zone
-	 * @param packet 
+	 * @param packet
 	 */
 	public void broadcastPacket(L2GameServerPacket packet)
 	{
 		if (_characterList.isEmpty())
 			return;
 		
-		_characterList.forEachValue(new BroadcastPacket(packet));
-	}
-	
-	private final class BroadcastPacket implements TObjectProcedure<L2Character>
-	{
-		final L2GameServerPacket _packet;
-		protected BroadcastPacket(L2GameServerPacket packet)
-		{
-			_packet = packet;
-		}
-		
-		@Override
-		public final boolean execute(final L2Character character)
+		for (L2Character character : _characterList.values())
 		{
-			if (character != null && character instanceof L2PcInstance)
-				character.sendPacket(_packet);
-			return true;
+			if (character != null && character.isPlayer())
+			{
+				character.sendPacket(packet);
+			}
 		}
 	}
 	
@@ -544,7 +544,7 @@ public abstract class L2ZoneType
 	@Override
 	public String toString()
 	{
-		return getClass().getSimpleName()+"["+ _id + "]";
+		return getClass().getSimpleName() + "[" + _id + "]";
 	}
 	
 	public void visualizeZone(int z)

+ 4 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2BossZone.java

@@ -210,7 +210,7 @@ public class L2BossZone extends L2ZoneType
 				{
 					_raidList.clear();
 					int count = 0;
-					for (L2Character obj : getCharactersInsideArray())
+					for (L2Character obj : getCharactersInside())
 					{
 						if (obj == null)
 						{
@@ -305,7 +305,7 @@ public class L2BossZone extends L2ZoneType
 		if (_characterList.isEmpty())
 			return;
 		
-		for (L2Character character : getCharactersInsideArray())
+		for (L2Character character : getCharactersInside())
 		{
 			if (character != null && character.isPlayer())
 			{
@@ -327,7 +327,7 @@ public class L2BossZone extends L2ZoneType
 		if (_characterList.isEmpty())
 			return;
 		
-		for (L2Character character : getCharactersInsideArray())
+		for (L2Character character : getCharactersInside())
 		{
 			if (character != null && character.isPlayer())
 			{
@@ -391,7 +391,7 @@ public class L2BossZone extends L2ZoneType
 			return;
 		
 		Map<Integer, L2PcInstance> npcKnownPlayers = npc.getKnownList().getKnownPlayers();
-		for (L2Character character : getCharactersInsideArray())
+		for (L2Character character : getCharactersInside())
 		{
 			if (character != null && character.isPlayer())
 			{

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2CastleZone.java

@@ -17,6 +17,7 @@ package com.l2jserver.gameserver.model.zone.type;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
 import com.l2jserver.gameserver.instancemanager.MapRegionManager.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.zone.L2ZoneRespawn;
 
@@ -78,11 +79,9 @@ public class L2CastleZone extends L2ZoneRespawn
 	public void banishForeigners(int owningClanId)
 	{
 		TeleportWhereType type = TeleportWhereType.Town;
-		for (L2Character temp : getCharactersInsideArray())
+		for (L2PcInstance temp : getPlayersInside())
 		{
-			if (temp == null || !temp.isPlayer())
-				continue;
-			else if (temp.getActingPlayer().getClanId() == owningClanId)
+			if (temp.getClanId() == owningClanId)
 				continue;
 			
 			temp.teleToLocation(type);

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ClanHallZone.java

@@ -17,6 +17,7 @@ package com.l2jserver.gameserver.model.zone.type;
 import com.l2jserver.gameserver.instancemanager.ClanHallManager;
 import com.l2jserver.gameserver.instancemanager.MapRegionManager.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.ClanHall;
 import com.l2jserver.gameserver.model.entity.clanhall.AuctionableHall;
 import com.l2jserver.gameserver.model.zone.L2ZoneRespawn;
@@ -97,11 +98,9 @@ public class L2ClanHallZone extends L2ZoneRespawn
 	public void banishForeigners(int owningClanId)
 	{
 		TeleportWhereType type = TeleportWhereType.ClanHall_banish;
-		for (L2Character temp : getCharactersInsideArray())
+		for (L2PcInstance temp : getPlayersInside())
 		{
-			if (temp == null || !temp.isPlayer())
-				continue;
-			else if (temp.getActingPlayer().getClanId() == owningClanId)
+			if (temp.getClanId() == owningClanId)
 				continue;
 			
 			temp.teleToLocation(type);

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2DamageZone.java

@@ -188,7 +188,7 @@ public class L2DamageZone extends L2ZoneType
 				}
 			}
 			
-			for (L2Character temp : _dmgZone.getCharactersInsideArray())
+			for (L2Character temp : _dmgZone.getCharactersInside())
 			{
 				if (temp != null && !temp.isDead())
 				{

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2DynamicZone.java

@@ -95,7 +95,7 @@ public class L2DynamicZone extends L2ZoneType
 		_task = null;
 		
 		_region.removeZone(this);
-		for (L2Character member : getCharactersInsideArray())
+		for (L2Character member : getCharactersInside())
 		{
 			member.stopSkillEffects(_skill.getId());
 		}

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2EffectZone.java

@@ -231,7 +231,7 @@ public class L2EffectZone extends L2ZoneType
 		{
 			if (isEnabled())
 			{
-				for (L2Character temp : getCharactersInsideArray())
+				for (L2Character temp : getCharactersInside())
 				{
 					if (temp != null && !temp.isDead())
 					{

+ 6 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2FortZone.java

@@ -14,8 +14,9 @@
  */
 package com.l2jserver.gameserver.model.zone.type;
 
-import com.l2jserver.gameserver.instancemanager.MapRegionManager;
+import com.l2jserver.gameserver.instancemanager.MapRegionManager.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.zone.L2ZoneRespawn;
 
 /**
@@ -76,14 +77,13 @@ public class L2FortZone extends L2ZoneRespawn
 	 */
 	public void banishForeigners(int owningClanId)
 	{
-		for (L2Character temp : getCharactersInsideArray())
+		TeleportWhereType type = TeleportWhereType.Fortress_banish;
+		for (L2PcInstance temp : getPlayersInside())
 		{
-			if (temp == null || !temp.isPlayer())
-				continue;
-			else if (temp.getActingPlayer().getClanId() == owningClanId)
+			if (temp.getClanId() == owningClanId)
 				continue;
 			
-			temp.teleToLocation(MapRegionManager.TeleportWhereType.Fortress_banish);
+			temp.teleToLocation(type);
 		}
 	}
 	

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2OlympiadStadiumZone.java

@@ -95,7 +95,7 @@ public class L2OlympiadStadiumZone extends L2ZoneRespawn
 	public final void broadcastStatusUpdate(L2PcInstance player)
 	{
 		final ExOlympiadUserInfo packet = new ExOlympiadUserInfo(player);
-		for (L2Character character : getCharactersInsideArray())
+		for (L2Character character : getCharactersInside())
 		{
 			if (character != null && character.isPlayer())
 			{
@@ -109,7 +109,7 @@ public class L2OlympiadStadiumZone extends L2ZoneRespawn
 	
 	public final void broadcastPacketToObservers(L2GameServerPacket packet)
 	{
-		for (L2Character character : getCharactersInsideArray())
+		for (L2Character character : getCharactersInside())
 		{
 			if (character != null && character.isPlayer() && character.getActingPlayer().inObserverMode())
 			{
@@ -185,7 +185,7 @@ public class L2OlympiadStadiumZone extends L2ZoneRespawn
 		else
 			sm = SystemMessage.getSystemMessage(SystemMessageId.LEFT_COMBAT_ZONE);
 		
-		for (L2Character character : getCharactersInsideArray())
+		for (L2Character character : getCharactersInside())
 		{
 			if (character == null)
 				continue;

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ResidenceHallTeleportZone.java

@@ -79,7 +79,7 @@ public class L2ResidenceHallTeleportZone extends L2ResidenceTeleportZone
 				throw new NullPointerException();
 			}
 			
-			for (L2PcInstance pc : getAllPlayers())
+			for (L2PcInstance pc : getPlayersInside())
 			{
 				if (pc != null)
 				{

+ 3 - 30
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2ResidenceTeleportZone.java

@@ -14,10 +14,6 @@
  */
 package com.l2jserver.gameserver.model.zone.type;
 
-import java.util.List;
-
-import javolution.util.FastList;
-
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.zone.L2ZoneRespawn;
@@ -70,36 +66,13 @@ public class L2ResidenceTeleportZone extends L2ZoneRespawn
 	{
 	}
 	
-	/**
-	 * Returns all players within this zone
-	 * @return
-	 */
-	public List<L2PcInstance> getAllPlayers()
-	{
-		List<L2PcInstance> players = new FastList<L2PcInstance>();
-		
-		for (L2Character temp : getCharactersInsideArray())
-		{
-			if (temp != null && temp.isPlayer())
-				players.add(temp.getActingPlayer());
-		}
-		
-		return players;
-	}
-	
 	public void oustAllPlayers()
 	{
-		if (_characterList == null || _characterList.isEmpty())
-			return;
-		for (L2Character character : getCharactersInsideArray())
+		for (L2PcInstance player : getPlayersInside())
 		{
-			if (character != null && character.isPlayer())
+			if (player != null && player.isOnline())
 			{
-				L2PcInstance player = character.getActingPlayer();
-				if (player.isOnline())
-				{
-					player.teleToLocation(getSpawnLoc(), 200);
-				}
+				player.teleToLocation(getSpawnLoc(), 200);
 			}
 		}
 	}

+ 6 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2SiegableHallZone.java

@@ -19,7 +19,7 @@ import java.util.List;
 
 import com.l2jserver.gameserver.instancemanager.MapRegionManager.TeleportWhereType;
 import com.l2jserver.gameserver.model.Location;
-import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
 /**
  * @author BiggBoss
@@ -57,15 +57,12 @@ public final class L2SiegableHallZone extends L2ClanHallZone
 	
 	public void banishNonSiegeParticipants()
 	{
-		final TeleportWhereType banish = TeleportWhereType.ClanHall_banish;
-		for (L2Character character : getCharactersInsideArray())
+		final TeleportWhereType type = TeleportWhereType.ClanHall_banish;
+		for (L2PcInstance player : getPlayersInside())
 		{
-			if (character != null && character.isPlayer())
-			{
-				if (!character.getActingPlayer().isInHideoutSiege())
-				{
-					character.teleToLocation(banish);
-				}
+			if (player != null && player.isInHideoutSiege())
+			{	
+				player.teleToLocation(type);
 			}
 		}
 	}

+ 7 - 30
L2J_Server_BETA/java/com/l2jserver/gameserver/model/zone/type/L2SiegeZone.java

@@ -14,10 +14,6 @@
  */
 package com.l2jserver.gameserver.model.zone.type;
 
-import java.util.List;
-
-import javolution.util.FastList;
-
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.CHSiegeManager;
@@ -208,7 +204,7 @@ public class L2SiegeZone extends L2ZoneType
 	{
 		if (_isActiveSiege)
 		{
-			for (L2Character character : getCharactersInsideArray())
+			for (L2Character character : getCharactersInside())
 			{
 				if (character != null)
 					onEnter(character);
@@ -217,7 +213,7 @@ public class L2SiegeZone extends L2ZoneType
 		else
 		{
 			L2PcInstance player;
-			for (L2Character character : getCharactersInsideArray())
+			for (L2Character character : getCharactersInside())
 			{
 				if (character == null)
 					continue;
@@ -251,28 +247,11 @@ public class L2SiegeZone extends L2ZoneType
 	 */
 	public void announceToPlayers(String message)
 	{
-		for (L2Character temp : getCharactersInsideArray())
-		{
-			if (temp != null && temp.isPlayer())
-				temp.sendMessage(message);
-		}
-	}
-	
-	/**
-	 * Returns all players within this zone
-	 * @return
-	 */
-	public List<L2PcInstance> getAllPlayers()
-	{
-		List<L2PcInstance> players = new FastList<L2PcInstance>();
-		
-		for (L2Character temp : getCharactersInsideArray())
+		for (L2PcInstance player : getPlayersInside())
 		{
-			if (temp != null && temp.isPlayer())
-				players.add(temp.getActingPlayer());
+			if (player != null)
+				player.sendMessage(message);
 		}
-		
-		return players;
 	}
 	
 	public int getSiegeObjectId()
@@ -302,11 +281,9 @@ public class L2SiegeZone extends L2ZoneType
 	public void banishForeigners(int owningClanId)
 	{
 		TeleportWhereType type = TeleportWhereType.Town;
-		for (L2Character temp : getCharactersInsideArray())
+		for (L2PcInstance temp : getPlayersInside())
 		{
-			if (temp == null || !temp.isPlayer())
-				continue;
-			else if (temp.getActingPlayer().getClanId() == owningClanId)
+			if (temp.getClanId() == owningClanId)
 				continue;
 			
 			temp.teleToLocation(type);

+ 7 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/GMViewSkillInfo.java

@@ -15,6 +15,8 @@
 
 package com.l2jserver.gameserver.network.serverpackets;
 
+import java.util.Collection;
+
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.skills.L2Skill;
@@ -23,14 +25,12 @@ public class GMViewSkillInfo extends L2GameServerPacket
 {
 	private static final String _S__91_GMViewSkillInfo = "[S] 97 GMViewSkillInfo";
 	private final L2PcInstance _activeChar;
-	private L2Skill[] _skills;
+	private Collection<L2Skill> _skills;
 	
-	public GMViewSkillInfo (L2PcInstance cha)
+	public GMViewSkillInfo(L2PcInstance cha)
 	{
 		_activeChar = cha;
 		_skills = _activeChar.getAllSkills();
-		if (_skills.length == 0)
-			_skills = new L2Skill[0];
 	}
 	
 	@Override
@@ -38,13 +38,11 @@ public class GMViewSkillInfo extends L2GameServerPacket
 	{
 		writeC(0x97);
 		writeS(_activeChar.getName());
-		writeD(_skills.length);
+		writeD(_skills.size());
 		
-		boolean isDisabled = false;
-		if (_activeChar.getClan() != null)
-			isDisabled = _activeChar.getClan().getReputationScore() < 0;
+		boolean isDisabled = (_activeChar.getClan() != null) ? (_activeChar.getClan().getReputationScore() < 0) : false;
 		
-		for (L2Skill skill: _skills)
+		for (L2Skill skill : _skills)
 		{
 			writeD(skill.isPassive() ? 1 : 0);
 			writeD(skill.getLevel());