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

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

Adry_85 12 жил өмнө
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;
 			}
 			case DEBUFF:
-			case POISON:
-			case DOT:
-			case MDOT:
-			case BLEED:
 			{
 				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))
 					{
 						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);
-						// _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))
@@ -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))
 						{
 							clientStopMoving(null);
-							// L2Object target = attackTarget;
-							// _actor.setTarget(_actor);
 							caster.doCast(sk);
-							// _actor.setTarget(target);
 							return true;
 						}
 						L2Character target = effectTargetReconsider(sk, false);
@@ -1652,10 +1551,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 						
 						{
 							clientStopMoving(null);
-							// L2Object target = attackTarget;
-							// _actor.setTarget(_actor);
 							caster.doCast(sk);
-							// _actor.setTarget(target);
 							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))
@@ -1775,6 +1671,125 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 						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))
 				{
 					
@@ -1799,16 +1814,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				else
 				{
 					clientStopMoving(null);
-					// L2Object targets = attackTarget;
-					// _actor.setTarget(_actor);
 					caster.doCast(sk);
-					// _actor.setTarget(targets);
 					return true;
 				}
 				break;
 			}
 		}
-		
 		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:
 						buffSkills.add(sk);
 						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:
 						debuffSkills.add(sk);
 						break;
@@ -1343,6 +1312,41 @@ public class L2CharacterAI extends AbstractAI
 							healSkills.add(sk);
 							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
 						{
 							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)
 			{
-				if ((e != null) && e.getSkill().isRemovedOnDamage() && (awake || (e.getSkill().getSkillType() != L2SkillType.SLEEP)))
+				if ((e != null) && e.getSkill().isRemovedOnDamage() && awake)
 				{
 					e.exit(true);
 				}
@@ -571,7 +571,7 @@ public final class CharEffectList
 		{
 			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);
 				}

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

@@ -554,7 +554,7 @@ public final class L2CubicInstance
 								target
 							};
 							
-							if ((type == L2SkillType.PARALYZE) || (type == L2SkillType.STUN) || (type == L2SkillType.ROOT) || (type == L2SkillType.AGGDAMAGE))
+							if (type == L2SkillType.AGGDAMAGE)
 							{
 								if (Config.DEBUG)
 								{
@@ -562,7 +562,7 @@ public final class L2CubicInstance
 								}
 								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)
 								{
@@ -595,6 +595,22 @@ public final class L2CubicInstance
 								}
 								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
 							_currentcount++;
@@ -771,70 +787,64 @@ public final class L2CubicInstance
 			
 			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
 					{
-						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);
 						addRangeSkill(skill);
 						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:
 						if (skill.hasEffectType(L2EffectType.CANCEL, L2EffectType.CANCEL_ALL, L2EffectType.NEGATE))
 						{
@@ -486,6 +455,33 @@ public final class L2NpcTemplate extends L2CharTemplate
 							addUniversalSkill(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
 						{
 							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
 {
-	BETRAY,
 	BLOCK_RESURRECTION,
 	BUFF,
 	CANCEL,
@@ -34,6 +33,7 @@ public enum L2EffectType
 	CHARM_OF_LUCK,
 	CHARMOFCOURAGE,
 	CLAN_GATE,
+	CONFUSION,
 	CPDAMPERCENT,
 	CPHEAL,
 	CPHEAL_OVER_TIME,
@@ -69,7 +69,6 @@ public enum L2EffectType
 	MANAHEAL,
 	MANAHEAL_BY_LEVEL,
 	MANAHEAL_PERCENT,
-	MP_CONSUME_PER_LEVEL,
 	MUTE,
 	NEGATE,
 	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);
 		
 		_removedOnAnyActionExceptMove = set.getBool("removedOnAnyActionExceptMove", false);
-		_removedOnDamage = set.getBool("removedOnDamage", _skillType == L2SkillType.SLEEP);
+		_removedOnDamage = set.getBool("removedOnDamage", false);
 		
 		_element = set.getByte("element", (byte) -1);
 		_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
 {
 	// Damage
-	DOT,
-	MDOT,
 	SIGNET(L2SkillSignet.class),
 	SIGNET_CASTTIME(L2SkillSignetCasttime.class),
 	// Disablers
-	BLEED,
-	POISON,
-	STUN,
-	ROOT,
-	CONFUSION,
-	FEAR,
-	SLEEP,
 	CONFUSE_MOB_ONLY,
-	MUTE,
-	PARALYZE,
-	DISARM,
 	// reco
 	GIVE_RECO,
 	// Aggro
@@ -86,8 +74,6 @@ public enum L2SkillType
 	// Summons
 	SUMMON(L2SkillSummon.class),
 	FEED_PET,
-	ERASE,
-	BETRAY,
 	
 	BUFF,
 	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);
 			}
 		}
-		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)
@@ -2097,7 +2106,7 @@ public final class Formulas
 	{
 		boolean reflect = false;
 		// 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;
 		}