Separated RebalanceHP effect for summons.
This commit is contained in:
		| @@ -257,6 +257,7 @@ public final class EffectMasterHandler | ||||
| 		EffectHandler.getInstance().registerHandler("RandomizeHate", RandomizeHate::new); | ||||
| 		EffectHandler.getInstance().registerHandler("RealDamage", RealDamage::new); | ||||
| 		EffectHandler.getInstance().registerHandler("RebalanceHP", RebalanceHP::new); | ||||
| 		EffectHandler.getInstance().registerHandler("RebalanceHPSummon", RebalanceHPSummon::new); | ||||
| 		EffectHandler.getInstance().registerHandler("Recovery", Recovery::new); | ||||
| 		EffectHandler.getInstance().registerHandler("ReduceDamage", ReduceDamage::new); | ||||
| 		EffectHandler.getInstance().registerHandler("ReduceCancel", ReduceCancel::new); | ||||
|   | ||||
| @@ -60,150 +60,94 @@ public final class RebalanceHP extends AbstractEffect | ||||
| 		double fullHP = 0; | ||||
| 		double currentHPs = 0; | ||||
| 		final L2Party party = effector.getParty(); | ||||
| 		 | ||||
| 		switch (skill.getTargetType()) | ||||
| 		if (party != null) | ||||
| 		{ | ||||
| 			case MY_PARTY: | ||||
| 			for (L2PcInstance member : party.getMembers()) | ||||
| 			{ | ||||
| 				if (party != null) | ||||
| 				if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true)) | ||||
| 				{ | ||||
| 					for (L2PcInstance member : party.getMembers()) | ||||
| 					fullHP += member.getMaxHp(); | ||||
| 					currentHPs += member.getCurrentHp(); | ||||
| 				} | ||||
| 				 | ||||
| 				final L2Summon summon = member.getPet(); | ||||
| 				if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))) | ||||
| 				{ | ||||
| 					fullHP += summon.getMaxHp(); | ||||
| 					currentHPs += summon.getCurrentHp(); | ||||
| 				} | ||||
| 				 | ||||
| 				for (L2Summon servitors : member.getServitors().values()) | ||||
| 				{ | ||||
| 					if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true)) | ||||
| 					{ | ||||
| 						if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true)) | ||||
| 						fullHP += servitors.getMaxHp(); | ||||
| 						currentHPs += servitors.getCurrentHp(); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			double percentHP = currentHPs / fullHP; | ||||
| 			for (L2PcInstance member : party.getMembers()) | ||||
| 			{ | ||||
| 				if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true)) | ||||
| 				{ | ||||
| 					double newHP = member.getMaxHp() * percentHP; | ||||
| 					if (newHP > member.getCurrentHp()) // The target gets healed | ||||
| 					{ | ||||
| 						// The heal will be blocked if the current hp passes the limit | ||||
| 						if (member.getCurrentHp() > member.getMaxRecoverableHp()) | ||||
| 						{ | ||||
| 							fullHP += member.getMaxHp(); | ||||
| 							currentHPs += member.getCurrentHp(); | ||||
| 							newHP = member.getCurrentHp(); | ||||
| 						} | ||||
| 						 | ||||
| 						final L2Summon summon = member.getPet(); | ||||
| 						if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))) | ||||
| 						else if (newHP > member.getMaxRecoverableHp()) | ||||
| 						{ | ||||
| 							fullHP += summon.getMaxHp(); | ||||
| 							currentHPs += summon.getCurrentHp(); | ||||
| 						} | ||||
| 						 | ||||
| 						for (L2Summon servitors : member.getServitors().values()) | ||||
| 						{ | ||||
| 							fullHP += servitors.getMaxHp(); | ||||
| 							currentHPs += servitors.getCurrentHp(); | ||||
| 							newHP = member.getMaxRecoverableHp(); | ||||
| 						} | ||||
| 					} | ||||
| 					 | ||||
| 					final double percentHP = currentHPs / fullHP; | ||||
| 					for (L2PcInstance member : party.getMembers()) | ||||
| 					{ | ||||
| 						if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true)) | ||||
| 						{ | ||||
| 							double newHP = member.getMaxHp() * percentHP; | ||||
| 							if (newHP > member.getCurrentHp()) // The target gets healed | ||||
| 							{ | ||||
| 								// The heal will be blocked if the current hp passes the limit | ||||
| 								if (member.getCurrentHp() > member.getMaxRecoverableHp()) | ||||
| 								{ | ||||
| 									newHP = member.getCurrentHp(); | ||||
| 								} | ||||
| 								else if (newHP > member.getMaxRecoverableHp()) | ||||
| 								{ | ||||
| 									newHP = member.getMaxRecoverableHp(); | ||||
| 								} | ||||
| 							} | ||||
| 							 | ||||
| 							member.setCurrentHp(newHP); | ||||
| 						} | ||||
| 						 | ||||
| 						final L2Summon summon = member.getPet(); | ||||
| 						if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))) | ||||
| 						{ | ||||
| 							double newHP = summon.getMaxHp() * percentHP; | ||||
| 							if (newHP > summon.getCurrentHp()) // The target gets healed | ||||
| 							{ | ||||
| 								// The heal will be blocked if the current hp passes the limit | ||||
| 								if (summon.getCurrentHp() > summon.getMaxRecoverableHp()) | ||||
| 								{ | ||||
| 									newHP = summon.getCurrentHp(); | ||||
| 								} | ||||
| 								else if (newHP > summon.getMaxRecoverableHp()) | ||||
| 								{ | ||||
| 									newHP = summon.getMaxRecoverableHp(); | ||||
| 								} | ||||
| 							} | ||||
| 							summon.setCurrentHp(newHP); | ||||
| 						} | ||||
| 						 | ||||
| 						for (L2Summon servitors : member.getServitors().values()) | ||||
| 						{ | ||||
| 							if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)) | ||||
| 							{ | ||||
| 								double newHP = servitors.getMaxHp() * percentHP; | ||||
| 								if (newHP > servitors.getCurrentHp()) // The target gets healed | ||||
| 								{ | ||||
| 									// The heal will be blocked if the current hp passes the limit | ||||
| 									if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp()) | ||||
| 									{ | ||||
| 										newHP = servitors.getCurrentHp(); | ||||
| 									} | ||||
| 									else if (newHP > servitors.getMaxRecoverableHp()) | ||||
| 									{ | ||||
| 										newHP = servitors.getMaxRecoverableHp(); | ||||
| 									} | ||||
| 								} | ||||
| 								servitors.setCurrentHp(newHP); | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case SUMMON: | ||||
| 			{ | ||||
| 				for (L2Summon summon : effector.getServitors().values()) | ||||
| 				{ | ||||
| 					if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)) | ||||
| 					{ | ||||
| 						fullHP += summon.getMaxHp(); | ||||
| 						currentHPs += summon.getCurrentHp(); | ||||
| 					} | ||||
| 					member.setCurrentHp(newHP); | ||||
| 				} | ||||
| 				 | ||||
| 				fullHP += effector.getMaxHp(); | ||||
| 				fullHP += effector.getCurrentHp(); | ||||
| 				 | ||||
| 				final double percentHP = currentHPs / fullHP; | ||||
| 				for (L2Summon summon : effector.getServitors().values()) | ||||
| 				final L2Summon summon = member.getPet(); | ||||
| 				if ((summon != null) && (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true))) | ||||
| 				{ | ||||
| 					if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)) | ||||
| 					double newHP = summon.getMaxHp() * percentHP; | ||||
| 					if (newHP > summon.getCurrentHp()) // The target gets healed | ||||
| 					{ | ||||
| 						double newHP = summon.getMaxHp() * percentHP; | ||||
| 						if (newHP > summon.getCurrentHp()) // The target gets healed | ||||
| 						// The heal will be blocked if the current hp passes the limit | ||||
| 						if (summon.getCurrentHp() > summon.getMaxRecoverableHp()) | ||||
| 						{ | ||||
| 							newHP = summon.getCurrentHp(); | ||||
| 						} | ||||
| 						else if (newHP > summon.getMaxRecoverableHp()) | ||||
| 						{ | ||||
| 							newHP = summon.getMaxRecoverableHp(); | ||||
| 						} | ||||
| 					} | ||||
| 					summon.setCurrentHp(newHP); | ||||
| 				} | ||||
| 				 | ||||
| 				for (L2Summon servitors : member.getServitors().values()) | ||||
| 				{ | ||||
| 					if (!servitors.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, servitors, true)) | ||||
| 					{ | ||||
| 						double newHP = servitors.getMaxHp() * percentHP; | ||||
| 						if (newHP > servitors.getCurrentHp()) // The target gets healed | ||||
| 						{ | ||||
| 							// The heal will be blocked if the current hp passes the limit | ||||
| 							if (summon.getCurrentHp() > summon.getMaxRecoverableHp()) | ||||
| 							if (servitors.getCurrentHp() > servitors.getMaxRecoverableHp()) | ||||
| 							{ | ||||
| 								newHP = summon.getCurrentHp(); | ||||
| 								newHP = servitors.getCurrentHp(); | ||||
| 							} | ||||
| 							else if (newHP > summon.getMaxRecoverableHp()) | ||||
| 							else if (newHP > servitors.getMaxRecoverableHp()) | ||||
| 							{ | ||||
| 								newHP = summon.getMaxRecoverableHp(); | ||||
| 								newHP = servitors.getMaxRecoverableHp(); | ||||
| 							} | ||||
| 						} | ||||
| 						 | ||||
| 						summon.setCurrentHp(newHP); | ||||
| 						servitors.setCurrentHp(newHP); | ||||
| 					} | ||||
| 				} | ||||
| 				 | ||||
| 				double newHP = effector.getMaxHp() * percentHP; | ||||
| 				if (newHP > effector.getCurrentHp()) | ||||
| 				{ | ||||
| 					if (effector.getCurrentHp() > effector.getMaxRecoverableHp()) | ||||
| 					{ | ||||
| 						newHP = effector.getCurrentHp(); | ||||
| 					} | ||||
| 					else if (newHP > effector.getMaxRecoverableHp()) | ||||
| 					{ | ||||
| 						newHP = effector.getMaxRecoverableHp(); | ||||
| 					} | ||||
| 				} | ||||
| 				effector.setCurrentHp(newHP); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										111
									
								
								L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package handlers.effecthandlers; | ||||
