Bläddra i källkod

BETA: Core-part for ​​​​[DP9718].
Reviewed by: Zoey76

Adry_85 12 år sedan
förälder
incheckning
b69fd551a1

+ 5 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/engines/DocumentBase.java

@@ -51,6 +51,7 @@ import com.l2jserver.gameserver.model.conditions.ConditionMinDistance;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerActiveEffectId;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerActiveSkillId;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerAgathionId;
+import com.l2jserver.gameserver.model.conditions.ConditionPlayerCanEscape;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerCanSweep;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerCharges;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerClassIdRestriction;
@@ -748,6 +749,10 @@ public abstract class DocumentBase
 					cond = joinAnd(cond, new ConditionPlayerRangeFromNpc(npcIds, radius, val));
 				}
 			}
+			else if ("canEscape".equalsIgnoreCase(a.getNodeName()))
+			{
+				cond = joinAnd(cond, new ConditionPlayerCanEscape(Boolean.parseBoolean(a.getNodeValue())));
+			}
 			else if ("canSweep".equalsIgnoreCase(a.getNodeName()))
 			{
 				cond = joinAnd(cond, new ConditionPlayerCanSweep(Boolean.parseBoolean(a.getNodeValue())));

+ 84 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerCanEscape.java

@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2004-2013 L2J Server
+ *
+ * This file is part of L2J Server.
+ *
+ * L2J Server is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * L2J Server is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.model.conditions;
+
+import com.l2jserver.gameserver.instancemanager.GrandBossManager;
+import com.l2jserver.gameserver.model.PcCondOverride;
+import com.l2jserver.gameserver.model.entity.TvTEvent;
+import com.l2jserver.gameserver.model.stats.Env;
+
+/**
+ * Player Can Escape condition implementation.
+ * @author Adry_85
+ */
+public class ConditionPlayerCanEscape extends Condition
+{
+	private final boolean _val;
+	
+	public ConditionPlayerCanEscape(boolean val)
+	{
+		_val = val;
+	}
+	
+	@Override
+	public boolean testImpl(Env env)
+	{
+		boolean canTeleport = true;
+		if (env.getPlayer() == null)
+		{
+			canTeleport = false;
+		}
+		
+		if (!TvTEvent.onEscapeUse(env.getPlayer().getActingPlayer().getObjectId()))
+		{
+			canTeleport = false;
+		}
+		
+		if (env.getPlayer().getActingPlayer().isInDuel())
+		{
+			canTeleport = false;
+		}
+		
+		if (env.getPlayer().isAfraid())
+		{
+			canTeleport = false;
+		}
+		
+		if (env.getPlayer().getActingPlayer().isCombatFlagEquipped())
+		{
+			canTeleport = false;
+		}
+		
+		if (env.getPlayer().isFlying() || env.getPlayer().getActingPlayer().isFlyingMounted())
+		{
+			canTeleport = false;
+		}
+		
+		if (env.getPlayer().getActingPlayer().isInOlympiadMode())
+		{
+			canTeleport = false;
+		}
+		
+		if ((GrandBossManager.getInstance().getZone(env.getPlayer()) != null) && !env.getPlayer().canOverrideCond(PcCondOverride.SKILL_CONDITIONS))
+		{
+			canTeleport = false;
+		}
+		return (_val == canTeleport);
+	}
+}

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/effects/L2EffectType.java

@@ -53,7 +53,6 @@ public enum L2EffectType
 	FOCUS_MAX_ENERGY,
 	FOCUS_SOULS,
 	FUSION,
-	GIVE_SP,
 	HEAL,
 	HEAL_OVER_TIME,
 	HEAL_PERCENT,
@@ -93,6 +92,7 @@ public enum L2EffectType
 	STUN,
 	SUMMON_PET,
 	TARGET_ME,
+	TELEPORT,
 	THROW_UP,
 	TRANSFORMATION,
 	WARP

+ 0 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/L2SkillType.java

@@ -26,7 +26,6 @@ import com.l2jserver.gameserver.model.skills.l2skills.L2SkillSiegeFlag;
 import com.l2jserver.gameserver.model.skills.l2skills.L2SkillSignet;
 import com.l2jserver.gameserver.model.skills.l2skills.L2SkillSignetCasttime;
 import com.l2jserver.gameserver.model.skills.l2skills.L2SkillSummon;
-import com.l2jserver.gameserver.model.skills.l2skills.L2SkillTeleport;
 
 /**
  * Skill type enumerated.
@@ -78,8 +77,6 @@ public enum L2SkillType
 	FUSION,
 	
 	RESURRECT,
-	RECALL(L2SkillTeleport.class),
-	TELEPORT(L2SkillTeleport.class),
 	SUMMON_FRIEND,
 	BEAST_FEED,
 	BEAST_RELEASE,

+ 0 - 187
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillTeleport.java

@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J Server
- * 
- * This file is part of L2J Server.
- * 
- * L2J Server is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * L2J Server is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package com.l2jserver.gameserver.model.skills.l2skills;
-
-import java.util.logging.Level;
-
-import com.l2jserver.gameserver.instancemanager.GrandBossManager;
-import com.l2jserver.gameserver.instancemanager.MapRegionManager;
-import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.Location;
-import com.l2jserver.gameserver.model.PcCondOverride;
-import com.l2jserver.gameserver.model.ShotType;
-import com.l2jserver.gameserver.model.StatsSet;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.entity.TvTEvent;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.L2SkillType;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-
-public class L2SkillTeleport extends L2Skill
-{
-	private final String _recallType;
-	private final Location _loc;
-	
-	public L2SkillTeleport(StatsSet set)
-	{
-		super(set);
-		
-		_recallType = set.getString("recallType", "");
-		String coords = set.getString("teleCoords", null);
-		if (coords != null)
-		{
-			String[] valuesSplit = coords.split(",");
-			_loc = new Location(Integer.parseInt(valuesSplit[0]), Integer.parseInt(valuesSplit[1]), Integer.parseInt(valuesSplit[2]));
-		}
-		else
-		{
-			_loc = null;
-		}
-	}
-	
-	@Override
-	public void useSkill(L2Character activeChar, L2Object[] targets)
-	{
-		boolean bss = isMagic() && activeChar.isChargedShot(ShotType.BLESSED_SPIRITSHOTS);
-		
-		if (activeChar.isPlayer())
-		{
-			// Thanks nbd
-			if (!TvTEvent.onEscapeUse(activeChar.getActingPlayer().getObjectId()))
-			{
-				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
-				return;
-			}
-			
-			if (activeChar.isAfraid())
-			{
-				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
-				return;
-			}
-			
-			if (activeChar.getActingPlayer().isCombatFlagEquipped())
-			{
-				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
-				return;
-			}
-			
-			if (activeChar.getActingPlayer().isInOlympiadMode())
-			{
-				activeChar.sendPacket(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT);
-				return;
-			}
-			
-			if ((GrandBossManager.getInstance().getZone(activeChar) != null) && !activeChar.canOverrideCond(PcCondOverride.SKILL_CONDITIONS))
-			{
-				activeChar.sendPacket(SystemMessageId.YOU_MAY_NOT_SUMMON_FROM_YOUR_CURRENT_LOCATION);
-				return;
-			}
-		}
-		
-		try
-		{
-			for (L2Character target : (L2Character[]) targets)
-			{
-				if (target.isPlayer())
-				{
-					L2PcInstance targetChar = target.getActingPlayer();
-					
-					// Check to see if player is in a duel
-					if (targetChar.isInDuel())
-					{
-						targetChar.sendMessage("You cannot use escape skills during a duel.");
-						continue;
-					}
-					
-					if (targetChar != activeChar)
-					{
-						if (!TvTEvent.onEscapeUse(targetChar.getObjectId()))
-						{
-							continue;
-						}
-						
-						if (targetChar.isInOlympiadMode())
-						{
-							continue;
-						}
-						
-						if (GrandBossManager.getInstance().getZone(targetChar) != null)
-						{
-							continue;
-						}
-						
-						if (targetChar.isCombatFlagEquipped())
-						{
-							continue;
-						}
-					}
-				}
-				Location loc = null;
-				if (getSkillType() == L2SkillType.TELEPORT)
-				{
-					if (_loc != null)
-					{
-						// target is not player OR player is not flying or flymounted
-						// TODO: add check for gracia continent coords
-						if (!(target.isPlayer()) || !(target.isFlying() || (target.getActingPlayer().isFlyingMounted())))
-						{
-							loc = _loc;
-						}
-					}
-				}
-				else
-				{
-					if (_recallType.equalsIgnoreCase("Castle"))
-					{
-						loc = MapRegionManager.getInstance().getTeleToLocation(target, MapRegionManager.TeleportWhereType.Castle);
-					}
-					else if (_recallType.equalsIgnoreCase("ClanHall"))
-					{
-						loc = MapRegionManager.getInstance().getTeleToLocation(target, MapRegionManager.TeleportWhereType.ClanHall);
-					}
-					else if (_recallType.equalsIgnoreCase("Fortress"))
-					{
-						loc = MapRegionManager.getInstance().getTeleToLocation(target, MapRegionManager.TeleportWhereType.Fortress);
-					}
-					else
-					{
-						loc = MapRegionManager.getInstance().getTeleToLocation(target, MapRegionManager.TeleportWhereType.Town);
-					}
-				}
-				if (loc != null)
-				{
-					target.setInstanceId(0);
-					if (target.isPlayer())
-					{
-						target.getActingPlayer().setIsIn7sDungeon(false);
-					}
-					target.teleToLocation(loc, true);
-				}
-			}
-			
-			activeChar.setChargedShot(bss ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS, false);
-		}
-		catch (Exception e)
-		{
-			_log.log(Level.SEVERE, "", e);
-		}
-	}
-}

+ 2 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestMagicSkillUse.java

@@ -23,6 +23,7 @@ import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.position.PcPosition;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2SkillType;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
@@ -91,7 +92,7 @@ public final class RequestMagicSkillUse extends L2GameClientPacket
 		}
 		
 		// If Alternate rule Karma punishment is set to true, forbid skill Return to player with Karma
-		if ((skill.getSkillType() == L2SkillType.RECALL) && !Config.ALT_GAME_KARMA_PLAYER_CAN_TELEPORT && (activeChar.getKarma() > 0))
+		if (!Config.ALT_GAME_KARMA_PLAYER_CAN_TELEPORT && (activeChar.getKarma() > 0) && skill.hasEffectType(L2EffectType.TELEPORT))
 		{
 			return;
 		}

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java

@@ -33,6 +33,7 @@ import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
 import com.l2jserver.gameserver.model.PcCondOverride;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.Race;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
 import com.l2jserver.gameserver.model.items.L2EtcItem;
@@ -42,7 +43,6 @@ import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.type.L2ArmorType;
 import com.l2jserver.gameserver.model.items.type.L2WeaponType;
 import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.L2SkillType;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.ExUseSharedGroupItem;
@@ -170,13 +170,12 @@ public final class UseItem extends L2GameClientPacket
 				for (SkillHolder sHolder : skills)
 				{
 					L2Skill skill = sHolder.getSkill();
-					if ((skill != null) && ((skill.getSkillType() == L2SkillType.TELEPORT) || (skill.getSkillType() == L2SkillType.RECALL)))
+					if ((skill != null) && skill.hasEffectType(L2EffectType.TELEPORT))
 					{
 						return;
 					}
 				}
 			}
-			
 		}
 		
 		// If the item has reuse time and it has not passed.