* @see net.sf.l2j.gameserver.handler.IItemHandler#useItem(net.sf.l2j.gameserver.model.L2PcInstance, net.sf.l2j.gameserver.model.L2ItemInstance)
*/
@Override
public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
{
L2Character target = null;
L2PcInstance player = null;
if (activeChar instanceof L2PcInstance)
player = (L2PcInstance)activeChar;
for(int index = 0;index < targets.length;index++)
{
target = (L2Character)targets[index];
if(skill.getSkillType() != L2Skill.SkillType.BUFF && skill.getSkillType() != L2Skill.SkillType.HOT
&& skill.getSkillType() != L2Skill.SkillType.CPHOT && skill.getSkillType() != L2Skill.SkillType.MPHOT
&& skill.getSkillType() != L2Skill.SkillType.UNDEAD_DEFENSE && skill.getSkillType() != L2Skill.SkillType.AGGDEBUFF
&& skill.getSkillType() != L2Skill.SkillType.CONT)
{
if(target.reflectSkill(skill))
target = activeChar;
}
// Walls and Door should not be buffed
if(target instanceof L2DoorInstance && (skill.getSkillType() == L2Skill.SkillType.BUFF || skill.getSkillType() == L2Skill.SkillType.HOT))
continue;
// Player holding a cursed weapon can't be buffed and can't buff
if (skill.getSkillType() == L2Skill.SkillType.BUFF)
{
if (target != activeChar)
{
if (target instanceof L2PcInstance && ((L2PcInstance)target).isCursedWeaponEquiped())
continue;
else if (player != null && player.isCursedWeaponEquiped())
continue;
}
}
if (skill.isOffensive())
{
boolean ss = false;
boolean sps = false;
boolean bss = false;
if (player != null)
{
L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
if (weaponInst != null)
{
if (skill.isMagic())
{
if (weaponInst.getChargedSpiritshot() == L2ItemInstance.CHARGED_BLESSED_SPIRITSHOT)
{
bss = true;
if (skill.getId() != 1020) // vitalize
weaponInst.setChargedSpiritshot(L2ItemInstance.CHARGED_NONE);
}
else if (weaponInst.getChargedSpiritshot() == L2ItemInstance.CHARGED_SPIRITSHOT)
{
sps = true;
if (skill.getId() != 1020) // vitalize
weaponInst.setChargedSpiritshot(L2ItemInstance.CHARGED_NONE);
}
}
else
if (weaponInst.getChargedSoulshot() == L2ItemInstance.CHARGED_SOULSHOT)
{
ss = true;
if (skill.getId() != 1020) // vitalize
weaponInst.setChargedSoulshot(L2ItemInstance.CHARGED_NONE);
}
}
}
else if (activeChar instanceof L2Summon)
{
L2Summon activeSummon = (L2Summon) activeChar;
if (skill.isMagic())
{
if (activeSummon.getChargedSpiritShot() == L2ItemInstance.CHARGED_BLESSED_SPIRITSHOT)
{
bss = true;
activeSummon.setChargedSpiritShot(L2ItemInstance.CHARGED_NONE);
}
else if (activeSummon.getChargedSpiritShot() == L2ItemInstance.CHARGED_SPIRITSHOT)
{
sps = true;
activeSummon.setChargedSpiritShot(L2ItemInstance.CHARGED_NONE);
}
}
else
if (activeSummon.getChargedSoulShot() == L2ItemInstance.CHARGED_SOULSHOT)
{
ss = true;
activeSummon.setChargedSoulShot(L2ItemInstance.CHARGED_NONE);
}
}
boolean acted = Formulas.getInstance().calcSkillSuccess(activeChar, target, skill, ss, sps, bss);
if (!acted) {
activeChar.sendPacket(new SystemMessage(SystemMessageId.ATTACK_FAILED));
continue;
}
}
boolean stopped = false;
L2Effect[] effects = target.getAllEffects();
if (effects != null)
{
for (L2Effect e : effects)
{
if ((e != null) && e.getSkill().getId() == skill.getId())
{
e.exit();
stopped = true;
}
}
}
if (skill.isToggle() && stopped)
return;
// if this is a debuff let the duel manager know about it
// so the debuff can be removed after the duel
// (player & target must be in the same duel)
if (target instanceof L2PcInstance && ((L2PcInstance)target).isInDuel()
&& (skill.getSkillType() == L2Skill.SkillType.DEBUFF ||
skill.getSkillType() == L2Skill.SkillType.BUFF)
&& player.getDuelId() == ((L2PcInstance)target).getDuelId())
{
DuelManager dm = DuelManager.getInstance();
for (L2Effect buff : skill.getEffects(activeChar, target))
if (buff != null) dm.onBuff(((L2PcInstance)target), buff);
}
else
skill.getEffects(activeChar, target);
if (skill.getSkillType() == L2Skill.SkillType.AGGDEBUFF)
{
if (target instanceof L2Attackable)
target.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, activeChar, (int)skill.getPower());
else if (target instanceof L2PlayableInstance)
{
if (target.getTarget() == activeChar)
target.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK,activeChar);
else
target.setTarget(activeChar);
}
}
}
// self Effect :]
L2Effect effect = activeChar.getFirstEffect(skill.getId());