/*
* 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;
}
}