aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2024_04_27_00_world.sql3
-rw-r--r--src/server/scripts/Spells/spell_item.cpp29
2 files changed, 26 insertions, 6 deletions
diff --git a/sql/updates/world/master/2024_04_27_00_world.sql b/sql/updates/world/master/2024_04_27_00_world.sql
new file mode 100644
index 00000000000..b01213bf329
--- /dev/null
+++ b/sql/updates/world/master/2024_04_27_00_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_proc` WHERE `SpellId` IN (429020);
+INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
+(429020,0x00,224,0x00400800,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0); -- Fragile Echoes
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 1bc95391071..347d8936474 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -4308,6 +4308,7 @@ enum AmalgamsSeventhSpine
SPELL_FRAGILE_ECHOES_PALADIN = 225297,
SPELL_FRAGILE_ECHOES_DRUID = 225298,
SPELL_FRAGILE_ECHOES_PRIEST_HOLY = 225366,
+ SPELL_FRAGILE_ECHOES_EVOKER = 429020,
SPELL_FRAGILE_ECHO_ENERGIZE = 215270,
};
@@ -4316,17 +4317,19 @@ class spell_item_amalgams_seventh_spine : public AuraScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
- return ValidateSpellInfo({
+ return ValidateSpellInfo
+ ({
SPELL_FRAGILE_ECHOES_MONK,
SPELL_FRAGILE_ECHOES_SHAMAN,
SPELL_FRAGILE_ECHOES_PRIEST_DISCIPLINE,
SPELL_FRAGILE_ECHOES_PALADIN,
SPELL_FRAGILE_ECHOES_DRUID,
- SPELL_FRAGILE_ECHOES_PRIEST_HOLY
+ SPELL_FRAGILE_ECHOES_PRIEST_HOLY,
+ SPELL_FRAGILE_ECHOES_EVOKER
});
}
- void UpdateSpecAura()
+ void UpdateSpecAura(bool apply) const
{
Player* target = GetUnitOwner()->ToPlayer();
if (!target)
@@ -4334,7 +4337,7 @@ class spell_item_amalgams_seventh_spine : public AuraScript
auto updateAuraIfInCorrectSpec = [&](ChrSpecialization spec, AmalgamsSeventhSpine aura)
{
- if (target->GetPrimarySpecialization() != spec)
+ if (!apply || target->GetPrimarySpecialization() != spec)
target->RemoveAurasDueToSpell(aura);
else if (!target->HasAura(aura))
target->CastSpell(target, aura, GetEffect(EFFECT_0));
@@ -4358,14 +4361,28 @@ class spell_item_amalgams_seventh_spine : public AuraScript
case CLASS_DRUID:
updateAuraIfInCorrectSpec(ChrSpecialization::DruidRestoration, SPELL_FRAGILE_ECHOES_DRUID);
break;
+ case CLASS_EVOKER:
+ updateAuraIfInCorrectSpec(ChrSpecialization::EvokerPreservation, SPELL_FRAGILE_ECHOES_EVOKER);
+ break;
default:
break;
}
}
+ void HandleHeartbeat() const
+ {
+ UpdateSpecAura(true);
+ }
+
+ void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const
+ {
+ UpdateSpecAura(false);
+ }
+
void Register() override
{
- OnHeartbeat += AuraHeartbeatFn(spell_item_amalgams_seventh_spine::UpdateSpecAura);
+ OnHeartbeat += AuraHeartbeatFn(spell_item_amalgams_seventh_spine::HandleHeartbeat);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_item_amalgams_seventh_spine::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
@@ -4377,7 +4394,7 @@ class spell_item_amalgams_seventh_spine_mana_restore : public AuraScript
return ValidateSpellInfo({ SPELL_FRAGILE_ECHO_ENERGIZE });
}
- void TriggerManaRestoration(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ void TriggerManaRestoration(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) const
{
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
return;