diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java index f6f82ef3be3a1d5e91920c5c4c5c24bc65b797f0..54642840400c90e5ecab50fdb548864a0f375029 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java @@ -20,11 +20,14 @@ package handlers.effecthandlers; import com.l2jserver.gameserver.model.L2Party; import com.l2jserver.gameserver.model.StatsSet; +import com.l2jserver.gameserver.model.actor.L2Character; +import com.l2jserver.gameserver.model.actor.L2Summon; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.conditions.Condition; import com.l2jserver.gameserver.model.effects.AbstractEffect; import com.l2jserver.gameserver.model.effects.L2EffectType; import com.l2jserver.gameserver.model.skills.BuffInfo; +import com.l2jserver.gameserver.model.skills.Skill; import com.l2jserver.gameserver.util.Util; /** @@ -61,39 +64,64 @@ public final class RebalanceHP extends AbstractEffect double fullHP = 0; double currentHPs = 0; final L2Party party = info.getEffector().getParty(); + final Skill skill = info.getSkill(); + final L2Character effector = info.getEffector(); for (L2PcInstance member : party.getMembers()) { - if (member.isDead() || !Util.checkIfInRange(info.getSkill().getAffectRange(), info.getEffector(), member, true)) + if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true)) { - continue; + fullHP += member.getMaxHp(); + currentHPs += member.getCurrentHp(); } - fullHP += member.getMaxHp(); - currentHPs += member.getCurrentHp(); + final L2Summon summon = member.getSummon(); + if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))) + { + fullHP += summon.getMaxHp(); + currentHPs += summon.getCurrentHp(); + } } double percentHP = currentHPs / fullHP; for (L2PcInstance member : party.getMembers()) { - if (member.isDead() || !Util.checkIfInRange(info.getSkill().getAffectRange(), info.getEffector(), member, true)) + if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true)) { - continue; + double newHP = member.getMaxHp() * percentHP; + if (newHP > member.getCurrentHp()) // The target gets healed + { + // The heal will be blocked if the current hp passes the limit + if (member.getCurrentHp() > member.getMaxRecoverableHp()) + { + newHP = member.getCurrentHp(); + } + else if (newHP > member.getMaxRecoverableHp()) + { + newHP = member.getMaxRecoverableHp(); + } + } + + member.setCurrentHp(newHP); } - double newHP = member.getMaxHp() * percentHP; - if (newHP > member.getCurrentHp()) // The target gets healed + final L2Summon summon = member.getSummon(); + if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))) { - // The heal will be blocked if the current hp passes the limit - if (member.getCurrentHp() > member.getMaxRecoverableHp()) - { - newHP = member.getCurrentHp(); - } - else if (newHP > member.getMaxRecoverableHp()) + double newHP = summon.getMaxHp() * percentHP; + if (newHP > summon.getCurrentHp()) // The target gets healed { - newHP = member.getMaxRecoverableHp(); + // The heal will be blocked if the current hp passes the limit + if (summon.getCurrentHp() > summon.getMaxRecoverableHp()) + { + newHP = summon.getCurrentHp(); + } + else if (newHP > summon.getMaxRecoverableHp()) + { + newHP = summon.getMaxRecoverableHp(); + } } + summon.setCurrentHp(newHP); } - member.setCurrentHp(newHP); } } }