2
0
Эх сурвалжийг харах

BETA: Continuing with [5858]:

	* Removed !SkillTypes CANCEL, CANCEL_DEBUFF, NEGATE and FAKE_DEATH.
	
	Patch by: MELERIX, UnAfraid
	Tested by: Adry_85
Adry_85 12 жил өмнө
parent
commit
33da117647

+ 51 - 54
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -57,7 +57,6 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.Quest.QuestEventType;
 import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.L2SkillType;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.util.Util;
@@ -1749,58 +1748,6 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				}
 				break;
 			}
-			case CANCEL:
-			case NEGATE:
-			{
-				// decrease cancel probability
-				if (Rnd.get(50) != 0)
-				{
-					return true;
-				}
-				
-				if (sk.getTargetType() == L2TargetType.TARGET_ONE)
-				{
-					if ((attackTarget.getFirstEffect(L2EffectType.BUFF) != null) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
-					{
-						clientStopMoving(null);
-						// L2Object target = attackTarget;
-						// _actor.setTarget(_actor);
-						caster.doCast(sk);
-						// _actor.setTarget(target);
-						return true;
-					}
-					L2Character target = effectTargetReconsider(sk, false);
-					if (target != null)
-					{
-						clientStopMoving(null);
-						L2Object targets = attackTarget;
-						caster.setTarget(target);
-						caster.doCast(sk);
-						caster.setTarget(targets);
-						return true;
-					}
-				}
-				else if (canAOE(sk))
-				{
-					if (((sk.getTargetType() == L2TargetType.TARGET_AURA) || (sk.getTargetType() == L2TargetType.TARGET_BEHIND_AURA) || (sk.getTargetType() == L2TargetType.TARGET_FRONT_AURA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget))
-					
-					{
-						clientStopMoving(null);
-						// L2Object target = attackTarget;
-						// _actor.setTarget(_actor);
-						caster.doCast(sk);
-						// _actor.setTarget(target);
-						return true;
-					}
-					else if (((sk.getTargetType() == L2TargetType.TARGET_AREA) || (sk.getTargetType() == L2TargetType.TARGET_BEHIND_AREA) || (sk.getTargetType() == L2TargetType.TARGET_FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
-					{
-						clientStopMoving(null);
-						caster.doCast(sk);
-						return true;
-					}
-				}
-				break;
-			}
 			case PDAM:
 			case MDAM:
 			case BLOW:
@@ -1842,6 +1789,56 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 			}
 			default:
 			{
+				if (sk.hasEffectType(L2EffectType.CANCEL, L2EffectType.CANCEL_ALL, L2EffectType.NEGATE))
+				{
+					// decrease cancel probability
+					if (Rnd.get(50) != 0)
+					{
+						return true;
+					}
+					
+					if (sk.getTargetType() == L2TargetType.TARGET_ONE)
+					{
+						if ((attackTarget.getFirstEffect(L2EffectType.BUFF) != null) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
+						{
+							clientStopMoving(null);
+							// L2Object target = attackTarget;
+							// _actor.setTarget(_actor);
+							caster.doCast(sk);
+							// _actor.setTarget(target);
+							return true;
+						}
+						L2Character target = effectTargetReconsider(sk, false);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							L2Object targets = attackTarget;
+							caster.setTarget(target);
+							caster.doCast(sk);
+							caster.setTarget(targets);
+							return true;
+						}
+					}
+					else if (canAOE(sk))
+					{
+						if (((sk.getTargetType() == L2TargetType.TARGET_AURA) || (sk.getTargetType() == L2TargetType.TARGET_BEHIND_AURA) || (sk.getTargetType() == L2TargetType.TARGET_FRONT_AURA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget))
+						
+						{
+							clientStopMoving(null);
+							// L2Object target = attackTarget;
+							// _actor.setTarget(_actor);
+							caster.doCast(sk);
+							// _actor.setTarget(target);
+							return true;
+						}
+						else if (((sk.getTargetType() == L2TargetType.TARGET_AREA) || (sk.getTargetType() == L2TargetType.TARGET_BEHIND_AREA) || (sk.getTargetType() == L2TargetType.TARGET_FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+					}
+				}
 				if (!canAura(sk))
 				{
 					
@@ -2129,7 +2126,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 			return null;
 		}
 		L2Attackable actor = getActiveChar();
-		if ((sk.getSkillType() != L2SkillType.NEGATE) || (sk.getSkillType() != L2SkillType.CANCEL))
+		if (!sk.hasEffectType(L2EffectType.CANCEL, L2EffectType.CANCEL_ALL, L2EffectType.NEGATE))
 		{
 			if (!positive)
 			{

+ 11 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2CharacterAI.java

@@ -47,13 +47,13 @@ import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.items.L2Weapon;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance.ItemLocation;
 import com.l2jserver.gameserver.model.items.type.L2WeaponType;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.model.skills.L2SkillType;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
@@ -1331,10 +1331,6 @@ public class L2CharacterAI extends AbstractAI
 					case DEBUFF:
 						debuffSkills.add(sk);
 						break;
-					case CANCEL:
-					case NEGATE:
-						cancelSkills.add(sk);
-						break;
 					case RESURRECT:
 						resurrectSkills.add(sk);
 						hasHealOrResurrect = true;
@@ -1343,8 +1339,15 @@ public class L2CharacterAI extends AbstractAI
 					case COREDONE:
 						continue; // won't be considered something for fighting
 					default:
-						generalSkills.add(sk);
-						hasLongRangeDamageSkill = true;
+						if (sk.hasEffectType(L2EffectType.CANCEL, L2EffectType.CANCEL_ALL, L2EffectType.NEGATE))
+						{
+							cancelSkills.add(sk);
+						}
+						else
+						{
+							generalSkills.add(sk);
+							hasLongRangeDamageSkill = true;
+						}
 						break;
 				}
 				if (castRange > 70)
@@ -1475,7 +1478,7 @@ public class L2CharacterAI extends AbstractAI
 	
 	public boolean canAOE(L2Skill sk)
 	{
-		if ((sk.getSkillType() != L2SkillType.NEGATE) || (sk.getSkillType() != L2SkillType.CANCEL))
+		if (sk.hasEffectType(L2EffectType.CANCEL, L2EffectType.CANCEL_ALL, L2EffectType.NEGATE))
 		{
 			if ((sk.getTargetType() == L2TargetType.TARGET_AURA) || (sk.getTargetType() == L2TargetType.TARGET_BEHIND_AURA) || (sk.getTargetType() == L2TargetType.TARGET_FRONT_AURA) || (sk.getTargetType() == L2TargetType.TARGET_AURA_CORPSE_MOB))
 			{

+ 31 - 28
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2CubicInstance.java

@@ -38,6 +38,7 @@ import com.l2jserver.gameserver.model.actor.L2Attackable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
 import com.l2jserver.gameserver.model.entity.TvTEventTeam;
 import com.l2jserver.gameserver.model.skills.L2Skill;
@@ -804,34 +805,6 @@ public final class L2CubicInstance
 			
 			switch (type)
 			{
-				case CANCEL_DEBUFF:
-				{
-					L2Effect[] effects = target.getAllEffects();
-					
-					if ((effects == null) || (effects.length == 0))
-					{
-						break;
-					}
-					
-					int count = (skill.getMaxNegatedEffects() > 0) ? 0 : -2;
-					for (L2Effect e : effects)
-					{
-						if (e.getSkill().isDebuff() && (count < skill.getMaxNegatedEffects()))
-						{
-							// Do not remove raid curse skills
-							if ((e.getSkill().getId() != 4215) && (e.getSkill().getId() != 4515) && (e.getSkill().getId() != 4082))
-							{
-								e.exit();
-								if (count > -1)
-								{
-									count++;
-								}
-							}
-						}
-					}
-					
-					break;
-				}
 				case STUN:
 				case PARALYZE:
 				case ROOT:
@@ -895,6 +868,36 @@ public final class L2CubicInstance
 					}
 					break;
 				}
+				default:
+				{
+					if (skill.hasEffectType(L2EffectType.CANCEL_DEBUFF))
+					{
+						L2Effect[] effects = target.getAllEffects();
+						
+						if ((effects == null) || (effects.length == 0))
+						{
+							break;
+						}
+						
+						int count = (skill.getMaxNegatedEffects() > 0) ? 0 : -2;
+						for (L2Effect e : effects)
+						{
+							if (e.getSkill().isDebuff() && (count < skill.getMaxNegatedEffects()))
+							{
+								// Do not remove raid curse skills
+								if ((e.getSkill().getId() != 4215) && (e.getSkill().getId() != 4515) && (e.getSkill().getId() != 4082))
+								{
+									e.exit();
+									if (count > -1)
+									{
+										count++;
+									}
+								}
+							}
+						}
+					}
+					
+				}
 			}
 		}
 	}

+ 10 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2NpcTemplate.java

@@ -34,6 +34,7 @@ import com.l2jserver.gameserver.model.L2MinionData;
 import com.l2jserver.gameserver.model.L2NpcAIData;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.base.ClassId;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.Quest.QuestEventType;
 import com.l2jserver.gameserver.model.skills.L2Skill;
@@ -487,13 +488,16 @@ public final class L2NpcTemplate extends L2CharTemplate
 						addCOTSkill(skill);
 						addRangeSkill(skill);
 						break;
-					case CANCEL:
-					case NEGATE:
-						addNegativeSkill(skill);
-						addRangeSkill(skill);
-						break;
 					default:
-						addUniversalSkill(skill);
+						if (skill.hasEffectType(L2EffectType.CANCEL, L2EffectType.CANCEL_ALL, L2EffectType.NEGATE))
+						{
+							addNegativeSkill(skill);
+							addRangeSkill(skill);
+						}
+						else
+						{
+							addUniversalSkill(skill);
+						}
 						break;
 				}
 			}

+ 4 - 66
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/L2Skill.java

@@ -132,9 +132,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 	// Abnormal levels for skills and their canceling, e.g. poison vs negate
 	private final int _abnormalLvl; // e.g. poison or bleed lvl 2
 	// Note: see also _effectAbnormalLvl
-	private final int _negateLvl; // abnormalLvl is negated with negateLvl
-	private final int[] _negateId; // cancels the effect of skill ID
-	private final L2SkillType[] _negateStats; // lists the effect types that are canceled
 	private final Map<String, Byte> _negateAbnormals; // lists the effect abnormal types with order below the presented that are canceled
 	private final int _maxNegatedEffects; // maximum number of effects to negate
 	
@@ -290,37 +287,7 @@ public abstract class L2Skill implements IChanceSkillTrigger
 		
 		_abnormalLvl = set.getInteger("abnormalLvl", -1);
 		_effectAbnormalLvl = set.getInteger("effectAbnormalLvl", -1); // support for a separate effect abnormal lvl, e.g. poison inside a different skill
-		_negateLvl = set.getInteger("negateLvl", -1);
-		
 		_attribute = set.getString("attribute", "");
-		String str = set.getString("negateStats", "");
-		
-		if (str.isEmpty())
-		{
-			_negateStats = new L2SkillType[0];
-		}
-		else
-		{
-			String[] stats = str.split(" ");
-			L2SkillType[] array = new L2SkillType[stats.length];
-			
-			for (int i = 0; i < stats.length; i++)
-			{
-				L2SkillType type = null;
-				try
-				{
-					type = Enum.valueOf(L2SkillType.class, stats[i]);
-				}
-				catch (Exception e)
-				{
-					throw new IllegalArgumentException("SkillId: " + _id + "Enum value of type " + L2SkillType.class.getName() + "required, but found: " + stats[i]);
-				}
-				
-				array[i] = type;
-			}
-			_negateStats = array;
-		}
-		
 		String negateAbnormals = set.getString("negateAbnormals", null);
 		if ((negateAbnormals != null) && !negateAbnormals.isEmpty())
 		{
@@ -354,20 +321,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 			_negateAbnormals = null;
 		}
 		
-		String negateId = set.getString("negateId", null);
-		if (negateId != null)
-		{
-			String[] valuesSplit = negateId.split(",");
-			_negateId = new int[valuesSplit.length];
-			for (int i = 0; i < valuesSplit.length; i++)
-			{
-				_negateId[i] = Integer.parseInt(valuesSplit[i]);
-			}
-		}
-		else
-		{
-			_negateId = new int[0];
-		}
 		_maxNegatedEffects = set.getInteger("maxNegated", 0);
 		
 		_stayAfterDeath = set.getBool("stayAfterDeath", false);
@@ -650,11 +603,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 		return isPvE ? _pvePower : isPvP ? _pvpPower : _power;
 	}
 	
-	public final L2SkillType[] getNegateStats()
-	{
-		return _negateStats;
-	}
-	
 	public final Map<String, Byte> getNegateAbnormals()
 	{
 		return _negateAbnormals;
@@ -665,16 +613,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 		return _abnormalLvl;
 	}
 	
-	public final int getNegateLvl()
-	{
-		return _negateLvl;
-	}
-	
-	public final int[] getNegateId()
-	{
-		return _negateId;
-	}
-	
 	public final int getMagicLevel()
 	{
 		return _magicLevel;
@@ -1199,7 +1137,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 			case MDOT:
 			case MUTE:
 			case PARALYZE:
-			case CANCEL:
 			case BETRAY:
 			case DISARM:
 			case AGGDAMAGE:
@@ -1208,7 +1145,9 @@ public abstract class L2Skill implements IChanceSkillTrigger
 			case MANADAM:
 				return true;
 			default:
-				return false;
+			{
+				return hasEffectType(L2EffectType.CANCEL);
+			}
 		}
 	}
 	
@@ -1247,7 +1186,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 			case SWEEP:
 			case PARALYZE:
 			case AGGREDUCE:
-			case CANCEL:
 			case AGGREMOVE:
 			case AGGREDUCE_CHAR:
 			case BETRAY:
@@ -1258,7 +1196,7 @@ public abstract class L2Skill implements IChanceSkillTrigger
 			case INSTANT_JUMP:
 				return true;
 			default:
-				return false;
+				return hasEffectType(L2EffectType.CANCEL);
 		}
 	}
 	

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

@@ -121,10 +121,6 @@ public enum L2SkillType
 	BETRAY,
 	DECOY(L2SkillDecoy.class),
 	SPAWN(L2SkillSpawn.class),
-	// Cancel
-	CANCEL,
-	CANCEL_DEBUFF,
-	NEGATE,
 	
 	BUFF,
 	DEBUFF,
@@ -138,7 +134,6 @@ public enum L2SkillType
 	SUMMON_FRIEND,
 	SPOIL,
 	SWEEP(L2SkillSweeper.class),
-	FAKE_DEATH,
 	BEAST_FEED,
 	BEAST_RELEASE,
 	BEAST_RELEASE_ALL,

+ 3 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

@@ -41,6 +41,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.effects.EffectTemplate;
 import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.entity.Castle;
 import com.l2jserver.gameserver.model.entity.ClanHall;
 import com.l2jserver.gameserver.model.entity.Fort;
@@ -1808,7 +1809,7 @@ public final class Formulas
 			}
 			return Rnd.get(100) < baseRate;
 		}
-		else if (effectType.equals(L2SkillType.CANCEL))
+		else if (skill.hasEffectType(L2EffectType.CANCEL))
 		{
 			return true;
 		}
@@ -2365,7 +2366,7 @@ public final class Formulas
 	 * Calculate skill reflection according these three possibilities:<br>
 	 * <ul>
 	 * <li>Reflect failed</li>
-	 * <li>Mormal reflect (just effects). <U>Only possible for skilltypes: BUFF, REFLECT, HEAL_PERCENT, MANAHEAL_PERCENT, HOT, CPHOT, MPHOT</U></li>
+	 * <li>Normal reflect (just effects). <U>Only possible for skilltypes: BUFF, REFLECT, HEAL_PERCENT, MANAHEAL_PERCENT, HOT, CPHOT, MPHOT</U></li>
 	 * <li>vengEance reflect (100% damage reflected but damage is also dealt to actor). <U>This is only possible for skills with skilltype PDAM, BLOW, CHARGEDAM, MDAM or DEATHLINK</U></li>
 	 * </ul>
 	 * @param target