-- User-Editable Variables
local PcName = 'Dougt' -- Seu nome de PC
local NameHunt = 'Alminha Venore' -- Nome da caçada
-- Dynamic filename based on PC name and hunt name
local CoordenadasPath = 'C:\\Users\\' .. PcName .. '\\Documents\\ZeroBot\\
Scripts\\' .. NameHunt .. '.txt'
-- Função para mover para uma posição
function moverParaPosicao(posicao)
if posicao then
[Link](posicao.x, posicao.y, posicao.z)
-- Adicione qualquer lógica adicional após alcançar a posição, se
necessário
else
print("Erro: Tentativa de acessar uma posição nula.")
end
end
-- Função para ler posições de um arquivo com suporte a UTF-8
local function readPositionsFromFile(filename)
local file = [Link](filename, "r", "utf-8")
if not file then
error("Não foi possível abrir o arquivo: " .. filename)
end
local positions = {}
for line in file:lines() do
local x, y, z = line:match("{%s*x%s*=%s*(%d+),%s*y%s*=%s*(%d+),%s*z%s*=
%s*(%d+)%s*}")
if x and y and z then
[Link](positions, {x = tonumber(x), y = tonumber(y), z =
tonumber(z)})
end
end
file:close()
return positions
end
-- Loop principal
local sequenciaDePosicoes = readPositionsFromFile(CoordenadasPath)
-- Função para verificar a contagem de monstros dentro de uma área
function GetMonstersCountInsideArea(area)
-- Implemente a lógica para contar monstros dentro da área
-- Substitua essa função com a lógica apropriada de contagem de monstros
return 3 -- Retorno de exemplo, substitua com a contagem real
end
-- Loop para percorrer as posições
local index = 1
local positionMargin = 2 -- Defina a margem de posição necessária para considerar
que o jogador atingiu a posição
while true do
-- Verifica se o jogador atingiu a posição atual com uma margem de erro
local pos = Creature([Link]()):getPosition()
local roundedPos = {[Link](pos.x + 0.5), [Link](pos.y + 0.5),
[Link](pos.z + 0.5)}
for _, targetPos in ipairs(sequenciaDePosicoes) do
local withinMarginX = [Link](roundedPos[1] - targetPos.x) <=
positionMargin
local withinMarginY = [Link](roundedPos[2] - targetPos.y) <=
positionMargin
if withinMarginX and withinMarginY and roundedPos[3] == targetPos.z then
[Link]("Posição alcançada: " .. index)
index = (index % #sequenciaDePosicoes) + 1 -- Move para a próxima
posição e volta para a primeira posição se estiver no final
break -- Interrompe o loop assim que a posição for alcançada
end
end
-- Move para a posição atual
moverParaPosicao(sequenciaDePosicoes[index])
-- Espera por 10 segundos
wait(200)
-- Verifica a contagem de monstros dentro da área
local monsterCheckArea = {x = sequenciaDePosicoes[index].x, y =
sequenciaDePosicoes[index].y, z = sequenciaDePosicoes[index].z}
local monsterCountThreshold = 3 -- Defina o limite de contagem de monstros
local WaitTimeInSeconds = 1 -- Defina o tempo de espera em segundos
local monsterCount = GetMonstersCountInsideArea(monsterCheckArea)
if monsterCount < monsterCountThreshold then
[Link]("Contagem de monstros é menor que " ..
monsterCountThreshold .. ". Movendo para a próxima área.")
wait(WaitTimeInSeconds * 1000)
[Link](sequenciaDePosicoes[index].x, sequenciaDePosicoes[index].y,
sequenciaDePosicoes[index].z)
index = (index % #sequenciaDePosicoes) + 1 -- Move para a próxima posição e
volta para a primeira posição se estiver no final
else
[Link]("Contagem de monstros é maior ou igual a " ..
monsterCountThreshold .. ". Aguardando...")
wait(WaitTimeInSeconds * 1000)
end
-- Verifica se o jogador atingiu a posição atual com uma margem de erro
local pos = Creature([Link]()):getPosition()
local roundedPos = {[Link](pos.x + 0.5), [Link](pos.y + 0.5),
[Link](pos.z + 0.5)}
for _, targetPos in ipairs(sequenciaDePosicoes) do
local withinMarginX = [Link](roundedPos[1] - targetPos.x) <=
positionMargin
local withinMarginY = [Link](roundedPos[2] - targetPos.y) <=
positionMargin
if withinMarginX and withinMarginY and roundedPos[3] == targetPos.z then
[Link]("Posição: " .. index)
break -- Interrompe o loop assim que a posição for alcançada
end
end
-- Seção de funções de verificação de monstros (copie-as do seu código
original)
wait(3000) -- Aguarda por 3 segundos antes de executar novamente
end