diff options
Diffstat (limited to 'src')
5 files changed, 143 insertions, 7 deletions
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index f68c14031f9..bea7aa1df6f 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -428,6 +428,7 @@ void AddSC_boss_marwyn(); void AddSC_boss_lord_marrowgar(); // Icecrown Citadel void AddSC_boss_lady_deathwhisper(); void AddSC_boss_deathbringer_saurfang(); +void AddSC_icecrown_citadel_teleport(); void AddSC_instance_icecrown_citadel(); void AddSC_dalaran(); @@ -1102,6 +1103,7 @@ void AddNorthrendScripts() AddSC_boss_lord_marrowgar(); // Icecrown Citadel AddSC_boss_lady_deathwhisper(); AddSC_boss_deathbringer_saurfang(); + AddSC_icecrown_citadel_teleport(); AddSC_instance_icecrown_citadel(); AddSC_dalaran(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index f8d297b9c71..0ec72b2ee25 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -102,7 +102,8 @@ enum eSpells SPELL_RESISTANT_SKIN = 72723, SPELL_SCENT_OF_BLOOD = 72769, // Heroic only - SPELL_RIDE_VEHICLE = 70640 // Outro + SPELL_RIDE_VEHICLE = 70640, // Outro + SPELL_ACHIEVEMENT = 72928 }; // Helper to get id of the aura on different modes (HasAura(baseId) wont work) @@ -273,6 +274,7 @@ class boss_deathbringer_saurfang : public CreatureScript void JustDied(Unit* /*killer*/) { + DoCastAOE(SPELL_ACHIEVEMENT, true); DoScriptText(SAY_DEATH, me); if (pInstance) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 132a3ff9b4c..1f025893840 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -83,6 +83,7 @@ enum eGameobjects DEATHBRINGER_S_CACHE_25N = 202240, DEATHBRINGER_S_CACHE_10H = 202238, DEATHBRINGER_S_CACHE_25H = 202241, + SCOURGE_TRANSPORTER_SAURFANG = 202244, }; enum eAchievementCriteria diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp new file mode 100644 index 00000000000..2eaaf96820d --- /dev/null +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "ScriptPCH.h" +#include "icecrown_citadel.h" +#include "Spell.h" + +enum eSpellAction +{ + LIGHT_S_HAMMER_TELEPORT = 70781, + ORATORY_OF_THE_DAMNED_TELEPORT = 70856, + RAMPART_OF_SKULLS_TELEPORT = 70857, + DEATHBRINGER_S_RISE_TELEPORT = 70858, + UPPER_SPIRE_TELEPORT = 70859, + FROZEN_THRONE_TELEPORT = 70860, + SINDRAGOSA_S_LAIR_TELEPORT = 70861 +}; + +#define GOSSIP_SENDER_ICC_PORT 631 + +class icecrown_citadel_teleport : public GameObjectScript +{ + public: + icecrown_citadel_teleport() : GameObjectScript("icecrown_citadel_teleport") { } + + bool OnGossipHello(Player* player, GameObject* go) + { + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Light's Hammer.", GOSSIP_SENDER_ICC_PORT, LIGHT_S_HAMMER_TELEPORT); + if (InstanceScript* pInstance = go->GetInstanceScript()) + { + if (pInstance->GetData(DATA_LORD_MARROWGAR) == DONE) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Oratory of the Damned.", GOSSIP_SENDER_ICC_PORT, ORATORY_OF_THE_DAMNED_TELEPORT); + if (pInstance->GetData(DATA_LADY_DEATHWHISPER) == DONE) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Rampart of Skulls.", GOSSIP_SENDER_ICC_PORT, RAMPART_OF_SKULLS_TELEPORT); + if (pInstance->GetData(DATA_GUNSHIP_EVENT) == DONE) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Deathbringer's Rise.", GOSSIP_SENDER_ICC_PORT, DEATHBRINGER_S_RISE_TELEPORT); + if (pInstance->GetData(DATA_DEATHBRINGER_SAURFANG) == DONE) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Upper Spire.", GOSSIP_SENDER_ICC_PORT, UPPER_SPIRE_TELEPORT); + if (pInstance->GetData(DATA_VALITHRIA_DREAMWALKER) == DONE) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Sindragosa's Lair", GOSSIP_SENDER_ICC_PORT, SINDRAGOSA_S_LAIR_TELEPORT); + if (pInstance->GetData(DATA_PROFESSOR_PUTRICIDE) == DONE && pInstance->GetData(DATA_BLOOD_QUEEN_LANA_THEL) == DONE && pInstance->GetData(DATA_SINDRAGOSA) == DONE) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to The Frozen Throne", GOSSIP_SENDER_ICC_PORT, FROZEN_THRONE_TELEPORT); + } + + player->SEND_GOSSIP_MENU(go->GetGOInfo()->GetGossipMenuId(), go->GetGUID()); + return true; + } + + bool OnGossipSelect(Player* player, GameObject* go, uint32 sender, uint32 action) + { + SpellEntry const* spell = sSpellStore.LookupEntry(action); + if (!spell) + return false; + + if (player->isInCombat()) + { + Spell::SendCastResult(player, spell, 0, SPELL_FAILED_AFFECTING_COMBAT); + return true; + } + + if (sender == GOSSIP_SENDER_ICC_PORT) + player->CastSpell(player, spell, true); + + return true; + } +}; + +void AddSC_icecrown_citadel_teleport() +{ + new icecrown_citadel_teleport(); +} diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 7b4d1b0e1ee..236642e414c 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -37,6 +37,7 @@ class instance_icecrown_citadel : public InstanceMapScript uiSaurfangDoor = 0; uiSaurfangEventNPC = 0; uiDeathbringersCache = 0; + uiSaurfangTeleport = 0; isBonedEligible = false; } @@ -76,6 +77,8 @@ class instance_icecrown_citadel : public InstanceMapScript if (TeamInInstance == ALLIANCE) creature->UpdateEntry(NPC_SE_SKYBREAKER_MARINE, ALLIANCE); break; + default: + break; } } @@ -120,6 +123,16 @@ class instance_icecrown_citadel : public InstanceMapScript case DEATHBRINGER_S_CACHE_25H: uiDeathbringersCache = pGo->GetGUID(); break; + case SCOURGE_TRANSPORTER_SAURFANG: + uiSaurfangTeleport = pGo->GetGUID(); + if (GetData(DATA_DEATHBRINGER_SAURFANG) == DONE) + { + HandleGameObject(uiSaurfangTeleport, true, pGo); + pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + } + break; + default: + break; } } @@ -140,6 +153,8 @@ class instance_icecrown_citadel : public InstanceMapScript case DATA_SINDRAGOSA: case DATA_THE_LICH_KING: return uiEncounterState[type]; + default: + break; } return 0; @@ -155,6 +170,8 @@ class instance_icecrown_citadel : public InstanceMapScript return uiSaurfangEventNPC; case DATA_SAURFANG_DOOR: return uiSaurfangDoor; + default: + break; } return 0; @@ -166,7 +183,7 @@ class instance_icecrown_citadel : public InstanceMapScript { case DATA_LORD_MARROWGAR: uiEncounterState[type] = data; - switch(data) + switch (data) { case DONE: HandleGameObject(uiIcewall[0], true); @@ -181,11 +198,13 @@ class instance_icecrown_citadel : public InstanceMapScript case IN_PROGRESS: HandleGameObject(uiMarrowgarEntrance, false); break; + default: + break; } break; case DATA_LADY_DEATHWHISPER: uiEncounterState[type] = data; - switch(data) + switch (data) { case DONE: // TEMPORARY, UNCOMMMENT IF YOU WANT TO DO SAURFANG AND SKIP GUNSHIP @@ -203,6 +222,8 @@ class instance_icecrown_citadel : public InstanceMapScript case NOT_STARTED: HandleGameObject(uiOratoryDoor, true); break; + default: + break; } break; case DATA_GUNSHIP_EVENT: @@ -210,10 +231,29 @@ class instance_icecrown_citadel : public InstanceMapScript break; case DATA_DEATHBRINGER_SAURFANG: uiEncounterState[type] = data; - if (data == DONE) - if (GameObject* lootCache = instance->GetGameObject(uiDeathbringersCache)) - if (!lootCache->isSpawned()) - lootCache->SetRespawnTime(7*DAY); + switch (data) + { + case DONE: + if (GameObject* lootCache = instance->GetGameObject(uiDeathbringersCache)) + if (!lootCache->isSpawned()) + lootCache->SetRespawnTime(7*DAY); + case NOT_STARTED: + if (GameObject* teleporter = instance->GetGameObject(uiSaurfangTeleport)) + { + HandleGameObject(uiSaurfangTeleport, true, teleporter); + teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + } + break; + case IN_PROGRESS: + if (GameObject* teleporter = instance->GetGameObject(uiSaurfangTeleport)) + { + HandleGameObject(uiSaurfangTeleport, false, teleporter); + teleporter->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + } + break; + default: + break; + } break; case DATA_FESTERGUT: case DATA_ROTFACE: @@ -229,6 +269,8 @@ class instance_icecrown_citadel : public InstanceMapScript case COMMAND_FAIL_BONED: isBonedEligible = data ? true : false; break; + default: + break; } if (data == DONE && type < MAX_ENCOUNTER) @@ -244,6 +286,8 @@ class instance_icecrown_citadel : public InstanceMapScript case CRITERIA_BONED_10H: case CRITERIA_BONED_25H: return isBonedEligible; + default: + break; } return false; @@ -302,6 +346,7 @@ class instance_icecrown_citadel : public InstanceMapScript uint64 uiSaurfangDoor; uint64 uiSaurfangEventNPC; // Muradin Bronzebeard or High Overlord Saurfang uint64 uiDeathbringersCache; + uint64 uiSaurfangTeleport; bool isBonedEligible; }; |