Postado Maio 19, 2019 6 anos 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: Mostrar conteúdo oculto 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: Mostrar conteúdo oculto <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: Mostrar conteúdo oculto 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: Mostrar conteúdo oculto <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: 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: 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 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, .
Postado Maio 19, 2019 6 anos 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. Mostrar conteúdo oculto 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.
Postado Maio 19, 2019 6 anos vim mais rápido que meu esperma precoce! lindo gato super lindo amei demais ai meu coração xitei
Postado Maio 19, 2019 6 anos Autor @Yinz kkkkkk, doente demais. Já já tô logando no counter para tu me dá aquelas aulinhas lá, ( ͡° ͜ʖ ͡°)
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.