Ir para conteúdo

Featured Replies

  • 2 months later...
  • Respostas 10
  • Visualizações 3.2k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

Posted Images

Postado
Em 18/05/2019 em 21:22, lordzetros disse:

Introdução

   Estive procurando no fórum e não encontrei esse sistema de TP para versões com modal, aliás, até achei um semelhante, só que possuía algumas instabilidades e também com uma ideia de waypoints (que estava também fazendo dessa forma, mas não vem ao caso o motivo disso não ser viável no Tibia). O que trago aqui é algo mais simples, porém o necessário.
   O sistema de TP é muito importante em alguns servidores que fogem um pouco de RPG (não que seja exclusivamente para estes), ele possibilita viagens de um local para outro em instantes, como por exemplo, do Templo para o Depot ou para qualquer outra localização configurada no script (a seu gosto). Uma coisa adicional que coloquei no script, foi de listar também a house do jogador que utilizar o comando, onde você poderá configurar se será necessário pagar ou não para o mesmo ser teleportado, enfim, dê uma olhada no código depois, tá tudo comentado.

 

Informações do sistema

- Locais configuráveis

- Configurável se é necessário pagar ou não para determinado local
- Configurável a quantidade de dinheiro de cada local

- Condições ao utilizar o comando (Protect Zone e tempo para utilizar o comando novamente)

- É requisitado o jogador está possuindo a quantia necessária para o teleport

 

Instalação

 

1 - crie um arquivo chamado teleportSystem.lua em data/talkactions/scripts/ e cole o código abaixo:

  Ocultar conteúdo

 TP_MODAL_SYSTEM = {
    id = 1060, -- se nao souber do que se trata, nao mude
    titulo = "Sistema de teleport", -- titulo da janela
    mensagem = "Selecione seu destino abaixo", -- mensagem da janela
    
    tempo = 10, -- Tempo em segundos para o jogador poder utilizar o sistema novamente
    
    -- CONFIG DE HOUSES -- 
    houses_modal = true, -- se deseja exibir a house do jogador no modal de teleport, true/false
    house_pago = true, -- se o player precisa pagar para se teleportar para a house, true/false
    house_custo = 6000, -- custo do teleport para a house, caso tenha colocado true acima
    -- FIM DE CONFIG DOS HOUSES -- 
    
    protect_zone = true, -- se o player precisa ta em uma zona segura para utilizar o comando, true/false
    
    msgs = {
        ptz = "Voce precisa esta em uma protect zone para utilizar o sistema de teleport!",
        mny = "Voce nao tem %d gold coins para esta viagem!",
        exh = "Voce precisa esperar %d segundos para utilizar novamente o sistema de teleport!",
    },
    
    locais = {
        [1] = {
            nome = 'Templo', -- Nome do local a ser mostrado na janela
            pago = false, -- caso o jogador tenha que pagar para usar o teleport -> true/false
            custo = 5000, -- custo da viagem, caso tenha colocado true acima
            pos = Position(160,51,7) -- Posicao que ira se teleportar. Segue a ordem: X,Y,Z
        },
        
        [2] = {
            nome = 'Depot',
            pago = false,
            custo = 5000,
            pos = Position(121,53,7)
            
        },
        
        [3] = {
            nome = 'Ferreiro',
            pago = true,
            custo = 10000,
            pos = Position(309,677,7)
        },
        -- para adicionar mais, copie a partir do [3] até a linha de cima deste comentario, em seguida, adicione modifique para [4] e assim por diante
    },
    
    locais_wp = {}, -- não mexa
    storage = 44958, -- Storage que irá controlar o tempo para utilizar o sistema novamente
}

local function create_modal(id, title, message, tb, p)
    local wd = ModalWindow(id, title, message)
   
    for i, v in pairs(tb.locais) do
        wd:addChoice(i, v.nome .. ' | custo: ' .. ((v.pago and v.custo) or 0))
    end 
    
    local start_tp = #tb.locais
    
    if (TP_MODAL_SYSTEM.houses_modal) then 
        local p_house = p:getHouse()
        if (p_house) then 
            tb.locais_wp[p:getGuid()] = {}
            table.insert(tb.locais_wp[p:getGuid()], {
                nome = "House",
                pago = tb.house_pago,
                custo = tb.house_custo,
                pos = p_house:getExitPosition()
            })
        end 
        if (tb.locais_wp[p:getGuid()]) then 
            for i, v in pairs(tb.locais_wp[p:getGuid()]) do
                wd:addChoice(i + start_tp, v.nome .. ' | custo: ' .. ((v.pago and v.custo) or 0))
            end 
        end 
    end 
   
    wd:addButton(101, "Teleport")
    wd:addButton(100, "Cancel")
    
    wd:setDefaultEnterButton(101)
    wd:setDefaultEscapeButton(100)
    return wd  
end


local function check_cond(p)
    if (p:getStorageValue(TP_MODAL_SYSTEM.storage) >= os.time()) then 
        p:sendCancelMessage((TP_MODAL_SYSTEM.msgs.exh):format(p:getStorageValue(TP_MODAL_SYSTEM.storage) - os.time()))
        p:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end 
    
    if (TP_MODAL_SYSTEM.protect_zone) then 
        if not (Tile(p:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE)) then 
            p:sendCancelMessage(TP_MODAL_SYSTEM.msgs.ptz)
            p:getPosition():sendMagicEffect(CONST_ME_POFF)
            return false 
        end 
    end
    return true
