Essa condição:
attacker->getPlayer()
é sempre verdadeira, então vc pode remover do if
---
target->getCreature()
target já é uma Creature, então isso sempre retorna o mesmo valor de target, vc pode escrever somente
target
---
Essa condição:
attacker->getCreature()->isSummon()
é sempre falsa e o if nunca vai ser executado
Não sei sei nível de conhecimento pra isso, mas o TFS não tem função pra checar se o Player tem um certo item. O que vc pode fazer é adicionar um storage quando o player equipar o item especifico, e tirar o storage quando ele desequipar, e na função da magia vc checa o storage.