Postado Janeiro 29, 2019 6 anos Olá galera do TibiaKing, venho aqui pedir a vocês que me ajudem em um scripting de verificar a posição de um Player, vou resumir abaixo. Eu quero que o script cheque se tem um player ao redor do Player que executou x ação (qualquer ação), exemplo: If playerpos.x=x-1 then executar ação end Ele deveria checar se tem 1 Player na posx -1, mas não sei muito bem como funciona os checkin de Position
Postado Janeiro 29, 2019 6 anos @Joaovettor function checkPlayersAround(uid) local players = {} -- Deixe vazio local pos = getCreaturePosition(uid) local positions = { [1] = {x = pos.x -1, y = pos.y, z = pos.z}, [2] = {x = pos.x +1, y = pos.y, z = pos.z}, [3] = {x = pos.x, y = pos.y +1, z = pos.z}, [4] = {x = pos.x, y = pos.y -1, z = pos.z} } for _, var in pairs(positions) do for i = 0, 255 do var.stackpos = i tile = getTileThingByPos(var) if tile.uid > 0 and isPlayer(tile.uid) then table.insert(players, tile.uid) end end end if not players then return false end return players end
Postado Janeiro 29, 2019 6 anos 33 minutos atrás, Storm disse: @Joaovettor function checkPlayersAround(uid) local players = {} -- Deixe vazio local pos = getCreaturePosition(uid) local positions = { [1] = {x = pos.x -1, y = pos.y, z = pos.z}, [2] = {x = pos.x +1, y = pos.y, z = pos.z}, [3] = {x = pos.x, y = pos.y +1, z = pos.z}, [4] = {x = pos.x, y = pos.y -1, z = pos.z} } for _, var in pairs(positions) do for i = 0, 255 do var.stackpos = i tile = getTileThingByPos(var) if tile.uid > 0 and isPlayer(tile.uid) then table.insert(players, tile.uid) end end end if not players then return false end return players end Script show! Mas em minha opinião, caso esteja aberto para sugestões claro: uma boa prática seria invés de você colocar para retornar um booleano falso (please, sem one-line) seria você colocar para retornar uma tabela vazia - manter um padrão! Se o script retorna uma tabela, então retorna uma tabela vazia, caso não tenha nenhum valor. Discord: vankk #7765 Precisando de ajuda? Entre em contato comigo via Discord. Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.
Postado Janeiro 29, 2019 6 anos Autor 2 horas atrás, Storm disse: @Joaovettor function checkPlayersAround(uid) local players = {} -- Deixe vazio local pos = getCreaturePosition(uid) local positions = { [1] = {x = pos.x -1, y = pos.y, z = pos.z}, [2] = {x = pos.x +1, y = pos.y, z = pos.z}, [3] = {x = pos.x, y = pos.y +1, z = pos.z}, [4] = {x = pos.x, y = pos.y -1, z = pos.z} } for _, var in pairs(positions) do for i = 0, 255 do var.stackpos = i tile = getTileThingByPos(var) if tile.uid > 0 and isPlayer(tile.uid) then table.insert(players, tile.uid) end end end if not players then return false end return players end Opa mano, obrigado pela ajuda, mas deu esse seguinte erro V [29/1/2019 13:37:54] [Error - Action Interface] [29/1/2019 13:37:54] data/actions/scripts/testeitem.lua:onUse [29/1/2019 13:37:54] Description: [29/1/2019 13:37:54] data/actions/scripts/testeitem.lua:5: attempt to index a boolean value [29/1/2019 13:37:54] stack traceback: [29/1/2019 13:37:54] data/actions/scripts/testeitem.lua:5: in function 'checkPlayersAround' [29/1/2019 13:37:54] data/actions/scripts/testeitem.lua:27: in function <data/actions/scripts/testeitem.lua:26> Eu deixei o script dessa maneira V function checkPlayersAround(uid) local players = {} -- Deixe vazio local pos = getCreaturePosition(uid) local positions = { [1] = {x = pos.x -1, y = pos.y, z = pos.z}, [2] = {x = pos.x +1, y = pos.y, z = pos.z}, [3] = {x = pos.x, y = pos.y +1, z = pos.z}, [4] = {x = pos.x, y = pos.y -1, z = pos.z} } for _, var in pairs(positions) do for i = 0, 255 do var.stackpos = i tile = getTileThingByPos(var) if tile.uid > 0 and isPlayer(tile.uid) then table.insert(players, tile.uid) end end end if not players then return false end return players end function onUse(cid, item, frompos, item2, topos) if checkPlayersAround(uid) then doSendMagicEffect(getCreaturePos(cid), 17) end return true end
Postado Janeiro 29, 2019 6 anos @vankk Obrigado pela dica!! @Joaovettor function checkPlayersAround(uid) local players = {} -- Deixe vazio local pos = getCreaturePosition(uid) local positions = { [1] = {x = pos.x -1, y = pos.y, z = pos.z}, [2] = {x = pos.x +1, y = pos.y, z = pos.z}, [3] = {x = pos.x, y = pos.y +1, z = pos.z}, [4] = {x = pos.x, y = pos.y -1, z = pos.z} } for _, var in pairs(positions) do for i = 0, 255 do var.stackpos = i tile = getTileThingByPos(var) if tile.uid > 0 and isPlayer(tile.uid) then table.insert(players, tile.uid) end end end return players end function onUse(cid, item, frompos, item2, topos) if checkPlayersAround(cid) then doSendMagicEffect(getCreaturePosition(cid), 17) end return true end
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.