|  | ||||
| import com.l2jmobius.gameserver.model.StatsSet; | ||||
| import com.l2jmobius.gameserver.model.actor.L2Character; | ||||
| import com.l2jmobius.gameserver.model.actor.L2Summon; | ||||
| import com.l2jmobius.gameserver.model.effects.AbstractEffect; | ||||
| import com.l2jmobius.gameserver.model.effects.L2EffectType; | ||||
| import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; | ||||
| import com.l2jmobius.gameserver.model.skills.Skill; | ||||
| import com.l2jmobius.gameserver.util.Util; | ||||
|  | ||||
| /** | ||||
|  * Rebalance HP effect implementation. | ||||
|  * @author Adry_85, earendil | ||||
|  */ | ||||
| public class RebalanceHPSummon extends AbstractEffect | ||||
| { | ||||
| 	public RebalanceHPSummon(StatsSet params) | ||||
| 	{ | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public L2EffectType getEffectType() | ||||
| 	{ | ||||
| 		return L2EffectType.REBALANCE_HP; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isInstant() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item) | ||||
| 	{ | ||||
| 		if (!effector.isPlayer()) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		double fullHP = 0; | ||||
| 		double currentHPs = 0; | ||||
| 		 | ||||
| 		for (L2Summon summon : effector.getServitors().values()) | ||||
| 		{ | ||||
| 			if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)) | ||||
| 			{ | ||||
| 				fullHP += summon.getMaxHp(); | ||||
| 				currentHPs += summon.getCurrentHp(); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		fullHP += effector.getMaxHp(); | ||||
| 		currentHPs += effector.getCurrentHp(); | ||||
| 		 | ||||
| 		double percentHP = currentHPs / fullHP; | ||||
| 		for (L2Summon summon : effector.getServitors().values()) | ||||
| 		{ | ||||
| 			if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)) | ||||
| 			{ | ||||
| 				double newHP = summon.getMaxHp() * percentHP; | ||||
| 				if (newHP > summon.getCurrentHp()) // The target gets healed | ||||
| 				{ | ||||
| 					// The heal will be blocked if the current hp passes the limit | ||||
| 					if (summon.getCurrentHp() > summon.getMaxRecoverableHp()) | ||||
| 					{ | ||||
| 						newHP = summon.getCurrentHp(); | ||||
| 					} | ||||
| 					else if (newHP > summon.getMaxRecoverableHp()) | ||||
| 					{ | ||||
| 						newHP = summon.getMaxRecoverableHp(); | ||||
| 					} | ||||
| 				} | ||||
| 				 | ||||
| 				summon.setCurrentHp(newHP); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		double newHP = effector.getMaxHp() * percentHP; | ||||
| 		if (newHP > effector.getCurrentHp()) // The target gets healed | ||||
| 		{ | ||||
| 			// The heal will be blocked if the current hp passes the limit | ||||
| 			if (effector.getCurrentHp() > effector.getMaxRecoverableHp()) | ||||
| 			{ | ||||
| 				newHP = effector.getCurrentHp(); | ||||
| 			} | ||||
| 			else if (newHP > effector.getMaxRecoverableHp()) | ||||
| 			{ | ||||
| 				newHP = effector.getMaxRecoverableHp(); | ||||
| 			} | ||||
| 		} | ||||
| 		effector.setCurrentHp(newHP); | ||||
| 	} | ||||
| } | ||||
| @@ -226,6 +226,7 @@ PvpPhysicalSkillDefenceBonus: Physical skill defence stat when taking damage fro | ||||
| RandomizeHate: Target NPC stops hating you and starts hating random target with your hate. | ||||
| RealDamage: Static damage. | ||||
| RebalanceHP: Balances targets' current HP. | ||||
| RebalanceHPSummon: Balances targets' current HP for summons. | ||||
| Recovery: Decreases death penalty level. | ||||
| ReduceCancel: Magic skill casting interruption stat. | ||||
| ReduceDropPenalty: Reduces EXP lost and death penalty chance. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDev
					MobiusDev