From 36328f9d1e15378d7b7118c9d2ae7e1894b7b604 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 28 Nov 2020 22:05:34 +0000 Subject: [PATCH] Support for Resurrection effects with HP MP CP percent parameters. --- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../game/data/stats/skills/11800-11899.xml | 3 ++ .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../game/data/stats/skills/11800-11899.xml | 3 ++ .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../game/data/stats/skills/11800-11899.xml | 3 ++ .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../game/data/stats/skills/11800-11899.xml | 3 ++ .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../game/data/stats/skills/11800-11899.xml | 3 ++ .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../game/data/stats/skills/11800-11899.xml | 3 ++ .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../game/data/stats/skills/11800-11899.xml | 3 ++ .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../game/data/stats/skills/11800-11899.xml | 3 ++ .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../game/data/stats/skills/11800-11899.xml | 3 ++ .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- .../handlers/effecthandlers/Resurrection.java | 8 +++- .../effecthandlers/ResurrectionSpecial.java | 10 ++++- .../dist/game/data/xsd/skills.xsd | 2 + .../gameserver/model/actor/Playable.java | 2 +- .../model/actor/instance/PlayerInstance.java | 45 ++++++++++++++++++- 94 files changed, 1081 insertions(+), 85 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11800-11899.xml index 3d27224713..ed64982248 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11800-11899.xml @@ -1069,6 +1069,9 @@ 100 + 100 + 100 + 100 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd index e8cce87016..3741022a30 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd @@ -1076,6 +1076,8 @@ + + diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 8b09529e75..dc5818e5f2 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -751,6 +751,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10188,7 +10191,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10215,6 +10218,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10267,6 +10273,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11800-11899.xml index 2e254102ea..aea0100447 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11800-11899.xml @@ -1069,6 +1069,9 @@ 100 + 100 + 100 + 100 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd index 40d7a1ece7..b68be11ee6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd @@ -1080,6 +1080,8 @@ + + diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index dfac46c380..4574cedabc 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -753,6 +753,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10195,7 +10198,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10222,6 +10225,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10274,6 +10280,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11800-11899.xml index 6be0b0ba5a..9335d89a5d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11800-11899.xml @@ -1069,6 +1069,9 @@ 100 + 100 + 100 + 100 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd index b2dfbb8b40..cd3436dc38 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd @@ -1112,6 +1112,8 @@ + + diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 78e74d3d4c..1021ae89dd 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -755,6 +755,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10197,7 +10200,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10224,6 +10227,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10276,6 +10282,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11800-11899.xml index 2214ac8117..efa08599d1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11800-11899.xml @@ -1049,6 +1049,9 @@ 100 + 100 + 100 + 100 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd index f962228ff4..6ccfaa15f0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd @@ -1113,6 +1113,8 @@ + + diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index b163ef623e..96786f15b3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -760,6 +760,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10188,7 +10191,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10215,6 +10218,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10267,6 +10273,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/11800-11899.xml index 3322aca0da..96816b8b08 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/stats/skills/11800-11899.xml @@ -1049,6 +1049,9 @@ 100 + 100 + 100 + 100 diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd b/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd index 2b3c5bb667..d92921ec4d 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/xsd/skills.xsd @@ -1112,6 +1112,8 @@ + + diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index b1b8007828..ad9863830b 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -756,6 +756,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10175,7 +10178,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10202,6 +10205,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10254,6 +10260,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11800-11899.xml index 92d1381a71..3b7f63d710 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/stats/skills/11800-11899.xml @@ -1050,6 +1050,9 @@ 100 + 100 + 100 + 100 diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd b/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd index 2f568aec68..eabb516295 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/xsd/skills.xsd @@ -1017,6 +1017,8 @@ + + diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 23e6025f57..eb0dfaf728 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -756,6 +756,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10175,7 +10178,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10202,6 +10205,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10254,6 +10260,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11800-11899.xml index 4ab95fef26..a31945da36 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/stats/skills/11800-11899.xml @@ -1066,6 +1066,9 @@ 100 + 100 + 100 + 100 diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd b/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd index a3174e9e45..54fef6ff40 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/xsd/skills.xsd @@ -1017,6 +1017,8 @@ + + diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 6705f08e4c..bb601cb5d3 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -756,6 +756,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10181,7 +10184,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10208,6 +10211,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10260,6 +10266,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/11800-11899.xml index 40453a6d2e..9d8fb4bf92 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/11800-11899.xml @@ -1066,6 +1066,9 @@ 100 + 100 + 100 + 100 diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/skills.xsd b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/skills.xsd index 50be0a4980..73a9d5e867 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/skills.xsd @@ -1031,6 +1031,8 @@ + + diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index a096dce403..9119c2d09e 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -763,6 +763,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10190,7 +10193,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10217,6 +10220,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10269,6 +10275,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/11800-11899.xml b/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/11800-11899.xml index 2b4c4e309c..9c3c151d76 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/11800-11899.xml +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/11800-11899.xml @@ -1074,6 +1074,9 @@ 100 + 100 + 100 + 100 diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/xsd/skills.xsd b/L2J_Mobius_8.0_Homunculus/dist/game/data/xsd/skills.xsd index 860ad87046..c943a15b63 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/xsd/skills.xsd @@ -1029,6 +1029,8 @@ + + diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 4ced304451..861c378dad 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -757,6 +757,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10193,7 +10196,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10220,6 +10223,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10272,6 +10278,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd index da11c0101b..8f81b010bf 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd @@ -836,6 +836,8 @@ + + diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 6abbdf9476..2e0b142ca6 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -748,6 +748,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10073,7 +10076,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10100,6 +10103,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10152,6 +10158,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd index c258ab940d..2217dedd1f 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd @@ -800,6 +800,8 @@ + + diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 7000be7b17..44228b8484 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -748,6 +748,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10073,7 +10076,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10100,6 +10103,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10152,6 +10158,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd index cbfc66b001..ff50799faf 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd @@ -800,6 +800,8 @@ + + diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 84f48610eb..abf2cefa77 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -746,6 +746,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10059,7 +10062,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10086,6 +10089,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10138,6 +10144,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/skills.xsd index cd6e400ee4..6e0a8fef4a 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/xsd/skills.xsd @@ -798,6 +798,8 @@ + + diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 875a61b10d..07274253ba 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -753,6 +753,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10086,7 +10089,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10113,6 +10116,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10165,6 +10171,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/skills.xsd index d22b1e2d19..2eda3567a6 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/xsd/skills.xsd @@ -798,6 +798,8 @@ + + diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index faeb594429..11f166b8fb 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -753,6 +753,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10086,7 +10089,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10113,6 +10116,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10165,6 +10171,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/skills.xsd index c4a6303998..799660fd80 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/xsd/skills.xsd @@ -808,6 +808,8 @@ + + diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 6122a3bdf8..ad60f672da 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -760,6 +760,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10025,7 +10028,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10052,6 +10055,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10104,6 +10110,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/skills.xsd index 6512cfa3a4..a366008b06 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/xsd/skills.xsd @@ -1113,6 +1113,8 @@ + + diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 3a9391c628..10b71eade4 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -750,6 +750,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10085,7 +10088,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10112,6 +10115,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10164,6 +10170,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested() diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java index 69946f47f7..327f6cdc73 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/Resurrection.java @@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; public class Resurrection extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; public Resurrection(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); } @Override @@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect final PlayerInstance player = effected.getActingPlayer(); if (!player.isResurrectionBlocked() && !player.isReviveRequested()) { - effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power); + effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent); } } else diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java index ad8121f1eb..5450cfdf8c 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/effecthandlers/ResurrectionSpecial.java @@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill; public class ResurrectionSpecial extends AbstractEffect { private final int _power; + private final int _hpPercent; + private final int _mpPercent; + private final int _cpPercent; private final Set _instanceId; public ResurrectionSpecial(StatSet params) { _power = params.getInt("power", 0); + _hpPercent = params.getInt("hpPercent", 0); + _mpPercent = params.getInt("mpPercent", 0); + _cpPercent = params.getInt("cpPercent", 0); final String instanceIds = params.getString("instanceId", null); if ((instanceIds != null) && !instanceIds.isEmpty()) @@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect if (effected.isPlayer()) { - effected.getActingPlayer().reviveRequest(caster, false, _power); + effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent); } else if (effected.isPet()) { final PetInstance pet = (PetInstance) effected; - effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power); + effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent); } } } \ No newline at end of file diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/skills.xsd index 11ba16967a..5dfb9a0eb1 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/xsd/skills.xsd @@ -808,6 +808,8 @@ + + diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Playable.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Playable.java index 750bdba19c..bb4c53a59f 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Playable.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Playable.java @@ -149,7 +149,7 @@ public abstract class Playable extends Creature { if (player.isInSiege()) { - getActingPlayer().reviveRequest(getActingPlayer(), false, 0); + getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0); } player.setCharmOfCourage(false); player.sendPacket(new EtcStatusUpdate(player)); diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index b4f108127f..fab0dd60a4 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -767,6 +767,9 @@ public class PlayerInstance extends Playable private boolean _canRevive = true; private int _reviveRequested = 0; private double _revivePower = 0; + private int _reviveHpPercent = 0; + private int _reviveMpPercent = 0; + private int _reviveCpPercent = 0; private boolean _revivePet = false; private double _cpUpdateIncCheck = .0; @@ -10064,7 +10067,7 @@ public class PlayerInstance extends Playable restoreExp(revivePower); } - public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) + public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) { if (isResurrectionBlocked()) { @@ -10091,6 +10094,9 @@ public class PlayerInstance extends Playable { _reviveRequested = 1; _revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); + _reviveHpPercent = reviveHp; + _reviveMpPercent = reviveMp; + _reviveCpPercent = reviveCp; _revivePet = isPet; if (hasCharmOfCourage()) { @@ -10143,6 +10149,43 @@ public class PlayerInstance extends Playable } _reviveRequested = 0; _revivePower = 0; + + // Support for specific HP/MP/CP percentage restored. + final Creature effected = _revivePet ? _pet : this; + if (effected == null) + { + _reviveHpPercent = 0; + _reviveMpPercent = 0; + _reviveCpPercent = 0; + return; + } + if (_reviveHpPercent > 0) + { + final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; + if (amount > 0) + { + effected.setCurrentHp(amount, true); + } + _reviveHpPercent = 0; + } + if (_reviveMpPercent > 0) + { + final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; + if (amount > 0) + { + effected.setCurrentMp(amount, true); + } + _reviveMpPercent = 0; + } + if (_reviveCpPercent > 0) + { + final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; + if (amount > 0) + { + effected.setCurrentCp(amount, true); + } + _reviveCpPercent = 0; + } } public boolean isReviveRequested()