Support for Resurrection effects with HP MP CP percent parameters.
This commit is contained in:
@@ -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
|
||||
|
@@ -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<Integer> _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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -1074,6 +1074,9 @@
|
||||
<effects>
|
||||
<effect name="ResurrectionSpecial">
|
||||
<power>100</power>
|
||||
<hpPercent>100</hpPercent>
|
||||
<mpPercent>100</mpPercent>
|
||||
<cpPercent>100</cpPercent>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
|
@@ -1029,6 +1029,8 @@
|
||||
</xs:element>
|
||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
||||
<xs:element name="mpPercent" type="xs:unsignedByte" />
|
||||
<xs:element name="cpPercent" type="xs:unsignedByte" />
|
||||
<xs:element name="attribute" type="xs:string" />
|
||||
<xs:element name="attackerType" type="xs:string" />
|
||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||
|
@@ -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));
|
||||
|
@@ -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()
|
||||
|
Reference in New Issue
Block a user