Support for Resurrection effects with HP MP CP percent parameters.
This commit is contained in:
		@@ -33,10 +33,16 @@ import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
 | 
			
		||||
public class Resurrection extends AbstractEffect
 | 
			
		||||
{
 | 
			
		||||
	private final int _power;
 | 
			
		||||
	private final int _hpPercent;
 | 
			
		||||
	private final int _mpPercent;
 | 
			
		||||
	private final int _cpPercent;
 | 
			
		||||
	
 | 
			
		||||
	public Resurrection(StatSet params)
 | 
			
		||||
	{
 | 
			
		||||
		_power = params.getInt("power", 0);
 | 
			
		||||
		_hpPercent = params.getInt("hpPercent", 0);
 | 
			
		||||
		_mpPercent = params.getInt("mpPercent", 0);
 | 
			
		||||
		_cpPercent = params.getInt("cpPercent", 0);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
@@ -59,7 +65,7 @@ public class Resurrection extends AbstractEffect
 | 
			
		||||
			final PlayerInstance player = effected.getActingPlayer();
 | 
			
		||||
			if (!player.isResurrectionBlocked() && !player.isReviveRequested())
 | 
			
		||||
			{
 | 
			
		||||
				effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power);
 | 
			
		||||
				effected.getActingPlayer().reviveRequest(effector.getActingPlayer(), effected.isPet(), _power, _hpPercent, _mpPercent, _cpPercent);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
 
 | 
			
		||||
@@ -37,11 +37,17 @@ import org.l2jmobius.gameserver.model.skills.Skill;
 | 
			
		||||
public class ResurrectionSpecial extends AbstractEffect
 | 
			
		||||
{
 | 
			
		||||
	private final int _power;
 | 
			
		||||
	private final int _hpPercent;
 | 
			
		||||
	private final int _mpPercent;
 | 
			
		||||
	private final int _cpPercent;
 | 
			
		||||
	private final Set<Integer> _instanceId;
 | 
			
		||||
	
 | 
			
		||||
	public ResurrectionSpecial(StatSet params)
 | 
			
		||||
	{
 | 
			
		||||
		_power = params.getInt("power", 0);
 | 
			
		||||
		_hpPercent = params.getInt("hpPercent", 0);
 | 
			
		||||
		_mpPercent = params.getInt("mpPercent", 0);
 | 
			
		||||
		_cpPercent = params.getInt("cpPercent", 0);
 | 
			
		||||
		
 | 
			
		||||
		final String instanceIds = params.getString("instanceId", null);
 | 
			
		||||
		if ((instanceIds != null) && !instanceIds.isEmpty())
 | 
			
		||||
@@ -87,12 +93,12 @@ public class ResurrectionSpecial extends AbstractEffect
 | 
			
		||||
		
 | 
			
		||||
		if (effected.isPlayer())
 | 
			
		||||
		{
 | 
			
		||||
			effected.getActingPlayer().reviveRequest(caster, false, _power);
 | 
			
		||||
			effected.getActingPlayer().reviveRequest(caster, false, _power, _hpPercent, _mpPercent, _cpPercent);
 | 
			
		||||
		}
 | 
			
		||||
		else if (effected.isPet())
 | 
			
		||||
		{
 | 
			
		||||
			final PetInstance pet = (PetInstance) effected;
 | 
			
		||||
			effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power);
 | 
			
		||||
			effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), true, _power, _hpPercent, _mpPercent, _cpPercent);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1069,6 +1069,9 @@
 | 
			
		||||
		<effects>
 | 
			
		||||
			<effect name="ResurrectionSpecial">
 | 
			
		||||
				<power>100</power>
 | 
			
		||||
				<hpPercent>100</hpPercent>
 | 
			
		||||
				<mpPercent>100</mpPercent>
 | 
			
		||||
				<cpPercent>100</cpPercent>
 | 
			
		||||
			</effect>
 | 
			
		||||
		</effects>
 | 
			
		||||
	</skill>
 | 
			
		||||
 
 | 
			
		||||
@@ -1080,6 +1080,8 @@
 | 
			
		||||
															<xs:element name="pAccuracyAmount" type="xs:decimal" />
 | 
			
		||||
															<xs:element name="pAccuracyMode" type="xs:string" />
 | 
			
		||||
															<xs:element name="hpPercent" type="xs:unsignedByte" />
 | 
			
		||||
															<xs:element name="mpPercent" type="xs:unsignedByte" />
 | 
			
		||||
															<xs:element name="cpPercent" type="xs:unsignedByte" />
 | 
			
		||||
															<xs:element name="attribute" type="xs:string" />
 | 
			
		||||
															<xs:element name="attackerType" type="xs:string" />
 | 
			
		||||
															<xs:element name="minAttackerLevel" type="xs:unsignedByte" />
 | 
			
		||||
 
 | 
			
		||||
@@ -149,7 +149,7 @@ public abstract class Playable extends Creature
 | 
			
		||||
			{
 | 
			
		||||
				if (player.isInSiege())
 | 
			
		||||
				{
 | 
			
		||||
					getActingPlayer().reviveRequest(getActingPlayer(), false, 0);
 | 
			
		||||
					getActingPlayer().reviveRequest(getActingPlayer(), false, 0, 0, 0, 0);
 | 
			
		||||
				}
 | 
			
		||||
				player.setCharmOfCourage(false);
 | 
			
		||||
				player.sendPacket(new EtcStatusUpdate(player));
 | 
			
		||||
 
 | 
			
		||||
@@ -753,6 +753,9 @@ public class PlayerInstance extends Playable
 | 
			
		||||
	private boolean _canRevive = true;
 | 
			
		||||
	private int _reviveRequested = 0;
 | 
			
		||||
	private double _revivePower = 0;
 | 
			
		||||
	private int _reviveHpPercent = 0;
 | 
			
		||||
	private int _reviveMpPercent = 0;
 | 
			
		||||
	private int _reviveCpPercent = 0;
 | 
			
		||||
	private boolean _revivePet = false;
 | 
			
		||||
	
 | 
			
		||||
	private double _cpUpdateIncCheck = .0;
 | 
			
		||||
@@ -10195,7 +10198,7 @@ public class PlayerInstance extends Playable
 | 
			
		||||
		restoreExp(revivePower);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void reviveRequest(PlayerInstance reviver, boolean isPet, int power)
 | 
			
		||||
	public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp)
 | 
			
		||||
	{
 | 
			
		||||
		if (isResurrectionBlocked())
 | 
			
		||||
		{
 | 
			
		||||
@@ -10222,6 +10225,9 @@ public class PlayerInstance extends Playable
 | 
			
		||||
		{
 | 
			
		||||
			_reviveRequested = 1;
 | 
			
		||||
			_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
 | 
			
		||||
			_reviveHpPercent = reviveHp;
 | 
			
		||||
			_reviveMpPercent = reviveMp;
 | 
			
		||||
			_reviveCpPercent = reviveCp;
 | 
			
		||||
			_revivePet = isPet;
 | 
			
		||||
			if (hasCharmOfCourage())
 | 
			
		||||
			{
 | 
			
		||||
@@ -10274,6 +10280,43 @@ public class PlayerInstance extends Playable
 | 
			
		||||
		}
 | 
			
		||||
		_reviveRequested = 0;
 | 
			
		||||
		_revivePower = 0;
 | 
			
		||||
		
 | 
			
		||||
		// Support for specific HP/MP/CP percentage restored.
 | 
			
		||||
		final Creature effected = _revivePet ? _pet : this;
 | 
			
		||||
		if (effected == null)
 | 
			
		||||
		{
 | 
			
		||||
			_reviveHpPercent = 0;
 | 
			
		||||
			_reviveMpPercent = 0;
 | 
			
		||||
			_reviveCpPercent = 0;
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		if (_reviveHpPercent > 0)
 | 
			
		||||
		{
 | 
			
		||||
			final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100;
 | 
			
		||||
			if (amount > 0)
 | 
			
		||||
			{
 | 
			
		||||
				effected.setCurrentHp(amount, true);
 | 
			
		||||
			}
 | 
			
		||||
			_reviveHpPercent = 0;
 | 
			
		||||
		}
 | 
			
		||||
		if (_reviveMpPercent > 0)
 | 
			
		||||
		{
 | 
			
		||||
			final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100;
 | 
			
		||||
			if (amount > 0)
 | 
			
		||||
			{
 | 
			
		||||
				effected.setCurrentMp(amount, true);
 | 
			
		||||
			}
 | 
			
		||||
			_reviveMpPercent = 0;
 | 
			
		||||
		}
 | 
			
		||||
		if (_reviveCpPercent > 0)
 | 
			
		||||
		{
 | 
			
		||||
			final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100;
 | 
			
		||||
			if (amount > 0)
 | 
			
		||||
			{
 | 
			
		||||
				effected.setCurrentCp(amount, true);
 | 
			
		||||
			}
 | 
			
		||||
			_reviveCpPercent = 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean isReviveRequested()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user