mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
@@ -1846,7 +1846,7 @@ struct npc_entrance_faction_leader : public ScriptedAI
|
||||
{
|
||||
if (menuId == ICC_BUFF_MENUID_ALLY || menuId == ICC_BUFF_MENUID_HORDE)
|
||||
if (InstanceScript* instance = me->GetInstanceScript())
|
||||
instance->SetData(DATA_ICC_BUFF, 0);
|
||||
instance->SetData(DATA_FACTION_BUFF, 0);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -130,7 +130,7 @@ enum ICDataTypes
|
||||
DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL = 42,
|
||||
DATA_BLOOD_PRINCE_COUNCIL_INTRO = 43,
|
||||
DATA_SINDRAGOSA_INTRO = 44,
|
||||
DATA_ICC_BUFF = 45 // used by conditions
|
||||
DATA_FACTION_BUFF = 45 // used by conditions
|
||||
};
|
||||
|
||||
enum ICCreaturesIds
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
#include "icecrown_citadel.h"
|
||||
#include "AreaBoundary.h"
|
||||
#include "Creature.h"
|
||||
#include "CreatureAI.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "Map.h"
|
||||
@@ -29,6 +30,7 @@
|
||||
#include "TransportMgr.h"
|
||||
#include "WorldStatePackets.h"
|
||||
#include <sstream>
|
||||
#include <unordered_set>
|
||||
|
||||
enum EventIds
|
||||
{
|
||||
@@ -70,32 +72,32 @@ BossBoundaryData const boundaries =
|
||||
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM },
|
||||
{GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE },
|
||||
{GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE },
|
||||
{GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM },
|
||||
{GO_SAURFANG_S_DOOR, DATA_DEATHBRINGER_SAURFANG, DOOR_TYPE_PASSAGE },
|
||||
{GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM },
|
||||
{GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM },
|
||||
{GO_SCIENTIST_ENTRANCE, DATA_PROFESSOR_PUTRICIDE, DOOR_TYPE_ROOM },
|
||||
{GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_ROOM },
|
||||
{GO_BLOOD_ELF_COUNCIL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE },
|
||||
{GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE },
|
||||
{GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_ROOM },
|
||||
{GO_DOODAD_ICECROWN_GRATE_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_PASSAGE },
|
||||
{GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_SISTER_SVALNA, DOOR_TYPE_PASSAGE },
|
||||
{GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_ROOM },
|
||||
{GO_GREEN_DRAGON_BOSS_EXIT, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_PASSAGE },
|
||||
{GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
|
||||
{GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
|
||||
{GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
|
||||
{GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
|
||||
{GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_ROOM },
|
||||
{GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE },
|
||||
{GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE },
|
||||
{GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM },
|
||||
{GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM },
|
||||
{0, 0, DOOR_TYPE_ROOM } // END
|
||||
{ GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM },
|
||||
{ GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE },
|
||||
{ GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE },
|
||||
{ GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM },
|
||||
{ GO_SAURFANG_S_DOOR, DATA_DEATHBRINGER_SAURFANG, DOOR_TYPE_PASSAGE },
|
||||
{ GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM },
|
||||
{ GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM },
|
||||
{ GO_SCIENTIST_ENTRANCE, DATA_PROFESSOR_PUTRICIDE, DOOR_TYPE_ROOM },
|
||||
{ GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_ROOM },
|
||||
{ GO_BLOOD_ELF_COUNCIL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE },
|
||||
{ GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE },
|
||||
{ GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_ROOM },
|
||||
{ GO_DOODAD_ICECROWN_GRATE_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_PASSAGE },
|
||||
{ GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_SISTER_SVALNA, DOOR_TYPE_PASSAGE },
|
||||
{ GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_ROOM },
|
||||
{ GO_GREEN_DRAGON_BOSS_EXIT, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_PASSAGE },
|
||||
{ GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
|
||||
{ GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
|
||||
{ GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
|
||||
{ GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
|
||||
{ GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_ROOM },
|
||||
{ GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE },
|
||||
{ GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE },
|
||||
{ GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM },
|
||||
{ GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM },
|
||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||
};
|
||||
|
||||
// this doesnt have to only store questgivers, also can be used for related quest spawns
|
||||
@@ -140,17 +142,17 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
LoadDoorData(doorData);
|
||||
TeamInInstance = 0;
|
||||
HeroicAttempts = MaxHeroicAttempts;
|
||||
IsBonedEligible = true;
|
||||
IsOozeDanceEligible = true;
|
||||
IsNauseaEligible = true;
|
||||
IsOrbWhispererEligible = true;
|
||||
ColdflameJetsState = NOT_STARTED;
|
||||
UpperSpireTeleporterActiveState = NOT_STARTED;
|
||||
BloodQuickeningState = NOT_STARTED;
|
||||
BloodQuickeningMinutes = 0;
|
||||
BloodPrinceIntro = 1;
|
||||
SindragosaIntro = 1;
|
||||
ICCBuffActive = 1;
|
||||
IsBonedEligible = true;
|
||||
IsOozeDanceEligible = true;
|
||||
IsNauseaEligible = true;
|
||||
IsOrbWhispererEligible = true;
|
||||
IsFactionBuffActive = true;
|
||||
}
|
||||
|
||||
// A function to help reduce the number of lines for teleporter management.
|
||||
@@ -185,22 +187,21 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
if (GetBossState(DATA_LADY_DEATHWHISPER) == DONE && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != DONE)
|
||||
SpawnGunship();
|
||||
|
||||
if (ICCBuffActive)
|
||||
{
|
||||
uint32 spellId = TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG;
|
||||
player->CastSpell(player, spellId, true);
|
||||
}
|
||||
if (IsFactionBuffActive)
|
||||
DoCastSpellOnPlayer(player, TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG);
|
||||
}
|
||||
|
||||
void OnPlayerLeave(Player* player) override
|
||||
{
|
||||
DoRemoveAurasDueToSpellOnPlayer(player, TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true, true);
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) override
|
||||
{
|
||||
if (creature->IsPet() && creature->GetOwnerGUID().IsPlayer())
|
||||
if (creature->IsGuardian() && creature->GetOwnerGUID().IsPlayer())
|
||||
{
|
||||
uint32 spellId = TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG;
|
||||
if (ICCBuffActive)
|
||||
creature->CastSpell(creature, spellId, true);
|
||||
else
|
||||
creature->RemoveAurasDueToSpell(spellId);
|
||||
if (IsFactionBuffActive)
|
||||
creature->CastSpell(creature, TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true);
|
||||
}
|
||||
|
||||
switch (creature->GetEntry())
|
||||
@@ -734,8 +735,8 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
return BloodPrinceIntro;
|
||||
case DATA_SINDRAGOSA_INTRO:
|
||||
return SindragosaIntro;
|
||||
case DATA_ICC_BUFF:
|
||||
return ICCBuffActive;
|
||||
case DATA_FACTION_BUFF:
|
||||
return IsFactionBuffActive ? 1 : 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -827,7 +828,7 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
|
||||
if (!HeroicAttempts)
|
||||
{
|
||||
for (ObjectGuid bossGuid : {ProfessorPutricideGUID, BloodQueenLanaThelGUID, SindragosaGUID, TheLichKingGUID})
|
||||
for (ObjectGuid const& bossGuid : { ProfessorPutricideGUID, BloodQueenLanaThelGUID, SindragosaGUID, TheLichKingGUID })
|
||||
{
|
||||
if (Creature* boss = instance->GetCreature(bossGuid))
|
||||
if (boss->IsAlive())
|
||||
@@ -1090,22 +1091,10 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case DATA_SINDRAGOSA_INTRO:
|
||||
SindragosaIntro = data;
|
||||
break;
|
||||
case DATA_ICC_BUFF:
|
||||
ICCBuffActive = data;
|
||||
if (!ICCBuffActive)
|
||||
{
|
||||
uint32 spellId = TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG;
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* player = itr->GetSource())
|
||||
{
|
||||
player->RemoveAurasDueToSpell(spellId);
|
||||
if (Pet* pet = player->GetPet())
|
||||
pet->RemoveAurasDueToSpell(spellId);
|
||||
}
|
||||
}
|
||||
}
|
||||
case DATA_FACTION_BUFF:
|
||||
IsFactionBuffActive = data ? true : false;
|
||||
if (!IsFactionBuffActive)
|
||||
DoRemoveAurasDueToSpellOnPlayers(TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG, true, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -1431,14 +1420,12 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
transport->EnableMovement(false);
|
||||
break;
|
||||
case EVENT_PLAYERS_GUNSHIP_SAURFANG:
|
||||
{
|
||||
if (Creature* captain = source->FindNearestCreature(TeamInInstance == HORDE ? NPC_IGB_HIGH_OVERLORD_SAURFANG : NPC_IGB_MURADIN_BRONZEBEARD, 100.0f))
|
||||
captain->AI()->DoAction(ACTION_EXIT_SHIP);
|
||||
if (GameObject* go = source->ToGameObject())
|
||||
if (Transport* transport = go->ToTransport())
|
||||
transport->EnableMovement(false);
|
||||
break;
|
||||
}
|
||||
case EVENT_QUAKE:
|
||||
if (GameObject* warning = instance->GetGameObject(FrozenThroneWarningGUID))
|
||||
warning->SetGoState(GO_STATE_ACTIVE);
|
||||
@@ -1471,6 +1458,8 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1531,19 +1520,19 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
uint32 TeamInInstance;
|
||||
uint32 ColdflameJetsState;
|
||||
uint32 UpperSpireTeleporterActiveState;
|
||||
std::set<ObjectGuid::LowType> FrostwyrmGUIDs;
|
||||
std::set<ObjectGuid::LowType> SpinestalkerTrash;
|
||||
std::set<ObjectGuid::LowType> RimefangTrash;
|
||||
std::unordered_set<ObjectGuid::LowType> FrostwyrmGUIDs;
|
||||
std::unordered_set<ObjectGuid::LowType> SpinestalkerTrash;
|
||||
std::unordered_set<ObjectGuid::LowType> RimefangTrash;
|
||||
uint32 BloodQuickeningState;
|
||||
uint32 HeroicAttempts;
|
||||
uint16 BloodQuickeningMinutes;
|
||||
uint8 BloodPrinceIntro;
|
||||
uint8 SindragosaIntro;
|
||||
uint8 ICCBuffActive;
|
||||
bool IsBonedEligible;
|
||||
bool IsOozeDanceEligible;
|
||||
bool IsNauseaEligible;
|
||||
bool IsOrbWhispererEligible;
|
||||
bool IsFactionBuffActive;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const override
|
||||
|
||||
Reference in New Issue
Block a user