diff options
| -rw-r--r-- | sql/updates/world/2012_09_01_00_world_utgarde.sql | 21 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp | 82 |
2 files changed, 37 insertions, 66 deletions
diff --git a/sql/updates/world/2012_09_01_00_world_utgarde.sql b/sql/updates/world/2012_09_01_00_world_utgarde.sql index d5642a12b68..8faf023688a 100644 --- a/sql/updates/world/2012_09_01_00_world_utgarde.sql +++ b/sql/updates/world/2012_09_01_00_world_utgarde.sql @@ -77,17 +77,16 @@ INSERT INTO `creature`(`guid`,`id`,`map`,`spawnmask`,`modelid`,`position_x`,`pos (125940,24849,574,3,22287,238.382,-353.086,188.785,1.29762,3600,35928,2); -- Waypoint assignments -INSERT IGNORE INTO `creature_addon`(`guid`) VALUES -(125940), -(125934), -(125915), -(125920), -(125914), -(125936), -(125937), -(125922); - -UPDATE `creature_addon` SET `path_id`=`guid`*10 WHERE `guid` IN(125940,125934,125915,125920,125914,125936,125937,125922); +DELETE FROM `creature_addon` WHERE `guid` IN(125940,125934,125915,125920,125914,125936,125937,125922); +INSERT INTO `creature_addon`(`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`auras`) VALUES +(125914,1259140,22657,50331648,1,'54775'), +(125915,1259150,22657,50331648,1,'54775'), +(125920,1259200,22657,50331648,1,'54775'), +(125922,1259220,22657,50331648,1,'54775'), +(125934,1259340,22657,50331648,1,'54775'), +(125936,1259360,22657,50331648,1,'54775'), +(125937,1259370,22657,50331648,1,'54775'), +(125940,1259400,22657,50331648,1,'54775'); -- Waypoint data DELETE FROM `waypoint_data` WHERE `id` IN(1259400,1259340,1259150,1259200,1259140,1259360,1259370,1259220); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index 70d1470075d..ef17d6c0721 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -56,13 +56,16 @@ enum Events EVENT_DARK_SMASH, EVENT_DREADFUL_ROAR, EVENT_WOE_STRIKE, - EVENT_SHADOW_AXE + EVENT_SHADOW_AXE, + EVENT_JUST_TRANSFORMED, + EVENT_SUMMON_BANSHEE }; enum Phases { PHASE_HUMAN = 1, PHASE_UNDEAD, + PHASE_EVENT }; enum Spells @@ -107,11 +110,6 @@ public: InstanceScript* instance; bool bIsUndead; - bool bEventInProgress; - bool justTransformed; - - uint32 uiSpawnResTimer; - uint32 afterTransformTimer; void Reset() { @@ -119,7 +117,6 @@ public: me->UpdateEntry(MOB_INGVAR_HUMAN); bIsUndead = false; - bEventInProgress = false; me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -132,10 +129,6 @@ public: events.ScheduleEvent(EVENT_ENRAGE, urand(7,14)*IN_MILLISECONDS, 0, PHASE_HUMAN); events.ScheduleEvent(EVENT_SMASH, urand(12,17)*IN_MILLISECONDS, 0, PHASE_HUMAN); - uiSpawnResTimer = 3000; - afterTransformTimer = 2000; - justTransformed = false; - if (instance) instance->SetData(DATA_INGVAR_EVENT, NOT_STARTED); } @@ -155,30 +148,21 @@ public: me->SetStandState(UNIT_STAND_STATE_DEAD); // visuel hack end - bEventInProgress = true; - bIsUndead = true; - - events.SetPhase(PHASE_UNDEAD); - events.ScheduleEvent(EVENT_DARK_SMASH, urand(14,18)*IN_MILLISECONDS, 0, PHASE_UNDEAD); - events.ScheduleEvent(EVENT_DREADFUL_ROAR, urand(18,22)*IN_MILLISECONDS, 0, PHASE_UNDEAD); - events.ScheduleEvent(EVENT_WOE_STRIKE, urand(10,14)*IN_MILLISECONDS, 0, PHASE_UNDEAD); - events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD); + events.SetPhase(PHASE_EVENT); + events.ScheduleEvent(EVENT_SUMMON_BANSHEE, 3 * IN_MILLISECONDS, 0, PHASE_EVENT); DoScriptText(YELL_DEAD_1, me); } - if (bEventInProgress) - { + if (events.GetPhaseMask() & PHASE_EVENT) damage = 0; - } } void StartZombiePhase() { bIsUndead = true; - bEventInProgress = false; me->UpdateEntry(MOB_INGVAR_UNDEAD); - justTransformed = true; + events.ScheduleEvent(EVENT_JUST_TRANSFORMED, 2 * IN_MILLISECONDS, 0, PHASE_EVENT); DoScriptText(YELL_AGGRO_2, me); } @@ -206,6 +190,15 @@ public: } } + void ScheduleSecondPhase() + { + events.SetPhase(PHASE_UNDEAD); + events.ScheduleEvent(EVENT_DARK_SMASH, urand(14,18)*IN_MILLISECONDS, 0, PHASE_UNDEAD); + events.ScheduleEvent(EVENT_DREADFUL_ROAR, urand(18,22)*IN_MILLISECONDS, 0, PHASE_UNDEAD); + events.ScheduleEvent(EVENT_WOE_STRIKE, urand(10,14)*IN_MILLISECONDS, 0, PHASE_UNDEAD); + events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD); + } + void KilledUnit(Unit* /*victim*/) { if (bIsUndead) @@ -216,38 +209,8 @@ public: void UpdateAI(const uint32 diff) { - if (!UpdateVictim() && !justTransformed) - return; - - if (bEventInProgress) - { - if (uiSpawnResTimer) - { - if (uiSpawnResTimer <= diff) - { - DoCast(me, SPELL_SUMMON_BANSHEE); // Summons directly on caster position - // DoCast(me, SPELL_SCOURG_RESURRECTION, true); // Not needed ? - uiSpawnResTimer = 0; - } else uiSpawnResTimer -= diff; - } - + if (!UpdateVictim() && !(events.GetPhaseMask() & PHASE_EVENT)) return; - } - - if (justTransformed) - { - if (afterTransformTimer <= diff) - { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->SetInCombatWithZone(); - me->GetMotionMaster()->MoveChase(me->getVictim()); - justTransformed = false; - afterTransformTimer = 2000; - } else - afterTransformTimer -= diff; - - return; - } events.Update(diff); @@ -275,6 +238,15 @@ public: DoCastVictim(SPELL_SMASH); events.ScheduleEvent(EVENT_SMASH, urand(12,16)*IN_MILLISECONDS, 0, PHASE_HUMAN); break; + case EVENT_JUST_TRANSFORMED: + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->SetInCombatWithZone(); + me->GetMotionMaster()->MoveChase(me->getVictim()); + ScheduleSecondPhase(); + return; + case EVENT_SUMMON_BANSHEE: + DoCast(me, SPELL_SUMMON_BANSHEE); + return; // PHASE TWO case EVENT_DARK_SMASH: DoCastVictim(SPELL_DARK_SMASH); |
