/* * 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 silentium.scripts.handlers.skill; import silentium.gameserver.handler.ISkillHandler; import silentium.gameserver.model.L2Object; import silentium.gameserver.model.L2Skill; import silentium.gameserver.model.L2Skill.SkillTargetType; import silentium.gameserver.model.actor.L2Character; import silentium.gameserver.model.actor.instance.L2PcInstance; import silentium.gameserver.model.actor.instance.L2PetInstance; import silentium.gameserver.skills.Formulas; import silentium.gameserver.taskmanager.DecayTaskManager; import silentium.gameserver.templates.skills.L2SkillType; import java.util.ArrayList; import java.util.List; public class Resurrect implements ISkillHandler { private static final L2SkillType[] SKILL_IDS = { L2SkillType.RESURRECT }; @Override public void useSkill(final L2Character activeChar, final L2Skill skill, final L2Object... targets) { final L2PcInstance player = activeChar.getActingPlayer(); L2Character target = null; final List<L2Character> targetToRes = new ArrayList<>(); for (final L2Object victim : targets) { if (victim instanceof L2PcInstance) { // Check for same party or for same clan, if target is for clan. if (skill.getTargetType() == SkillTargetType.TARGET_CORPSE_CLAN) { if (player.getClanId() != ((L2PcInstance) victim).getClanId()) continue; } } target = (L2Character) victim; if (target.isVisible()) targetToRes.add(target); } if (targetToRes.isEmpty()) activeChar.abortCast(); for (final L2Character cha : targetToRes) { if (activeChar instanceof L2PcInstance) { if (cha instanceof L2PcInstance) ((L2PcInstance) cha).reviveRequest((L2PcInstance) activeChar, skill, false); else if (cha instanceof L2PetInstance) { if (((L2PetInstance) cha).getOwner() == activeChar) cha.doRevive(Formulas.calculateSkillResurrectRestorePercent(skill.getPower(), activeChar)); else ((L2PetInstance) cha).getOwner().reviveRequest((L2PcInstance) activeChar, skill, true); } else cha.doRevive(Formulas.calculateSkillResurrectRestorePercent(skill.getPower(), activeChar)); } else { DecayTaskManager.getInstance().cancelDecayTask(cha); cha.doRevive(Formulas.calculateSkillResurrectRestorePercent(skill.getPower(), activeChar)); } } } @Override public L2SkillType[] getSkillIds() { return SKILL_IDS; } }