Ir para conteúdo
  • Cadastre-se

Funções Lua In-Game [TFS 0.4] (Versão 0.5)


Posts Recomendados

1.0 - Funcionamento:
Explicação:
Este talkaction, apenas faz a execução de um comando em lua, direto do game.
Exemplos:
image.png.0d5ca137103bed05cd29e16e73f31d0f.png
image.png.2830ed67a71bb45a3a146d6a5bcec587.png
image.png.743ce14ce8c7cbb2e7c45d7bbf6ec38e.png
image.png.2e9f2d9af92f09388521437dff7956d6.png

2.0 - Como Utilizar:
Executando apenas uma função:
/lua Função('variavél', 'variável', 'variável')
Executando várias funções simultâneas: /lua Função('variável', variável'), Função('variável', variável', variável'), ...

3.0 - Instalação:
Talkactions.xml

Spoiler

<talkaction words="/lua" access="5" event="script" value="lua.lua"

 

Data/Talkactions/scripts/lua.lua

Spoiler

function resolveFunction (cid, func)
    temp_var = {}
    fn = string.gsub(func, "%b()", "")
    _, count = string.gsub(func, "'([(%w%s_]+)'", function (var)
        if (tonumber(var) ~= nil) then
            table.insert(temp_var, tonumber(var))
        else
            table.insert(temp_var, var)
        end
        end)
    if (count == 2) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, fn .. "("..temp_var[1]..", ".. temp_var[2]..")")
        if (temp_var[1] == "cid") then
            temp_var[1] = cid
        else
            temp_var[1] = getPlayerByNameWildcard(temp_var[1])
        end
        _G[fn](temp_var[1], temp_var[2])        
    elseif (count == 3) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, fn .. "("..temp_var[1]..", ".. temp_var[2]..", ".. temp_var[3] ..")")
        if (temp_var[1] == "cid") then
            temp_var[1] = cid
        else
            temp_var[1] = getPlayerByNameWildcard(temp_var[1])
        end
        _G[fn](temp_var[1], temp_var[2], temp_var[3])    
    elseif (count >= 4 or count < 2) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Not implemented")
    end
end
function onSay(cid, words, param, channel)
    funktions = {}
    _, count = string.gsub(param, "((%w+)%b())", function (func) table.insert(funktions, func) end)
    for _, i in pairs (funktions) do
        resolveFunction(cid, i)
    end
    return true
end


OBS.: Na versão atual, ainda não se é possível utilizar uma função dentro de outra, e nem funções de retorno (getters)

Créditos: Desenvolvido inteiramente por mim (Vítor Subhi).
 

Implementações Futuras:

  • Funções dentro de funções;
  • Funções de retorno (getters);
  • Funções com mais de 3 variáveis;
  • Aprimoração de analisador sintático/semântico;
  • Adaptação para TFS 1.0, 1.2 e 1.3;

 

Editado por VitorSubhi
Adicionado Implementações Futuras. (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo