Scripts/Icecrown Citadel:

* Added Valithria Dreamwalker script
* Fixed Mutated Abomination on heroic mode at Professor Putricide
* Fixed saving heroic attempts to db
This commit is contained in:
Shauren
2011-05-20 22:20:11 +02:00
parent 3d620db0c1
commit 0ab5cdef2e
12 changed files with 1688 additions and 57 deletions
@@ -476,6 +476,7 @@ void AddSC_boss_rotface();
void AddSC_boss_professor_putricide();
void AddSC_boss_blood_prince_council();
void AddSC_boss_blood_queen_lana_thel();
void AddSC_boss_valithria_dreamwalker();
void AddSC_boss_sindragosa();
void AddSC_icecrown_citadel_teleport();
void AddSC_instance_icecrown_citadel();
@@ -1171,6 +1172,7 @@ void AddNorthrendScripts()
AddSC_boss_professor_putricide();
AddSC_boss_blood_prince_council();
AddSC_boss_blood_queen_lana_thel();
AddSC_boss_valithria_dreamwalker();
AddSC_boss_sindragosa();
AddSC_icecrown_citadel_teleport();
AddSC_instance_icecrown_citadel();
+18
View File
@@ -4099,6 +4099,24 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->AreaGroupId = 0;
++count;
break;
case 70588: // Suppression
case 70602: // Corruption
spellInfo->AttributesEx |= SPELL_ATTR1_STACK_FOR_DIFF_CASTERS;
++count;
break;
case 70715: // Column of Frost (visual marker)
spellInfo->DurationIndex = 32; // 6 seconds (missing)
++count;
break;
case 71085: // Mana Void (periodic aura)
spellInfo->DurationIndex = 9; // 30 seconds (missing)
++count;
break;
case 70936: // Summon Suppressor
spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_TARGET_ANY;
spellInfo->EffectImplicitTargetB[0] = 0;
++count;
break;
case 71357: // Order Whelp
spellInfo->EffectRadiusIndex[0] = 22;
++count;
@@ -165,6 +165,7 @@ set(scripts_STAT_SRCS
Northrend/IcecrownCitadel/boss_professor_putricide.cpp
Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
Northrend/IcecrownCitadel/boss_sindragosa.cpp
Northrend/zuldrak.cpp
Northrend/icecrown.cpp
@@ -932,6 +932,34 @@ class spell_putricide_slime_puddle : public SpellScriptLoader
}
};
// this is here only because on retail you dont actually enter HEROIC mode for ICC
class spell_putricide_slime_puddle_aura : public SpellScriptLoader
{
public:
spell_putricide_slime_puddle_aura() : SpellScriptLoader("spell_putricide_slime_puddle_aura") { }
class spell_putricide_slime_puddle_aura_SpellScript : public SpellScript
{
PrepareSpellScript(spell_putricide_slime_puddle_aura_SpellScript);
void ReplaceAura()
{
if (Unit* target = GetHitUnit())
GetCaster()->AddAura((GetCaster()->GetMap()->GetSpawnMode() & 1) ? 72456 : 70346, target);
}
void Register()
{
OnHit += SpellHitFn(spell_putricide_slime_puddle_aura_SpellScript::ReplaceAura);
}
};
SpellScript* GetSpellScript() const
{
return new spell_putricide_slime_puddle_aura_SpellScript();
}
};
class spell_putricide_unstable_experiment : public SpellScriptLoader
{
public:
@@ -1516,6 +1544,7 @@ void AddSC_boss_professor_putricide()
new spell_putricide_ooze_channel();
new spell_putricide_expunged_gas();
new spell_putricide_slime_puddle();
new spell_putricide_slime_puddle_aura();
new spell_putricide_unstable_experiment();
new spell_putricide_ooze_summon();
new spell_putricide_ooze_eruption_searcher();
File diff suppressed because it is too large Load Diff
@@ -27,6 +27,8 @@
uint32 const EncounterCount = 13;
uint32 const WeeklyNPCs = 9;
uint32 const MaxHeroicAttempts = 50;
extern Position const ValithriaSpawnPos;
// Defined in boss_sindragosa.cpp
extern Position const SindragosaSpawnPos;
@@ -70,28 +72,30 @@ enum DataTypes
DATA_THE_LICH_KING = 12,
// Additional data
DATA_SAURFANG_EVENT_NPC = 34,
DATA_BONED_ACHIEVEMENT = 13,
DATA_OOZE_DANCE_ACHIEVEMENT = 14,
DATA_PUTRICIDE_TABLE = 15,
DATA_NAUSEA_ACHIEVEMENT = 16,
DATA_ORB_WHISPERER_ACHIEVEMENT = 17,
DATA_PRINCE_KELESETH_GUID = 18,
DATA_PRINCE_TALDARAM_GUID = 19,
DATA_PRINCE_VALANAR_GUID = 20,
DATA_BLOOD_PRINCES_CONTROL = 21,
DATA_SINDRAGOSA_FROSTWYRMS = 22,
DATA_SPINESTALKER = 23,
DATA_RIMEFANG = 24,
DATA_COLDFLAME_JETS = 25,
DATA_TEAM_IN_INSTANCE = 26,
DATA_BLOOD_QUICKENING_STATE = 27,
DATA_HEROIC_ATTEMPTS = 28,
DATA_CROK_SCOURGEBANE = 29,
DATA_CAPTAIN_ARNATH = 30,
DATA_CAPTAIN_BRANDON = 31,
DATA_CAPTAIN_GRONDEL = 32,
DATA_CAPTAIN_RUPERT = 33,
DATA_SAURFANG_EVENT_NPC = 13,
DATA_BONED_ACHIEVEMENT = 14,
DATA_OOZE_DANCE_ACHIEVEMENT = 15,
DATA_PUTRICIDE_TABLE = 16,
DATA_NAUSEA_ACHIEVEMENT = 17,
DATA_ORB_WHISPERER_ACHIEVEMENT = 18,
DATA_PRINCE_KELESETH_GUID = 19,
DATA_PRINCE_TALDARAM_GUID = 20,
DATA_PRINCE_VALANAR_GUID = 21,
DATA_BLOOD_PRINCES_CONTROL = 22,
DATA_SINDRAGOSA_FROSTWYRMS = 23,
DATA_SPINESTALKER = 24,
DATA_RIMEFANG = 25,
DATA_COLDFLAME_JETS = 26,
DATA_TEAM_IN_INSTANCE = 27,
DATA_BLOOD_QUICKENING_STATE = 28,
DATA_HEROIC_ATTEMPTS = 29,
DATA_CROK_SCOURGEBANE = 30,
DATA_CAPTAIN_ARNATH = 31,
DATA_CAPTAIN_BRANDON = 32,
DATA_CAPTAIN_GRONDEL = 33,
DATA_CAPTAIN_RUPERT = 34,
DATA_VALITHRIA_TRIGGER = 35,
DATA_VALITHRIA_LICH_KING = 36,
};
enum CreaturesIds
@@ -218,7 +222,13 @@ enum CreaturesIds
NPC_SUPPRESSER = 37863,
NPC_BLISTERING_ZOMBIE = 37934,
NPC_GLUTTONOUS_ABOMINATION = 37886,
NPC_MANA_VOID = 38068,
NPC_COLUMN_OF_FROST = 37918,
NPC_THE_LICH_KING_VALITHRIA = 16980,
NPC_DREAM_PORTAL_PRE_EFFECT = 38186,
NPC_NIGHTMARE_PORTAL_PRE_EFFECT = 38429,
NPC_DREAM_PORTAL = 37945,
NPC_NIGHTMARE_PORTAL = 38430,
// Sindragosa
NPC_SINDRAGOSA = 36853,
@@ -275,6 +285,10 @@ enum GameObjectsIds
// Valithria Dreamwalker
GO_GREEN_DRAGON_BOSS_ENTRANCE = 201375,
GO_GREEN_DRAGON_BOSS_EXIT = 201374,
GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01 = 201380,
GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02 = 201381,
GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03 = 201382,
GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04 = 201383,
// Sindragosa
GO_SINDRAGOSA_ENTRANCE_DOOR = 201373,
@@ -25,28 +25,32 @@
DoorData const doorData[] =
{
{GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM, BOUNDARY_N },
{GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM, BOUNDARY_N },
{GO_SAURFANG_S_DOOR, DATA_DEATHBRINGER_SAURFANG, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM, BOUNDARY_E },
{GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM, BOUNDARY_E },
{GO_SCIENTIST_ENTRANCE, DATA_PROFESSOR_PUTRICIDE, DOOR_TYPE_ROOM, BOUNDARY_E },
{GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_S },
{GO_BLOOD_ELF_COUNCIL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_W },
{GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_E },
{GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_ROOM, BOUNDARY_S },
{GO_DOODAD_ICECROWN_GRATE_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_SISTER_SVALNA, DOOR_TYPE_PASSAGE, BOUNDARY_S },
{GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_ROOM, BOUNDARY_N },
{GO_GREEN_DRAGON_BOSS_EXIT, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_PASSAGE, BOUNDARY_S },
{GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_S },
{GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE, BOUNDARY_E },
{GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SE },
{GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SW },
{0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE} // END
{GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM, BOUNDARY_N },
{GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM, BOUNDARY_N },
{GO_SAURFANG_S_DOOR, DATA_DEATHBRINGER_SAURFANG, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM, BOUNDARY_E },
{GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM, BOUNDARY_E },
{GO_SCIENTIST_ENTRANCE, DATA_PROFESSOR_PUTRICIDE, DOOR_TYPE_ROOM, BOUNDARY_E },
{GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_S },
{GO_BLOOD_ELF_COUNCIL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_W },
{GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_E },
{GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_ROOM, BOUNDARY_S },
{GO_DOODAD_ICECROWN_GRATE_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_SISTER_SVALNA, DOOR_TYPE_PASSAGE, BOUNDARY_S },
{GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_ROOM, BOUNDARY_N },
{GO_GREEN_DRAGON_BOSS_EXIT, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_PASSAGE, BOUNDARY_S },
{GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_N },
{GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_S },
{GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_N },
{GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_S },
{GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_S },
{GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE, BOUNDARY_E },
{GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
{GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SE },
{GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SW },
{0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE},// END
};
// this doesnt have to only store questgivers, also can be used for related quest spawns
@@ -105,6 +109,9 @@ class instance_icecrown_citadel : public InstanceMapScript
CrokScourgebaneGUID = 0;
memset(CrokCaptainGUIDs, 0, 4 * sizeof(uint64));
SisterSvalnaGUID = 0;
ValithriaDreamwalkerGUID = 0;
ValithriaLichKingGUID = 0;
ValithriaTriggerGUID = 0;
SindragosaGUID = 0;
SpinestalkerGUID = 0;
RimefangGUID = 0;
@@ -238,6 +245,15 @@ class instance_icecrown_citadel : public InstanceMapScript
case NPC_SISTER_SVALNA:
SisterSvalnaGUID = creature->GetGUID();
break;
case NPC_VALITHRIA_DREAMWALKER:
ValithriaDreamwalkerGUID = creature->GetGUID();
break;
case NPC_THE_LICH_KING_VALITHRIA:
ValithriaLichKingGUID = creature->GetGUID();
break;
case NPC_GREEN_DRAGON_COMBAT_TRIGGER:
ValithriaTriggerGUID = creature->GetGUID();
break;
case NPC_SINDRAGOSA:
SindragosaGUID = creature->GetGUID();
break;
@@ -330,12 +346,20 @@ class instance_icecrown_citadel : public InstanceMapScript
case GO_DOODAD_ICECROWN_GRATE_01:
case GO_GREEN_DRAGON_BOSS_ENTRANCE:
case GO_GREEN_DRAGON_BOSS_EXIT:
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02:
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03:
case GO_SINDRAGOSA_ENTRANCE_DOOR:
case GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR:
case GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR:
case GO_ICE_WALL:
AddDoor(go, true);
break;
// these 2 gates are functional only on 25man modes
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01:
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04:
if (instance->GetSpawnMode() & 1)
AddDoor(go, true);
break;
case GO_LADY_DEATHWHISPER_ELEVATOR:
LadyDeathwisperElevatorGUID = go->GetGUID();
if (GetBossState(DATA_LADY_DEATHWHISPER) == DONE)
@@ -428,6 +452,10 @@ class instance_icecrown_citadel : public InstanceMapScript
case GO_DOODAD_ICECROWN_GRATE_01:
case GO_GREEN_DRAGON_BOSS_ENTRANCE:
case GO_GREEN_DRAGON_BOSS_EXIT:
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01:
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02:
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03:
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04:
case GO_SINDRAGOSA_ENTRANCE_DOOR:
case GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR:
case GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR:
@@ -494,21 +522,27 @@ class instance_icecrown_citadel : public InstanceMapScript
return BloodCouncilControllerGUID;
case DATA_BLOOD_QUEEN_LANA_THEL:
return BloodQueenLanaThelGUID;
case DATA_SINDRAGOSA:
return SindragosaGUID;
case DATA_SPINESTALKER:
return SpinestalkerGUID;
case DATA_RIMEFANG:
return RimefangGUID;
case DATA_CROK_SCOURGEBANE:
return CrokScourgebaneGUID;
case DATA_CAPTAIN_ARNATH:
case DATA_CAPTAIN_BRANDON:
case DATA_CAPTAIN_GRONDEL:
case DATA_CAPTAIN_RUPERT:
return CrokCaptainGUIDs[type-DATA_CAPTAIN_ARNATH];
return CrokCaptainGUIDs[type - DATA_CAPTAIN_ARNATH];
case DATA_SISTER_SVALNA:
return SisterSvalnaGUID;
case DATA_VALITHRIA_DREAMWALKER:
return ValithriaDreamwalkerGUID;
case DATA_VALITHRIA_LICH_KING:
return ValithriaLichKingGUID;
case DATA_VALITHRIA_TRIGGER:
return ValithriaTriggerGUID;
case DATA_SINDRAGOSA:
return SindragosaGUID;
case DATA_SPINESTALKER:
return SpinestalkerGUID;
case DATA_RIMEFANG:
return RimefangGUID;
default:
break;
}
@@ -611,6 +645,8 @@ class instance_icecrown_citadel : public InstanceMapScript
}
break;
case DATA_VALITHRIA_DREAMWALKER:
if (state == DONE && sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[8].questId[instance->GetSpawnMode() & 1]))
instance->SummonCreature(NPC_VALITHRIA_DREAMWALKER_QUEST, ValithriaSpawnPos);
break;
case DATA_SINDRAGOSA:
HandleGameObject(FrostwingSigilGUID, state != DONE);
@@ -959,8 +995,8 @@ class instance_icecrown_citadel : public InstanceMapScript
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
saveStream << "I C " << GetBossSaveData() << ColdflameJetsState
<< " " << BloodQuickeningState << " " << BloodQuickeningMinutes;
saveStream << "I C " << GetBossSaveData() << HeroicAttempts << " "
<< ColdflameJetsState << " " << BloodQuickeningState << " " << BloodQuickeningMinutes;
OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str();
@@ -992,10 +1028,12 @@ class instance_icecrown_citadel : public InstanceMapScript
SetBossState(i, EncounterState(tmpState));
}
loadStream >> HeroicAttempts;
uint32 temp = 0;
loadStream >> temp;
ColdflameJetsState = temp ? DONE : NOT_STARTED;
temp = 0;
loadStream >> temp;
BloodQuickeningState = temp ? DONE : NOT_STARTED; // DONE means finished (not success/fail)
loadStream >> BloodQuickeningMinutes;
@@ -1057,6 +1095,9 @@ class instance_icecrown_citadel : public InstanceMapScript
uint64 CrokScourgebaneGUID;
uint64 CrokCaptainGUIDs[4];
uint64 SisterSvalnaGUID;
uint64 ValithriaDreamwalkerGUID;
uint64 ValithriaLichKingGUID;
uint64 ValithriaTriggerGUID;
uint64 SindragosaGUID;
uint64 SpinestalkerGUID;
uint64 RimefangGUID;
@@ -1067,7 +1108,7 @@ class instance_icecrown_citadel : public InstanceMapScript
uint32 SpinestalkerTrashCount;
uint32 RimefangTrashCount;
uint32 BloodQuickeningState;
uint16 HeroicAttempts;
uint32 HeroicAttempts;
uint16 BloodQuickeningMinutes;
bool IsBonedEligible;
bool IsOozeDanceEligible;