Ir para conteúdo
  • Cadastre-se

max absorb all


Posts Recomendados

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.

Link para o post
Compartilhar em outros sites
  • FeeTads featured e pinned this tópico
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 por leozincorsair
x (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
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

Link para o post
Compartilhar em outros sites
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

Link para o post
Compartilhar em outros sites
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

Link para o post
Compartilhar em outros sites
44 minutos atrás, FeeTads disse:

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);
        }
    }
}

 

ai só ir vendo os outros e replicando, todos são iguais se for o mesmo sistema
desse link

exato o meu é desse ai mesmo, vou testar aqui !

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo