Os OT Servers são servidores alternativos de Tibia, um jogo online de RPG. Eles permitem que os jogadores criem e modifiquem o conteúdo do jogo, como mapas, monstros, itens e magias. Uma das formas de fazer isso é usando actions.
Actions são scripts que definem o que acontece quando um jogador interage com um determinado objeto no jogo. Por exemplo, uma action pode abrir uma porta secreta, teleportar o jogador para outro lugar, dar uma recompensa ou iniciar uma missão.
Neste post, vamos aprender como usar actions nos OT Servers e quais são os benefícios de usá-las.
O que são actions?
Actions são arquivos de texto que contêm código em Lua, uma linguagem de programação simples e poderosa. Eles são salvos na pasta data/actions do seu OT Server e são carregados automaticamente quando o servidor é iniciado.
Cada action tem um atributo chamado actionid, que é um número único que identifica a action. Esse número deve ser colocado no objeto que vai acionar a action, usando o editor de mapas ou o comando /item.
Por exemplo, se você quer criar uma action que abre uma porta secreta quando o jogador usa uma chave especial, você precisa:
- Criar um arquivo chamado secret_door.lua na pasta data/actions
- Escrever o código da action no arquivo
- Dar um actionid para a action (por exemplo, 1000)
- Colocar esse actionid na chave especial e na porta secreta
Como escrever actions?
Para escrever actions, você precisa conhecer alguns conceitos básicos de Lua e da API do OT Server. Lua é uma linguagem simples e intuitiva, que usa variáveis, funções, condicionais e loops para controlar o fluxo do programa.
A API do OT Server é um conjunto de funções e objetos que permitem interagir com o jogo. Por exemplo, você pode usar a função doTeleportThing para teleportar um jogador ou um monstro para outro lugar.
Uma action típica tem a seguinte estrutura:
function onUse(player, item, fromPosition, target, toPosition)
-- código da action
return true
end
A função onUse é chamada sempre que um jogador usa um item com a actionid correspondente. Ela recebe cinco parâmetros:
- player: o objeto que representa o jogador que usou o item
- item: o objeto que representa o item usado
- fromPosition: a posição do item usado
- target: o objeto que representa o alvo do item (se houver)
- toPosition: a posição do alvo do item (se houver)
Dentro da função onUse você pode escrever o código da sua action usando as variáveis e as funções da API. Você deve retornar true ao final da função para indicar que a action foi executada com sucesso.
Exemplo de action
Vamos ver um exemplo de uma action simples que teleporta o jogador para outro lugar quando ele usa uma runa especial.
Primeiro vamos criar um arquivo chamado teleport_rune.lua na pasta data/actions e dar um actionid para ele (por exemplo 2000).
Depois vamos escrever o código da action no arquivo:
function onUse(player, item, fromPosition, target, toPosition)
local destination = Position(1000, 1000 ,7) -- define a posição de destino
player:sendTextMessage(MESSAGE_INFO_DESCR,"You have been teleported.") -- envia uma mensagem para o jogador
player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) -- cria um efeito visual na posição atual do jogador
player:teleportTo(destination) -- teleporta o jogador para a posição de destino
destination:sendMagicEffect(CONST_ME_TELEPORT) -- cria um efeito visual na posição de destino
end
Para registrar o arquivo teleport_rune.lua no actions.xml, você precisa seguir os seguintes passos:
- Salve o arquivo teleport_rune.lua na pasta data/actions do seu OT Server
- Abra o arquivo actions.xml na mesma pasta com um editor de texto
- Adicione uma linha com a tag <action> dentro da tag <actions>
- Dentro da tag <action>, defina os atributos file, event e id
- O atributo file deve ter o valor “actions/teleport_rune.lua”
- O atributo event deve ter o valor “script”
- O atributo id deve ter o valor do actionid que você quer usar para a sua runa de teleporte (por exemplo, 2000)
- Salve e feche o arquivo actions.xml
A linha que você deve adicionar no actions.xml deve ficar assim:
<action file="actions/teleport_rune.lua" event="script" id="2000" />
Isso vai fazer com que o seu OT Server reconheça a sua action de teleporte quando você usar uma runa com o actionid 3001.
Um breve tutorial, com outro exemplo de action (revscript)
Neste tutorial, vamos aprender como criar e usar actions nos OT Servers de forma prática. Vamos usar um OT Server baseado no Tibia 10.98, mas você pode adaptar o tutorial para outras versões.
Para seguir este tutorial, você vai precisar de:
- Um OT Server instalado e configurado
- Um editor de mapas (por exemplo, Remere’s Map Editor)
- Um editor de texto (por exemplo, Notepad++)
- Um cliente de Tibia compatível com o seu OT Server
Vamos começar!
Passo 1: Criar uma action
O primeiro passo é criar uma action que vamos usar no jogo. Neste exemplo, vamos criar uma action que faz um NPC falar com o jogador quando ele usa um livro.
Para isso, vamos criar um arquivo chamado npc_book.lua na pasta data/actions do nosso OT Server. Dentro do arquivo, vamos escrever o seguinte código:
function onUse(player, item, fromPosition, target, toPosition)
local npcName = "Rashid" -- define o nome do NPC
local npcPosition = Position(32369, 32241 ,7) -- define a posição do NPC
local npc = Npc(npcName) -- cria um objeto que representa o NPC
if npc and npc:getPosition() == npcPosition then -- verifica se o NPC existe e está na posição correta
npc:say("Hello adventurer. Do you want to trade with me?", TALKTYPE_SAY) -- faz o NPC falar com o jogador
else
player:sendTextMessage(MESSAGE_EVENT_ADVANCE,"There is no one here.") -- envia uma mensagem para o jogador se não encontrar o NPC
end
return true
end
Esse código define uma função onUse que é chamada quando o jogador usa um item com a actionid correspondente. Dentro da função, nós definimos o nome e a posição do NPC que queremos falar, criamos um objeto que representa esse NPC e verificamos se ele existe e está na posição correta. Se sim, fazemos ele falar com o jogador. Se não, enviamos uma mensagem para o jogador dizendo que não há ninguém ali.
Agora vamos dar um actionid para a nossa action. Neste exemplo, vamos usar o número 3000. Para isso, vamos adicionar a seguinte linha no início do nosso arquivo:
local action = Action()
action:id(3000)
Essa linha cria um objeto que representa a nossa action e define o seu id como 3000.
Passo 2: Colocar a action no mapa
O segundo passo é colocar a nossa action no mapa do jogo. Para isso, vamos usar um editor de mapas como o Remere’s Map Editor.
Vamos abrir o mapa do nosso OT Server no editor e procurar por um lugar onde queremos colocar o nosso livro com a action. Neste exemplo, vamos colocar ele em uma mesa perto do NPC Rashid em Darashia.
Vamos selecionar o livro na lista de itens e arrastá-lo para a mesa no mapa. Depois vamos clicar com o botão direito no livro e selecionar Properties.
Na janela que se abre, vamos digitar 3000 no campo Action ID e clicar em OK. Isso vai fazer com que o livro tenha a mesma actionid da nossa action.
Agora vamos salvar o mapa e fechar o editor.
Passo 3: Testar a action no jogo
O terceiro passo é testar a nossa action no jogo. Para isso, vamos iniciar o nosso OT Server e entrar com um cliente de Tibia compatível.
Vamos ir até Darashia e procurar pelo livro na mesa perto do NPC Rashid. Vamos clicar nele com o botão direito e selecionar Use.
Se tudo der certo, vamos ver uma mensagem do NPC falando conosco. Se não der certo, podemos verificar se há algum erro no console do OT Server ou no arquivo de log.
Parabéns! Você acabou de criar e usar uma action nos OT Servers!
Conclusão
Neste post, aprendemos o que são actions nos OT Servers e como usá-las para criar interações interessantes no jogo. Vimos como criar uma action que faz um NPC falar com o jogador quando ele usa um livro. Também vimos como colocar a action no mapa e testá-la no jogo. Esperamos que este tutorial tenha sido útil e que você possa criar suas próprias actions nos OT Servers. Se você tiver alguma dúvida ou sugestão, deixe um comentário abaixo. Até a próxima!