Separated RebalanceHP effect for summons.
This commit is contained in:
		@@ -261,6 +261,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_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/RebalanceHPSummon.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								L2J_Mobius_4.0_GrandCrusade/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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user