aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/CMakeLists.txt1
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp331
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp43
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/scholomance.h36
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp4
6 files changed, 386 insertions, 31 deletions
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index bfe8c7ba258..e28251bebb4 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -940,7 +940,7 @@ public:
found = true;
}
}
-
+
if (!found)
handler->SendSysMessage(LANG_COMMAND_NOSPELLFOUND);
diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt
index 6979af4ab0e..15ead9b00f8 100644
--- a/src/server/scripts/EasternKingdoms/CMakeLists.txt
+++ b/src/server/scripts/EasternKingdoms/CMakeLists.txt
@@ -31,6 +31,7 @@ set(scripts_STAT_SRCS
EasternKingdoms/Scholomance/instance_scholomance.cpp
EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
+ EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
EasternKingdoms/zone_isle_of_queldanas.cpp
EasternKingdoms/ZulGurub/boss_grilek.cpp
EasternKingdoms/ZulGurub/boss_hazzarah.cpp
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
new file mode 100644
index 00000000000..091c9fd1f91
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -0,0 +1,331 @@
+/*
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+ *
+ * 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
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "scholomance.h"
+#include "MoveSplineInit.h"
+#include "GameObjectAI.h"
+#include "Player.h"
+
+enum Says
+{
+ EMOTE_SUMMONED = 0
+};
+
+enum Spells
+{
+ SPELL_SWOOP = 18144,
+ SPELL_WING_FLAP = 12882,
+ SPELL_PIERCE_ARMOR = 6016,
+ SPELL_DISARM = 8379,
+
+ SPELL_KIRTONOS_TRANSFORM = 16467,
+
+ SPELL_SHADOW_BOLT = 17228,
+ SPELL_CURSE_OF_TONGUES = 12889,
+ SPELL_DONINATE_MIND = 14515
+};
+
+enum Events
+{
+ INTRO_1 = 1,
+ INTRO_2 = 2,
+ INTRO_3 = 3,
+ INTRO_4 = 4,
+ INTRO_5 = 5,
+ INTRO_6 = 6,
+ EVENT_SWOOP = 7,
+ EVENT_WING_FLAP = 8,
+ EVENT_PIERCE_ARMOR = 9,
+ EVENT_DISARM = 10,
+ EVENT_SHADOW_BOLT = 11,
+ EVENT_CURSE_OF_TONGUES = 12,
+ EVENT_DONINATE_MIND = 13,
+ EVENT_KIRTONOS_TRANSFORM = 14
+};
+
+enum Points
+{
+ MAX_KIRTONOS_WAYPOINTS_INTRO = 14,
+ POINT_KIRTONOS_LAND = 14
+};
+
+enum Misc
+{
+ WEAPON_KIRTONOS_STAFF = 11365
+};
+
+Position const kirtonosIntroWaypoint[MAX_KIRTONOS_WAYPOINTS_INTRO] =
+{
+ {316.7087f, 71.26834f, 104.5843f, 0.0f},
+ {321.1605f, 72.80973f, 104.6676f, 0.0f},
+ {332.3713f, 77.98991f, 105.8621f, 0.0f},
+ {333.3254f, 86.60159f, 106.6399f, 0.0f},
+ {334.1263f, 101.6836f, 106.8343f, 0.0f},
+ {331.0458f, 114.5935f, 106.3621f, 0.0f},
+ {329.5439f, 126.7019f, 106.1399f, 0.0f},
+ {335.2471f, 136.5460f, 105.7232f, 0.0f},
+ {343.2100f, 139.9459f, 107.6399f, 0.0f},
+ {364.3288f, 140.9012f, 109.9454f, 0.0f},
+ {362.6760f, 115.6384f, 110.3065f, 0.0f},
+ {341.7896f, 91.94390f, 107.1676f, 0.0f},
+ {313.4945f, 93.45945f, 104.0565f, 0.0f},
+ {306.3839f, 93.61675f, 104.0565f, 0.0f},
+};
+
+class boss_kirtonos_the_herald : public CreatureScript
+{
+ public: boss_kirtonos_the_herald() : CreatureScript("boss_kirtonos_the_herald") { }
+
+ struct boss_kirtonos_the_heraldAI : public BossAI
+ {
+ boss_kirtonos_the_heraldAI(Creature* creature) : BossAI(creature, TYPE_KIRTONOS) { }
+
+ void Reset()
+ {
+ _introEvent = 0;
+ _introTimer = 0;
+ _Reset();
+ }
+
+ void EnterCombat(Unit* /*who*/)
+ {
+ _introTimer = 0;
+ _introEvent = 0;
+ events.ScheduleEvent(EVENT_SWOOP, urand(8000, 8000));
+ events.ScheduleEvent(EVENT_WING_FLAP, urand(15000, 15000));
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(18000, 18000));
+ events.ScheduleEvent(EVENT_DISARM, urand(22000, 22000));
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(42000, 42000));
+ events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, urand(53000, 53000));
+ events.ScheduleEvent(EVENT_DONINATE_MIND, urand(34000, 48000));
+ events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, urand(20000, 20000));
+ _EnterCombat();
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
+ {
+ brazier->ResetDoorOrButton();
+ brazier->SetGoState(GO_STATE_READY);
+ }
+ _JustDied();
+ }
+
+ void EnterEvadeMode()
+ {
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
+ {
+ brazier->ResetDoorOrButton();
+ brazier->SetGoState(GO_STATE_READY);
+ }
+ me->DespawnOrUnsummon(5000);
+ }
+
+ void DamageTaken(Unit* /*killer*/, uint32 &damage)
+ {
+
+ }
+
+ void IsSummonedBy(Unit* summoner)
+ {
+ me->SetDisableGravity(true);
+ me->SetReactState(REACT_PASSIVE);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ _introEvent = INTRO_1;
+ _introTimer = 1;
+ _currentPoint = 0;
+ Talk(EMOTE_SUMMONED);
+ }
+
+ void JustSummoned(Creature* summon)
+ {
+ BossAI::JustSummoned(summon);
+ }
+
+ void MovementInform(uint32 movementType, uint32 pointId)
+ {
+ if (movementType != POINT_MOTION_TYPE)
+ return;
+
+ _currentPoint = pointId + 1;
+ }
+
+ void UpdateAI(uint32 const diff)
+ {
+ if (_introEvent)
+ {
+ if (_introTimer <= diff)
+ {
+ switch (_introEvent)
+ {
+ case INTRO_1:
+ if (_currentPoint < POINT_KIRTONOS_LAND)
+ me->GetMotionMaster()->MovePoint(_currentPoint, kirtonosIntroWaypoint[_currentPoint]);
+ else
+ {
+ _introTimer = 1000;
+ _introEvent = INTRO_2;
+ }
+ break;
+ case INTRO_2:
+ me->SetWalk(true);
+ me->GetMotionMaster()->MovePoint(0, 299.4884f, 92.76137f, 105.6335f);
+ _introTimer = 1000;
+ _introEvent = INTRO_3;
+ break;
+ case INTRO_3:
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_READY);
+ me->SetFacingTo(0.01745329f);
+ _introTimer = 3000;
+ _introEvent = INTRO_4;
+ break;
+ case INTRO_4:
+ if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
+ brazier->SetGoState(GO_STATE_READY);
+ me->SetDisableGravity(false);
+ DoCast(me, SPELL_KIRTONOS_TRANSFORM);
+ _introTimer = 1000;
+ _introEvent = INTRO_5;
+ break;
+ case INTRO_5:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ me->SetReactState(REACT_AGGRESSIVE);
+ _introTimer = 5000;
+ _introEvent = INTRO_6;
+ case INTRO_6:
+ me->GetMotionMaster()->MovePoint(0, 314.8673f, 90.3021f, 101.6459f);
+ _introTimer = 0;
+ _introEvent = 0;
+ break;
+ }
+ }
+ else
+ _introTimer -= diff;
+ }
+
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SWOOP:
+ DoCast(me, SPELL_SWOOP);
+ events.ScheduleEvent(EVENT_SWOOP, urand(15000, 15000));
+ break;
+ case EVENT_WING_FLAP:
+ DoCast(me, SPELL_WING_FLAP);
+ events.ScheduleEvent(EVENT_WING_FLAP, urand(13000, 13000));
+ break;
+ case EVENT_PIERCE_ARMOR:
+ DoCastVictim(SPELL_PIERCE_ARMOR, true);
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(12000, 12000));
+ break;
+ case EVENT_DISARM:
+ DoCastVictim(SPELL_DISARM, true);
+ events.ScheduleEvent(EVENT_DISARM, urand(11000, 11000));
+ break;
+ case EVENT_SHADOW_BOLT:
+ DoCastVictim(SPELL_SHADOW_BOLT, true);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(42000, 42000));
+ break;
+ case EVENT_CURSE_OF_TONGUES:
+ DoCastVictim(SPELL_CURSE_OF_TONGUES, true);
+ events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, urand(35000, 35000));
+ break;
+ case EVENT_DONINATE_MIND:
+ DoCastVictim(SPELL_DONINATE_MIND, true);
+ events.ScheduleEvent(EVENT_DONINATE_MIND, urand(44000, 48000));
+ break;
+ case EVENT_KIRTONOS_TRANSFORM:
+ if (me->HasAura(SPELL_KIRTONOS_TRANSFORM))
+ {
+ me->RemoveAura(SPELL_KIRTONOS_TRANSFORM);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(0));
+ }
+ else
+ {
+ DoCast(me, SPELL_KIRTONOS_TRANSFORM);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
+ }
+ events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, urand(16000, 18000));
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ uint8 _introEvent;
+ uint32 _introTimer;
+ uint32 _currentPoint;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_kirtonos_the_heraldAI(creature);
+ }
+};
+
+/*######
+## go_brazier_of_the_herald
+######*/
+
+enum Brazier_Of_The_Herald
+{
+ NPC_KIRTONOS = 10506,
+ SOUND_SCREECH = 557
+};
+
+class go_brazier_of_the_herald : public GameObjectScript
+{
+public:
+ go_brazier_of_the_herald() : GameObjectScript("go_brazier_of_the_herald") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ go->UseDoorOrButton();
+ go->PlayDirectSound(SOUND_SCREECH,0);
+ player->SummonCreature(NPC_KIRTONOS, 315.028f, 70.53845f, 102.1496f, 0.3859715f, TEMPSUMMON_DEAD_DESPAWN, 900000);
+ return true;
+ }
+};
+
+void AddSC_boss_kirtonos_the_herald()
+{
+ new boss_kirtonos_the_herald();
+ new go_brazier_of_the_herald;
+}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
index 583b9074433..fc966c4bbb9 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
@@ -27,17 +27,6 @@ EndScriptData */
#include "InstanceScript.h"
#include "scholomance.h"
-#define GO_GATE_KIRTONOS 175570
-#define GO_GATE_GANDLING 177374
-#define GO_GATE_MALICIA 177375
-#define GO_GATE_THEOLEN 177377
-#define GO_GATE_POLKELT 177376
-#define GO_GATE_RAVENIAN 177372
-#define GO_GATE_BAROV 177373
-#define GO_GATE_ILLUCIA 177371
-
-#define MAX_ENCOUNTER 2
-
class instance_scholomance : public InstanceMapScript
{
public:
@@ -64,6 +53,7 @@ public:
uint64 GateRavenianGUID;
uint64 GateBarovGUID;
uint64 GateIlluciaGUID;
+ uint64 BrazierOfTheHeraldGUID;
void Initialize()
{
@@ -77,6 +67,7 @@ public:
GateRavenianGUID = 0;
GateBarovGUID = 0;
GateIlluciaGUID = 0;
+ BrazierOfTheHeraldGUID = 0;
for (uint8 i = 0; i < 6; ++i)
IsBossDied[i] = false;
@@ -86,14 +77,15 @@ public:
{
switch (go->GetEntry())
{
- case GO_GATE_KIRTONOS: GateKirtonosGUID = go->GetGUID(); break;
- case GO_GATE_GANDLING: GateGandlingGUID = go->GetGUID(); break;
- case GO_GATE_MALICIA: GateMiliciaGUID = go->GetGUID(); break;
- case GO_GATE_THEOLEN: GateTheolenGUID = go->GetGUID(); break;
- case GO_GATE_POLKELT: GatePolkeltGUID = go->GetGUID(); break;
- case GO_GATE_RAVENIAN: GateRavenianGUID = go->GetGUID(); break;
- case GO_GATE_BAROV: GateBarovGUID = go->GetGUID(); break;
- case GO_GATE_ILLUCIA: GateIlluciaGUID = go->GetGUID(); break;
+ case GO_GATE_KIRTONOS: GateKirtonosGUID = go->GetGUID(); break;
+ case GO_GATE_GANDLING: GateGandlingGUID = go->GetGUID(); break;
+ case GO_GATE_MALICIA: GateMiliciaGUID = go->GetGUID(); break;
+ case GO_GATE_THEOLEN: GateTheolenGUID = go->GetGUID(); break;
+ case GO_GATE_POLKELT: GatePolkeltGUID = go->GetGUID(); break;
+ case GO_GATE_RAVENIAN: GateRavenianGUID = go->GetGUID(); break;
+ case GO_GATE_BAROV: GateBarovGUID = go->GetGUID(); break;
+ case GO_GATE_ILLUCIA: GateIlluciaGUID = go->GetGUID(); break;
+ case GO_BRAZIER_OF_THE_HERALD: BrazierOfTheHeraldGUID = go->GetGUID(); break;
}
}
@@ -135,6 +127,19 @@ public:
IsBossDied[3] && IsBossDied[4] && IsBossDied[5])
? IN_PROGRESS : 0;
}
+
+ uint64 GetData64(uint32 type) const
+ {
+ switch (type)
+ {
+ case GO_GATE_KIRTONOS:
+ return GateKirtonosGUID;
+ case GO_BRAZIER_OF_THE_HERALD:
+ return BrazierOfTheHeraldGUID;
+ }
+
+ return 0;
+ }
};
};
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
index bae7c8c8efc..20b782fd43a 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
+++ b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
@@ -19,13 +19,31 @@
#ifndef DEF_SCHOLOMANCE_H
#define DEF_SCHOLOMANCE_H
-#define TYPE_GANDLING 1
-#define DATA_DOCTORTHEOLENKRASTINOV_DEATH 2
-#define DATA_INSTRUCTORMALICIA_DEATH 3
-#define DATA_LADYILLUCIABAROV_DEATH 4
-#define DATA_LORDALEXEIBAROV_DEATH 5
-#define DATA_LOREKEEPERPOLKELT_DEATH 6
-#define DATA_THERAVENIAN_DEATH 7
-#define TYPE_KIRTONOS 8
-#endif
+uint32 const MAX_ENCOUNTER = 2;
+
+enum DataTypes
+{
+ TYPE_GANDLING = 1,
+ DATA_DOCTORTHEOLENKRASTINOV_DEATH = 2,
+ DATA_INSTRUCTORMALICIA_DEATH = 3,
+ DATA_LADYILLUCIABAROV_DEATH = 4,
+ DATA_LORDALEXEIBAROV_DEATH = 5,
+ DATA_LOREKEEPERPOLKELT_DEATH = 6,
+ DATA_THERAVENIAN_DEATH = 7,
+ TYPE_KIRTONOS = 8
+};
+enum GameobjectIds
+{
+ GO_GATE_KIRTONOS = 175570,
+ GO_GATE_GANDLING = 177374,
+ GO_GATE_MALICIA = 177375,
+ GO_GATE_THEOLEN = 177377,
+ GO_GATE_POLKELT = 177376,
+ GO_GATE_RAVENIAN = 177372,
+ GO_GATE_BAROV = 177373,
+ GO_GATE_ILLUCIA = 177371,
+ GO_BRAZIER_OF_THE_HERALD = 175564
+};
+
+#endif
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 25daff60761..952363c6dcf 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -153,13 +153,13 @@ enum Texts
SAY_KILLED_PLAYER_P_THREE = 12,
SAY_SPELL_CASTING_P_THREE = 13,
SAY_DEATH,
-
+
// Alexstrasza
SAY_ONE = 0,
SAY_TWO = 1,
SAY_THREE = 2,
SAY_FOUR = 3,
-
+
// Power Sparks
EMOTE_POWER_SPARK_SUMMONED = 0
};