Ir para conteúdo

lordzetros

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    lordzetros recebeu reputação de gustavoadp em [Simples] Texto piscando no OT   
    Texto piscando no seu OT server
     
          Primeiramente pessoal, deverão criar um arquivo.lua com o nome 'texto.lua' sem as aspas. Logo depois, vão colar esse texto dentro do seu arquivo.lua
    Explicação do script:     Feito isso pessoal, vão em data/globalevents/globalevents.xml <- E cole esse código lá dentro:   Imagem: É só isso pessoal
  2. Gostei
    lordzetros recebeu reputação de Nerivalhs em Alavanca de troca [X itens por Y itens]   
    Olá,
    Bom... teve um pedido no Discord da TK feito por algum usuário (não estou recordando o nome) que estava tendo dificuldades em fazer determinado script, então decidi fazê-lo. É algo simples, eu já tinha enviado lá no canal de suporte, porém, como já de conhecimento por muitos, o canal foi removido. Decidi refazer de uma forma melhor e mais prática.

    * Sobre o Script * 
    Quando o jogador utilizar a alavanca para ganhar determinado(s) item(s), ele terá que ter deixado em POSIÇÕES DEFINIDAS alguns itens, sendo assim, possível efetuar a troca. Simples, não? Caso ainda não tenha entendido, tem imagem abaixo de como funciona o mesmo.
     
    * Imagens demonstração * 

    Tentando efetuar a troca sem tá com os itens posicionados de forma correta...
     

    Efetuando a troca de forma correta.
     
    * Instalando o Script * 
    Em data/actions/scripts/ crie um arquivo chamado alavanca_troca.lua e cole isto dentro:
    --[[ Lordzetros - TK ]] local config_itens = { {id = 2666, pos = {144,63,6}, count = 1}, -- ID DO ITEM NECESSÁRIO, POSIÇÃO QUE DEVE FICAR, QUANTIDADE DE ITEM NECESSÁRIO {id = 2667, pos = {145,63,6}, count = 1}, {id = 2671, pos = {146,63,6}, count = 1}, -- Caso queira colocar outro item, basta seguir esse modelo (ctrl + c) } local config_troca = { msg_falha = "Falha na troca do item. Necessario: %dx %s em sua devida posicao!", msg_sucesso = "A troca foi efetuada com sucesso!", recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}} -- Para deixar apenas uma recompensa, apenas deixe recompensas = {{id = ID_DO_ITEM_A_GANHAR, count = QUANTIDADE_A_GANHAR}} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local ax_t = {} for i, v in ipairs(config_itens) do local vt = Tile(Position(v.pos[1], v.pos[2], v.pos[3])) local item_t = vt:getItemById(v.id) if (not item_t or item_t:getCount() < v.count) then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(36, config_troca.msg_falha:format(v.count, ItemType(v.id):getName())) return false end table.insert(ax_t, {item_t, v.count}) end for i, v in ipairs(ax_t) do v[1]:remove(v[2]) end for i, v in ipairs(config_troca.recompensas) do player:addItem(v.id, v.count) end player:sendTextMessage(36, config_troca.msg_sucesso) player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED) return true end Em seguida, coloque esta linha de código abaixo de uma semelhante em data/actions/actions.xml
    <action actionid="30258" script="alavanca_troca.lua" />  
    Para finalizar, abre seu editor de mapa e coloque em algum alavanca o actionID = 30258

     
     
    * Configurando o Script * 
    Tá tudo comentado no código, portanto, vou falar só por cima.

     {id = 2666, pos = {144,63,6}, count = 1}
    Nesta parte, você deve colocar o id do item necessário, a posição que ele deve ficar e a quantidade.
     
    E nesta parte você configura a recompensa do jogador
     recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}}
    Id do item que ele ganhará e quantidade
     
     
    Enfim, script simples, porém, pode ser útil para muitos, assim como acredito que será para o usuário que solicitou, :). Abraços.
  3. Gostei
    lordzetros recebeu reputação de Teddy Ursa em Alavanca que troca itens   
    Olá pessoal da comunidade de Tibia!
       Bom, hoje trouxe um pequeno e simples script, mas que pode ajudar muita gente. Vi alguns posts referindo aos NPCs que trocam determinados itens por outros, então tive a ideia de fazer algo que possa ter uma função semelhante e que funcione de uma maneira rápida. Fique à vontade em utilizá-la da maneira que quiser.
    Como funciona?
        O usuário vai usar a alavanca e irá adicionar um item em troca de outra item que você configurou no script. Em outras palavras, o usuário irá ganhar uma determinada quantidade de um item em troca de outra quantidade de um item diferente. (Tudo configurável)
    VERSÃO TESTADA: 8.60 - OTX
    -->  Começando...
    Crie um arquivo com nome de changeItem.lua no diretório data/actions/scripts/
       Logo após, adicione esse código dentro do arquivo criado:
    -- Script por Lordzetros para o forum Tibia King. local config = { itemNec = 2160, -- ID do item que necessita para efetuar a troca qtNec = 50, -- Quantidade do item que necessita para efetuar a troca itemNovo = 10137, -- ID do item que sera adicionado ao efetuar a troca qtNova = 1, -- Quantidade do item que sera adicionado ao efetuar a troca stor = 25869, -- Storage, ou seja, a numeracao que identificara se o usuario fez ou nao fez a quest ainda } function onUse(cid, item, fromPosition, itemEx, toPosition) pos = getPlayerPosition(cid) if getPlayerStorageValue(cid,config.stor) ~= -1 then doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"So eh permitido fazer a troca de itens apenas uma vez!") doSendMagicEffect(pos, CONST_ME_POFF) elseif getPlayerStorageValue(cid,config.stor) == -1 then if item.itemid == 1945 then if getPlayerItemCount(cid,config.itemNec) >= config.qtNec then doPlayerAddItem(cid, config.itemNovo,config.qtNova) doPlayerRemoveItem(cid,config.itemNec,config.qtNec) doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Voce acabou de trocar "..config.qtNec.." "..getItemNameById(config.itemNec).." por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_HOLYAREA) setPlayerStorageValue(cid, config.stor, 1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR, "Voce nao tem "..config.qtNec.." "..getItemNameById(config.itemNec).." para trocar por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_POFF) end end end end Em seguida, abra o arquivo com nome actions.xml que está localizada em data/actions/
        E adicione essa linha de código no mesmo:
    <action actionid="9139" event="script" value="changeItem.lua"/>    Preste atenção, pois o actionid será o número que irá colocar na alavanca em seu editor de mapa, ou seja, no caso acima está como 9139, logo, na alavanca terá que está como a seguinte imagem:

    Obs1.: Reparem que na imagem tem outro número destacado, que é o ID 1945, CERTIFIQUE-SE que a alavanca que irá utilizar no seu OT tenha esse mesmo ID, caso não tenha, basta mudar o número no código do script para o que irá utilizar no seu servidor.
    Obs2.: O código está configurado para que o usuário efetue a troca APENAS 1 VEZ, caso queira que ele troque quantas vezes quiser, apenas remova o seguinte comando do código:
     
    setPlayerStorageValue(cid, config.stor, 1) Obs3.: O resto que tinha que explicar está no próprio código, apenas faça um esforço de ler, agradeço.
     
     
      É isso, pessoal, espero que goste e aproveite. Como falei antes, é um código simples, pois comecei agora com Script, pretendo avançar no nível e funções que os mesmos desempenham, isso é só o começo, leve isso como uma prática de uma atividade para iniciante em scripts.   
  4. Obrigado
    lordzetros recebeu reputação de kingdj22 em Alavanca de troca [X itens por Y itens]   
    Olá,
    Bom... teve um pedido no Discord da TK feito por algum usuário (não estou recordando o nome) que estava tendo dificuldades em fazer determinado script, então decidi fazê-lo. É algo simples, eu já tinha enviado lá no canal de suporte, porém, como já de conhecimento por muitos, o canal foi removido. Decidi refazer de uma forma melhor e mais prática.

    * Sobre o Script * 
    Quando o jogador utilizar a alavanca para ganhar determinado(s) item(s), ele terá que ter deixado em POSIÇÕES DEFINIDAS alguns itens, sendo assim, possível efetuar a troca. Simples, não? Caso ainda não tenha entendido, tem imagem abaixo de como funciona o mesmo.
     
    * Imagens demonstração * 

    Tentando efetuar a troca sem tá com os itens posicionados de forma correta...
     

    Efetuando a troca de forma correta.
     
    * Instalando o Script * 
    Em data/actions/scripts/ crie um arquivo chamado alavanca_troca.lua e cole isto dentro:
    --[[ Lordzetros - TK ]] local config_itens = { {id = 2666, pos = {144,63,6}, count = 1}, -- ID DO ITEM NECESSÁRIO, POSIÇÃO QUE DEVE FICAR, QUANTIDADE DE ITEM NECESSÁRIO {id = 2667, pos = {145,63,6}, count = 1}, {id = 2671, pos = {146,63,6}, count = 1}, -- Caso queira colocar outro item, basta seguir esse modelo (ctrl + c) } local config_troca = { msg_falha = "Falha na troca do item. Necessario: %dx %s em sua devida posicao!", msg_sucesso = "A troca foi efetuada com sucesso!", recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}} -- Para deixar apenas uma recompensa, apenas deixe recompensas = {{id = ID_DO_ITEM_A_GANHAR, count = QUANTIDADE_A_GANHAR}} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local ax_t = {} for i, v in ipairs(config_itens) do local vt = Tile(Position(v.pos[1], v.pos[2], v.pos[3])) local item_t = vt:getItemById(v.id) if (not item_t or item_t:getCount() < v.count) then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(36, config_troca.msg_falha:format(v.count, ItemType(v.id):getName())) return false end table.insert(ax_t, {item_t, v.count}) end for i, v in ipairs(ax_t) do v[1]:remove(v[2]) end for i, v in ipairs(config_troca.recompensas) do player:addItem(v.id, v.count) end player:sendTextMessage(36, config_troca.msg_sucesso) player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED) return true end Em seguida, coloque esta linha de código abaixo de uma semelhante em data/actions/actions.xml
    <action actionid="30258" script="alavanca_troca.lua" />  
    Para finalizar, abre seu editor de mapa e coloque em algum alavanca o actionID = 30258

     
     
    * Configurando o Script * 
    Tá tudo comentado no código, portanto, vou falar só por cima.

     {id = 2666, pos = {144,63,6}, count = 1}
    Nesta parte, você deve colocar o id do item necessário, a posição que ele deve ficar e a quantidade.
     
    E nesta parte você configura a recompensa do jogador
     recompensas = {{id = 2003, count = 1}, {id = 2004, count = 1}}
    Id do item que ele ganhará e quantidade
     
     
    Enfim, script simples, porém, pode ser útil para muitos, assim como acredito que será para o usuário que solicitou, :). Abraços.
  5. Gostei
    lordzetros recebeu reputação de Capitao wyz em Baú SAO - Sistema de Quest   
    * Sobre o Sistema da Quest * 

     
    Para quem já assistiu Sword Art Oline vai ficar fácil de entender. Jogadores poderão fazer uma quest simples, porém, diferenciada. Funciona da seguinte forma:
    1 - Jogador terá que possuir uma chave para abrir o caminho de uma sala misteriosa e aparentemente cheia de tesouros e recompensas dentro de um baú
    2 - Abrindo a passagem, ele vai se deparar com um baú em sua espera, o interesse do ser humano é devastador, ele irá abrir sim!
    3 - Ao tentar abrir o baú, monstros serão invocados e a passagem será imediatamente fechada
    4 - De todos os monstros que serão invocados, terá um chefe que será responsável por permitir a saída dos jogadores para sala de recompensa e sair daquele lugar, APENAS matando ele, isso será possível
    5 - Após a morte do chefe, TODOS players na sala da quest serão teleportados para a área de recompensa configurada no script.
     
    Obs.: A quest tá configurada para ser feita em X minutos para TODO servidor, ou seja, se uma guild fez a quest e você configurou para ela ser feita novamente em 10 minutos, então, nenhum outro player poderá fazer a quest nesse intervalo, pois a storage armazenada é a do servidor.
     
    * Instalação * 
    VERSÃO TESTADA: 8.6 - TFS 0.4
    Para agilizar o processo, deixei como anexo todos os arquivos necessários, devidamente separados e organizados, caso queira baixar, o ViruScan dele está logo abaixo.
    Em data/actions/scripts/
    1° - Crie um arquivo chamado keySAO.lua e cole o seguinte código dentro:
     
    --[[ Script - Lordzetros Tibiaking - Lordzetros ]]-- local config = { parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente tempoFechar = 1, -- MINUTOS para a passagem fechar, caso não entrem APÓS abrirem a passagem } function remover_parede(conf) local parede = getTileItemById(conf.parede.pos, conf.parede.id) if (parede) then doRemoveItem(parede.uid, 1) doSendMagicEffect(conf.parede.pos, 10) end return true end function adicionar_parede(conf) local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end return true end function onUse(cid, item, fromPos, item2, toPos) if (item2.itemid == config.parede.id) then if (getGlobalStorageValue(config.strPassagem.storage) >= os.time()) then return doCreatureSay(cid, 'Precisa esperar ' .. config.strPassagem.tempo .. ' minuto para fazer a quest!', TALKTYPE_ORANGE_1) end doRemoveItem(item2.uid, 1) doSendMagicEffect(config.parede.pos, 10) doCreatureSay(cid, "A passagem foi aberta por "..getPlayerName(cid).."! Peguem a recompensa no bau, depressa!", TALKTYPE_ORANGE_1) doPlayerSendCancel(cid, "A passagem ira fechar em " ..config.tempoFechar.. " minuto!") addEvent(function() adicionar_parede(config) end, config.tempoFechar * 60 * 1000) doRemoveItem(item.uid, 1) end return true end  
    Em seguida, crie outro arquivo no mesmo local com o nome de bauSAO.lua e cole o código dentro:
    --[[ Script - Lordzetros Tibiaking - Lordzetros ]] local mti = {     [1] = {nome = 'Demon', pos = {x=955, y=935, z=6}}, -- [numero] = {nome = 'Nome Monstro', pos = 'POSICAO QUE IRÁ RESPAWNAR O MONSTRO'}     [2] = {nome = 'Demon', pos = {x=955, y=936, z=6}},     [3] = {nome = 'Demon', pos = {x=955, y=937, z=6}},     [4] = {nome = 'Demon', pos = {x=955, y=938, z=6}},     [5] = {nome = 'Demon', pos = {x=955, y=939, z=6}},     [6] = {nome = 'Demon', pos = {x=955, y=940, z=6}},     [7] = {nome = 'Demon', pos = {x=964, y=935, z=6}},     [8] = {nome = 'Demon', pos = {x=964, y=936, z=6}},     [9] = {nome = 'Demon', pos = {x=964, y=937, z=6}},     [10] = {nome = 'Demon', pos = {x=964, y=938, z=6}},     [11] = {nome = 'Demon', pos = {x=964, y=939, z=6}},     [12] = {nome = 'Demon', pos = {x=964, y=940, z=6}},     [13] = {nome = 'Loki', pos = {x=959, y=940, z=6}}, } local config = { unique = 17458, -- uniqueID que vai colocar no BAÚ no seu EDITOR DE MAPA! parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente } function adicionar_parede(conf)     local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id     if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end     return true end function onUse(cid, item, fromPos, item2, toPos)     if (item.uid == config.unique) then         if (getGlobalStorageValue(config.strPassagem.storage) >= os.time()) then return doCreatureSay(cid, 'Precisa esperar ' .. config.strPassagem.tempo .. ' minuto para fazer a quest!', TALKTYPE_ORANGE_1) end         doCreatureSay(cid, "Argh!! Sala com armadilha.", TALKTYPE_ORANGE_1)         adicionar_parede(config)         for _, cf in pairs(mti) do             doSummonCreature(cf.nome, cf.pos)         end         setGlobalStorageValue(config.strPassagem.storage, os.time() + config.strPassagem.tempo * 60)     end     return true end Adicione as seguintes linhas de código em data/actions/actions.xml
    <action uniqueid="17458" event="script" value="bauSAO.lua"/> <action itemid="IDdaKEY" event="script" value="keySAO.lua" /> 2° - Agora em data/creaturescripts/scripts
    Crie um arquivo chamado tpSAO.lua e cole o código dentro:
    --[[ Script - Lordzetros Tibiaking - Lordzetros ]] local config = { SupEsquerdo = {x=953, y=930, z=6}, -- posicao do canto SUPERIOR ESQUERDO da área que ficará a quest InfDireito = {x=966, y=941, z=6}, -- posicao do canto INFERIOR DIREITO da área que ficará a quest chefe = "Loki", -- Nome do BOSS, responsável por abrir passagem e liberar a recompensa no baú parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- id da parede   |||||   posicao dela posPremio = {x = 1263, y = 1128, z = 7}, -- posicao para area de recompensa quando os players matarem o boss msgSucesso = "Parabéns por passarem do desafio! Agora permitirei pegar algumas recompensas como reconhecimento de um otimo guerreiros que es!" -- Mensagem quando os players conseguirem matar o boss da sala } function getAllPlayersInArea(fromPosition, toPosition)         local players = {}         for _, pid in ipairs(getPlayersOnline()) do             local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z}             local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z}             local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z)             for index = 0, math.abs(toPosition.z - fromPosition.z) do                 f.z = min + index                 t.z = min + index                 if (isInRange(getPlayerPosition(pid), f, t)) then                     table.insert(players, pid)                 end             end             end         return players     end  function remover_parede(conf)     local parede = getTileItemById(conf.parede.pos, conf.parede.id)     if (parede) then         doRemoveItem(parede.uid, 1)         doSendMagicEffect(conf.parede.pos, 10)     end     return true end function adicionar_parede(conf)     local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id     if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end     return true end function onDeath(cid)     local boss = getCreatureName(cid) == config.chefe     if boss then         doCreatureSay(cid, config.msgSucesso, TALKTYPE_ORANGE_1)         doSendMagicEffect(getCreaturePosition(cid), 49)         addEvent(function()             local players = getAllPlayersInArea(config.SupEsquerdo, config.InfDireito)             for _, jogador in ipairs(players) do                 doTeleportThing(jogador, config.posPremio)                 doSendMagicEffect(getPlayerPosition(jogador), 11)             end         end, 7000)     end     return true end Adicione a seguinte linha de código em data/creaturescripts/creaturescripts.xml
    <event type="death" name="tpSao" script="tpSAO.lua"/> Em data/creaturescripts/scripts/login.lua adicione esta linha de código abaixo do último registerCreatureEvent
     
    3° - Por fim, agora escolhe um monstro que será o chefe responsável por permitir que os jogadores saiam do local e que leve-os até a sala de recompensa após o derrotarem.
    Escolheu? Show, agora vá até o diretório dele em data/monster/pastaDoSeumonstro/arquivoDoSeuMonstro.xml e adicione essas linhas de códigos abaixo de alguma tag, no meu caso, utilizei abaixo da tag flags
    <script>     <event name="tpSao"/> </script> Segue foto para melhor entendimento: 

     
     
    * Explicação da configuração *
     
    Bom, apesar de está TUDO COMENTADO e AJUSTÁVEL, acho importante dá algumas explicações:
    1 - Configurou tudo nas pastas corretamente, colocou todas linhas de códigos necessárias e explicadas? Beleza, você tá quase lá.
    2 - Coloque em um baú no seu editor de mapa um UNIQUEID que será responsável por identificar que aquele BAÚ é da quest, segue imagem:

    Aconselho não modificar o valor, pois é muito improvável que já esteja sendo utilizado em seu servidor.
     
    3 - Agora entrando na parte dos scripts:
    No arquivo keySAO.lua localizado em data/actions/scripts/
    local config = { parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente tempoFechar = 1, -- MINUTOS para a passagem fechar, caso não entrem APÓS abrirem a passagem } Configure o id da parede que impedirá a passagem dos players e o jogador utilizará a chave nela para passar! Não esqueça de configurar a posição dela também, deixe a mesma que você colocou no mapa.
    Configure o storage que será responsável por permitir ou não jogadores fazerem a quest em X minutos.
    Configure o tempo que o player terá para passar para dentro da sala antes que a passagem se feche, no script tá 1 minuto.
     
    No arquivo bauSAO.lua localizado em data/actions/scripts/
    local mti = {     [1] = {nome = 'Demon', pos = {x=955, y=935, z=6}}, -- [numero] = {nome = 'Nome Monstro', pos = 'POSICAO QUE IRÁ RESPAWNAR O MONSTRO'}     [2] = {nome = 'Demon', pos = {x=955, y=936, z=6}},     [3] = {nome = 'Demon', pos = {x=955, y=937, z=6}},     [4] = {nome = 'Demon', pos = {x=955, y=938, z=6}},     [5] = {nome = 'Demon', pos = {x=955, y=939, z=6}},     [6] = {nome = 'Demon', pos = {x=955, y=940, z=6}},     [7] = {nome = 'Demon', pos = {x=964, y=935, z=6}},     [8] = {nome = 'Demon', pos = {x=964, y=936, z=6}},     [9] = {nome = 'Demon', pos = {x=964, y=937, z=6}},     [10] = {nome = 'Demon', pos = {x=964, y=938, z=6}},     [11] = {nome = 'Demon', pos = {x=964, y=939, z=6}},     [12] = {nome = 'Demon', pos = {x=964, y=940, z=6}},     [13] = {nome = 'Loki', pos = {x=959, y=940, z=6}}, } local config = { unique = 17458, -- uniqueID que vai colocar no BAÚ no seu EDITOR DE MAPA! parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente } Configure os nomes e posições que os monstros irão respawnar, e repare que deixei apenas 1 diferenciado chamado 'Loki', pois foi o monstro que escolhi como CHEFE 
    Configure o uniqueID que será utilizado no baú, recomendo não mexer nessa parte
    Configure novamente o ID da parede que irá bloquear a passagem e a mesma posição (use a mesma coisa da configuração anterior)
    Configure novamente o storage e tempo que permitirá os jogadores fazerem a quest em X minutos (use a mesma coisa da configuração anterior)
     
    No arquivo tpSAO.lua em data/creaturescripts/scripts/
    local config = { SupEsquerdo = {x=953, y=930, z=6}, -- posicao do canto SUPERIOR ESQUERDO da área que ficará a quest InfDireito = {x=966, y=941, z=6}, -- posicao do canto INFERIOR DIREITO da área que ficará a quest chefe = "Loki", -- Nome do BOSS, responsável por abrir passagem e liberar a recompensa no baú parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- id da parede   |||||   posicao dela posPremio = {x = 1263, y = 1128, z = 7}, -- posicao para area de recompensa quando os players matarem o boss msgSucesso = "Parabéns por passarem do desafio! Agora permitirei pegar algumas recompensas como reconhecimento de um otimo guerreiros que es!" -- Mensagem quando os players conseguirem matar o boss da sala } Configure o canto superior esquerdo e inferior direito, é de EXTREMA importância isso, pois será responsável por verificar os jogadores na sala da quest e teleportá-los, segue imagem:

                                                  Coloque as posições corretamente de cada canto.
     
    Configure o nome do chefe que você escolheu para completar a quest, o monstro diferenciado que falamos lá em cima, certo?
    Configure novamente o ID da parede que irá bloquear a passagem e a mesma posição (use a mesma coisa da configuração anterior)
    Configure a posição do prêmio, isto é, a posição que o player será teleportado quando matar o CHEFE, a posição da SALA DE RECOMPENSAS ou seja lá o que queira fazer após os jogadores matarem o chefe.
    Configure a mensagem, caso queira, de quando os jogadores matarem o CHEFE da sala.
     
     
    * Observações finais e anexos para download * 
     
    Digo logo que é um script simples, porém bastante trabalhoso de ser configurado, visto que faz-se necessário a instalação de alguns arquivos, mas não deixa de ser simples! 
    A ideia que tive foi quando estava lembrando do anime, e como estou voltando aos poucos com Tibia (aprendendo bastante), tive a ideia de fazer isso, pois como gostava bastante de jogar em Baiak e modos semelhantes, isso daqui pode ser bastante útil. Ah! E deixe-me alertá-lo, é um sistema simples que não está 100% como eu desejava, portanto, quando tiver tempo estarei atualizando e deixando com mínimo de incoerência possível no funcionamento dele. 
    POR FAVOR, faça o trabalho de ler as configurações do script, está tudo organizadinho para que você configure lá e deixe da maneira mais prática possível. Acredito que isso é tudo, abraços, \o.

     
    Download dos arquivos zipados: Arquivos - Quest Baú SAO - Lordzetros.zip
    Scan do arquivo: https://www.virustotal.com/pt/file/10e6bf2be0ccb33838a75198e5f822c1c8888f4c8652dcfc5235f87260a7582a/analysis/1540133843/ 
  6. Obrigado
    lordzetros recebeu reputação de PokeWR em Remover item de um player   
    Bom, como o título já informa, o script faz com que você remova um item do inventário de algum player online.
     
    Versão: 8.6 - TFS 0.4
    Em data\talkactions\scripts crie um arquivo chamado removerItem (lembrando que deve ser .lua, caso não saiba criar um, copie algum já existente e cole, após isso, mude o nome do arquivo e cole o código dentro)
     
    --[[ Script feito por Lordzetros para o fórum Tibia King ]] function onSay(cid, words, param) pos = getPlayerPosition(cid) if (param == '') then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O comando necessita de parametros (nomePlayer,idItem,quantidade). Ex.: /remover Bugador,2160,100") if (not isPlayerGhost(cid)) then doSendMagicEffect(pos, CONST_ME_POFF) end return true end local aux = string.explode(param, ",") local pid = getPlayerByNameWildcard(aux[1]) if (not pid) then return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Player " .. aux[1] .. " nao encontrado.") elseif (getPlayerAccess(pid) > getPlayerAccess(cid)) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce nao pode remover itens de um superior seu.") doPlayerSendTextMessage(pid, MESSAGE_INFO_DESCR, "O membro da staff " ..getCreatureName(cid).. " tentou remover um item de voce!") return true end aux[1] = aux[1]:lower() local qntd = 1 if(aux[3]) then if (tonumber(aux[3]) <= 0) then return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Nao eh permitido valores nulos/negativos! Caso queira remover apenas 1x, use /remover Player,idItem") else qntd = aux[3] end end if (doPlayerRemoveItem(pid, tonumber(aux[2]), qntd) == TRUE) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Removido " ..qntd.. "x " ..getItemNameById(aux[2]).. " do player "..aux[1]) posPlayer = getCreaturePosition(pid) doSendMagicEffect(posPlayer, CONST_ME_PLANTATTACK) doCreatureSay(pid,"O membro da staff " ..getCreatureName(cid).. " removeu " ..qntd.. "x " ..getItemNameById(aux[2]).." de seu inventario!", TALKTYPE_ORANGE_1) return true else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "O Player " ..aux[1].. " nao tem o item ou a quantidade do item informada em seu inventario.") end return true end Salve o arquivo no qual colocou o código, após isso navegue até data\talkactions\ e abra o arquivo talkactions.lua, e coloque este trecho de código onde quiser:
     
    <talkaction log="yes" access="3" words="/remover" event="script" value="removerItem.lua"/> Feito isso, salve o mesmo e já pode testar no seu servidor.

    Obs1.: Repare que o acesso está definido como 3, ou seja, GM para cima. (mude se quiser)

     
    Comando na prática: /remover nomePlayer,idItem,qntd

    Imagens:
    1

     
    2

     
    3


     
    4

     
    Enfim, é isso pessoal, script simples, porém, pode servir para algum tibiano interessado. 
  7. Gostei
    lordzetros recebeu reputação de cs007 em Fly System com modal 1.3   
    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:
     
    2 - Em seguida, cole este trecho de código em data/talkactions/talkactions.xml abaixo de algum semelhante:
     

    3 - Agora crie um arquivo chamado modalTpSystem.lua em data/creaturescripts/scripts/ e cole o código abaixo nele:
     
    4 - E para finalizar, cole este código em data/creaturescripts/creaturescripts.xml abaixo de um semelhante:
     
     
    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, .
  8. Curtir
    lordzetros recebeu reputação de nizin em [Pedido] Clickar Item vira outro item   
    Crie um arquivo em data/actions/scripts/ chamado de trocaItem.lua com o seguinte código:
     
    -- Lordzetros p/ Forum Tibia King local config = { oldItem = 2152, -- ID do item antigo que ira ser transformado oldCount = 100, -- Quantidade necessaria para transformar o antigo item newItem = 2160, -- ID do novo item ao ser transformado 100 unidades newCount = 1, -- quantidade que ira ser adicionado do novo item } function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == config.oldItem and item.type == config.oldCount then doPlayerAddItem(cid,config.newItem,config.newCount) doRemoveItem(item.uid,item.type) doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Voce transformou "..item.type.." "..getItemNameById(item.itemid).." em "..config.newCount.." "..getItemNameById(config.newItem)..".") doSendMagicEffect(getPlayerPosition(cid),25) else return false end return true end E em seguida vá em data/actions e abra actions.xml. Adicione esse código no mesmo:
     
    <action itemid="IDdoItemParaTransformar" script="trocaItem.lua" /> IDdoItemParaTransformar -> No script tá 2152, é só alterar para o que você colocou aí, enfim, tá tudo explicado no script.
    Qualquer dúvida só falar, :). 
  9. Curtir
    lordzetros recebeu reputação de Seitron em [TFS 1.3] TARO EVENT - Novo evento para OT   
    * Apresentação *
    Bom, galera, tá tudo explicado no vídeo de como funciona o evento [Manual e Automático], como configurar o arquivo e tudo mais.
    Arquivos do evento estão anexado no tópico, assim como o vírus scan também, :). 
     
     
    * Vídeo * 
          
     
    * Comandos *
    !taro abrir 
    Utilizado por staffs para abrir o evento [Manual]
     
    !taro fechar
    Utilizado por staffs para fechar o evento [Manual]
     
    !taro encerrar
    Utilizado por staffs para encerrar o evento [Manual]
     
    !taro kick,nome_jogador
    Utilizado por staffs e PLAYERS para kickar alguém do evento
     
     
    * Links * 
    Vírus scan: https://www.virustotal.com/pt/file/7b30879de2745ef020a06de135dae7bd80673eb0d5d2f80b22b1f2a6db5158e0/analysis/1548894947/
    Download: Taro Event - Lordzetros.zip
     
     
     
    Dúvidas, sugestões, críticas ou bugs? Deixe abaixo,  
  10. Gostei
    lordzetros recebeu reputação de Delkdors em Problema com sistema de tp via Modal Window   
    Substitua seu talkaction por este:
    -- Em talkactions local modaldialog = { title = "Quick Access", message = "Where are you going?", buttons = { { id = 1, text = "Go" }, { id = 2, text = "Cancel" }, }, buttonEnter = 1, buttonEscape = 2, choices = { { id = 1, text = "Dorion" }, { id = 2, text = "Thais" }, { id = 3, text = "Mirand Theraan" }, { id = 4, text = "Saari" }, { id = 5, text = "Alfon" }, { id = 6, text = "Venonh" }, { id = 7, text = "Infernium" }, { id = 8, text = "Anknor" }, { id = 9, text = "Yalahar" }, { id = 10, text = "Smallville" }, { id = 11, text = "Flam" }, { id = 12, text = "Farmine" }, { id = 13, text = "Roshamuul" }, { id = 14, text = "Gray Island" }, { id = 15, text = "Goroma" } }, popup = false } function onSay(player, words, param) if (Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE)) then modalWindow = ModalWindow(1003, modaldialog.title, modaldialog.message) if modalWindow:getId() == 1003 then for _, v in ipairs(modaldialog.buttons) do modalWindow:addButton(v.id, v.text) end for _, v in ipairs(modaldialog.choices) do modalWindow:addChoice(v.id, v.text) end modalWindow:setDefaultEnterButton(modaldialog.buttonEnter) modalWindow:setPriority(modaldialog.popup) modalWindow:setDefaultEscapeButton(modaldialog.buttonEscape) end modalWindow:sendToPlayer(player) player:registerEvent("ModalTP") else player:sendCancelMessage("You need to be in a safe zone to use teleport system.") end return false end  
  11. Gostei
    lordzetros recebeu reputação de robson pablo dos san em [TFS 1.3] TARO EVENT - Novo evento para OT   
    * Apresentação *
    Bom, galera, tá tudo explicado no vídeo de como funciona o evento [Manual e Automático], como configurar o arquivo e tudo mais.
    Arquivos do evento estão anexado no tópico, assim como o vírus scan também, :). 
     
     
    * Vídeo * 
          
     
    * Comandos *
    !taro abrir 
    Utilizado por staffs para abrir o evento [Manual]
     
    !taro fechar
    Utilizado por staffs para fechar o evento [Manual]
     
    !taro encerrar
    Utilizado por staffs para encerrar o evento [Manual]
     
    !taro kick,nome_jogador
    Utilizado por staffs e PLAYERS para kickar alguém do evento
     
     
    * Links * 
    Vírus scan: https://www.virustotal.com/pt/file/7b30879de2745ef020a06de135dae7bd80673eb0d5d2f80b22b1f2a6db5158e0/analysis/1548894947/
    Download: Taro Event - Lordzetros.zip
     
     
     
    Dúvidas, sugestões, críticas ou bugs? Deixe abaixo,  
  12. Curtir
    lordzetros recebeu reputação de ITALOx em Alavanca que troca itens   
    Olá pessoal da comunidade de Tibia!
       Bom, hoje trouxe um pequeno e simples script, mas que pode ajudar muita gente. Vi alguns posts referindo aos NPCs que trocam determinados itens por outros, então tive a ideia de fazer algo que possa ter uma função semelhante e que funcione de uma maneira rápida. Fique à vontade em utilizá-la da maneira que quiser.
    Como funciona?
        O usuário vai usar a alavanca e irá adicionar um item em troca de outra item que você configurou no script. Em outras palavras, o usuário irá ganhar uma determinada quantidade de um item em troca de outra quantidade de um item diferente. (Tudo configurável)
    VERSÃO TESTADA: 8.60 - OTX
    -->  Começando...
    Crie um arquivo com nome de changeItem.lua no diretório data/actions/scripts/
       Logo após, adicione esse código dentro do arquivo criado:
    -- Script por Lordzetros para o forum Tibia King. local config = { itemNec = 2160, -- ID do item que necessita para efetuar a troca qtNec = 50, -- Quantidade do item que necessita para efetuar a troca itemNovo = 10137, -- ID do item que sera adicionado ao efetuar a troca qtNova = 1, -- Quantidade do item que sera adicionado ao efetuar a troca stor = 25869, -- Storage, ou seja, a numeracao que identificara se o usuario fez ou nao fez a quest ainda } function onUse(cid, item, fromPosition, itemEx, toPosition) pos = getPlayerPosition(cid) if getPlayerStorageValue(cid,config.stor) ~= -1 then doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"So eh permitido fazer a troca de itens apenas uma vez!") doSendMagicEffect(pos, CONST_ME_POFF) elseif getPlayerStorageValue(cid,config.stor) == -1 then if item.itemid == 1945 then if getPlayerItemCount(cid,config.itemNec) >= config.qtNec then doPlayerAddItem(cid, config.itemNovo,config.qtNova) doPlayerRemoveItem(cid,config.itemNec,config.qtNec) doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Voce acabou de trocar "..config.qtNec.." "..getItemNameById(config.itemNec).." por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_HOLYAREA) setPlayerStorageValue(cid, config.stor, 1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR, "Voce nao tem "..config.qtNec.." "..getItemNameById(config.itemNec).." para trocar por "..config.qtNova.." "..getItemNameById(config.itemNovo)..".") doSendMagicEffect(pos, CONST_ME_POFF) end end end end Em seguida, abra o arquivo com nome actions.xml que está localizada em data/actions/
        E adicione essa linha de código no mesmo:
    <action actionid="9139" event="script" value="changeItem.lua"/>    Preste atenção, pois o actionid será o número que irá colocar na alavanca em seu editor de mapa, ou seja, no caso acima está como 9139, logo, na alavanca terá que está como a seguinte imagem:

    Obs1.: Reparem que na imagem tem outro número destacado, que é o ID 1945, CERTIFIQUE-SE que a alavanca que irá utilizar no seu OT tenha esse mesmo ID, caso não tenha, basta mudar o número no código do script para o que irá utilizar no seu servidor.
    Obs2.: O código está configurado para que o usuário efetue a troca APENAS 1 VEZ, caso queira que ele troque quantas vezes quiser, apenas remova o seguinte comando do código:
     
    setPlayerStorageValue(cid, config.stor, 1) Obs3.: O resto que tinha que explicar está no próprio código, apenas faça um esforço de ler, agradeço.
     
     
      É isso, pessoal, espero que goste e aproveite. Como falei antes, é um código simples, pois comecei agora com Script, pretendo avançar no nível e funções que os mesmos desempenham, isso é só o começo, leve isso como uma prática de uma atividade para iniciante em scripts.   
  13. Curtir
    lordzetros recebeu reputação de Lyu em Bot Discord Integrado com Servidor   
    Bacana! Quando estava ligado a um projeto, pensei em fazer algo bem semelhante, isso vai se tornar algo banal daqui alguns anos, acho importante servidores fazerem esse tipo de integração o quanto antes, sem contar que hoje em dia é um diferencial e muitos players utilizam Discord. Parabéns.
  14. Curtir
    lordzetros deu reputação a mastof em Bot Discord Integrado com Servidor   
    Sistema de Denuncias no servidor, faz verificação para ver se o Player realmente existe no servidor do PokeTibia e a verificação se o player esta no servidor do Discord

    Funcionamento:
    O player reporta um jogador, podendo por provas, e o player reportado pode se defender da mesma forma atualizando a denuncia
  15. Gostei
    lordzetros recebeu reputação de Katiau em [TFS 1.3] Teleport com janela   
    TFS 1.3 - TESTADO EM VERSÃO 10.98
    * Introdução *
     
        Bom, estive navegando no Fórum e vi que o usuário @Cleiton Felipi pediu um script que ao player entrasse no teleport de um X monstro, um Demon por exemplo, listasse qual hunt o jogador queria entrar. Achei interessante, e resolvi desenvolver e postar no TK, já que não tinha ainda, :).
     
     
     
    * Sobre o sistema *
     
         Você utiliza diversas hunts com vários tps criados no mapa no seu servidor do mesmo monstro? Bom, este script será muito útil para você! Pois ele permitirá que você habilite ao jogador em qual hunt ele quer caçar, por exemplo, se tiver Demon 01, Demon 02, Demon 03, Demon X, basta apenas você criar um tp indicando o monstro e que uma janela irá aparecer com a lista de opções de hunts, prático, né? Segue imagens de demonstração:


     
     
    OBS¹.: Você pode colocar TODOS OS MONSTROS neste script, contando que tenha o actionID que ficará no teleporte, não é de uma quantidade limitada, em outras palavras, você pode adicionar as hunts de Demon, Frost Dragon, Dragon, ..., tudo aqui, apenas mudando o actionID (tudo configurável, não se preocupe).
     
    * Instalação *
     
    Em data/movements/scripts/ crie um arquivo chamado mov_janela_hunts.lua e adicione dentro:
    --[[ Script - Lordzetros Fórum Tibia King ]] local config = { titulo = "BEM VINDO(A) A JANELA DE HUNTS!", -- Título da Janela mensagem = "Selecione qual hunt voce deseja ir:", -- Mensagem abaixo do título da janela } CONFIG_TPS_JANELA = { [19090] = { -- ID do action que ficará no portal da hunt {nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado {nome = "Demon 02", pos = {x = 93, y = 144, z = 7}}, {nome = "Demon 03", pos = {x = 91, y = 140, z = 7}}, {nome = "Demon 04", pos = {x = 94, y = 138, z = 7}}, {nome = "Demon 05", pos = {x = 95, y = 136, z = 7}}, }, [19091] = { {nome = "Frost 01", pos = {x = 98, y = 140, z = 7}}, {nome = "Frost 02", pos = {x = 93, y = 145, z = 7}}, {nome = "Frost 03", pos = {x = 91, y = 141, z = 7}}, {nome = "Frost 04", pos = {x = 94, y = 139, z = 7}}, {nome = "Frost 05", pos = {x = 95, y = 137, z = 7}}, }, } function onStepIn(creature, item, pos, fromPosition) if ((CONFIG_TPS_JANELA[item:getActionId()]) and creature:isPlayer()) then JANELA_TP_ACTION = item:getActionId() creature:teleportTo(fromPosition, true) creature:registerEvent("janela hunts") local janela = ModalWindow(1000, config.titulo, config.mensagem) for i, v in ipairs(CONFIG_TPS_JANELA[JANELA_TP_ACTION]) do janela:addChoice(i, v.nome) end janela:addButton(100, "Confirmar") janela:addButton(101, "Fechar") janela:setDefaultEnterButton(100) janela:setDefaultEscapeButton(101) janela:sendToPlayer(creature) end return true end  
    Em data/movements/movements.xml adicione o seguinte código abaixo de um semelhante:
    <movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" />  
     
    Agora em data/creaturescripts/scripts/ crie um arquivo chamado creature_janela_hunts.lua e adicione dentro:
    function onModalWindow(player, modalWindowId, buttonId, choiceId) player:unregisterEvent("janela hunts") if (modalWindowId == 1000) then if (buttonId == 100) then local tele_pos = CONFIG_TPS_JANELA[JANELA_TP_ACTION][choiceId].pos player:teleportTo(tele_pos) local pos_t = Position(tele_pos) pos_t:sendMagicEffect(CONST_ME_MAGIC_BLUE) end end return true end  
    Em data/creaturescripts/creaturescripts.xml adicione o seguinte código abaixo de um semelhante:
    <event type="ModalWindow" name="janela hunts" script="creature_janela_hunts.lua"/>  
    * Configuração *
        Bom, apesar de que não seja difícil de configurar, é necessário uma explicação, vamos lá...
    1 - 
    [19090] = { -- ID do action que ficará no portal da hunt {nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado {nome = "Demon 02", pos = {x = 93, y = 144, z = 7}}, {nome = "Demon 03", pos = {x = 91, y = 140, z = 7}}, {nome = "Demon 04", pos = {x = 94, y = 138, z = 7}}, {nome = "Demon 05", pos = {x = 95, y = 136, z = 7}}, }, Em [19090] este número de dentro é o actionID que ficará no portal. Com ele será identificado de qual monstro se trata, bastando apenas configurar este número e o nome das opções de monstros que você quer aparecendo na janela, em seguida, a posição na qual o jogador será teleportado, seguindo a ordem. Segue imagem de como deve ficar o seu portal:

    OBS²: VOCÊ EDITA O ACTIONID NO SEU EDITOR DE MAPA COLOCANDO NO ID DO ITEM DE TELEPORTE.
    OBS³: PARA ADICIONAR NOVAS HUNTS NO SCRIPT, BASTA SEGUIR O PADRÃO QUE ESTÁ NO CÓDIGO, DO 19090 PARA O 19091.
     
    2 - (por fim)
    Em data/movements/movements.xml
    <movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" /> itemID = Id do item que o player andará para abrir a janela de hunt
    Está como 5023 por conta que o magic forcefield é 5023, no qual utilizei para teste, aconselho você deixar da mesma forma (caso seja o mesmo id no seu servidor), ou mude, mas cuidado para não cometer algum erro.
     
     
    Enfim, algo simples, porém não encontrei no TK.
    Abraços.  
     
     
  16. Curtir
    lordzetros deu reputação a WooX em Classic-Yurots [8.60] - Push Cruzado + Cast com Setas   
    Classic Yurots
    V 8.60

    Eu acompanhei de perto o desenvolvimento deste servidor e sabia que sairia coisa boa dali, mas só quando obtive acesso aos arquivos que pude entender a dimensão do negocio, sendo assim, eu posso afirmar que este é um dos se não o melhor datapack baseado no antigo YurOTS. O datapack está limpo, você não vai encontrar um script em qualquer uma das pastas que não esteja em uso no servidor, alem disto muito tempo foi gasto reescrevendo e revisando os scripts do servidor para garantir máxima performance.
    Os mais novos em OpenTibia talvez não saibam, mas os famosos Baiaks e Styllers de hoje em dia foram baseados neste mapinha que teve seu inicio já na versão 7.5 e seu declínio nas versões 8.4 onde foi visto pela ultima vez devido ao surgimento de derivados do mesmo (Baiak e Styller). Devido ao fato dos mapas Baiak e Styller serem derivados do YurOTS, se você tem um projeto de mapa Baiak ou Styller, este é um excelente datapack para você usar como base.
     
    Por que o servidor está sendo postado?

    Este servidor foi desenvolvido ao longo de 2 anos pelo Wesley (conhecido aqui no fórum como @KOLISAO), alguns meses atrás o servidor foi finalizado e colocado online, embora hoje em dia, sem contato com times de jogadores, é difícil popular um servidor novo e sem nome logo na abertura, com isso a inauguração não foi como esperado e conseguiu uma média de apenas 30 jogadores. Frustado por 2 anos de muito trabalho não dar o resultado esperado, ele decidiu desistir do servidor, foi então que eu fiz uma proposta em troca do servidor e obtive acesso ao mesmo.
    O que eu não sabia na época era que outras duas pessoas alem de mim tiveram acesso a todos os arquivos, uma dessas pessoas é um amigo do próprio Wesley na vida real, ele conversou com este amigo e deletou os arquivos do computador dele. A segunda pessoa em questão, eu não tenho certeza de como obteve estes arquivos, mas ele atualmente está vendendo estes arquivos sem autorização. 
    Quando fiquei ciente disto, entrei em contato com o Wesley e o informei sobre o que estava acontecendo, ele ficou surpreso e revoltado por alguém estar lucrando em cima de seus esforços. Neste momento pedi permissão a ele para postar o servidor aqui no fórum, e ele me concedeu.
     
    Informações sobre o servidor

    Como dito anteriormente, muito tempo foi gasto neste servidor e tudo foi feito com o maior cuidado possivel. Vou deixar aqui as informações sobre o que contem no servidor, informações que foram divulgadas pelo próprio Wesley na data de inauguração.
     
    Vídeo com algumas Quests do servidor
     
    Outras informações podem ser encontradas no tópico de show-off do período em que o servidor ainda estava em desenvolvimento.
     
    Extra + Créditos

    Juntamente com o servidor estarei postando a source e o site do mesmo, porem o site será postado em um tópico diferente devido a esta não ser a área correta do fórum para isso. A source do servidor é OTX2, foram feitas pequenas modificações na source para melhor formatação em partes do datapack, como QuestLog e outros.
    Edit 29/11
    Além disto, a source também possui 2 sistemas muito procurados que até o presente momentos não eram públicos, sendo estes Push Cruzado e Cast com Setas. Ambos os sistemas já estão instalados na source, porem futuramente irei postar ambos os códigos juntamente com tutorial de instalação para os que quiserem adicionar por si mesmos.
     
    Créditos
    Como já mencionei diversas vezes neste tópico, o responsável pelo desenvolvimento do servidor e site foi o @KOLISAO, portanto todos os créditos nesta parte vão para ele.
    Eu fui o responsável por adicionar o Push Cruzado na source e fazer uma pequena modificação no Cast com Setas.
    Obs: quando eu obtive acesso aos arquivos o Cast com Setas já estava instalado na source, eu não tenho informação se o código foi desenvolvido por ele ou por um terceiro.
     
    Links para Download

    Servidor
    Download - Scan
     
    Source
    Download - Scan
     
    Distro compilada para Windows
    32x - TheOTXServer.exe - Scan
    64x - TheOTXServer_64.exe - Scan
     
    DLLs
    dll.zip - Scan
     
    Site
     
  17. Curtir
    lordzetros deu reputação a Cat em Sistema de teleports por waypoints (descobrir áreas no mapa)   
    Waypoint teleport system é um dispositivo de teletransporte. O principal objetivo de um waypoint é fornecer viagens rápidas entre as áreas que um jogador descobriu. Esse sistema foi desenvolvido por Oen432. (Apenas traduzi)
     
    Demonstração:
     
    Instalação
    Abra data/movements/movements.xml. Adicione XML: <movevent event="StepIn" actionid="4236" script="waypoints.lua" /> Abra data/creaturescripts/creaturescripts.xml. Adicione XML: <event type="ModalWindow" name="WaypointsModal" script="modal_windows.lua"/> Faça o Download de waypoints.rar abaixo, no final do tópico. Copie waypoints.lua para data/movements/scripts/waypoints.lua. Copie modal_windows.lua para data/creaturescripts/scripts/modal_windows.lua.  
    Configuração Todas as configurações estão em - data/movements/scripts/waypoints.lua.
    WINDOW_ID - ignore.
    BUTTON_ACCEPT - ignore.
    BUTTON_CLOSE - ignore.

    WAYPOINTS_STORAGE - base storage id, mude se já está sendo usado esse (garanta que de WAYPOINTS_STORAGE para WAYPOINTS_STORAGE + Number of waypoints, as storages não estejam sendo utilizadas em outro código).

    WAYPOINTS - lista de waypoints disponíveis
    name - nome que será mostrado na lista e quando o waypoint for ativado
    position - posição do piso no mapa, aqui é onde o jogador será teleportado
     
    Download
    waypoints-1_0_0.rar
     
  18. Curtir
    lordzetros deu reputação a Pedriinz em Auto Loot Sytem for TFS 1.3 + revscripts   
    Depois de milhões de anos sem programar porcaria nenhuma... Eu desenvolvi este sistema como um método de estudo. (C++)
    Este sistema foi inspirado no Auto Loot System por @psychonaut. (OTland)
    Criei o mesmo na versão mais recente do tfs. 
     
    Auto Loot System for TFS 1.3

     
    Como funciona?
    Simples, quando você mata um monstro e abre o corpo (você precisa clicar no corpo), os itens vão para o seu personagem.

     
    Instalando
    em actions.cpp, encontre:
    if (corpseOwner != 0 && !player->canOpenCorpse(corpseOwner)) { return RETURNVALUE_YOUARENOTTHEOWNER; } e mude isso para:
     
    if (corpseOwner != 0 && !player->canOpenCorpse(corpseOwner)) { return RETURNVALUE_YOUARENOTTHEOWNER; } else { if (player->canOpenCorpse(corpseOwner) && player->autoLootList.size() != 0) { if (player->getCapacity() > 100 * 100) { //Minimum of Capacity for autoloot works. (100 CAP) for (Item* item : container->getItemList()) { if (player->getItemFromAutoLoot(item->getID())) { std::ostringstream msgAutoLoot; msgAutoLoot << "You looted a " << item->getItemCount() << "x " << item->getName() << "."; g_game.internalMoveItem(container, player, CONST_SLOT_WHEREEVER, item, item->getItemCount(), nullptr); player->sendTextMessage(MESSAGE_INFO_DESCR, msgAutoLoot.str()); } } } else { player->sendTextMessage(MESSAGE_INFO_DESCR, "Sorry, you don't have enough capacity to use auto loot, so it has been disabled. (100+ capacity is required)"); } } } em player.h, abaixo de:
    std::unordered_set<uint32_t> VIPList; adicione isso:
    std::set<uint32_t> autoLootList; ainda em player.h encontre:
    bool hasLearnedInstantSpell(const std::string& spellName) const; adicione em baixo:
    void addItemToAutoLoot(uint16_t itemId); void removeItemFromAutoLoot(uint16_t itemId); bool getItemFromAutoLoot(uint16_t itemId); em player.cpp no final do arquivo, adicione:
    void Player::addItemToAutoLoot(uint16_t itemId) { autoLootList.insert(itemId); } void Player::removeItemFromAutoLoot(uint16_t itemId) { autoLootList.erase(itemId); } bool Player::getItemFromAutoLoot(const uint16_t itemId) { return autoLootList.find(itemId) != autoLootList.end(); } em luascript.cpp encontre:
    registerMethod("Player", "getFightMode", LuaScriptInterface::luaPlayerGetFightMode); e adicione em baixo:
    registerMethod("Player", "addItemToAutoLoot", LuaScriptInterface::luaPlayerAddItemToAutoLoot); registerMethod("Player", "removeItemFromAutoLoot", LuaScriptInterface::luaPlayerRemoveItemFromAutoLoot); registerMethod("Player", "getItemFromAutoLoot", LuaScriptInterface::luaPlayerGetItemFromAutoLoot); registerMethod("Player", "getAutoLootList", LuaScriptInterface::luaPlayerGetAutoLootList); ainda em luascript.cpp encontre essa função:
    int LuaScriptInterface::luaPlayerGetFightMode(lua_State* L) { // player:getFightMode() Player* player = getUserdata<Player>(L, 1); if (player) { lua_pushnumber(L, player->fightMode); } else { lua_pushnil(L); } return 1; }  
    abaixo dela, adicione:
    int LuaScriptInterface::luaPlayerAddItemToAutoLoot(lua_State* L) { // player:addItemToAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } player->addItemToAutoLoot(itemId); pushBoolean(L, true); return 1; } int LuaScriptInterface::luaPlayerRemoveItemFromAutoLoot(lua_State* L) { // player:removeItemFromAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } player->removeItemFromAutoLoot(itemId); pushBoolean(L, true); return 1; } int LuaScriptInterface::luaPlayerGetItemFromAutoLoot(lua_State* L) { // player:getItemFromAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } if (player->getItemFromAutoLoot(itemId)) { pushBoolean(L, true); } else { pushBoolean(L, false); } return 1; } int LuaScriptInterface::luaPlayerGetAutoLootList(lua_State* L) { // player:getAutoLootList() Player* player = getUserdata<Player>(L, 1); if (player) { std::set<uint32_t> value = player->autoLootList; if (value.size() == 0) { lua_pushnil(L); return 1; } int index = 0; lua_createtable(L, value.size(), 0); for(auto i : value) { lua_pushnumber(L, i); lua_rawseti(L, -2, ++index); } } else { lua_pushnil(L); } return 1; }  
    em luascript.h encontre:
    static int luaPlayerGetFightMode(lua_State* L);  
    adicione a baixo:
    static int luaPlayerAddItemToAutoLoot(lua_State* L); static int luaPlayerRemoveItemFromAutoLoot(lua_State* L); static int luaPlayerGetItemFromAutoLoot(lua_State* L); static int luaPlayerGetAutoLootList(lua_State* L);  
    em iologindata.cpp encontre:
    //load storage map query.str(std::string()); query << "SELECT `key`, `value` FROM `player_storage` WHERE `player_id` = " << player->getGUID(); if ((result = db.storeQuery(query.str()))) { do { player->addStorageValue(result->getNumber<uint32_t>("key"), result->getNumber<int32_t>("value"), true); } while (result->next()); }  
    e adicione em baixo:
    query.str(std::string()); query << "SELECT `autoloot_list` FROM `player_autoloot` WHERE `player_id` = " << player->getGUID(); if ((result = db.storeQuery(query.str()))) { unsigned long lootlistSize; const char* autolootlist = result->getStream("autoloot_list", lootlistSize); PropStream propStreamList; propStreamList.init(autolootlist, lootlistSize); int16_t value; int16_t item = propStreamList.read<int16_t>(value); while (item) { player->addItemToAutoLoot(value); item = propStreamList.read<int16_t>(value); } }  
    acima de:
    //save inbox items adicione:
    query.str(std::string()); query << "DELETE FROM `player_autoloot` WHERE `player_id` = " << player->getGUID(); if (!db.executeQuery(query.str())) { return false; } PropWriteStream propWriteStreamAutoLoot; for (auto i : player->autoLootList) { propWriteStreamAutoLoot.write<uint16_t>(i); } size_t lootlistSize; const char* autolootlist = propWriteStreamAutoLoot.getStream(lootlistSize); query.str(std::string()); DBInsert autolootQuery("INSERT INTO `player_autoloot` (`player_id`, `autoloot_list`) VALUES "); query << player->getGUID() << ',' << db.escapeBlob(autolootlist, lootlistSize); if (!autolootQuery.addRow(query)) { return false; } if (!autolootQuery.execute()) { return false; }  
    em sua database, execute esta query
    CREATE TABLE player_autoloot ( id int NOT NULL AUTO_INCREMENT, player_id int NOT NULL, autoloot_list blob, PRIMARY KEY (id) );  
    agora vá em data/scripts/talkactions e crie esse arquivo LUA
     
    autoloot.lua
    local talk = TalkAction("!autoloot") function talk.onSay(player, words, param) local i = player:getAutoLootList() local cache = "Check your loot list: " local split = param:split(",") local action = split[1] if param == "list" then if i then for _, item in ipairs(i) do cache = cache .. (ItemType(item)):getName() .. ", " end else player:sendTextMessage(MESSAGE_INFO_DESCR, "Your list is empty! Add some item and try again.") return false end player:sendTextMessage(MESSAGE_INFO_DESCR, cache:sub(1, -3)) return false end if action == "add" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getName() == '' then player:sendCancelMessage("There is no item with that id or name.") return false end end if player:getItemFromAutoLoot(itemType:getId()) then player:sendCancelMessage("You're already autolooting this item.") return false end player:addItemToAutoLoot(itemType:getId()) player:sendTextMessage(MESSAGE_INFO_DESCR, "You're now auto looting " .. itemType:getName()) return false elseif action == "remove" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getName() == '' then player:sendCancelMessage("There is no item with that id or name.") return false end end if player:getItemFromAutoLoot(itemType:getId()) then player:removeItemFromAutoLoot(itemType:getId()) player:sendTextMessage(MESSAGE_INFO_DESCR, "You removed the " .. itemType:getName() .. " from your loot list.") else player:sendCancelMessage("This item does not exist in your loot list.") end return false end player:sendTextMessage(MESSAGE_EVENT_ORANGE, "Auto Loot commands (items are automatically moved to your bp if you open monster corpse):"..'\n'.."!addloot add, nameItem - add item to auto loot by name"..'\n'.."!autoloot remove, itemName - remove item from auto loot by name"..'\n'.."!autoloot list - list your current auto loot items") return false end talk:separator(" ") talk:register()  
     
    É isso, espero que gostem do sisteminha
    Se você encontrar algum bug, deixe-me saber.

    Falta fazer:
    Optimizar a mensagem de loot.
    Adicionar ModalWindow.
     
    Cheers~
     

  19. Curtir
    lordzetros recebeu reputação de nyedsonnyel em [TFS 1.3] Teleport com janela   
    TFS 1.3 - TESTADO EM VERSÃO 10.98
    * Introdução *
     
        Bom, estive navegando no Fórum e vi que o usuário @Cleiton Felipi pediu um script que ao player entrasse no teleport de um X monstro, um Demon por exemplo, listasse qual hunt o jogador queria entrar. Achei interessante, e resolvi desenvolver e postar no TK, já que não tinha ainda, :).
     
     
     
    * Sobre o sistema *
     
         Você utiliza diversas hunts com vários tps criados no mapa no seu servidor do mesmo monstro? Bom, este script será muito útil para você! Pois ele permitirá que você habilite ao jogador em qual hunt ele quer caçar, por exemplo, se tiver Demon 01, Demon 02, Demon 03, Demon X, basta apenas você criar um tp indicando o monstro e que uma janela irá aparecer com a lista de opções de hunts, prático, né? Segue imagens de demonstração:


     
     
    OBS¹.: Você pode colocar TODOS OS MONSTROS neste script, contando que tenha o actionID que ficará no teleporte, não é de uma quantidade limitada, em outras palavras, você pode adicionar as hunts de Demon, Frost Dragon, Dragon, ..., tudo aqui, apenas mudando o actionID (tudo configurável, não se preocupe).
     
    * Instalação *
     
    Em data/movements/scripts/ crie um arquivo chamado mov_janela_hunts.lua e adicione dentro:
    --[[ Script - Lordzetros Fórum Tibia King ]] local config = { titulo = "BEM VINDO(A) A JANELA DE HUNTS!", -- Título da Janela mensagem = "Selecione qual hunt voce deseja ir:", -- Mensagem abaixo do título da janela } CONFIG_TPS_JANELA = { [19090] = { -- ID do action que ficará no portal da hunt {nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado {nome = "Demon 02", pos = {x = 93, y = 144, z = 7}}, {nome = "Demon 03", pos = {x = 91, y = 140, z = 7}}, {nome = "Demon 04", pos = {x = 94, y = 138, z = 7}}, {nome = "Demon 05", pos = {x = 95, y = 136, z = 7}}, }, [19091] = { {nome = "Frost 01", pos = {x = 98, y = 140, z = 7}}, {nome = "Frost 02", pos = {x = 93, y = 145, z = 7}}, {nome = "Frost 03", pos = {x = 91, y = 141, z = 7}}, {nome = "Frost 04", pos = {x = 94, y = 139, z = 7}}, {nome = "Frost 05", pos = {x = 95, y = 137, z = 7}}, }, } function onStepIn(creature, item, pos, fromPosition) if ((CONFIG_TPS_JANELA[item:getActionId()]) and creature:isPlayer()) then JANELA_TP_ACTION = item:getActionId() creature:teleportTo(fromPosition, true) creature:registerEvent("janela hunts") local janela = ModalWindow(1000, config.titulo, config.mensagem) for i, v in ipairs(CONFIG_TPS_JANELA[JANELA_TP_ACTION]) do janela:addChoice(i, v.nome) end janela:addButton(100, "Confirmar") janela:addButton(101, "Fechar") janela:setDefaultEnterButton(100) janela:setDefaultEscapeButton(101) janela:sendToPlayer(creature) end return true end  
    Em data/movements/movements.xml adicione o seguinte código abaixo de um semelhante:
    <movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" />  
     
    Agora em data/creaturescripts/scripts/ crie um arquivo chamado creature_janela_hunts.lua e adicione dentro:
    function onModalWindow(player, modalWindowId, buttonId, choiceId) player:unregisterEvent("janela hunts") if (modalWindowId == 1000) then if (buttonId == 100) then local tele_pos = CONFIG_TPS_JANELA[JANELA_TP_ACTION][choiceId].pos player:teleportTo(tele_pos) local pos_t = Position(tele_pos) pos_t:sendMagicEffect(CONST_ME_MAGIC_BLUE) end end return true end  
    Em data/creaturescripts/creaturescripts.xml adicione o seguinte código abaixo de um semelhante:
    <event type="ModalWindow" name="janela hunts" script="creature_janela_hunts.lua"/>  
    * Configuração *
        Bom, apesar de que não seja difícil de configurar, é necessário uma explicação, vamos lá...
    1 - 
    [19090] = { -- ID do action que ficará no portal da hunt {nome = "Demon 01", pos = {x = 98, y = 139, z = 7}}, -- Segue padrão, nome da cave e posição que o player será teleportado {nome = "Demon 02", pos = {x = 93, y = 144, z = 7}}, {nome = "Demon 03", pos = {x = 91, y = 140, z = 7}}, {nome = "Demon 04", pos = {x = 94, y = 138, z = 7}}, {nome = "Demon 05", pos = {x = 95, y = 136, z = 7}}, }, Em [19090] este número de dentro é o actionID que ficará no portal. Com ele será identificado de qual monstro se trata, bastando apenas configurar este número e o nome das opções de monstros que você quer aparecendo na janela, em seguida, a posição na qual o jogador será teleportado, seguindo a ordem. Segue imagem de como deve ficar o seu portal:

    OBS²: VOCÊ EDITA O ACTIONID NO SEU EDITOR DE MAPA COLOCANDO NO ID DO ITEM DE TELEPORTE.
    OBS³: PARA ADICIONAR NOVAS HUNTS NO SCRIPT, BASTA SEGUIR O PADRÃO QUE ESTÁ NO CÓDIGO, DO 19090 PARA O 19091.
     
    2 - (por fim)
    Em data/movements/movements.xml
    <movevent event="StepIn" itemid="5023" script="mov_janela_hunts.lua" /> itemID = Id do item que o player andará para abrir a janela de hunt
    Está como 5023 por conta que o magic forcefield é 5023, no qual utilizei para teste, aconselho você deixar da mesma forma (caso seja o mesmo id no seu servidor), ou mude, mas cuidado para não cometer algum erro.
     
     
    Enfim, algo simples, porém não encontrei no TK.
    Abraços.  
     
     
  20. Gostei
    lordzetros recebeu reputação de Semideus em SHOW OFF - Launcher 'Kamity'   
    Bem bacana, cara. ?
  21. Curtir
    lordzetros deu reputação a Kamity em SHOW OFF - Launcher 'Kamity'   
    Eae galera do TK, vim mostrar para vocês um projeto meu que esta em andamento Launcher Update baseado na temática do Cliente 12 do global.
     
    Contato
        Discord: Guilherme#3515
        Github: Yokaito
    Features
        ▸ Mostrando numero real de players online do servidor.
        ▸ Autoupdate
            ▪ Verifica no seu site se existe uma nova versão caso exista o launcher baixa o zip e extrai na pasta do usuário.
                ◈ PS: Ou seja não precisa colocar todo o cliente em si para baixar de novo apenas os arquivos modificados.
        ▸ Barra de progresso de download e extração com % em real time.
        ▸ Tag dentro do launcher mostrando a versão atual do cliente do seu servidor.
        ▸ Box (Direita) de Boss spawnado no servidor.
        ▸ Ultima newsticker lançada no seu site.
        ▸ Box (Esquerda) de Top level do servidor com outfit.
        ▸ Nome ot, background, logo, lista do boss com horário para cada dia da semana, todo totalmente configuráveis.
    Upcoming Features   
           ▸ Botão para saber o horário do próximo boss (atualmente aparece apenas o que foi spawnado).
    PS: Estou em processo de finalização de edição do layout do Launcher junto com as features que citei logo acima.
     
    Versão Final do launcher. Essa e a primeira release dele. Tudo que for implementado daqui pra frente sao novas features. Todas que citei acima foram implementadas com sucesso.

     
    Créditos
        Base: Launcher AutoUpdate C# (Usei como inspiração para o back-end reescrevendo o código e adicionando novas funcionalidades e validações para erros).
        Kamity: Novas validações, novo layout e novas features.
     
  22. Curtir
    lordzetros recebeu reputação de Semideus em [TFS 1.3] TARO EVENT - Novo evento para OT   
    * Apresentação *
    Bom, galera, tá tudo explicado no vídeo de como funciona o evento [Manual e Automático], como configurar o arquivo e tudo mais.
    Arquivos do evento estão anexado no tópico, assim como o vírus scan também, :). 
     
     
    * Vídeo * 
          
     
    * Comandos *
    !taro abrir 
    Utilizado por staffs para abrir o evento [Manual]
     
    !taro fechar
    Utilizado por staffs para fechar o evento [Manual]
     
    !taro encerrar
    Utilizado por staffs para encerrar o evento [Manual]
     
    !taro kick,nome_jogador
    Utilizado por staffs e PLAYERS para kickar alguém do evento
     
     
    * Links * 
    Vírus scan: https://www.virustotal.com/pt/file/7b30879de2745ef020a06de135dae7bd80673eb0d5d2f80b22b1f2a6db5158e0/analysis/1548894947/
    Download: Taro Event - Lordzetros.zip
     
     
     
    Dúvidas, sugestões, críticas ou bugs? Deixe abaixo,  
  23. Gostei
    lordzetros recebeu reputação de bim em Fly System com modal 1.3   
    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:
     
    2 - Em seguida, cole este trecho de código em data/talkactions/talkactions.xml abaixo de algum semelhante:
     

    3 - Agora crie um arquivo chamado modalTpSystem.lua em data/creaturescripts/scripts/ e cole o código abaixo nele:
     
    4 - E para finalizar, cole este código em data/creaturescripts/creaturescripts.xml abaixo de um semelhante:
     
     
    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, .
  24. Gostei
    lordzetros recebeu reputação de Pedro. em [Link Quebrado] Teleports Room | 10.98   
    Ae, DdJs, acho que você precisa postar mais mapas para ver se anima mais o @Yinz, viu, ( ͡° ͜ʖ ͡°).
    Ah, e valeu pelos mapas, gente boa.
  25. Haha
    lordzetros recebeu reputação de DdJs em [Link Quebrado] Teleports Room | 10.98   
    Ae, DdJs, acho que você precisa postar mais mapas para ver se anima mais o @Yinz, viu, ( ͡° ͜ʖ ͡°).
    Ah, e valeu pelos mapas, gente boa.

Informação Importante

Confirmação de Termo