Muito bom, reputado!
- Forums
- OTServ
- Recursos
- Scripting
- Globalevents e Spells
- Monstros duelando entre si
info
Group: Visconde
Joined: 20/06/15
Posts: 331
Reputation: +205
Gender: Masculino

info
Group: Conde
Joined: 14/02/13
Posts: 702
Reputation: +196
Gender: Masculino

O sistema parece estar bom, porem o jeito que você escreve seus códigos é ruim. uma dica, quando for criar um código ao invés de fazer:
> if (true) then
>> if (true) then
>>> if (true) then
>>>> if (true) then
>>>>> Código
>>>> end
>>> end
>> end
> end
Crie seus código assim:
> if (false) then
> return
> end
> if (false) then
> return
> end
> if (false) then
> return
> end
> if (false) then
> return
> end
> Código
Assim facilita muito a leitura, e intendimento e manutenção do código.
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

O sistema parece estar bom, porem o jeito que você escreve seus códigos é ruim. uma dica, quando for criar um código ao invés de fazer:
> if (true) then >> if (true) then >>> if (true) then >>>> if (true) then >>>>> Código >>>> end >>> end >> end > endCrie seus código assim:
> if (false) then > return > end > if (false) then > return > end > if (false) then > return > end > if (false) then > return > end > CódigoAssim facilita muito a leitura, e intendimento e manutenção do código.
Bom, eu entendo o seu posicionamento. Mas ai eu acho que é mais uma questão de gosto. Eu gosto de ler os códigos linearmente, por isso escrevo da forma que escrevo, do meu ponto de vista fica mais fácil pra mim verificar tudo que é feito escrevendo em cascata.
Mas, vou aceitar a sugestão pois, em termos didáticos, é mais fácil ensinar/mostrar um código para alguém com a sua forma de escrita.
Valeu.
Obrigado cara!
Abraços,
editei o que achei pertinente com relação a sugestão do banana.
Edited Janeiro 19 by Skulls
info
Group: Administrador
Joined: 08/07/05
Posts: 5.8k
Reputation: +1.4k
Gender: Outro

Ótima contribuição, como sempre!
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

Ótima contribuição, como sempre!
Obrigado!
info
Group: Herói
Joined: 14/02/14
Posts: 341
Reputation: +285
Gender: Masculino
Tibia Character: Night Wolf

ficou realmente bom, acredito que o onThink se tornaria pesado pra esse caso mas não tiro o mérito da forma que vc utilizou. A função verify é facilmente editável e isso é um ponto ultra positivo pois permite fácil implementação com tabelas pra setar raças atacáveis e evitar minions atacando bosses (nome diferente)
Só fica aqui uma questão pessoal: pq não permitir que a setTarget varie de monstro pra monstro? Orcs odeiam trolls mas eles odeiam muito mais os humanos, por exemplo.
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

ficou realmente bom, acredito que o onThink se tornaria pesado pra esse caso mas não tiro o mérito da forma que vc utilizou. A função verify é facilmente editável e isso é um ponto ultra positivo pois permite fácil implementação com tabelas pra setar raças atacáveis e evitar minions atacando bosses (nome diferente)
Só fica aqui uma questão pessoal: pq não permitir que a setTarget varie de monstro pra monstro? Orcs odeiam trolls mas eles odeiam muito mais os humanos, por exemplo.
Set target varie de que forma de monstro para monstro?
De qualquer forma minha settarget ficou meio durona mesmo, mas é pq pro que eu preciso só é necessário que ele dê preferencia a criaturas do que a players.
Obrigado pelo comentário. Você acha que ficaria pesado? Eu tava achando, mas agora to na duvida. Eu fiz um test clean (com server vazio) com pra la de mil monstros e rodou liso em um pc normal, não dedicado e não servidor.
Edited Janeiro 19 by Skulls
info
Group: Herói
Joined: 14/02/14
Posts: 341
Reputation: +285
Gender: Masculino
Tibia Character: Night Wolf

Pra você ter noção eu fiz uma spell que mandava o player andar pra frente durante 20 segundos, essa daqui e ela funcionou liso, mas quando passei prum sv ela travava ![]()
info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino

É algo de complexidade n^2 no pior caso, n no melhor caso e nlogn de caso médio, considerando que tem varias coisas rodando em paralelo não é o ideal rs.
ola, tentei usar esse código mas na hora de rodar esta dando este erro:
o que pode ser?
Distro: TFS 0.4
e mesmo se eu ignoro esses erros e tento criar o monstro que eu coloquei as tags de evento me aparece o erro abaixo:

Edited Março 13 by fefuxd
info
Group: Campones
Joined: 11/03/17
Posts: 2
Reputation: 0
Gender: Masculino

ola, tudo bom,, gostaria de saber melhor os passos para fazer isso. podeira me ajudar??
info
Group: Campones
Joined: 31/05/17
Posts: 1
Reputation: 0
não funcionou distro 0.36
Edited Julho 25 by Heartless1993







info
Group: Herói
Joined: 25/02/07
Posts: 859
Reputation: +331
Gender: Masculino
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:
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,
Edited Janeiro 19 by Skulls