mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Scripts/Spells: Added proc requirements to a few auras that have SPELL_ATTR3_CAN_PROC_FROM_PROCS attribute
This commit is contained in:
13
sql/updates/world/master/2023_04_04_01_world.sql
Normal file
13
sql/updates/world/master/2023_04_04_01_world.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
DELETE FROM `spell_proc` WHERE `SpellId` IN (225281,225292,225294,225297,225298,225366);
|
||||
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
|
||||
(225281,0x00,53,0x04000000,0x00000000,0x00008000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0), -- Fragile Echoes
|
||||
(225292,0x00,11,0x00000080,0x00000000,0x00010000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0), -- Fragile Echoes
|
||||
(225294,0x00,6,0x00000001,0x00100000,0x00000000,0x00000000,0x0,0x0,0x6,0x2,0x403,0x0,0x0,0,0,0,0), -- Fragile Echoes
|
||||
(225297,0x00,10,0x40000000,0x00000000,0x00000400,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0), -- Fragile Echoes
|
||||
(225298,0x00,7,0x00000050,0x00000000,0x00000000,0x00000000,0x4400,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0), -- Fragile Echoes
|
||||
(225366,0x00,6,0x00001800,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0); -- Fragile Echoes
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_item_amalgams_seventh_spine','spell_item_amalgams_seventh_spine_mana_restore');
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
(215266,'spell_item_amalgams_seventh_spine'),
|
||||
(215267,'spell_item_amalgams_seventh_spine_mana_restore');
|
||||
@@ -159,7 +159,7 @@ class TC_GAME_API _SpellScript
|
||||
virtual void Register() = 0;
|
||||
// Function called on server startup, if returns false script won't be used in core
|
||||
// use for: dbc/template data presence/correctness checks
|
||||
virtual bool Validate(SpellInfo const* /*spellInfo*/) { return true; }
|
||||
virtual bool Validate([[maybe_unused]] SpellInfo const* spellInfo) { return true; }
|
||||
// Function called when script is created, if returns false script will be unloaded afterwards
|
||||
// use for: initializing local script variables (DO NOT USE CONSTRUCTOR FOR THIS PURPOSE!)
|
||||
virtual bool Load() { return true; }
|
||||
|
||||
@@ -4478,6 +4478,115 @@ class spell_item_eggnog : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
enum AmalgamsSeventhSpine
|
||||
{
|
||||
SPELL_FRAGILE_ECHOES_MONK = 225281,
|
||||
SPELL_FRAGILE_ECHOES_SHAMAN = 225292,
|
||||
SPELL_FRAGILE_ECHOES_PRIEST_DISCIPLINE = 225294,
|
||||
SPELL_FRAGILE_ECHOES_PALADIN = 225297,
|
||||
SPELL_FRAGILE_ECHOES_DRUID = 225298,
|
||||
SPELL_FRAGILE_ECHOES_PRIEST_HOLY = 225366,
|
||||
SPELL_FRAGILE_ECHO_ENERGIZE = 215270,
|
||||
};
|
||||
|
||||
// 215266
|
||||
class spell_item_amalgams_seventh_spine : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_amalgams_seventh_spine);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
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
|
||||
});
|
||||
}
|
||||
|
||||
void ForcePeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
|
||||
{
|
||||
// simulate heartbeat timer
|
||||
isPeriodic = true;
|
||||
amplitude = 5000;
|
||||
}
|
||||
|
||||
void UpdateSpecAura(AuraEffect const* aurEff)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
Player* target = GetTarget()->ToPlayer();
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
auto updateAuraIfInCorrectSpec = [&](TalentSpecialization spec, AmalgamsSeventhSpine aura)
|
||||
{
|
||||
if (target->GetPrimarySpecialization() != uint32(spec))
|
||||
target->RemoveAurasDueToSpell(aura);
|
||||
else if (!target->HasAura(aura))
|
||||
target->CastSpell(target, aura, aurEff);
|
||||
};
|
||||
|
||||
switch (target->GetClass())
|
||||
{
|
||||
case CLASS_MONK:
|
||||
updateAuraIfInCorrectSpec(TALENT_SPEC_MONK_MISTWEAVER, SPELL_FRAGILE_ECHOES_MONK);
|
||||
break;
|
||||
case CLASS_SHAMAN:
|
||||
updateAuraIfInCorrectSpec(TALENT_SPEC_SHAMAN_RESTORATION, SPELL_FRAGILE_ECHOES_SHAMAN);
|
||||
break;
|
||||
case CLASS_PRIEST:
|
||||
updateAuraIfInCorrectSpec(TALENT_SPEC_PRIEST_DISCIPLINE, SPELL_FRAGILE_ECHOES_PRIEST_DISCIPLINE);
|
||||
updateAuraIfInCorrectSpec(TALENT_SPEC_PRIEST_HOLY, SPELL_FRAGILE_ECHOES_PRIEST_HOLY);
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
updateAuraIfInCorrectSpec(TALENT_SPEC_PALADIN_HOLY, SPELL_FRAGILE_ECHOES_PALADIN);
|
||||
break;
|
||||
case CLASS_DRUID:
|
||||
updateAuraIfInCorrectSpec(TALENT_SPEC_DRUID_RESTORATION, SPELL_FRAGILE_ECHOES_DRUID);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_item_amalgams_seventh_spine::ForcePeriodic, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_item_amalgams_seventh_spine::UpdateSpecAura, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
// 215267
|
||||
class spell_item_amalgams_seventh_spine_mana_restore : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_amalgams_seventh_spine_mana_restore);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_FRAGILE_ECHO_ENERGIZE });
|
||||
}
|
||||
|
||||
void TriggerManaRestoration(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
|
||||
return;
|
||||
|
||||
Unit* caster = GetCaster();
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (AuraEffect const* trinketEffect = caster->GetAuraEffect(aurEff->GetSpellEffectInfo().TriggerSpell, EFFECT_0))
|
||||
caster->CastSpell(caster, SPELL_FRAGILE_ECHO_ENERGIZE, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_BASE_POINT0, trinketEffect->GetAmount()));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_item_amalgams_seventh_spine_mana_restore::TriggerManaRestoration, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
// 277253 - Heart of Azeroth
|
||||
class spell_item_heart_of_azeroth : public AuraScript
|
||||
{
|
||||
@@ -4652,5 +4761,8 @@ void AddSC_item_spell_scripts()
|
||||
RegisterSpellScript(spell_item_crazy_alchemists_potion);
|
||||
RegisterSpellScript(spell_item_eggnog);
|
||||
|
||||
RegisterSpellScript(spell_item_amalgams_seventh_spine);
|
||||
RegisterSpellScript(spell_item_amalgams_seventh_spine_mana_restore);
|
||||
|
||||
RegisterSpellScript(spell_item_heart_of_azeroth);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user