Postado Julho 25, 2019 5 anos Em 19/05/2019 em 00: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: Mostrar conteúdo oculto 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 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 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 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, . muito bom mano, parabéns!
Postado Outubro 8, 2019 5 anos 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!
Postado Outubro 10, 2019 5 anos @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.