aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSomebody <walliewhal4@gmail.com>2020-07-30 14:14:08 +0200
committerGitHub <noreply@github.com>2020-07-30 14:14:08 +0200
commit81f3ed1d0c6ecba624b4a88a4c60c0dfa1cd9524 (patch)
tree83d63d75e5cb285a56b1443742814c0b7be68144
parent420b21be9860367c82537634fb792a4af3d9be9b (diff)
Scripts/Deadmines: Doors after Rhahk'Zor, Sneed and Gilnid (#25107)
* Fix doors opening after killing Sneed and Gilnid in the Deadmines dungeon * Add SQL file * Update 2020_99_99_00_world.sql SQL conventions * Change SAI door opening into C++ door opening and make it use SetBossState. * Delete 2020_99_99_00_world.sql Replaced by different sql file * Make CircleCI happy * Change const to constexpr for EncounterCount variable * Update src/server/scripts/EasternKingdoms/Deadmines/deadmines.h Co-authored-by: Peter Keresztes Schmidt <carbenium@outlook.com> * Update src/server/scripts/EasternKingdoms/Deadmines/deadmines.h Co-authored-by: Peter Keresztes Schmidt <carbenium@outlook.com> * Rename 9999_99_99_00_world.sql to 2020_07_30_00_world.sql Co-authored-by: Peter Keresztes Schmidt <carbenium@outlook.com> Co-authored-by: Giacomo Pozzoni <giacomopoz@gmail.com>
-rw-r--r--sql/updates/world/3.3.5/2020_07_30_00_world.sql10
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/boss_vancleef.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/deadmines.h26
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp64
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;
}
}