diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 10 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 42 |
2 files changed, 36 insertions, 16 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4671e22a454..65d4f4f5165 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -6718,16 +6718,6 @@ float Unit::SpellCritChanceTaken(Unit const* caster, Spell* spell, AuraEffect co if (caster->FindCurrentSpellBySpellId(5938)) crit_chance = 0.0f; break; - case SPELLFAMILY_SHAMAN: - // Lava Burst - if (spellInfo->SpellFamilyFlags[1] & 0x00001000) - { - if (GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_SHAMAN, flag128(0x10000000, 0, 0), caster->GetGUID())) - if (GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE) > -100) - return 100.0f; - break; - } - break; } // Spell crit suppression diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 43d112ca4dc..a743cbe86f1 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -62,8 +62,7 @@ enum ShamanSpells SPELL_SHAMAN_ELEMENTAL_MASTERY = 16166, SPELL_SHAMAN_ENERGY_SURGE = 40465, SPELL_SHAMAN_EXHAUSTION = 57723, - SPELL_SHAMAN_FLAME_SHOCK = 8050, - SPELL_SHAMAN_FLAME_SHOCK_MAELSTROM = 188389, + SPELL_SHAMAN_FLAME_SHOCK = 188389, SPELL_SHAMAN_FLAMETONGUE_ATTACK = 10444, SPELL_SHAMAN_FLAMETONGUE_WEAPON_ENCHANT = 334294, SPELL_SHAMAN_FLAMETONGUE_WEAPON_AURA = 319778, @@ -82,6 +81,7 @@ enum ShamanSpells SPELL_SHAMAN_LAVA_BURST = 51505, SPELL_SHAMAN_LAVA_BURST_BONUS_DAMAGE = 71824, SPELL_SHAMAN_LAVA_BURST_OVERLOAD = 77451, + SPELL_SHAMAN_LAVA_BURST_RANK_2 = 231721, SPELL_SHAMAN_LAVA_SURGE = 77762, SPELL_SHAMAN_LIGHTNING_BOLT = 188196, SPELL_SHAMAN_LIGHTNING_BOLT_ENERGIZE = 214815, @@ -974,6 +974,35 @@ class spell_sha_lava_burst : public SpellScript } }; +// 285452 - Lava Burst damage +// 285466 - Lava Burst Overload damage +class spell_sha_lava_crit_chance : public SpellScript +{ + PrepareSpellScript(spell_sha_lava_crit_chance); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHAMAN_LAVA_BURST_RANK_2, SPELL_SHAMAN_FLAME_SHOCK }); + } + + void CalcCritChance(Unit const* victim, float& chance) + { + Unit* caster = GetCaster(); + + if (!caster || !victim) + return; + + if (caster->HasAura(SPELL_SHAMAN_LAVA_BURST_RANK_2) && victim->HasAura(SPELL_SHAMAN_FLAME_SHOCK, caster->GetGUID())) + if (victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE) > -100) + chance = 100.f; + } + + void Register() override + { + OnCalcCritChance += SpellOnCalcCritChanceFn(spell_sha_lava_crit_chance::CalcCritChance); + } +}; + // 77756 - Lava Surge class spell_sha_lava_surge : public AuraScript { @@ -1238,7 +1267,7 @@ class spell_sha_path_of_flames_spread : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_SHAMAN_FLAME_SHOCK_MAELSTROM }); + return ValidateSpellInfo({ SPELL_SHAMAN_FLAME_SHOCK }); } void FilterTargets(std::list<WorldObject*>& targets) @@ -1246,7 +1275,7 @@ class spell_sha_path_of_flames_spread : public SpellScript targets.remove(GetExplTargetUnit()); Trinity::Containers::RandomResize(targets, [this](WorldObject* target) { - return target->GetTypeId() == TYPEID_UNIT && !target->ToUnit()->HasAura(SPELL_SHAMAN_FLAME_SHOCK_MAELSTROM, GetCaster()->GetGUID()); + return target->GetTypeId() == TYPEID_UNIT && !target->ToUnit()->HasAura(SPELL_SHAMAN_FLAME_SHOCK, GetCaster()->GetGUID()); }, 1); } @@ -1254,9 +1283,9 @@ class spell_sha_path_of_flames_spread : public SpellScript { if (Unit* mainTarget = GetExplTargetUnit()) { - if (Aura* flameShock = mainTarget->GetAura(SPELL_SHAMAN_FLAME_SHOCK_MAELSTROM, GetCaster()->GetGUID())) + if (Aura* flameShock = mainTarget->GetAura(SPELL_SHAMAN_FLAME_SHOCK, GetCaster()->GetGUID())) { - if (Aura* newAura = GetCaster()->AddAura(SPELL_SHAMAN_FLAME_SHOCK_MAELSTROM, GetHitUnit())) + if (Aura* newAura = GetCaster()->AddAura(SPELL_SHAMAN_FLAME_SHOCK, GetHitUnit())) { newAura->SetDuration(flameShock->GetDuration()); newAura->SetMaxDuration(flameShock->GetDuration()); @@ -1704,6 +1733,7 @@ void AddSC_shaman_spell_scripts() RegisterAuraScript(spell_sha_item_t10_elemental_2p_bonus); RegisterAuraScript(spell_sha_item_t18_elemental_4p_bonus); RegisterSpellScript(spell_sha_lava_burst); + RegisterSpellScript(spell_sha_lava_crit_chance); RegisterAuraScript(spell_sha_lava_surge); RegisterSpellScript(spell_sha_lava_surge_proc); RegisterSpellScript(spell_sha_lightning_bolt); |