Boa noite galera
Como levantei no tópico: http://www.xtibia.com/forum/topic/238784-monstros-se-matando/monstros selvagens são todos tratados como amigos e, portanto, não é possível setar target neles com funções de target normal. Além disso, o callBack onTarget() não funciona para monstros.
Desde então estou em busca de uma forma de fazer monstros lutarem entre si sem mexer na source e, com algumas sugestões do Lobo @Night Wolf eu consegui chegar a algo bem satisfatório para o que eu precisava. Portanto, compartilho com você a base do sistema (fiz outras coisas para o meu objetivo que acho bobeira postar aqui, mas a base do sistema de luta está aqui).
Então vamos lá.
Primeiramente, esse sistema é baseado em dois eventos: onThink (que repete de x em x segundos) e onAttack(para evitar que o monstro ataque players quando estiver atacando monstros.
Vá em creaturescripts e crie as seguintes tags em creaturescripts.xml:
<event type="think" name="monsters" event="script" value="monsters.lua"/> <event type="attack" name="monstersatt" event="script" value="monsters.lua"/>
Feito isso, vá na pasta lib (data/lib) e crie um arquivo chamado monsterslib.lua. La dentro coloque:
local config = { storages = {time = 5553, tgt = 5554}, away_dist = 2, } --[[Aqui você define as particularidades do alvo do monstro Por exemplo: Se o alvo for ele mesmo, ele não ataca Se o alvo for da mesma especie, isto é, tiver o mesmo nome ele não ataca e por ai vai]]--
Feito isso, agora crie um arquivo chamado monsters.lua dentro de creaturescripts/scripts, e cole isso dentro
local config = { storages = {time = 5553, tgt = 5554}, attRange = 1, }
function onAttack(cid, target) if isPlayer(target) then if getCreatureStorage(cid, config.storages.tgt) ~= target then return false end end return true end
Pronto é isso, você tem um pequeno framework configurável para fazer seus monstros se matarem.
Para implementar o script no monstro basta ir no arquivo .xml dos monstros que deseja incluir esse sistema e colocar, logo após as defense, a tag:
<script> <event name="minionatt"/> <event name="minion"/> </script>
Abaixo um exemplo de utilização do framework, simulando uma luta de "raças" entre dwarfs e orcs de diferentes tipos:
O código está bem auto explicativo. Qualquer dúvida me avisem.
Espero que gostem.
Abraços,