Lua pra Iniciantes: Como Começar a Programar Scripts de OTServer
Blog Lua pra Iniciantes: Como Começar a Programar Scripts de OTServer
Programação

Lua pra Iniciantes: Como Começar a Programar Scripts de OTServer

07/08/2026

Lua é a linguagem por trás de praticamente tudo que acontece dentro de um OTServer: magias, NPCs, quests, eventos, sistemas custom. A boa notícia é que ela foi desenhada pra ser simples de ler e aprender — você não precisa ser programador profissional pra começar a mexer nela.

Por que Lua e não outra linguagem

Engines como o TFS e o Canary são escritas em C++, mas expõem uma API em Lua pra quem quer customizar o jogo sem recompilar a engine inteira. Isso significa que scripts em Lua são carregados em tempo de execução — você edita um arquivo, reinicia (ou recarrega) o servidor, e a mudança já está valendo.

O básico da linguagem

Variáveis

local nome = "Knight"
local level = 50
local ativo = true

local declara uma variável visível só dentro daquele escopo — é o padrão que você vai usar na grande maioria dos scripts.

Condicionais

if level >= 50 then
    print("Jogador tem level suficiente")
else
    print("Level insuficiente")
end

Loops

for i = 1, 5 do
    print("Repetição número " .. i)
end

Funções

local function saudacao(nome)
    return "Olá, " .. nome .. "!"
end

print(saudacao("Knight"))

Seu primeiro script de verdade: um talkaction

Talkactions são comandos de chat, tipo !level. Um exemplo simples que mostra o level do jogador que digitou o comando:

local talk = TalkAction("!level")

function talk.onSay(player, words, param)
    player:sendTextMessage(MESSAGE_INFO_DESCR, "Seu level atual é: " .. player:getLevel())
    return false
end

talk:register()

Esse script já usa dois conceitos centrais da API: o objeto player, que representa quem está jogando, e os métodos dele (como getLevel()) que retornam informações do personagem.

Onde encontrar a documentação da API

A API de cada engine (TFS, Canary) tem sua própria lista de funções disponíveis pro objeto player, creature, item e outros. Ela geralmente fica documentada no wiki do repositório oficial da engine no GitHub, e vale muito a pena deixar essa página sempre aberta enquanto você programa — é mais rápido consultar do que tentar adivinhar o nome de um método.

Dica: comece sempre testando scripts pequenos e isolados num servidor de testes. Entender o que cada linha faz é mais importante do que decorar sintaxe.

Com esse básico, o próximo passo natural é tentar montar um NPC funcional, que já mistura praticamente todos esses conceitos — variáveis, condicionais e funções — num script só.