Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

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:

Spoiler

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:

Spoiler

<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:

Spoiler

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:

Spoiler

<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, :).

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

  • Respostas 10
  • Visualizações 3.2k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

Posted Images

Postado

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.

 

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

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