fix(Core/Boss): Toravon Script Mechanics (#2868)
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1587680634936830200');
|
||||
|
||||
DELETE FROM `creature_template` WHERE `entry`=38440;
|
||||
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`, `attackpower`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`)
|
||||
VALUES (38440, 0, 0, 0, 0, 0, 1126, 14501, 0, 0, 'Toravon Whiteout Ground Effect', '', '', 0, 1, 1, 0, 35, 0, 1, 1.14286, 0.3, 0, 0, 0, 0, 0, 1, 2000, 2000, 1, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 3, 1, 1, 1, 1, 0, 0, 1, 0, 128, '', 12340);
|
||||
|
||||
@@ -15,6 +15,7 @@ enum Spells
|
||||
SPELL_FREEZING_GROUND = 72090,
|
||||
SPELL_FROZEN_ORB = 72091,
|
||||
SPELL_WHITEOUT = 72034,
|
||||
SPELL_WHITEOUT_VISUAL = 72036,
|
||||
SPELL_FROZEN_MALLET = 71993,
|
||||
|
||||
// Frozen Orb
|
||||
@@ -23,13 +24,19 @@ enum Spells
|
||||
|
||||
// Frozen Orb Stalker
|
||||
SPELL_FROZEN_ORB_STALKER_VISUAL = 72094,
|
||||
|
||||
// Whiteout GroundEffect NPC
|
||||
NPC_WHITEOUT_GROUND_EFFECT = 38440,
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_FREEZING_GROUND = 1,
|
||||
EVENT_FROZEN_ORB_STALKER = 2,
|
||||
EVENT_CHECK_SUMMONS = 3,
|
||||
EVENT_CAST_WHITEOUT = 3,
|
||||
EVENT_CAST_WHITEOUT_GROUND_EFFECT = 4,
|
||||
|
||||
|
||||
};
|
||||
|
||||
enum Misc
|
||||
@@ -52,6 +59,7 @@ class boss_toravon : public CreatureScript
|
||||
}
|
||||
|
||||
InstanceScript* pInstance;
|
||||
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
|
||||
@@ -77,7 +85,6 @@ class boss_toravon : public CreatureScript
|
||||
{
|
||||
if (me->HasAura(SPELL_STONED_AURA))
|
||||
return;
|
||||
|
||||
ScriptedAI::AttackStart(who);
|
||||
}
|
||||
|
||||
@@ -87,6 +94,8 @@ class boss_toravon : public CreatureScript
|
||||
|
||||
events.ScheduleEvent(EVENT_FROZEN_ORB_STALKER, 12000);
|
||||
events.ScheduleEvent(EVENT_FREEZING_GROUND, 7000);
|
||||
events.ScheduleEvent(EVENT_CAST_WHITEOUT, 25000); // schedule FIRST whiteout event in 25 seconds -1 for compesate updateai 2seconds check delay
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(EVENT_TORAVON, IN_PROGRESS);
|
||||
}
|
||||
@@ -107,6 +116,8 @@ class boss_toravon : public CreatureScript
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
{
|
||||
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
@@ -117,35 +128,23 @@ class boss_toravon : public CreatureScript
|
||||
switch (events.GetEvent())
|
||||
{
|
||||
case EVENT_FREEZING_GROUND:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
|
||||
me->CastSpell(target, SPELL_FREEZING_GROUND, false);
|
||||
events.RepeatEvent(20000);
|
||||
break;
|
||||
case EVENT_FROZEN_ORB_STALKER:
|
||||
me->CastCustomSpell(SPELL_FROZEN_ORB, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 3), me, false);
|
||||
events.RepeatEvent(35000);
|
||||
events.ScheduleEvent(EVENT_CHECK_SUMMONS, 10000);
|
||||
events.RepeatEvent(30000);
|
||||
break;
|
||||
case EVENT_CHECK_SUMMONS:
|
||||
for (SummonList::iterator i = summons.begin(); i != summons.end();)
|
||||
{
|
||||
if (Creature* cr = ObjectAccessor::GetCreature(*me, *i))
|
||||
{
|
||||
if (!cr->IsAlive())
|
||||
summons.erase(i++);
|
||||
else
|
||||
++i;
|
||||
}
|
||||
else
|
||||
summons.erase(i++);
|
||||
}
|
||||
if (summons.empty())
|
||||
{
|
||||
events.PopEvent();
|
||||
case EVENT_CAST_WHITEOUT:
|
||||
me->CastSpell(me, SPELL_WHITEOUT, false);
|
||||
events.ScheduleEvent(EVENT_CAST_WHITEOUT_GROUND_EFFECT, 1000); // triggers after 1 sec "plus 1 from trigger to cast visual"
|
||||
events.RepeatEvent(40000); // next whiteout instead first 25 SEC is now 45 SEC
|
||||
break;
|
||||
}
|
||||
events.RepeatEvent(2000);
|
||||
case EVENT_CAST_WHITEOUT_GROUND_EFFECT: // Whiteout Ground effect trigger
|
||||
if (Unit* whiteOutGround = me->SummonCreature(NPC_WHITEOUT_GROUND_EFFECT, -43.3316, -288.708, 92.2511, 1.58825, TEMPSUMMON_TIMED_DESPAWN, 4000))
|
||||
whiteOutGround->CastSpell(whiteOutGround, SPELL_WHITEOUT_VISUAL, false); // Cast the spell
|
||||
events.PopEvent();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -234,7 +233,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
void AddSC_boss_toravon()
|
||||
{
|
||||
new boss_toravon();
|
||||
|
||||
Reference in New Issue
Block a user