aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp405
1 files changed, 203 insertions, 202 deletions
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
index fd648beedc5..f7aa583ca9f 100644
--- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
+++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
@@ -43,216 +43,217 @@ enum Misc
DATA_PIRATES_DELAY_TIMER = 1000
};
-struct instance_deadmines : public ScriptedInstance
+class instance_deadmines : public InstanceMapScript
{
- instance_deadmines(Map* pMap) : ScriptedInstance(pMap) { Initialize(); };
-
- uint64 FactoryDoorGUID;
- uint64 IronCladDoorGUID;
- uint64 DefiasCannonGUID;
- uint64 DoorLeverGUID;
- uint64 DefiasPirate1GUID;
- uint64 DefiasPirate2GUID;
- uint64 DefiasCompanionGUID;
-
- uint32 State;
- uint32 CannonBlast_Timer;
- uint32 PiratesDelay_Timer;
- uint64 uiSmiteChestGUID;
-
- void Initialize()
- {
- FactoryDoorGUID = 0;
- IronCladDoorGUID = 0;
- DefiasCannonGUID = 0;
- DoorLeverGUID = 0;
- DefiasPirate1GUID = 0;
- DefiasPirate2GUID = 0;
- DefiasCompanionGUID = 0;
-
- State = CANNON_NOT_USED;
- uiSmiteChestGUID = 0;
- }
-
- virtual void Update(uint32 diff)
- {
- 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, 0);
- DoPlaySound(pIronCladDoor, 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, 0);
- DoPlaySound(pIronCladDoor, 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, 3000);
- Creature *DefiasPirate2 = pIronCladDoor->SummonCreature(657,pIronCladDoor->GetPositionX() + 3,pIronCladDoor->GetPositionY()-6,pIronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
- Creature *DefiasCompanion = pIronCladDoor->SummonCreature(3450,pIronCladDoor->GetPositionX() + 2,pIronCladDoor->GetPositionY()-6,pIronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
-
- DefiasPirate1GUID = DefiasPirate1->GetGUID();
- DefiasPirate2GUID = DefiasPirate2->GetGUID();
- DefiasCompanionGUID = DefiasCompanion->GetGUID();
- }
- }
-
- void MoveCreaturesInside()
- {
- if (!DefiasPirate1GUID || !DefiasPirate2GUID || !DefiasCompanionGUID)
- return;
-
- Creature *pDefiasPirate1 = instance->GetCreature(DefiasPirate1GUID);
- Creature *pDefiasPirate2 = instance->GetCreature(DefiasPirate2GUID);
- Creature *pDefiasCompanion = instance->GetCreature(DefiasCompanionGUID);
- if (!pDefiasPirate1 || !pDefiasPirate2 || !pDefiasCompanion)
- return;
-
- MoveCreatureInside(pDefiasPirate1);
- MoveCreatureInside(pDefiasPirate2);
- MoveCreatureInside(pDefiasCompanion);
- }
-
- void MoveCreatureInside(Creature* pCreature)
- {
- pCreature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
- pCreature->GetMotionMaster()->MovePoint(0, -102.7,-655.9, pCreature->GetPositionZ());
- }
-
- void ShootCannon()
- {
- if (GameObject *pDefiasCannon = instance->GetGameObject(DefiasCannonGUID))
- {
- pDefiasCannon->SetGoState(GO_STATE_ACTIVE);
- DoPlaySound(pDefiasCannon, SOUND_CANNONFIRE);
- }
- }
-
- void BlastOutDoor()
- {
- if (GameObject *pIronCladDoor = instance->GetGameObject(IronCladDoorGUID))
- {
- pIronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
- DoPlaySound(pIronCladDoor, SOUND_DESTROYDOOR);
- }
- }
-
- void LeverStucked()
- {
- if (GameObject *pDoorLever = instance->GetGameObject(DoorLeverGUID))
- pDoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
- }
+ public:
- void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
- {
- switch(pGo->GetEntry())
+ instance_deadmines()
+ : InstanceMapScript("instance_deadmines");
{
- case GO_FACTORY_DOOR: FactoryDoorGUID = pGo->GetGUID(); break;
- case GO_IRONCLAD_DOOR: IronCladDoorGUID = pGo->GetGUID(); break;
- case GO_DEFIAS_CANNON: DefiasCannonGUID = pGo->GetGUID(); break;
- case GO_DOOR_LEVER: DoorLeverGUID = pGo->GetGUID(); break;
- case GO_MR_SMITE_CHEST: uiSmiteChestGUID = pGo->GetGUID(); break;
}
- }
- void SetData(uint32 type, uint32 data)
- {
- switch (type)
+ struct instance_deadmines_InstanceMapScript : public ScriptedInstance
{
- case EVENT_STATE:
- if (DefiasCannonGUID && IronCladDoorGUID)
- State=data;
- break;
- case EVENT_RHAHKZOR:
- if (data == DONE)
- if (GameObject* pGo = instance->GetGameObject(FactoryDoorGUID))
- pGo->SetGoState(GO_STATE_ACTIVE);
- break;
- }
- }
-
- uint32 GetData(uint32 type)
- {
- switch (type)
- {
- case EVENT_STATE:
- return State;
- }
+ instance_deadmines_InstanceMapScript(Map* pMap) : ScriptedInstance(pMap) { Initialize(); };
+
+ uint64 FactoryDoorGUID;
+ uint64 IronCladDoorGUID;
+ uint64 DefiasCannonGUID;
+ uint64 DoorLeverGUID;
+ uint64 DefiasPirate1GUID;
+ uint64 DefiasPirate2GUID;
+ uint64 DefiasCompanionGUID;
+
+ uint32 State;
+ uint32 CannonBlast_Timer;
+ uint32 PiratesDelay_Timer;
+ uint64 uiSmiteChestGUID;
+
+ void Initialize()
+ {
+ FactoryDoorGUID = 0;
+ IronCladDoorGUID = 0;
+ DefiasCannonGUID = 0;
+ DoorLeverGUID = 0;
+ DefiasPirate1GUID = 0;
+ DefiasPirate2GUID = 0;
+ DefiasCompanionGUID = 0;
+
+ State = CANNON_NOT_USED;
+ uiSmiteChestGUID = 0;
+ }
+
+ virtual void Update(uint32 diff)
+ {
+ 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, 0);
+ DoPlaySound(pIronCladDoor, 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, 0);
+ DoPlaySound(pIronCladDoor, 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, 3000);
+ Creature *DefiasPirate2 = pIronCladDoor->SummonCreature(657,pIronCladDoor->GetPositionX() + 3,pIronCladDoor->GetPositionY()-6,pIronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
+ Creature *DefiasCompanion = pIronCladDoor->SummonCreature(3450,pIronCladDoor->GetPositionX() + 2,pIronCladDoor->GetPositionY()-6,pIronCladDoor->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
+
+ DefiasPirate1GUID = DefiasPirate1->GetGUID();
+ DefiasPirate2GUID = DefiasPirate2->GetGUID();
+ DefiasCompanionGUID = DefiasCompanion->GetGUID();
+ }
+ }
+
+ void MoveCreaturesInside()
+ {
+ if (!DefiasPirate1GUID || !DefiasPirate2GUID || !DefiasCompanionGUID)
+ return;
+
+ Creature *pDefiasPirate1 = instance->GetCreature(DefiasPirate1GUID);
+ Creature *pDefiasPirate2 = instance->GetCreature(DefiasPirate2GUID);
+ Creature *pDefiasCompanion = instance->GetCreature(DefiasCompanionGUID);
+ if (!pDefiasPirate1 || !pDefiasPirate2 || !pDefiasCompanion)
+ return;
+
+ MoveCreatureInside(pDefiasPirate1);
+ MoveCreatureInside(pDefiasPirate2);
+ MoveCreatureInside(pDefiasCompanion);
+ }
+
+ void MoveCreatureInside(Creature* pCreature)
+ {
+ pCreature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
+ pCreature->GetMotionMaster()->MovePoint(0, -102.7,-655.9, pCreature->GetPositionZ());
+ }
+
+ void ShootCannon()
+ {
+ if (GameObject *pDefiasCannon = instance->GetGameObject(DefiasCannonGUID))
+ {
+ pDefiasCannon->SetGoState(GO_STATE_ACTIVE);
+ DoPlaySound(pDefiasCannon, SOUND_CANNONFIRE);
+ }
+ }
+
+ void BlastOutDoor()
+ {
+ if (GameObject *pIronCladDoor = instance->GetGameObject(IronCladDoorGUID))
+ {
+ pIronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
+ DoPlaySound(pIronCladDoor, SOUND_DESTROYDOOR);
+ }
+ }
+
+ void LeverStucked()
+ {
+ if (GameObject *pDoorLever = instance->GetGameObject(DoorLeverGUID))
+ pDoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4);
+ }
+
+ void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
+ {
+ switch(pGo->GetEntry())
+ {
+ case GO_FACTORY_DOOR: FactoryDoorGUID = pGo->GetGUID(); break;
+ case GO_IRONCLAD_DOOR: IronCladDoorGUID = pGo->GetGUID(); break;
+ case GO_DEFIAS_CANNON: DefiasCannonGUID = pGo->GetGUID(); break;
+ case GO_DOOR_LEVER: DoorLeverGUID = pGo->GetGUID(); break;
+ case GO_MR_SMITE_CHEST: uiSmiteChestGUID = pGo->GetGUID(); break;
+ }
+ }
+
+ void SetData(uint32 type, uint32 data)
+ {
+ switch (type)
+ {
+ case EVENT_STATE:
+ if (DefiasCannonGUID && IronCladDoorGUID)
+ State=data;
+ break;
+ case EVENT_RHAHKZOR:
+ if (data == DONE)
+ if (GameObject* pGo = instance->GetGameObject(FactoryDoorGUID))
+ pGo->SetGoState(GO_STATE_ACTIVE);
+ break;
+ }
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ switch (type)
+ {
+ case EVENT_STATE:
+ return State;
+ }
- return 0;
- }
+ return 0;
+ }
- uint64 GetData64(uint32 data)
- {
- switch (data)
+ uint64 GetData64(uint32 data)
+ {
+ switch (data)
+ {
+ case DATA_SMITE_CHEST:
+ return uiSmiteChestGUID;
+ }
+
+ return 0;
+ }
+
+ void DoPlaySound(GameObject* unit, uint32 sound)
+ {
+ WorldPacket data(4);
+ data.SetOpcode(SMSG_PLAY_SOUND);
+ data << uint32(sound);
+ unit->SendMessageToSet(&data,false);
+ }
+
+ void DoPlaySoundCreature(Unit* unit, uint32 sound)
+ {
+ WorldPacket data(4);
+ data.SetOpcode(SMSG_PLAY_SOUND);
+ data << uint32(sound);
+ unit->SendMessageToSet(&data,false);
+ }
+ };
+
+ InstanceData* OnGetInstanceData(InstanceMap* map)
{
- case DATA_SMITE_CHEST:
- return uiSmiteChestGUID;
+ return new instance_deadmines_InstanceMapScript(pMap);
}
-
- return 0;
- }
-
- void DoPlaySound(GameObject* unit, uint32 sound)
- {
- WorldPacket data(4);
- data.SetOpcode(SMSG_PLAY_SOUND);
- data << uint32(sound);
- unit->SendMessageToSet(&data,false);
- }
-
- void DoPlaySoundCreature(Unit* unit, uint32 sound)
- {
- WorldPacket data(4);
- data.SetOpcode(SMSG_PLAY_SOUND);
- data << uint32(sound);
- unit->SendMessageToSet(&data,false);
- }
};
-
-InstanceData* GetInstanceData_instance_deadmines(Map* pMap)
-{
- return new instance_deadmines(pMap);
-}
-
-void AddSC_instance_deadmines()
-{
- Script *newscript;
- newscript = new Script;
- newscript->Name = "instance_deadmines";
- newscript->GetInstanceData = &GetInstanceData_instance_deadmines;
- newscript->RegisterSelf();
-}