浏览代码

Some cleanup and fixes on skills:
- Removed flyType;
- Removed useless boolean _isHeroSkill, _isGMSkill, _isSevenSigns and
_isClanSkill;
- Fixed trigger magic skills from weapon.
- Reported by: Maneco2

Adry85 7 年之前
父节点
当前提交
a99a6f78df

+ 5 - 5
src/main/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -1925,9 +1925,9 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		}
 		
 		// Before start AI Cast Broadcast Fly Effect is Need
-		if (skill.getFlyType() != null)
+		if (skill.isFlyType())
 		{
-			ThreadPoolManager.getInstance().scheduleEffect(new FlyToLocationTask(this, target, skill), 50);
+			ThreadPoolManager.getInstance().scheduleEffect(new FlyToLocationTask(this, target, FlyType.CHARGE), 50);
 		}
 		
 		MagicUseTask mut = new MagicUseTask(this, targets, skill, (int) skillAnimTime, simultaneously);
@@ -1986,7 +1986,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 */
 	public boolean checkDoCastConditions(Skill skill)
 	{
-		if ((skill == null) || isSkillDisabled(skill) || ((skill.getFlyType() == FlyType.CHARGE) && isMovementDisabled()))
+		if ((skill == null) || isSkillDisabled(skill) || (skill.isFlyType() && isMovementDisabled()))
 		{
 			// Send a Server->Client packet ActionFailed to the L2PcInstance
 			sendPacket(ActionFailed.STATIC_PACKET);
@@ -5350,8 +5350,8 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	 * Manage the magic skill launching task (MP, HP, Item consumation...) and display the magic skill animation on client.<br>
 	 * <B><U>Actions</U>:</B>
 	 * <ul>
-	 * <li>Send a Server->Client packet MagicSkillLaunched (to display magic skill animation) to all L2PcInstance of L2Charcater _knownPlayers</li>
-	 * <li>Consumme MP, HP and Item if necessary</li>
+	 * <li>Send a Server->Client packet MagicSkillLaunched (to display magic skill animation) to all L2PcInstance of L2Character _knownPlayers</li>
+	 * <li>Consume MP, HP and Item if necessary</li>
 	 * <li>Send a Server->Client packet StatusUpdate with MP modification to the L2PcInstance</li>
 	 * <li>Launch the magic skill in order to calculate its effects</li>
 	 * <li>If the skill type is PDAM, notify the AI of the target with AI_INTENTION_ATTACK</li>

+ 1 - 2
src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -270,7 +270,6 @@ import com.l2jserver.gameserver.network.serverpackets.ExSetCompassZoneCode;
 import com.l2jserver.gameserver.network.serverpackets.ExStartScenePlayer;
 import com.l2jserver.gameserver.network.serverpackets.ExStorageMaxCount;
 import com.l2jserver.gameserver.network.serverpackets.ExVoteSystemInfo;
-import com.l2jserver.gameserver.network.serverpackets.FlyToLocation.FlyType;
 import com.l2jserver.gameserver.network.serverpackets.FriendStatusPacket;
 import com.l2jserver.gameserver.network.serverpackets.GameGuardQuery;
 import com.l2jserver.gameserver.network.serverpackets.GetOnVehicle;
@@ -7937,7 +7936,7 @@ public final class L2PcInstance extends L2Playable
 			}
 		}
 		