end 

function onSay(player, words, param)
    if not (check_cond(player)) then return false end
    player:registerEvent("Modal_tpsystem")
    local window = create_modal(TP_MODAL_SYSTEM.id, TP_MODAL_SYSTEM.titulo, TP_MODAL_SYSTEM.mensagem, TP_MODAL_SYSTEM, player)
    window:sendToPlayer(player)
    player:setStorageValue(TP_MODAL_SYSTEM.storage, os.time() + TP_MODAL_SYSTEM.tempo)
    return true
end

  

2 - Em seguida, cole este trecho de código em data/talkactions/talkactions.xml abaixo de algum semelhante:

  Ocultar conteúdo

<talkaction words="!fly" script="teleportSystem.lua" />

 


3 - Agora crie um arquivo chamado modalTpSystem.lua em data/creaturescripts/scripts/ e cole o código abaixo nele:

  Ocultar conteúdo

local function check_cond(p, t)
    local pg = t.pago
    if (pg) then 
        local ct = t.custo
        if not (p:removeMoney(ct)) then 
            p:sendCancelMessage(TP_MODAL_SYSTEM.msgs.mny:format(t.custo))
            return false
        end
    end
    p:getPosition():sendMagicEffect(CONST_ME_POFF)
    p:teleportTo(t.pos)
    p:getPosition():sendMagicEffect(CONST_ME_BATS)
end 

local function rem_pl(p)
    if (TP_MODAL_SYSTEM.locais_wp[p:getGuid()]) then
        TP_MODAL_SYSTEM.locais_wp[p:getGuid()] = nil
    end
end 

function onModalWindow(player, modalWindowId, buttonId, choiceId)
    player:unregisterEvent("Modal_tpsystem")
    if (modalWindowId == TP_MODAL_SYSTEM.id) then
        if (buttonId == 101) then 
            local tp_tgt = TP_MODAL_SYSTEM.locais[choiceId]
            if (tp_tgt) then 
                check_cond(player, tp_tgt)
            else
                local tp_tgt_w = TP_MODAL_SYSTEM.locais_wp[player:getGuid()]
                if (tp_tgt_w) then 
                    check_cond(player, TP_MODAL_SYSTEM.locais_wp[player:getGuid()][choiceId - #TP_MODAL_SYSTEM.locais])
                end
            end
        end 
        rem_pl(player)
    end
    return true
end

 

4 - E para finalizar, cole este código em data/creaturescripts/creaturescripts.xml abaixo de um semelhante:

  Ocultar conteúdo

<event type="ModalWindow" name="Modal_tpsystem" script="modalTpSystem.lua"/>

 

 

Explicação do script

A única coisa que você vai mexer é no teleportSystem, onde terá a opção de configurar os preços, locais, etc.

Configurando as houses:

Screenshot_60.thumb.png.0ce961cab4e8260260666721761db833.png

houses_modal = Se será habilitado o player teleportar para a house dele

house_pago = Se será pago o teleport para a house

house_custo = Custo do teleport para a house, caso seja pago


Configurando o local:

Screenshot_59.png.da15c7ea3f06bba814e8dbcbf0929568.png

nome = Nome do local a ser mostrado na janela

pago = Se ele vai ser pago ou não, coloque false caso queira que não cobre nada do jogador

custo = Caso tenha colocado como pago, o custo do teleport para o local

pos = Posição do local (X,Y,Z)

 

Quando for adicionar outro, copie esta mesma parte acima e altera o número [3] para [4] e os outros dados também, assim por diante.

O restante também tá explicado no script, basta ler.

 

Demonstração

UTILIZE O COMANDO !fly

Screenshot_56.png.7533af4a2240c86de8345bfdaccd33c8.png

 

Enfim, script simples, tem para outras versões, mas como falei, não tinha encontrado ainda para 1.x com esse funcionamento. Qualquer coisa, só comentar, :).

 

muito bom mano, parabéns!

  • 2 months later...
Postado

Boa madrugada, enfim tenho uma pequena noção em linguagem de programação Lua. e me fiz um desafio que n sei se é possível. 
estou tentando criar 1 script lua. para rodar no xenobot, mais n sei se ele reconhece os comandos necessários. quero que o script ele usasse o sistema de tp modal automaticamente.... ta sendo uma luta aksoakso. no ot ele tem o sistema de teleport que quando vc fala !go. abre uma janela modal igual do seu script, ai ele teria que selecionar um local e teleportar !!! alguem tem alguma dicas com isso? ja tentei fazer script pra auto click do mouse na coordenada mais n rolou. alguem pode me disser se é possivel isso. ou estou lutando com o impossivel? pois n tenho informação de que se o programa xenobot aceite os comandos necessarios!

tp modal.png

Postado

@leonardoalioti impossivel. só se voce criar um dll para fazer a ação e injetar ela no xenobot com algumas das açoes desse modal
pode usar c# ou c++ para fazer essa dll, porque o xenobot nao vai saber reconhecer esse modal, a não ser que voce fale pra ele que existe tal coisa.

Xenobot é limitado em açoes apenas as açoes que ele faz na source podem ser usadas nos códigos em lua, por isso voce precisa injetar uma dll com as açoes que voce quer relizar no caso ler o modal e escolher qual cidade ir.

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo