From fd43297a14a03bf01695cb8e502fbe1d1e3e90c8 Mon Sep 17 00:00:00 2001
From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Tue, 28 Nov 2017 18:30:40 +0000
Subject: [PATCH] Separated RebalanceHP effect for summons.
---
.../scripts/handlers/EffectMasterHandler.java | 1 +
.../handlers/effecthandlers/RebalanceHP.java | 186 ++++++------------
.../effecthandlers/RebalanceHPSummon.java | 111 +++++++++++
.../game/data/stats/skills/documentation.txt | 1 +
.../scripts/handlers/EffectMasterHandler.java | 1 +
.../handlers/effecthandlers/RebalanceHP.java | 186 ++++++------------
.../effecthandlers/RebalanceHPSummon.java | 111 +++++++++++
.../game/data/stats/skills/documentation.txt | 1 +
.../scripts/handlers/EffectMasterHandler.java | 1 +
.../handlers/effecthandlers/RebalanceHP.java | 186 ++++++------------
.../effecthandlers/RebalanceHPSummon.java | 111 +++++++++++
.../game/data/stats/skills/documentation.txt | 1 +
.../scripts/handlers/EffectMasterHandler.java | 1 +
.../handlers/effecthandlers/RebalanceHP.java | 186 ++++++------------
.../effecthandlers/RebalanceHPSummon.java | 111 +++++++++++
.../game/data/stats/skills/documentation.txt | 1 +
.../scripts/handlers/EffectMasterHandler.java | 1 +
.../handlers/effecthandlers/RebalanceHP.java | 186 ++++++------------
.../effecthandlers/RebalanceHPSummon.java | 111 +++++++++++
.../game/data/stats/skills/documentation.txt | 1 +
20 files changed, 890 insertions(+), 605 deletions(-)
create mode 100644 L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
create mode 100644 L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
create mode 100644 L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
create mode 100644 L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
create mode 100644 L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 07d2f9cf70..21fc5fd20b 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -257,6 +257,7 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("RandomizeHate", RandomizeHate::new);
EffectHandler.getInstance().registerHandler("RealDamage", RealDamage::new);
EffectHandler.getInstance().registerHandler("RebalanceHP", RebalanceHP::new);
+ EffectHandler.getInstance().registerHandler("RebalanceHPSummon", RebalanceHPSummon::new);
EffectHandler.getInstance().registerHandler("Recovery", Recovery::new);
EffectHandler.getInstance().registerHandler("ReduceDamage", ReduceDamage::new);
EffectHandler.getInstance().registerHandler("ReduceCancel", ReduceCancel::new);
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
index dfa3ce0847..4da04876fc 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
@@ -60,150 +60,94 @@ public final class RebalanceHP extends AbstractEffect
double fullHP = 0;
double currentHPs = 0;
final L2Party party = effector.getParty();
-
- switch (skill.getTargetType())
+ if (party != null)
{
- case MY_PARTY:
+ for (L2PcInstance member : party.getMembers())
{
- if (party != null)
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
{
- for (L2PcInstance member : party.getMembers())
+ fullHP += member.getMaxHp();
+ currentHPs += member.getCurrentHp();
+ }
+
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
{
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ fullHP += servitors.getMaxHp();
+ currentHPs += servitors.getCurrentHp();
+ }
+ }
+ }
+
+ double percentHP = currentHPs / fullHP;
+ for (L2PcInstance member : party.getMembers())
+ {
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ {
+ 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())
{
- fullHP += member.getMaxHp();
- currentHPs += member.getCurrentHp();
+ newHP = member.getCurrentHp();
}
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ else if (newHP > member.getMaxRecoverableHp())
{
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- fullHP += servitors.getMaxHp();
- currentHPs += servitors.getCurrentHp();
+ newHP = member.getMaxRecoverableHp();
}
}
- final double percentHP = currentHPs / fullHP;
- for (L2PcInstance member : party.getMembers())
- {
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
- {
- 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);
- }
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
- {
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
- {
- // 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);
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- double newHP = servitors.getMaxHp() * percentHP;
- if (newHP > servitors.getCurrentHp()) // The target gets healed
- {
- // The heal will be blocked if the current hp passes the limit
- if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getCurrentHp();
- }
- else if (newHP > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getMaxRecoverableHp();
- }
- }
- servitors.setCurrentHp(newHP);
- }
- }
- }
- }
- break;
- }
- case SUMMON:
- {
- for (L2Summon summon : effector.getServitors().values())
- {
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
+ member.setCurrentHp(newHP);
}
- fullHP += effector.getMaxHp();
- fullHP += effector.getCurrentHp();
-
- final double percentHP = currentHPs / fullHP;
- for (L2Summon summon : effector.getServitors().values())
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
{
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
{
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
+ // 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);
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
+ {
+ double newHP = servitors.getMaxHp() * percentHP;
+ if (newHP > servitors.getCurrentHp()) // The target gets healed
{
// The heal will be blocked if the current hp passes the limit
- if (summon.getCurrentHp() > summon.getMaxRecoverableHp())
+ if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
{
- newHP = summon.getCurrentHp();
+ newHP = servitors.getCurrentHp();
}
- else if (newHP > summon.getMaxRecoverableHp())
+ else if (newHP > servitors.getMaxRecoverableHp())
{
- newHP = summon.getMaxRecoverableHp();
+ newHP = servitors.getMaxRecoverableHp();
}
}
-
- summon.setCurrentHp(newHP);
+ servitors.setCurrentHp(newHP);
}
}
-
- double newHP = effector.getMaxHp() * percentHP;
- if (newHP > effector.getCurrentHp())
- {
- if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
- {
- newHP = effector.getCurrentHp();
- }
- else if (newHP > effector.getMaxRecoverableHp())
- {
- newHP = effector.getMaxRecoverableHp();
- }
- }
- effector.setCurrentHp(newHP);
}
}
}
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
new file mode 100644
index 0000000000..19a82ed230
--- /dev/null
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
@@ -0,0 +1,111 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program 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.
+ *
+ * This program 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 .
+ */
+package handlers.effecthandlers;
+
+import com.l2jmobius.gameserver.model.StatsSet;
+import com.l2jmobius.gameserver.model.actor.L2Character;
+import com.l2jmobius.gameserver.model.actor.L2Summon;
+import com.l2jmobius.gameserver.model.effects.AbstractEffect;
+import com.l2jmobius.gameserver.model.effects.L2EffectType;
+import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jmobius.gameserver.model.skills.Skill;
+import com.l2jmobius.gameserver.util.Util;
+
+/**
+ * Rebalance HP effect implementation.
+ * @author Adry_85, earendil
+ */
+public class RebalanceHPSummon extends AbstractEffect
+{
+ public RebalanceHPSummon(StatsSet params)
+ {
+ }
+
+ @Override
+ public L2EffectType getEffectType()
+ {
+ return L2EffectType.REBALANCE_HP;
+ }
+
+ @Override
+ public boolean isInstant()
+ {
+ return true;
+ }
+
+ @Override
+ public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item)
+ {
+ if (!effector.isPlayer())
+ {
+ return;
+ }
+
+ double fullHP = 0;
+ double currentHPs = 0;
+
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+ }
+
+ fullHP += effector.getMaxHp();
+ currentHPs += effector.getCurrentHp();
+
+ double percentHP = currentHPs / fullHP;
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
+ {
+ // 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);
+ }
+ }
+
+ double newHP = effector.getMaxHp() * percentHP;
+ if (newHP > effector.getCurrentHp()) // The target gets healed
+ {
+ // The heal will be blocked if the current hp passes the limit
+ if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getCurrentHp();
+ }
+ else if (newHP > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getMaxRecoverableHp();
+ }
+ }
+ effector.setCurrentHp(newHP);
+ }
+}
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/documentation.txt
index c4f6ad75ed..fe9e4bd4e1 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/documentation.txt
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/documentation.txt
@@ -226,6 +226,7 @@ PvpPhysicalSkillDefenceBonus: Physical skill defence stat when taking damage fro
RandomizeHate: Target NPC stops hating you and starts hating random target with your hate.
RealDamage: Static damage.
RebalanceHP: Balances targets' current HP.
+RebalanceHPSummon: Balances targets' current HP for summons.
Recovery: Decreases death penalty level.
ReduceCancel: Magic skill casting interruption stat.
ReduceDropPenalty: Reduces EXP lost and death penalty chance.
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 07d2f9cf70..21fc5fd20b 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -257,6 +257,7 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("RandomizeHate", RandomizeHate::new);
EffectHandler.getInstance().registerHandler("RealDamage", RealDamage::new);
EffectHandler.getInstance().registerHandler("RebalanceHP", RebalanceHP::new);
+ EffectHandler.getInstance().registerHandler("RebalanceHPSummon", RebalanceHPSummon::new);
EffectHandler.getInstance().registerHandler("Recovery", Recovery::new);
EffectHandler.getInstance().registerHandler("ReduceDamage", ReduceDamage::new);
EffectHandler.getInstance().registerHandler("ReduceCancel", ReduceCancel::new);
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
index dfa3ce0847..4da04876fc 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
@@ -60,150 +60,94 @@ public final class RebalanceHP extends AbstractEffect
double fullHP = 0;
double currentHPs = 0;
final L2Party party = effector.getParty();
-
- switch (skill.getTargetType())
+ if (party != null)
{
- case MY_PARTY:
+ for (L2PcInstance member : party.getMembers())
{
- if (party != null)
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
{
- for (L2PcInstance member : party.getMembers())
+ fullHP += member.getMaxHp();
+ currentHPs += member.getCurrentHp();
+ }
+
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
{
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ fullHP += servitors.getMaxHp();
+ currentHPs += servitors.getCurrentHp();
+ }
+ }
+ }
+
+ double percentHP = currentHPs / fullHP;
+ for (L2PcInstance member : party.getMembers())
+ {
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ {
+ 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())
{
- fullHP += member.getMaxHp();
- currentHPs += member.getCurrentHp();
+ newHP = member.getCurrentHp();
}
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ else if (newHP > member.getMaxRecoverableHp())
{
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- fullHP += servitors.getMaxHp();
- currentHPs += servitors.getCurrentHp();
+ newHP = member.getMaxRecoverableHp();
}
}
- final double percentHP = currentHPs / fullHP;
- for (L2PcInstance member : party.getMembers())
- {
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
- {
- 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);
- }
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
- {
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
- {
- // 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);
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- double newHP = servitors.getMaxHp() * percentHP;
- if (newHP > servitors.getCurrentHp()) // The target gets healed
- {
- // The heal will be blocked if the current hp passes the limit
- if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getCurrentHp();
- }
- else if (newHP > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getMaxRecoverableHp();
- }
- }
- servitors.setCurrentHp(newHP);
- }
- }
- }
- }
- break;
- }
- case SUMMON:
- {
- for (L2Summon summon : effector.getServitors().values())
- {
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
+ member.setCurrentHp(newHP);
}
- fullHP += effector.getMaxHp();
- fullHP += effector.getCurrentHp();
-
- final double percentHP = currentHPs / fullHP;
- for (L2Summon summon : effector.getServitors().values())
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
{
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
{
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
+ // 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);
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
+ {
+ double newHP = servitors.getMaxHp() * percentHP;
+ if (newHP > servitors.getCurrentHp()) // The target gets healed
{
// The heal will be blocked if the current hp passes the limit
- if (summon.getCurrentHp() > summon.getMaxRecoverableHp())
+ if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
{
- newHP = summon.getCurrentHp();
+ newHP = servitors.getCurrentHp();
}
- else if (newHP > summon.getMaxRecoverableHp())
+ else if (newHP > servitors.getMaxRecoverableHp())
{
- newHP = summon.getMaxRecoverableHp();
+ newHP = servitors.getMaxRecoverableHp();
}
}
-
- summon.setCurrentHp(newHP);
+ servitors.setCurrentHp(newHP);
}
}
-
- double newHP = effector.getMaxHp() * percentHP;
- if (newHP > effector.getCurrentHp())
- {
- if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
- {
- newHP = effector.getCurrentHp();
- }
- else if (newHP > effector.getMaxRecoverableHp())
- {
- newHP = effector.getMaxRecoverableHp();
- }
- }
- effector.setCurrentHp(newHP);
}
}
}
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
new file mode 100644
index 0000000000..19a82ed230
--- /dev/null
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
@@ -0,0 +1,111 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program 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.
+ *
+ * This program 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 .
+ */
+package handlers.effecthandlers;
+
+import com.l2jmobius.gameserver.model.StatsSet;
+import com.l2jmobius.gameserver.model.actor.L2Character;
+import com.l2jmobius.gameserver.model.actor.L2Summon;
+import com.l2jmobius.gameserver.model.effects.AbstractEffect;
+import com.l2jmobius.gameserver.model.effects.L2EffectType;
+import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jmobius.gameserver.model.skills.Skill;
+import com.l2jmobius.gameserver.util.Util;
+
+/**
+ * Rebalance HP effect implementation.
+ * @author Adry_85, earendil
+ */
+public class RebalanceHPSummon extends AbstractEffect
+{
+ public RebalanceHPSummon(StatsSet params)
+ {
+ }
+
+ @Override
+ public L2EffectType getEffectType()
+ {
+ return L2EffectType.REBALANCE_HP;
+ }
+
+ @Override
+ public boolean isInstant()
+ {
+ return true;
+ }
+
+ @Override
+ public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item)
+ {
+ if (!effector.isPlayer())
+ {
+ return;
+ }
+
+ double fullHP = 0;
+ double currentHPs = 0;
+
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+ }
+
+ fullHP += effector.getMaxHp();
+ currentHPs += effector.getCurrentHp();
+
+ double percentHP = currentHPs / fullHP;
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
+ {
+ // 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);
+ }
+ }
+
+ double newHP = effector.getMaxHp() * percentHP;
+ if (newHP > effector.getCurrentHp()) // The target gets healed
+ {
+ // The heal will be blocked if the current hp passes the limit
+ if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getCurrentHp();
+ }
+ else if (newHP > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getMaxRecoverableHp();
+ }
+ }
+ effector.setCurrentHp(newHP);
+ }
+}
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/documentation.txt
index c4f6ad75ed..fe9e4bd4e1 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/documentation.txt
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/documentation.txt
@@ -226,6 +226,7 @@ PvpPhysicalSkillDefenceBonus: Physical skill defence stat when taking damage fro
RandomizeHate: Target NPC stops hating you and starts hating random target with your hate.
RealDamage: Static damage.
RebalanceHP: Balances targets' current HP.
+RebalanceHPSummon: Balances targets' current HP for summons.
Recovery: Decreases death penalty level.
ReduceCancel: Magic skill casting interruption stat.
ReduceDropPenalty: Reduces EXP lost and death penalty chance.
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 07d2f9cf70..21fc5fd20b 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -257,6 +257,7 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("RandomizeHate", RandomizeHate::new);
EffectHandler.getInstance().registerHandler("RealDamage", RealDamage::new);
EffectHandler.getInstance().registerHandler("RebalanceHP", RebalanceHP::new);
+ EffectHandler.getInstance().registerHandler("RebalanceHPSummon", RebalanceHPSummon::new);
EffectHandler.getInstance().registerHandler("Recovery", Recovery::new);
EffectHandler.getInstance().registerHandler("ReduceDamage", ReduceDamage::new);
EffectHandler.getInstance().registerHandler("ReduceCancel", ReduceCancel::new);
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
index dfa3ce0847..4da04876fc 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
@@ -60,150 +60,94 @@ public final class RebalanceHP extends AbstractEffect
double fullHP = 0;
double currentHPs = 0;
final L2Party party = effector.getParty();
-
- switch (skill.getTargetType())
+ if (party != null)
{
- case MY_PARTY:
+ for (L2PcInstance member : party.getMembers())
{
- if (party != null)
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
{
- for (L2PcInstance member : party.getMembers())
+ fullHP += member.getMaxHp();
+ currentHPs += member.getCurrentHp();
+ }
+
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
{
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ fullHP += servitors.getMaxHp();
+ currentHPs += servitors.getCurrentHp();
+ }
+ }
+ }
+
+ double percentHP = currentHPs / fullHP;
+ for (L2PcInstance member : party.getMembers())
+ {
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ {
+ 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())
{
- fullHP += member.getMaxHp();
- currentHPs += member.getCurrentHp();
+ newHP = member.getCurrentHp();
}
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ else if (newHP > member.getMaxRecoverableHp())
{
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- fullHP += servitors.getMaxHp();
- currentHPs += servitors.getCurrentHp();
+ newHP = member.getMaxRecoverableHp();
}
}
- final double percentHP = currentHPs / fullHP;
- for (L2PcInstance member : party.getMembers())
- {
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
- {
- 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);
- }
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
- {
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
- {
- // 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);
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- double newHP = servitors.getMaxHp() * percentHP;
- if (newHP > servitors.getCurrentHp()) // The target gets healed
- {
- // The heal will be blocked if the current hp passes the limit
- if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getCurrentHp();
- }
- else if (newHP > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getMaxRecoverableHp();
- }
- }
- servitors.setCurrentHp(newHP);
- }
- }
- }
- }
- break;
- }
- case SUMMON:
- {
- for (L2Summon summon : effector.getServitors().values())
- {
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
+ member.setCurrentHp(newHP);
}
- fullHP += effector.getMaxHp();
- fullHP += effector.getCurrentHp();
-
- final double percentHP = currentHPs / fullHP;
- for (L2Summon summon : effector.getServitors().values())
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
{
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
{
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
+ // 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);
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
+ {
+ double newHP = servitors.getMaxHp() * percentHP;
+ if (newHP > servitors.getCurrentHp()) // The target gets healed
{
// The heal will be blocked if the current hp passes the limit
- if (summon.getCurrentHp() > summon.getMaxRecoverableHp())
+ if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
{
- newHP = summon.getCurrentHp();
+ newHP = servitors.getCurrentHp();
}
- else if (newHP > summon.getMaxRecoverableHp())
+ else if (newHP > servitors.getMaxRecoverableHp())
{
- newHP = summon.getMaxRecoverableHp();
+ newHP = servitors.getMaxRecoverableHp();
}
}
-
- summon.setCurrentHp(newHP);
+ servitors.setCurrentHp(newHP);
}
}
-
- double newHP = effector.getMaxHp() * percentHP;
- if (newHP > effector.getCurrentHp())
- {
- if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
- {
- newHP = effector.getCurrentHp();
- }
- else if (newHP > effector.getMaxRecoverableHp())
- {
- newHP = effector.getMaxRecoverableHp();
- }
- }
- effector.setCurrentHp(newHP);
}
}
}
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
new file mode 100644
index 0000000000..19a82ed230
--- /dev/null
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
@@ -0,0 +1,111 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program 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.
+ *
+ * This program 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 .
+ */
+package handlers.effecthandlers;
+
+import com.l2jmobius.gameserver.model.StatsSet;
+import com.l2jmobius.gameserver.model.actor.L2Character;
+import com.l2jmobius.gameserver.model.actor.L2Summon;
+import com.l2jmobius.gameserver.model.effects.AbstractEffect;
+import com.l2jmobius.gameserver.model.effects.L2EffectType;
+import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jmobius.gameserver.model.skills.Skill;
+import com.l2jmobius.gameserver.util.Util;
+
+/**
+ * Rebalance HP effect implementation.
+ * @author Adry_85, earendil
+ */
+public class RebalanceHPSummon extends AbstractEffect
+{
+ public RebalanceHPSummon(StatsSet params)
+ {
+ }
+
+ @Override
+ public L2EffectType getEffectType()
+ {
+ return L2EffectType.REBALANCE_HP;
+ }
+
+ @Override
+ public boolean isInstant()
+ {
+ return true;
+ }
+
+ @Override
+ public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item)
+ {
+ if (!effector.isPlayer())
+ {
+ return;
+ }
+
+ double fullHP = 0;
+ double currentHPs = 0;
+
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+ }
+
+ fullHP += effector.getMaxHp();
+ currentHPs += effector.getCurrentHp();
+
+ double percentHP = currentHPs / fullHP;
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
+ {
+ // 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);
+ }
+ }
+
+ double newHP = effector.getMaxHp() * percentHP;
+ if (newHP > effector.getCurrentHp()) // The target gets healed
+ {
+ // The heal will be blocked if the current hp passes the limit
+ if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getCurrentHp();
+ }
+ else if (newHP > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getMaxRecoverableHp();
+ }
+ }
+ effector.setCurrentHp(newHP);
+ }
+}
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/documentation.txt
index c4f6ad75ed..fe9e4bd4e1 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/documentation.txt
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/documentation.txt
@@ -226,6 +226,7 @@ PvpPhysicalSkillDefenceBonus: Physical skill defence stat when taking damage fro
RandomizeHate: Target NPC stops hating you and starts hating random target with your hate.
RealDamage: Static damage.
RebalanceHP: Balances targets' current HP.
+RebalanceHPSummon: Balances targets' current HP for summons.
Recovery: Decreases death penalty level.
ReduceCancel: Magic skill casting interruption stat.
ReduceDropPenalty: Reduces EXP lost and death penalty chance.
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 980dbf1447..314466d346 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -261,6 +261,7 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("RandomizeHate", RandomizeHate::new);
EffectHandler.getInstance().registerHandler("RealDamage", RealDamage::new);
EffectHandler.getInstance().registerHandler("RebalanceHP", RebalanceHP::new);
+ EffectHandler.getInstance().registerHandler("RebalanceHPSummon", RebalanceHPSummon::new);
EffectHandler.getInstance().registerHandler("Recovery", Recovery::new);
EffectHandler.getInstance().registerHandler("ReduceDamage", ReduceDamage::new);
EffectHandler.getInstance().registerHandler("ReduceCancel", ReduceCancel::new);
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
index dfa3ce0847..4da04876fc 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
@@ -60,150 +60,94 @@ public final class RebalanceHP extends AbstractEffect
double fullHP = 0;
double currentHPs = 0;
final L2Party party = effector.getParty();
-
- switch (skill.getTargetType())
+ if (party != null)
{
- case MY_PARTY:
+ for (L2PcInstance member : party.getMembers())
{
- if (party != null)
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
{
- for (L2PcInstance member : party.getMembers())
+ fullHP += member.getMaxHp();
+ currentHPs += member.getCurrentHp();
+ }
+
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
{
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ fullHP += servitors.getMaxHp();
+ currentHPs += servitors.getCurrentHp();
+ }
+ }
+ }
+
+ double percentHP = currentHPs / fullHP;
+ for (L2PcInstance member : party.getMembers())
+ {
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ {
+ 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())
{
- fullHP += member.getMaxHp();
- currentHPs += member.getCurrentHp();
+ newHP = member.getCurrentHp();
}
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ else if (newHP > member.getMaxRecoverableHp())
{
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- fullHP += servitors.getMaxHp();
- currentHPs += servitors.getCurrentHp();
+ newHP = member.getMaxRecoverableHp();
}
}
- final double percentHP = currentHPs / fullHP;
- for (L2PcInstance member : party.getMembers())
- {
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
- {
- 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);
- }
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
- {
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
- {
- // 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);
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- double newHP = servitors.getMaxHp() * percentHP;
- if (newHP > servitors.getCurrentHp()) // The target gets healed
- {
- // The heal will be blocked if the current hp passes the limit
- if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getCurrentHp();
- }
- else if (newHP > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getMaxRecoverableHp();
- }
- }
- servitors.setCurrentHp(newHP);
- }
- }
- }
- }
- break;
- }
- case SUMMON:
- {
- for (L2Summon summon : effector.getServitors().values())
- {
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
+ member.setCurrentHp(newHP);
}
- fullHP += effector.getMaxHp();
- fullHP += effector.getCurrentHp();
-
- final double percentHP = currentHPs / fullHP;
- for (L2Summon summon : effector.getServitors().values())
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
{
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
{
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
+ // 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);
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
+ {
+ double newHP = servitors.getMaxHp() * percentHP;
+ if (newHP > servitors.getCurrentHp()) // The target gets healed
{
// The heal will be blocked if the current hp passes the limit
- if (summon.getCurrentHp() > summon.getMaxRecoverableHp())
+ if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
{
- newHP = summon.getCurrentHp();
+ newHP = servitors.getCurrentHp();
}
- else if (newHP > summon.getMaxRecoverableHp())
+ else if (newHP > servitors.getMaxRecoverableHp())
{
- newHP = summon.getMaxRecoverableHp();
+ newHP = servitors.getMaxRecoverableHp();
}
}
-
- summon.setCurrentHp(newHP);
+ servitors.setCurrentHp(newHP);
}
}
-
- double newHP = effector.getMaxHp() * percentHP;
- if (newHP > effector.getCurrentHp())
- {
- if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
- {
- newHP = effector.getCurrentHp();
- }
- else if (newHP > effector.getMaxRecoverableHp())
- {
- newHP = effector.getMaxRecoverableHp();
- }
- }
- effector.setCurrentHp(newHP);
}
}
}
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
new file mode 100644
index 0000000000..19a82ed230
--- /dev/null
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
@@ -0,0 +1,111 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program 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.
+ *
+ * This program 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 .
+ */
+package handlers.effecthandlers;
+
+import com.l2jmobius.gameserver.model.StatsSet;
+import com.l2jmobius.gameserver.model.actor.L2Character;
+import com.l2jmobius.gameserver.model.actor.L2Summon;
+import com.l2jmobius.gameserver.model.effects.AbstractEffect;
+import com.l2jmobius.gameserver.model.effects.L2EffectType;
+import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jmobius.gameserver.model.skills.Skill;
+import com.l2jmobius.gameserver.util.Util;
+
+/**
+ * Rebalance HP effect implementation.
+ * @author Adry_85, earendil
+ */
+public class RebalanceHPSummon extends AbstractEffect
+{
+ public RebalanceHPSummon(StatsSet params)
+ {
+ }
+
+ @Override
+ public L2EffectType getEffectType()
+ {
+ return L2EffectType.REBALANCE_HP;
+ }
+
+ @Override
+ public boolean isInstant()
+ {
+ return true;
+ }
+
+ @Override
+ public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item)
+ {
+ if (!effector.isPlayer())
+ {
+ return;
+ }
+
+ double fullHP = 0;
+ double currentHPs = 0;
+
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+ }
+
+ fullHP += effector.getMaxHp();
+ currentHPs += effector.getCurrentHp();
+
+ double percentHP = currentHPs / fullHP;
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
+ {
+ // 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);
+ }
+ }
+
+ double newHP = effector.getMaxHp() * percentHP;
+ if (newHP > effector.getCurrentHp()) // The target gets healed
+ {
+ // The heal will be blocked if the current hp passes the limit
+ if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getCurrentHp();
+ }
+ else if (newHP > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getMaxRecoverableHp();
+ }
+ }
+ effector.setCurrentHp(newHP);
+ }
+}
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt
index a9b94b0bf3..a96a9d4e06 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/documentation.txt
@@ -230,6 +230,7 @@ PvpPhysicalSkillDefenceBonus: Physical skill defence stat when taking damage fro
RandomizeHate: Target NPC stops hating you and starts hating random target with your hate.
RealDamage: Static damage.
RebalanceHP: Balances targets' current HP.
+RebalanceHPSummon: Balances targets' current HP for summons.
Recovery: Decreases death penalty level.
ReduceCancel: Magic skill casting interruption stat.
ReduceDropPenalty: Reduces EXP lost and death penalty chance.
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 60b8d8e62b..cac16a920d 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -256,6 +256,7 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("RandomizeHate", RandomizeHate::new);
EffectHandler.getInstance().registerHandler("RealDamage", RealDamage::new);
EffectHandler.getInstance().registerHandler("RebalanceHP", RebalanceHP::new);
+ EffectHandler.getInstance().registerHandler("RebalanceHPSummon", RebalanceHPSummon::new);
EffectHandler.getInstance().registerHandler("Recovery", Recovery::new);
EffectHandler.getInstance().registerHandler("ReduceDamage", ReduceDamage::new);
EffectHandler.getInstance().registerHandler("ReduceCancel", ReduceCancel::new);
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
index dfa3ce0847..4da04876fc 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/RebalanceHP.java
@@ -60,150 +60,94 @@ public final class RebalanceHP extends AbstractEffect
double fullHP = 0;
double currentHPs = 0;
final L2Party party = effector.getParty();
-
- switch (skill.getTargetType())
+ if (party != null)
{
- case MY_PARTY:
+ for (L2PcInstance member : party.getMembers())
{
- if (party != null)
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
{
- for (L2PcInstance member : party.getMembers())
+ fullHP += member.getMaxHp();
+ currentHPs += member.getCurrentHp();
+ }
+
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
{
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ fullHP += servitors.getMaxHp();
+ currentHPs += servitors.getCurrentHp();
+ }
+ }
+ }
+
+ double percentHP = currentHPs / fullHP;
+ for (L2PcInstance member : party.getMembers())
+ {
+ if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
+ {
+ 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())
{
- fullHP += member.getMaxHp();
- currentHPs += member.getCurrentHp();
+ newHP = member.getCurrentHp();
}
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
+ else if (newHP > member.getMaxRecoverableHp())
{
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- fullHP += servitors.getMaxHp();
- currentHPs += servitors.getCurrentHp();
+ newHP = member.getMaxRecoverableHp();
}
}
- final double percentHP = currentHPs / fullHP;
- for (L2PcInstance member : party.getMembers())
- {
- if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true))
- {
- 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);
- }
-
- final L2Summon summon = member.getPet();
- if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
- {
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
- {
- // 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);
- }
-
- for (L2Summon servitors : member.getServitors().values())
- {
- if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- double newHP = servitors.getMaxHp() * percentHP;
- if (newHP > servitors.getCurrentHp()) // The target gets healed
- {
- // The heal will be blocked if the current hp passes the limit
- if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getCurrentHp();
- }
- else if (newHP > servitors.getMaxRecoverableHp())
- {
- newHP = servitors.getMaxRecoverableHp();
- }
- }
- servitors.setCurrentHp(newHP);
- }
- }
- }
- }
- break;
- }
- case SUMMON:
- {
- for (L2Summon summon : effector.getServitors().values())
- {
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
- {
- fullHP += summon.getMaxHp();
- currentHPs += summon.getCurrentHp();
- }
+ member.setCurrentHp(newHP);
}
- fullHP += effector.getMaxHp();
- fullHP += effector.getCurrentHp();
-
- final double percentHP = currentHPs / fullHP;
- for (L2Summon summon : effector.getServitors().values())
+ final L2Summon summon = member.getPet();
+ if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)))
{
- if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
{
- double newHP = summon.getMaxHp() * percentHP;
- if (newHP > summon.getCurrentHp()) // The target gets healed
+ // 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);
+ }
+
+ for (L2Summon servitors : member.getServitors().values())
+ {
+ if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true))
+ {
+ double newHP = servitors.getMaxHp() * percentHP;
+ if (newHP > servitors.getCurrentHp()) // The target gets healed
{
// The heal will be blocked if the current hp passes the limit
- if (summon.getCurrentHp() > summon.getMaxRecoverableHp())
+ if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp())
{
- newHP = summon.getCurrentHp();
+ newHP = servitors.getCurrentHp();
}
- else if (newHP > summon.getMaxRecoverableHp())
+ else if (newHP > servitors.getMaxRecoverableHp())
{
- newHP = summon.getMaxRecoverableHp();
+ newHP = servitors.getMaxRecoverableHp();
}
}
-
- summon.setCurrentHp(newHP);
+ servitors.setCurrentHp(newHP);
}
}
-
- double newHP = effector.getMaxHp() * percentHP;
- if (newHP > effector.getCurrentHp())
- {
- if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
- {
- newHP = effector.getCurrentHp();
- }
- else if (newHP > effector.getMaxRecoverableHp())
- {
- newHP = effector.getMaxRecoverableHp();
- }
- }
- effector.setCurrentHp(newHP);
}
}
}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
new file mode 100644
index 0000000000..19a82ed230
--- /dev/null
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
@@ -0,0 +1,111 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program 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.
+ *
+ * This program 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 .
+ */
+package handlers.effecthandlers;
+
+import com.l2jmobius.gameserver.model.StatsSet;
+import com.l2jmobius.gameserver.model.actor.L2Character;
+import com.l2jmobius.gameserver.model.actor.L2Summon;
+import com.l2jmobius.gameserver.model.effects.AbstractEffect;
+import com.l2jmobius.gameserver.model.effects.L2EffectType;
+import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jmobius.gameserver.model.skills.Skill;
+import com.l2jmobius.gameserver.util.Util;
+
+/**
+ * Rebalance HP effect implementation.
+ * @author Adry_85, earendil
+ */
+public class RebalanceHPSummon extends AbstractEffect
+{
+ public RebalanceHPSummon(StatsSet params)
+ {
+ }
+
+ @Override
+ public L2EffectType getEffectType()
+ {
+ return L2EffectType.REBALANCE_HP;
+ }
+
+ @Override
+ public boolean isInstant()
+ {
+ return true;
+ }
+
+ @Override
+ public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item)
+ {
+ if (!effector.isPlayer())
+ {
+ return;
+ }
+
+ double fullHP = 0;
+ double currentHPs = 0;
+
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ fullHP += summon.getMaxHp();
+ currentHPs += summon.getCurrentHp();
+ }
+ }
+
+ fullHP += effector.getMaxHp();
+ currentHPs += effector.getCurrentHp();
+
+ double percentHP = currentHPs / fullHP;
+ for (L2Summon summon : effector.getServitors().values())
+ {
+ if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))
+ {
+ double newHP = summon.getMaxHp() * percentHP;
+ if (newHP > summon.getCurrentHp()) // The target gets healed
+ {
+ // 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);
+ }
+ }
+
+ double newHP = effector.getMaxHp() * percentHP;
+ if (newHP > effector.getCurrentHp()) // The target gets healed
+ {
+ // The heal will be blocked if the current hp passes the limit
+ if (effector.getCurrentHp() > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getCurrentHp();
+ }
+ else if (newHP > effector.getMaxRecoverableHp())
+ {
+ newHP = effector.getMaxRecoverableHp();
+ }
+ }
+ effector.setCurrentHp(newHP);
+ }
+}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt
index ff4539897f..f60642995a 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/documentation.txt
@@ -225,6 +225,7 @@ PvpPhysicalSkillDefenceBonus: Physical skill defence stat when taking damage fro
RandomizeHate: Target NPC stops hating you and starts hating random target with your hate.
RealDamage: Static damage.
RebalanceHP: Balances targets' current HP.
+RebalanceHPSummon: Balances targets' current HP for summons.
Recovery: Decreases death penalty level.
ReduceCancel: Magic skill casting interruption stat.
ReduceDropPenalty: Reduces EXP lost and death penalty chance.