diff options
Diffstat (limited to 'src')
7 files changed, 62 insertions, 30 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 8665227ef29..fe784b1ec9e 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -10046,7 +10046,8 @@ Bag* Player::GetBagByPos(uint8 bag) const { if ((bag >= INVENTORY_SLOT_BAG_START && bag < INVENTORY_SLOT_BAG_END) || (bag >= BANK_SLOT_BAG_START && bag < BANK_SLOT_BAG_END)) - return GetItemByPos(INVENTORY_SLOT_BAG_0, bag)->ToBag(); + if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, bag)) + return item->ToBag(); return NULL; } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp index 5dc37e54234..2bf8876572f 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp @@ -18,6 +18,11 @@ #include "ScriptPCH.h" #include "pit_of_saron.h" +// positions for Martin Victus (37591) and Gorkun Ironskull (37592) +Position const SlaveLeaderPos = {689.7158f, -104.8736f, 513.7360f, 0.0f}; +// position for Jaina and Sylvanas +Position const EventLeaderPos2 = {1054.368f, 107.14620f, 628.4467f, 0.0f}; + class instance_pit_of_saron : public InstanceMapScript { public: @@ -149,6 +154,44 @@ class instance_pit_of_saron : public InstanceMapScript } } + bool SetBossState(uint32 type, EncounterState state) + { + if (!InstanceScript::SetBossState(type, state)) + return false; + + switch (type) + { + case DATA_GARFROST: + if(state == DONE) + { + if (Creature* summoner = instance->GetCreature(_garfrostGUID)) + { + if (_teamInInstance == ALLIANCE) + summoner->SummonCreature(NPC_MARTIN_VICTUS_1, SlaveLeaderPos, TEMPSUMMON_MANUAL_DESPAWN); + else + summoner->SummonCreature(NPC_GORKUN_IRONSKULL_2, SlaveLeaderPos, TEMPSUMMON_MANUAL_DESPAWN); + } + } + break; + case DATA_TYRANNUS: + if (state == DONE) + { + if (Creature* summoner = instance->GetCreature(_tyrannusGUID)) + { + if (_teamInInstance == ALLIANCE) + summoner->SummonCreature(NPC_JAINA_PART2, EventLeaderPos2, TEMPSUMMON_MANUAL_DESPAWN); + else + summoner->SummonCreature(NPC_SYLVANAS_PART2, EventLeaderPos2, TEMPSUMMON_MANUAL_DESPAWN); + } + } + break; + default: + break; + } + + return true; + } + uint32 GetData(uint32 type) { switch (type) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index d805c598319..663734e1107 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -1436,8 +1436,7 @@ class spell_stinky_precious_decimate : public SpellScriptLoader if (GetHitUnit()->GetHealthPct() > float(GetEffectValue())) { uint32 newHealth = GetHitUnit()->GetMaxHealth() * uint32(GetEffectValue()) / 100; - if (GetHitUnit()->GetMaxHealth() >= newHealth) - GetHitUnit()->SetHealth(newHealth); + GetHitUnit()->SetHealth(newHealth); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index 306e00bbbe7..ac74aecd5cc 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -74,7 +74,6 @@ enum Events EVENT_MORTAL_WOUND = 5, EVENT_STICKY_OOZE = 6, - EVENT_UNSTABLE_DESPAWN = 7, }; class boss_rotface : public CreatureScript @@ -330,13 +329,6 @@ class npc_big_ooze : public CreatureScript { if (action == EVENT_STICKY_OOZE) events.CancelEvent(EVENT_STICKY_OOZE); - else if (action == EVENT_UNSTABLE_DESPAWN) - { - me->RemoveAllAuras(); - me->SetVisible(false); - events.Reset(); - events.ScheduleEvent(EVENT_UNSTABLE_DESPAWN, 60000); - } } void UpdateAI(const uint32 diff) @@ -353,10 +345,6 @@ class npc_big_ooze : public CreatureScript case EVENT_STICKY_OOZE: DoCastVictim(SPELL_STICKY_OOZE); events.ScheduleEvent(EVENT_STICKY_OOZE, 15000); - break; - case EVENT_UNSTABLE_DESPAWN: - me->Kill(me); - break; default: break; } @@ -707,7 +695,9 @@ class spell_rotface_unstable_ooze_explosion_suicide : public SpellScriptLoader if (target->GetTypeId() != TYPEID_UNIT) return; - target->ToCreature()->AI()->DoAction(EVENT_UNSTABLE_DESPAWN); + target->RemoveAllAuras(); + target->SetVisible(false); + target->ToCreature()->DespawnOrUnsummon(60000); } void Register() diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index a379b800720..581c673010b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -26,7 +26,7 @@ //* Deprogramming (DONE) //* Securing the Ramparts (DONE) //* Residue Rendezvous (DONE) -//* Blood Quickening // AreaTrigger 5729 starts the timer, pulling BQ before it runs out means success +//* Blood Quickening (DONE) //* Respite for a Tormented Soul enum Texts diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 76aed7805bb..95bc17dd9d0 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -19,6 +19,11 @@ #define DEF_ICECROWN_CITADEL_H #define ICCScriptName "instance_icecrown_citadel" +uint32 const EncounterCount = 12; +uint32 const WeeklyNPCs = 7; +uint32 const MaxHeroicAttempts = 50; +// Defined in boss_sindragosa.cpp +extern Position const SindragosaSpawnPos; // Shared spells used by more than one script enum SharedSpells @@ -39,7 +44,7 @@ enum TeleporterSpells DEATHBRINGER_S_RISE_TELEPORT = 70858, UPPER_SPIRE_TELEPORT = 70859, FROZEN_THRONE_TELEPORT = 70860, - SINDRAGOSA_S_LAIR_TELEPORT = 70861 + SINDRAGOSA_S_LAIR_TELEPORT = 70861, }; enum DataTypes @@ -78,9 +83,6 @@ enum DataTypes DATA_HEROIC_ATTEMPTS = 28, }; -#define MAX_ENCOUNTER 12 -#define WEEKLY_NPCS 7 - enum CreaturesIds { // At Light's Hammer @@ -324,7 +326,4 @@ enum WorldStatesICC WORLDSTATE_ATTEMPTS_MAX = 4942, }; -// Declaration -extern Position const SindragosaSpawnPos; - #endif // DEF_ICECROWN_CITADEL_H diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index bdcc611751d..54741b1fb2a 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -53,7 +53,7 @@ struct WeeklyQuest { uint32 creatureEntry; uint32 questId[2]; // 10 and 25 man versions -} WeeklyQuestData[WEEKLY_NPCS] = +} WeeklyQuestData[WeeklyNPCs] = { {NPC_INFILTRATOR_MINCHAR, {QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25 }}, // Deprogramming {NPC_KOR_KRON_LIEUTENANT, {QUEST_SECURING_THE_RAMPARTS_10, QUEST_SECURING_THE_RAMPARTS_25 }}, // Securing the Ramparts @@ -73,10 +73,10 @@ class instance_icecrown_citadel : public InstanceMapScript { instance_icecrown_citadel_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { - SetBossNumber(MAX_ENCOUNTER); + SetBossNumber(EncounterCount); LoadDoorData(doorData); teamInInstance = 0; - heroicAttempts = 50; + heroicAttempts = MaxHeroicAttempts; ladyDeathwisperElevator = 0; deathbringerSaurfang = 0; saurfangDoor = 0; @@ -118,7 +118,7 @@ class instance_icecrown_citadel : public InstanceMapScript data << uint32(WORLDSTATE_EXECUTION_TIME) << uint32(bloodQuickeningMinutes); data << uint32(WORLDSTATE_SHOW_ATTEMPTS) << uint32(instance->IsHeroic()); data << uint32(WORLDSTATE_ATTEMPTS_REMAINING) << uint32(heroicAttempts); - data << uint32(WORLDSTATE_ATTEMPTS_MAX) << uint32(50); + data << uint32(WORLDSTATE_ATTEMPTS_MAX) << uint32(MaxHeroicAttempts); } void OnPlayerEnter(Player* player) @@ -248,7 +248,7 @@ class instance_icecrown_citadel : public InstanceMapScript case NPC_MINCHAR_BEAM_STALKER: case NPC_VALITHRIA_DREAMWALKER_QUEST: { - for (uint8 questIndex = 0; questIndex < WEEKLY_NPCS; ++questIndex) + for (uint8 questIndex = 0; questIndex < WeeklyNPCs; ++questIndex) { if (WeeklyQuestData[questIndex].creatureEntry == entry) { @@ -876,7 +876,7 @@ class instance_icecrown_citadel : public InstanceMapScript if (dataHead1 == 'I' && dataHead2 == 'C') { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) + for (uint32 i = 0; i < EncounterCount; ++i) { uint32 tmpState; loadStream >> tmpState; |