diff --git a/sql/avalon/93 - Pit_of_saron_intro2.sql b/sql/avalon/93 - Pit_of_saron_intro2.sql new file mode 100644 index 0000000000000..a1467a77e7bd1 --- /dev/null +++ b/sql/avalon/93 - Pit_of_saron_intro2.sql @@ -0,0 +1,85 @@ +/*New Intro and Outro*/ + +update gameobject_template set ScriptName = '' where entry = 201969; +update creature_template set ScriptName = '' where entry IN (36765, 36771); + +UPDATE creature_template SET scriptname = "pos_intro" WHERE entry IN (36990, 36993); + +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(5578,'at_ymirjar_flamebearer_pos'); + +DELETE FROM `areatrigger_scripts` where `entry`= 5579; +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(5579,'at_fallen_warrior_pos'); + +DELETE FROM `areatrigger_scripts` where `entry`= 5580; +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(5580,'at_ice_cicle_pos'); + +DELETE FROM `areatrigger_scripts` where `entry`= 5573; +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(5573,'at_pos_intro'); + +DELETE FROM `areatrigger_scripts` where `entry`= 5598; +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(5598,'at_slave_rescued_pos'); + +DELETE FROM `areatrigger_scripts` where `entry`= 5599; +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(5599,'at_geist_ambusher_pos'); + +UPDATE creature_template SET Scriptname = 'pos_outro' WHERE entry IN (38189, 38188) + +UPDATE creature_template set Scriptname = '' where entry = 36886; + +SET @ENTRY1=36840; +SET @ENTRY2=36892; +SET @ENTRY3=36893; +SET @ENTRY4=36841; +SET @ENTRY5=36842; +SET @ENTRY6=37584; +SET @ENTRY7=37588; +SET @ENTRY8=37587; +SET @ENTRY9=37496; +SET @ENTRY10=37497; +SET @ENTRY11=37729; +SET @ENTRY12=37728; +SET @ENTRY13=36877; +DELETE FROM creature WHERE id IN (@ENTRY1, @ENTRY2, @ENTRY3, @ENTRY4, @ENTRY5, @ENTRY6, @ENTRY7, @ENTRY8, @ENTRY9, @ENTRY10, @ENTRY11, @ENTRY12, @ENTRY13); + +/* +SET @GUID1=201888; +SET @GUID2=202281; +SET @GUID3=201965; +DELETE FROM creature WHERE guid IN (@GUID1, @GUID2, @GUID3); + +SET @GUID1=202141; +SET @GUID2=201909; +SET @GUID3=201840; +SET @GUID4=202222; +SET @GUID5=124338; +SET @GUID6=202018; +SET @GUID7=202022; +SET @GUID8=202050; +SET @GUID9=202097; +DELETE FROM creature WHERE guid IN (@GUID1, @GUID2, @GUID3, @GUID4, @GUID5, @GUID6, @GUID7, @GUID8, @GUID9); +DELETE FROM creature_addon where guid IN(@GUID5); +*/ + + +DELETE FROM script_texts WHERE entry IN(-1658022, -1658023); +INSERT INTO script_texts (entry,content_default,sound,type,language,emote,comment) VALUES +(-1658022,'%s lance un rocher saronite massive sur vous !',0,5,0,0,'garfrost EMOTE_THROW_SARONITE'), -- TODO emote only displayed to target +(-1658023,'%s jette Deep Freeze sur $N.',0,3,0,0,'garfrost EMOTE_DEEP_FREEZE'); + +DELETE FROM `script_texts` WHERE entry = -1658071; +INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`,`sound`,`type`,`language`,`emote`,`comment`) VALUES +(36888,-1658071,'Par Ici ! Nous sommes sur le point de monter à l\'assaut de l\'antre du Seigneur du Fléau Tyrannus',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'SAY_RESCOUD_HORDE_ALLIANCE'); + +update creature_template set unit_flags = 32832, faction_A = 21, faction_H = 21 where entryIN(36830, 36892); + +UPDATE gameobject_template set flags = 1, faction = 1375 WHERE entry = 201848; + +UPDATE creature_template SET scriptname = '' WHERE entry IN (36794); + +UPDATE creature_template SET MovementType = 2 where entry IN (36788, 367880); \ No newline at end of file diff --git a/sql/avalon/Maj_old_to_30-03_REVCORE_2.2/69 - Pit_of_saron_intro.sql b/sql/avalon/Maj_old_to_30-03_REVCORE_2.2/69 - Pit_of_saron_intro.sql index 5a6328dbf1ce9..cda46fd00decf 100644 --- a/sql/avalon/Maj_old_to_30-03_REVCORE_2.2/69 - Pit_of_saron_intro.sql +++ b/sql/avalon/Maj_old_to_30-03_REVCORE_2.2/69 - Pit_of_saron_intro.sql @@ -146,7 +146,4 @@ replace into `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid replace into `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) values('125738','36771','658','3','64','30385','0','586.727','6.61111','512.674','3.35103','7200','0','0','63000','3994','0','0','0','0'); replace into `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) values('125698','36771','658','3','64','30384','0','548.403','89.5608','525.462','2.75762','7200','0','0','63000','3994','0','0','0','0'); replace into `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) values('125711','36771','658','3','64','30384','0','754.168','-95.066','512.83','0.069813','7200','0','0','63000','3994','0','0','0','0'); -replace into `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) values('118210','36771','658','3','64','30385','0','647.373','-112.151','513.411','2.70526','7200','0','0','63000','3994','0','0','0','0'); - -update gameobject_template set ScriptName = 'ball_and_chain' where entry = 201969; -update creature_template set ScriptName = 'npc_slave_p' where entry IN (36765, 36771); \ No newline at end of file +replace into `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) values('118210','36771','658','3','64','30385','0','647.373','-112.151','513.411','2.70526','7200','0','0','63000','3994','0','0','0','0'); \ No newline at end of file diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 64609efd7ffb2..d4a1549f2d961 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -26,6 +26,9 @@ enum Yells SAY_DEATH = -1658004, SAY_PHASE2 = -1658005, SAY_PHASE3 = -1658006, + + EMOTE_THROW_SARONITE = -1658022, + EMOTE_DEEP_FREEZE = -1658023, SAY_TYRANNUS_DEATH = -1658007, }; @@ -199,7 +202,10 @@ class boss_garfrost : public CreatureScript { case EVENT_THROW_SARONITE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + { + DoScriptText(EMOTE_THROW_SARONITE, me, target); DoCast(target, SPELL_THROW_SARONITE); + } events.ScheduleEvent(EVENT_THROW_SARONITE, urand(12500, 20000)); break; case EVENT_CHILLING_WAVE: @@ -208,7 +214,10 @@ class boss_garfrost : public CreatureScript break; case EVENT_DEEP_FREEZE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + { + DoScriptText(EMOTE_DEEP_FREEZE, me, target); DoCast(target, SPELL_DEEP_FREEZE); + } events.ScheduleEvent(EVENT_DEEP_FREEZE, 35000, 0, PHASE_THREE); break; case EVENT_JUMP: diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index 8e211cbd2cbb8..2315f50c9fb07 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -347,7 +347,7 @@ class boss_krick : public CreatureScript else tyrannusPtr = me->SummonCreature(NPC_TYRANNUS_EVENTS, outroPos[1], TEMPSUMMON_MANUAL_DESPAWN); - tyrannusPtr->SetFlying(true); + tyrannusPtr->SetCanFly(true); me->GetMotionMaster()->MovePoint(POINT_KRICK_INTRO, outroPos[0].GetPositionX(), outroPos[0].GetPositionY(), outroPos[0].GetPositionZ()); tyrannusPtr->SetFacingToObject(me); } @@ -368,7 +368,10 @@ class boss_krick : public CreatureScript { if (_phase != PHASE_OUTRO) return; - + + if(_instanceScript->GetData(DATA_TYRANNUS_START) != DONE) + _instanceScript->SetData(DATA_TYRANNUS_START, DONE); + _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) @@ -439,6 +442,7 @@ class boss_krick : public CreatureScript _events.ScheduleEvent(EVENT_OUTRO_8, 5000); break; case EVENT_OUTRO_8: + //! HACK: Creature's can't have MOVEMENTFLAG_FLYING me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING); me->GetMotionMaster()->MovePoint(0, outroPos[5]); DoCast(me, SPELL_STRANGULATING); @@ -453,8 +457,9 @@ class boss_krick : public CreatureScript _events.ScheduleEvent(EVENT_OUTRO_10, 1000); break; case EVENT_OUTRO_10: + //! HACK: Creature's can't have MOVEMENTFLAG_FLYING me->RemoveUnitMovementFlag(MOVEMENTFLAG_FLYING); - me->AddUnitMovementFlag(MOVEMENTFLAG_FALLING); + me->AddUnitMovementFlag(MOVEMENTFLAG_FALLING_FAR); me->GetMotionMaster()->MovePoint(0, outroPos[6]); _events.ScheduleEvent(EVENT_OUTRO_11, 2000); break; @@ -473,9 +478,17 @@ class boss_krick : public CreatureScript if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _outroNpcGUID)) { if (_instanceScript->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + { DoScriptText(SAY_JAYNA_OUTRO_10, jainaOrSylvanas); + jainaOrSylvanas->SetSpeed(MOVE_WALK, 0.5f, true); + jainaOrSylvanas->GetMotionMaster()->MovePoint(0, 847.737610f, -6.079165f, 509.911835f); + } else + { DoScriptText(SAY_SYLVANAS_OUTRO_10, jainaOrSylvanas); + jainaOrSylvanas->SetSpeed(MOVE_WALK, 0.5f, true); + jainaOrSylvanas->GetMotionMaster()->MovePoint(0, 847.737610f, -6.079165f, 509.911835f); + } } // End of OUTRO. for now... _events.ScheduleEvent(EVENT_OUTRO_END, 3000); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index d6b2c2e3a97f1..4f28c4ff88ae6 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -99,6 +99,33 @@ enum Actions #define GUID_HOARFROST 1 +static const Position MoveLocations1[9] = +{ + {1064.217896f, 118.629662f, 628.156311f, 0.000000f}, + {1065.733276f, 126.342400f, 628.156128f, 0.000000f}, + {1060.914185f, 130.460403f, 628.156128f, 0.000000f}, + {1059.328003f, 120.532974f, 628.156128f, 0.000000f}, + {1052.488647f, 122.232979f, 628.156128f, 0.000000f}, + {1047.673950f, 121.389717f, 628.156128f, 0.000000f}, + {1043.781250f, 113.463493f, 628.156128f, 0.000000f}, + {1044.634521f, 109.196129f, 628.518188f, 0.000000f}, + {1052.443726f, 110.813431f, 628.156250f, 0.000000f}, +}; + +static const Position MoveLocations2[9] = +{ + {1068.739624f, 103.664474f, 630.880005f, 0.000000f}, + {1062.253784f, 101.495079f, 630.683533f, 0.000000f}, + {1057.972168f, 100.040573f, 630.238525f, 0.000000f}, + {1053.684204f, 98.358513f, 629.913330f, 0.000000f}, + {1060.612793f, 87.334480f, 631.050354f, 0.000000f}, + {1068.163208f, 90.051262f, 631.533752f, 0.000000f}, + {1046.957642f, 108.734108f, 628.526245f, 0.000000f}, + {1044.634521f, 109.196129f, 628.518188f, 0.000000f}, + {1052.443726f, 110.813431f, 628.156250f, 0.000000f}, +}; + +static const Position leaderPosOutro1 = {1064.217896f, 118.629662f, 628.156311f, 0.000000f}; static const Position rimefangPos[10] = { {1017.299f, 168.9740f, 642.9259f, 0.000000f}, @@ -204,6 +231,33 @@ class boss_tyrannus : public CreatureScript events.ScheduleEvent(EVENT_INTRO_3, 34000, 0, PHASE_INTRO); events.ScheduleEvent(EVENT_COMBAT_START, 36000, 0, PHASE_INTRO); instance->SetBossState(DATA_TYRANNUS, IN_PROGRESS); + + if(Creature *pSlave = me->SummonCreature(NPC_GORKUN_IRONSKULL_1, 1075.489868f, 20.001131f, 632.835938f, 1.659531f, TEMPSUMMON_DEAD_DESPAWN, 10000)) + { + pSlave->GetMotionMaster()->MovePoint(0, leaderPosOutro1); + pSlave->SetHomePosition(leaderPosOutro1); + } + + for(uint8 i = 0; i < 9; ++i) + { + if(Creature *pSlave = me->SummonCreature(NPC_FREED_SLAVE_1_HORDE, 1086.112061f, 21.060266f, 631.892273f, 1.995682f, TEMPSUMMON_DEAD_DESPAWN, 30000)) + { + pSlave->GetMotionMaster()->MovePoint(0, MoveLocations1[i]); + pSlave->SetHomePosition(MoveLocations1[i]); + } + ++i; + if(Creature *pSlave = me->SummonCreature(NPC_FREED_SLAVE_2_HORDE, 1069.121582f, 18.495785f, 634.020203f, 1.573138f, TEMPSUMMON_DEAD_DESPAWN, 30000)) + { + pSlave->GetMotionMaster()->MovePoint(0, MoveLocations1[i]); + pSlave->SetHomePosition(MoveLocations1[i]); + } + ++i; + if(Creature *pSlave = me->SummonCreature(NPC_FREED_SLAVE_3_HORDE, 1075.489868f, 20.001131f, 632.835938f, 1.659531f, TEMPSUMMON_DEAD_DESPAWN, 30000)) + { + pSlave->GetMotionMaster()->MovePoint(0, MoveLocations1[i]); + pSlave->SetHomePosition(MoveLocations1[i]); + } + } } } @@ -219,7 +273,8 @@ class boss_tyrannus : public CreatureScript switch (eventId) { case EVENT_INTRO_1: - //DoScriptText(SAY_GORKUN_INTRO_2, pGorkunOrVictus); + if (Creature* GorkunOrVictus = me->GetCreature(*me, instance->GetData64(DATA_VICTUS_OR_GORKUN_FREED))) + DoScriptText(SAY_GORKUN_INTRO_2, GorkunOrVictus); break; case EVENT_INTRO_2: DoScriptText(SAY_TYRANNUS_INTRO_3, me); @@ -239,6 +294,51 @@ class boss_tyrannus : public CreatureScript events.ScheduleEvent(EVENT_OVERLORD_BRAND, urand(5000, 7000)); events.ScheduleEvent(EVENT_FORCEFUL_SMASH, urand(14000, 16000)); events.ScheduleEvent(EVENT_MARK_OF_RIMEFANG, urand(25000, 27000)); + + for(uint8 i = 0; i < 9; ++i) + { + if(Creature *pReaver = me->SummonCreature(NPC_WRATHBONE_REAVER, 1069.934082f, 49.015617f, 630.590210f, 1.657956f, TEMPSUMMON_DEAD_DESPAWN, 30000)) + { + if (pReaver->isAlive()) + { + if (Creature* pSlave = me->FindNearestCreature(NPC_FREED_SLAVE_1_HORDE, 150.0f, true)) + { + pReaver->GetMotionMaster()->MovePoint(0, MoveLocations2[i]); + pReaver->SetHomePosition(MoveLocations2[i]); + pReaver->Attack(pSlave, true); + pReaver->GetMotionMaster()->MoveChase(pSlave); + } + } + } + ++i; + if(Creature *pSorcerer = me->SummonCreature(NPC_WRATHBONE_SORCERER, 1069.934082f, 49.015617f, 630.590210f, 1.657956f, TEMPSUMMON_DEAD_DESPAWN, 30000)) + { + if (pSorcerer->isAlive()) + { + if (Creature* pSlave = me->FindNearestCreature(NPC_FREED_SLAVE_2_HORDE, 150.0f, true)) + { + pSorcerer->GetMotionMaster()->MovePoint(0, MoveLocations2[i]); + pSorcerer->SetHomePosition(MoveLocations2[i]); + pSorcerer->Attack(pSlave, true); + pSorcerer->GetMotionMaster()->MoveChase(pSlave); + } + } + } + ++i; + if(Creature *pFallen = me->SummonCreature(NPC_FALLEN_WARRIOR, 1069.934082f, 49.015617f, 630.590210f, 1.657956f, TEMPSUMMON_DEAD_DESPAWN, 30000)) + { + if (pFallen->isAlive()) + { + if (Creature* pSlave = me->FindNearestCreature(NPC_FREED_SLAVE_3_HORDE, 150.0f, true)) + { + pFallen->GetMotionMaster()->MovePoint(0, MoveLocations2[i]); + pFallen->SetHomePosition(MoveLocations2[i]); + pFallen->Attack(pSlave, true); + pFallen->GetMotionMaster()->MoveChase(pSlave); + } + } + } + } break; case EVENT_OVERLORD_BRAND: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true)) @@ -295,7 +395,7 @@ class boss_rimefang : public CreatureScript _events.SetPhase(PHASE_NONE); _currentWaypoint = 0; _hoarfrostTargetGUID = 0; - me->SetFlying(true); + me->SetCanFly(true); me->SetReactState(REACT_PASSIVE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp index 0c7e202de9914..332d6bf5d8569 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp @@ -18,10 +18,34 @@ #include "ScriptPCH.h" #include "pit_of_saron.h" -// positions for Martin Victus (37591) and Gorkun Ironskull (37592) -Position const SlaveLeaderPos = {689.7158f, -104.8736f, 513.7360f, 0.0f}; // position for Jaina and Sylvanas Position const EventLeaderPos2 = {1054.368f, 107.14620f, 628.4467f, 0.0f}; +//Slaves For Alliance and Horde. Martin Victus and Gorkun Ironskull +const uint32 NpcSlaveAlliance[3] = {37591, 37572, 37575 }; +const uint32 NpcSlaveHorde[3] = {37592, 37578, 37579}; +const uint32 NpcSlaveIfDeadGarfrost[2] = {36888, 36889}; +//Dead Garfrost from sniff +static const Position SlaveLeaderPos[3] = +{ + {693.281555f, -169.690872f, 526.965454f, 1.485173f}, + {696.024902f, -169.953308f, 526.870850f, 1.603771f}, + {690.887512f, -169.970963f, 526.891357f, 1.269191f}, +}; +// if Dead IckandKrick from sniff +static const Position SlaveLeaderPos2[3] = +{ + {849.804016f, -9.097073f, 509.900574f, 2.183652f}, + {851.979919f, -7.567026f, 509.982391f, 2.040709f}, + {847.959351f, -11.114618f, 509.794922f, 2.366650f}, +}; +// Slaves Alliance and Horde If Gargrost Dead For Events from sniff +const Position spawnPoints1[3] = +{ + {768.920044f, -38.462135f, 508.355469f, 3.903403f}, + {766.413635f, -36.130611f, 508.346466f, 4.056557f}, + {770.746033f, -40.480698f, 508.355469f, 3.915185f}, +}; +Position const spawnPoints2 = {773.266174f, -43.121738f, 508.355469f, 3.954455f}; class instance_pit_of_saron : public InstanceMapScript { @@ -40,16 +64,22 @@ class instance_pit_of_saron : public InstanceMapScript _rimefangGUID = 0; _jainaOrSylvanas1GUID = 0; _jainaOrSylvanas2GUID = 0; + _sindragosaGUID = 0; _teamInInstance = 0; + _uiHorp =0; + _victusOrGorkunFreedGUID = 0; _tyrannusEventStart = NOT_STARTED; + _areaTriggerYmirjar = NOT_STARTED; + _areaTriggerFallen = NOT_STARTED; + _areaTriggerIceCicle = NOT_STARTED; + _areaTriggerSlaveOutroFargrost = NOT_STARTED; + _areTriggerGeistAmbusher = NOT_STARTED; } void OnPlayerEnter(Player* player) { if (!_teamInInstance) _teamInInstance = player->GetTeam(); - if(GetData(DATA_TYRANNUS_START) != DONE) - SetData(DATA_TYRANNUS_START, IN_PROGRESS); } void OnCreatureCreate(Creature* creature) @@ -152,22 +182,32 @@ class instance_pit_of_saron : public InstanceMapScript if (_teamInInstance == ALLIANCE) creature->UpdateEntry(NPC_MARTIN_VICTUS_2, ALLIANCE); break; + case NPC_GORKUN_IRONSKULL_1: + if (_teamInInstance == ALLIANCE) + creature->UpdateEntry(NPC_MARTIN_VICTUS_2, ALLIANCE); + _victusOrGorkunFreedGUID = creature->GetGUID(); + case NPC_SINDRAGOSA: + _sindragosaGUID = creature->GetGUID(); + break; default: break; } } void OnGameObjectCreate(GameObject* go) - { - switch (go->GetEntry()) - { - case GO_ICE_WALL: - uiIceWall = go->GetGUID(); - if(GetBossState(DATA_GARFROST) == DONE && GetBossState(DATA_ICK) == DONE) - HandleGameObject(NULL,true,go); - break; - } - } + { + switch (go->GetEntry()) + { + case GO_ICE_WALL: + uiIceWall = go->GetGUID(); + if (GetBossState(DATA_GARFROST) == DONE && GetBossState(DATA_ICK) == DONE) + HandleGameObject(NULL,true,go); + break; + case GO_HALLS_OF_REFLECT_PORT: + _uiHorp = go->GetGUID(); + break; + } + } bool SetBossState(uint32 type, EncounterState state) { @@ -177,25 +217,43 @@ class instance_pit_of_saron : public InstanceMapScript switch (type) { case DATA_ICK: - if (state == DONE) - { - if(GetBossState(DATA_GARFROST)==DONE) - HandleGameObject(uiIceWall,true,NULL); - } - break; + if(state == DONE) + { + if (Creature* summoner = instance->GetCreature(_ickGUID)) + { + for (int i = 0; i < 3; ++i) + { + if (_teamInInstance == ALLIANCE) + summoner->SummonCreature(NpcSlaveAlliance[i], SlaveLeaderPos2[i], TEMPSUMMON_MANUAL_DESPAWN); + else + summoner->SummonCreature(NpcSlaveHorde[i], SlaveLeaderPos2[i], TEMPSUMMON_MANUAL_DESPAWN); + } + } + if(GetBossState(DATA_GARFROST) == DONE) + HandleGameObject(uiIceWall, true, NULL); + } + break; case DATA_GARFROST: - if (state == DONE) + if(state == DONE) { + SetData(DATA_SLAVE_OUTRO_GARFROST, IN_PROGRESS); if (Creature* summoner = instance->GetCreature(_garfrostGUID)) { + for (int i = 0; i < 3; ++i) + { if (_teamInInstance == ALLIANCE) - summoner->SummonCreature(NPC_MARTIN_VICTUS_1, SlaveLeaderPos, TEMPSUMMON_MANUAL_DESPAWN); + summoner->SummonCreature(NpcSlaveAlliance[i], SlaveLeaderPos[i], TEMPSUMMON_MANUAL_DESPAWN); else - summoner->SummonCreature(NPC_GORKUN_IRONSKULL_2, SlaveLeaderPos, TEMPSUMMON_MANUAL_DESPAWN); + summoner->SummonCreature(NpcSlaveHorde[i], SlaveLeaderPos[i], TEMPSUMMON_MANUAL_DESPAWN); + } + summoner->SummonCreature(36888, spawnPoints2, TEMPSUMMON_MANUAL_DESPAWN); + for (uint8 i = 0; i < 3; i++) + { + summoner->SummonCreature(36889, spawnPoints1[i], TEMPSUMMON_MANUAL_DESPAWN); + } } - - if(GetBossState(DATA_ICK)==DONE) - HandleGameObject(uiIceWall,true,NULL); + if(GetBossState(DATA_ICK) == DONE) + HandleGameObject(uiIceWall, true, NULL); } break; case DATA_TYRANNUS: @@ -224,7 +282,17 @@ class instance_pit_of_saron : public InstanceMapScript case DATA_TEAM_IN_INSTANCE: return _teamInInstance; case DATA_TYRANNUS_START: - return _tyrannusEventStart; + return _tyrannusEventStart; + case DATA_AREA_TRIGGER_YMIRJAR: + return _areaTriggerYmirjar; + case DATA_AREA_TRIGGER_FALLEN: + return _areaTriggerFallen; + case DATA_AREA_TRIGGER_ICE_CICLE: + return _areaTriggerIceCicle; + case DATA_SLAVE_OUTRO_GARFROST: + return _areaTriggerSlaveOutroFargrost; + case DATA_GEIST_AMBUSHER: + return _areTriggerGeistAmbusher; default: break; } @@ -252,6 +320,12 @@ class instance_pit_of_saron : public InstanceMapScript return _jainaOrSylvanas1GUID; case DATA_JAINA_SYLVANAS_2: return _jainaOrSylvanas2GUID; + case DATA_VICTUS_OR_GORKUN_FREED: + return _victusOrGorkunFreedGUID; + case DATA_SINDRAGOSA: + return _sindragosaGUID; + case GO_HALLS_OF_REFLECT_PORT: + return _uiHorp; default: break; } @@ -263,6 +337,16 @@ class instance_pit_of_saron : public InstanceMapScript { if(type == DATA_TYRANNUS_START) _tyrannusEventStart = data; + if(type == DATA_AREA_TRIGGER_YMIRJAR) + _areaTriggerYmirjar = data; + if(type == DATA_AREA_TRIGGER_FALLEN) + _areaTriggerFallen = data; + if(type == DATA_AREA_TRIGGER_ICE_CICLE) + _areaTriggerIceCicle = data; + if(type == DATA_SLAVE_OUTRO_GARFROST) + _areaTriggerSlaveOutroFargrost = data; + if(type == DATA_GEIST_AMBUSHER) + _areTriggerGeistAmbusher = data; } std::string GetSaveData() { @@ -319,9 +403,17 @@ class instance_pit_of_saron : public InstanceMapScript uint64 _jainaOrSylvanas1GUID; uint64 _jainaOrSylvanas2GUID; uint64 uiIceWall; + uint64 _victusOrGorkunFreedGUID; + uint64 _sindragosaGUID; + uint64 _uiHorp; uint32 _teamInInstance; uint8 _tyrannusEventStart; + uint8 _areaTriggerYmirjar; + uint8 _areaTriggerFallen; + uint8 _areaTriggerIceCicle; + uint8 _areaTriggerSlaveOutroFargrost; + uint8 _areTriggerGeistAmbusher; }; InstanceScript* GetInstanceScript(InstanceMap* map) const diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index f2a305a707050..e63951a538107 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -43,6 +43,97 @@ enum eEvents EVENT_SHOVELLED = 5, }; +const Position spawnPoints1[4] = +{ + {877.666199f, 61.523361f, 527.974243f, 3.624145f}, + {885.715027f, 65.515602f, 533.431030f, 3.857180f}, + {912.531189f, 63.785076f, 547.925720f, 3.235373f}, + {909.602722f, 83.248398f, 551.600403f, 3.251082f}, +}; +const Position spawnPoints2[4] = +{ + {879.286743f, 41.535030f, 521.009338f, 3.486701f}, + {889.974548f, 45.270569f, 527.154236f, 3.612364f}, + {919.853027f, 88.957771f, 558.705993f, 3.592729f}, + {921.595520f, 69.234627f, 557.946716f, 3.145053f}, +}; +const Position spawnPointsYmirjar[2] = +{ + {883.150024f, 54.626401f, 528.262024f, 3.678787f}, + {915.107971f, 75.316299f, 553.531006f, 3.678787f}, +}; +const Position spawnPointsFallenWarrior[8] = +{ + {937.606506f, 0.776727f, 578.888000f, 1.090893f}, + {928.419006f, 8.786335f, 577.693970f, 1.122307f}, + {924.478699f, -7.662051f, 582.044983f, 1.489874f}, + {935.244568f, -10.427516f, 583.265503f, 1.358702f}, + {935.098694f, -24.272480f, 588.035400f, 1.653226f}, + {921.272644f, -22.194103f, 585.452576f, 1.331212f}, + {930.109009f, -56.889900f, 591.848999f, 2.353980f}, + {924.945984f, -60.164799f, 591.879028f, 2.237270f}, +}; + +const Position spawnPointsWrathboneColdwraith[4] = +{ + {925.477234f, -1.383301f, 580.479980f, 1.240126f}, + {935.6500513f, -6.321967f, 582.133972f, 1.141952f}, + {920.783020f, -44.854099f, 590.411987f, 1.590680f}, + {933.810974f, -45.009399f, 591.658997f, 1.582540f}, +}; + +const Position IceCiclespawnPointsFallenWarrior[8] = +{ + {997.252991f, -139.257004f, 615.875000f, 2.722710f}, + {1000.400024f, -127.873001f, 616.247009f, 3.403390f}, + {1049.770020f, -113.330002f, 629.814026f, 4.101520f}, + {1042.160034f, -104.300003f, 630.038025f, 3.892080f}, + {1062.150024f, -29.850700f, 633.879028f, 4.433140f}, + {1073.599976f, -31.012199f, 633.408997f, 4.607670f}, + {1069.910034f, 100.042000f, 631.062012f, 4.869470f}, + {1059.170044f, 95.906303f, 630.781006f, 4.939280f}, +}; + +const Position IceCiclespawnPointsWrathboneSkeleton[12] = +{ + {1033.609863f, -113.968132f, 627.523987f, 3.794239f}, + {1043.910034f, -124.613998f, 627.747986f, 3.595380f}, + {1068.930054f, -88.752602f, 632.828003f, 4.223700f}, + {1050.0f, -69.646599f, 633.078979f, 4.363320f}, + {1055.680054f, -52.713402f, 633.510986f, 4.607670f}, + {1069.369995f, -52.008701f, 633.919983f, 4.520400f}, + {1069.390015f, -12.805800f, 633.627014f, 4.537860f}, + {1077.579956f, -14.718200f, 632.726013f, 4.450590f}, + {1079.089966f, 34.306599f, 629.799988f, 4.607670f}, + {1071.270020f, 38.016102f, 629.828979f, 4.956740f}, + {1058.099976f, 92.909897f, 630.413025f, 5.074410f}, + {1070.369995f, 96.143799f, 631.075012f, 4.910200f}, +}; + +const Position IceCiclespawnPointsWrathboneSorcerer[2] = +{ + {1073.608643f, 49.570923f, 630.635559f, 4.996680f}, + {1067.034912f, 47.677979f, 630.472473f, 4.851380f}, +}; + +static const Position MoveLocations2[9] = +{ + {1025.534790f, 129.039612f, 628.156189f, 0.000000f}, + {1035.394897f, 144.298599f, 628.156189f, 0.000000f}, + {1042.624390f, 156.986679f, 628.156189f, 0.000000f}, + {1037.534790f, 132.039612f, 628.156189f, 0.000000f}, + {1050.534790f, 140.039612f, 628.156189f, 0.000000f}, + {1043.534790f, 141.039612f, 628.156189f, 0.000000f}, + {1038.534790f, 130.039612f, 628.156189f, 0.000000f}, + {1029.534790f, 125.039612f, 628.156189f, 0.000000f}, + {1028.534790f, 158.039612f, 628.156189f, 0.000000f}, +}; + +static const Position triggerPos1 = {1048.629150f, 110.203377f, 628.224060f, 2.118303f}; +static const Position triggerPos2 = {1063.679932f, 119.296852f, 628.156189f, 2.251821f}; +static const Position sindraPos = {986.353271f, 174.938004f, 670.492798f, 0.000000f}; +static const Position leaderPosOutro2 = {988.998962f, 172.250290f, 628.156128f, 0.000000f}; + class mob_ymirjar_flamebearer : public CreatureScript { public: @@ -224,58 +315,6 @@ class mob_wrathbone_laborer : public CreatureScript } }; -class mob_geist_ambusher : public CreatureScript -{ - public: - mob_geist_ambusher() : CreatureScript("mob_geist_ambusher") { } - - struct mob_geist_ambusherAI: public ScriptedAI - { - mob_geist_ambusherAI(Creature* creature) : ScriptedAI(creature) - { - } - - void Reset() - { - _leapingFaceMaulCooldown = 9000; - } - - void MoveInLineOfSight(Unit* who) - { - if (who->GetTypeId() != TYPEID_PLAYER) - return; - - if (me->IsWithinDistInMap(who, 30.0f)) - DoCast(who, SPELL_LEAPING_FACE_MAUL); - } - - void UpdateAI(const uint32 diff) - { - if (!UpdateVictim()) - return; - - if (_leapingFaceMaulCooldown < diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 5.0f, true)) - DoCast(target, SPELL_LEAPING_FACE_MAUL); - _leapingFaceMaulCooldown = urand(9000, 14000); - } - else - _leapingFaceMaulCooldown -= diff; - - DoMeleeAttackIfReady(); - } - - private: - uint32 _leapingFaceMaulCooldown; - }; - - CreatureAI* GetAI(Creature* creature) const - { - return new mob_geist_ambusherAI(creature); - } -}; - class spell_trash_mob_glacial_strike : public SpellScriptLoader { public: @@ -347,45 +386,41 @@ struct startPosition Position movePosition; } startPositions[] = { - { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 445.286f, 214.251f, 528.71f, 0.375996f } }, - { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 447.246f, 208.189f, 528.71f, 0.0264938f } }, - { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 437.81f, 231.115f, 528.708f, 0.525224f } }, - { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 437.444f, 225.798f, 528.712f, 0.36029f } }, - { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 438.941f, 221.784f, 528.708f, 0.30924f } }, - { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 440.384f, 216.785f, 528.71f, 0.203211f } }, - { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 441.479f, 211.472f, 528.709f,0.203211f } }, - { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 443.986f, 222.103f, 528.709f,6.27373f } }, - { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 448.944f, 204.945f, 528.709f,0.0258984f } }, - { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 446.613f, 211.37f, 528.709f,0.360472f } }, - { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 442.647f, 204.635f, 528.707f,0.0887308f } }, - { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 435.054f, 207.61f, 528.707f,0.173361f } }, - { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 434.568f, 210.389f, 528.707f,0.173361f } }, - { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 443.458f, 226.623f, 528.709f,0.232266f } }, - { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 435.593f, 204.535f, 528.728f,0.173361f } }, - { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_3_HORDE }, { 442.47f, 208.153f, 528.706f,0.259756f } }, - { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_3_HORDE }, { 441.333f, 233.866f, 528.709f,0.255828f } }, - { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_3_HORDE }, { 442.124f, 230.78f, 528.709f,0.244047f } }, - - { { NPC_KORLAEN, NPC_KORALEN }, { 432.386f, 212.979f, 528.709f, 0.237168f } }, - { { NPC_ELANDRA, NPC_KILARA }, { 431.65f, 216.976f, 528.709f, 0.20104f } }, - { { NPC_JAINA_PART1, NPC_SYLVANAS_PART1 }, { 438.84f, 213.502f, 528.709f, 0.1900f } }, + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 446.739990f, 228.576996f, 528.830994f } }, + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 449.187988f, 226.212006f, 528.830994f } }, + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 447.351990f, 222.753998f, 528.830994f } }, + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 442.691010f, 223.524994f, 528.830994f} }, + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 442.967010f, 219.535004f, 528.830994f} }, + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 447.290009f, 213.916000f, 528.830994f } }, + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 450.540985f, 212.276993f, 528.830994f } }, + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 452.884003f, 209.141006f, 528.830994f } }, + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 449.834991f, 206.682007f, 528.830994f } }, + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 445.794006f, 206.057007f, 528.830994f } }, + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 446.541992f, 209.985992f, 528.830994f } }, + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_3_HORDE }, { 446.29299f, 195.046997f, 528.830994f } }, + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_3_HORDE }, { 444.035004f, 197.669006f, 528.830994f } }, + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_3_HORDE }, { 443.346008f, 192.343002f, 528.830994f } }, + + //{ { NPC_KORLAEN, NPC_KORALEN }, { 438.505005f, 211.539993f, 528.708008f } }, + //{ { NPC_ELANDRA, NPC_KILARA }, { 438.946014f, 215.427002f, 528.708984f } }, + //{ { NPC_JAINA_PART1, NPC_SYLVANAS_PART1 }, { 440.787994f, 213.759003f, 528.710022f } }, { { 0, 0 }, { 0.0f, 0.0f, 0.0f, 0.0f } } }; -class pitofsaron_start : public CreatureScript +class pos_intro : public CreatureScript { public: - pitofsaron_start() : CreatureScript("pitofsaron_start") { } + pos_intro() : CreatureScript("pos_intro") { } CreatureAI* GetAI(Creature* pCreature) const { - return new pitofsaron_startAI(pCreature); + return new pos_introAI(pCreature); } - struct pitofsaron_startAI : public ScriptedAI + struct pos_introAI : public ScriptedAI { - pitofsaron_startAI(Creature *c) : ScriptedAI(c) + pos_introAI(Creature *c) : ScriptedAI(c) { instance = c->GetInstanceScript(); Reset(); @@ -409,9 +444,9 @@ class pitofsaron_start : public CreatureScript switch (StartPhase) { case 0: - if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 50.0f, true)) + if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 250.0f, true)) { - sTyrannus->SetFlying(true); + sTyrannus->SetCanFly(true); DoScriptText(SAY_TYRRANUS_1, sTyrannus); int32 entryIndex; @@ -432,7 +467,7 @@ class pitofsaron_start : public CreatureScript StartTimer = 5000; break; case 1: - if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 50.0f, true)) + if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 250.0f, true)) DoScriptText(SAY_TYRRANUS_2, sTyrannus); ++StartPhase; StartTimer = 15000; @@ -445,7 +480,7 @@ class pitofsaron_start : public CreatureScript if (instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) { - GetCreatureListWithEntryInGrid(Champion1, me, NPC_CHAMPION_1_ALLIANCE, 150.0f); + GetCreatureListWithEntryInGrid(Champion1, me, NPC_CHAMPION_1_ALLIANCE, 250.0f); for(std::list::iterator itr = Champion1.begin(); itr != Champion1.end(); ++itr) { Creature *sChampions = *itr; @@ -453,14 +488,10 @@ class pitofsaron_start : public CreatureScript continue; if (sChampions->isAlive()) - if (Creature* sNecrolyte = me->FindNearestCreature(367880, 150.0f, true)) - { - sChampions->Attack(sNecrolyte, true); - sChampions->GetMotionMaster()->MoveChase(sNecrolyte); - } + sChampions->GetMotionMaster()->MovePoint(0, 487.463989f, 246.891006f, 528.708984f); } - GetCreatureListWithEntryInGrid(Champion2, me, NPC_CHAMPION_2_ALLIANCE, 150.0f); + GetCreatureListWithEntryInGrid(Champion2, me, NPC_CHAMPION_2_ALLIANCE, 250.0f); for(std::list::iterator itr = Champion2.begin(); itr != Champion2.end(); ++itr) { Creature *sChampions = *itr; @@ -468,16 +499,12 @@ class pitofsaron_start : public CreatureScript continue; if (sChampions->isAlive()) - if (Creature* sNecrolyte = me->FindNearestCreature(36788, 150.0f, true)) - { - sChampions->Attack(sNecrolyte, true); - sChampions->GetMotionMaster()->MoveChase(sNecrolyte); - } + sChampions->GetMotionMaster()->MovePoint(0, 504.444000f, 211.061996f, 528.710022f); } } else { - GetCreatureListWithEntryInGrid(Champion1, me, NPC_CHAMPION_1_HORDE, 150.0f); + GetCreatureListWithEntryInGrid(Champion1, me, NPC_CHAMPION_1_HORDE, 250.0f); for(std::list::iterator itr = Champion1.begin(); itr != Champion1.end(); ++itr) { Creature *sChampions = *itr; @@ -485,14 +512,11 @@ class pitofsaron_start : public CreatureScript continue; if (sChampions->isAlive()) - if (Creature* sNecrolyte = me->FindNearestCreature(367880, 150.0f, true)) - { - sChampions->Attack(sNecrolyte, true); - sChampions->GetMotionMaster()->MoveChase(sNecrolyte); - } + sChampions->GetMotionMaster()->MovePoint(0, 487.463989f, 246.891006f, 528.708984f); + } - GetCreatureListWithEntryInGrid(Champion2, me, NPC_CHAMPION_2_HORDE, 150.0f); + GetCreatureListWithEntryInGrid(Champion2, me, NPC_CHAMPION_2_HORDE, 250.0f); for(std::list::iterator itr = Champion2.begin(); itr != Champion2.end(); ++itr) { Creature *sChampions = *itr; @@ -500,14 +524,10 @@ class pitofsaron_start : public CreatureScript continue; if (sChampions->isAlive()) - if (Creature* sNecrolyte = me->FindNearestCreature(36788, 150.0f, true)) - { - sChampions->Attack(sNecrolyte, true); - sChampions->GetMotionMaster()->MoveChase(sNecrolyte); - } + sChampions->GetMotionMaster()->MovePoint(0, 504.444000f, 211.061996f, 528.710022f); } - GetCreatureListWithEntryInGrid(Champion3, me, NPC_CHAMPION_3_HORDE, 150.0f); + GetCreatureListWithEntryInGrid(Champion3, me, NPC_CHAMPION_3_HORDE, 250.0f); for(std::list::iterator itr = Champion3.begin(); itr != Champion3.end(); ++itr) { Creature *sChampions = *itr; @@ -515,24 +535,20 @@ class pitofsaron_start : public CreatureScript continue; if (sChampions->isAlive()) - if (Creature* sNecrolyte = me->FindNearestCreature(36788, 150.0f, true)) - { - sChampions->Attack(sNecrolyte, true); - sChampions->GetMotionMaster()->MoveChase(sNecrolyte); - } + sChampions->GetMotionMaster()->MovePoint(0, 504.444000f, 211.061996f, 528.710022f); } } ++StartPhase; StartTimer = 1000; break; case 3: - if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 150.0f, true)) + if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 250.0f, true)) DoScriptText(SAY_TYRRANUS_3, sTyrannus); ++StartPhase; StartTimer = 2000; break; case 4: - if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 150.0f, true)) + if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 250.0f, true)) DoPlaySoundToSet(sTyrannus, SAY_SOUND); for(std::list::iterator itr = Champion1.begin(); itr != Champion1.end(); ++itr) @@ -544,7 +560,7 @@ class pitofsaron_start : public CreatureScript if (sChampions->isAlive()) { sChampions->AttackStop(); - sChampions->GetMotionMaster()->MoveFall(0); + sChampions->GetMotionMaster()->MoveFall(); } } @@ -557,7 +573,7 @@ class pitofsaron_start : public CreatureScript if (sChampions->isAlive()) { sChampions->AttackStop(); - sChampions->GetMotionMaster()->MoveFall(0); + sChampions->GetMotionMaster()->MoveFall(); } } @@ -570,14 +586,14 @@ class pitofsaron_start : public CreatureScript if (sChampions->isAlive()) { sChampions->AttackStop(); - sChampions->GetMotionMaster()->MoveFall(0); + sChampions->GetMotionMaster()->MoveFall(); } } ++StartPhase; StartTimer = 5000; break; case 5: - if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 50.0f, true)) + if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 250.0f, true)) sTyrannus->CastSpell(sTyrannus, SPELL_NECROMANTIC_POWER, false); for(std::list::iterator itr = Champion1.begin(); itr != Champion1.end(); ++itr) @@ -666,7 +682,7 @@ class pitofsaron_start : public CreatureScript sChampions->SetReactState(REACT_PASSIVE); } - if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 50.0f, true)) + if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 250.0f, true)) DoScriptText(SAY_TYRRANUS_4, sTyrannus); for(std::list::iterator itr = Champion1.begin(); itr != Champion1.end(); ++itr) @@ -675,12 +691,12 @@ class pitofsaron_start : public CreatureScript if (!sChampions) continue; - if (Creature* pHelper = me->FindNearestCreature(NPC_KORALEN, 150.0f, true)) + if (Creature* pHelper = me->FindNearestCreature(NPC_KORALEN, 250.0f, true)) { sChampions->Attack(pHelper, true); sChampions->GetMotionMaster()->MoveChase(pHelper); } - else if (Creature* pHelper = me->FindNearestCreature(NPC_KORLAEN, 150.0f, true)) + else if (Creature* pHelper = me->FindNearestCreature(NPC_KORLAEN, 250.0f, true)) { sChampions->Attack(pHelper, true); sChampions->GetMotionMaster()->MoveChase(pHelper); @@ -693,12 +709,12 @@ class pitofsaron_start : public CreatureScript if (!sChampions) continue; - if (Creature* pHelper = me->FindNearestCreature(NPC_KORALEN, 150.0f, true)) + if (Creature* pHelper = me->FindNearestCreature(NPC_KORALEN, 250.0f, true)) { sChampions->Attack(pHelper, true); sChampions->GetMotionMaster()->MoveChase(pHelper); } - else if (Creature* pHelper = me->FindNearestCreature(NPC_KORLAEN, 150.0f, true)) + else if (Creature* pHelper = me->FindNearestCreature(NPC_KORLAEN, 250.0f, true)) { sChampions->Attack(pHelper, true); sChampions->GetMotionMaster()->MoveChase(pHelper); @@ -711,12 +727,12 @@ class pitofsaron_start : public CreatureScript if (!sChampions) continue; - if (Creature* pHelper = me->FindNearestCreature(NPC_KORALEN, 150.0f, true)) + if (Creature* pHelper = me->FindNearestCreature(NPC_KORALEN, 250.0f, true)) { sChampions->Attack(pHelper, true); sChampions->GetMotionMaster()->MoveChase(pHelper); } - else if (Creature* pHelper = me->FindNearestCreature(NPC_KORLAEN, 150.0f, true)) + else if (Creature* pHelper = me->FindNearestCreature(NPC_KORLAEN, 250.0f, true)) { sChampions->Attack(pHelper, true); sChampions->GetMotionMaster()->MoveChase(pHelper); @@ -849,7 +865,7 @@ class pitofsaron_start : public CreatureScript StartTimer = 10000; break; case 12: - if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 150.0f, true)) + if (Creature* sTyrannus = me->FindNearestCreature(NPC_TYRANNUS_EVENTS, 250.0f, true)) sTyrannus->GetMotionMaster()->MovePoint(0, 938.125f, 93.928f, 585.39f); instance->SetData(DATA_TYRANNUS_START, DONE); event = false; @@ -872,142 +888,496 @@ class pitofsaron_start : public CreatureScript bool event; }; }; +class at_pos_intro : public AreaTriggerScript +{ + public: + at_pos_intro() : AreaTriggerScript("at_pos_intro") { } + bool OnTrigger(Player* player, AreaTriggerEntry const* areaTrigger) + { + if (InstanceScript* instance = player->GetInstanceScript()) + { + if(instance->GetData(DATA_TYRANNUS_START) == IN_PROGRESS || instance->GetData(DATA_TYRANNUS_START) == DONE || player->isGameMaster() || !instance) + return false; + instance->SetData(DATA_TYRANNUS_START, IN_PROGRESS); -/*Порабощенные солдаты*/ + return false; + } + return false; + } +}; -class ball_and_chain : public GameObjectScript +enum sTyrannus { -public: - ball_and_chain() : GameObjectScript("ball_and_chain") { } + SAY_TYRANNUS_AMBUSH_1 = -1658050, + SAY_TYRANNUS_AMBUSH_2 = -1658051, + SAY_GAUNTLET_START = -1658052, + SAY_RESCUED_HORDE_ALLIANCE = -1658071, // TODO: sound +}; - bool OnGossipHello(Player* player, GameObject* pGO) - { - if (player->getFaction() == HORDE) - { - Creature* pHordeSlave = pGO->FindNearestCreature(36770, 1.0f); - if (pHordeSlave) +class at_ymirjar_flamebearer_pos : public AreaTriggerScript +{ + public: + at_ymirjar_flamebearer_pos() : AreaTriggerScript("at_ymirjar_flamebearer_pos") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* areaTrigger) + { + InstanceScript* instance = player->GetInstanceScript(); + if(instance->GetData(DATA_AREA_TRIGGER_YMIRJAR) == DONE || player->isGameMaster() || !instance) + return false; + + if (instance->GetBossState(DATA_GARFROST) == DONE && instance->GetBossState(DATA_ICK) == DONE) + { + instance->SetData(DATA_AREA_TRIGGER_YMIRJAR, DONE); + if(Creature *pTyrannus = player->SummonCreature(NPC_TYRANNUS_EVENTS, 940.076355f, 91.047089f, 576.178040f, 3.596342f, TEMPSUMMON_DEAD_DESPAWN, 0)) + { + DoScriptText(SAY_TYRANNUS_AMBUSH_1, pTyrannus); + pTyrannus->SetSpeed(MOVE_FLIGHT, 8.5f, true); + pTyrannus->GetMotionMaster()->MovePoint(0, 916.282104f, -71.079742f, 606.430359f); + } + for (uint8 i = 0; i < 4; i++) + { + player->SummonCreature(NPC_YMIRJAR_FLAMEBEARER, spawnPoints1[i], TEMPSUMMON_DEAD_DESPAWN, 0); + player->SummonCreature(NPC_YMIRJAR_WRATBRINGER, spawnPoints2[i], TEMPSUMMON_DEAD_DESPAWN, 0); + } + for(uint8 k = 0; k < 2; k++) + { + player->SummonCreature(NPC_YMIRJAR_DEATHBRINGER, spawnPointsYmirjar[k], TEMPSUMMON_DEAD_DESPAWN, 0); + } + + return false; + } + return false; + } +}; +class at_fallen_warrior_pos : public AreaTriggerScript +{ + public: + at_fallen_warrior_pos() : AreaTriggerScript("at_fallen_warrior_pos") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* areaTrigger) + { + InstanceScript* instance = player->GetInstanceScript(); + if(instance->GetData(DATA_AREA_TRIGGER_FALLEN) == DONE || player->isGameMaster() || !instance) + return false; + + if (instance->GetData(DATA_AREA_TRIGGER_YMIRJAR) == DONE) + { + instance->SetData(DATA_AREA_TRIGGER_FALLEN, DONE); + if(Creature *pTyrannus = player->FindNearestCreature(NPC_TYRANNUS_EVENTS, 250.0f, true)) + { + DoScriptText(SAY_TYRANNUS_AMBUSH_2, pTyrannus); + } + for (uint8 i = 0; i < 8; i++) + { + player->SummonCreature(NPC_FALLEN_WARRIOR, spawnPointsFallenWarrior[i], TEMPSUMMON_DEAD_DESPAWN, 0); + } + for (uint8 i = 0; i < 4; i++) + { + player->SummonCreature(NPC_WRATHBONE_COLDWRAITH, spawnPointsWrathboneColdwraith[i], TEMPSUMMON_DEAD_DESPAWN, 0); + } + return false; + } + + return false; + } +}; +class at_ice_cicle_pos : public AreaTriggerScript +{ + public: + at_ice_cicle_pos() : AreaTriggerScript("at_ice_cicle_pos") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* areaTrigger) + { + InstanceScript* instance = player->GetInstanceScript(); + if(instance->GetData(DATA_AREA_TRIGGER_ICE_CICLE) == IN_PROGRESS || instance->GetData(DATA_AREA_TRIGGER_ICE_CICLE) == DONE || player->isGameMaster() || !instance) + return false; + if (instance->GetData(DATA_AREA_TRIGGER_FALLEN) == DONE && instance->GetData(DATA_AREA_TRIGGER_YMIRJAR) == DONE) { - pHordeSlave->MonsterTextEmote("делает жест рукой, как бы поднимая бокал за ваше здоровье", player->GetGUID()); - pHordeSlave->GetMotionMaster()->MovePoint(0, 427.36f, 212.636f, 529.47f); - pHordeSlave->DisappearAndDie(); + instance->SetData(DATA_AREA_TRIGGER_ICE_CICLE, IN_PROGRESS); + if (Creature* pTyrannus = player->FindNearestCreature(NPC_TYRANNUS_EVENTS, 150.0f, true)) + { + DoScriptText(SAY_GAUNTLET_START, pTyrannus); + pTyrannus->DespawnOrUnsummon(); + } + for (uint8 i = 0; i < 8; i++) + { + player->SummonCreature(NPC_FALLEN_WARRIOR, IceCiclespawnPointsFallenWarrior[i], TEMPSUMMON_DEAD_DESPAWN, 0); + } + for (uint8 i = 0; i < 12; i++) + { + player->SummonCreature(NPC_WRATHBONE_SKELETON, IceCiclespawnPointsWrathboneSkeleton[i], TEMPSUMMON_DEAD_DESPAWN, 0); + } + for (uint8 i = 0; i < 2; i++) + { + player->SummonCreature(NPC_WRATHBONE_SORCERER, IceCiclespawnPointsWrathboneSorcerer[i], TEMPSUMMON_DEAD_DESPAWN, 0); + } + return false; } - } - else + return false; + } +}; + +class at_slave_rescued_pos : public AreaTriggerScript +{ + public: + at_slave_rescued_pos() : AreaTriggerScript("at_slave_rescued_pos") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* areaTrigger) + { + InstanceScript* instance = player->GetInstanceScript(); + + if(instance->GetData(DATA_SLAVE_OUTRO_GARFROST) == DONE || player->isGameMaster() || !instance) + return false; + + if(instance->GetData(DATA_SLAVE_OUTRO_GARFROST) == IN_PROGRESS) { - Creature* pAllianceSlave = pGO->FindNearestCreature(36764, 1.0f); - if (pAllianceSlave) - { - pAllianceSlave->MonsterTextEmote("делает жест рукой, как бы поднимая бокал за ваше здоровье", player->GetGUID()); - pAllianceSlave->GetMotionMaster()->MovePoint(0, 427.36f, 212.636f, 529.47f); - pAllianceSlave->DisappearAndDie(); + instance->SetData(DATA_SLAVE_OUTRO_GARFROST, DONE); + if(Creature *rSlave = player->FindNearestCreature(36888, 50.0f, true)) + { + DoScriptText(SAY_RESCUED_HORDE_ALLIANCE, rSlave); + rSlave->GetMotionMaster()->MovePoint(0, 831.654968f, 6.049870f, 509.910583f); // not correct + } + uint8 i = 0; + GetCreatureListWithEntryInGrid(Rescued1, player, 36889, 50.0f); + for(std::list::iterator itr = Rescued1.begin(); itr != Rescued1.end(); ++itr) + { + Creature *rescued = *itr; + if(!rescued) + continue; + + if (rescued->isAlive()) + rescued->GetMotionMaster()->MovePoint(0, 840.661987f, 5.974489f, 510.107910f); + ++i; + } + return false; } - } - return true; - } + + return false; + } + + private: + std::list Rescued1; }; -/*Порабощенные солдаты, нападение Горгульи */ +class at_geist_ambusher_pos : public AreaTriggerScript +{ + public: + at_geist_ambusher_pos() : AreaTriggerScript("at_geist_ambusher_pos") { } -class npc_slave_p : public CreatureScript + bool OnTrigger(Player* player, AreaTriggerEntry const* areaTrigger) + { + InstanceScript* instance = player->GetInstanceScript(); + + if(player->isGameMaster() || !instance) + return false; + + if(instance->GetData(DATA_SLAVE_OUTRO_GARFROST) == DONE) + { + uint8 i = 0; + GetCreatureListWithEntryInGrid(Geist, player, 36886, 300.0f); + for(std::list::iterator itr = Geist.begin(); itr != Geist.end(); ++itr) + { + Creature *geist = *itr; + if(!geist) + continue; + + if (geist->isAlive()) //TODO sound. + geist->GetMotionMaster()->MoveJump(835.122620f, 1.335451f, 509.846619f, 30.0f, 20.0f); + ++i; + } + return true; + } + + return false; + } + + private: + std::list Geist; +}; + +enum SAYPosOutro +{ + SAY_GORKUN_OUTRO_1 = -1658064, + SAY_GORKUN_OUTRO_2 = -1658065, + SAY_JAYNA_OUTRO_3 = -1658066, + SAY_SYLVANAS_OUTRO_3 = -1658067, + SAY_JAYNA_OUTRO_4 = -1658068, + SAY_SYLVANAS_OUTRO_4 = -1658069, + SAY_JAYNA_OUTRO_5 = -1658070, +}; + +class pos_outro : public CreatureScript { public: - npc_slave_p() : CreatureScript("npc_slave_p") { } + pos_outro() : CreatureScript("pos_outro") { } CreatureAI* GetAI(Creature* pCreature) const { - return new npc_slave_pAI(pCreature); + return new pos_outroAI(pCreature); } - struct npc_slave_pAI : public ScriptedAI + struct pos_outroAI : public ScriptedAI { - npc_slave_pAI(Creature *c) : ScriptedAI(c) + pos_outroAI(Creature *pCreature) : ScriptedAI(pCreature) { - instance = c->GetInstanceScript(); + instance = pCreature->GetInstanceScript(); Reset(); } - + void Reset() { - Stage = 0; - Time = 4000; + uiIntroTimer1 = 0; + uiIntroPhase1 = 0; + me->SetVisible(false); + Champions1.clear(); + Champions2.clear(); + Champions3.clear(); } void UpdateAI(const uint32 diff) { - if (Time <= diff) + if(instance->GetBossState(DATA_TYRANNUS) == DONE) + { + if (uiIntroTimer1 <= diff) { - switch (Stage) + switch (uiIntroPhase1) { - case 0: - if (instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE) + case 0: + if (Creature* GorkunOrVictus = me->GetCreature(*me, instance->GetData64(DATA_VICTUS_OR_GORKUN_FREED))) + GorkunOrVictus->GetMotionMaster()->MovePoint(0, leaderPosOutro2); + + if (instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) { - GetCreatureListWithEntryInGrid(gargoyle, me, 36896, 50.0f); - for(std::list::iterator itr = gargoyle.begin(); itr != gargoyle.end(); ++itr) + uint8 i = 0; + GetCreatureListWithEntryInGrid(Champions1, me, NPC_FREED_SLAVE_3_ALLIANCE, 100.0f); + for(std::list::iterator itr = Champions1.begin(); itr != Champions1.end(); ++itr) { - Creature *sGargoyle = *itr; - if (!sGargoyle) + Creature *slave = *itr; + if(!slave) continue; - if (sGargoyle->isAlive()) - if (Creature* sSlave = me->FindNearestCreature(36771, 50.0f, true)) - { - if(sGargoyle->isAlive()) - { - sGargoyle->Attack(sSlave, true); - sGargoyle->GetMotionMaster()->MoveChase(sSlave); - DoPlaySoundToSet(sSlave, 17152); - sSlave->Kill(sSlave); - } - } + if (slave->isAlive()) + slave->GetMotionMaster()->MovePoint(0, MoveLocations2[i]); + ++i; + } + + i = 4; + GetCreatureListWithEntryInGrid(Champions2, me, NPC_FREED_SLAVE_1_ALLIANCE, 100.0f); + for(std::list::iterator itr = Champions2.begin(); itr != Champions2.end(); ++itr) + { + Creature *slave = *itr; + if(!slave) + continue; + + if (slave->isAlive()) + slave->GetMotionMaster()->MovePoint(0, MoveLocations2[i]); + ++i; + } + + i = 7; + GetCreatureListWithEntryInGrid(Champions3, me, NPC_FREED_SLAVE_2_ALLIANCE, 100.0f); + for(std::list::iterator itr = Champions3.begin(); itr != Champions3.end(); ++itr) + { + Creature *slave = *itr; + if(!slave) + continue; + + if (slave->isAlive()) + slave->GetMotionMaster()->MovePoint(0, MoveLocations2[i]); + ++i; } } else - { - GetCreatureListWithEntryInGrid(gargoyle, me, 36896, 50.0f); - for(std::list::iterator itr = gargoyle.begin(); itr != gargoyle.end(); ++itr) + { + uint8 i = 0; + GetCreatureListWithEntryInGrid(Champions1, me, NPC_FREED_SLAVE_3_HORDE, 100.0f); + for(std::list::iterator itr = Champions1.begin(); itr != Champions1.end(); ++itr) { - Creature *sGargoyle = *itr; - if (!sGargoyle) + Creature *slave = *itr; + if(!slave) continue; - if (sGargoyle->isAlive()) - if (Creature* sSlave = me->FindNearestCreature(36765, 50.0f, true)) - { - if(sSlave->isAlive()) - { - sGargoyle->Attack(sSlave, true); - sGargoyle->GetMotionMaster()->MoveChase(sSlave); - sSlave->Kill(sSlave); - } - } + if (slave->isAlive()) + slave->GetMotionMaster()->MovePoint(0, MoveLocations2[i]); + ++i; + } + + i = 4; + GetCreatureListWithEntryInGrid(Champions2, me, NPC_FREED_SLAVE_1_HORDE, 100.0f); + for(std::list::iterator itr = Champions2.begin(); itr != Champions2.end(); ++itr) + { + Creature *slave = *itr; + if(!slave) + continue; + + if (slave->isAlive()) + slave->GetMotionMaster()->MovePoint(0, MoveLocations2[i]); + ++i; + } + + i = 7; + GetCreatureListWithEntryInGrid(Champions3, me, NPC_FREED_SLAVE_2_HORDE, 100.0f); + for(std::list::iterator itr = Champions3.begin(); itr != Champions3.end(); ++itr) + { + Creature *slave = *itr; + if(!slave) + continue; + + if (slave->isAlive()) + slave->GetMotionMaster()->MovePoint(0, MoveLocations2[i]); + ++i; + } + } + ++uiIntroPhase1; + uiIntroTimer1 = 15000; + break; + case 1: + if (Creature* GorkunOrVictus = me->GetCreature(*me, instance->GetData64(DATA_VICTUS_OR_GORKUN_FREED))) + DoScriptText(SAY_GORKUN_OUTRO_1, GorkunOrVictus); + ++uiIntroPhase1; + uiIntroTimer1 = 15000; + break; + case 2: + if (Creature* GorkunOrVictus = me->GetCreature(*me, instance->GetData64(DATA_VICTUS_OR_GORKUN_FREED))) + DoScriptText(SAY_GORKUN_OUTRO_2, GorkunOrVictus); + ++uiIntroPhase1; + uiIntroTimer1 = 5000; + break; + case 3: + me->SetVisible(true); + if(Creature* pSindragosa = me->SummonCreature(NPC_SINDRAGOSA, sindraPos, TEMPSUMMON_CORPSE_DESPAWN, 3000)) + pSindragosa->SetCanFly(true); + ++uiIntroPhase1; + uiIntroTimer1 = 5000; + break; + case 4: + if (Creature* portal = me->SummonCreature(22517, triggerPos1, TEMPSUMMON_TIMED_DESPAWN, 30000)) + { + portal->CastSpell(portal, 51807, false); + portal->SetDisplayId(17612); + } + if (Creature* portal = me->SummonCreature(22517, triggerPos2, TEMPSUMMON_TIMED_DESPAWN, 30000)) + { + portal->CastSpell(portal, 51807, false); + portal->SetDisplayId(17612); + } + if(me->GetEntry() == NPC_SYLVANAS_PART2) + DoScriptText(SAY_SYLVANAS_OUTRO_3, me); + else + DoScriptText(SAY_JAYNA_OUTRO_3, me); + + if(instance) + { + Map* pMap = me->GetMap(); + if(!pMap) + return; + + Map::PlayerList const &lPlayers = pMap->GetPlayers(); + for(Map::PlayerList::const_iterator itr = lPlayers.begin(); itr != lPlayers.end(); ++itr) + { + if(!itr->getSource()->isAlive()) + continue; + me->CastSpell(itr->getSource(), 36937, true); + itr->getSource()->NearTeleportTo(1065.114746f, 96.392105f, 630.999573f, 2.063386f); } } - ++Stage; - Time = 4000; - break; - + if (Creature* GorkunOrVictus = me->GetCreature(*me, instance->GetData64(DATA_VICTUS_OR_GORKUN_FREED))) + if (Creature* pSindragosa = me->GetCreature(*me, instance->GetData64(DATA_SINDRAGOSA))) + pSindragosa->CastSpell(GorkunOrVictus, 70521, true); + + if (Creature* GorkunOrVictus = me->GetCreature(*me, instance->GetData64(DATA_VICTUS_OR_GORKUN_FREED))) + if (GorkunOrVictus->isAlive() && GorkunOrVictus->IsInWorld()) + me->Kill(GorkunOrVictus, false); + + for(std::list::iterator itr = Champions1.begin(); itr != Champions1.end(); ++itr) + { + Creature *slave = *itr; + if(!slave) + continue; + + if (slave->isAlive() && slave->IsInWorld()) + slave->Kill(slave, false); + } + + for(std::list::iterator itr = Champions2.begin(); itr != Champions2.end(); ++itr) + { + Creature *slave = *itr; + if(!slave) + continue; + + if (slave->isAlive() && slave->IsInWorld()) + slave->Kill(slave, false); + } + + for(std::list::iterator itr = Champions3.begin(); itr != Champions3.end(); ++itr) + { + Creature *slave = *itr; + if(!slave) + continue; + + if (slave->isAlive() && slave->IsInWorld()) + slave->Kill(slave, false); + } + ++uiIntroPhase1; + uiIntroTimer1 = 5000; + break; + case 5: + if (Creature* pSindragosa = me->GetCreature(*me, instance->GetData64(DATA_SINDRAGOSA))) + pSindragosa->GetMotionMaster()->MoveCharge(804.957214f, 102.497406f, 728.966370f, 42.00f, 0); + + if(me->GetEntry() == NPC_SYLVANAS_PART2) + DoScriptText(SAY_SYLVANAS_OUTRO_4, me); + else + DoScriptText(SAY_JAYNA_OUTRO_4, me); + ++uiIntroPhase1; + uiIntroTimer1 = 7000; + break; + case 6: + if(me->GetEntry() == NPC_JAINA_PART2) + DoScriptText(SAY_JAYNA_OUTRO_5, me); + ++uiIntroPhase1; + uiIntroTimer1 = 7000; + break; + case 7: + if (Creature* jainaOrSylvanas = me->GetCreature(*me, instance->GetData64(DATA_JAINA_SYLVANAS_2))) + jainaOrSylvanas->GetMotionMaster()->MovePoint(0, 1100.734497f, 246.650696f, 628.182190f); + ++uiIntroPhase1; + uiIntroTimer1 = 20000; + break; + case 8: + instance->HandleGameObject(instance->GetData64(GO_HALLS_OF_REFLECT_PORT), true); + ++uiIntroPhase1; + uiIntroTimer1 = 25000; + break; + return; } - }else Time -= diff; + } else uiIntroTimer1 -= diff; + } } - - private: - InstanceScript* instance; - std::list gargoyle; - uint32 Time; - uint8 Stage; + + private: + InstanceScript* instance; + uint32 uiIntroTimer1; + uint8 uiIntroPhase1; + std::list Champions1; + std::list Champions2; + std::list Champions3; }; }; - void AddSC_pit_of_saron() { new mob_ymirjar_flamebearer(); new mob_wrathbone_laborer(); new mob_iceborn_protodrake(); - new mob_geist_ambusher(); new spell_trash_mob_glacial_strike(); - new pitofsaron_start(); - new ball_and_chain(); - new npc_slave_p(); -} + new pos_intro(); + new at_pos_intro(); + new at_ymirjar_flamebearer_pos(); + new at_fallen_warrior_pos(); + new at_ice_cicle_pos(); + new at_slave_rescued_pos(); + new at_geist_ambusher_pos(); + new pos_outro(); +} \ No newline at end of file diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h index c98ce49174c88..710ca703fd205 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h @@ -36,6 +36,13 @@ enum DataTypes DATA_TYRANNUS_EVENT = 7, DATA_TEAM_IN_INSTANCE = 8, DATA_TYRANNUS_START = 9, + DATA_AREA_TRIGGER_YMIRJAR = 10, + DATA_AREA_TRIGGER_FALLEN = 11, + DATA_AREA_TRIGGER_ICE_CICLE = 12, + DATA_VICTUS_OR_GORKUN_FREED = 13, + DATA_SLAVE_OUTRO_GARFROST = 14, + DATA_GEIST_AMBUSHER = 15, + DATA_SINDRAGOSA = 16, }; enum CreatureIds @@ -81,10 +88,18 @@ enum CreatureIds NPC_MARTIN_VICTUS_2 = 37580, NPC_GORKUN_IRONSKULL_1 = 37581, NPC_GORKUN_IRONSKULL_2 = 37592, + NPC_YMIRJAR_DEATHBRINGER = 36892, + NPC_YMIRJAR_FLAMEBEARER = 36893, + NPC_YMIRJAR_WRATBRINGER = 36840, + NPC_FALLEN_WARRIOR = 36841, + NPC_WRATHBONE_COLDWRAITH = 36842, + NPC_WRATHBONE_REAVER = 37729, + NPC_WRATHBONE_SORCERER = 37728, + NPC_WRATHBONE_SKELETON = 36877, + NPC_SINDRAGOSA = 37755, NPC_FORGEMASTER_STALKER = 36495, NPC_EXPLODING_ORB = 36610, - NPC_YMIRJAR_DEATHBRINGER = 36892, NPC_ICY_BLAST = 36731 }; @@ -92,6 +107,7 @@ enum GameObjectIds { GO_SARONITE_ROCK = 196485, GO_ICE_WALL = 201885, + GO_HALLS_OF_REFLECT_PORT = 201848, // unlocked by jaina/sylvanas at last outro }; #endif