Browse Source

getZone() update

JIV 15 years ago
parent
commit
c8745e85d7

+ 7 - 4
L2_GameServer/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java

@@ -426,8 +426,10 @@ public class ZoneManager
 	 * @param type
 	 * @param type
 	 * @return zone
 	 * @return zone
 	 */
 	 */
-	public L2ZoneType getZone(L2Object object, Class<? extends L2ZoneType> type)
+	public <T extends L2ZoneType> T getZone(L2Object object, Class<T> type)
 	{
 	{
+		if (object == null)
+			return null;
 		return getZone(object.getX(), object.getY(), object.getZ(), type);
 		return getZone(object.getX(), object.getY(), object.getZ(), type);
 	}
 	}
 	
 	
@@ -472,20 +474,21 @@ public class ZoneManager
 	
 	
 	/**
 	/**
 	 * Returns zone from given coordinates 
 	 * Returns zone from given coordinates 
-	 *
+	 * 
 	 * @param x
 	 * @param x
 	 * @param y
 	 * @param y
 	 * @param z
 	 * @param z
 	 * @param type
 	 * @param type
 	 * @return zone
 	 * @return zone
 	 */
 	 */
-	public L2ZoneType getZone(int x, int y, int z, Class<? extends L2ZoneType> type)
+	@SuppressWarnings("unchecked")
+	public <T extends L2ZoneType> T getZone(int x, int y, int z, Class<T> type)
 	{
 	{
 		L2WorldRegion region = L2World.getInstance().getRegion(x, y);
 		L2WorldRegion region = L2World.getInstance().getRegion(x, y);
 		for (L2ZoneType zone : region.getZones())
 		for (L2ZoneType zone : region.getZones())
 		{
 		{
 			if (zone.isInsideZone(x, y, z) && zone.getClass().equals(type))
 			if (zone.isInsideZone(x, y, z) && zone.getClass().equals(type))
-				return zone;
+				return (T) zone;
 		}
 		}
 		return null;
 		return null;
 	}
 	}

+ 2 - 3
L2_GameServer/java/com/l2jserver/gameserver/model/actor/stat/PlayableStat.java

@@ -23,7 +23,6 @@ import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.base.Experience;
 import com.l2jserver.gameserver.model.base.Experience;
-import com.l2jserver.gameserver.model.zone.L2ZoneType;
 import com.l2jserver.gameserver.model.zone.type.L2SwampZone;
 import com.l2jserver.gameserver.model.zone.type.L2SwampZone;
 import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
 import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
 import com.l2jserver.gameserver.network.communityserver.writepackets.WorldInfo;
 import com.l2jserver.gameserver.network.communityserver.writepackets.WorldInfo;
@@ -188,8 +187,8 @@ public class PlayableStat extends CharStat
 
 
 		if (getActiveChar().isInsideZone(L2Character.ZONE_SWAMP))
 		if (getActiveChar().isInsideZone(L2Character.ZONE_SWAMP))
 		{
 		{
-			L2ZoneType zone = ZoneManager.getInstance().getZone(getActiveChar(), L2SwampZone.class);
-			int bonus = zone == null ? 0 : ((L2SwampZone) zone).getMoveBonus();
+			L2SwampZone zone = ZoneManager.getInstance().getZone(getActiveChar(), L2SwampZone.class);
+			int bonus = zone == null ? 0 : zone.getMoveBonus();
 			double dbonus = bonus / 100.0; //%
 			double dbonus = bonus / 100.0; //%
 			val += val * dbonus;
 			val += val * dbonus;
 		}
 		}

+ 16 - 17
L2_GameServer/java/com/l2jserver/gameserver/skills/Formulas.java

@@ -43,7 +43,6 @@ import com.l2jserver.gameserver.model.entity.ClanHall;
 import com.l2jserver.gameserver.model.entity.Fort;
 import com.l2jserver.gameserver.model.entity.Fort;
 import com.l2jserver.gameserver.model.entity.Siege;
 import com.l2jserver.gameserver.model.entity.Siege;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
