diff options
author | Ovahlord <dreadkiller@gmx.de> | 2023-12-22 12:51:05 +0100 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2023-12-22 12:51:05 +0100 |
commit | 50a2166fb14b6cb8ea4de52485941bcdeabf6b8c (patch) | |
tree | 01b2e3362cb6ae392cce35ad450eb8ac543d936f /src | |
parent | cb5eb983b0dfd98a8d5cd0a14d3f3a2204d770ca (diff) |
Scripts/Deadmines: dropped deprecated scripts and updated instance script and definitions to Cataclysm
Diffstat (limited to 'src')
5 files changed, 71 insertions, 479 deletions
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 |