Sfoglia il codice sorgente

BETA: Core-part for ​[DP9604].

	- Removed old stuff
	
		Patch by: UnAfraid
		
	- Removed useless !SkillType
	- Revise soul method a bit
	- Removed useless Stats
	- More improvements and cleanup
	
	Reviewed by: !MELERIX, UnAfraid, Zoey76
Adry_85 12 anni fa
parent
commit
fb5b2fb39d
21 ha cambiato i file con 171 aggiunte e 429 eliminazioni
  1. 78 120
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2AttackableAI.java
  2. 5 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2CharacterAI.java
  3. 5 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java
  4. 5 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2SiegeGuardAI.java
  5. 0 12
      L2J_Server_BETA/java/com/l2jserver/gameserver/engines/DocumentBase.java
  6. 25 34
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/CharEffectList.java
  7. 1 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Attackable.java
  8. 6 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java
  9. 22 21
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2BabyPetInstance.java
  10. 5 17
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  11. 3 37
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/CharStat.java
  12. 2 36
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/PetStat.java
  13. 4 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2NpcTemplate.java
  14. 1 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSouls.java
  15. 0 47
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionSkillStats.java
  16. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/effects/L2EffectType.java
  17. 0 12
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/L2Skill.java
  18. 0 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/L2SkillType.java
  19. 4 39
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java
  20. 3 14
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Stats.java
  21. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/EtcStatusUpdate.java

+ 78 - 120
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -1408,86 +1408,6 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				}
 				break;
 			}
-			case HEAL:
-			case HEAL_PERCENT:
-			{
-				double percentage = (caster.getCurrentHp() / caster.getMaxHp()) * 100;
-				if (caster.isMinion() && (sk.getTargetType() != L2TargetType.SELF))
-				{
-					L2Character leader = caster.getLeader();
-					if ((leader != null) && !leader.isDead() && (Rnd.get(100) > ((leader.getCurrentHp() / leader.getMaxHp()) * 100)))
-					{
-						if (!Util.checkIfInRange((sk.getCastRange() + caster.getTemplate().getCollisionRadius() + leader.getTemplate().getCollisionRadius()), caster, leader, false) && !isParty(sk) && !caster.isMovementDisabled())
-						{
-							moveToPawn(leader, sk.getCastRange() + caster.getTemplate().getCollisionRadius() + leader.getTemplate().getCollisionRadius());
-						}
-						if (GeoData.getInstance().canSeeTarget(caster, leader))
-						{
-							clientStopMoving(null);
-							caster.setTarget(leader);
-							caster.doCast(sk);
-							return true;
-						}
-					}
-				}
-				if (Rnd.get(100) < ((100 - percentage) / 3))
-				{
-					clientStopMoving(null);
-					caster.setTarget(caster);
-					caster.doCast(sk);
-					return true;
-				}
-				
-				if (sk.getTargetType() == L2TargetType.ONE)
-				{
-					for (L2Character obj : caster.getKnownList().getKnownCharactersInRadius(sk.getCastRange() + caster.getTemplate().getCollisionRadius()))
-					{
-						if (!(obj instanceof L2Attackable) || obj.isDead())
-						{
-							continue;
-						}
-						
-						L2Attackable targets = ((L2Attackable) obj);
-						if ((caster.getFactionId() != null) && !caster.getFactionId().equals(targets.getFactionId()))
-						{
-							continue;
-						}
-						percentage = (targets.getCurrentHp() / targets.getMaxHp()) * 100;
-						if (Rnd.get(100) < ((100 - percentage) / 10))
-						{
-							if (GeoData.getInstance().canSeeTarget(caster, targets))
-							{
-								clientStopMoving(null);
-								caster.setTarget(obj);
-								caster.doCast(sk);
-								return true;
-							}
-						}
-					}
-				}
-				if (isParty(sk))
-				{
-					for (L2Character obj : caster.getKnownList().getKnownCharactersInRadius(sk.getAffectRange() + caster.getTemplate().getCollisionRadius()))
-					{
-						if (!(obj instanceof L2Attackable))
-						{
-							continue;
-						}
-						L2Npc targets = ((L2Npc) obj);
-						if ((caster.getFactionId() != null) && targets.getFactionId().equals(caster.getFactionId()))
-						{
-							if ((obj.getCurrentHp() < obj.getMaxHp()) && (Rnd.get(100) <= 20))
-							{
-								clientStopMoving(null);
-								caster.setTarget(caster);
-								caster.doCast(sk);
-								return true;
-							}
-						}
-					}
-				}
-				break;
-			}
 			case RESURRECT:
 			{
 				if (!isParty(sk))
@@ -1652,46 +1572,6 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 			case ROOT:
 			case STUN:
 			case PARALYZE:
-			{
-				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;
-					}
-					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))
-					{
-						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 MUTE:
 			case FEAR:
 			{
@@ -1824,6 +1704,84 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 						}
 					}
 				}