-import com.l2jserver.gameserver.model.zone.L2ZoneType;
 import com.l2jserver.gameserver.model.zone.type.L2CastleZone;
 import com.l2jserver.gameserver.model.zone.type.L2CastleZone;
 import com.l2jserver.gameserver.model.zone.type.L2ClanHallZone;
 import com.l2jserver.gameserver.model.zone.type.L2ClanHallZone;
 import com.l2jserver.gameserver.model.zone.type.L2FortZone;
 import com.l2jserver.gameserver.model.zone.type.L2FortZone;
@@ -1032,8 +1031,8 @@ public final class Formulas
 
 
 			if (player.isInsideZone(L2Character.ZONE_CLANHALL) && player.getClan() != null && player.getClan().getHasHideout() > 0)
 			if (player.isInsideZone(L2Character.ZONE_CLANHALL) && player.getClan() != null && player.getClan().getHasHideout() > 0)
 			{
 			{
-				L2ZoneType zone = ZoneManager.getInstance().getZone(player, L2ClanHallZone.class);
-				int posChIndex = zone == null ? -1 : ((L2ClanHallZone) zone).getClanHallId();
+				L2ClanHallZone zone = ZoneManager.getInstance().getZone(player, L2ClanHallZone.class);
+				int posChIndex = zone == null ? -1 : zone.getClanHallId();
 				int clanHallIndex = player.getClan().getHasHideout();
 				int clanHallIndex = player.getClan().getHasHideout();
 				if (clanHallIndex > 0 && clanHallIndex == posChIndex)
 				if (clanHallIndex > 0 && clanHallIndex == posChIndex)
 				{
 				{
@@ -1046,8 +1045,8 @@ public final class Formulas
 
 
 			if (player.isInsideZone(L2Character.ZONE_CASTLE) && player.getClan() != null && player.getClan().getHasCastle() > 0)
 			if (player.isInsideZone(L2Character.ZONE_CASTLE) && player.getClan() != null && player.getClan().getHasCastle() > 0)
 			{
 			{
-				L2ZoneType zone = ZoneManager.getInstance().getZone(player, L2CastleZone.class);
-				int posCastleIndex = zone == null ? -1 : ((L2CastleZone) zone).getCastleId();
+				L2CastleZone zone = ZoneManager.getInstance().getZone(player, L2CastleZone.class);
+				int posCastleIndex = zone == null ? -1 : zone.getCastleId();
 				int castleIndex = player.getClan().getHasCastle();
 				int castleIndex = player.getClan().getHasCastle();
 				if (castleIndex > 0 && castleIndex == posCastleIndex)
 				if (castleIndex > 0 && castleIndex == posCastleIndex)
 				{
 				{
@@ -1060,8 +1059,8 @@ public final class Formulas
 
 
 			if (player.isInsideZone(L2Character.ZONE_FORT) && player.getClan() != null && player.getClan().getHasFort() > 0)
 			if (player.isInsideZone(L2Character.ZONE_FORT) && player.getClan() != null && player.getClan().getHasFort() > 0)
 			{
 			{
-				L2ZoneType zone = ZoneManager.getInstance().getZone(player, L2FortZone.class);
-				int posFortIndex = zone == null ? -1 : ((L2FortZone) zone).getFortId();
+				L2FortZone zone = ZoneManager.getInstance().getZone(player, L2FortZone.class);
+				int posFortIndex = zone == null ? -1 : zone.getFortId();
 				int fortIndex = player.getClan().getHasFort();
 				int fortIndex = player.getClan().getHasFort();
 				if (fortIndex > 0 && fortIndex == posFortIndex)
 				if (fortIndex > 0 && fortIndex == posFortIndex)
 				{
 				{
@@ -1075,8 +1074,8 @@ public final class Formulas
 			// Mother Tree effect is calculated at last
 			// Mother Tree effect is calculated at last
 			if (player.isInsideZone(L2Character.ZONE_MOTHERTREE))
 			if (player.isInsideZone(L2Character.ZONE_MOTHERTREE))
 			{
 			{
-				L2ZoneType zone = ZoneManager.getInstance().getZone(player, L2MotherTreeZone.class);
-				int hpBonus = zone == null ? 0 : ((L2MotherTreeZone) zone).getHpRegenBonus();
+				L2MotherTreeZone zone = ZoneManager.getInstance().getZone(player, L2MotherTreeZone.class);
+				int hpBonus = zone == null ? 0 : zone.getHpRegenBonus();
 				hpRegenBonus += hpBonus;
 				hpRegenBonus += hpBonus;
 			}
 			}
 
 
@@ -1123,15 +1122,15 @@ public final class Formulas
 			// Mother Tree effect is calculated at last'
 			// Mother Tree effect is calculated at last'
 			if (player.isInsideZone(L2Character.ZONE_MOTHERTREE))
 			if (player.isInsideZone(L2Character.ZONE_MOTHERTREE))
 			{
 			{
-				L2ZoneType zone = ZoneManager.getInstance().getZone(player, L2MotherTreeZone.class);
-				int mpBonus = zone == null ? 0 : ((L2MotherTreeZone) zone).getMpRegenBonus();
+				L2MotherTreeZone zone = ZoneManager.getInstance().getZone(player, L2MotherTreeZone.class);
+				int mpBonus = zone == null ? 0 : zone.getMpRegenBonus();
 				mpRegenBonus += mpBonus;
 				mpRegenBonus += mpBonus;
 			}
 			}
 
 
 			if (player.isInsideZone(L2Character.ZONE_CLANHALL) && player.getClan() != null && player.getClan().getHasHideout() > 0)
 			if (player.isInsideZone(L2Character.ZONE_CLANHALL) && player.getClan() != null && player.getClan().getHasHideout() > 0)
 			{
 			{
-				L2ZoneType zone = ZoneManager.getInstance().getZone(player, L2ClanHallZone.class);
-				int posChIndex = zone == null ? -1 : ((L2ClanHallZone) zone).getClanHallId();
+				L2ClanHallZone zone = ZoneManager.getInstance().getZone(player, L2ClanHallZone.class);
+				int posChIndex = zone == null ? -1 : zone.getClanHallId();
 				int clanHallIndex = player.getClan().getHasHideout();
 				int clanHallIndex = player.getClan().getHasHideout();
 				if (clanHallIndex > 0 && clanHallIndex == posChIndex)
 				if (clanHallIndex > 0 && clanHallIndex == posChIndex)
 				{
 				{
@@ -1144,8 +1143,8 @@ public final class Formulas
 
 
 			if (player.isInsideZone(L2Character.ZONE_CASTLE) && player.getClan() != null && player.getClan().getHasCastle() > 0)
 			if (player.isInsideZone(L2Character.ZONE_CASTLE) && player.getClan() != null && player.getClan().getHasCastle() > 0)
 			{
 			{
-				L2ZoneType zone = ZoneManager.getInstance().getZone(player, L2CastleZone.class);
-				int posCastleIndex = zone == null ? -1 : ((L2CastleZone) zone).getCastleId();
+				L2CastleZone zone = ZoneManager.getInstance().getZone(player, L2CastleZone.class);
+				int posCastleIndex = zone == null ? -1 : zone.getCastleId();
 				int castleIndex = player.getClan().getHasCastle();
 				int castleIndex = player.getClan().getHasCastle();
 				if (castleIndex > 0 && castleIndex == posCastleIndex)
 				if (castleIndex > 0 && castleIndex == posCastleIndex)
 				{
 				{
@@ -1160,8 +1159,8 @@ public final class Formulas
 
 
 			if (player.isInsideZone(L2Character.ZONE_FORT) && player.getClan() != null && player.getClan().getHasFort() > 0)
 			if (player.isInsideZone(L2Character.ZONE_FORT) && player.getClan() != null && player.getClan().getHasFort() > 0)
 			{
 			{
-				L2ZoneType zone = ZoneManager.getInstance().getZone(player, L2FortZone.class);
-				int posFortIndex = zone == null ? -1 : ((L2FortZone) zone).getFortId();
+				L2FortZone zone = ZoneManager.getInstance().getZone(player, L2FortZone.class);
+				int posFortIndex = zone == null ? -1 : zone.getFortId();
 				int fortIndex = player.getClan().getHasFort();
 				int fortIndex = player.getClan().getHasFort();
 				if (fortIndex > 0 && fortIndex == posFortIndex)
 				if (fortIndex > 0 && fortIndex == posFortIndex)
 				{
 				{