Postado Novembro 3, 2021 3 anos .Qual servidor ou website você utiliza como base? TFS 1.3 8.60 Qual o motivo deste tópico? eu segui um tutorial do tibiaking pra aumentar o limite de effect, so que so aumentou no comando !z "talkactions" em spells ainda ta limitado em 255. link do tutorial que eu segui: https://tibiaking.com/forums/topic/100438-programação-magic-e-shoot-effects-tfs-e-otx-13-versão-860/ Está surgindo algum erro? Se sim coloque-o aqui. Citar Você tem o código disponível? Se tiver publique-o aqui: Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
Postado Novembro 4, 2021 3 anos Em 03/11/2021 em 08:40, elielder disse: .Qual servidor ou website você utiliza como base? TFS 1.3 8.60 Qual o motivo deste tópico? eu segui um tutorial do tibiaking pra aumentar o limite de effect, so que so aumentou no comando !z "talkactions" em spells ainda ta limitado em 255. link do tutorial que eu segui: https://tibiaking.com/forums/topic/100438-programação-magic-e-shoot-effects-tfs-e-otx-13-versão-860/ Está surgindo algum erro? Se sim coloque-o aqui. Você tem o código disponível? Se tiver publique-o aqui: Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. Boa tarde @elielder Vamos começar primeiramente com os Magic Effects Em const.h procure por: enum MagicEffectClasses : uint8_t { mude: enum MagicEffectClasses : uint16_t { procure por: CONST_ME_DRAGONHEAD = 70 abaixo adiciona: CONST_ME_DRAGONHEAD = 70, CONST_ME_SEMFIM = 0xFFFE //65534 Em tools.cpp Procure por: MagicEffectNames magicEffectNames = { Ache por último: {"dragonhead", CONST_ME_DRAGONHEAD}, Abaixo adiciona: {"dragonhead", CONST_ME_DRAGONHEAD}, {"semfim", CONST_ME_SEMFIM}, Em Protocolgame.cpp Procure por: void ProtocolGame::sendMagicEffect(const Position& pos, uint8_t type) { if (!canSee(pos)) { return; } NetworkMessage msg; msg.addByte(0x83); msg.addPosition(pos); msg.addByte(type); writeToOutputBuffer(msg); } Mude por: void ProtocolGame::sendMagicEffect(const Position& pos, uint16_t type) { if (!canSee(pos)) { return; } NetworkMessage msg; msg.addByte(0x83); msg.addPosition(pos); msg.add<uint16_t>(type); writeToOutputBuffer(msg); } Em Protcolgame.h Procure por: void sendMagicEffect(const Position& pos, uint8_t type); Mude por: void sendMagicEffect(const Position& pos, uint16_t type); Em Game.cpp Procure por: void Game::addMagicEffect(const Position& pos, uint8_t effect) { SpectatorVec spectators; map.getSpectators(spectators, pos, true, true); addMagicEffect(spectators, pos, effect); } Mude por: void Game::addMagicEffect(const Position& pos, uint16_t effect) { SpectatorVec spectators; map.getSpectators(spectators, pos, true, true); addMagicEffect(spectators, pos, effect); } Procure por: void Game::addMagicEffect(const SpectatorVec& spectators, const Position& pos, uint8_t effect) { for (Creature* spectator : spectators) { if (Player* tmpPlayer = spectator->getPlayer()) { tmpPlayer->sendMagicEffect(pos, effect); } } } Mude Por: void Game::addMagicEffect(const SpectatorVec& spectators, const Position& pos, uint16_t effect) { for (Creature* spectator : spectators) { if (Player* tmpPlayer = spectator->getPlayer()) { tmpPlayer->sendMagicEffect(pos, effect); } } } Em game.h Procure por: void addMagicEffect(const Position& pos, uint8_t effect); Mude por: void addMagicEffect(const Position& pos, uint16_t effect); Procure por: static void addMagicEffect(const SpectatorVec& spectators, const Position& pos, uint8_t effect); Mude por: static void addMagicEffect(const SpectatorVec& spectators, const Position& pos, uint16_t effect); Em player.h Procure por: void sendMagicEffect(const Position& pos, uint8_t type) const { if (client) { client->sendMagicEffect(pos, type); } } Mude por: void sendMagicEffect(const Position& pos, uint16_t type) const { if (client) { client->sendMagicEffect(pos, type); } } Programa Baixar: http://www.handshake.de/user/chmaas/delphi/download/xvi32_254.zip CTRL + F Hex Editor Procure por: A7 95 0E 00 0F B6 C0 Mude: 47 97 0E 00 0F B7 C0 Salve Tibia.exe Recompilar a sua source tfs 1.3 e fixar magic effect. Aguardo em DistanceShoot (Missile) Eu aposto a codigo tudo fixar em testamos TFS 1.3 e 1.4. Work in Magic Effects Editado Novembro 4, 2021 3 anos por Mask Ghoul Esqueci posta uma print eu fui testado em /z deu funcionado. com source perfeito. (veja o histórico de edições)
Postado Novembro 4, 2021 3 anos Autor 20 minutos atrás, Mask Ghoul disse: Boa tarde @elielder Vamos começar primeiramente com os Magic Effects Em const.h procure por: enum MagicEffectClasses : uint8_t { mude: enum MagicEffectClasses : uint16_t { procure por: CONST_ME_DRAGONHEAD = 70 abaixo adiciona: CONST_ME_DRAGONHEAD = 70, CONST_ME_SEMFIM = 0xFFFE //65534 Em tools.cpp Procure por: MagicEffectNames magicEffectNames = { Ache por último: {"dragonhead", CONST_ME_DRAGONHEAD}, Abaixo adiciona: {"dragonhead", CONST_ME_DRAGONHEAD}, {"semfim", CONST_ME_SEMFIM}, Em Protocolgame.cpp Procure por: void ProtocolGame::sendMagicEffect(const Position& pos, uint8_t type) { if (!canSee(pos)) { return; } NetworkMessage msg; msg.addByte(0x83); msg.addPosition(pos); msg.addByte(type); writeToOutputBuffer(msg); } Mude por: void ProtocolGame::sendMagicEffect(const Position& pos, uint16_t type) { if (!canSee(pos)) { return; } NetworkMessage msg; msg.addByte(0x83); msg.addPosition(pos); msg.add<uint16_t>(type); writeToOutputBuffer(msg); } Em Protcolgame.h Procure por: void sendMagicEffect(const Position& pos, uint8_t type); Mude por: void sendMagicEffect(const Position& pos, uint16_t type); Em Game.cpp Procure por: void Game::addMagicEffect(const Position& pos, uint8_t effect) { SpectatorVec spectators; map.getSpectators(spectators, pos, true, true); addMagicEffect(spectators, pos, effect); } Mude por: void Game::addMagicEffect(const Position& pos, uint16_t effect) { SpectatorVec spectators; map.getSpectators(spectators, pos, true, true); addMagicEffect(spectators, pos, effect); } Procure por: void Game::addMagicEffect(const SpectatorVec& spectators, const Position& pos, uint8_t effect) { for (Creature* spectator : spectators) { if (Player* tmpPlayer = spectator->getPlayer()) { tmpPlayer->sendMagicEffect(pos, effect); } } } Mude Por: void Game::addMagicEffect(const SpectatorVec& spectators, const Position& pos, uint16_t effect) { for (Creature* spectator : spectators) { if (Player* tmpPlayer = spectator->getPlayer()) { tmpPlayer->sendMagicEffect(pos, effect); } } } Em game.h Procure por: void addMagicEffect(const Position& pos, uint8_t effect); Mude por: void addMagicEffect(const Position& pos, uint16_t effect); Procure por: static void addMagicEffect(const SpectatorVec& spectators, const Position& pos, uint8_t effect); Mude por: static void addMagicEffect(const SpectatorVec& spectators, const Position& pos, uint16_t effect); Em player.h Procure por: void sendMagicEffect(const Position& pos, uint8_t type) const { if (client) { client->sendMagicEffect(pos, type); } } Mude por: void sendMagicEffect(const Position& pos, uint16_t type) const { if (client) { client->sendMagicEffect(pos, type); } } Programa Baixar: http://www.handshake.de/user/chmaas/delphi/download/xvi32_254.zip CTRL + F Hex Editor Procure por: A7 95 0E 00 0F B6 C0 Mude: 47 97 0E 00 0F B7 C0 Salve Tibia.exe Recompilar a sua source tfs 1.3 e fixar magic effect. Aguardo em DistanceShoot (Missile) Eu aposto a codigo tudo fixar em testamos TFS 1.3 e 1.4. ainda continuo com o mesmo erro segue a spell que eu uso: Spoiler local config = { spellName = "Katon Gouryuuka no jutsu", going_up_effet = 10, -- efeito subindo falling_down = 627, -- efeito descendo effect_explosionz = 754, -- efeito da explosão faz o teste ai cooldown = 5 -- cooldown } local arr = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr_two = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr_three = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr_four = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr_four = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr_five = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr_explosion = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local arr_explosion_two = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_KATON) combat:setParameter(COMBAT_PARAM_EFFECT, config.going_up_effet) combat:setArea(createCombatArea(arr)) local falling_down = Combat() falling_down:setParameter(COMBAT_PARAM_TYPE, COMBAT_KATON) falling_down:setParameter(COMBAT_PARAM_EFFECT, config.going_up_effet) falling_down:setArea(createCombatArea(arr_two)) local falling_down_two = Combat() falling_down_two:setParameter(COMBAT_PARAM_TYPE, COMBAT_KATON) falling_down_two:setParameter(COMBAT_PARAM_EFFECT, config.going_up_effet) falling_down_two:setArea(createCombatArea(arr_three)) local falling_down_three = Combat() falling_down_three:setParameter(COMBAT_PARAM_TYPE, COMBAT_KATON) falling_down_three:setParameter(COMBAT_PARAM_EFFECT, config.going_up_effet) falling_down_three:setArea(createCombatArea(arr)) local falling_down_four = Combat() falling_down_four:setParameter(COMBAT_PARAM_TYPE, COMBAT_KATON) falling_down_four:setParameter(COMBAT_PARAM_EFFECT, config.going_up_effet) falling_down_four:setArea(createCombatArea(arr_two)) local falling_down_five = Combat() falling_down_five:setParameter(COMBAT_PARAM_TYPE, COMBAT_KATON) falling_down_five:setParameter(COMBAT_PARAM_EFFECT, config.going_up_effet) falling_down_five:setArea(createCombatArea(arr_three)) local effect_explosion = Combat() effect_explosion:setParameter(COMBAT_PARAM_TYPE, COMBAT_KATON) effect_explosion:setParameter(COMBAT_PARAM_EFFECT, config.effect_explosionz) effect_explosion:setArea(createCombatArea(arr_explosion)) local effect_explosion_two = Combat() effect_explosion_two:setParameter(COMBAT_PARAM_TYPE, COMBAT_KATON) effect_explosion_two:setParameter(COMBAT_PARAM_EFFECT, config.effect_explosionz) effect_explosion_two:setArea(createCombatArea(arr_explosion_two)) function onGetFormulaValues(player, skill, attack, factor) local magic_level = player:getBaseMagicLevel() local min = (player:getLevel() / 5) + (magic_level * 7.5) + (skill * attack * 0.2) + 14 local max = (player:getLevel() / 5) + (magic_level * 12.5) + (skill * attack * 0.6) + 23 return -min, -max end function onGetFormulaValues_two(player, skill, attack, factor) local magic_level = player:getBaseMagicLevel() local min = (player:getLevel() / 5) + (magic_level * 7.5) + (skill * attack * 0.2) + 14 local max = (player:getLevel() / 5) + (magic_level * 12.5) + (skill * attack * 0.6) + 23 return -min, -max end function onGetFormulaValues_three(player, skill, attack, factor) local magic_level = player:getBaseMagicLevel() local min = (player:getLevel() / 5) + (magic_level * 7.5) + (skill * attack * 0.2) + 14 local max = (player:getLevel() / 5) + (magic_level * 12.5) + (skill * attack * 0.6) + 23 return -min, -max end function onGetFormulaValues_four(player, skill, attack, factor) local magic_level = player:getBaseMagicLevel() local min = (player:getLevel() / 5) + (magic_level * 7.5) + (skill * attack * 0.2) + 14 local max = (player:getLevel() / 5) + (magic_level * 12.5) + (skill * attack * 0.6) + 23 return -min, -max end function onGetFormulaValues_five(player, skill, attack, factor) local magic_level = player:getBaseMagicLevel() local min = (player:getLevel() / 5) + (magic_level * 7.5) + (skill * attack * 0.2) + 14 local max = (player:getLevel() / 5) + (magic_level * 12.5) + (skill * attack * 0.6) + 23 return -min, -max end function onGetFormulaValues_six(player, skill, attack, factor) local magic_level = player:getBaseMagicLevel() local min = (player:getLevel() / 5) + (magic_level * 7.5) + (skill * attack * 0.2) + 14 local max = (player:getLevel() / 5) + (magic_level * 12.5) + (skill * attack * 0.6) + 23 return -min, -max end combat:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") falling_down:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues_two") falling_down_two:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues_three") falling_down_three:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues_four") falling_down_four:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues_five") falling_down_five:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues_six") local function areaEffet(creature_id) local creature = Creature(creature_id) local position = creature:getPosition() local position_one = position + Position(0, 2, 0) local position_two = position + Position(1, 3, 0) local position_three = position + Position(3, 1, 0) position_one:sendMagicEffect(config.falling_down) position_two:sendMagicEffect(config.falling_down) position_three:sendMagicEffect(config.falling_down) end local function areaEffet_two(creature_id) local creature = Creature(creature_id) local position = creature:getPosition() local position_one = position + Position(1, -2, 0) local position_two = position + Position(3, 1, 0) local position_three = position + Position(-1, 2, 0) position_one:sendMagicEffect(config.falling_down) position_two:sendMagicEffect(config.falling_down) position_three:sendMagicEffect(config.falling_down) end local function sendEffects(creature_id) local creature = Creature(creature_id) addEvent(function() if not creature:isRemoved() then areaEffet(creature:getId()) end end, 900) addEvent(function() if not creature:isRemoved() then areaEffet_two(creature:getId()) end end, 1800) addEvent(function() if not creature:isRemoved() then areaEffet(creature:getId()) end end, 2700) end function onCastSpell(creature, variant) if creature:InCooldown(STORAGE_MADARA_GOURYUUKA) then creature:sendTextMessage(MESSAGE_EVENT_DEFAULT, config.spellName.." está em cooldown, aguarde (" ..creature:getCooldown(STORAGE_MADARA_GOURYUUKA)..") para usar novamente") return end addEvent(function() if not creature:isRemoved() then creature:say("Gouryuuka no jutsu!", TALKTYPE_MONSTER_YELL) end end, 250) local creature_target = creature:getTarget() sendEffects(creature:getId()) addEvent(function() if not creature:isRemoved() or not creature_target:isRemoved() then combat:execute(creature, variant) addEvent(function() if not creature:isRemoved() or not creature_target:isRemoved() then falling_down:execute(creature, variant) effect_explosion:execute(creature, variant) end end, 700) addEvent(function() if not creature:isRemoved() or not creature_target:isRemoved() then falling_down_two:execute(creature, variant) effect_explosion_two:execute(creature, variant) end end, 1600) addEvent(function() if not creature:isRemoved() or not creature_target:isRemoved() then falling_down_three:execute(creature, variant) effect_explosion:execute(creature, variant) end end, 2500) addEvent(function() if not creature:isRemoved() or not creature_target:isRemoved() then falling_down_four:execute(creature, variant) effect_explosion_two:execute(creature, variant) end end, 3400) addEvent(function() if not creature:isRemoved() or not creature_target:isRemoved() then falling_down_five:execute(creature, variant) effect_explosion:execute(creature, variant) end end, 4300) addEvent(function() if not creature:isRemoved() or not creature_target:isRemoved() then falling_down:execute(creature, variant) effect_explosion_two:execute(creature, variant) end end, 5200) addEvent(function() if not creature:isRemoved() or not creature_target:isRemoved() then falling_down_four:execute(creature, variant) effect_explosion:execute(creature, variant) end end, 6100) addEvent(function() if not creature:isRemoved() or not creature_target:isRemoved() then falling_down_two:execute(creature, variant) effect_explosion_two:execute(creature, variant) end end, 7000) end end, 6000) creature:setCooldown(STORAGE_MADARA_GOURYUUKA, config.cooldown) return true end bug esta ocorrendo dessa forma: o effect 627 sai corretamente, o effect 10 sai corretamente mas o 754 não sai, em vez de sair o 754 sai o 242. Só sai 1 effect acima de 255. os outros dois so sai a baixo de 255. tem algum limitador ou bug. não sei oq esta acontecendo. nesse exemplo: o effect verde do susano é 254, junto deveria aparecer o effect 256 mas nao aparece.
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.