Browse Source

BETA: Core-part for ​​​[DP9703].

Adry_85 12 years ago
parent
commit
63246a8d9a

+ 119 - 108
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -1479,10 +1479,6 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				break;
 				break;
 			}
 			}
 			case DEBUFF:
 			case DEBUFF:
-			case POISON:
-			case DOT:
-			case MDOT:
-			case BLEED:
 			{
 			{
 				if (GeoData.getInstance().canSeeTarget(caster, attackTarget) && !canAOE(sk) && !attackTarget.isDead() && (dist2 <= srange))
 				if (GeoData.getInstance().canSeeTarget(caster, attackTarget) && !canAOE(sk) && !attackTarget.isDead() && (dist2 <= srange))
 				{
 				{
@@ -1498,101 +1494,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 					if ((sk.getTargetType() == L2TargetType.AURA) || (sk.getTargetType() == L2TargetType.BEHIND_AURA) || (sk.getTargetType() == L2TargetType.FRONT_AURA) || (sk.getTargetType() == L2TargetType.AURA_CORPSE_MOB))
 					if ((sk.getTargetType() == L2TargetType.AURA) || (sk.getTargetType() == L2TargetType.BEHIND_AURA) || (sk.getTargetType() == L2TargetType.FRONT_AURA) || (sk.getTargetType() == L2TargetType.AURA_CORPSE_MOB))
 					{
 					{
 						clientStopMoving(null);
 						clientStopMoving(null);
-						// L2Object target = attackTarget;
-						// _actor.setTarget(_actor);
-						caster.doCast(sk);
-						// _actor.setTarget(target);
-						return true;
-					}
-					if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
-					{
-						clientStopMoving(null);
-						caster.doCast(sk);
-						return true;
-					}
-				}
-				else if (sk.getTargetType() == L2TargetType.ONE)
-				{
-					L2Character target = effectTargetReconsider(sk, false);
-					if (target != null)
-					{
-						clientStopMoving(null);
-						caster.doCast(sk);
-						return true;
-					}
-				}
-				break;
-			}
-			case SLEEP:
-			{
-				if (sk.getTargetType() == L2TargetType.ONE)
-				{
-					if (!attackTarget.isDead() && (dist2 <= srange))
-					{
-						if ((dist2 > range) || attackTarget.isMoving())
-						{
-							if (attackTarget.getFirstEffect(sk) == null)
-							{
-								clientStopMoving(null);
-								// _actor.setTarget(attackTarget);
-								caster.doCast(sk);
-								return true;
-							}
-						}
-					}
-					
-					L2Character target = effectTargetReconsider(sk, false);
-					if (target != null)
-					{
-						clientStopMoving(null);
-						caster.doCast(sk);
-						return true;
-					}
-				}
-				else if (canAOE(sk))
-				{
-					if ((sk.getTargetType() == L2TargetType.AURA) || (sk.getTargetType() == L2TargetType.BEHIND_AURA) || (sk.getTargetType() == L2TargetType.FRONT_AURA))
-					{
-						clientStopMoving(null);
-						// L2Object target = attackTarget;
-						// _actor.setTarget(_actor);
-						caster.doCast(sk);
-						// _actor.setTarget(target);
-						return true;
-					}
-					if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
-					{
-						clientStopMoving(null);
-						caster.doCast(sk);
-						return true;
-					}
-				}
-				break;
-			}
-			case ROOT:
-			case STUN:
-			case PARALYZE:
-			case MUTE:
-			case FEAR:
-			{
-				if (GeoData.getInstance().canSeeTarget(caster, attackTarget) && !canAOE(sk) && (dist2 <= srange))
-				{
-					if (attackTarget.getFirstEffect(sk) == null)
-					{
-						clientStopMoving(null);
-						caster.doCast(sk);
-						return true;
-					}
-				}
-				else if (canAOE(sk))
-				{
-					if ((sk.getTargetType() == L2TargetType.AURA) || (sk.getTargetType() == L2TargetType.BEHIND_AURA) || (sk.getTargetType() == L2TargetType.FRONT_AURA))
-					{
-						clientStopMoving(null);
-						// L2Object target = attackTarget;
-						// _actor.setTarget(_actor);
 						caster.doCast(sk);
 						caster.doCast(sk);
-						// _actor.setTarget(target);
 						return true;
 						return true;
 					}
 					}
 					if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
 					if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
@@ -1629,10 +1531,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 						if ((attackTarget.getFirstEffect(L2EffectType.BUFF) != null) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
 						if ((attackTarget.getFirstEffect(L2EffectType.BUFF) != null) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
 						{
 						{
 							clientStopMoving(null);
 							clientStopMoving(null);
-							// L2Object target = attackTarget;
-							// _actor.setTarget(_actor);
 							caster.doCast(sk);
 							caster.doCast(sk);
-							// _actor.setTarget(target);
 							return true;
 							return true;
 						}
 						}
 						L2Character target = effectTargetReconsider(sk, false);
 						L2Character target = effectTargetReconsider(sk, false);
@@ -1652,10 +1551,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 						
 						
 						{
 						{
 							clientStopMoving(null);
 							clientStopMoving(null);
-							// L2Object target = attackTarget;
-							// _actor.setTarget(_actor);
 							caster.doCast(sk);
 							caster.doCast(sk);
-							// _actor.setTarget(target);
 							return true;
 							return true;
 						}
 						}
 						else if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
 						else if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
@@ -1775,6 +1671,125 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 						return true;
 						return true;
 					}
 					}
 				}
 				}
+				
+				if (sk.hasEffectType(L2EffectType.SLEEP))
+				{
+					if (sk.getTargetType() == L2TargetType.ONE)
+					{
+						if (!attackTarget.isDead() && (dist2 <= srange))
+						{
+							if ((dist2 > range) || attackTarget.isMoving())
+							{
+								if (attackTarget.getFirstEffect(sk) == null)
+								{
+									clientStopMoving(null);
+									caster.doCast(sk);
+									return true;
+								}
+							}
+						}
+						
+						L2Character target = effectTargetReconsider(sk, false);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+					}
+					else if (canAOE(sk))
+					{
+						if ((sk.getTargetType() == L2TargetType.AURA) || (sk.getTargetType() == L2TargetType.BEHIND_AURA) || (sk.getTargetType() == L2TargetType.FRONT_AURA))
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+						if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+					}
+				}
+				
+				if (sk.hasEffectType(L2EffectType.STUN, L2EffectType.ROOT, L2EffectType.PARALYZE, L2EffectType.MUTE, L2EffectType.FEAR))
+				{
+					if (GeoData.getInstance().canSeeTarget(caster, attackTarget) && !canAOE(sk) && (dist2 <= srange))
+					{
+						if (attackTarget.getFirstEffect(sk) == null)
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+					}
+					else if (canAOE(sk))
+					{
+						if ((sk.getTargetType() == L2TargetType.AURA) || (sk.getTargetType() == L2TargetType.BEHIND_AURA) || (sk.getTargetType() == L2TargetType.FRONT_AURA))
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+						if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+					}
+					else if (sk.getTargetType() == L2TargetType.ONE)
+					{
+						L2Character target = effectTargetReconsider(sk, false);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+					}
+				}
+				
+				if (sk.hasEffectType(L2EffectType.DMG_OVER_TIME, L2EffectType.DMG_OVER_TIME_PERCENT))
+				{
+					if (GeoData.getInstance().canSeeTarget(caster, attackTarget) && !canAOE(sk) && !attackTarget.isDead() && (dist2 <= srange))
+					{
+						if (attackTarget.getFirstEffect(sk) == null)
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+					}
+					else if (canAOE(sk))
+					{
+						if ((sk.getTargetType() == L2TargetType.AURA) || (sk.getTargetType() == L2TargetType.BEHIND_AURA) || (sk.getTargetType() == L2TargetType.FRONT_AURA) || (sk.getTargetType() == L2TargetType.AURA_CORPSE_MOB))
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+						if (((sk.getTargetType() == L2TargetType.AREA) || (sk.getTargetType() == L2TargetType.BEHIND_AREA) || (sk.getTargetType() == L2TargetType.FRONT_AREA)) && GeoData.getInstance().canSeeTarget(caster, attackTarget) && !attackTarget.isDead() && (dist2 <= srange))
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+					}
+					else if (sk.getTargetType() == L2TargetType.ONE)
+					{
+						L2Character target = effectTargetReconsider(sk, false);
+						if (target != null)
+						{
+							clientStopMoving(null);
+							caster.doCast(sk);
+							return true;
+						}
+					}
+				}
+				
 				if (!canAura(sk))
 				if (!canAura(sk))
 				{
 				{
 					
 					
@@ -1799,16 +1814,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				else
 				else
 				{
 				{
 					clientStopMoving(null);
 					clientStopMoving(null);
-					// L2Object targets = attackTarget;
-					// _actor.setTarget(_actor);
 					caster.doCast(sk);
 					caster.doCast(sk);
-					// _actor.setTarget(targets);
 					return true;
 					return true;
 				}
 				}
 				break;
 				break;
 			}
 			}
 		}
 		}