+				if (sk.hasEffectType(L2EffectType.HEAL, L2EffectType.HEAL_PERCENT))
+				{
+					double percentage = (caster.getCurrentHp() / caster.getMaxHp()) * 100;
+					if (caster.isMinion() && (sk.getTargetType() != L2TargetType.SELF))
+					{
+						L2Character leader = caster.getLeader();
+						if ((leader != null) && !leader.isDead() && (Rnd.get(100) > ((leader.getCurrentHp() / leader.getMaxHp()) * 100)))
+						{
+							if (!Util.checkIfInRange((sk.getCastRange() + caster.getTemplate().getCollisionRadius() + leader.getTemplate().getCollisionRadius()), caster, leader, false) && !isParty(sk) && !caster.isMovementDisabled())
+							{
+								moveToPawn(leader, sk.getCastRange() + caster.getTemplate().getCollisionRadius() + leader.getTemplate().getCollisionRadius());
+							}
+							if (GeoData.getInstance().canSeeTarget(caster, leader))
+							{
+								clientStopMoving(null);
+								caster.setTarget(leader);
+								caster.doCast(sk);
+								return true;
+							}
+						}
+					}
+					if (Rnd.get(100) < ((100 - percentage) / 3))
+					{
+						clientStopMoving(null);
+						caster.setTarget(caster);
+						caster.doCast(sk);
+						return true;
+					}
+					
+					if (sk.getTargetType() == L2TargetType.ONE)
+					{
+						for (L2Character obj : caster.getKnownList().getKnownCharactersInRadius(sk.getCastRange() + caster.getTemplate().getCollisionRadius()))
+						{
+							if (!(obj instanceof L2Attackable) || obj.isDead())
+							{
+								continue;
+							}
+							
+							L2Attackable targets = ((L2Attackable) obj);
+							if ((caster.getFactionId() != null) && !caster.getFactionId().equals(targets.getFactionId()))
+							{
+								continue;
+							}
+							percentage = (targets.getCurrentHp() / targets.getMaxHp()) * 100;
+							if (Rnd.get(100) < ((100 - percentage) / 10))
+							{
+								if (GeoData.getInstance().canSeeTarget(caster, targets))
+								{
+									clientStopMoving(null);
+									caster.setTarget(obj);
+									caster.doCast(sk);
+									return true;
+								}
+							}
+						}
+					}
+					if (isParty(sk))
+					{
+						for (L2Character obj : caster.getKnownList().getKnownCharactersInRadius(sk.getAffectRange() + caster.getTemplate().getCollisionRadius()))
+						{
+							if (!(obj instanceof L2Attackable))
+							{
+								continue;
+							}
+							L2Npc targets = ((L2Npc) obj);
+							if ((caster.getFactionId() != null) && targets.getFactionId().equals(caster.getFactionId()))
+							{
+								if ((obj.getCurrentHp() < obj.getMaxHp()) && (Rnd.get(100) <= 20))
+								{
+									clientStopMoving(null);
+									caster.setTarget(caster);
+									caster.doCast(sk);
+									return true;
+								}
+							}
+						}
+					}
+				}
 				if (!canAura(sk))
 				{
 					

+ 5 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2CharacterAI.java

@@ -1289,11 +1289,6 @@ public class L2CharacterAI extends AbstractAI
 				boolean hasLongRangeDamageSkill = false;
 				switch (sk.getSkillType())
 				{
-					case HEAL:
-					case HEAL_PERCENT:
-						healSkills.add(sk);
-						hasHealOrResurrect = true;
-						continue; // won't be considered something for fighting
 					case BUFF:
 						buffSkills.add(sk);
 						continue; // won't be considered something for fighting
@@ -1343,6 +1338,11 @@ public class L2CharacterAI extends AbstractAI
 						{
 							cancelSkills.add(sk);
 						}
+						else if (sk.hasEffectType(L2EffectType.HEAL, L2EffectType.HEAL_PERCENT))
+						{
+							healSkills.add(sk);
+							hasHealOrResurrect = true;
+						}
 						else
 						{
 							generalSkills.add(sk);

+ 5 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2FortSiegeGuardAI.java

@@ -42,6 +42,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2FortCommanderInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.effects.L2Effect;
+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.util.Util;
@@ -610,10 +611,10 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 				{
 					
 					L2Object OldTarget = _actor.getTarget();
-					if ((sk.getSkillType() == L2SkillType.BUFF) || (sk.getSkillType() == L2SkillType.HEAL))
+					if ((sk.getSkillType() == L2SkillType.BUFF) || (sk.hasEffectType(L2EffectType.HEAL)))
 					{
 						boolean useSkillSelf = true;
-						if ((sk.getSkillType() == L2SkillType.HEAL) && (_actor.getCurrentHp() > (int) (_actor.getMaxHp() / 1.5)))
+						if ((sk.hasEffectType(L2EffectType.HEAL)) && (_actor.getCurrentHp() > (int) (_actor.getMaxHp() / 1.5)))
 						{
 							useSkillSelf = false;
 							break;
@@ -762,10 +763,10 @@ public class L2FortSiegeGuardAI extends L2CharacterAI implements Runnable
 					if (((castRange * castRange) >= dist_2) && !sk.isPassive() && (_actor.getCurrentMp() >= _actor.getStat().getMpConsume(sk)) && !_actor.isSkillDisabled(sk))
 					{
 						L2Object OldTarget = _actor.getTarget();
-						if ((sk.getSkillType() == L2SkillType.BUFF) || (sk.getSkillType() == L2SkillType.HEAL))
+						if ((sk.getSkillType() == L2SkillType.BUFF) || (sk.hasEffectType(L2EffectType.HEAL)))
 						{
 							boolean useSkillSelf = true;
-							if ((sk.getSkillType() == L2SkillType.HEAL) && (_actor.getCurrentHp() > (int) (_actor.getMaxHp() / 1.5)))
+							if ((sk.hasEffectType(L2EffectType.HEAL)) && (_actor.getCurrentHp() > (int) (_actor.getMaxHp() / 1.5)))
 							{
 								useSkillSelf = false;
 								break;

+ 5 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2SiegeGuardAI.java

@@ -40,6 +40,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.effects.L2Effect;
+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.util.Util;
@@ -582,10 +583,10 @@ public class L2SiegeGuardAI extends L2CharacterAI implements Runnable
 				{
 					
 					L2Object OldTarget = _actor.getTarget();
-					if ((sk.getSkillType() == L2SkillType.BUFF) || (sk.getSkillType() == L2SkillType.HEAL))
+					if ((sk.getSkillType() == L2SkillType.BUFF) || (sk.hasEffectType(L2EffectType.HEAL)))
 					{
 						boolean useSkillSelf = true;
-						if ((sk.getSkillType() == L2SkillType.HEAL) && (_actor.getCurrentHp() > (int) (_actor.getMaxHp() / 1.5)))
+						if ((sk.hasEffectType(L2EffectType.HEAL)) && (_actor.getCurrentHp() > (int) (_actor.getMaxHp() / 1.5)))
 						{
 							useSkillSelf = false;
 							break;
@@ -730,10 +731,10 @@ public class L2SiegeGuardAI extends L2CharacterAI implements Runnable
 					if (((castRange * castRange) >= dist_2) && !sk.isPassive() && (_actor.getCurrentMp() >= _actor.getStat().getMpConsume(sk)) && !_actor.isSkillDisabled(sk))
 					{
 						L2Object OldTarget = _actor.getTarget();
-						if ((sk.getSkillType() == L2SkillType.BUFF) || (sk.getSkillType() == L2SkillType.HEAL))
+						if ((sk.getSkillType() == L2SkillType.BUFF) || (sk.hasEffectType(L2EffectType.HEAL)))
 						{
 							boolean useSkillSelf = true;
-							if ((sk.getSkillType() == L2SkillType.HEAL) && (_actor.getCurrentHp() > (int) (_actor.getMaxHp() / 1.5)))
+							if ((sk.hasEffectType(L2EffectType.HEAL)) && (_actor.getCurrentHp() > (int) (_actor.getMaxHp() / 1.5)))
 							{
 								useSkillSelf = false;
 								break;

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

@@ -91,7 +91,6 @@ import com.l2jserver.gameserver.model.conditions.ConditionPlayerTvTEvent;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerVehicleMounted;
 import com.l2jserver.gameserver.model.conditions.ConditionPlayerWeight;
 import com.l2jserver.gameserver.model.conditions.ConditionSiegeZone;
-import com.l2jserver.gameserver.model.conditions.ConditionSkillStats;
 import com.l2jserver.gameserver.model.conditions.ConditionSlotItemId;
 import com.l2jserver.gameserver.model.conditions.ConditionTargetAbnormal;
 import com.l2jserver.gameserver.model.conditions.ConditionTargetActiveEffectId;
@@ -509,10 +508,6 @@ public abstract class DocumentBase
 		{
 			return parseTargetCondition(n, template);
 		}
-		if ("skill".equalsIgnoreCase(n.getNodeName()))
-		{
-			return parseSkillCondition(n);
-		}
 		if ("using".equalsIgnoreCase(n.getNodeName()))
 		{
 			return parseUsingCondition(n);
@@ -1089,13 +1084,6 @@ public abstract class DocumentBase
 		return cond;
 	}
 	
-	protected Condition parseSkillCondition(Node n)
-	{
-		NamedNodeMap attrs = n.getAttributes();
-		Stats stat = Stats.valueOfXml(attrs.getNamedItem("stat").getNodeValue());
-		return new ConditionSkillStats(stat);
-	}
-	
 	protected Condition parseUsingCondition(Node n)
 	{
 		Condition cond = null;

+ 25 - 34
L2J_Server_BETA/java/com/l2jserver/gameserver/model/CharEffectList.java

@@ -345,12 +345,9 @@ public class CharEffectList
 		{
 			if ((e != null) && e.getShowIcon() && !e.getSkill().isDance() && !e.getSkill().isTriggeredSkill() && !e.getSkill().is7Signs())
 			{
-				switch (e.getSkill().getSkillType())
+				if (e.getSkill().getSkillType() == L2SkillType.BUFF)
 				{
-					case BUFF:
-					case HEAL_PERCENT:
-					case MANAHEAL_PERCENT:
-						buffCount++;
+					buffCount++;
 				}
 			}
 		}
@@ -939,34 +936,30 @@ public class CharEffectList
 					effectsToRemove = getBuffCount() - _owner.getMaxBuffCount();
 					if (effectsToRemove >= 0)
 					{
-						switch (newSkill.getSkillType())
+						if (newSkill.getSkillType() == L2SkillType.BUFF)
 						{
-							case BUFF:
-							case HEAL_PERCENT:
-							case MANAHEAL_PERCENT:
-								for (L2Effect e : _buffs)
+							for (L2Effect e : _buffs)
+							{
+								if ((e == null) || e.getSkill().isDance() || e.getSkill().isTriggeredSkill())
+								{
+									continue;
+								}
+								
+								if (e.getSkill().getSkillType() == L2SkillType.BUFF)
+								{
+									e.exit();
+									effectsToRemove--;
+								}
+								else
+								{
+									continue; // continue for()
+								}
+								
+								if (effectsToRemove < 0)
 								{
-									if ((e == null) || e.getSkill().isDance() || e.getSkill().isTriggeredSkill())
-									{
-										continue;
-									}
-									
-									switch (e.getSkill().getSkillType())
-									{
-										case BUFF:
-										case HEAL_PERCENT:
-										case MANAHEAL_PERCENT:
-											e.exit();
-											effectsToRemove--;
-											break; // break switch()
-										default:
-											continue; // continue for()
-									}
-									if (effectsToRemove < 0)
-									{
-										break; // break for()
-									}
+									break; // break for()
 								}
+							}
 						}
 					}
 				}
@@ -1236,11 +1229,9 @@ public class CharEffectList
 					continue;
 				}
 				
-				switch (e.getEffectType())
+				if (e.getEffectType() == L2EffectType.SIGNET_GROUND)
 				{
-					case CHARGE: // handled by EtcStatusUpdate
-					case SIGNET_GROUND:
-						continue;
+					continue;
 				}
 				
 				if (e.getInUse())

+ 1 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Attackable.java

@@ -901,10 +901,7 @@ public class L2Attackable extends L2Npc
 						}
 						
 						// Avoid "over damage"
-						if (partyDmg > getMaxHp())
-						{
-							partyDmg = getMaxHp();
-						}
+						partyDmg = Math.min(partyDmg, getMaxHp());
 						
 						// Calculate the level difference between Party and L2Attackable
 						levelDiff = partyLvl - getLevel();

+ 6 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -1666,11 +1666,10 @@ public abstract class L2Character extends L2Object implements ISkillsHolder
 				switch (skill.getSkillType())
 				{
 					case BUFF:
-					case HEAL:
 						doit = true;
 						break;
 					case DUMMY:
-						if (skill.hasEffectType(L2EffectType.CPHEAL))
+						if (skill.hasEffectType(L2EffectType.CPHEAL, L2EffectType.HEAL))
 						{
 							doit = true;
 						}
@@ -6500,12 +6499,13 @@ public abstract class L2Character extends L2Object implements ISkillsHolder
 			// Consume HP if necessary and Send the Server->Client packet StatusUpdate with current HP and MP to all other L2PcInstance to inform
 			if (skill.getHpConsume() > 0)
 			{
-				double consumeHp;
+				double consumeHp = skill.getHpConsume();
 				
-				consumeHp = calcStat(Stats.HP_CONSUME_RATE, skill.getHpConsume(), null, null);
-				if ((consumeHp + 1) >= getCurrentHp())
+				if (consumeHp >= getCurrentHp())
 				{
-					consumeHp = getCurrentHp() - 1.0;
+					sendPacket(SystemMessageId.NOT_ENOUGH_HP);
+					abortCast();
+					return;
 				}
 				
 				getStatus().reduceHp(consumeHp, this, true);

+ 22 - 21
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2BabyPetInstance.java

@@ -91,27 +91,6 @@ public final class L2BabyPetInstance extends L2PetInstance
 				
 				switch (skill.getSkillType())
 				{
-					case HEAL:
-						if (healPower == 0)
-						{
-							// set both heal types to the same skill
-							_majorHeal = new SkillHolder(skill);
-							_minorHeal = _majorHeal;
-							healPower = skill.getPower();
-						}
-						else
-						{
-							// another heal skill found - search for most powerful
-							if (skill.getPower() > healPower)
-							{
-								_majorHeal = new SkillHolder(skill);
-							}
-							else
-							{
-								_minorHeal = new SkillHolder(skill);
-							}
-						}
-						break;
 					case BUFF:
 						if (_buffs == null)
 						{
@@ -124,6 +103,28 @@ public final class L2BabyPetInstance extends L2PetInstance
 						{
 							_recharge = new SkillHolder(skill);
 						}
+						else if (skill.hasEffectType(L2EffectType.HEAL))
+						{
+							if (healPower == 0)
+							{
+								// set both heal types to the same skill
+								_majorHeal = new SkillHolder(skill);
+								_minorHeal = _majorHeal;
+								healPower = skill.getPower();
+							}
+							else
+							{
+								// another heal skill found - search for most powerful
+								if (skill.getPower() > healPower)
+								{
+									_majorHeal = new SkillHolder(skill);
+								}
+								else
+								{
+									_minorHeal = new SkillHolder(skill);
+								}
+							}
+						}
 						break;
 				}
 			}

+ 5 - 17
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -13708,7 +13708,7 @@ public final class L2PcInstance extends L2Playable
 	 * Returns the Number of Souls this L2PcInstance got.
 	 * @return
 	 */
-	public int getSouls()
+	public int getChargedSouls()
 	{
 		return _souls;
 	}
@@ -13722,7 +13722,7 @@ public final class L2PcInstance extends L2Playable
 	{
 		if (_souls >= skill.getNumSouls())
 		{
-			sendPacket(SystemMessageId.SOUL_CANNOT_BE_INCREASED_ANYMORE);
+			sendPacket(SystemMessageId.SOUL_CANNOT_BE_ABSORBED_ANYMORE);
 			return;
 		}
 		
@@ -13740,25 +13740,13 @@ public final class L2PcInstance extends L2Playable
 	 */
 	public void increaseSouls(int count)
 	{
-		if ((count < 0) || (count > 45))
-		{
-			return;
-		}
-		
 		_souls += count;
-		
-		if (getSouls() > 45)
-		{
-			_souls = 45;
-		}
-		
+		// TODO: Fix double message if skill have a self effect.
 		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOUR_SOUL_HAS_INCREASED_BY_S1_SO_IT_IS_NOW_AT_S2);
 		sm.addNumber(count);
 		sm.addNumber(_souls);
 		sendPacket(sm);
-		
 		restartSoulTask();
-		
 		sendPacket(new EtcStatusUpdate(this));
 	}
 	
@@ -13772,12 +13760,12 @@ public final class L2PcInstance extends L2Playable
 	{
 		_souls -= count;
 		
-		if (getSouls() < 0)
+		if (getChargedSouls() < 0)
 		{
 			_souls = 0;
 		}
 		
-		if (getSouls() == 0)
+		if (getChargedSouls() == 0)
 		{
 			stopSoulTask();
 		}

+ 3 - 37
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/CharStat.java

@@ -328,7 +328,7 @@ public class CharStat
 	}
 	
 	/**
-	 * Return the MAtk (base+modifier) of the L2Character for a skill used in function of abnormal effects in progress.<br>
+	 * Return the MAtk (base+modifier) of the L2Character.<br>
 	 * <B><U>Example of use</U>: Calculate Magic damage
 	 * @param target The L2Character targeted by the skill
 	 * @param skill The L2Skill used against the target
@@ -340,6 +340,7 @@ public class CharStat
 		{
 			return 1;
 		}
+		
 		float bonusAtk = 1;
 		if (Config.L2JMOD_CHAMPION_ENABLE && _activeChar.isChampion())
 		{
@@ -349,44 +350,9 @@ public class CharStat
 		{
 			bonusAtk *= Config.RAID_MATTACK_MULTIPLIER;
 		}
-		double attack = _activeChar.getTemplate().getBaseMAtk() * bonusAtk;
-		// Get the skill type to calculate its effect in function of base stats
-		// of the L2Character target
-		Stats stat = skill == null ? null : skill.getStat();
-		
-		if (stat != null)
-		{
-			switch (stat)
-			{
-				case AGGRESSION:
-					attack += _activeChar.getTemplate().getBaseAggression();
-					break;
-				case BLEED:
-					attack += _activeChar.getTemplate().getBaseBleed();
-					break;
-				case POISON:
-					attack += _activeChar.getTemplate().getBasePoison();
-					break;
-				case STUN:
-					attack += _activeChar.getTemplate().getBaseStun();
-					break;
-				case ROOT:
-					attack += _activeChar.getTemplate().getBaseRoot();
-					break;
-				case MOVEMENT:
-					attack += _activeChar.getTemplate().getBaseMovement();
-					break;
-				case CONFUSION:
-					attack += _activeChar.getTemplate().getBaseConfusion();
-					break;
-				case SLEEP:
-					attack += _activeChar.getTemplate().getBaseSleep();
-					break;
-			}
-		}
 		
 		// Calculate modifiers Magic Attack
-		return (int) calcStat(Stats.MAGIC_ATTACK, attack, target, skill);
+		return (int) calcStat(Stats.MAGIC_ATTACK, _activeChar.getTemplate().getBaseMAtk() * bonusAtk, target, skill);
 	}
 	
 	/**

+ 2 - 36
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/stat/PetStat.java

@@ -171,47 +171,13 @@ public class PetStat extends SummonStat
 	@Override
 	public int getMAtk(L2Character target, L2Skill skill)
 	{
-		double attack = getActiveChar().getPetLevelData().getPetMAtk();
-		Stats stat = skill == null ? null : skill.getStat();
-		if (stat != null)
-		{
-			switch (stat)
-			{
-				case AGGRESSION:
-					attack += getActiveChar().getTemplate().getBaseAggression();
-					break;
-				case BLEED:
-					attack += getActiveChar().getTemplate().getBaseBleed();
-					break;
-				case POISON:
-					attack += getActiveChar().getTemplate().getBasePoison();
-					break;
-				case STUN:
-					attack += getActiveChar().getTemplate().getBaseStun();
-					break;
-				case ROOT:
-					attack += getActiveChar().getTemplate().getBaseRoot();
-					break;
-				case MOVEMENT:
-					attack += getActiveChar().getTemplate().getBaseMovement();
-					break;
-				case CONFUSION:
-					attack += getActiveChar().getTemplate().getBaseConfusion();
-					break;
-				case SLEEP:
-					attack += getActiveChar().getTemplate().getBaseSleep();
-					break;
-			}
-		}
-		
-		return (int) calcStat(Stats.MAGIC_ATTACK, attack, target, skill);
+		return (int) calcStat(Stats.MAGIC_ATTACK, getActiveChar().getPetLevelData().getPetMAtk(), target, skill);
 	}
 	
 	@Override
 	public int getMDef(L2Character target, L2Skill skill)
 	{
-		double defence = getActiveChar().getPetLevelData().getPetMDef();
-		return (int) calcStat(Stats.MAGIC_DEFENCE, defence, target, skill);
+		return (int) calcStat(Stats.MAGIC_DEFENCE, getActiveChar().getPetLevelData().getPetMDef(), target, skill);
 	}
 	
 	@Override

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

@@ -431,10 +431,6 @@ public final class L2NpcTemplate extends L2CharTemplate
 					case BUFF:
 						addBuffSkill(skill);
 						break;
-					case HEAL:
-					case HEAL_PERCENT:
-						addHealSkill(skill);
-						break;
 					case RESURRECT:
 						addResSkill(skill);
 						break;
@@ -493,6 +489,10 @@ public final class L2NpcTemplate extends L2CharTemplate
 							addNegativeSkill(skill);
 							addRangeSkill(skill);
 						}
+						else if (skill.hasEffectType(L2EffectType.HEAL, L2EffectType.HEAL_PERCENT))
+						{
+							addHealSkill(skill);
+						}
 						else
 						{
 							addUniversalSkill(skill);

+ 1 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionPlayerSouls.java

@@ -25,7 +25,6 @@ import com.l2jserver.gameserver.model.stats.Env;
  */
 public class ConditionPlayerSouls extends Condition
 {
-	
 	private final int _souls;
 	
 	/**
@@ -40,10 +39,6 @@ public class ConditionPlayerSouls extends Condition
 	@Override
 	public boolean testImpl(Env env)
 	{
-		if (env.getPlayer() == null)
-		{
-			return false;
-		}
-		return env.getPlayer().getSouls() >= _souls;
+		return (env.getPlayer() != null) && (env.getPlayer().getChargedSouls() >= _souls);
 	}
 }

+ 0 - 47
L2J_Server_BETA/java/com/l2jserver/gameserver/model/conditions/ConditionSkillStats.java

@@ -1,47 +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.conditions;
-
-import com.l2jserver.gameserver.model.stats.Env;
-import com.l2jserver.gameserver.model.stats.Stats;
-
-/**
- * The Class ConditionSkillStats.
- * @author mkizub
- */
-public class ConditionSkillStats extends Condition
-{
-	private final Stats _stat;
-	
-	/**
-	 * Instantiates a new condition skill stats.
-	 * @param stat the stat
-	 */
-	public ConditionSkillStats(Stats stat)
-	{
-		super();
-		_stat = stat;
-	}
-	
-	@Override
-	public boolean testImpl(Env env)
-	{
-		return (env.getSkill() != null) && (env.getSkill().getStat() == _stat);
-	}
-}

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

@@ -33,7 +33,6 @@ public enum L2EffectType
 	CANCEL_ALL,
 	CANCEL_DEBUFF,
 	CHANCE_SKILL_TRIGGER,
-	CHARGE,
 	CHARM_OF_LUCK,
 	CHARMOFCOURAGE,
 	CLAN_GATE,
@@ -51,6 +50,7 @@ public enum L2EffectType
 	ENLARGE_ABNORMAL_SLOT,
 	FAKE_DEATH,
 	FEAR,
+	FOCUS_SOULS,
 	FUSION,
 	GIVE_SP,
 	HARVESTING,

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

@@ -64,7 +64,6 @@ import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
 import com.l2jserver.gameserver.model.stats.BaseStats;
 import com.l2jserver.gameserver.model.stats.Env;
 import com.l2jserver.gameserver.model.stats.Formulas;
-import com.l2jserver.gameserver.model.stats.Stats;
 import com.l2jserver.gameserver.model.zone.ZoneId;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -186,7 +185,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 	private final byte _element;
 	private final int _elementPower;
 	
-	private final Stats _stat;
 	private final BaseStats _saveVs;
 	
 	private final int _condition;
@@ -394,7 +392,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 		_lvlBonusRate = set.getInteger("lvlBonusRate", 0);
 		_minChance = set.getInteger("minChance", Config.MIN_ABNORMAL_STATE_SUCCESS_RATE);
 		_maxChance = set.getInteger("maxChance", Config.MAX_ABNORMAL_STATE_SUCCESS_RATE);
-		_stat = set.getEnum("stat", Stats.class, null);
 		_ignoreShield = set.getBool("ignoreShld", false);
 		_skillType = set.getEnum("skillType", L2SkillType.class, L2SkillType.DUMMY);
 		_effectType = set.getEnum("effectType", L2SkillType.class, null);
@@ -810,15 +807,6 @@ public abstract class L2Skill implements IChanceSkillTrigger
 		return _triggeredId > 1;
 	}
 	
-	/**
-	 * Return the skill type (ex : BLEED, SLEEP, WATER...).
-	 * @return
-	 */
-	public final Stats getStat()
-	{
-		return _stat;
-	}
-	
 	/**
 	 * Return skill saveVs base stat (STR, INT ...).
 	 * @return

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

@@ -65,10 +65,6 @@ public enum L2SkillType
 	MUTE,
 	PARALYZE,
 	DISARM,
-	// hp, mp, cp
-	HEAL,
-	HEAL_PERCENT,
-	MANAHEAL_PERCENT,
 	// reco
 	GIVE_RECO,
 	// vitality
@@ -129,7 +125,6 @@ public enum L2SkillType
 	BEAST_RELEASE_ALL,
 	BEAST_SKILL,
 	BEAST_ACCOMPANY,
-	CHARGESOUL,
 	TRANSFORMDISPEL,
 	SUMMON_TRAP(L2SkillTrap.class),
 	DETECT_TRAP,

+ 4 - 39
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

@@ -292,7 +292,7 @@ public final class Formulas
 			}
 			else
 			{
-				double siegeModifier = calcSiegeRegenModifer(player);
+				double siegeModifier = calcSiegeRegenModifier(player);
 				if (siegeModifier > 0)
 				{
 					hpRegenMultiplier *= siegeModifier;
@@ -582,7 +582,7 @@ public final class Formulas
 		return 1.0 - (distToCenter * 0.0005); // Maximum Decreased Regen of ~ -65%;
 	}
 	
-	public static final double calcSiegeRegenModifer(L2PcInstance activeChar)
+	public static final double calcSiegeRegenModifier(L2PcInstance activeChar)
 	{
 		if ((activeChar == null) || (activeChar.getClan() == null))
 		{
@@ -1509,36 +1509,6 @@ public final class Formulas
 		// of the L2Character target
 		if (skill != null)
 		{
-			// first, get the natural template vulnerability values for the target
-			Stats stat = skill.getStat();
-			if (stat != null)
-			{
-				switch (stat)
-				{
-					case AGGRESSION:
-						multiplier = target.getTemplate().getBaseAggressionVuln();
-						break;
-					case BLEED:
-						multiplier = target.getTemplate().getBaseBleedVuln();
-						break;
-					case POISON:
-						multiplier = target.getTemplate().getBasePoisonVuln();
-						break;
-					case STUN:
-						multiplier = target.getTemplate().getBaseStunVuln();
-						break;
-					case ROOT:
-						multiplier = target.getTemplate().getBaseRootVuln();
-						break;
-					case MOVEMENT:
-						multiplier = target.getTemplate().getBaseMovementVuln();
-						break;
-					case SLEEP:
-						multiplier = target.getTemplate().getBaseSleepVuln();
-						break;
-				}
-			}
-			
 			// Finally, calculate skill type vulnerabilities
 			multiplier = calcSkillTraitVulnerability(multiplier, target, skill);
 		}
@@ -2290,13 +2260,6 @@ public final class Formulas
 		// Check for non-reflected skilltypes, need additional retail check
 		switch (skill.getSkillType())
 		{
-			case BUFF:
-			case HEAL_PERCENT:
-			case MANAHEAL_PERCENT:
-			case AGGDEBUFF:
-			case CONT:
-				return SKILL_REFLECT_FAILED;
-				// these skill types can deal damage
 			case PDAM:
 			case MDAM:
 			case BLOW:
@@ -2313,6 +2276,8 @@ public final class Formulas
 					reflect |= SKILL_REFLECT_VENGEANCE;
 				}
 				break;
+			default:
+				return SKILL_REFLECT_FAILED;
 		}
 		
 		final double reflectChance = target.calcStat(skill.isMagic() ? Stats.REFLECT_SKILL_MAGIC : Stats.REFLECT_SKILL_PHYSIC, 0, null, skill);

+ 3 - 14
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Stats.java

@@ -28,7 +28,7 @@ public enum Stats
 {
 	// Base stats, for each in Calculator a slot is allocated
 	
-	// HP & MP
+	// HP, MP & CP
 	MAX_HP("maxHp"),
 	MAX_MP("maxMp"),
 	MAX_CP("maxCp"),
@@ -38,10 +38,8 @@ public enum Stats
 	REGENERATE_HP_RATE("regHp"),
 	REGENERATE_CP_RATE("regCp"),
 	REGENERATE_MP_RATE("regMp"),
-	RECHARGE_MP_RATE("gainMp"),
-	HEAL_EFFECTIVNESS("gainHp"),
-	HEAL_PROFICIENCY("giveHp"),
-	HEAL_STATIC_BONUS("bonusHp"),
+	MANA_CHARGE("manaCharge"),
+	HEAL_EFFECT("healEffect"),
 	
 	// ATTACK & DEFENCE
 	POWER_DEFENCE("pDef"),
@@ -57,7 +55,6 @@ public enum Stats
 	SHIELD_DEFENCE("sDef"),
 	CRITICAL_DAMAGE("cAtk"),
 	CRITICAL_DAMAGE_ADD("cAtkAdd"), // this is another type for special critical damage mods - vicious stance, critical power and critical damage SA
-	// it was totally bad since now...
 	MAGIC_CRIT_DMG("mCritPower"),
 	
 	// PVP BONUS
@@ -114,13 +111,6 @@ public enum Stats
 	BREATH("breath"),
 	FALL("fall"),
 	AGGRESSION("aggression"), // locks a mob on tank caster
-	BLEED("bleed"), // by daggers, like poison
-	POISON("poison"), // by magic, damage over time
-	STUN("stun"), // disable move/ATTACK for a period of time
-	ROOT("root"), // disable movement, but not ATTACK
-	MOVEMENT("movement"), // slow-down movement, de-buff
-	CONFUSION("confusion"), // mob changes target, opposite to aggression/hate
-	SLEEP("sleep"), // sleep (don't move/ATTACK) until attacked
 	
 	// VULNERABILITIES
 	AGGRESSION_VULN("aggressionVuln"),
@@ -241,7 +231,6 @@ public enum Stats
 	MAGICAL_MP_CONSUME_RATE("MagicalMpConsumeRate"),
 	DANCE_MP_CONSUME_RATE("DanceMpConsumeRate"),
 	BOW_MP_CONSUME_RATE("BowMpConsumeRate"),
-	HP_CONSUME_RATE("HpConsumeRate"),
 	MP_CONSUME("MpConsume"),
 	
 	// T1 stats

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/EtcStatusUpdate.java

@@ -46,6 +46,6 @@ public class EtcStatusUpdate extends L2GameServerPacket
 		writeD(_activeChar.getExpertiseArmorPenalty()); // Armor Grade Penalty [1-4]
 		writeD(_activeChar.isAffected(EffectFlag.CHARM_OF_COURAGE) ? 1 : 0); // 1 = charm of courage (allows resurrection on the same spot upon death on the siege battlefield)
 		writeD(_activeChar.getDeathPenaltyBuffLevel()); // 1-15 death penalty, lvl (combat ability decreased due to death)
-		writeD(_activeChar.getSouls());
+		writeD(_activeChar.getChargedSouls());
 	}
 }