Postado Outubro 25, 2023 1 ano salve rapaziada, vi que tem bastante procura por esse sistema de "proteção" contra player que por algum motivo ficam com proteção 100% de algum elemento ou dano, por exemplo MIGHT RING (-20% death) + SSA (-80% Death), totalizando 100% de proteção contra o elemento death, ou seja, o player fica imortal, pra previnir isso, vai aqui 2 commits caso vc saiba mexer com github: commit 1: max absorb all commit 2: fix, max protect all caso saiba mexer com github, estão os 2 commits, caso não saiba siga o passo a passo abaixo: vá até configmanager.cpp procure por: m_confString[MAP_AUTHOR] = getGlobalString("mapAuthor", "Unknown"); ACIMA adicione: m_confBool[USE_MAX_ABSORBALL] = getGlobalBool("useMaxAbsorbAll", false); m_confDouble[MAX_ABSORB_PERCENT] = getGlobalDouble("maxAbsorbPercent", 80.0f); agora vá configmanager.h procure por: RATE_MONSTER_DEFENSE, ACIMA adicione: MAX_ABSORB_PERCENT, Agora procure por: BROADCAST_BANISHMENTS, ABAIXO adicione: USE_MAX_ABSORBALL, agora vá em Player.cpp procure por: BlockType_t Player::blockHit(Creature* attacker, CombatType_t combatType, int32_t& damage, bool checkDefense/* = false*/, bool checkArmor/* = false*/, bool reflect/* = true*/, bool field/* = false*/, bool element/* = false*/) { Essa função faz a abosrção do dano DENTRO dessa função, procure por: damage -= blocked; if(damage <= 0) { damage = 0; blockType = BLOCK_DEFENSE; } TROQUE ISSO por isso: if(g_config.getBool(ConfigManager::USE_MAX_ABSORBALL)){ double maxAbsorb = (g_config.getDouble(ConfigManager::MAX_ABSORB_PERCENT) / 100.0); damage -= (blocked > (damage*maxAbsorb) ? (damage*maxAbsorb) : blocked); }else{ damage -= blocked; } if(damage <= 0) { damage = 0; blockType = BLOCK_DEFENSE; } Feito isso, RECOMPILE a source. e adicione no seu config.lua: useMaxAbsorbAll = true maxAbsorbPercent = 80.0 e pronto, agora seu ot não vai mais ter player imortal por causa de protect all. explicando: useMaxAbsorbAll = false --// se for false = sistema desativado, fica imortal > true = sistema ativado, não fica imortal maxAbsorbPercent = 80.0 --// 80 = 80%, se você quer que o maximo de protect all seja 50%, coloque 50 Créditos a mim, fiz esse sistema e postei no github.
Postado Outubro 25, 2023 1 ano 7 horas atrás, FeeTads disse: salve rapaziada, vi que tem bastante procura por esse sistema de "proteção" contra player que por algum motivo ficam com proteção 100% de algum elemento ou dano, por exemplo MIGHT RING (-20% death) + SSA (-80% Death), totalizando 100% de proteção contra o elemento death, ou seja, o player fica imortal, pra previnir isso, vai aqui 2 commits caso vc saiba mexer com github: commit 1: max absorb all commit 2: fix, max protect all caso saiba mexer com github, estão os 2 commits, caso não saiba siga o passo a passo abaixo: vá até configmanager.cpp procure por: m_confString[MAP_AUTHOR] = getGlobalString("mapAuthor", "Unknown"); ACIMA adicione: m_confBool[USE_MAX_ABSORBALL] = getGlobalBool("useMaxAbsorbAll", false); m_confDouble[MAX_ABSORB_PERCENT] = getGlobalDouble("maxAbsorbPercent", 80.0f); agora vá configmanager.h procure por: RATE_MONSTER_DEFENSE, ACIMA adicione: MAX_ABSORB_PERCENT, Agora procure por: BROADCAST_BANISHMENTS, ABAIXO adicione: USE_MAX_ABSORBALL, agora vá em Player.cpp procure por: BlockType_t Player::blockHit(Creature* attacker, CombatType_t combatType, int32_t& damage, bool checkDefense/* = false*/, bool checkArmor/* = false*/, bool reflect/* = true*/, bool field/* = false*/, bool element/* = false*/) { Essa função faz a abosrção do dano DENTRO dessa função, procure por: damage -= blocked; if(damage <= 0) { damage = 0; blockType = BLOCK_DEFENSE; } TROQUE ISSO por isso: if(g_config.getBool(ConfigManager::USE_MAX_ABSORBALL)){ double maxAbsorb = (g_config.getDouble(ConfigManager::MAX_ABSORB_PERCENT) / 100.0); damage -= (blocked > (damage*maxAbsorb) ? (damage*maxAbsorb) : blocked); }else{ damage -= blocked; } if(damage <= 0) { damage = 0; blockType = BLOCK_DEFENSE; } Feito isso, RECOMPILE a source. e adicione no seu config.lua: useMaxAbsorbAll = true maxAbsorbPercent = 80.0 e pronto, agora seu ot não vai mais ter player imortal por causa de protect all. explicando: useMaxAbsorbAll = false --// se for false = sistema desativado, fica imortal > true = sistema ativado, não fica imortal maxAbsorbPercent = 80.0 --// 80 = 80%, se você quer que o maximo de protect all seja 50%, coloque 50 Créditos a mim, fiz esse sistema e postei no github. @FeeTads isso conta também pra, life leech e life absorb? .. pq no meu server sofro com isso. o player chegar a ficar com 0% de vida, mais n morre.. quando se tem o atributo nos itens Editado Outubro 25, 2023 1 ano por leozincorsair x (veja o histórico de edições)
Postado Outubro 25, 2023 1 ano Autor Agora, leozincorsair disse: o player chegar a ficar com 0% de vida, se não me engano pra isso não, mas pra isso basta vc add uma correção if(player->getHealth() > (player->getMaxHealth()*0.02)) ... executa life leech/absorb assim o script desses atributos só executa se o player tiver +2% de life
Postado Outubro 25, 2023 1 ano 19 minutos atrás, FeeTads disse: se não me engano pra isso não, mas pra isso basta vc add uma correção if(player->getHealth() > (player->getMaxHealth()*0.02)) ... executa life leech/absorb assim o script desses atributos só executa se o player tiver +2% de life em qual parte eu adicionaria essa correcao?.. por favor
Postado Outubro 25, 2023 1 ano Autor 7 minutos atrás, leozincorsair disse: em qual parte eu adicionaria essa correcao na source, em game.cpp, aonde ele chama a função do life absorb, caso o teu seja na source, e não por statsChange .lua na source: if(attacker && (player = target->getPlayer()) && (attacker != target)){ if(player->getLifeAbsorb() > 0){ lifeAbsorb = damage * (player->getLifeAbsorb() * 0.01); if(damage > 0 && player->getHealth() > (player->getMaxHealth()*0.02)){ combatChangeHealth(params, attacker, target, lifeAbsorb, true); } } } Agora, FeeTads disse: caso o teu seja na source ai só ir vendo os outros e replicando, todos são iguais se for o mesmo sistema desse link
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.