aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-02-21 15:43:58 +0100
committerShauren <shauren.trinity@gmail.com>2021-02-21 15:43:58 +0100
commit84cb6718eee5a1beada137559f21396fb8f43705 (patch)
tree13b2be8a904ef12efabf288b4b04f06f92b90de6 /src/server/game/Entities/Unit
parent6fd90ebb61265145df377fef26bfeff1c5343480 (diff)
Core/Auras: Implemented SPELL_AURA_MOD_CRIT_CHANCE_VERSUS_TARGET_HEALTH and SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 5acafccd178..d3af4dc3893 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -2816,11 +2816,24 @@ float Unit::GetUnitCriticalChance(WeaponAttackType attackType, Unit const* victi
else
chance += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE);
+ chance += GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_CHANCE_VERSUS_TARGET_HEALTH, [victim](AuraEffect const* aurEff)
+ {
+ return !victim->HealthBelowPct(aurEff->GetMiscValueB());
+ });
+
chance += victim->GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER, [this](AuraEffect const* aurEff) -> bool
{
return aurEff->GetCasterGUID() == GetGUID();
});
+ if (TempSummon const* tempSummon = ToTempSummon())
+ {
+ chance += victim->GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER_PET, [tempSummon](AuraEffect const* aurEff) -> bool
+ {
+ return aurEff->GetCasterGUID() == tempSummon->GetSummonerGUID();
+ });
+ }
+
chance += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE);
return std::max(chance, 0.0f);
@@ -7074,6 +7087,17 @@ float Unit::GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto
{
return aurEff->GetCasterGUID() != GetGUID();
});
+ crit_chance += GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_CHANCE_VERSUS_TARGET_HEALTH, [victim](AuraEffect const* aurEff)
+ {
+ return !victim->HealthBelowPct(aurEff->GetMiscValueB());
+ });
+ if (TempSummon const* tempSummon = ToTempSummon())
+ {
+ crit_chance += victim->GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER_PET, [tempSummon](AuraEffect const* aurEff) -> bool
+ {
+ return aurEff->GetCasterGUID() == tempSummon->GetSummonerGUID();
+ });
+ }
}
return std::max(crit_chance, 0.0f);