mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-03-16 22:15:15 +00:00
fix(Scripts/Hyjal): some Archimonde fixes (#19031)
* init * update spellscript * fix targetting * Update boss_archimonde.cpp
This commit is contained in:
4
data/sql/updates/pending_db_world/spell_scripts.sql
Normal file
4
data/sql/updates/pending_db_world/spell_scripts.sql
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
--
|
||||||
|
DELETE FROM `spell_script_names` WHERE `spell_id` = 32014;
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||||
|
(32014, 'spell_air_burst');
|
||||||
@@ -71,22 +71,12 @@ enum Summons
|
|||||||
|
|
||||||
enum Events
|
enum Events
|
||||||
{
|
{
|
||||||
EVENT_DRAIN_WORLD_TREE = 1,
|
EVENT_ENRAGE = 0
|
||||||
EVENT_SPELL_FEAR = 2,
|
};
|
||||||
EVENT_SPELL_AIR_BURST = 3,
|
|
||||||
EVENT_SPELL_GRIP_OF_THE_LEGION = 4,
|
enum SpellGroups
|
||||||
EVENT_SPELL_UNLEASH_SOUL_CHARGES = 5,
|
{
|
||||||
EVENT_SPELL_DOOMFIRE = 6,
|
GROUP_FEAR = 0
|
||||||
EVENT_SPELL_FINGER_OF_DEATH = 7,
|
|
||||||
EVENT_SPELL_HAND_OF_DEATH = 8,
|
|
||||||
EVENT_SPELL_PROTECTION_OF_ELUNE = 9,
|
|
||||||
EVENT_ENRAGE = 10,
|
|
||||||
EVENT_CHECK_WORLD_TREE_DISTANCE = 11, // Enrage if too close to the tree
|
|
||||||
EVENT_BELOW_10_PERCENT_HP = 12,
|
|
||||||
EVENT_SUMMON_WISPS = 13,
|
|
||||||
EVENT_TOO_CLOSE_TO_WORLD_TREE = 14,
|
|
||||||
EVENT_ENRAGE_ROOT = 15,
|
|
||||||
EVENT_SPELL_FINGER_OF_DEATH_PHASE_4 = 16
|
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32 const availableChargeAurasAndSpells[3][2] = {
|
uint32 const availableChargeAurasAndSpells[3][2] = {
|
||||||
@@ -303,18 +293,15 @@ struct boss_archimonde : public BossAI
|
|||||||
Talk(SAY_AGGRO);
|
Talk(SAY_AGGRO);
|
||||||
ScheduleTimedEvent(25s, 35s, [&]
|
ScheduleTimedEvent(25s, 35s, [&]
|
||||||
{
|
{
|
||||||
|
scheduler.DelayGroup(GROUP_FEAR, 5s);
|
||||||
Talk(SAY_AIR_BURST);
|
Talk(SAY_AIR_BURST);
|
||||||
DoCastRandomTarget(SPELL_AIR_BURST, 0, 0.0f, true, false, false);
|
DoCastAOE(SPELL_AIR_BURST);
|
||||||
}, 25s, 40s);
|
}, 25s, 40s);
|
||||||
ScheduleTimedEvent(25s, 35s, [&]
|
ScheduleTimedEvent(25s, 35s, [&]
|
||||||
{
|
{
|
||||||
DoCastDoomFire();
|
DoCastDoomFire();
|
||||||
}, 20s);
|
}, 20s);
|
||||||
ScheduleTimedEvent(25s, 35s, [&]
|
ScheduleTimedEvent(25s, 35s, [&]
|
||||||
{
|
|
||||||
DoCastVictim(SPELL_FEAR);
|
|
||||||
}, 42s);
|
|
||||||
ScheduleTimedEvent(25s, 35s, [&]
|
|
||||||
{
|
{
|
||||||
DoCastRandomTarget(SPELL_GRIP_OF_THE_LEGION);
|
DoCastRandomTarget(SPELL_GRIP_OF_THE_LEGION);
|
||||||
}, 5s, 25s);
|
}, 5s, 25s);
|
||||||
@@ -356,9 +343,14 @@ struct boss_archimonde : public BossAI
|
|||||||
}, 3500ms);
|
}, 3500ms);
|
||||||
ScheduleTimedEvent(10min, [&]
|
ScheduleTimedEvent(10min, [&]
|
||||||
{
|
{
|
||||||
DoCastRandomTarget(SPELL_FINGER_OF_DEATH);
|
DoCastVictim(SPELL_RED_SKY_EFFECT);
|
||||||
}, 3500ms);
|
DoCastVictim(SPELL_HAND_OF_DEATH);
|
||||||
|
}, 3s);
|
||||||
|
scheduler.Schedule(25s, 35s, GROUP_FEAR, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
DoCastAOE(SPELL_FEAR);
|
||||||
|
context.Repeat(42s);
|
||||||
|
});
|
||||||
instance->SetData(DATA_SPAWN_WAVES, 1);
|
instance->SetData(DATA_SPAWN_WAVES, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,11 +543,30 @@ class spell_hand_of_death : public SpellScript
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class spell_air_burst : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_air_burst);
|
||||||
|
|
||||||
|
void FilterTargets(std::list<WorldObject*>& targets)
|
||||||
|
{
|
||||||
|
if (Unit* victim = GetCaster()->GetVictim())
|
||||||
|
{
|
||||||
|
targets.remove_if(Acore::ObjectGUIDCheck(victim->GetGUID(), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register() override
|
||||||
|
{
|
||||||
|
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_air_burst::FilterTargets, EFFECT_ALL, TARGET_UNIT_DEST_AREA_ENEMY);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_boss_archimonde()
|
void AddSC_boss_archimonde()
|
||||||
{
|
{
|
||||||
RegisterSpellScript(spell_red_sky_effect);
|
RegisterSpellScript(spell_red_sky_effect);
|
||||||
RegisterSpellScript(spell_hand_of_death);
|
RegisterSpellScript(spell_hand_of_death);
|
||||||
RegisterSpellScript(spell_finger_of_death);
|
RegisterSpellScript(spell_finger_of_death);
|
||||||
|
RegisterSpellScript(spell_air_burst);
|
||||||
RegisterHyjalAI(boss_archimonde);
|
RegisterHyjalAI(boss_archimonde);
|
||||||
RegisterHyjalAI(npc_ancient_wisp);
|
RegisterHyjalAI(npc_ancient_wisp);
|
||||||
RegisterHyjalAI(npc_doomfire_spirit);
|
RegisterHyjalAI(npc_doomfire_spirit);
|
||||||
|
|||||||
Reference in New Issue
Block a user