Scripting
Breve Explicação
O waypoint do tipo Script
permite que você escreva suas próprias ações personalizadas.
Você pode usar qualquer função disponível na seção [Scripting Lua].
Após cada a ção, é recomendado adicionar algum atraso, com a função wait(delay)
.
Para demonstrar alguns dos casos de uso mais comuns, aqui vão alguns trechos de código:
Usar um item
local itemId = 3725
Game.useItem(itemId)
wait(1000)
Falar com NPC
Game.talk('hi', Enums.TalkTypes.TALKTYPE_PRIVATE_PN)
Usar magia
Game.talk('exani hur "up"', Enums.TalkTypes.TALKTYPE_SAY)
Mudar de direção
Útil para exani hur "up/down" e alguns outros casos.
local direction = Enums.Directions.NORTH
Game.turn(direction)
Uma Direção pode ser uma das seguintes:
Enums.Directions.NORTH
Enums.Directions.SOUTH
Enums.Directions.EAST
Enums.Directions.WEST
Usar funções definidas em um arquivo lua
Isso pode ser útil para ativar scripts, por exemplo, scripts para comprar suprimentos ou vender itens.
Você pode encontrar scripts como esses no nosso Discord, na seção scripts-gerais
.
dofile("fileName.lua")
someFunction()
Usar objeto no chão
Útil para abrir portas, clicar em escadas, bueiros, vagonetes, etc.
Você já pode fazer isso com o tipo de waypoint Use
, mas você pode ser realmente criativo com este trecho e um pouco de programação.
local pos = Map.getCameraPosition() -- sua posição atual
Map.useItemOnGround(pos.x, pos.y, pos.z)
wait(1000)
Isso usará o item na sua posição atual.
Para usar à esquerda: pos.x-1
Para usar à direita: pos.x+1
Para usar ao norte: pos.y-1
Para usar ao sul: pos.y+1
Note que se um item ou criatura estiver em pé nesta posição, esse trecho sozinho pode não funcionar.
Atualização 1.7.5.5
Waypoints do tipo script suportam Game events e Timers. Depois de você usar essas funcionalidades, você deve destrui-los ou desregistra-los para evitar que o script continue rodando indefinidamente.
Se você mantiver o timer ou Game event em execução, o script continuará rodando indefinidamente.
Exemplo:
function sellCycle()
gameTalk("hi", 1)
wait(500)
gameTalk("trade", 12)
wait(500)
Npc.sell(23721, 1, true)
wait(500)
end
function messageCallback(messageData)
if not messageData then return end
local message = messageData.text
print("message " ..message)
if message:lower():find("you have no items in your loot pouch.") then
destroyTimer("sell-loot") -- destruindo o timer
Game.unregisterEvent(Game.Events.TEXT_MESSAGE, messageCallback) -- desregistrando o evento
end
end
Game.registerEvent(Game.Events.TEXT_MESSAGE, messageCallback)
Timer("sell-loot", function()
sellCycle()
end, 1000)