Ir para conteúdo

[Arquivado][XMagazine] DevPaper - Revscriptsys: o que vem por aí


XMagazine

Posts Recomendados

devpaper-icon.png

Que a equipe de desenvolvimento do OpenTibia sempre revisa seus sistemas isso não é novidade. E agora, está prestes a ser terminado uma revisão no sistema de scripting que irá quebrar com todas as compatibilidades entre scripts Lua já desenvolvidos: trata-se da revscriptsys.

 

 

Idealizada por Nostradamus e posta em prática por Remere, a revscriptsys tem como objetivo quebrar as barreiras que servem de limite para o scripter. Quando lançada, o OpenTibia estará na versão 0.7.0. Uma das maiores novidades é que todas as funções Lua e objetos serão tratados como classes ao invés de funções livres. A vantagem disso é que insere estruturas lógicas mais bem feitas, o que influencia principalmente na hora de se desenvolver sistemas maiores.

 

 

Veremos abaixo as novidades que serão inseridas ao OpenTibia:

 

 

 

XML

 

Em todo tempo de existência do projeto OpenTibia os arquivos XML sempre estiveram presentes, sejam para armazenar dados (que por sinal não é usado como banco de dados mais, graças ao revdbsys), seja para registrar eventos.

 

 

No revscriptsys, o uso do XML irá sumir na maior parte dos casos. Registros de magias, npcs e ações em geral não serão mais feitos por via desse formato e sim pelas dinâmicas tabelas da linguagem Lua. Apenas os monstros irão ser feitos em XML, pelo menos por agora.

 

 

 

Mudanças na estrutura

 

As já conhecidas pastas “actions”, “talkactions”, “movements”, “creaturevents” deixarão de existir e serão integradas de forma mais dinâmica. Essa divisão ao ponto de vista dos desenvolvedores mais avançados “limitavam o desenvolvimento de sistemas avançados”.

 

 

 

Scripts não como widget, mas como necessidade

 

A source do OpenTibia antigo era bastante instável e ilegível por haverem códigos que poderiam ser feitos com facilidade em scripting. Isso as vezes tornava difícil encontrar códigos de extrema importância que serviam de bases para os demais.

 

 

No revscriptsys todos esses códigos agora passarão a ser por via de scripting, através dos novos eventos é possível fazer muito mais sistemas que não precisam alterar o código-fonte do servidor, o que ajuda e muito na estabilidade.

 

 

 

Objetos

 

Items, Players, Tile e etc são agora representados como objetos. E como um objeto, este pode ser manipulado em funções membras.

 

 

 

item = createItem(2543) -- Cria um objeto de um item de ID 2543 (bolt)

item:setCount(88) -- Configura a quantidade do ID 2543 para 88 (88 bolts)

 

Objetos podem além de ser criados por scripts como acima também serem retornados por ambientes de trabalho ou funções de captura de dados. Por exemplo, para pegar o item do topo do tile da posição 1024, 1024, 7:

 

 

 

tile = map:getTile(1024, 1024, 7) -- Pega o objeto referente a posição 1024, 1024, 7

item = tile:getTopItem() -- Retorna a partir daí, o item que está no topo do file (item mais acima)

 

Objetos são sempre persistentes. Isso significa que se você linka uma referência a um objeto, você então poderá armazená-la ou modificá-la sempre (a não ser que este seja destruído por causas naturais), a única forma “não-natural” que destrói um objeto é:

 

 

  • Itens contáveis: Quando dois itens contáveis separados são juntados em um só (por exemplo, adicionando uma pilha de 10 bolts com outra pilha de 20 bolts), um dos objetos são destruídos (qual deles não se sabe).
  • Logout de players: Se um jogador sai do jogo e logo depois volta todos os itens que este carrega irão perder suas referências (como se tais itens fossem removidos e recriados  novamente).

Métodos são chamados em objetos usando o operador “:“. Chamar um método em objetos inválidos irá sempre causar uma excessão não caminhada. É possível verificar isso através de uma condição if  simples:

 

 

 

item = map:getTile(1024,1024,7):getTopItem()

if item then

-- Item válido!

else

-- Erro: Item inválido.

end

 

 

Eventos

 

O revscriptsys é dotado de um poderoso sistema de manipulação de eventos que permitem que eventos sejam executados em runtime assim como modificações de parâmetros de eventos.

 

 

Eventos são tratados usando register functions. Essas funções usam como referência parâmetros que especificam como este deve procedir e um callback que será executado quando a função ocorrer. Um exemplo é o evento onSpeak:

 

 

 

function testCallback(event)

-- Faz alguma coisa quando alguém diz "teste"

end

 

--[[

Os argumentos são, em ordem,

tipo de equivalência,

case sensitivy,

a string a ser analizada,

função callback

]]

registerGenericOnSayListener("substring", false, "teste", testCallback)

 

 

 

>>> Leia na XMagazine

Link para o comentário
Compartilhar em outros sites

  • 8 years later...
Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...