Oneshot 732 Postado Setembro 18, 2013 Share Postado Setembro 18, 2013 Monstros Passivos Muito bom dia, galera. Sabe, eu estava estudando como funcionam os servidores de pokémons, aqueles que ainda estão começando, embriões de bons servidores, não grandes servidores como o Poke Brasil Online (PokeBro). O problema de todos esses servidores, é que todos são dependentes de sistemas criados pelo brun123 (se não me engano) dentro das sources, ou seja, esses servidores são dependentes do executável compilado do PDA, entre outros. A pedido de um amigo, eu desenvolvi o sistema de monstros passivos. Sim aquele sistema que dá um upgrade na inteligência artificial das criaturas, onde algumas podem atacar o jogador assim que o ver, outras podem atacar apenas quando for atacadas. É um sistema muito básico mesmo, eu fiz com C++ e Lua por puro comodismo, e pretendo deixar mais avançado apenas com C++ e uso de flags nos XMLs. Se você quiser usar, sinta-se a vontade. No seu arquivo monster.h, procure por: bool isHostile() {return mType->isHostile;} Substitua por: bool isHostile() const { std::string value; if(!getStorage("hostile", value)) return mType->isHostile; return booleanString(value); } No seu arquivo monster.cpp, procure por: Monster::selectTarget Dentro da função, procure por: if(!isTarget(creature)) return false; Adicione abaixo: if(!isHostile()) return false; No diretório creaturescripts/scripts, crie um novo arquivo com nome passive.lua e adicione: PASSIVE_BEHAVIOR = {"Deer", "Rabbit"} -- Aqui ficam os monstros que não atacam, mesmo que atacados. function onCombat(cid, target) if isMonster(target) then if not isInArray(PASSIVE_BEHAVIOR, getCreatureName(target)) then doCreatureSetStorage(target, "hostile", 1) end doMonsterSetTarget(target, cid) end return true end No mesmo diretório, abra o arquivo login.lua e adicione: registerCreatureEvent(cid, "PassiveSystem") No diretório creaturescripts/, abra o arquivo creaturescripts.xml e adicione: <event type="combat" name="PassiveSystem" event="script" value="passive.lua"/> Agora é só compilar seu servidor, sem a pasta obj, ou seja, dê um Rebuild All e correr pro abraço com seu sistema de monstros passivos. Abraços, Oneshot. Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/ Compartilhar em outros sites More sharing options...
Tonynh 514 Postado Setembro 18, 2013 Share Postado Setembro 18, 2013 Incrível como sempre Bruno! Parabéns pelo belo code, e mais uma vez, bem vindo de volta! ^^ Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1562589 Compartilhar em outros sites More sharing options...
Gabrieltxu 738 Postado Setembro 18, 2013 Share Postado Setembro 18, 2013 (editado) Muito bom maninho. rep++. Editado Setembro 18, 2013 por Gabrieltxu Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1562604 Compartilhar em outros sites More sharing options...
Nu77 81 Postado Setembro 18, 2013 Share Postado Setembro 18, 2013 Oneshot e seus grandes codigos, muito bom!! Bem vindo de volta, o xtibia precisava de pessoas como você. Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1562797 Compartilhar em outros sites More sharing options...
BananaFight 196 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 (editado) Tem certeza que funciona ? no getStorage o primeiro argumento é um 'uint32', um numero, e você esta tentando mandar "hostile", Só isso já causaria um bug na hora da compilação. Depois disso no creaturescript, só usando setTarget não é o suficiente para fazer com que um monstro como Rabbit ataque um player ou um summon. E se mesmo assim funcionasse, Caso duas pessoas ataquem o mesmo monstro ele iria sempre setar o target no ultimo que atacou ele, ou seja, ia ficar mudando o target, Sem contar que se sair da tela da target lost, e ele voltaria a ser passivo, Você precisaria criar uma lista com todos as criaturas que atacaram o monstro e fazer ela atacar 1 por 1 caso ainda estejam na tela, e só parar quando estiverem mortos ou tiverem re-logado. Editado Setembro 22, 2013 por BananaFight Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1563977 Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Setembro 22, 2013 Autor Share Postado Setembro 22, 2013 (editado) Compile e teste, abraços Você pode manjar de OTClient, mas eu manjo de OpenTibia, BananaLutador Editado Setembro 22, 2013 por Oneshot Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1563981 Compartilhar em outros sites More sharing options...
LuckOake 400 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 (editado) Oneshot 1x0 BananaFight, getStorage é string nas versões 8.6++ Já em 8.54, por exemplo, é int. E sim, o setTarget é suficiente, e o monstro não fica mudando de alvo. Tudo já foi testado e está funcionando sem problemas. Editado Setembro 22, 2013 por LuckOake Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1563987 Compartilhar em outros sites More sharing options...
BananaFight 196 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 Entendo, Você poderia ao menos mostrar o versão testada no tópico para evitar esse tipo de confusão ? Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1564045 Compartilhar em outros sites More sharing options...
Gabriel Couto 293 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 Muito bom, como sempre Oneshot! Não estou por dentro dos OTServers mais, principalmente derivados, então é uma novidade pra mim. Ótima ideia passar para nós! Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1564052 Compartilhar em outros sites More sharing options...
BananaFight 196 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 (editado) Tentei compilar em uma rev 3887, foi sem problemas, Então instalei o creaturescripts e o onlogin no meu server 8.6, porem ainda sim o rabbit não me ataca. PASSIVE_BEHAVIOR = {"Deer", "Rabbit"} -- Aqui ficam os monstros que não atacam, mesmo que atacados. function onCombat(cid, target) print("X") if isMonster(target) then print("Y") if not isInArray(PASSIVE_BEHAVIOR, getCreatureName(target)) then print("hostile") doCreatureSetStorage(target, "hostile", 1) end print("Z") doMonsterSetTarget(target, cid) end return true end Resultado Quando ataca rabbit: X Y Z Quando ataca rat: X Y hostile Z Editado Setembro 22, 2013 por BananaFight Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1564066 Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Setembro 22, 2013 Autor Share Postado Setembro 22, 2013 (editado) Mas no caso o array PASSIVE_BEHAVIOR são os monstros que não irão atacar mesmo que você ataque eles, BananaFight. Todos os outros monstros que não estejam nesse array e tenham inicialmente flag hostile igual a 0, começam a atacar depois de atacados. Eu tenho a leve impressão que você está tentando achar qualquer defeito pra falar "ó como você não sabe programar", desculpe, amigo, mas você não vai conseguir. Todavia, irei baixar o Camtasia e gravar um vídeo. Editado Setembro 22, 2013 por Oneshot Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1564096 Compartilhar em outros sites More sharing options...
kttallan 319 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 Boaa manow agr os cara vão ter vontade de fazer um servidor do zero deixando de tras o pda Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1564114 Compartilhar em outros sites More sharing options...
caotic 393 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 mesma que tenha limitações no sistema não é o motivo das criticas do banana. Do mais. É bem legal Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1564120 Compartilhar em outros sites More sharing options...
BananaFight 196 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 (editado) Nossa, Porque diabos vocês pensam isso de mim, eu fiquei mega feliz quando vi este tópico, foi uma confusão minha que entendi errado o seu script, e OneShot, eu sou seu FAN, Nunca tentarei te atacar de qualquer modo, Levei até ban chingando o gustavo quando ele te deu ban. Edit: Eu não entendo, mesmo tirando o rabbit da table, ele ainda não me ataca, mesmo printando todos os if. Tentei printar o target dele print(getCreatureTarget(target)) e retorna 0 sempre. Editado Setembro 22, 2013 por BananaFight Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1564216 Compartilhar em outros sites More sharing options...
Strogman 89 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 boa rep+ Link para o comentário https://xtibia.com/forum/topic/221249-monstros-passivos/#findComment-1564222 Compartilhar em outros sites More sharing options...
Posts Recomendados