-		
 		return false;
 		return false;
 	}
 	}
 	
 	

+ 35 - 31
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2CharacterAI.java

@@ -1292,37 +1292,6 @@ public class L2CharacterAI extends AbstractAI
 					case BUFF:
 					case BUFF:
 						buffSkills.add(sk);
 						buffSkills.add(sk);
 						continue; // won't be considered something for fighting
 						continue; // won't be considered something for fighting
-					case PARALYZE:
-					case STUN:
-						// hardcoding petrification until improvements are made to
-						// EffectTemplate... petrification is totally different for
-						// AI than paralyze
-						switch (sk.getId())
-						{
-							case 367:
-							case 4111:
-							case 4383:
-							case 4616:
-							case 4578:
-								sleepSkills.add(sk);
-								break;
-							default:
-								generalDisablers.add(sk);
-								break;
-						}
-						break;
-					case MUTE:
-						muteSkills.add(sk);
-						break;
-					case SLEEP:
-						sleepSkills.add(sk);
-						break;
-					case ROOT:
-						rootSkills.add(sk);
-						break;
-					case FEAR: // could be used as an alternative for healing?
-					case CONFUSION:
-						// trickSkills.add(sk);
 					case DEBUFF:
 					case DEBUFF:
 						debuffSkills.add(sk);
 						debuffSkills.add(sk);
 						break;
 						break;
