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:
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user