aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2023_12_22_05_world.sql1
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp228
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/deadmines.h54
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp238
-rw-r--r--src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp8
6 files changed, 72 insertions, 479 deletions
diff --git a/sql/updates/world/master/2023_12_22_05_world.sql b/sql/updates/world/master/2023_12_22_05_world.sql
new file mode 100644
index 00000000000..5b4e4edc546
--- /dev/null
+++ b/sql/updates/world/master/2023_12_22_05_world.sql
@@ -0,0 +1 @@
+UPDATE `creature_template` SET `ScriptName`= '' WHERE `ScriptName`= 'boss_mr_smite';
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
deleted file mode 100644
index 60ae45b527b..00000000000
--- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * 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/>.
- */
-
-/* ScriptData
-SDName: Boss Mr.Smite
-SD%Complete:
-SDComment: Timers and say taken from acid script
-EndScriptData */
-
-#include "ScriptMgr.h"
-#include "deadmines.h"
-#include "GameObject.h"
-#include "InstanceScript.h"
-#include "MotionMaster.h"
-#include "ObjectAccessor.h"
-#include "ScriptedCreature.h"
-
-enum Spells
-{
- SPELL_TRASH = 3391,
- SPELL_SMITE_STOMP = 6432,
- SPELL_SMITE_SLAM = 6435
-};
-
-enum Equips
-{
- EQUIP_SWORD = 5191,
- EQUIP_AXE = 5196,
- EQUIP_MACE = 7230
-};
-
-enum Texts
-{
- SAY_PHASE_1 = 2,
- SAY_PHASE_2 = 3
-};
-
-class boss_mr_smite : public CreatureScript
-{
-public:
- boss_mr_smite() : CreatureScript("boss_mr_smite") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetDeadminesAI<boss_mr_smiteAI>(creature);
- }
-
- struct boss_mr_smiteAI : public ScriptedAI
- {
- boss_mr_smiteAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- instance = creature->GetInstanceScript();
- }
-
- void Initialize()
- {
- uiTrashTimer = urand(5000, 9000);
- uiSlamTimer = 9000;
-
- uiHealth = 0;
-
- uiPhase = 0;
- uiTimer = 0;
-
- uiIsMoving = false;
- }
-
- InstanceScript* instance;
-
- uint32 uiTrashTimer;
- uint32 uiSlamTimer;
-
- uint8 uiHealth;
-
- uint32 uiPhase;
- uint32 uiTimer;
-
- bool uiIsMoving;
-
- void Reset() override
- {
- Initialize();
-
- SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
- me->SetStandState(UNIT_STAND_STATE_STAND);
- me->SetReactState(REACT_AGGRESSIVE);
- me->SetNoCallAssistance(true);
- }
-
- void JustEngagedWith(Unit* /*who*/) override
- {
- }
-
- bool bCheckChances()
- {
- uint32 uiChances = urand(0, 99);
- if (uiChances <= 15)
- return false;
- else
- return true;
- }
-
- void UpdateAI(uint32 uiDiff) override
- {
- if (!UpdateVictim())
- return;
-
- if (!uiIsMoving) // halt abilities in between phases
- {
- if (uiTrashTimer <= uiDiff)
- {
- if (bCheckChances())
- DoCast(me, SPELL_TRASH);
- uiTrashTimer = urand(6000, 15500);
- }
- else uiTrashTimer -= uiDiff;
-
- if (uiSlamTimer <= uiDiff)
- {
- if (bCheckChances())
- DoCastVictim(SPELL_SMITE_SLAM);
- uiSlamTimer = 11000;
- }
- else uiSlamTimer -= uiDiff;
-
- }
-
- if ((uiHealth == 0 && !HealthAbovePct(66)) || (uiHealth == 1 && !HealthAbovePct(33)))
- {
- ++uiHealth;
- DoCastAOE(SPELL_SMITE_STOMP, false);
- SetCombatMovement(false);
- me->AttackStop();
- me->InterruptNonMeleeSpells(false);
- me->SetReactState(REACT_PASSIVE);
- uiTimer = 2500;
- uiPhase = 1;
-
- switch (uiHealth)
- {
- case 1:
- Talk(SAY_PHASE_1);
- break;
- case 2:
- Talk(SAY_PHASE_2);
- break;
- }
- }
-
- if (uiPhase)
- {
- if (uiTimer <= uiDiff)
- {
- switch (uiPhase)
- {
- case 1:
- {
- if (uiIsMoving)
- break;
-
- if (GameObject* go = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_SMITE_CHEST)))
- {
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MovePoint(1, go->GetPositionX() - 1.5f, go->GetPositionY() + 1.4f, go->GetPositionZ());
- uiIsMoving = true;
- }
- break;
- }
- case 2:
- if (uiHealth == 1)
- SetEquipmentSlots(false, EQUIP_AXE, EQUIP_AXE, EQUIP_NO_CHANGE);
- else
- SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
- uiTimer = 500;
- uiPhase = 3;
- break;
- case 3:
- me->SetStandState(UNIT_STAND_STATE_STAND);
- uiTimer = 750;
- uiPhase = 4;
- break;
- case 4:
- me->SetReactState(REACT_AGGRESSIVE);
- SetCombatMovement(true);
- me->GetMotionMaster()->MoveChase(me->GetVictim(), me->m_CombatDistance);
- uiIsMoving = false;
- uiPhase = 0;
- break;
- }
- } else uiTimer -= uiDiff;
- }
-
- DoMeleeAttackIfReady();
- }
-
- void MovementInform(uint32 uiType, uint32 /*uiId*/) override
- {
- if (uiType != POINT_MOTION_TYPE)
- return;
-
- me->SetFacingTo(5.47f);
- me->SetStandState(UNIT_STAND_STATE_KNEEL);
-
- uiTimer = 2000;
- uiPhase = 2;
- }
- };
-};
-
-void AddSC_boss_mr_smite()
-{
- new boss_mr_smite();
-}
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp
deleted file mode 100644
index 13d51bbe432..00000000000
--- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * 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 "deadmines.h"
-
-void AddSC_deadmines()
-{
-}
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h
index dfebf706d18..169183b45f5 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h
+++ b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h
@@ -15,41 +15,47 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef DEF_DEADMINES_H
-#define DEF_DEADMINES_H
+#ifndef _Deadmines_h__
+#define _Deadmines_h__
#include "CreatureAIImpl.h"
-#define DMScriptName "instance_deadmines"
-#define DataHeader "DM"
+constexpr char const* DMScriptName = "instance_deadmines";
+constexpr char const* DataHeader = "DM";
-enum DMCannonState
-{
- CANNON_NOT_USED,
- CANNON_GUNPOWDER_USED,
- CANNON_BLAST_INITIATED,
- PIRATES_ATTACK,
- EVENT_DONE
-};
+constexpr uint32 const EncounterCount = 6;
-enum DMData
+enum DMDataTypes
{
- EVENT_STATE,
- EVENT_RHAHKZOR
+ // Encounters
+ BOSS_GLUBTOK = 0,
+ BOSS_HELIX_GEARBREAKER = 1,
+ BOSS_FOE_REAPER_5000 = 2,
+ BOSS_ADMIRAL_RIPSNARL = 3,
+ BOSS_CAPTAIN_COOKIE = 4,
+ BOSS_VANESSA_VANCLEEF = 5
};
-enum DMData64
+enum DMCreatureIds
{
- DATA_SMITE_CHEST
+ // Bosses
+ NPC_GLUBTOK = 47162,
+ NPC_HELIX_GEARBREAKER = 47296,
+ NPC_FOE_REAPER_5000 = 43778,
+ NPC_ADMIRAL_RIPSNARL = 47626,
+ NPC_CAPTAIN_COOKIE = 47739,
+ NPC_VANESSA_VAN_CLEEF = 49541
};
-enum DMGameObjects
+enum DMGameObjectIds
{
- GO_FACTORY_DOOR = 13965,
- GO_IRONCLAD_DOOR = 16397,
- GO_DEFIAS_CANNON = 16398,
- GO_DOOR_LEVER = 101833,
- GO_MR_SMITE_CHEST = 144111
+ GO_FACTORY_DOOR = 13965,
+ GO_IRON_CLAD_DOOR = 16397,
+ GO_DEFIAS_CANNON = 16398,
+ GO_DOOR_LEVER = 101833,
+ GO_MAST_ROOM_DOOR = 16400,
+ GO_HEAVY_DOOR = 17153,
+ GO_FOUNDRY_DOOR = 16399
};
template <class AI, class T>
@@ -58,4 +64,4 @@ inline AI* GetDeadminesAI(T* obj)
return GetInstanceAI<AI>(obj, DMScriptName);
}
-#endif
+#endif // _Deadmines_h__
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
index b3e2b053ad7..1cdad52feb1 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
@@ -15,221 +15,61 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Instance_Deadmines
-SD%Complete: 100
-SDComment:
-SDCategory: Deadmines
-EndScriptData */
-
#include "ScriptMgr.h"
#include "deadmines.h"
-#include "GameObject.h"
#include "InstanceScript.h"
-#include "Map.h"
-#include "MotionMaster.h"
-#include "TemporarySummon.h"
-enum Sounds
+ObjectData const creatureData[] =
{
- SOUND_CANNONFIRE = 1400,
- SOUND_DESTROYDOOR = 3079,
- SOUND_MR_SMITE_ALARM1 = 5775,
- SOUND_MR_SMITE_ALARM2 = 5777
+ { NPC_GLUBTOK, BOSS_GLUBTOK },
+ { NPC_HELIX_GEARBREAKER, BOSS_HELIX_GEARBREAKER },
+ { NPC_FOE_REAPER_5000, BOSS_FOE_REAPER_5000 },
+ { NPC_ADMIRAL_RIPSNARL, BOSS_ADMIRAL_RIPSNARL },
+ { NPC_CAPTAIN_COOKIE, BOSS_CAPTAIN_COOKIE },
+ { NPC_VANESSA_VAN_CLEEF, BOSS_VANESSA_VANCLEEF },
+ { 0, 0 } // END
};
-#define SAY_MR_SMITE_ALARM1 "You there, check out that noise!"
-#define SAY_MR_SMITE_ALARM2 "We're under attack! A vast, ye swabs! Repel the invaders!"
+DoorData const doorData[] =
+{
+ { GO_FACTORY_DOOR, BOSS_GLUBTOK, EncounterDoorBehavior::OpenWhenDone },
+ { GO_MAST_ROOM_DOOR, BOSS_HELIX_GEARBREAKER, EncounterDoorBehavior::OpenWhenDone },
+ { GO_HEAVY_DOOR, BOSS_HELIX_GEARBREAKER, EncounterDoorBehavior::OpenWhenNotInProgress },
+ { GO_FOUNDRY_DOOR, BOSS_FOE_REAPER_5000, EncounterDoorBehavior::OpenWhenDone },
+ { 0, 0, EncounterDoorBehavior::OpenWhenDone } // END
+};
-enum Misc
+DungeonEncounterData const encounters[] =
{
- DATA_CANNON_BLAST_TIMER = 3000,
- DATA_PIRATES_DELAY_TIMER = 1000
+ { BOSS_GLUBTOK, {{ 1064 }} },
+ { BOSS_HELIX_GEARBREAKER, {{ 1065 }} },
+ { BOSS_FOE_REAPER_5000, {{ 1063 }} },
+ { BOSS_ADMIRAL_RIPSNARL, {{ 1062 }} },
+ { BOSS_CAPTAIN_COOKIE, {{ 1060 }} },
+ { BOSS_VANESSA_VANCLEEF, {{ 1081 }} }
};
class instance_deadmines : public InstanceMapScript
{
- public:
- instance_deadmines() : InstanceMapScript(DMScriptName, 36)
- {
- }
+public:
+ instance_deadmines() : InstanceMapScript(DMScriptName, 36) { }
- struct instance_deadmines_InstanceMapScript : public InstanceScript
+ struct instance_deadmines_InstanceMapScript : public InstanceScript
+ {
+ instance_deadmines_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
{
- instance_deadmines_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
- {
- SetHeaders(DataHeader);
-
- State = CANNON_NOT_USED;
- CannonBlast_Timer = 0;
- PiratesDelay_Timer = 0;
- }
-
- ObjectGuid FactoryDoorGUID;
- ObjectGuid IronCladDoorGUID;
- ObjectGuid DefiasCannonGUID;
- ObjectGuid DoorLeverGUID;
- ObjectGuid DefiasPirate1GUID;
- ObjectGuid DefiasPirate2GUID;
-
- uint32 State;
- uint32 CannonBlast_Timer;
- uint32 PiratesDelay_Timer;
- ObjectGuid uiSmiteChestGUID;
-
- virtual void Update(uint32 diff) override
- {
- if (!IronCladDoorGUID || !DefiasCannonGUID || !DoorLeverGUID)
- return;
-
- GameObject* pIronCladDoor = instance->GetGameObject(IronCladDoorGUID);
- if (!pIronCladDoor)
- return;
-
- switch (State)
- {
- case CANNON_GUNPOWDER_USED:
- CannonBlast_Timer = DATA_CANNON_BLAST_TIMER;
- // it's a hack - Mr. Smite should do that but his too far away
- //pIronCladDoor->SetName("Mr. Smite");
- //pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM1, LANG_UNIVERSAL, nullptr);
- pIronCladDoor->PlayDirectSound(SOUND_MR_SMITE_ALARM1);
- State = CANNON_BLAST_INITIATED;
- break;
- case CANNON_BLAST_INITIATED:
- PiratesDelay_Timer = DATA_PIRATES_DELAY_TIMER;
- if (CannonBlast_Timer <= diff)
- {
- SummonCreatures();
- ShootCannon();
- BlastOutDoor();
- LeverStucked();
- //pIronCladDoor->MonsterYell(SAY_MR_SMITE_ALARM2, LANG_UNIVERSAL, nullptr);
- pIronCladDoor->PlayDirectSound(SOUND_MR_SMITE_ALARM2);
- State = PIRATES_ATTACK;
- } else CannonBlast_Timer -= diff;
- break;
- case PIRATES_ATTACK:
- if (PiratesDelay_Timer <= diff)
- {
- MoveCreaturesInside();
- State = EVENT_DONE;
- } else PiratesDelay_Timer -= diff;
- break;
- }
- }
-
- void SummonCreatures()
- {
- if (GameObject* pIronCladDoor = instance->GetGameObject(IronCladDoorGUID))
- {
- Creature* DefiasPirate1 = pIronCladDoor->SummonCreature(657, pIronCladDoor->GetPositionX() - 2, pIronCladDoor->GetPositionY()-7, pIronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3s);
- Creature* DefiasPirate2 = pIronCladDoor->SummonCreature(657, pIronCladDoor->GetPositionX() + 3, pIronCladDoor->GetPositionY()-6, pIronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3s);
-
- DefiasPirate1GUID = DefiasPirate1->GetGUID();
- DefiasPirate2GUID = DefiasPirate2->GetGUID();
- }
- }
-
- void MoveCreaturesInside()
- {
- if (!DefiasPirate1GUID || !DefiasPirate2GUID)
- return;
-
- Creature* pDefiasPirate1 = instance->GetCreature(DefiasPirate1GUID);
- Creature* pDefiasPirate2 = instance->GetCreature(DefiasPirate2GUID);
- if (!pDefiasPirate1 || !pDefiasPirate2)
- return;
-
- MoveCreatureInside(pDefiasPirate1);
- MoveCreatureInside(pDefiasPirate2);
- }
-
- void MoveCreatureInside(Creature* creature)
- {
- creature->SetWalk(false);
- creature->GetMotionMaster()->MovePoint(0, -102.7f, -655.9f, creature->GetPositionZ());
- }
-
- void ShootCannon()
- {
- if (GameObject* pDefiasCannon = instance->GetGameObject(DefiasCannonGUID))
- {
- pDefiasCannon->SetGoState(GO_STATE_ACTIVE);
- pDefiasCannon->PlayDirectSound(SOUND_CANNONFIRE);
- }
- }
-
- void BlastOutDoor()
- {
- if (GameObject* pIronCladDoor = instance->GetGameObject(IronCladDoorGUID))
- {
- pIronCladDoor->SetGoState(GO_STATE_DESTROYED);
- pIronCladDoor->PlayDirectSound(SOUND_DESTROYDOOR);
- }
- }
-
- void LeverStucked()
- {
- if (GameObject* pDoorLever = instance->GetGameObject(DoorLeverGUID))
- pDoorLever->SetFlag(GO_FLAG_INTERACT_COND);
- }
-
- void OnGameObjectCreate(GameObject* go) override
- {
- switch (go->GetEntry())
- {
- case GO_FACTORY_DOOR: FactoryDoorGUID = go->GetGUID(); break;
- case GO_IRONCLAD_DOOR: IronCladDoorGUID = go->GetGUID(); break;
- case GO_DEFIAS_CANNON: DefiasCannonGUID = go->GetGUID(); break;
- case GO_DOOR_LEVER: DoorLeverGUID = go->GetGUID(); break;
- case GO_MR_SMITE_CHEST: uiSmiteChestGUID = go->GetGUID(); break;
- }
- }
-
- void SetData(uint32 type, uint32 data) override
- {
- switch (type)
- {
- case EVENT_STATE:
- if (!DefiasCannonGUID.IsEmpty() && !IronCladDoorGUID.IsEmpty())
- State = data;
- break;
- case EVENT_RHAHKZOR:
- if (data == DONE)
- if (GameObject* go = instance->GetGameObject(FactoryDoorGUID))
- go->SetGoState(GO_STATE_ACTIVE);
- break;
- }
- }
-
- uint32 GetData(uint32 type) const override
- {
- switch (type)
- {
- case EVENT_STATE:
- return State;
- }
-
- return 0;
- }
-
- ObjectGuid GetGuidData(uint32 data) const override
- {
- switch (data)
- {
- case DATA_SMITE_CHEST:
- return uiSmiteChestGUID;
- }
-
- return ObjectGuid::Empty;
- }
- };
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const override
- {
- return new instance_deadmines_InstanceMapScript(map);
+ SetHeaders(DataHeader);
+ SetBossNumber(EncounterCount);
+ LoadObjectData(creatureData, nullptr);
+ LoadDoorData(doorData);
+ LoadDungeonEncounterData(encounters);
}
+ };
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
+ {
+ return new instance_deadmines_InstanceMapScript(map);
+ }
};
void AddSC_instance_deadmines()
diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
index ae6039cd25b..8c62fb2b7e2 100644
--- a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
+++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp
@@ -70,9 +70,7 @@ void AddSC_boss_flamegor();
void AddSC_boss_chromaggus();
void AddSC_boss_nefarian();
void AddSC_instance_blackwing_lair();
-void AddSC_deadmines(); //Deadmines
-void AddSC_instance_deadmines();
-void AddSC_boss_mr_smite();
+void AddSC_instance_deadmines(); //Deadmines
void AddSC_gnomeregan(); //Gnomeregan
void AddSC_instance_gnomeregan();
void AddSC_instance_grim_batol(); //Grim Batol
@@ -267,9 +265,7 @@ void AddEasternKingdomsScripts()
AddSC_boss_chromaggus();
AddSC_boss_nefarian();
AddSC_instance_blackwing_lair();
- AddSC_deadmines(); //Deadmines
- AddSC_boss_mr_smite();
- AddSC_instance_deadmines();
+ AddSC_instance_deadmines(); //Deadmines
AddSC_gnomeregan(); //Gnomeregan
AddSC_instance_gnomeregan();
AddSC_instance_grim_batol(); //Grim Batol