Ir para conteúdo

lordzetros

Membro
  • Registro em

  • Última visita

Tudo que lordzetros postou

  1. 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, .
  2. Parece bacana, boa sorte com o projeto. Tentarei acompanhar.
  3. 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
  4. No TFS 1.3 não tem função para adicionar o pzLocked que gostaria no jogador, portanto, modifique sua source com essas alterações: em Luascript.h static int luaPlayerPzLocked(lua_State* L); E em Luascript.cpp (cole abaixo de um semelhante) Código 1: registerMethod("Player", "pzLock", LuaScriptInterface::luaPlayerPzLocked); Código 2 (abaixo/acima de um semelhante também): int LuaScriptInterface::luaPlayerPzLocked(lua_State* L) { // player:pzLock(true/false, default = false) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } bool pzLock = getBoolean(L, 2, false); player->pzLocked = pzLock; return 1; } E para finalizar, vai na sua spell de magic wall e deixe desta forma: local combat = Combat() combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) combat:setParameter(COMBAT_PARAM_CREATEITEM, ITEM_MAGICWALL) function onCastSpell(creature, variant, isHotkey) creature:pzLock(true) return combat:execute(creature, variant) end
  5. @Eduardozim if (target->isInGhostMode() && targetPlayer->getAccountType() < ACCOUNT_TYPE_GAMEMASTER && targetPlayer->getAccountType() < ACCOUNT_TYPE_GOD) { Tá estranho essa verificação, no caso, você está bloqueando hit para todos os players que não são GOD (e estão invisível - detalhe: targetPlayer não foi instanciado na função), não acha? Posso está enganado, mas... se quer que o hit seja bloqueado apenas para GM para cima e que estejam invisíveis, seria mais ou menos assim: if (target->getPlayer() && target->isInGhostMode() && target->getPlayer()->getAccountType() > ACCOUNT_TYPE_SENIORTUTOR) {
  6. Pasta da sua source/vocation.h Uma variável chamada attackSpeed
  7. Só lhe ajudei em corrigir o erro, o crédito dos scripts é seu. ?
  8. lordzetros postou uma resposta no tópico em Tibia Global OTServer
    Triste ver gente só cobrando... e mal agradecem ao colega por disponibilizar um conteúdo muito bacana. Tão fácil dizer 'por favor', 'obrigado por compartilhar', etc...
  9. lordzetros postou uma resposta no tópico em Suporte Tibia OTServer
    Acredito que assim ficaria mais simples: Edição feita. @Vodkart observou um detalhe, acredito que já esteja corrigido. @agbuk faça o teste, colega.
  10. @Phineasz Por nada. Se quer um script melhor e mais eficiente, faça as alterações que trabalham com DB que @Vodkart postou e também no creature. Só uma dica.
  11. @Phineasz O problema está aí, colega, kkkk. A ideia do script, acredito eu, seja em que o jogador compre o documento por x points, assim ele pode efetuar a troca com algum outro player, no qual, esse documento continuará valendo x points. Veja: Quando o jogador digitar 'yes', o script criará o documento e em seguida dará ao jogador, mas ao mesmo tempo, está removendo do jogador o valor dos pontos 'trocados'. doPlayerRemovePoints(cid, Count_Points) Entendeu? @Phineasz Acabei de ver o script do creaturescripts, e realmente ele tá fazendo o check dos points, então, no caso, remova a linha do código do NPC a qual citei acima... doPlayerRemovePoints(cid, Count_Points)
  12. Tenho dúvida: O cara tava com 0 points e conseguiu comprar o documento de x points? Se sim, o problema está aí... o npc apenas remove os pontos que o player selecionou e em seguida dá o item para o jogador. O check está sendo quando ele tenta negociar com outro player, mas daí, ele já tinha o documento que descontou dos pontos no banco de dados dele...
  13. @Phineasz Quando eu achar uma base boa, kkkk. (acabei perdendo meus arquivos de servidores 8.6).
  14. Sobre o segundo, acredito que seja possível sim, em C++ tem-se a possibilidade de você pegar o nome do computador, usuário e outras informações (até mesmo do hardware, como o da placa mãe - GamersClub utiliza deste método para identificar cheaters que já foram banidos -). Com isso, basta você armazenar no banco de dados essas informações de cada jogador e fazer com que seja trabalhada de uma forma que quando o player for banido, seja lançada a identificação do mesmo na blacklist. Dá um pouco de trabalho, mas é algo que rende bastante para novas ideias do servidor, como baú diário de forma precisa e dentre outros...
  15. Vou acompanhar, gostei de que esteja trabalhando com TFS 1.3, talvez eu me interesse mais por derivados.
  16. Simples, porém útil. Muito bom, precisamos de mais conteúdos para 1.x.
  17. Bom, você disse que não sabe COMO fazer, então estou supondo que tenha conhecimento de mexer no script, correto? A função que você irá utilizar é onLogin (que pode ser no login.lua), mas recomendo utilizar no mesmo script. Verifique ao player logar, se o (valor do storage - os.time()) for maior do que 0, pois se for, quer dizer que ainda há tempo para o player com extraxp, com isso você usa o addEvent com a função de encerrar o bônus de xp que é dada pela mesma fórmula: valor do storage - os.time(), no qual irá retornar em SEGUNDOS, porém, o addEvent trabalha com mili, ou seja, valor do storage - os.time() * 1000 No script tá uma zona, cara, recomendo procurar outro... Esse while aí vai matar o teu servidor, temos a função onThink para creatures também.
  18. lordzetros postou uma resposta no tópico em Websites
    Quem tiver esse cara na equipe, pode dormir sossegado.
  19. @Yinz Opa, valeu! Se tem o selo de qualidade do Yinz, então tá valendo! haha, ?. Abç.
  20. * 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,
  21. @BilauX local min, max = 5000000,5000000 --Ataque mínimo e ataque máximo local w = { [1] = {ef = 46, sh = 29, dmg = COMBAT_FIREDAMAGE}, } function onUseWeapon(player, variant) local effect = player:getStorageValue(4561) local target = Creature(variant:getNumber()) if target then local wx = w[effect] or w[math.random(#w)] local target_pos = target:getPosition() player:getPosition():sendDistanceEffect(target_pos, wx.sh) addEvent(function() doAreaCombatHealth(player:getId(), wx.dmg, target_pos, 0, -min, -max, wx.ef) end, 100) end return true end
  22. @BilauX Por nada. Segue script do tópico: local rewards = { {9002, 1}, {9004, 1}, {9693, 1}, {2160, 100}, } local function get_players() local t = {} for _, c in ipairs(Game.getPlayers()) do if (c:getGroup():getId() == 1) then table.insert(t, c) end end return t end function onTime(interval) local players = get_players() if (#players > 0 and #rewards > 0) then local uid, n = math.random(1, #players), math.random(1, #rewards) local ganhador = players[uid] local reward, count = rewards[n][1], rewards[n][2] if (ganhador and reward and count) then ganhador:addItem(reward, count) Game.broadcastMessage('O player '.. ganhador:getName()..' recebeu '.. count .. ' '..ItemType(reward):getName()..' na loteria.', MESSAGE_STATUS_WARNING) end end return true end
  23. -- female, male local outfits = { ["citizen"] = {136, 128}, ["hunter"] = {137, 129}, ["mage"] = {138, 130}, ["knight"] = {139, 131}, ["noblewoman"] = {140, 132}, ["summoner"] = {141, 133}, ["warrior"] = {142, 134}, ["barbarian"] = {147, 143}, ["druid"] = {148, 144}, ["wizard"] = {149, 145}, ["oriental"] = {150, 146}, ["pirate"] = {155, 151}, ["assassin"] = {156, 152}, ["beggar"] = {157, 153}, ["shaman"] = {158, 154}, ["norsewoman"] = {252, 251}, ["nightmare"] = {269, 268}, ["jester"] = {270, 273}, ["brotherhood"] = {279, 278}, ["demonhunter"] = {288, 289}, ["yalaharian"] = {324, 325}, ["warmaster"] = {336, 335}, ["wayfarer"] = {366, 367}, ["afflicted"] = {431, 430}, ["elementalist"] = {433, 432}, ["deepling"] = {464, 463}, ["insectoid"] = {466, 465}, ["red baron"] = {471, 472}, ["crystal warlord"] = {513, 512}, ["soil guardian"] = {514, 516}, } local addondoll_id = 9693 function onSay(player, words, param) if player:getItemCount(addondoll_id) < 0 then player:sendCancelMessage("Voce nao tem addon doll!") return false end local split = param:split(",") local addonType = split[1] if not addonType then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "Por favor utilize o comando corretamente. !addon first, mage") return false end addonType = addonType:lower() if addonType ~= "first" and addonType ~= "second" or split[2] == nil then player:sendCancelMessage("Por favor use o comando corretamente. Exemplo: !addon first,mage") return false end local outfitName = split[2] local outfit = outfits[outfitName:lower()] if not outfit then player:sendCancelMessage("Não existe nenhuma Outfit com esse nome.") return false end local type = (addonType == "first" and 1) or 2 local ps = (player:getSex() == 1 and 2) or 1 if player:hasOutfit(outfit[ps], type) then player:sendCancelMessage("Voce ja tem este addon") return false end player:removeItem(addondoll_id, 1) player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:addOutfitAddon(outfit[1], type) player:addOutfitAddon(outfit[2], type) player:sendTextMessage(MESSAGE_INFO_DESCR, string.format('Você recebeu o %s do Addon %s.', addonType:lower(), outfitName:lower())) return false end

Informação Importante

Confirmação de Termo