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); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -1113,6 +1113,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)); | ||||
|   | ||||
| @@ -750,6 +750,9 @@ public class PlayerInstance extends Playable | ||||
| 	private boolean _canRevive = true; | ||||
| 	private int _reviveRequested = 0; | ||||
| 	private double _revivePower = 0; | ||||
| 	private int _reviveHpPercent = 0; | ||||
| 	private int _reviveMpPercent = 0; | ||||
| 	private int _reviveCpPercent = 0; | ||||
| 	private boolean _revivePet = false; | ||||
| 	 | ||||
| 	private double _cpUpdateIncCheck = .0; | ||||
| @@ -10085,7 +10088,7 @@ public class PlayerInstance extends Playable | ||||
| 		restoreExp(revivePower); | ||||
| 	} | ||||
| 	 | ||||
| 	public void reviveRequest(PlayerInstance reviver, boolean isPet, int power) | ||||
| 	public void reviveRequest(PlayerInstance reviver, boolean isPet, int power, int reviveHp, int reviveMp, int reviveCp) | ||||
| 	{ | ||||
| 		if (isResurrectionBlocked()) | ||||
| 		{ | ||||
| @@ -10112,6 +10115,9 @@ public class PlayerInstance extends Playable | ||||
| 		{ | ||||
| 			_reviveRequested = 1; | ||||
| 			_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver); | ||||
| 			_reviveHpPercent = reviveHp; | ||||
| 			_reviveMpPercent = reviveMp; | ||||
| 			_reviveCpPercent = reviveCp; | ||||
| 			_revivePet = isPet; | ||||
| 			if (hasCharmOfCourage()) | ||||
| 			{ | ||||
| @@ -10164,6 +10170,43 @@ public class PlayerInstance extends Playable | ||||
| 		} | ||||
| 		_reviveRequested = 0; | ||||
| 		_revivePower = 0; | ||||
| 		 | ||||
| 		// Support for specific HP/MP/CP percentage restored. | ||||
| 		final Creature effected = _revivePet ? _pet : this; | ||||
| 		if (effected == null) | ||||
| 		{ | ||||
| 			_reviveHpPercent = 0; | ||||
| 			_reviveMpPercent = 0; | ||||
| 			_reviveCpPercent = 0; | ||||
| 			return; | ||||
| 		} | ||||
| 		if (_reviveHpPercent > 0) | ||||
| 		{ | ||||
| 			final double amount = (effected.getMaxHp() * _reviveHpPercent) / 100; | ||||
| 			if (amount > 0) | ||||
| 			{ | ||||
| 				effected.setCurrentHp(amount, true); | ||||
| 			} | ||||
| 			_reviveHpPercent = 0; | ||||
| 		} | ||||
| 		if (_reviveMpPercent > 0) | ||||
| 		{ | ||||
| 			final double amount = (effected.getMaxMp() * _reviveMpPercent) / 100; | ||||
| 			if (amount > 0) | ||||
| 			{ | ||||
| 				effected.setCurrentMp(amount, true); | ||||
| 			} | ||||
| 			_reviveMpPercent = 0; | ||||
| 		} | ||||
| 		if (_reviveCpPercent > 0) | ||||
| 		{ | ||||
| 			final double amount = (effected.getMaxCp() * _reviveCpPercent) / 100; | ||||
| 			if (amount > 0) | ||||
| 			{ | ||||
| 				effected.setCurrentCp(amount, true); | ||||
| 			} | ||||
| 			_reviveCpPercent = 0; | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isReviveRequested() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment