Postado Março 9, 2018 7 anos Diga em poucas palavras a base utilizada (Nome do servidor ou nome do website). YFS 0.4 Base: Peguei um script aqui no tibiaking, quando dou o comando ele da goto em um player aleatorio do server (online) Qual erro está surgindo/O que você procura? queria bloquear o comando pra os players que estao treinando, (eu nao dar goto neles) Você tem o código disponível? Se tiver publique-o aqui: Citar function onSay(cid, words, param, channel) local function doTeleportToOnlinePlayers(cid) local ons = getPlayersOnline() if #ons < 2 then return doPlayerSendCancel(cid, "Don't have any player online, beyond you.") end if(player_rand == cid) then return addEvent(doTeleportToOnlinePlayers, 1, cid) end local player_rand = ons[math.random(#ons)] local pos = getClosestFreeTile(cid, getThingPos(player_rand), true, false) if(not pos or isInArray({pos.x, pos.y}, 0)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cannot perform action.") return true end local tmp = getThingPos(cid) if(doTeleportThing(cid, pos, true) and not isPlayerGhost(cid)) then doSendMagicEffect(tmp, CONST_ME_POFF) doSendMagicEffect(pos, CONST_ME_TELEPORT) end return true end return doTeleportToOnlinePlayers(cid) end Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
Postado Março 10, 2018 7 anos Cara... não sei se é por conta que estou mexendo com Lua há pouco tempo, mas não tenho ideia alguma de como fazer essa verificação no meu conhecimento (posso dá uma estudada para te informar melhor), se for em APENAS uma área o local de trainer, o que pode ser feito é o mesmo mecanismo que fazem em zona de eventos/pvps, o script dá um check se o player está em uma determinada área, de x até z, e caso ele esteja, o mesmo não teleporta. Então fica a ideia aí para o pessoal mais experiente, vou tentar bolar aqui, pode ser que demore ou não, :D. Feliz daquele que ensina o que sabe, e aprende o que ensina.
Postado Março 10, 2018 7 anos Autor sim, pode ser area tambem, ja tentei mexer de varias formas e não consegui, tentei botar por storage, tambem não consegui, inclusive tentei botar por area tambem, mas nao funcionou
Postado Março 10, 2018 7 anos @poko360 cara, tentei não fazer dessa forma, na qual não fizesse uma busca bruta, porém, só consegui dessa forma, espero que o ajude-o temporariamente e que alguém se manisfeste, caso resolva isso gastando menos memória para processamento... function onSay(cid, words, param, channel) function getAllPlayersInArea(fromPosition, toPosition) local players = {} for _, pid in ipairs(getPlayersOnline()) do local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z} local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z} local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z) for index = 0, math.abs(toPosition.z - fromPosition.z) do f.z = min + index t.z = min + index if isInRange(getPlayerPosition(pid), f, t) then table.insert(players, pid) end end end return players end local function doTeleportToOnlinePlayers(cid) local trainerArea = {{x = 1022, y = 1026, z = 7}, {x = 1025, y = 1029, z = 7}} --- {canto superior direito}, {canto inferior direito} - pegando a area toda local playersTrainer = getAllPlayersInArea(trainerArea[1], trainerArea[2]) local ons = getPlayersOnline() if #ons < 2 then return doPlayerSendCancel(cid, "Don't have any player online, beyond you.") end for index, jogador in ipairs(ons) do for index2, jogador2 in ipairs(playersTrainer) do if (ons[index] == playersTrainer[index2]) then table.remove(ons, index) end end end local player_rand = ons[math.random(#ons)] if ((player_rand == cid)) then doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT) return true end local pos = getClosestFreeTile(cid, getThingPos(player_rand), true, false) if(not pos or isInArray({pos.x, pos.y}, 0)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cannot perform action.") return true end local tmp = getThingPos(cid) if(doTeleportThing(cid, pos, true) and (not isPlayerGhost(cid))) then doSendMagicEffect(tmp, CONST_ME_POFF) doSendMagicEffect(pos, CONST_ME_TELEPORT) end return true end doTeleportToOnlinePlayers(cid) end Teste aí e manda um retorno, :D. Na variável trainerArea é onde você vai colocar o canto superior direito e inferior direito da localização do trainer. Editado Março 10, 2018 7 anos por lordzetros (veja o histórico de edições) Feliz daquele que ensina o que sabe, e aprende o que ensina.
Postado Março 10, 2018 7 anos Autor @lordzetros funcionou perfeitamente 90% faltou uma coisa kkk, ta aparecendo meu char falando o comando do lado do player ai o player vai saber q fui nele em ghost tem como arrumar isso? Editado Março 10, 2018 7 anos por poko360 (veja o histórico de edições)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.