diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-02-21 15:43:58 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-02-21 15:43:58 +0100 |
| commit | 84cb6718eee5a1beada137559f21396fb8f43705 (patch) | |
| tree | 13b2be8a904ef12efabf288b4b04f06f92b90de6 /src/server/game/Entities/Unit | |
| parent | 6fd90ebb61265145df377fef26bfeff1c5343480 (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.cpp | 24 |
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); |
