diff options
author | XTZGZoReX <none@none> | 2010-08-06 20:22:42 +0200 |
---|---|---|
committer | XTZGZoReX <none@none> | 2010-08-06 20:22:42 +0200 |
commit | b51630ccb6607327bbfee877679998dcead5216d (patch) | |
tree | 49032f30e186674941f508a1193c30c262ef4ca4 | |
parent | 5a345eeade9073fd5c3fd8c1848ab3ebf86ab48a (diff) |
* Example on converting instance scripts.
--HG--
branch : trunk
-rw-r--r-- | src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp | 405 |
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(); -} |