Pular para o conteúdo principal

Scripting

Um waypoint Script executa Lua quando o CaveBot chega até ele. Prefira um tipo de waypoint dedicado quando existir; use um script para ações que precisem de condições personalizadas ou de uma sequência de chamadas da API.

Todas as funções públicas de Lua Scripting estão disponíveis. Os módulos do core já estão carregados.

Use wait(milliseconds) somente entre ações que precisam de sequenciamento. Ele bloqueia o script do waypoint atual e não deve ser usado em um loop permanente.

Ações comuns

Usar um item

local itemId = 3725
Game.useItem(itemId)

Falar com NPC

Game.talk("hi", Enums.TalkTypes.TALKTYPE_PRIVATE_PN)
wait(500)
Game.talk("trade", Enums.TalkTypes.TALKTYPE_PRIVATE_PN)

O NPC deve estar próximo e o tipo de fala selecionado deve ser suportado pelo client/servidor de destino.

Usar uma magia

Game.talk('exani hur "up"', Enums.TalkTypes.TALKTYPE_SAY)

Mudar de direção

Game.turn(Enums.Directions.NORTH)
Enums.Directions.NORTH
Enums.Directions.EAST
Enums.Directions.SOUTH
Enums.Directions.WEST

Carregar um arquivo auxiliar

local ok, err = dofile("helpers_lib/supplies.lua")
if not ok then
print(err)
return
end

someFunction()

Os caminhos relativos passados para dofile começam em Documents/ZeroBot/Scripts.

Usar o item no topo de um tile

Prefira o waypoint Use em uma rota fixa. Para uma posição calculada:

local pos = Map.getCameraPosition()
local target = {
x = pos.x + 1,
y = pos.y,
z = pos.z,
}

local used = Game.useItemFromGround(target.x, target.y, target.z)
if not used then
print("Não foi possível usar o item no tile de destino")
end

Os deslocamentos de coordenadas são:

  • oeste: x - 1
  • leste: x + 1
  • norte: y - 1
  • sul: y + 1

A ação usa o item escolhido pela pilha do tile no client. Uma criatura ou outro item no tile pode alterar qual item será usado.

Eventos e timers

Waypoints Script suportam eventos de Game e Timer. O CaveBot mantém o script do waypoint ativo enquanto ainda existirem callbacks ou timers registrados. Destrua todos os timers e cancele o registro usando a mesma referência do callback quando o trabalho terminar.

local function sellCycle()
Game.talk("hi", Enums.TalkTypes.TALKTYPE_PRIVATE_PN)
wait(500)
Game.talk("trade", Enums.TalkTypes.TALKTYPE_PRIVATE_PN)
wait(500)
Npc.sell(23721, 1, true)
end

local function messageCallback(messageData)
if not messageData or not messageData.text then
return
end

if messageData.text:lower():find(
"you have no items in your loot pouch.",
1,
true
) then
destroyTimer("sell-loot")
Game.unregisterEvent(Game.Events.TEXT_MESSAGE, messageCallback)
end
end

Game.registerEvent(Game.Events.TEXT_MESSAGE, messageCallback)
Timer("sell-loot", sellCycle, 1000)

Se o script precisar ser abortado externamente, use CaveBot.stopCurrentScript().