-		if ((skill.getFlyType() == FlyType.CHARGE) && !GeoData.getInstance().canMove(this, target))
+		if ((skill.isFlyType()) && !GeoData.getInstance().canMove(this, target))
 		{
 			sendPacket(SystemMessageId.THE_TARGET_IS_LOCATED_WHERE_YOU_CANNOT_CHARGE);
 			return false;

+ 5 - 5
src/main/java/com/l2jserver/gameserver/model/actor/tasks/character/FlyToLocationTask.java

@@ -21,8 +21,8 @@ package com.l2jserver.gameserver.model.actor.tasks.character;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.Location;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.serverpackets.FlyToLocation;
+import com.l2jserver.gameserver.network.serverpackets.FlyToLocation.FlyType;
 
 /**
  * Task dedicated to fly a player to the location
@@ -32,13 +32,13 @@ public final class FlyToLocationTask implements Runnable
 {
 	private final L2Character _character;
 	private final Location _targetLocation;
-	private final Skill _skill;
+	private final FlyType _type;
 	
-	public FlyToLocationTask(L2Character character, L2Object target, Skill skill)
+	public FlyToLocationTask(L2Character character, L2Object target, FlyType type)
 	{
 		_character = character;
 		_targetLocation = target.getLocation();
-		_skill = skill;
+		_type = type;
 	}
 	
 	@Override
@@ -46,7 +46,7 @@ public final class FlyToLocationTask implements Runnable
 	{
 		if (_character != null)
 		{
-			_character.broadcastPacket(new FlyToLocation(_character, _targetLocation, _skill.getFlyType()));
+			_character.broadcastPacket(new FlyToLocation(_character, _targetLocation, _type));
 			_character.setLocation(_targetLocation);
 		}
 	}

+ 1 - 1
src/main/java/com/l2jserver/gameserver/model/items/L2Weapon.java

@@ -388,7 +388,7 @@ public final class L2Weapon extends L2Item
 		}
 		
 		// No Trigger if not Magic Skill
-		if (!trigger.isMagic() && !onMagicSkill.isMagic())
+		if (trigger.isMagic() != onMagicSkill.isMagic())
 		{
 			return;
 		}

+ 9 - 25
src/main/java/com/l2jserver/gameserver/model/skills/Skill.java

@@ -65,7 +65,6 @@ import com.l2jserver.gameserver.model.stats.functions.AbstractFunction;
 import com.l2jserver.gameserver.model.stats.functions.FuncTemplate;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.FlyToLocation.FlyType;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
@@ -171,10 +170,6 @@ public class Skill implements IIdentifiable
 	private final int _chargeConsume;
 	private final int _soulMaxConsume;
 	
-	private final boolean _isHeroSkill; // If true the skill is a Hero Skill
-	private final boolean _isGMSkill; // True if skill is GM skill
-	private final boolean _isSevenSigns;
-	
 	private final boolean _directHpDmg; // If true then damage is being make directly
 	private final int _effectPoint;
 	// Condition lists
@@ -186,15 +181,11 @@ public class Skill implements IIdentifiable
 	
 	private final Map<EffectScope, List<AbstractEffect>> _effectLists = new EnumMap<>(EffectScope.class);
 	
-	// Flying support
-	private final FlyType _flyType;
-	
 	private final boolean _isDebuff;
 	
 	private final boolean _isSuicideAttack;
 	private final boolean _irreplaceableBuff;
 	
-	private final boolean _isClanSkill;
 	private final boolean _excludedFromCheck;
 	private final boolean _simultaneousCast;
 	
@@ -337,16 +328,9 @@ public class Skill implements IIdentifiable
 		
 		_soulMaxConsume = set.getInt("soulMaxConsumeCount", 0);
 		
-		_isHeroSkill = SkillTreesData.getInstance().isHeroSkill(_id, _level);
-		_isGMSkill = SkillTreesData.getInstance().isGMSkill(_id, _level);
-		_isSevenSigns = (_id > 4360) && (_id < 4367);
-		_isClanSkill = SkillTreesData.getInstance().isClanSkill(_id, _level);
-		
 		_directHpDmg = set.getBoolean("dmgDirectlyToHp", false);
 		_effectPoint = set.getInt("effectPoint", 0);
 		
-		_flyType = set.getEnum("flyType", FlyType.class, null);
-		
 		_irreplaceableBuff = set.getBoolean("irreplaceableBuff", false);
 		
 		_excludedFromCheck = set.getBoolean("excludedFromCheck", false);
@@ -853,6 +837,11 @@ public class Skill implements IIdentifiable
 		return (_operateType != null) && _operateType.isChanneling();
 	}
 	
+	public boolean isFlyType()
+	{
+		return (_operateType != null) && _operateType.isFlyType();
+	}
+	
 	/**
 	 * Verify if the skill is a transformation skill.
 	 * @return {@code true} if the skill is a transformation, {@code false} otherwise
@@ -889,17 +878,17 @@ public class Skill implements IIdentifiable
 	
 	public boolean isHeroSkill()
 	{
-		return _isHeroSkill;
+		return SkillTreesData.getInstance().isHeroSkill(_id, _level);
 	}
 	
 	public boolean isGMSkill()
 	{
-		return _isGMSkill;
+		return SkillTreesData.getInstance().isGMSkill(_id, _level);
 	}
 	
 	public boolean is7Signs()
 	{
-		return _isSevenSigns;
+		return (_id > 4360) && (_id < 4367);
 	}
 	
 	/**
@@ -926,11 +915,6 @@ public class Skill implements IIdentifiable
 		return _directHpDmg;
 	}
 	
-	public FlyType getFlyType()
-	{
-		return _flyType;
-	}
-	
 	public boolean isStayAfterDeath()
 	{
 		return _stayAfterDeath;
@@ -1615,7 +1599,7 @@ public class Skill implements IIdentifiable
 	
 	public boolean isClanSkill()
 	{
-		return _isClanSkill;
+		return SkillTreesData.getInstance().isClanSkill(_id, _level);
 	}
 	
 	public boolean isExcludedFromCheck()

+ 16 - 0
src/main/java/com/l2jserver/gameserver/model/skills/SkillOperateType.java

@@ -167,4 +167,20 @@ public enum SkillOperateType
 				return false;
 		}
 	}
+	
+	/**
+	 * Verifies if the operative type correspond to a fly skill.
+	 * @return {@code true} if the operative skill type is fly, {@code false} otherwise
+	 */
+	public boolean isFlyType()
+	{
+		switch (this)
+		{
+			case DA1:
+			case DA2:
+				return true;
+			default:
+				return false;
+		}
+	}
 }