@@ -1343,6 +1312,41 @@ public class L2CharacterAI extends AbstractAI
 							healSkills.add(sk);
 							healSkills.add(sk);
 							hasHealOrResurrect = true;
 							hasHealOrResurrect = true;
 						}
 						}
+						else if (sk.hasEffectType(L2EffectType.SLEEP))
+						{
+							sleepSkills.add(sk);
+						}
+						else if (sk.hasEffectType(L2EffectType.STUN, L2EffectType.PARALYZE))
+						{
+							// hardcoding petrification until improvements are made to
+							// EffectTemplate... petrification is totally different for
+							// AI than paralyze
+							switch (sk.getId())
+							{
+								case 367:
+								case 4111:
+								case 4383:
+								case 4616:
+								case 4578:
+									sleepSkills.add(sk);
+									break;
+								default:
+									generalDisablers.add(sk);
+									break;
+							}
+						}
+						else if (sk.hasEffectType(L2EffectType.ROOT))
+						{
+							rootSkills.add(sk);
+						}
+						else if (sk.hasEffectType(L2EffectType.CONFUSION, L2EffectType.FEAR))
+						{
+							debuffSkills.add(sk);
+						}
+						else if (sk.hasEffectType(L2EffectType.MUTE))
+						{
+							muteSkills.add(sk);
+						}
 						else
 						else
 						{
 						{
 							generalSkills.add(sk);
 							generalSkills.add(sk);

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/CharEffectList.java

@@ -561,7 +561,7 @@ public final class CharEffectList
 		{
 		{
 			for (L2Effect e : _buffs)
 			for (L2Effect e : _buffs)
 			{
 			{
-				if ((e != null) && e.getSkill().isRemovedOnDamage() && (awake || (e.getSkill().getSkillType() != L2SkillType.SLEEP)))
+				if ((e != null) && e.getSkill().isRemovedOnDamage() && awake)
 				{
 				{
 					e.exit(true);
 					e.exit(true);
 				}
 				}
@@ -571,7 +571,7 @@ public final class CharEffectList
 		{
 		{
 			for (L2Effect e : _debuffs)
 			for (L2Effect e : _debuffs)
 			{
 			{
-				if ((e != null) && e.getSkill().isRemovedOnDamage() && (awake || (e.getSkill().getSkillType() != L2SkillType.SLEEP)))
+				if ((e != null) && e.getSkill().isRemovedOnDamage() && awake)
 				{
 				{
 					e.exit(true);
 					e.exit(true);
 				}
 				}

+ 59 - 49
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2CubicInstance.java

@@ -554,7 +554,7 @@ public final class L2CubicInstance
 								target
 								target
 							};
 							};
 							
 							
-							if ((type == L2SkillType.PARALYZE) || (type == L2SkillType.STUN) || (type == L2SkillType.ROOT) || (type == L2SkillType.AGGDAMAGE))
+							if (type == L2SkillType.AGGDAMAGE)
 							{
 							{
 								if (Config.DEBUG)
 								if (Config.DEBUG)
 								{
 								{
@@ -562,7 +562,7 @@ public final class L2CubicInstance
 								}
 								}
 								useCubicDisabler(type, L2CubicInstance.this, skill, targets);
 								useCubicDisabler(type, L2CubicInstance.this, skill, targets);
 							}
 							}
-							else if ((type == L2SkillType.POISON) || (type == L2SkillType.DEBUFF) || (type == L2SkillType.DOT))
+							else if (type == L2SkillType.DEBUFF)
 							{
 							{
 								if (Config.DEBUG)
 								if (Config.DEBUG)
 								{
 								{
@@ -595,6 +595,22 @@ public final class L2CubicInstance
 								}
 								}
 								useCubicDrain(L2CubicInstance.this, skill, targets);
 								useCubicDrain(L2CubicInstance.this, skill, targets);
 							}
 							}
+							else if (skill.hasEffectType(L2EffectType.STUN, L2EffectType.ROOT, L2EffectType.PARALYZE))
+							{
+								if (Config.DEBUG)
+								{
+									_log.info("L2CubicInstance: Action.run() handler " + type);
+								}
+								useCubicDisabler(type, L2CubicInstance.this, skill, targets);
+							}
+							else if (skill.hasEffectType(L2EffectType.DMG_OVER_TIME, L2EffectType.DMG_OVER_TIME_PERCENT))
+							{
+								if (Config.DEBUG)
+								{
+									_log.info("L2CubicInstance: Action.run() handler " + type);
+								}
+								useCubicContinuous(L2CubicInstance.this, skill, targets);
+							}
 							
 							
 							// The cubic has done an action, increase the currentcount
 							// The cubic has done an action, increase the currentcount
 							_currentcount++;
 							_currentcount++;
@@ -771,70 +787,64 @@ public final class L2CubicInstance
 			
 			
 			byte shld = Formulas.calcShldUse(activeCubic.getOwner(), target, skill);
 			byte shld = Formulas.calcShldUse(activeCubic.getOwner(), target, skill);
 			
 			
-			switch (type)
+			if (skill.hasEffectType(L2EffectType.STUN, L2EffectType.PARALYZE, L2EffectType.ROOT))
 			{
 			{
-				case STUN:
-				case PARALYZE:
-				case ROOT:
+				if (Formulas.calcCubicSkillSuccess(activeCubic, target, skill, shld))
 				{
 				{
-					if (Formulas.calcCubicSkillSuccess(activeCubic, target, skill, shld))
+					// if this is a debuff let the duel manager know about it
+					// so the debuff can be removed after the duel
+					// (player & target must be in the same duel)
+					if ((target instanceof L2PcInstance) && ((L2PcInstance) target).isInDuel() && (skill.getSkillType() == L2SkillType.DEBUFF) && (activeCubic.getOwner().getDuelId() == ((L2PcInstance) target).getDuelId()))
 					{
 					{
-						// if this is a debuff let the duel manager know about it
-						// so the debuff can be removed after the duel
-						// (player & target must be in the same duel)
-						if ((target instanceof L2PcInstance) && ((L2PcInstance) target).isInDuel() && (skill.getSkillType() == L2SkillType.DEBUFF) && (activeCubic.getOwner().getDuelId() == ((L2PcInstance) target).getDuelId()))
+						DuelManager dm = DuelManager.getInstance();
+						for (L2Effect debuff : skill.getEffects(activeCubic.getOwner(), target))
 						{
 						{
-							DuelManager dm = DuelManager.getInstance();
-							for (L2Effect debuff : skill.getEffects(activeCubic.getOwner(), target))
+							if (debuff != null)
 							{
 							{
-								if (debuff != null)
-								{
-									dm.onBuff(((L2PcInstance) target), debuff);
-								}
+								dm.onBuff(((L2PcInstance) target), debuff);
 							}
 							}
 						}
 						}
-						else
-						{
-							skill.getEffects(activeCubic, target, null);
-						}
-						
-						if (Config.DEBUG)
-						{
-							_log.info("Disablers: useCubicSkill() -> success");
-						}
 					}
 					}
 					else
 					else
 					{
 					{
-						if (Config.DEBUG)
-						{
-							_log.info("Disablers: useCubicSkill() -> failed");
-						}
+						skill.getEffects(activeCubic, target, null);
+					}
+					
+					if (Config.DEBUG)
+					{
+						_log.info("Disablers: useCubicSkill() -> success");
 					}
 					}
-					break;
 				}
 				}
-				case AGGDAMAGE:
+				else
 				{
 				{
-					if (Formulas.calcCubicSkillSuccess(activeCubic, target, skill, shld))
+					if (Config.DEBUG)
 					{
 					{
-						if (target instanceof L2Attackable)
-						{
-							target.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, activeCubic.getOwner(), (int) ((150 * skill.getPower()) / (target.getLevel() + 7)));
-						}
-						skill.getEffects(activeCubic, target, null);
-						
-						if (Config.DEBUG)
-						{
-							_log.info("Disablers: useCubicSkill() -> success");
-						}
+						_log.info("Disablers: useCubicSkill() -> failed");
 					}
 					}
-					else
+				}
+			}
+			
+			if (type == L2SkillType.AGGDAMAGE)
+			{
+				if (Formulas.calcCubicSkillSuccess(activeCubic, target, skill, shld))
+				{
+					if (target instanceof L2Attackable)
 					{
 					{
-						if (Config.DEBUG)
-						{
-							_log.info("Disablers: useCubicSkill() -> failed");
-						}
+						target.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, activeCubic.getOwner(), (int) ((150 * skill.getPower()) / (target.getLevel() + 7)));
+					}
+					skill.getEffects(activeCubic, target, null);
+					
+					if (Config.DEBUG)
+					{
+						_log.info("Disablers: useCubicSkill() -> success");
+					}
+				}
+				else
+				{
+					if (Config.DEBUG)
+					{
+						_log.info("Disablers: useCubicSkill() -> failed");
 					}
 					}
-					break;
 				}
 				}
 			}
 			}
 		}
 		}

+ 27 - 31
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2NpcTemplate.java

@@ -439,37 +439,6 @@ public final class L2NpcTemplate extends L2CharTemplate
 						addCOTSkill(skill);
 						addCOTSkill(skill);
 						addRangeSkill(skill);
 						addRangeSkill(skill);
 						break;
 						break;
-					case ROOT:
-						addRootSkill(skill);
-						addImmobiliseSkill(skill);
-						addRangeSkill(skill);
-						break;
-					case SLEEP:
-						addSleepSkill(skill);
-						addImmobiliseSkill(skill);
-						break;
-					case STUN:
-						addRootSkill(skill);
-						addImmobiliseSkill(skill);
-						addRangeSkill(skill);
-						break;
-					case PARALYZE:
-						addParalyzeSkill(skill);
-						addImmobiliseSkill(skill);
-						addRangeSkill(skill);
-						break;
-					case POISON:
-					case DOT:
-					case MDOT:
-					case BLEED:
-						addDOTSkill(skill);
-						addRangeSkill(skill);
-						break;
-					case MUTE:
-					case FEAR:
-						addCOTSkill(skill);
-						addRangeSkill(skill);
-						break;
 					case DUMMY:
 					case DUMMY:
 						if (skill.hasEffectType(L2EffectType.CANCEL, L2EffectType.CANCEL_ALL, L2EffectType.NEGATE))
 						if (skill.hasEffectType(L2EffectType.CANCEL, L2EffectType.CANCEL_ALL, L2EffectType.NEGATE))
 						{
 						{
@@ -486,6 +455,33 @@ public final class L2NpcTemplate extends L2CharTemplate
 							addUniversalSkill(skill);
 							addUniversalSkill(skill);
 							addRangeSkill(skill);
 							addRangeSkill(skill);
 						}
 						}
+						else if (skill.hasEffectType(L2EffectType.SLEEP))
+						{
+							addSleepSkill(skill);
+							addImmobiliseSkill(skill);
+						}
+						else if (skill.hasEffectType(L2EffectType.STUN, L2EffectType.ROOT))
+						{
+							addRootSkill(skill);
+							addImmobiliseSkill(skill);
+							addRangeSkill(skill);
+						}
+						else if (skill.hasEffectType(L2EffectType.MUTE, L2EffectType.FEAR))
+						{
+							addCOTSkill(skill);
+							addRangeSkill(skill);
+						}
+						else if (skill.hasEffectType(L2EffectType.PARALYZE))
+						{
+							addParalyzeSkill(skill);
+							addImmobiliseSkill(skill);
+							addRangeSkill(skill);
+						}
+						else if (skill.hasEffectType(L2EffectType.DMG_OVER_TIME, L2EffectType.DMG_OVER_TIME_PERCENT))
+						{
+							addDOTSkill(skill);
+							addRangeSkill(skill);
+						}
 						else
 						else
 						{
 						{
 							addUniversalSkill(skill);
 							addUniversalSkill(skill);

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

@@ -24,7 +24,6 @@ package com.l2jserver.gameserver.model.effects;
  */
  */
 public enum L2EffectType
 public enum L2EffectType
 {
 {
-	BETRAY,
 	BLOCK_RESURRECTION,
 	BLOCK_RESURRECTION,
 	BUFF,
 	BUFF,
 	CANCEL,
 	CANCEL,
@@ -34,6 +33,7 @@ public enum L2EffectType
 	CHARM_OF_LUCK,
 	CHARM_OF_LUCK,
 	CHARMOFCOURAGE,
 	CHARMOFCOURAGE,
 	CLAN_GATE,
 	CLAN_GATE,
+	CONFUSION,
 	CPDAMPERCENT,
 	CPDAMPERCENT,
 	CPHEAL,
 	CPHEAL,
 	CPHEAL_OVER_TIME,
 	CPHEAL_OVER_TIME,
@@ -69,7 +69,6 @@ public enum L2EffectType
 	MANAHEAL,
 	MANAHEAL,
 	MANAHEAL_BY_LEVEL,
 	MANAHEAL_BY_LEVEL,
 	MANAHEAL_PERCENT,
 	MANAHEAL_PERCENT,
-	MP_CONSUME_PER_LEVEL,
 	MUTE,
 	MUTE,
 	NEGATE,
 	NEGATE,
 	NOBLESSE_BLESSING,
 	NOBLESSE_BLESSING,

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

@@ -428,7 +428,7 @@ public abstract class L2Skill implements IChanceSkillTrigger
 		_nextActionIsAttack = set.getBool("nextActionAttack", false);
 		_nextActionIsAttack = set.getBool("nextActionAttack", false);
 		
 		
 		_removedOnAnyActionExceptMove = set.getBool("removedOnAnyActionExceptMove", false);
 		_removedOnAnyActionExceptMove = set.getBool("removedOnAnyActionExceptMove", false);
-		_removedOnDamage = set.getBool("removedOnDamage", _skillType == L2SkillType.SLEEP);
+		_removedOnDamage = set.getBool("removedOnDamage", false);
 		
 		
 		_element = set.getByte("element", (byte) -1);
 		_element = set.getByte("element", (byte) -1);
 		_elementPower = set.getInteger("elementPower", 0);
 		_elementPower = set.getInteger("elementPower", 0);

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

@@ -35,22 +35,10 @@ import com.l2jserver.gameserver.model.skills.l2skills.L2SkillTeleport;
 public enum L2SkillType
 public enum L2SkillType
 {
 {
 	// Damage
 	// Damage
-	DOT,
-	MDOT,
 	SIGNET(L2SkillSignet.class),
 	SIGNET(L2SkillSignet.class),
 	SIGNET_CASTTIME(L2SkillSignetCasttime.class),
 	SIGNET_CASTTIME(L2SkillSignetCasttime.class),
 	// Disablers
 	// Disablers
-	BLEED,
-	POISON,
-	STUN,
-	ROOT,
-	CONFUSION,
-	FEAR,
-	SLEEP,
 	CONFUSE_MOB_ONLY,
 	CONFUSE_MOB_ONLY,
-	MUTE,
-	PARALYZE,
-	DISARM,
 	// reco
 	// reco
 	GIVE_RECO,
 	GIVE_RECO,
 	// Aggro
 	// Aggro
@@ -86,8 +74,6 @@ public enum L2SkillType
 	// Summons
 	// Summons
 	SUMMON(L2SkillSummon.class),
 	SUMMON(L2SkillSummon.class),
 	FEED_PET,
 	FEED_PET,
-	ERASE,
-	BETRAY,
 	
 	
 	BUFF,
 	BUFF,
 	DEBUFF,
 	DEBUFF,

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

@@ -1627,7 +1627,16 @@ public final class Formulas
 				_log.info(result);
 				_log.info(result);
 			}
 			}
 		}
 		}
-		return (Rnd.get(100) < rate);
+		
+		if ((Rnd.get(100) >= rate))
+		{
+			final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
+			sm.addCharName(env.getTarget());
+			sm.addSkillName(env.getSkill());
+			env.getCharacter().sendPacket(sm);
+			return false;
+		}
+		return true;
 	}
 	}
 	
 	
 	public static boolean calcSkillSuccess(L2Character attacker, L2Character target, L2Skill skill, byte shld, boolean ss, boolean sps, boolean bss)
 	public static boolean calcSkillSuccess(L2Character attacker, L2Character target, L2Skill skill, byte shld, boolean ss, boolean sps, boolean bss)
@@ -2097,7 +2106,7 @@ public final class Formulas
 	{
 	{
 		boolean reflect = false;
 		boolean reflect = false;
 		// Neither some special skills (like hero debuffs...) or those skills ignoring resistances can't be reflected
 		// Neither some special skills (like hero debuffs...) or those skills ignoring resistances can't be reflected
-		if ((skill.getPower() == -1) || (skill.isHeroSkill() && skill.isDebuff()))
+		if ((skill.getPower() == -1) || ((skill.isHeroSkill() && skill.isDebuff()) || (!skill.isDebuff() && skill.isOffensive())))
 		{
 		{
 			return reflect;
 			return reflect;
 		}
 		}