aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMalcrom <malcromdev@gmail.com>2013-06-30 13:39:07 -0230
committerMalcrom <malcromdev@gmail.com>2013-06-30 13:39:07 -0230
commit1eaf3c9c9d2cebc14be597be3bb3077a0f33bf20 (patch)
tree06e88af652fcc8e755408e51b666232e82965aec /src
parent25cc9310a74d8594cd2a528bf6468336efb47c83 (diff)
Core/Scripting: Gyth event still not finished but completable.
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h7
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp23
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp15
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp79
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp103
5 files changed, 176 insertions, 51 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h b/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h
index ccd96ef81d2..f9201944cfe 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h
@@ -69,8 +69,7 @@ enum CreaturesIds
NPC_BLACKHAND_SUMMONER = 9818,
NPC_BLACKHAND_VETERAN = 9819,
NPC_BLACKHAND_INCARCERATOR = 10316,
- NPC_LORD_VICTOR_NEFARIUS = 10162,
- NPC_REND_BLACKHAND = 10429
+ NPC_LORD_VICTOR_NEFARIUS = 10162
};
enum AdditionalData
@@ -111,7 +110,9 @@ enum GameObjectsIds
GO_EMBERSEER_RUNE_6 = 175271,
GO_EMBERSEER_RUNE_7 = 175272,
// For Gyth event
- GO_DR_PORTCULLIS = 175185
+ GO_DR_PORTCULLIS = 175185,
+ GO_PORTCULLIS_ACTIVE = 164726,
+ GO_PORTCULLIS_TOBOSSROOMS = 175186
};
#endif
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
index 3c79a08487c..f20798d64fb 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
@@ -42,7 +42,8 @@ enum Events
EVENT_FREEZE = 2,
EVENT_FLAME_BREATH = 3,
EVENT_KNOCK_AWAY = 4,
- EVENT_SUMMONED = 5,
+ EVENT_SUMMONED_1 = 5,
+ EVENT_SUMMONED_2 = 6
};
class boss_gyth : public CreatureScript
@@ -58,7 +59,6 @@ public:
void Reset()
{
- _Reset();
SummonedRend = false;
if (instance->GetBossState(DATA_GYTH) == IN_PROGRESS)
{
@@ -79,7 +79,7 @@ public:
void JustDied(Unit* /*killer*/)
{
- _JustDied();
+ instance->SetBossState(DATA_GYTH, DONE);
}
void SetData(uint32 /*type*/, uint32 data)
@@ -87,7 +87,7 @@ public:
switch (data)
{
case 1:
- events.ScheduleEvent(EVENT_SUMMONED, 1000);
+ events.ScheduleEvent(EVENT_SUMMONED_1, 1000);
break;
default:
break;
@@ -99,7 +99,7 @@ public:
if (!SummonedRend && HealthBelowPct(5))
{
- DoCast(me, SPELL_SUMMON_REND); // Rend will despawn on Gyth death. Core issue with summoned npc's all despawning after summoner dies.
+ DoCast(me, SPELL_SUMMON_REND);
me->RemoveAura(SPELL_REND_MOUNTS);
SummonedRend = true;
}
@@ -112,13 +112,18 @@ public:
{
switch (eventId)
{
- case EVENT_SUMMONED:
+ case EVENT_SUMMONED_1:
me->AddAura(SPELL_REND_MOUNTS, me);
- me->GetMotionMaster()->MovePath(GYTH_PATH_1, false);
- if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 25.0f))
+ if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 40.0f))
portcullis->UseDoorOrButton();
if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true))
- victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_2, false);
+ victor->AI()->SetData(1, 1);
+ events.ScheduleEvent(EVENT_SUMMONED_2, 2000);
+ break;
+ case EVENT_SUMMONED_2:
+ me->GetMotionMaster()->MovePath(GYTH_PATH_1, false);
+ break;
+ default:
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
index b989e03a8a1..eca24289945 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
@@ -176,15 +176,16 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_WHIRLWIND, 13000);
- events.ScheduleEvent(EVENT_CLEAVE, 15000);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 17000);
+ events.ScheduleEvent(EVENT_WHIRLWIND, urand (13000, 15000));
+ events.ScheduleEvent(EVENT_CLEAVE, urand (15000, 17000));
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand (17000, 19000));
}
void JustDied(Unit* /*killer*/)
{
_JustDied();
- // Do data set on victor
+ if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true))
+ victor->AI()->SetData(1, 2);
}
void SetData(uint32 type, uint32 data)
@@ -348,8 +349,6 @@ public:
victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true);
break;
case EVENT_PATH_REND:
- // path to gyth and spawn gyth.
- // after despawn gyth fight will start
me->GetMotionMaster()->MovePath(REND_PATH_1, false);
break;
case EVENT_TELEPORT_1:
@@ -419,11 +418,11 @@ public:
break;
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 10000);
+ events.ScheduleEvent(EVENT_CLEAVE, urand(10000, 14000));
break;
case EVENT_MORTAL_STRIKE:
DoCastVictim(SPELL_MORTAL_STRIKE);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 16000);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(14000, 16000));
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
index ab462319450..e5fd69c735e 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
@@ -46,24 +46,27 @@ public:
instance_blackrock_spireMapScript(InstanceMap* map) : InstanceScript(map)
{
SetBossNumber(EncounterCount);
- HighlordOmokk = 0;
- ShadowHunterVoshgajin = 0;
- WarMasterVoone = 0;
- MotherSmolderweb = 0;
- UrokDoomhowl = 0;
- QuartermasterZigris = 0;
- GizrultheSlavener = 0;
- Halycon = 0;
- OverlordWyrmthalak = 0;
- PyroguardEmberseer = 0;
- WarchiefRendBlackhand = 0;
- Gyth = 0;
- TheBeast = 0;
- GeneralDrakkisath = 0;
- go_emberseerin = 0;
- go_doors = 0;
- go_emberseerout = 0;
- go_blackrockaltar = 0;
+ HighlordOmokk = 0;
+ ShadowHunterVoshgajin = 0;
+ WarMasterVoone = 0;
+ MotherSmolderweb = 0;
+ UrokDoomhowl = 0;
+ QuartermasterZigris = 0;
+ GizrultheSlavener = 0;
+ Halycon = 0;
+ OverlordWyrmthalak = 0;
+ PyroguardEmberseer = 0;
+ WarchiefRendBlackhand = 0;
+ Gyth = 0;
+ LordVictorNefarius = 0;
+ TheBeast = 0;
+ GeneralDrakkisath = 0;
+ go_emberseerin = 0;
+ go_doors = 0;
+ go_emberseerout = 0;
+ go_blackrockaltar = 0;
+ go_portcullis_active = 0;
+ go_portcullis_tobossrooms = 0;
}
void OnCreatureCreate(Creature* creature)
@@ -91,19 +94,21 @@ public:
case NPC_GIZRUL_THE_SLAVENER:
GizrultheSlavener = creature->GetGUID();
break;
- case NPC_HALYCON:
+ case NPC_HALYCON:
Halycon = creature->GetGUID();
break;
- case NPC_OVERLORD_WYRMTHALAK:
+ case NPC_OVERLORD_WYRMTHALAK:
OverlordWyrmthalak = creature->GetGUID();
break;
- case NPC_PYROGAURD_EMBERSEER:
+ case NPC_PYROGAURD_EMBERSEER:
PyroguardEmberseer = creature->GetGUID();
if (GetBossState(DATA_PYROGAURD_EMBERSEER) == DONE)
creature->DisappearAndDie();
break;
- case NPC_WARCHIEF_REND_BLACKHAND:
+ case NPC_WARCHIEF_REND_BLACKHAND:
WarchiefRendBlackhand = creature->GetGUID();
+ if (GetBossState(DATA_GYTH) == DONE)
+ creature->DisappearAndDie();
break;
case NPC_GYTH:
Gyth = creature->GetGUID();
@@ -114,9 +119,10 @@ public:
case NPC_GENERAL_DRAKKISATH:
GeneralDrakkisath = creature->GetGUID();
break;
- case NPC_BLACKHAND_DREADWEAVER:
- case NPC_BLACKHAND_SUMMONER:
- case NPC_BLACKHAND_VETERAN:
+ case NPC_LORD_VICTOR_NEFARIUS:
+ LordVictorNefarius = creature->GetGUID();
+ if (GetBossState(DATA_GYTH) == DONE)
+ creature->DisappearAndDie();
break;
}
}
@@ -213,6 +219,18 @@ public:
if (GetBossState(DATA_PYROGAURD_EMBERSEER) == DONE)
HandleGameObject(0, false, go);
break;
+ case GO_PORTCULLIS_ACTIVE:
+ go_portcullis_active = go->GetGUID();
+ if (GetBossState(DATA_GYTH) == DONE)
+ HandleGameObject(0, true, go);
+ break;
+ case GO_PORTCULLIS_TOBOSSROOMS:
+ go_portcullis_tobossrooms = go->GetGUID();
+ if (GetBossState(DATA_GYTH) == DONE)
+ HandleGameObject(0, true, go);
+ break;
+ default:
+ break;
}
}
@@ -374,6 +392,12 @@ public:
case GO_EMBERSEER_RUNE_7:
return go_emberseerrunes[6];
break;
+ case GO_PORTCULLIS_ACTIVE:
+ return go_portcullis_active;
+ break;
+ case GO_PORTCULLIS_TOBOSSROOMS:
+ return go_portcullis_tobossrooms;
+ break;
}
return 0;
}
@@ -554,6 +578,7 @@ public:
uint64 PyroguardEmberseer;
uint64 WarchiefRendBlackhand;
uint64 Gyth;
+ uint64 LordVictorNefarius;
uint64 TheBeast;
uint64 GeneralDrakkisath;
uint64 go_emberseerin;
@@ -563,6 +588,8 @@ public:
uint64 go_roomrunes[7];
uint64 go_emberseerrunes[7];
uint64 runecreaturelist[7][5];
+ uint64 go_portcullis_active;
+ uint64 go_portcullis_tobossrooms;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const
@@ -612,7 +639,7 @@ public:
if (!instance)
return false;
- if (Creature* rend = player->FindNearestCreature(NPC_REND_BLACKHAND, 50.0f))
+ if (Creature* rend = player->FindNearestCreature(NPC_WARCHIEF_REND_BLACKHAND, 50.0f))
{
rend->AI()->SetData(AREATRIGGER, AREATRIGGER_BLACKROCK_STADIUM);
return true;
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
index fde21c63840..6f90f61f420 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
@@ -34,14 +34,28 @@ enum Events
EVENT_VEILOFSHADOW = 6,
EVENT_CLEAVE = 7,
EVENT_TAILLASH = 8,
- EVENT_CLASSCALL = 9
+ EVENT_CLASSCALL = 9,
+ // UBRS
+ EVENT_CHAOS_1 = 10,
+ EVENT_CHAOS_2 = 11,
+ EVENT_PATH_2 = 12,
+ EVENT_PATH_3 = 13,
+ EVENT_SUCCESS_1 = 14,
+ EVENT_SUCCESS_2 = 15,
+ EVENT_SUCCESS_3 = 16,
};
enum Says
{
- SAY_GAMESBEGIN_1 = 11,
- SAY_GAMESBEGIN_2 = 12,
- // SAY_VAEL_INTRO = 13, Not used - when he corrupts Vaelastrasz
+ // Nefarius
+ // UBRS
+ SAY_CHAOS_SPELL = 9,
+ SAY_SUCCESS = 10,
+ SAY_FAILURE = 11,
+ // BWL
+ SAY_GAMESBEGIN_1 = 12,
+ SAY_GAMESBEGIN_2 = 13,
+ // SAY_VAEL_INTRO = 14, Not used - when he corrupts Vaelastrasz
// Nefarian
SAY_RANDOM = 0,
@@ -67,6 +81,18 @@ enum Gossip
GOSSIP_OPTION_ID = 0
};
+enum Paths
+{
+ NEFARIUS_PATH_2 = 1379671,
+ NEFARIUS_PATH_3 = 1379672
+};
+
+enum GameObjects
+{
+ GO_PORTCULLIS_ACTIVE = 164726,
+ GO_PORTCULLIS_TOBOSSROOMS = 175186
+};
+
enum Creatures
{
NPC_BRONZE_DRAKANOID = 14263,
@@ -75,7 +101,9 @@ enum Creatures
NPC_GREEN_DRAKANOID = 14262,
NPC_BLACK_DRAKANOID = 14265,
NPC_CHROMATIC_DRAKANOID = 14302,
- NPC_BONE_CONSTRUCT = 14605
+ NPC_BONE_CONSTRUCT = 14605,
+ // UBRS
+ NPC_GYTH = 10339
};
enum Spells
@@ -192,8 +220,73 @@ public:
void JustSummoned(Creature* /*summon*/) {}
+ void SetData(uint32 type, uint32 data)
+ {
+ if (instance && type == 1 && data == 1)
+ {
+ me->StopMoving();
+ events.ScheduleEvent(EVENT_PATH_2, 9000);
+ }
+
+ if (instance && type == 1 && data == 2)
+ {
+ events.ScheduleEvent(EVENT_SUCCESS_1, 5000);
+ }
+ }
+
void UpdateAI(uint32 diff)
{
+ if (!UpdateVictim())
+ {
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_PATH_2:
+ me->GetMotionMaster()->MovePath(NEFARIUS_PATH_2, false);
+ events.ScheduleEvent(EVENT_CHAOS_1, 7000);
+ break;
+ case EVENT_CHAOS_1:
+ if (Creature* gyth = me->FindNearestCreature(NPC_GYTH, 75.0f, true))
+ {
+ me->SetFacingToObject(gyth);
+ Talk(SAY_CHAOS_SPELL);
+ }
+ events.ScheduleEvent(EVENT_CHAOS_2, 2000);
+ break;
+ case EVENT_CHAOS_2:
+ DoCast(SPELL_CHROMATIC_CHAOS);
+ me->SetFacingTo(1.570796f);
+ break;
+ case EVENT_SUCCESS_1:
+ if (Unit* player = me->SelectNearestPlayer(60.0f))
+ {
+ me->SetInFront(player);
+ me->SendMovementFlagUpdate();
+ Talk(SAY_SUCCESS);
+ if (GameObject* portcullis1 = me->FindNearestGameObject(GO_PORTCULLIS_ACTIVE, 65.0f))
+ portcullis1->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* portcullis2 = me->FindNearestGameObject(GO_PORTCULLIS_TOBOSSROOMS, 80.0f))
+ portcullis2->SetGoState(GO_STATE_ACTIVE);
+ }
+ events.ScheduleEvent(EVENT_SUCCESS_2, 4000);
+ break;
+ case EVENT_SUCCESS_2:
+ DoCast(me, SPELL_VAELASTRASZZ_SPAWN);
+ me->DespawnOrUnsummon(1000);
+ break;
+ case EVENT_PATH_3:
+ me->GetMotionMaster()->MovePath(NEFARIUS_PATH_3, false);
+ break;
+ default:
+ break;
+ }
+ }
+ return;
+ }
+
// Only do this if we haven't spawned nefarian yet
if (UpdateVictim() && SpawnedAdds <= 42)
{