Ramza 11 #1 Posted September 17, 2010 Tava dando uma olhada nas sources, e vi a função isSightClear. Ela é uma função super útil, mas pelo fato de estar nas sources e em C++ fica difícil de entende-la. Alguém sabe se existe ela em LUA? Entendo muito pouco de C++, tentei entender a função pra faze-la em lua mas tá difícil, dá mil voltar, mil for's... Alguém tem ela em LUA? Seria pegar duas posições A e B, e traçar uma linha reta entre as duas checando todos os pontos entre eles pra ver se existe algo blocando o caminho. Abraços! Share this post Link to post Share on other sites
Mock 32 #2 Posted September 17, 2010 tem usando pathfinding. vc usa a funçao isWalkable na tela toda e salva numa tabela os valores 0 p livre e 1 p ocupado. ai dps é so roda um algoritimo nessa matriz Share this post Link to post Share on other sites
Ramza 11 #3 Posted September 18, 2010 tem usando pathfinding.vc usa a funçao isWalkable na tela toda e salva numa tabela os valores 0 p livre e 1 p ocupado. ai dps é so roda um algoritimo nessa matriz Isso é a parte fácil né, nem precisava fazer com matriz, chega a ser perda de tempo. Porque logo após pegar no mapa todo as posições que tem ou não algo blocando, você precisa saber qual vai ser a trajetória da magia/item/munição até o alvo, portanto, você precisaria saber por quais sqms ela vai passar de você até a posição desejada. Isso que é o foda. Sabendo isso, você não precisa fazer matriz, apenas um for pegando em todas as posições e checando. Mas o difícil é saber por quais sqms vai passar :/ Share this post Link to post Share on other sites
Biozard 0 #4 Posted September 18, 2010 q q essa função faz? Share this post Link to post Share on other sites
Ramza 11 #5 Posted September 18, 2010 q q essa função faz? Ela checa se, se você lançar uma magia de uma posição até a outra, vai ter uma parede ou algo do tipo no caminho. Mas pra isso ela tem que pegar todas as posições que a magia vai passar, certinho. E isso que é foda! Share this post Link to post Share on other sites
Eduardowm 0 #6 Posted September 19, 2010 Eu ja te mandei essa função por pm uma vez :/ isSightClear(fromPos, toPos, floorCheck) Share this post Link to post Share on other sites
Ramza 11 #7 Posted September 19, 2010 Me mandou? DASHADSHUSADHUADS Nem lembro, mas enfim, ela tá em C++ nas sources, o foda é trazer ela pra lua... Tentei descobrir qual a rota que uma magia ou munição faz de uma pos até a outra, como calcular essa rota saca? Mas não consegui :/ Tensíssimo! Share this post Link to post Share on other sites
Eduardowm 0 #8 Posted September 19, 2010 Eu acabei de postar a função :<, ela pode ser usada nos scripts. isSightClear(fromPos, toPos, floorCheck) Pode testar, funciona normal e é muito útil. Share this post Link to post Share on other sites
Ramza 11 #9 Posted September 19, 2010 Eu acabei de postar a função :<, ela pode ser usada nos scripts. isSightClear(fromPos, toPos, floorCheck) Pode testar, funciona normal e é muito útil. DASHUDHUDSAHUADSHADUDSA agora que entendi o que você quis dizer... Eu sei que ela existe, mas to falando em lua, essa tá na sources! Tá feita toda em C++, não dá pra entender nada! Queria saber se alguém conseguiu/consegue fazer ela em lua, aquela parada de saber por quais sqms vai passar a magia pra chegar de um ponto ao outro xD Share this post Link to post Share on other sites
Eduardowm 0 #10 Posted September 19, 2010 Ah você só quer intender ela... Boa sorte então =p Share this post Link to post Share on other sites
Socket 0 #11 Posted September 25, 2010 Certo, vou dar uma pequena explicação. A função isSightClear, existe sim, você pode chama-la em seus scripts, ela não irá mover uma determinada criatura, irá apenas checar se uma criatura pode mover de fromPos à toPos. Munição, no caso que você disee, simplesmente verifica se pode, simbologicamente, enviar uma flecha, caso sim, o servidor calcula o tempo que o efeito irá demorar até atingir o target, após esse tempo passar, ele simplesmente causa o dano. O movimento de uma criatura, é definido por uma task, uma espécie de evento. Se você quer mover uma criatura, seguindo todos os steps, você deve criar uma função nas sources, que irá mudar a atual task da criatura, e após isso fazer o binding. Se você quiser fazer em LUA, você deve usar pathfinding, da maneira que o Mock disse. Atenciosamente, Socket. Share this post Link to post Share on other sites
Ramza 11 #12 Posted September 25, 2010 Certo, vou dar uma pequena explicação. A função isSightClear, existe sim, você pode chama-la em seus scripts, ela não irá mover uma determinada criatura, irá apenas checar se uma criatura pode mover de fromPos à toPos. Munição, no caso que você disee, simplesmente verifica se pode, simbologicamente, enviar uma flecha, caso sim, o servidor calcula o tempo que o efeito irá demorar até atingir o target, após esse tempo passar, ele simplesmente causa o dano. O movimento de uma criatura, é definido por uma task, uma espécie de evento. Se você quer mover uma criatura, seguindo todos os steps, você deve criar uma função nas sources, que irá mudar a atual task da criatura, e após isso fazer o binding. Se você quiser fazer em LUA, você deve usar pathfinding, da maneira que o Mock disse. Atenciosamente, Socket. Hm, muito obrigado Socket. É que eu precisava checar as posições em que uma determinada 'passaria' até chegar no alvo para saber se existe um determinado item ou tile nas posições, pra isso eu precisaria criar uma função que faria o pathfinding, isso que tá fud*ndo tudo dashudahudsa E o pior: Eu precisaria pra segunda feira entregar um script de pathfinding na aula de inteligencia computacional, lascou-se DHUASDHUADSHUASD Alguém sabe se já tem o algoritmo de pathfinding do tibia em algum lugar? Se for aquilo que tá no map.cpp da função isSightClear ferrou, pq não entendi nada dahsudashudas Share this post Link to post Share on other sites
Socket 0 #13 Posted September 25, 2010 (edited) Hm, muito obrigado Socket.É que eu precisava checar as posições em que uma determinada 'passaria' até chegar no alvo para saber se existe um determinado item ou tile nas posições, pra isso eu precisaria criar uma função que faria o pathfinding, isso que tá fud*ndo tudo dashudahudsa E o pior: Eu precisaria pra segunda feira entregar um script de pathfinding na aula de inteligencia computacional, lascou-se DHUASDHUADSHUASD Alguém sabe se já tem o algoritmo de pathfinding do tibia em algum lugar? Se for aquilo que tá no map.cpp da função isSightClear ferrou, pq não entendi nada dahsudashudas Tem sim, um bem simples que o Colex fez: http://forums.otserv.com.br/showthread.php?121021-Pathfinder-Recursividade Atenciosamente, Socket. Edited January 23, 2011 by Mickfern Share this post Link to post Share on other sites
Notorious 1 #14 Posted September 25, 2010 É, eu fiz uma vez um traceRoute(frompos, topos), bem legal, só que ele só traça a rota, sem checar se é andável ou tá bloqueado ... Se você quiser fala comigo no MSN, quem sabe agente nao dê uma melhorada na função e poste Share this post Link to post Share on other sites