Tony Araujo 282 Postado Março 13, 2013 Share Postado Março 13, 2013 (editado) Fala ai galera, me vieram muitos pedidos de como mover algum "player, monster ou NPC", em uma certa ROTA prédefinida. Bom, eu criei aqui uma funçao, bem simples de usala. Basta voce criar uma variavel com as direços que voce quer que o UID se mova bom, aqui vai um exemplo -> passos = {NORTH, NORTH, SOUTH, WEST} doMove(cid, passos) O Cid (Player) , iria andar 2x para o norte, 1x para o sul e 1x para o oeste Bom, espero que façam bom uso. -- OrochiElf -- function doMove(uid, dirs) for _, dir in ipairs(dirs) do if isCreature(uid) then addEvent(doMoveCreature, (dirs - 1) * 1000, uid, dir) end return true end end Editado Março 14, 2013 por OrochiElf Link para o comentário Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Março 14, 2013 Share Postado Março 14, 2013 Tu não testou né? Ta subtraindo numero de table dirs - 1 e mesmo que fosse #dirs - 1, ainda ficaria errado, porque executaria todos os steps ao mesmo tempo alem disso tem outro problema, a função doMoveCreature não respeita as flags, ela passa o player por cima de coisas que nao poderia passar, isso pode causar varios bug abuses Link para o comentário Compartilhar em outros sites More sharing options...
Slicer 1070 Postado Março 14, 2013 Share Postado Março 14, 2013 ja eh no minimo o 2* script q ele n testa antes de postar... http://www.xtibia.com/forum/topic/209695-magnifying-glass-lupa/ achu q alguem ae da equipe devia dar uma olhada nisso... u,U Link para o comentário Compartilhar em outros sites More sharing options...
Tony Araujo 282 Postado Março 14, 2013 Autor Share Postado Março 14, 2013 Bom Dalvorns, eu aprendi esse negocio de subtrair com um script que o slicer fez. Ele fez essa formula ai , e executou exatamente como criado. Ele faz o proximo step apos ele andar. Não sei como explicar, mais assim funcionou '-' Link para o comentário Compartilhar em outros sites More sharing options...
Slicer 1070 Postado Março 14, 2013 Share Postado Março 14, 2013 vc testou? pq fazendo dirs-1 vaii dar.. attempt to perform arithmetic on local 'dirs' o correto seria.. addEvent(doMoveCreature, _ * 1000, uid, dir) e ms assim como o dalv flo, com essa sua funçao a criatura vai passar por cima de qlqr coisa... eu fiz essa funçao esses dias pra brincar... ela funciona tpw o Order... mas clr q ela ta muito longe de estar util.. eh soh pra brincar ms.. local function move(cid, finalpos) if not isCreature(cid) then return true end if isPosEqual(getThingPos(cid), finalpos) then return true end if getDistanceBetween(getThingPos(cid), finalpos) <= 1 and not canWalkOnPos(finalpos, false, false, true, true, true) then return true end local dir = getDirectionTo(getThingPos(cid), finalpos) local newPos = getPosByDir(getThingPos(cid), dir) if not canWalkOnPos(newPos, false, false, true, true, true) then newPos = getClosestFreeTile(cid, newPos) end if newPos then doTeleportThing(cid, newPos, true) end addEvent(move, 700, cid, finalpos) end function onUse(cid, item, frompos, item2, topos) move(getCreatureSummons(cid)[1], topos) return true end Link para o comentário Compartilhar em outros sites More sharing options...
Skymagnum 234 Postado Março 14, 2013 Share Postado Março 14, 2013 (editado) function doEmpurrePlayer(cid, player, vez, ultimapos) tab = {100, 150, 200, 350, 400, 550, 600, 750, 900, 1000} if not isCreature(player) then return true end if vez == #tab then return true end if isWalkable(getPositionByDirection(getThingPos(player), getCreatureLookDir(cid), 1)) then doTeleportThing(player, getPosByDir(ultimapos, getCreatureLookDirection(cid), 1)) doSendMagicEffect(getThingPos(player), 34) ultimapos = getThingPos(player) addEvent(executeEmpurro, tab[vez], cid, player, vez + 1, ultimapos) end end tab é a velocidade vai aumentando precisa ter a função isWalkable pra funcionar só procurar no google. Editado Março 14, 2013 por Skymagnum Link para o comentário Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Março 14, 2013 Share Postado Março 14, 2013 function doEmpurrePlayer(cid, player, vez, ultimapos) if not isCreature(player) then return true end if vez == #tab then return true end tab = {100, 150, 200, 350, 400, 550, 600, 750, 900, 1000} if isWalkable(getPositionByDirection(getThingPos(player), getCreatureLookDir(cid), 1)) then doTeleportThing(player, getPosByDir(ultimapos, getCreatureLookDirection(cid), 1)) doSendMagicEffect(getThingPos(player), 34) ultimapos = getThingPos(player) addEvent(executeEmpurro, tab[vez], cid, player, vez + 1, ultimapos) end end tab é a velocidade vai aumentando precisa ter a função isWalkable pra funcionar só procurar no google. Testou isso? Você usou a variável tab numa comparação antes de declarar ela... não sei em otserv, mas lua pura isso não funciona. Link para o comentário Compartilhar em outros sites More sharing options...
caotic 393 Postado Março 14, 2013 Share Postado Março 14, 2013 function doEmpurrePlayer(cid, player, vez, ultimapos) if not isCreature(player) then return true end if vez == #tab then return true end tab = {100, 150, 200, 350, 400, 550, 600, 750, 900, 1000} if isWalkable(getPositionByDirection(getThingPos(player), getCreatureLookDir(cid), 1)) then doTeleportThing(player, getPosByDir(ultimapos, getCreatureLookDirection(cid), 1)) doSendMagicEffect(getThingPos(player), 34) ultimapos = getThingPos(player) addEvent(executeEmpurro, tab[vez], cid, player, vez + 1, ultimapos) end end tab é a velocidade vai aumentando precisa ter a função isWalkable pra funcionar só procurar no google. Testou isso? Você usou a variável tab numa comparação antes de declarar ela... não sei em otserv, mas lua pura isso não funciona. Nossa eu também percebi que erro feio. Eheuaheuaheuh' Link para o comentário Compartilhar em outros sites More sharing options...
Skymagnum 234 Postado Março 14, 2013 Share Postado Março 14, 2013 (editado) EUUHEUHEUHE, Coloquei na linha errada, arrumei lá já. -- Esse não é por tabela, empurra pra direção que o player está olhando. Editado Março 14, 2013 por Skymagnum Link para o comentário Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Março 14, 2013 Share Postado Março 14, 2013 nossa vei, nao usa tabela assim pra velocidade nao, faz um formula que é bem melhor, isso ai vai ficar muito limitado Link para o comentário Compartilhar em outros sites More sharing options...
Skymagnum 234 Postado Março 14, 2013 Share Postado Março 14, 2013 É tinha pensado nisso, mas sou péssimo com formulas então deixei assim mesmo. Link para o comentário Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Março 15, 2013 Share Postado Março 15, 2013 É tinha pensado nisso, mas sou péssimo com formulas então deixei assim mesmo. Eu particularmente não gostei do que a tua função faz, achei um pouco non-sense se me permite dizer, mas usando apenas a ideia, eu faria assim: function doPushCreature(cid, target, times, limitPush) if not (isCreature(cid) and isCreature(target)) then return false end local toPos = getCreatureLookPosition(target) if isWalkable(toPos) then doTeleportThing(target, toPos) doSendMagicEffect(toPos, 34) if limitPush > times then addEvent(doPushCreature, times * 50, cid, target, times + 1, limitPush) end end return true end Link para o comentário Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Março 15, 2013 Share Postado Março 15, 2013 Obviamente a função nem funciona. Fechado. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados