diff options
-rw-r--r-- | src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp | 402 | ||||
-rw-r--r-- | src/server/scripts/World/areatrigger_scripts.cpp | 293 |
2 files changed, 374 insertions, 321 deletions
diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index fd648beedc5..f45aab5bb05 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -43,216 +43,222 @@ 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); - } - - 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; - } - } + public: - void SetData(uint32 type, uint32 data) - { - switch (type) + instance_deadmines() + : InstanceMapScript("instance_deadmines"); { - 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) + struct instance_deadmines_InstanceMapScript : public ScriptedInstance { - 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(); + new instance_deadmines(); } diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp index 3d6f1a4e8d6..14628cd67c2 100644 --- a/src/server/scripts/World/areatrigger_scripts.cpp +++ b/src/server/scripts/World/areatrigger_scripts.cpp @@ -55,17 +55,27 @@ enum eAldurtharGate NPC_NORTHWEST_GATE = 32199 }; -bool AreaTrigger_at_aldurthar_gate(Player* pPlayer, const AreaTriggerEntry* pAt) +class AreaTrigger_at_aldurthar_gate : public AreaTriggerScript { - switch(pAt->id) - { - case TRIGGER_SOUTH: pPlayer->KilledMonsterCredit(NPC_SOUTH_GATE, 0); break; - case TRIGGER_CENTRAL: pPlayer->KilledMonsterCredit(NPC_CENTRAL_GATE, 0); break; - case TRIGGER_NORTH: pPlayer->KilledMonsterCredit(NPC_NORTH_GATE, 0); break; - case TRIGGER_NORTHWEST: pPlayer->KilledMonsterCredit(NPC_NORTHWEST_GATE, 0); break; - } - return true; -} + public: + + AreaTrigger_at_aldurthar_gate() + : AreaTriggerScript("at_aldurthar_gate") + { + } + + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) + { + switch(trigger->id) + { + case TRIGGER_SOUTH: player->KilledMonsterCredit(NPC_SOUTH_GATE, 0); break; + case TRIGGER_CENTRAL: player->KilledMonsterCredit(NPC_CENTRAL_GATE, 0); break; + case TRIGGER_NORTH: player->KilledMonsterCredit(NPC_NORTH_GATE, 0); break; + case TRIGGER_NORTHWEST: player->KilledMonsterCredit(NPC_NORTHWEST_GATE, 0); break; + } + return true; + } +}; /*###### ## at_coilfang_waterfall @@ -76,14 +86,24 @@ enum eCoilfangGOs GO_COILFANG_WATERFALL = 184212 }; -bool AreaTrigger_at_coilfang_waterfall(Player *pPlayer, const AreaTriggerEntry * /*pAt*/) +class AreaTrigger_at_coilfang_waterfall : public AreaTriggerScript { - if (GameObject* pGo = GetClosestGameObjectWithEntry(pPlayer, GO_COILFANG_WATERFALL, 35.0f)) - if (pGo->getLootState() == GO_READY) - pGo->UseDoorOrButton(); + public: - return false; -} + AreaTrigger_at_coilfang_waterfall() + : AreaTriggerScript("at_coilfang_waterfall") + { + } + + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) + { + if (GameObject* pGo = GetClosestGameObjectWithEntry(player, GO_COILFANG_WATERFALL, 35.0f)) + if (pGo->getLootState() == GO_READY) + pGo->UseDoorOrButton(); + + return false; + } +}; /*##### ## at_legion_teleporter @@ -98,26 +118,36 @@ enum eLegionTeleporter QUEST_GAINING_ACCESS_H = 10604 }; -bool AreaTrigger_at_legion_teleporter(Player *pPlayer, const AreaTriggerEntry * /*pAt*/) +class AreaTrigger_at_legion_teleporter : public AreaTriggerScript { - if (pPlayer->isAlive() && !pPlayer->isInCombat()) - { - if (pPlayer->GetTeam() == ALLIANCE && pPlayer->GetQuestRewardStatus(QUEST_GAINING_ACCESS_A)) + public: + + AreaTrigger_at_legion_teleporter() + : AreaTriggerScript("at_legion_teleporter") { - pPlayer->CastSpell(pPlayer, SPELL_TELE_A_TO, false); - return true; } - if (pPlayer->GetTeam() == HORDE && pPlayer->GetQuestRewardStatus(QUEST_GAINING_ACCESS_H)) + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) { - pPlayer->CastSpell(pPlayer, SPELL_TELE_H_TO, false); - return true; + if (player->isAlive() && !player->isInCombat()) + { + if (player->GetTeam() == ALLIANCE && player->GetQuestRewardStatus(QUEST_GAINING_ACCESS_A)) + { + player->CastSpell(player, SPELL_TELE_A_TO, false); + return true; + } + + if (player->GetTeam() == HORDE && player->GetQuestRewardStatus(QUEST_GAINING_ACCESS_H)) + { + player->CastSpell(player, SPELL_TELE_H_TO, false); + return true; + } + + return false; + } + return false; } - - return false; - } - return false; -} +}; enum eRavenholdt { @@ -125,13 +155,23 @@ enum eRavenholdt NPC_RAVENHOLDT = 13936 }; -bool AreaTrigger_at_ravenholdt(Player* pPlayer, const AreaTriggerEntry* /*pAt*/) +class AreaTrigger_at_ravenholdt : public AreaTriggerScript { - if (pPlayer->GetQuestStatus(QUEST_MANOR_RAVENHOLDT) == QUEST_STATUS_INCOMPLETE) - pPlayer->KilledMonsterCredit(NPC_RAVENHOLDT, 0); + public: - return false; -} + AreaTrigger_at_ravenholdt() + : AreaTriggerScript("at_ravenholdt") + { + } + + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) + { + if (player->GetQuestStatus(QUEST_MANOR_RAVENHOLDT) == QUEST_STATUS_INCOMPLETE) + player->KilledMonsterCredit(NPC_RAVENHOLDT, 0); + + return false; + } +}; /*###### ## at_warsong_farms @@ -150,19 +190,29 @@ enum eWarsongFarms AT_TORP_FARM = 4872 }; -bool AreaTrigger_at_warsong_farms(Player* pPlayer, const AreaTriggerEntry* pAt) +class AreaTrigger_at_warsong_farms : public AreaTriggerScript { - if (!pPlayer->isDead() && pPlayer->GetQuestStatus(QUEST_THE_WARSONG_FARMS) == QUEST_STATUS_INCOMPLETE) - { - switch(pAt->id) + public: + + AreaTrigger_at_warsong_farms() + : AreaTriggerScript("at_warsong_farms") { - case AT_SLAUGHTERHOUSE: pPlayer->KilledMonsterCredit(NPC_CREDIT_SLAUGHTERHOUSE, 0); break; - case AT_GRAINERY: pPlayer->KilledMonsterCredit(NPC_CREDIT_GRAINERY, 0); break; - case AT_TORP_FARM: pPlayer->KilledMonsterCredit(NPC_CREDIT_TORP_FARM, 0); break; } - } - return true; - } + + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) + { + if (!player->isDead() && player->GetQuestStatus(QUEST_THE_WARSONG_FARMS) == QUEST_STATUS_INCOMPLETE) + { + switch(trigger->id) + { + case AT_SLAUGHTERHOUSE: player->KilledMonsterCredit(NPC_CREDIT_SLAUGHTERHOUSE, 0); break; + case AT_GRAINERY: player->KilledMonsterCredit(NPC_CREDIT_GRAINERY, 0); break; + case AT_TORP_FARM: player->KilledMonsterCredit(NPC_CREDIT_TORP_FARM, 0); break; + } + } + return true; + } +}; /*###### ## at_stormwright_shelf @@ -175,13 +225,23 @@ enum eStormwrightShelf SPELL_CREATE_TRUE_POWER_OF_THE_TEMPEST = 53067 }; -bool AreaTrigger_at_stormwright_shelf(Player* pPlayer, const AreaTriggerEntry* /*pAt*/) +class AreaTrigger_at_stormwright_shelf : public AreaTriggerScript { - if (!pPlayer->isDead() && pPlayer->GetQuestStatus(QUEST_STRENGTH_OF_THE_TEMPEST) == QUEST_STATUS_INCOMPLETE) - pPlayer->CastSpell(pPlayer, SPELL_CREATE_TRUE_POWER_OF_THE_TEMPEST, false); + public: - return true; -} + AreaTrigger_at_stormwright_shelf() + : AreaTriggerScript("at_stormwright_shelf") + { + } + + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) + { + if (!player->isDead() && player->GetQuestStatus(QUEST_STRENGTH_OF_THE_TEMPEST) == QUEST_STATUS_INCOMPLETE) + player->CastSpell(player, SPELL_CREATE_TRUE_POWER_OF_THE_TEMPEST, false); + + return true; + } +}; /*###### ## at_scent_larkorwi @@ -193,16 +253,26 @@ enum eScentLarkorwi NPC_LARKORWI_MATE = 9683 }; -bool AreaTrigger_at_scent_larkorwi(Player* pPlayer, const AreaTriggerEntry* /*pAt*/) +class AreaTrigger_at_scent_larkorwi : public AreaTriggerScript { - if (!pPlayer->isDead() && pPlayer->GetQuestStatus(QUEST_SCENT_OF_LARKORWI) == QUEST_STATUS_INCOMPLETE) - { - if (!pPlayer->FindNearestCreature(NPC_LARKORWI_MATE,15)) - pPlayer->SummonCreature(NPC_LARKORWI_MATE, pPlayer->GetPositionX()+5, pPlayer->GetPositionY(), pPlayer->GetPositionZ(), 3.3, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 100000); - } + public: - return false; -} + AreaTrigger_at_scent_larkorwi() + : AreaTriggerScript("at_scent_larkorwi") + { + } + + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) + { + if (!player->isDead() && player->GetQuestStatus(QUEST_SCENT_OF_LARKORWI) == QUEST_STATUS_INCOMPLETE) + { + if (!player->FindNearestCreature(NPC_LARKORWI_MATE,15)) + player->SummonCreature(NPC_LARKORWI_MATE, player->GetPositionX()+5, player->GetPositionY(), player->GetPositionZ(), 3.3, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 100000); + } + + return false; + } +}; /*##### ## at_last_rites @@ -213,75 +283,52 @@ enum eAtLastRites QUEST_LAST_RITES = 12019 }; -bool AreaTrigger_at_last_rites(Player* pPlayer, const AreaTriggerEntry* pAt) +class AreaTrigger_at_last_rites : public AreaTriggerScript { - if (pPlayer->GetQuestStatus(QUEST_LAST_RITES) != QUEST_STATUS_INCOMPLETE) - return false; - - WorldLocation pPosition; - - switch(pAt->id) - { - case 5332: - case 5338: - pPosition = WorldLocation(571,3733.68,3563.25,290.812,3.665192); - break; - case 5334: - pPosition = WorldLocation(571,3802.38,3585.95,49.5765,0); - break; - case 5340: - pPosition = WorldLocation(571,3687.91,3577.28,473.342,0); - break; - default: - return false; - } + public: - pPlayer->TeleportTo(pPosition); + AreaTrigger_at_last_rites() + : AreaTriggerScript("at_last_rites") + { + } - return false; -} + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) + { + if (player->GetQuestStatus(QUEST_LAST_RITES) != QUEST_STATUS_INCOMPLETE) + return false; + + WorldLocation pPosition; + + switch(trigger->id) + { + case 5332: + case 5338: + pPosition = WorldLocation(571,3733.68,3563.25,290.812,3.665192); + break; + case 5334: + pPosition = WorldLocation(571,3802.38,3585.95,49.5765,0); + break; + case 5340: + pPosition = WorldLocation(571,3687.91,3577.28,473.342,0); + break; + default: + return false; + } + + player->TeleportTo(pPosition); + + return false; + } +}; void AddSC_areatrigger_scripts() { - Script* newscript; - - newscript = new Script; - newscript->Name = "at_aldurthar_gate"; - newscript->pAreaTrigger = &AreaTrigger_at_aldurthar_gate; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "at_coilfang_waterfall"; - newscript->pAreaTrigger = &AreaTrigger_at_coilfang_waterfall; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "at_legion_teleporter"; - newscript->pAreaTrigger = &AreaTrigger_at_legion_teleporter; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "at_ravenholdt"; - newscript->pAreaTrigger = &AreaTrigger_at_ravenholdt; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "at_warsong_farms"; - newscript->pAreaTrigger = &AreaTrigger_at_warsong_farms; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "at_stormwright_shelf"; - newscript->pAreaTrigger = &AreaTrigger_at_stormwright_shelf; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "at_scent_larkorwi"; - newscript->pAreaTrigger = &AreaTrigger_at_scent_larkorwi; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "at_last_rites"; - newscript->pAreaTrigger = &AreaTrigger_at_last_rites; - newscript->RegisterSelf(); + new AreaTrigger_at_aldurthar_gate(); + new AreaTrigger_at_coilfang_waterfall(); + new AreaTrigger_at_legion_teleporter(); + new AreaTrigger_at_ravenholdt(); + new AreaTrigger_at_warsong_farms(); + new AreaTrigger_at_stormwright_shelf(); + new AreaTrigger_at_scent_larkorwi(); + new AreaTrigger_at_last_rites(); } |