Ir para conteúdo

Underewar

Diretor de Projetos
  • Registro em

  • Última visita

Tudo que Underewar postou

  1. Não é possivel te ajudar com essas informações, informe o servidor/base que você usa e se possível o link para download caso esteja disponível.
  2. Parece que você está tentando aplicar um bônus multiplicador de dano com base no nível do jogador. Eu percebi que você está usando getPlayerDamageMultiplier(pid) para obter o multiplicador de dano do jogador, mas você mencionou que getDamageMultiplier está retornando nil. Troque a sua função add bonus por essa e faça o teste. local function addBonuses(pid) local bonus = getInfo(pid) if bonus and bonus.damage_percent then local currentMultiplier = getPlayerDamageMultiplier(pid) or 1.0 setPlayerDamageMultiplier(pid, currentMultiplier + (bonus.damage_percent / 100.0)) local mensagem = "[SISTEMA DE BÔNUS]\nVocê recebeu um bônus de +" .. bonus.damage_percent .. "% de dano." doPlayerSendTextMessage(pid, MESSAGE_EVENT_ADVANCE, mensagem) doRemoveItem(item.uid, 1) end end Em todo caso essa função getPlayerDamageMultiplier deveria existir nesse contexto, caso não exista você pode adicionar na suas funções existentes ou criar um arquivo separado. damage_multiplier_lib.lua DamageMultiplierLib = {} -- Function to get the player's damage multiplier function DamageMultiplierLib.getPlayerDamageMultiplier(playerId) local player = Player(playerId) if player then return player:getDamageMultiplier() end return nil end -- Function to set the player's damage multiplier function DamageMultiplierLib.setPlayerDamageMultiplier(playerId, value) local player = Player(playerId) if player then player:setDamageMultiplier(value) end end -- Return the library table return DamageMultiplierLib Se você adicionar essa função a cima então atualizei o seu script na função addBonus -- local DamageMultiplierLib = require("damage_multiplier_lib") LEMBRE-SE DE IMPORTAR A LIB A CIMA PARA FUNCIONA CORRETAMENTE! -- Your existing code local function addBonuses(playerId) local bonus = getInfo(playerId) if bonus and bonus.damage_percent then local currentMultiplier = DamageMultiplierLib.getPlayerDamageMultiplier(playerId) or 1.0 DamageMultiplierLib.setPlayerDamageMultiplier(playerId, currentMultiplier + (bonus.damage_percent / 100.0)) local mensagem = "[SISTEMA DE BÔNUS]\nVocê recebeu um bônus de +" .. bonus.damage_percent .. "% de dano." doPlayerSendTextMessage(playerId, MESSAGE_EVENT_ADVANCE, mensagem) doRemoveItem(item.uid, 1) end end Não testei.
  3. Movido para area correta.
  4. Underewar postou uma resposta no tópico em Outros Bots
    Não é tão simples acho que você deveria começar por aqui. Game Hacking Tutorials - Guided Hacking Inicialmente você pode começar com cheat engine procurando offsets mais simples como textos ou inteiros, no entanto futuramente pode altera e começar usar o IDA para passar instruções diretamente via HEX. Não é um processo muito facil, existem DLLS disponiveis que podem facilitar no entanto se você não tem nem um conhecimento sobre Engenharia reversa, dedveria procurar alguns tutorial com cheat engine bem faceis. Enfim é um longo caminho espero que consiga algum recurso util no link acima.
  5. Também demorei a entender na verdade porque pegamos de fontes ruims e acaba que mais confundi do que ajuda a entender, no entanto esse simples sistema garante ao scripter a possiblidade de criar novas funcionalidades usando como base! Fico feliz que tenha ajudado a entender melhor sobre o assunto!
  6. Tutorial: Criando um Sistema de Enviar efeito com OTClient. Neste tutorial, vamos criar um sistema simples de Enviar efeito no OTClient. Este sistema permitirá que os jogadores ativem um efeito especial e vejam uma janela ao clicar em um botão específico. Pré-requisitos: Ambiente de Desenvolvimento: Certifique-se de ter um ambiente de desenvolvimento configurado com OTClient Edubart. Conhecimento Básico em Lua: Familiaridade com a linguagem de script Lua. Passo 1: Estrutura do projeto Organize seu projeto conforme abaixo: OTC / MODS Passo 2: Criando a Interface Gráfica (OTUI) game_pass.otui Repare que em nossa interface nossos botões de ação entram no caminho do module e iniciam uma função que esta disponivel em nosso game_pass.lua (Client-Side) Passo 3: Criando funções Client-Side Agora com as funções criada podemos chamar elas de acordo com a necessidade em nosso arquivo de interface. Por exemplo a função effect() que foi chamada em nosso arquivo de interface.otui agora é criada aqui para mostrar o efeito ao jogador. game_pass.lua Passo 4: Registrando o novo Mod Agora podemos registrar e iniciar nosso modulo usando o arquivo de configuração game_pass.otmod Feito isso ja podemos ver nosso module no client e enviar opcodes através do gameprotocol e também receber o buffer para manipular os dados podemos utilizar : protocolGame:sendExtendedOpcode(14, "1") Basicamente oque estamos fazendo é armazenando o valor 1 na variaval 14 do ExtendedOpcode e futuramente podemos recuperar esse valor. Recuperamos esse valor em nosso server side data/creatuerscript/otc/game_pass.lua Verificando se o opcode é 14 se for 14 então fazemos x ação. Show, tendo isso em mente para que o nosso client-side consiga receber com sucesso o efeito enviado ao jogador então utilizamos Passo 5: Criando o Server-side responsavel por enviar o efeito correto ao jogador dependendo do opcode selecionado no nosso cliente. data/creaturescripts/otc/game_pass.lua Passo 6: Registrando o evento para evitar erros futuros! Para que tudo funcione corretamente sem erros é necessário registrar o evento no creaturescript.xml / login.lua creaturescript.xml <event type="extendedopcode" name="GamePass" script="otc/game_pass.lua" /> login.lua player:registerEvent("GamePass") Ótimo agora ao selecionar o menu recompensa o jogador recebera um efeito. Espero que tenha ficado claro como usar Opcodes/ExetendedOpcodes. Arquivos usados no tutorrial: OTC MODULE game_pass.rar Creaturescript game_pass.lua Vi muitos tutoriais desatualizado então resolvi trazer esse! Reparem que nesse caso passamos creature como parametro do buffer isso porque precisamos enviar um efeito no player. Melhorando a formatação com JSON Encoder
  7. Basicamente isso é devido ao script responsável por atualizar o jogador na tfs podem ser encontrados aqui forgottenserver/src/iologindata.cpp at master · thetibiaking/forgottenserver (github.com) Você pode adicionar unique ids + storage nos items do servidor e verificar se foi clonado no entanto isso não vai ser nada eficiente, o melhor a se fazer é corrigir oque esta derrubando o servidor. Attacks ddos não conseguem desligar seu servidor, se quiser saber mais sobre ddos ou proteção de uma olhada aqui. [Linux] Proteção contra DDOS usando Módulo Dos_Evasive do Apache - Tutoriais Infraestrutura & Proteção - TibiaKing - Tudo sobre Tibia, OTServ e Bots!} Como o @FeeTads em casos mais avançados você pode usar o gdb. Como você disse o save acontece quando o personagem reloga e quando o server cai ele pega o ultimo save assim possibilitando o clone.
  8. Aqui esta. ---Config local conf = { maxSlotCount = 1, ignoredIds = {} } --End function choose(...) --- Function by mock. local arg = {...} return arg[math.random(1, #arg)] end if not getItemAttack then function getItemAttack(uid) return getItemAttribute(uid, 'attack') end function getItemDefense(uid) return getItemAttribute(uid, 'defense') end end local function isArmor(uid) -- Function by Mock the bear. if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then return true end return false end local function isWeapon(uid) -- Function by Mock the bear. uid = uid or 0 local f = getItemWeaponType(uid) if f == 1 or f == 2 or f == 3 then return true end return false end local function isShield(uid) -- Function by Mock the bear. uid = uid or 0 if getItemWeaponType(uid) == 4 then return true end return false end local function isBow(uid) -- Function by Mock the bear. uid = uid or 0 if getItemWeaponType(uid) == 5 and not isItemStackable(uid) then return true end return false end function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB) if item.uid == 0 or item.itemid == 0 then return false end toPosition.stackpos = 255 if item.uid == 0 or item.itemid == 0 then return false end toPosition.stackpos = 255 -- Check if the vocation is 4 (Paladin) or 5 (Knight) if getPlayerVocation(cid) ~= 4 and getPlayerVocation(cid) ~= 5 then doPlayerSendTextMessage(cid, 24, "Only Paladins and Knights can use this item.") return true end if isInArray(conf.ignoredIds, itemEx.itemid) or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5) or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx)) or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then doPlayerSendTextMessage(cid, 24, "You can't open a slot on this item.") return true end if isCreature(itemEx.uid) then return false end local nam = getItemName(itemEx.uid) function getper() local n = 1 for i = 1, 10 do n = n + math.random(0, 10) if n < 8 * i then break end end return n end function getSlotCount(nam) local c = 0 for _ in nam:gmatch('%[(.-)%]') do c = c + 1 end return c end if getSlotCount(nam) < conf.maxSlotCount then local l = choose('hp') local p = getper() doSendMagicEffect(toPosition, 30) nam = nam .. ' [' .. l .. '.+' .. p .. '%]' doSendAnimatedText(toPosition, l .. ' ' .. p .. '%', 120) doItemSetAttribute(itemEx.uid, 'name', nam) doRemoveItem(item.uid, 1) else doPlayerSendTextMessage(cid, 24, "You can't open a slot on this item.") end return true end
  9. Claro se possivel deixe a referencia da passiva atual.
  10. Movido para a area correta mais atenção na proxima. Acho que você esta com problemas no RME na hora de cadastrar casas então você pode configurar portas diretamente no seu RME data/ClientVersion/Walls.xml Configure as portas corretamente e use F5 apartir disso deve ser possivel inserir houseids nas portas normalmente. Pelo que vejo não ha problemas no sistemas de portas no servidor.
  11. Até onde eu sei os sons estão no cliente/server e não temos acesso ao código fonte do cliente então pegamos endereços e manipulamos, seria necessário uma dll ou alterar com ida ou outro software novos sounds no client da cip. No server side apenas referenciamos os sons ja configurados. Por não usar canary base eu imagino que se você utilizar o otcv8 ou mehah você não vai ter os sons disponiveis, isso porque não é server based e sim client based. Não existem muitas ferramentas para o client 13. Mas existe uma api capaz de manipular dados, o repositorio oficial esta desatualizado mas você encontra outros repositorios atualizados no github. https://github.com/jo3bingham/TibiaAPI Realmente não sei te dizer ao certo eu não uso atualmente nem um servidor com base canary e estou por fora de muitos updates do client 13x.
  12. Se não estou enganado agora é aqui Suporte & Pedidos - TibiaKing - Tudo sobre Tibia, OTServ e Bots!
  13. Pela descrição parece ser mto divertido!
  14. Legal! Boa sorte com o projeto.
  15. Underewar postou uma resposta no tópico em Suporte Tibia OTServer
    Qual seria o servidor ? você tem o link ? PDA ? Movido para área correta, mais atenção na próxima.
  16. GitHub - thetibiaking/ttk-my-aac: A free and open-source Automatic Account Creator (AAC) written in PHP
  17. Seria melhor adaptar o script em questão!
  18. https://github.com/thetibiaking/ttk-tfs-downgrade-8.60

Informação Importante

Confirmação de Termo