aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp105
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp106
-rw-r--r--src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp59
3 files changed, 157 insertions, 113 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
index 1c0206ac728..0ddbe0e1a25 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -22,30 +21,20 @@
enum Spells
{
- SPELL_CORROSIVE_ACID = 20667,
- SPELL_FREEZE = 18763,
- SPELL_FLAMEBREATH = 20712,
- SPELL_SELF_ROOT_FOREVER = 33356
-};
-
-enum Adds
-{
- MODEL_REND_ON_DRAKE = 9723, /// @todo use creature_template 10459 instead of its modelid
- NPC_RAGE_TALON_FIRE_TONG = 10372,
- NPC_CHROMATIC_WHELP = 10442,
- NPC_CHROMATIC_DRAGONSPAWN = 10447,
- NPC_BLACKHAND_ELITE = 10317
+ SPELL_REND_MOUNTS = 16167, // Change model
+ SPELL_FREEZE = 16350, // Combat
+ SPELL_KNOCK_AWAY = 10101, // Combat
+ SPELL_FLAMEBREATH = 16390, // Combat (Self cast)
+ SPELL_CORROSIVE_ACID = 16359, // Combat (self cast)
+ SPELL_SUMMON_REND = 16328 // Summons Rend near death
};
enum Events
{
- EVENT_SUMMON_REND = 1,
- EVENT_AGGRO = 2,
- EVENT_SUMMON_DRAGON_PACK = 3,
- EVENT_SUMMON_ORC_PACK = 4,
- EVENT_CORROSIVE_ACID = 5,
- EVENT_FREEZE = 6,
- EVENT_FLAME_BREATH = 7
+ EVENT_CORROSIVE_ACID = 1,
+ EVENT_FREEZE = 2,
+ EVENT_FLAME_BREATH = 3,
+ EVENT_SUMMONED = 4,
};
class boss_gyth : public CreatureScript
@@ -55,10 +44,7 @@ public:
struct boss_gythAI : public BossAI
{
- boss_gythAI(Creature* creature) : BossAI(creature, DATA_GYTH)
- {
- DoCast(me, SPELL_SELF_ROOT_FOREVER);
- }
+ boss_gythAI(Creature* creature) : BossAI(creature, DATA_GYTH) { }
bool SummonedRend;
@@ -66,30 +52,26 @@ public:
{
_Reset();
SummonedRend = false;
- //Invisible for event start
- me->SetVisible(false);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_SUMMON_DRAGON_PACK, 3000);
- events.ScheduleEvent(EVENT_SUMMON_ORC_PACK, 60000);
- events.ScheduleEvent(EVENT_AGGRO, 60000);
+
+ events.ScheduleEvent(EVENT_CORROSIVE_ACID, 18000);
+ events.ScheduleEvent(EVENT_FREEZE, 20000);
+ events.ScheduleEvent(EVENT_FLAME_BREATH, 16000);
}
void JustDied(Unit* /*killer*/)
{
_JustDied();
+ // Open doors
}
- void SummonCreatureWithRandomTarget(uint32 creatureId, uint8 count)
+ void IsSummonedBy(Unit* /*summoner*/)
{
- for (uint8 n = 0; n < count; n++)
- if (Unit* Summoned = me->SummonCreature(creatureId, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 240 * IN_MILLISECONDS))
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))
- Summoned->AddThreat(target, 250.0f);
+ events.ScheduleEvent(EVENT_SUMMONED, 8000);
}
void UpdateAI(uint32 diff)
@@ -97,9 +79,10 @@ public:
if (!UpdateVictim())
return;
- if (!SummonedRend && HealthBelowPct(11))
+ if (!SummonedRend && HealthBelowPct(5))
{
- events.ScheduleEvent(EVENT_SUMMON_REND, 8000);
+ DoCast(me, SPELL_REND_MOUNTS);
+ me->RemoveAura(SPELL_REND_MOUNTS);
SummonedRend = true;
}
@@ -112,55 +95,21 @@ public:
{
switch (eventId)
{
- case EVENT_SUMMON_REND:
- // Summon Rend and Change model to normal Gyth
- // Interrupt any spell casting
- me->InterruptNonMeleeSpells(false);
- // Gyth model
- me->SetDisplayId(me->GetCreatureTemplate()->Modelid1);
- me->SummonCreature(NPC_WARCHIEF_REND_BLACKHAND, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 900 * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CORROSIVE_ACID, 8 * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_FREEZE, 11 * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_FLAME_BREATH, 4 * IN_MILLISECONDS);
- events.CancelEvent(EVENT_SUMMON_REND);
- break;
- case EVENT_AGGRO:
- me->SetVisible(true);
- me->SetDisplayId(MODEL_REND_ON_DRAKE);
- me->setFaction(14);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- events.CancelEvent(EVENT_AGGRO);
- break;
- // Summon Dragon pack. 2 Dragons and 3 Whelps
- case EVENT_SUMMON_DRAGON_PACK:
- for (uint8 i = 0; i < urand(0, 3) + 2; ++i)
- {
- SummonCreatureWithRandomTarget(NPC_RAGE_TALON_FIRE_TONG, 2);
- SummonCreatureWithRandomTarget(NPC_CHROMATIC_WHELP, 3);
- }
- events.CancelEvent(EVENT_SUMMON_DRAGON_PACK);
- break;
- // Summon Orc pack. 1 Orc Handler 1 Elite Dragonkin and 3 Whelps
- case EVENT_SUMMON_ORC_PACK:
- for (uint8 i = 0; i < urand (0, 5) + 2; ++i)
- {
- SummonCreatureWithRandomTarget(NPC_CHROMATIC_DRAGONSPAWN, 1);
- SummonCreatureWithRandomTarget(NPC_BLACKHAND_ELITE, 1);
- SummonCreatureWithRandomTarget(NPC_CHROMATIC_WHELP, 3);
- }
- events.CancelEvent(EVENT_SUMMON_ORC_PACK);
+ case EVENT_SUMMONED:
+ DoCast(me, SPELL_REND_MOUNTS);
+ // Load Path
break;
case EVENT_CORROSIVE_ACID:
DoCastVictim(SPELL_CORROSIVE_ACID);
- events.ScheduleEvent(EVENT_CORROSIVE_ACID, 7 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CORROSIVE_ACID, 20000);
break;
case EVENT_FREEZE:
DoCastVictim(SPELL_FREEZE);
- events.ScheduleEvent(EVENT_FREEZE, 16 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_FREEZE, 16000);
break;
case EVENT_FLAME_BREATH:
DoCastVictim(SPELL_FLAMEBREATH);
- events.ScheduleEvent(EVENT_FLAME_BREATH, 10500);
+ events.ScheduleEvent(EVENT_FLAME_BREATH, 10000);
break;
}
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
index 34bcedf91d7..4fc82275e6a 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp
@@ -22,16 +22,74 @@
enum Spells
{
- SPELL_WHIRLWIND = 26038,
- SPELL_CLEAVE = 20691,
- SPELL_THUNDERCLAP = 23931, //Not sure if he cast this spell
+ SPELL_WHIRLWIND = 13736, // sniffed
+ SPELL_CLEAVE = 15284,
+ SPELL_MORTAL_STRIKE = 16856,
+ SPELL_FRENZY = 8269
+};
+
+enum Adds
+{
+ NPC_CHROMATIC_WHELP = 10442,
+ NPC_CHROMATIC_DRAGONSPAWN = 10447,
+ NPC_BLACKHAND_DRAGON_HANDLER = 10742
+};
+
+struct Wave
+{
+ uint32 entry;
+ float x_pos;
+ float y_pos;
+ float z_pos;
+ float o_pos;
+};
+
+static Wave Wave2[]=
+{
+ { 10447, 209.8637f, -428.2729f, 110.9877f, 0.6632251f },
+ { 10442, 209.3122f, -430.8724f, 110.9814f, 2.9147f },
+ { 10442, 211.3309f, -425.9111f, 111.0006f, 1.727876f }
+};
+
+static Wave Wave3[]=
+{
+ { 10742, 208.6493f, -424.5787f, 110.9872f, 5.8294f },
+ { 10447, 203.9482f, -428.9446f, 110.982f, 4.677482f },
+ { 10442, 203.3441f, -426.8668f, 110.9772f, 4.712389f },
+ { 10442, 206.3079f, -424.7509f, 110.9943f, 4.08407f }
+};
+
+static Wave Wave4[]=
+{
+ { 10742, 212.3541f, -412.6826f, 111.0352f, 5.88176f },
+ { 10447, 212.5754f, -410.2841f, 111.0296f, 2.740167f },
+ { 10442, 212.3449f, -414.8659f, 111.0348f, 2.356194f },
+ { 10442, 210.6568f, -412.1552f, 111.0124f, 0.9773844f }
+};
+
+static Wave Wave5[]=
+{
+ { 10742, 210.2188f, -410.6686f, 111.0211f, 5.8294f },
+ { 10447, 209.4078f, -414.13f, 111.0264f, 4.677482f },
+ { 10442, 208.0858f, -409.3145f, 111.0118f, 4.642576f },
+ { 10442, 207.9811f, -413.0728f, 111.0098f, 5.288348f },
+ { 10442, 208.0854f, -412.1505f, 111.0057f, 4.08407f }
+};
+
+static Wave Wave6[]=
+{
+ { 10742, 213.9138f, -426.512f, 111.0013f, 3.316126f },
+ { 10447, 213.7121f, -429.8102f, 110.9888f, 1.413717f },
+ { 10447, 213.7157f, -424.4268f, 111.009f, 3.001966f },
+ { 10442, 210.8935f, -423.913f, 111.0125f, 5.969026f },
+ { 10442, 212.2642f, -430.7648f, 110.9807f, 5.934119f }
};
enum Events
{
EVENT_WHIRLWIND = 1,
EVENT_CLEAVE = 2,
- EVENT_THUNDERCLAP = 3,
+ EVENT_MORTAL_STRIKE = 3
};
class boss_rend_blackhand : public CreatureScript
@@ -39,14 +97,9 @@ class boss_rend_blackhand : public CreatureScript
public:
boss_rend_blackhand() : CreatureScript("boss_rend_blackhand") { }
- CreatureAI* GetAI(Creature* creature) const
- {
- return new boss_rend_blackhandAI(creature);
- }
-
struct boss_rend_blackhandAI : public BossAI
{
- boss_rend_blackhandAI(Creature* creature) : BossAI(creature, DATA_WARCHIEF_REND_BLACKHAND) {}
+ boss_rend_blackhandAI(Creature* creature) : BossAI(creature, DATA_WARCHIEF_REND_BLACKHAND) { }
void Reset()
{
@@ -56,14 +109,24 @@ public:
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
- events.ScheduleEvent(EVENT_WHIRLWIND, 20 * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_CLEAVE, 5 * IN_MILLISECONDS);
- events.ScheduleEvent(EVENT_THUNDERCLAP, 9 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 13000);
+ events.ScheduleEvent(EVENT_CLEAVE, 15000);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 17000);
}
void JustDied(Unit* /*killer*/)
{
_JustDied();
+ // Do data set on victor
+ }
+
+ void SetData(uint32 type, uint32 data)
+ {
+ if (instance && type == 1 && data == 1)
+ {
+ events.ScheduleEvent(EVENT_WHIRLWIND, 5000);
+ }
+
}
void UpdateAI(uint32 diff)
@@ -81,22 +144,27 @@ public:
switch (eventId)
{
case EVENT_WHIRLWIND:
- DoCastVictim(SPELL_WHIRLWIND);
- events.ScheduleEvent(EVENT_WHIRLWIND, 18 * IN_MILLISECONDS);
+ DoCast(SPELL_WHIRLWIND);
+ events.ScheduleEvent(EVENT_WHIRLWIND, urand(13000, 18000));
break;
case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 10 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_CLEAVE, 10000);
break;
- case EVENT_THUNDERCLAP:
- DoCastVictim(SPELL_THUNDERCLAP);
- events.ScheduleEvent(EVENT_THUNDERCLAP, 16 * IN_MILLISECONDS);
+ case EVENT_MORTAL_STRIKE:
+ DoCastVictim(SPELL_MORTAL_STRIKE);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 16000);
break;
}
}
DoMeleeAttackIfReady();
}
};
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_rend_blackhandAI(creature);
+ }
};
void AddSC_boss_rend_blackhand()
diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
index a6266fe8b73..150ad588ae8 100644
--- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp
@@ -37,13 +37,14 @@ enum Events
EVENT_GYTH_REND_3 = 8,
EVENT_GYTH_REND_4 = 9,
EVENT_GYTH_REND_5 = 10,
+ EVENT_GYTH_REND_6 = 11,
// Nefarian
- EVENT_SHADOWFLAME = 11,
- EVENT_VEILOFSHADOW = 12,
- EVENT_CLEAVE = 13,
- EVENT_TAILLASH = 14,
- EVENT_CLASSCALL = 15
+ EVENT_SHADOWFLAME = 12,
+ EVENT_VEILOFSHADOW = 13,
+ EVENT_CLEAVE = 14,
+ EVENT_TAILLASH = 15,
+ EVENT_CLASSCALL = 16
};
enum Says
@@ -83,6 +84,12 @@ enum Says
SAY_DEATH_KNIGHT = 13
};
+enum Gameobjects
+{
+ // UBRS
+ OBJECT_DR_PORTCULLIS = 175185
+};
+
enum Gossip
{
GOSSIP_ID = 21332,
@@ -162,7 +169,10 @@ public:
void Reset()
{
if (me->GetMapId() == 229)
- events.ScheduleEvent(EVENT_PLAYER_CHECK, 5000);
+ {
+ playerGUID = 0;
+ events.ScheduleEvent(EVENT_PLAYER_CHECK, 10000);
+ }
if (me->GetMapId() == 469)
{
@@ -225,35 +235,49 @@ public:
switch (eventId)
{
case EVENT_PLAYER_CHECK:
- if (SelectTarget(SELECT_TARGET_NEAREST, 0, 30.0f, true))
- events.ScheduleEvent(EVENT_GYTH_REND_1, 1000);
- else
- events.ScheduleEvent(EVENT_PLAYER_CHECK, 5000);
+ {
+ Map::PlayerList const &players = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ if (Player* player = itr->GetSource()->ToPlayer())
+ {
+ if (me->GetDistance(player) < 30.0f && player->IsAlive() && !player->IsGameMaster())
+ {
+ playerGUID = player->GetGUID();
+ me->SetInFront(player);
+ me->SendMovementFlagUpdate();
+ events.ScheduleEvent(EVENT_GYTH_REND_1, 1000);
+ }
+ else
+ events.ScheduleEvent(EVENT_PLAYER_CHECK, 10000);
+ }
break;
+ }
case EVENT_GYTH_REND_1:
Talk(SAY_GYTH_REND_1);
events.ScheduleEvent(EVENT_GYTH_REND_2, 4000);
break;
case EVENT_GYTH_REND_2:
- if (Unit* player = SelectTarget(SELECT_TARGET_NEAREST, 0, 30.0f, false))
- me->SetInFront(player);
- me->SendMovementFlagUpdate();
me->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
events.ScheduleEvent(EVENT_GYTH_REND_3, 4000);
break;
case EVENT_GYTH_REND_3:
Talk(SAY_GYTH_REND_2);
- events.ScheduleEvent(EVENT_GYTH_REND_4, 4000);
+ events.ScheduleEvent(EVENT_GYTH_REND_4, 2000);
break;
case EVENT_GYTH_REND_4:
+ if (GameObject* portcullis = me->FindNearestGameObject(OBJECT_DR_PORTCULLIS, 50.0f))
+ portcullis->SetGoState(GO_STATE_READY);
+ events.ScheduleEvent(EVENT_GYTH_REND_5, 2000);
+ break;
+ case EVENT_GYTH_REND_5:
if (Creature* rend = me->FindNearestCreature(NPC_REND_BLACKHAND, 5.0f, true))
me->SetInFront(rend);
me->SendMovementFlagUpdate();
events.ScheduleEvent(EVENT_GYTH_REND_5, 4000);
break;
- case EVENT_GYTH_REND_5:
+ case EVENT_GYTH_REND_6:
me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
- events.ScheduleEvent(EVENT_GYTH_REND_5, 4000);
+ events.ScheduleEvent(EVENT_GYTH_REND_6, 4000);
default:
break;
}
@@ -346,6 +370,9 @@ public:
}
private:
+ // UBRS
+ uint64 playerGUID;
+ // BWL
uint32 SpawnedAdds;
};