Support for Resurrection effects with HP MP CP percent parameters.
This commit is contained in:
parent
5ad9a3f918
commit
36328f9d1e
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1069,6 +1069,9 @@
|
|||||||
<effects>
|
<effects>
|
||||||
<effect name="ResurrectionSpecial">
|
<effect name="ResurrectionSpecial">
|
||||||
<power>100</power>
|
<power>100</power>
|
||||||
|
<hpPercent>100</hpPercent>
|
||||||
|
<mpPercent>100</mpPercent>
|
||||||
|
<cpPercent>100</cpPercent>
|
||||||
</effect>
|
</effect>
|
||||||
</effects>
|
</effects>
|
||||||
</skill>
|
</skill>
|
||||||
|
@ -1076,6 +1076,8 @@
|
|||||||
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -751,6 +751,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10188,7 +10191,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10215,6 +10218,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10267,6 +10273,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1069,6 +1069,9 @@
|
|||||||
<effects>
|
<effects>
|
||||||
<effect name="ResurrectionSpecial">
|
<effect name="ResurrectionSpecial">
|
||||||
<power>100</power>
|
<power>100</power>
|
||||||
|
<hpPercent>100</hpPercent>
|
||||||
|
<mpPercent>100</mpPercent>
|
||||||
|
<cpPercent>100</cpPercent>
|
||||||
</effect>
|
</effect>
|
||||||
</effects>
|
</effects>
|
||||||
</skill>
|
</skill>
|
||||||
|
@ -1080,6 +1080,8 @@
|
|||||||
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -753,6 +753,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10195,7 +10198,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10222,6 +10225,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10274,6 +10280,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1069,6 +1069,9 @@
|
|||||||
<effects>
|
<effects>
|
||||||
<effect name="ResurrectionSpecial">
|
<effect name="ResurrectionSpecial">
|
||||||
<power>100</power>
|
<power>100</power>
|
||||||
|
<hpPercent>100</hpPercent>
|
||||||
|
<mpPercent>100</mpPercent>
|
||||||
|
<cpPercent>100</cpPercent>
|
||||||
</effect>
|
</effect>
|
||||||
</effects>
|
</effects>
|
||||||
</skill>
|
</skill>
|
||||||
|
@ -1112,6 +1112,8 @@
|
|||||||
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -755,6 +755,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10197,7 +10200,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10224,6 +10227,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10276,6 +10282,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1049,6 +1049,9 @@
|
|||||||
<effects>
|
<effects>
|
||||||
<effect name="ResurrectionSpecial">
|
<effect name="ResurrectionSpecial">
|
||||||
<power>100</power>
|
<power>100</power>
|
||||||
|
<hpPercent>100</hpPercent>
|
||||||
|
<mpPercent>100</mpPercent>
|
||||||
|
<cpPercent>100</cpPercent>
|
||||||
</effect>
|
</effect>
|
||||||
</effects>
|
</effects>
|
||||||
</skill>
|
</skill>
|
||||||
|
@ -1113,6 +1113,8 @@
|
|||||||
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -760,6 +760,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10188,7 +10191,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10215,6 +10218,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10267,6 +10273,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1049,6 +1049,9 @@
|
|||||||
<effects>
|
<effects>
|
||||||
<effect name="ResurrectionSpecial">
|
<effect name="ResurrectionSpecial">
|
||||||
<power>100</power>
|
<power>100</power>
|
||||||
|
<hpPercent>100</hpPercent>
|
||||||
|
<mpPercent>100</mpPercent>
|
||||||
|
<cpPercent>100</cpPercent>
|
||||||
</effect>
|
</effect>
|
||||||
</effects>
|
</effects>
|
||||||
</skill>
|
</skill>
|
||||||
|
@ -1112,6 +1112,8 @@
|
|||||||
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -756,6 +756,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10175,7 +10178,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10202,6 +10205,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10254,6 +10260,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1050,6 +1050,9 @@
|
|||||||
<effects>
|
<effects>
|
||||||
<effect name="ResurrectionSpecial">
|
<effect name="ResurrectionSpecial">
|
||||||
<power>100</power>
|
<power>100</power>
|
||||||
|
<hpPercent>100</hpPercent>
|
||||||
|
<mpPercent>100</mpPercent>
|
||||||
|
<cpPercent>100</cpPercent>
|
||||||
</effect>
|
</effect>
|
||||||
</effects>
|
</effects>
|
||||||
</skill>
|
</skill>
|
||||||
|
@ -1017,6 +1017,8 @@
|
|||||||
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -756,6 +756,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10175,7 +10178,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10202,6 +10205,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10254,6 +10260,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1066,6 +1066,9 @@
|
|||||||
<effects>
|
<effects>
|
||||||
<effect name="ResurrectionSpecial">
|
<effect name="ResurrectionSpecial">
|
||||||
<power>100</power>
|
<power>100</power>
|
||||||
|
<hpPercent>100</hpPercent>
|
||||||
|
<mpPercent>100</mpPercent>
|
||||||
|
<cpPercent>100</cpPercent>
|
||||||
</effect>
|
</effect>
|
||||||
</effects>
|
</effects>
|
||||||
</skill>
|
</skill>
|
||||||
|
@ -1017,6 +1017,8 @@
|
|||||||
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -756,6 +756,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10181,7 +10184,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10208,6 +10211,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10260,6 +10266,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1066,6 +1066,9 @@
|
|||||||
<effects>
|
<effects>
|
||||||
<effect name="ResurrectionSpecial">
|
<effect name="ResurrectionSpecial">
|
||||||
<power>100</power>
|
<power>100</power>
|
||||||
|
<hpPercent>100</hpPercent>
|
||||||
|
<mpPercent>100</mpPercent>
|
||||||
|
<cpPercent>100</cpPercent>
|
||||||
</effect>
|
</effect>
|
||||||
</effects>
|
</effects>
|
||||||
</skill>
|
</skill>
|
||||||
|
@ -1031,6 +1031,8 @@
|
|||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -763,6 +763,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10190,7 +10193,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10217,6 +10220,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10269,6 +10275,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
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>
|
<effects>
|
||||||
<effect name="ResurrectionSpecial">
|
<effect name="ResurrectionSpecial">
|
||||||
<power>100</power>
|
<power>100</power>
|
||||||
|
<hpPercent>100</hpPercent>
|
||||||
|
<mpPercent>100</mpPercent>
|
||||||
|
<cpPercent>100</cpPercent>
|
||||||
</effect>
|
</effect>
|
||||||
</effects>
|
</effects>
|
||||||
</skill>
|
</skill>
|
||||||
|
@ -1029,6 +1029,8 @@
|
|||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -757,6 +757,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10193,7 +10196,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10220,6 +10223,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10272,6 +10278,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -836,6 +836,8 @@
|
|||||||
<xs:element name="accuracyAmount" type="xs:unsignedByte" />
|
<xs:element name="accuracyAmount" type="xs:unsignedByte" />
|
||||||
<xs:element name="accuracyMode" type="xs:string" />
|
<xs:element name="accuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -748,6 +748,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10073,7 +10076,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10100,6 +10103,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10152,6 +10158,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -800,6 +800,8 @@
|
|||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -748,6 +748,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10073,7 +10076,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10100,6 +10103,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10152,6 +10158,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -800,6 +800,8 @@
|
|||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -746,6 +746,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10059,7 +10062,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10086,6 +10089,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10138,6 +10144,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -798,6 +798,8 @@
|
|||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -753,6 +753,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10086,7 +10089,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10113,6 +10116,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10165,6 +10171,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -798,6 +798,8 @@
|
|||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -753,6 +753,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10086,7 +10089,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10113,6 +10116,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10165,6 +10171,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -808,6 +808,8 @@
|
|||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -760,6 +760,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10025,7 +10028,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10052,6 +10055,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10104,6 +10110,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1113,6 +1113,8 @@
|
|||||||
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
<xs:element name="pAccuracyAmount" type="xs:decimal" />
|
||||||
<xs:element name="pAccuracyMode" type="xs:string" />
|
<xs:element name="pAccuracyMode" type="xs:string" />
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -750,6 +750,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10085,7 +10088,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10112,6 +10115,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10164,6 +10170,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
|||||||
public class Resurrection extends AbstractEffect
|
public class Resurrection extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
|
|
||||||
public Resurrection(StatSet params)
|
public Resurrection(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_power = params.getInt("power", 0);
|
||||||
|
_hpPercent = params.getInt("hpPercent", 0);
|
||||||
|
_mpPercent = params.getInt("mpPercent", 0);
|
||||||
|
_cpPercent = params.getInt("cpPercent", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
|
|||||||
final PlayerInstance player = effected.getActingPlayer();
|
final PlayerInstance player = effected.getActingPlayer();
|
||||||
if (!player.isResurrectionBlocked() && !player.isReviveRequested())
|
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
|
else
|
||||||
|
@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
|||||||
public class ResurrectionSpecial extends AbstractEffect
|
public class ResurrectionSpecial extends AbstractEffect
|
||||||
{
|
{
|
||||||
private final int _power;
|
private final int _power;
|
||||||
|
private final int _hpPercent;
|
||||||
|
private final int _mpPercent;
|
||||||
|
private final int _cpPercent;
|
||||||
private final Set<Integer> _instanceId;
|
private final Set<Integer> _instanceId;
|
||||||
|
|
||||||
public ResurrectionSpecial(StatSet params)
|
public ResurrectionSpecial(StatSet params)
|
||||||
{
|
{
|
||||||
_power = params.getInt("power", 0);
|
_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);
|
final String instanceIds = params.getString("instanceId", null);
|
||||||
if ((instanceIds != null) && !instanceIds.isEmpty())
|
if ((instanceIds != null) && !instanceIds.isEmpty())
|
||||||
@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
|
|||||||
|
|
||||||
if (effected.isPlayer())
|
if (effected.isPlayer())
|
||||||
{
|
{
|
||||||
effected.getActingPlayer().reviveRequest(caster, false, _power);
|
effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
else if (effected.isPet())
|
else if (effected.isPet())
|
||||||
{
|
{
|
||||||
final PetInstance pet = (PetInstance) effected;
|
final PetInstance pet = (PetInstance) effected;
|
||||||
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
|
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -808,6 +808,8 @@
|
|||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="hpPercent" type="xs:unsignedByte" />
|
<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="attribute" type="xs:string" />
|
||||||
<xs:element name="attackerType" type="xs:string" />
|
<xs:element name="attackerType" type="xs:string" />
|
||||||
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
|
||||||
|
@ -149,7 +149,7 @@ public abstract class Playable extends Creature
|
|||||||
{
|
{
|
||||||
if (player.isInSiege())
|
if (player.isInSiege())
|
||||||
{
|
{
|
||||||
getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
|
getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
player.setCharmOfCourage(false);
|
player.setCharmOfCourage(false);
|
||||||
player.sendPacket(new EtcStatusUpdate(player));
|
player.sendPacket(new EtcStatusUpdate(player));
|
||||||
|
@ -767,6 +767,9 @@ public class PlayerInstance extends Playable
|
|||||||
private boolean _canRevive = true;
|
private boolean _canRevive = true;
|
||||||
private int _reviveRequested = 0;
|
private int _reviveRequested = 0;
|
||||||
private double _revivePower = 0;
|
private double _revivePower = 0;
|
||||||
|
private int _reviveHpPercent = 0;
|
||||||
|
private int _reviveMpPercent = 0;
|
||||||
|
private int _reviveCpPercent = 0;
|
||||||
private boolean _revivePet = false;
|
private boolean _revivePet = false;
|
||||||
|
|
||||||
private double _cpUpdateIncCheck = .0;
|
private double _cpUpdateIncCheck = .0;
|
||||||
@ -10064,7 +10067,7 @@ public class PlayerInstance extends Playable
|
|||||||
restoreExp(revivePower);
|
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())
|
if (isResurrectionBlocked())
|
||||||
{
|
{
|
||||||
@ -10091,6 +10094,9 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
_reviveRequested = 1;
|
_reviveRequested = 1;
|
||||||
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
|
||||||
|
_reviveHpPercent = reviveHp;
|
||||||
|
_reviveMpPercent = reviveMp;
|
||||||
|
_reviveCpPercent = reviveCp;
|
||||||
_revivePet = isPet;
|
_revivePet = isPet;
|
||||||
if (hasCharmOfCourage())
|
if (hasCharmOfCourage())
|
||||||
{
|
{
|
||||||
@ -10143,6 +10149,43 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
_reviveRequested = 0;
|
_reviveRequested = 0;
|
||||||
_revivePower = 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()
|
public boolean isReviveRequested()
|
||||||
|
Loading…
Reference in New Issue
Block a user