aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2022_01_27_04_world_shaman_lavaburst_crit_chance.sql4
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp10
-rw-r--r--src/server/scripts/Spells/spell_shaman.cpp42
3 files changed, 40 insertions, 16 deletions
diff --git a/sql/updates/world/master/2022_01_27_04_world_shaman_lavaburst_crit_chance.sql b/sql/updates/world/master/2022_01_27_04_world_shaman_lavaburst_crit_chance.sql
new file mode 100644
index 00000000000..f8831401571
--- /dev/null
+++ b/sql/updates/world/master/2022_01_27_04_world_shaman_lavaburst_crit_chance.sql
@@ -0,0 +1,4 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_sha_lava_crit_chance';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(285452, 'spell_sha_lava_crit_chance'), -- Lava Burst
+(285466, 'spell_sha_lava_crit_chance'); -- Lava Burst Overload
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);