pensei nisso hoje, se nao me engano tem scripts de monstros passivos por aí via source editing, com a tag de monstros passivos daria pra fazer monstros agressivos atacarem os passivos da mesma forma que atacam um player, mas como não mexo com c++, não faço idéia de como seria uma possivel implementação disso
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

pensei nisso hoje, se nao me engano tem scripts de monstros passivos por aí via source editing, com a tag de monstros passivos daria pra fazer monstros agressivos atacarem os passivos da mesma forma que atacam um player, mas como não mexo com c++, não faço idéia de como seria uma possivel implementação disso
Pois é. Eu até sei C++, mas nunca mexi com C++ pra ot e as vezes que baixei uma source apanhei pra compilar, então eu estou evitando usá-lo.
Eu encontrei um jeito, usando doTargetCombatHealth e doAreaCombatHealth, e mandando procurar na mão se tem algum monstro por perto para ele dar target, mas vai dar um puta trabalho, rs. Queria mesmo um jeito mais simples.
EDITED:
Não ta 100% ainda não, mas já é uma luz ![]()

Editado Janeiro 14 por Skulls
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

Isso daqui é um script pra monstros não atacarem determinadas vocações, alguns NTO's utilizam algo semelhante para não atacar determinados storages, acredito que com as modificações corretas daria pra implementar um sistema complexo de hierarquia na ordem de ataques:
Se o lobo tem um cervo e um humano pra atacar, qual dos dois ele escolhe?
Observe o script:
local notattackable = {1,2,5,6} --- vocações que não receberão ataque
function onCombat(cid, target)
if(not isPlayer(target)) then
return true
else
targets = getMonsterTargetList(cid)
if isInArray(notattackable, getPlayerVocation(target)) then
addEvent(check,1000,cid,targets)
return false
else
return true
end
end
end
function check(cid,targets)
for i=1, #targets do
if isInArray(notattackable, getPlayerVocation(targets[i])) then
addEvent(check,1000,cid,targets)
return false
else
stopEvent(check)
return true
end
end
end
não é de minha autoria, tenho aqui no pc salvo mas peguei de algum lugar acho.. só não lembro onde.
Com algumas tabelas vc consegue controlar muita coisa nesse script, só tem que verificar se na targetList ele considera outros monstros, porque se não... teria que modificar essa função na source ![]()
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Pelo que eu li rapidamente na source monstros entram na friend list não na target list.
mas vou dar uma olhada nisso depois, vai ajudar ja. Valeu!
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

então tenta trocar pra toda vez que for iniciar o combat, se for player checar as criaturas em volta e ver se há monstros passivos e aí vc usa o dotargetCombat, se fizer um script só pro combat dos monstros, vc pode configurar quais vão ser agressivos só botando a tag do creaturescript no xml
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Eh exatamente isso que estou fazendo, inclusive aquela gif ali.. ta funcionando, mas da trabalho.. eu vou fazer meu próprio sistema de Target de monstro e ignorar as interações vindas da source xP
Eu to com um probleminha que eh o maldito follow que eles dão, mesmo nao batendo no player, eles mantem uma interacao seguido ele como se tivesse com target. Nesse script que vc postou das vocações, acontece isso?
Editado Janeiro 14 por Skulls
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

não se tiver outro target, o problema do script acima é que ele não assume modo defensivo na presença de outro player.. lembro de um teste q eu fiz com um demon e somente um personagem da vocação q nao podia ser atacada, oque aconteceu foi que o demon ficava correndo pra lá e pra cá em volta do player como se tivesse se preparando pra ir atacar ele, mas não ia. Não lembro se o demon me seguia caso eu fugisse mas pro seu caso acredito q isso nao seria um problema.. a menos q vc esteja pensando em fazer monstros de raças que não atacam os humanos, por exemplo.. mas aí compensa mais trabalhar em cima da IA via source
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Exatamente esse o problema, fica te seguindo como ae fosse atacar. Alguma ideia de como fixar isso?
info
Grupo: Marquês
Registrado: 25/09/10
Posts: 1.3k
Reputação: +446
Gênero: Masculino

Eu acredito que seja muito melhor editar o IA dos monstros pelas sources, qualquer método diferente, é um "atalho" ou "redirecionamento"...
é melhor criar uma raça (Ex: blood, undead) de monstros, que tenha essa característica. Mas aí mano, vai ter que aprender a mexer bem nas sources, porque não é só criar um bool lá que tá tudo resolvido...
Eu acho que criar outra raça seria muito mais legal, e fácil para você controlar os monstros que não atacam player...
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Exatamente, por mais que eu saiba c++ eu ia ter que ler códigos e tutoriais pra aprender a editar as sources e fazer algo decente. Sem contar que eu nunca consigo compilar. Acho que do jeito que estou fazendo vou conseguir fazer o que preciso, só tenho que resolver esse problema do follow. Tem como criar outra raça via script?
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

Rapaz, se for 0.3~0.4 vc tem uma gama infinita de creaturescripts pra brincar..
onAttack onFollow onTarget
Experimenta cada um deles com return false e verifica qual que impede o monstro de seguir o player.
Não sei se vou levar advertencia por postar link de outros fóruns mas não tem como eu copiar todo o contéudo que eu escrevi lá aqui.
To meio sem tempo pra ficar abrindo sv e fazendo testes, mas prometo q se vc não conseguir eu vou fazer de tudo pra tentar algo aqui também. Boa sorte amigo, e se conseguir, por favor compartilhe a solução ^^
Editado Janeiro 18 por Caronte
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Wolf tu já me ajuda muito. Eu tenho esse post seu no meu favoritos, sempre que preciso de um callback novo recorro a ele. Infelizmente, onTarget não serve para monstros. Eu nunca testei onFollow, mas acredito que não funcione pq o follow que ele da é de Target. O onAttack é o que eu estou usando, não resolve o problema.
Vou postar sim, criei um tópico nos showoffs com o gif do que já fiz e a cada avanço vou compartilhar os resultados. Ao final eu posto o código completo em downloads.
Você me ajudando com ideias e possíveis caminhos já ta ótimo, eu vou implementando o que formos pensando e vendo se funciona.
info
Grupo: Conde
Registrado: 10/12/11
Posts: 962
Reputação: +99
Gênero: Masculino

info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Não quero mexer nas sources.
Consegui um resultado bem bom, vou fazer mais alguns ajustes e segunda feira posto aqui! So com setCreatureNoMove da pra contornar o bug.
Sabem me dizer se as funções set e get playerStorage podem ser usadas com uid de monstro (funcionou,mas quero saber se buga alguma coisa)
Editado Janeiro 16 por Skulls



info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino
Alguma chance de fazer dois monstros selvagens brigarem entre si, sem ter que mudar na source a AI dos monstros?
onTarget não serve pra monstros e, aparentemente, o setTarget não funciona para 2 monstros, nem o challengeCreature.
Alguma ideia?
Edited: Descobri que é possível fazer isso usando combat, mas ainda procuro uma solução mais simples do que refazer toda a iteração dos monstros via combat rs.
Editado Janeiro 14 por Skulls