diff options
4 files changed, 82 insertions, 20 deletions
diff --git a/sql/updates/world/3.3.5/2020_07_30_00_world.sql b/sql/updates/world/3.3.5/2020_07_30_00_world.sql new file mode 100644 index 00000000000..6a1fba7f401 --- /dev/null +++ b/sql/updates/world/3.3.5/2020_07_30_00_world.sql @@ -0,0 +1,10 @@ +-- Creature Rhahk'Zor 644 SAI +DELETE FROM `smart_scripts` WHERE `entryorguid` = 644 AND `source_type` = 0 AND `id` = 2; + +-- Change door entries to correct ones +UPDATE `gameobject` SET `id` = 16400 WHERE `guid` = 26185 AND `id` = 17153; +UPDATE `gameobject` SET `id` = 16399 WHERE `guid` = 26182 AND `id` = 17153; + +-- Update Door Lever's interaction SAI to the new doors +UPDATE `smart_scripts` SET `target_type` = 20, `target_param1` = 16400, `target_param2` = 30 WHERE `entryorguid` = 101832 AND `source_type` = 1 AND `id` = 0; +UPDATE `smart_scripts` SET `target_type` = 20, `target_param1` = 16399, `target_param2` = 30 WHERE `entryorguid` = 101834 AND `source_type` = 1 AND `id` = 0; diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_vancleef.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_vancleef.cpp index 3af14804ca0..33440a3a9e4 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_vancleef.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_vancleef.cpp @@ -46,7 +46,7 @@ Position const BlackguardPositions[] = struct boss_vancleef : public BossAI { public: - boss_vancleef(Creature* creature) : BossAI(creature, DATA_VANCLEEF), _guardsCalled(false), _health25(false), _health33(false), _health66(false) { } + boss_vancleef(Creature* creature) : BossAI(creature, BOSS_VANCLEEF), _guardsCalled(false), _health25(false), _health33(false), _health66(false) { } void Reset() override { diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h index adc80bb11a7..a25ad5df4bd 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h +++ b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h @@ -23,6 +23,8 @@ #define DMScriptName "instance_deadmines" #define DataHeader "DM" +uint32 constexpr EncounterCount = 7; + enum DMCannonState { CANNON_NOT_USED, @@ -35,11 +37,17 @@ enum DMCannonState enum DMData { - EVENT_STATE, - EVENT_RHAHKZOR, + // Encounters + BOSS_RHAHKZOR = 0, + BOSS_SNEED = 1, + BOSS_GILNID = 2, + BOSS_MR_SMITE = 3, + BOSS_GREENSKIN = 4, + BOSS_VANCLEEF = 5, + BOSS_COOKIE = 6, - DATA_MR_SMITE = 0, // not currently used - DATA_VANCLEEF = 1 + // Additional + EVENT_STATE = 7 }; enum DMData64 @@ -47,9 +55,11 @@ enum DMData64 DATA_SMITE_CHEST }; -enum DMGameObjects +enum DMGameObjectsIds { GO_FACTORY_DOOR = 13965, + GO_MAST_ROOM_DOOR = 16400, + GO_FOUNDRY_DOOR = 16399, GO_IRONCLAD_DOOR = 16397, GO_DEFIAS_CANNON = 16398, GO_DOOR_LEVER = 101833, @@ -58,7 +68,13 @@ enum DMGameObjects enum DMCreaturesIds { + NPC_RHAHKZOR = 644, + NPC_SNEED = 643, + NPC_GILNID = 1763, NPC_MR_SMITE = 646, + NPC_GREENSKIN = 647, + NPC_VANCLEEF = 639, + NPC_COOKIE = 645, NPC_BLACKGUARD = 636 }; diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index c6bd6bd94af..c09e5236634 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -44,18 +44,26 @@ enum Misc DATA_SMITE_ALARM_DELAY_TIMER = 5000 }; +DoorData const doorData[] = +{ + { GO_FACTORY_DOOR, BOSS_RHAHKZOR, DOOR_TYPE_PASSAGE }, + { GO_MAST_ROOM_DOOR, BOSS_SNEED, DOOR_TYPE_PASSAGE }, + { GO_FOUNDRY_DOOR, BOSS_GILNID, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END +}; + class instance_deadmines : public InstanceMapScript { public: - instance_deadmines() : InstanceMapScript(DMScriptName, 36) - { - } + instance_deadmines() : InstanceMapScript(DMScriptName, 36) { } struct instance_deadmines_InstanceMapScript : public InstanceScript { instance_deadmines_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); + SetBossNumber(EncounterCount); + LoadDoorData(doorData); State = CANNON_NOT_USED; CannonBlast_Timer = 0; @@ -63,7 +71,6 @@ class instance_deadmines : public InstanceMapScript SmiteAlarmDelay_Timer = 0; } - ObjectGuid FactoryDoorGUID; ObjectGuid IronCladDoorGUID; ObjectGuid DefiasCannonGUID; ObjectGuid DoorLeverGUID; @@ -183,6 +190,8 @@ class instance_deadmines : public InstanceMapScript void OnCreatureCreate(Creature* creature) override { + InstanceScript::OnCreatureCreate(creature); + switch (creature->GetEntry()) { case NPC_MR_SMITE: @@ -195,13 +204,45 @@ class instance_deadmines : public InstanceMapScript void OnGameObjectCreate(GameObject* go) override { + InstanceScript::OnGameObjectCreate(go); + 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; + 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; + default: + break; + } + } + + void OnUnitDeath(Unit* unit) override + { + if (Creature* creature = unit->ToCreature()) + { + switch (creature->GetEntry()) + { + case NPC_RHAHKZOR: + SetBossState(BOSS_RHAHKZOR, DONE); + break; + case NPC_SNEED: + SetBossState(BOSS_SNEED, DONE); + break; + case NPC_GILNID: + SetBossState(BOSS_GILNID, DONE); + break; + default: + break; + } } } @@ -213,11 +254,6 @@ class instance_deadmines : public InstanceMapScript if (DefiasCannonGUID && IronCladDoorGUID) State = data; break; - case EVENT_RHAHKZOR: - if (data == DONE) - if (GameObject* go = instance->GetGameObject(FactoryDoorGUID)) - go->SetGoState(GO_STATE_ACTIVE); - break; } } |