Core/Auras: Implemented SPELL_AURA_MOD_CRIT_CHANCE_VERSUS_TARGET_HEALTH and SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER

Port From (https://github.com/TrinityCore/TrinityCore/commit/84cb6718eee5a1beada137559f21396fb8f43705)
This commit is contained in:
hondacrx
2021-02-22 15:41:23 -05:00
parent d21b61baba
commit bfb732e72b
2 changed files with 28 additions and 12 deletions
+7 -4
View File
@@ -779,10 +779,13 @@ namespace Game.Entities
else
chance += victim.GetTotalAuraModifier(AuraType.ModAttackerMeleeCritChance);
chance += victim.GetTotalAuraModifier(AuraType.ModCritChanceForCaster, aurEff =>
{
return aurEff.GetCasterGUID() == GetGUID();
});
chance += GetTotalAuraModifier(AuraType.ModCritChanceVersusTargetHealth, aurEff => !victim.HealthBelowPct(aurEff.GetMiscValueB()));
chance += victim.GetTotalAuraModifier(AuraType.ModCritChanceForCaster, aurEff => aurEff.GetCasterGUID() == GetGUID());
TempSummon tempSummon = ToTempSummon();
if (tempSummon)
chance += victim.GetTotalAuraModifier(AuraType.ModCritChanceForCasterPet, aurEff => aurEff.GetCasterGUID() == tempSummon.GetSummonerGUID());
chance += victim.GetTotalAuraModifier(AuraType.ModAttackerSpellAndWeaponCritChance);
+21 -8
View File
@@ -595,6 +595,18 @@ namespace Game.Entities
TakenTotal += (int)(TakenAdvertisedBenefit * coeff * stack);
}
if (damagetype == DamageEffectType.DOT)
{
// Healing over time taken percent
float minval_hot = (float)GetMaxNegativeAuraModifier(AuraType.ModHotPct);
if (minval_hot != 0)
MathFunctions.AddPct(ref TakenTotalMod, minval_hot);
float maxval_hot = (float)GetMaxPositiveAuraModifier(AuraType.ModHotPct);
if (maxval_hot != 0)
MathFunctions.AddPct(ref TakenTotalMod, maxval_hot);
}
TakenTotalMod *= GetTotalAuraMultiplier(AuraType.ModHealingReceived, aurEff =>
{
if (caster.GetGUID() == aurEff.GetCasterGUID() && aurEff.IsAffectingSpell(spellProto))
@@ -745,14 +757,15 @@ namespace Game.Entities
// for this types the bonus was already added in GetUnitCriticalChance, do not add twice
if (spellProto.DmgClass != SpellDmgClass.Melee && spellProto.DmgClass != SpellDmgClass.Ranged)
{
crit_chance += victim.GetTotalAuraModifier(AuraType.ModCritChanceForCasterWithAbilities, aurEff =>
{
return aurEff.GetCasterGUID() == GetGUID() && aurEff.IsAffectingSpell(spellProto);
});
crit_chance += victim.GetTotalAuraModifier(AuraType.ModCritChanceForCaster, aurEff =>
{
return aurEff.GetCasterGUID() != GetGUID();
});
crit_chance += victim.GetTotalAuraModifier(AuraType.ModCritChanceForCasterWithAbilities, aurEff => aurEff.GetCasterGUID() == GetGUID() && aurEff.IsAffectingSpell(spellProto));
crit_chance += victim.GetTotalAuraModifier(AuraType.ModCritChanceForCaster, aurEff => aurEff.GetCasterGUID() != GetGUID());
crit_chance += GetTotalAuraModifier(AuraType.ModCritChanceVersusTargetHealth, aurEff => !victim.HealthBelowPct(aurEff.GetMiscValueB()));
TempSummon tempSummon = ToTempSummon();
if (tempSummon != null)
crit_chance += victim.GetTotalAuraModifier(AuraType.ModCritChanceForCasterPet, aurEff => aurEff.GetCasterGUID() == tempSummon.GetSummonerGUID());
}
return Math.Max(crit_chance, 0.0f);