mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
Scripts/ICC: Strip out code related to raid weeklies and heroic retry counter since those got removed when Cataclysm launched (#22)
This commit is contained in:
16
sql/updates/world/custom/custom_2020_01_05_00_world.sql
Normal file
16
sql/updates/world/custom/custom_2020_01_05_00_world.sql
Normal file
@@ -0,0 +1,16 @@
|
||||
DELETE FROM `creature` WHERE `guid` IN (137743, 208786, 208778, 208777, 95035, 137744, 137745, 137788, 137787, 137786, 137785, 137784);
|
||||
DELETE FROM `creature_addon` WHERE `guid` IN (137743, 208786, 208778, 208777, 95035, 137744, 137745, 137788, 137787, 137786, 137785, 137784);
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-137743, -208786, -208778, -208777, -95035, -137744, -137745, -137788, -137787, -137786, -137785, -137784) AND `source_type`= 0;
|
||||
UPDATE `creature_template` SET `AIName`= '' WHERE `entry` IN (38471, 38491, 38492, 38490, 38494, 38501, 38551, 38558, 39123, 38557, 38589);
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN
|
||||
('spell_rotface_slime_spray',
|
||||
'spell_frost_giant_death_plague',
|
||||
'spell_icc_harvest_blight_specimen');
|
||||
|
||||
UPDATE `creature_template` SET `ScriptName`= '' WHERE `ScriptName` IN
|
||||
('npc_alchemist_adrianna',
|
||||
'npc_rotting_frost_giant',
|
||||
'npc_darnavan');
|
||||
|
||||
DELETE FROM `areatrigger_scripts` WHERE `ScriptName`= 'at_icc_start_blood_quickening';
|
||||
@@ -68,7 +68,6 @@ enum Spells
|
||||
SPELL_TWILIGHT_BLOODBOLT = 71446,
|
||||
SPELL_INCITE_TERROR = 73070,
|
||||
SPELL_BLOODBOLT_WHIRL = 71772,
|
||||
SPELL_ANNIHILATE = 71322,
|
||||
|
||||
// Blood Infusion
|
||||
SPELL_BLOOD_INFUSION_CREDIT = 72934
|
||||
@@ -123,12 +122,10 @@ enum Points
|
||||
POINT_CENTER = 1,
|
||||
POINT_AIR = 2,
|
||||
POINT_GROUND = 3,
|
||||
POINT_MINCHAR = 4,
|
||||
};
|
||||
|
||||
Position const centerPos = {4595.7090f, 2769.4190f, 400.6368f, 0.000000f};
|
||||
Position const airPos = {4595.7090f, 2769.4190f, 422.3893f, 0.000000f};
|
||||
Position const mincharPos = {4629.3711f, 2782.6089f, 424.6390f, 0.000000f};
|
||||
|
||||
bool IsVampire(Unit const* unit)
|
||||
{
|
||||
@@ -153,8 +150,6 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
void Initialize()
|
||||
{
|
||||
_offtankGUID.Clear();
|
||||
_creditBloodQuickening = false;
|
||||
_killMinchar = false;
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
@@ -190,10 +185,9 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
|
||||
DoCast(me, SPELL_SHROUD_OF_SORROW, true);
|
||||
DoCast(me, SPELL_FRENZIED_BLOODTHIRST_VISUAL, true);
|
||||
_creditBloodQuickening = instance->GetData(DATA_BLOOD_QUICKENING_STATE) == IN_PROGRESS;
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
Talk(SAY_DEATH);
|
||||
@@ -202,25 +196,6 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
DoCastAOE(SPELL_BLOOD_INFUSION_CREDIT, true);
|
||||
|
||||
CleanAuras();
|
||||
|
||||
if (!killer)
|
||||
return;
|
||||
|
||||
// Blah, credit the quest
|
||||
if (_creditBloodQuickening)
|
||||
{
|
||||
instance->SetData(DATA_BLOOD_QUICKENING_STATE, DONE);
|
||||
if (Player* player = killer->ToPlayer())
|
||||
player->RewardPlayerAndGroupAtEvent(Is25ManRaid() ? NPC_INFILTRATOR_MINCHAR_BQ_25 : NPC_INFILTRATOR_MINCHAR_BQ, player);
|
||||
if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f))
|
||||
{
|
||||
minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
||||
minchar->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
|
||||
minchar->SetCanFly(false);
|
||||
minchar->RemoveAllAuras();
|
||||
minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE / 3.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CleanAuras()
|
||||
@@ -237,40 +212,15 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(PRESENCE_OF_THE_DARKFALLEN);
|
||||
}
|
||||
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
if (action != ACTION_KILL_MINCHAR)
|
||||
return;
|
||||
|
||||
if (instance->GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == IN_PROGRESS)
|
||||
_killMinchar = true;
|
||||
else
|
||||
{
|
||||
me->SetDisableGravity(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
|
||||
me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos);
|
||||
}
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
if (!_EnterEvadeMode(why))
|
||||
return;
|
||||
|
||||
CleanAuras();
|
||||
if (_killMinchar)
|
||||
{
|
||||
_killMinchar = false;
|
||||
me->SetDisableGravity(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND);
|
||||
me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
me->AddUnitState(UNIT_STATE_EVADE);
|
||||
me->GetMotionMaster()->MoveTargetedHome();
|
||||
Reset();
|
||||
}
|
||||
me->AddUnitState(UNIT_STATE_EVADE);
|
||||
me->GetMotionMaster()->MoveTargetedHome();
|
||||
Reset();
|
||||
}
|
||||
|
||||
void JustReachedHome() override
|
||||
@@ -332,12 +282,6 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
AttackStart(victim);
|
||||
events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500, EVENT_GROUP_CANCELLABLE);
|
||||
break;
|
||||
case POINT_MINCHAR:
|
||||
DoCast(me, SPELL_ANNIHILATE, true);
|
||||
// already in evade mode
|
||||
me->GetMotionMaster()->MoveTargetedHome();
|
||||
Reset();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -519,8 +463,6 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
GuidSet _vampires;
|
||||
GuidSet _bloodboltedPlayers;
|
||||
ObjectGuid _offtankGUID;
|
||||
bool _creditBloodQuickening;
|
||||
bool _killMinchar;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
|
||||
@@ -459,24 +459,6 @@ class spell_festergut_blighted_spores : public SpellScriptLoader
|
||||
if (InstanceScript* instance = GetTarget()->GetInstanceScript())
|
||||
if (Creature* festergut = ObjectAccessor::GetCreature(*GetTarget(), instance->GetGuidData(DATA_FESTERGUT)))
|
||||
festergut->AI()->SetData(DATA_INOCULATED_STACK, GetStackAmount());
|
||||
|
||||
HandleResidue();
|
||||
}
|
||||
|
||||
void HandleResidue()
|
||||
{
|
||||
Player* target = GetUnitOwner()->ToPlayer();
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
if (target->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE))
|
||||
return;
|
||||
|
||||
uint32 questId = target->GetMap()->Is25ManRaid() ? QUEST_RESIDUE_RENDEZVOUS_25 : QUEST_RESIDUE_RENDEZVOUS_10;
|
||||
if (target->GetQuestStatus(questId) != QUEST_STATUS_INCOMPLETE)
|
||||
return;
|
||||
|
||||
target->CastSpell(target, SPELL_ORANGE_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
|
||||
@@ -48,10 +48,6 @@ enum ScriptTexts
|
||||
SAY_KILL = 14,
|
||||
SAY_BERSERK = 15,
|
||||
SAY_DEATH = 16,
|
||||
|
||||
// Darnavan
|
||||
SAY_DARNAVAN_AGGRO = 0,
|
||||
SAY_DARNAVAN_RESCUED = 1,
|
||||
};
|
||||
|
||||
enum Spells
|
||||
@@ -111,14 +107,6 @@ enum Spells
|
||||
SPELL_VENGEFUL_BLAST_25N = 72010,
|
||||
SPELL_VENGEFUL_BLAST_10H = 72011,
|
||||
SPELL_VENGEFUL_BLAST_25H = 72012,
|
||||
|
||||
// Darnavan
|
||||
SPELL_BLADESTORM = 65947,
|
||||
SPELL_CHARGE = 65927,
|
||||
SPELL_INTIMIDATING_SHOUT = 65930,
|
||||
SPELL_MORTAL_STRIKE = 65926,
|
||||
SPELL_SHATTERING_THROW = 65940,
|
||||
SPELL_SUNDER_ARMOR = 65936,
|
||||
};
|
||||
|
||||
enum EventTypes
|
||||
@@ -147,26 +135,11 @@ enum Groups
|
||||
GROUP_TWO = 2
|
||||
};
|
||||
|
||||
enum DeprogrammingData
|
||||
{
|
||||
NPC_DARNAVAN_10 = 38472,
|
||||
NPC_DARNAVAN_25 = 38485,
|
||||
NPC_DARNAVAN_CREDIT_10 = 39091,
|
||||
NPC_DARNAVAN_CREDIT_25 = 39092,
|
||||
|
||||
ACTION_COMPLETE_QUEST = -384720,
|
||||
POINT_DESPAWN = 384721,
|
||||
};
|
||||
|
||||
enum Actions
|
||||
{
|
||||
ACTION_START_INTRO
|
||||
};
|
||||
|
||||
#define NPC_DARNAVAN RAID_MODE<uint32>(NPC_DARNAVAN_10, NPC_DARNAVAN_25, NPC_DARNAVAN_10, NPC_DARNAVAN_25)
|
||||
#define NPC_DARNAVAN_CREDIT RAID_MODE<uint32>(NPC_DARNAVAN_CREDIT_10, NPC_DARNAVAN_CREDIT_25, NPC_DARNAVAN_CREDIT_10, NPC_DARNAVAN_CREDIT_25)
|
||||
#define QUEST_DEPROGRAMMING RAID_MODE<uint32>(QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25, QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25)
|
||||
|
||||
uint32 const SummonEntries[2] = {NPC_CULT_FANATIC, NPC_CULT_ADHERENT};
|
||||
|
||||
Position const SummonPositions[7] =
|
||||
@@ -180,21 +153,6 @@ Position const SummonPositions[7] =
|
||||
{-524.2480f, 2211.920f, 62.90960f, 3.141592f}, // 7 Upper (Random Cultist)
|
||||
};
|
||||
|
||||
class DarnavanMoveEvent : public BasicEvent
|
||||
{
|
||||
public:
|
||||
DarnavanMoveEvent(Creature& darnavan) : _darnavan(darnavan) { }
|
||||
|
||||
bool Execute(uint64 /*time*/, uint32 /*diff*/) override
|
||||
{
|
||||
_darnavan.GetMotionMaster()->MovePoint(POINT_DESPAWN, SummonPositions[6]);
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
Creature& _darnavan;
|
||||
};
|
||||
|
||||
class boss_lady_deathwhisper : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@@ -343,7 +301,7 @@ class boss_lady_deathwhisper : public CreatureScript
|
||||
instance->SetBossState(DATA_LADY_DEATHWHISPER, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
@@ -357,35 +315,6 @@ class boss_lady_deathwhisper : public CreatureScript
|
||||
if (livingAddEntries.size() >= 5)
|
||||
instance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_FULL_HOUSE, 0, me);
|
||||
|
||||
if (Creature* darnavan = ObjectAccessor::GetCreature(*me, _darnavanGUID))
|
||||
{
|
||||
if (darnavan->IsAlive())
|
||||
{
|
||||
darnavan->SetFaction(FACTION_FRIENDLY);
|
||||
darnavan->CombatStop(true);
|
||||
darnavan->GetMotionMaster()->MoveIdle();
|
||||
darnavan->SetReactState(REACT_PASSIVE);
|
||||
darnavan->m_Events.AddEvent(new DarnavanMoveEvent(*darnavan), darnavan->m_Events.CalculateTime(10000));
|
||||
darnavan->AI()->Talk(SAY_DARNAVAN_RESCUED);
|
||||
|
||||
if (!killer)
|
||||
return;
|
||||
|
||||
if (Player* owner = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
{
|
||||
if (Group* group = owner->GetGroup())
|
||||
{
|
||||
for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
|
||||
if (Player* member = itr->GetSource())
|
||||
if (member->IsInMap(owner))
|
||||
member->KilledMonsterCredit(NPC_DARNAVAN_CREDIT);
|
||||
}
|
||||
else
|
||||
owner->KilledMonsterCredit(NPC_DARNAVAN_CREDIT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_JustDied();
|
||||
}
|
||||
|
||||
@@ -467,11 +396,6 @@ class boss_lady_deathwhisper : public CreatureScript
|
||||
{
|
||||
switch (summon->GetEntry())
|
||||
{
|
||||
case NPC_DARNAVAN_10:
|
||||
case NPC_DARNAVAN_25:
|
||||
_darnavanGUID = summon->GetGUID();
|
||||
summon->AI()->AttackStart(SelectTarget(SELECT_TARGET_RANDOM));
|
||||
return;
|
||||
case NPC_VENGEFUL_SHADE:
|
||||
if (_nextVengefulShadeTargetGUID.empty())
|
||||
break;
|
||||
@@ -508,12 +432,7 @@ class boss_lady_deathwhisper : public CreatureScript
|
||||
uint8 addIndex = _waveCounter & 1;
|
||||
uint8 addIndexOther = uint8(addIndex ^ 1);
|
||||
|
||||
// Summon first add, replace it with Darnavan if weekly quest is active
|
||||
if (_waveCounter || !sPoolMgr->IsSpawnedObject<Quest>(QUEST_DEPROGRAMMING))
|
||||
Summon(SummonEntries[addIndex], SummonPositions[addIndex * 3]);
|
||||
else
|
||||
Summon(NPC_DARNAVAN, SummonPositions[addIndex * 3]);
|
||||
|
||||
Summon(SummonEntries[addIndex], SummonPositions[addIndex * 3]);
|
||||
Summon(SummonEntries[addIndexOther], SummonPositions[addIndex * 3 + 1]);
|
||||
Summon(SummonEntries[addIndex], SummonPositions[addIndex * 3 + 2]);
|
||||
if (Is25ManRaid())
|
||||
@@ -860,138 +779,6 @@ class npc_vengeful_shade : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
class npc_darnavan : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_darnavan() : CreatureScript("npc_darnavan") { }
|
||||
|
||||
struct npc_darnavanAI : public ScriptedAI
|
||||
{
|
||||
npc_darnavanAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
_canCharge = true;
|
||||
_canShatter = true;
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_BLADESTORM, Seconds(10));
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_INTIMIDATING_SHOUT, Seconds(20), Seconds(25));
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_MORTAL_STRIKE, Seconds(25), Seconds(30));
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_SUNDER_ARMOR, Seconds(5), Seconds(8));
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
_events.Reset();
|
||||
|
||||
if (!killer)
|
||||
return;
|
||||
|
||||
if (Player* owner = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||
{
|
||||
if (Group* group = owner->GetGroup())
|
||||
{
|
||||
for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
|
||||
if (Player* member = itr->GetSource())
|
||||
if (member->IsInMap(owner))
|
||||
member->FailQuest(QUEST_DEPROGRAMMING);
|
||||
}
|
||||
else
|
||||
owner->FailQuest(QUEST_DEPROGRAMMING);
|
||||
}
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 id) override
|
||||
{
|
||||
if (type != POINT_MOTION_TYPE || id != POINT_DESPAWN)
|
||||
return;
|
||||
|
||||
me->DespawnOrUnsummon();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*victim*/) override
|
||||
{
|
||||
Talk(SAY_DARNAVAN_AGGRO);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
if (_canShatter && me->GetVictim() && me->EnsureVictim()->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL))
|
||||
{
|
||||
DoCastVictim(SPELL_SHATTERING_THROW);
|
||||
_canShatter = false;
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_SHATTERING_THROW, Seconds(30));
|
||||
return;
|
||||
}
|
||||
|
||||
if (_canCharge && !me->IsWithinMeleeRange(me->GetVictim()))
|
||||
{
|
||||
DoCastVictim(SPELL_CHARGE);
|
||||
_canCharge = false;
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_CHARGE, Seconds(20));
|
||||
return;
|
||||
}
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_DARNAVAN_BLADESTORM:
|
||||
DoCast(SPELL_BLADESTORM);
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_BLADESTORM, Seconds(90), Seconds(100));
|
||||
break;
|
||||
case EVENT_DARNAVAN_CHARGE:
|
||||
_canCharge = true;
|
||||
break;
|
||||
case EVENT_DARNAVAN_INTIMIDATING_SHOUT:
|
||||
DoCast(SPELL_INTIMIDATING_SHOUT);
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_INTIMIDATING_SHOUT, Seconds(90), Minutes(2));
|
||||
break;
|
||||
case EVENT_DARNAVAN_MORTAL_STRIKE:
|
||||
DoCastVictim(SPELL_MORTAL_STRIKE);
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_MORTAL_STRIKE, Seconds(15), Seconds(30));
|
||||
break;
|
||||
case EVENT_DARNAVAN_SHATTERING_THROW:
|
||||
_canShatter = true;
|
||||
break;
|
||||
case EVENT_DARNAVAN_SUNDER_ARMOR:
|
||||
DoCastVictim(SPELL_SUNDER_ARMOR);
|
||||
_events.ScheduleEvent(EVENT_DARNAVAN_SUNDER_ARMOR, Seconds(3), Seconds(7));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
bool _canCharge;
|
||||
bool _canShatter;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetIcecrownCitadelAI<npc_darnavanAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_deathwhisper_mana_barrier : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -1109,7 +896,6 @@ void AddSC_boss_lady_deathwhisper()
|
||||
new npc_cult_fanatic();
|
||||
new npc_cult_adherent();
|
||||
new npc_vengeful_shade();
|
||||
new npc_darnavan();
|
||||
new spell_deathwhisper_mana_barrier();
|
||||
new spell_deathwhisper_dominated_mind();
|
||||
new spell_deathwhisper_summon_spirits();
|
||||
|
||||
@@ -872,43 +872,6 @@ class spell_rotface_vile_gas_trigger : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_rotface_slime_spray : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rotface_slime_spray() : SpellScriptLoader("spell_rotface_slime_spray") { }
|
||||
|
||||
class spell_rotface_slime_spray_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_rotface_slime_spray_SpellScript);
|
||||
|
||||
void HandleResidue()
|
||||
{
|
||||
Player* target = GetHitPlayer();
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
if (target->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
|
||||
return;
|
||||
|
||||
uint32 questId = target->GetMap()->Is25ManRaid() ? QUEST_RESIDUE_RENDEZVOUS_25 : QUEST_RESIDUE_RENDEZVOUS_10;
|
||||
if (target->GetQuestStatus(questId) != QUEST_STATUS_INCOMPLETE)
|
||||
return;
|
||||
|
||||
target->CastSpell(target, SPELL_GREEN_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnHit += SpellHitFn(spell_rotface_slime_spray_SpellScript::HandleResidue);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_rotface_slime_spray_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_rotface()
|
||||
{
|
||||
new boss_rotface();
|
||||
@@ -924,5 +887,4 @@ void AddSC_boss_rotface()
|
||||
new spell_rotface_unstable_ooze_explosion();
|
||||
new spell_rotface_unstable_ooze_explosion_suicide();
|
||||
new spell_rotface_vile_gas_trigger();
|
||||
new spell_rotface_slime_spray();
|
||||
}
|
||||
|
||||
@@ -1638,9 +1638,6 @@ class at_sindragosa_lair : public AreaTriggerScript
|
||||
|
||||
if (!instance->GetData(DATA_SINDRAGOSA_FROSTWYRMS) && !instance->GetGuidData(DATA_SINDRAGOSA) && instance->GetBossState(DATA_SINDRAGOSA) != DONE)
|
||||
{
|
||||
if (player->GetMap()->IsHeroic() && !instance->GetData(DATA_HEROIC_ATTEMPTS))
|
||||
return true;
|
||||
|
||||
player->GetMap()->LoadGrid(SindragosaSpawnPos.GetPositionX(), SindragosaSpawnPos.GetPositionY());
|
||||
if (Creature* sindragosa = player->GetMap()->SummonCreature(NPC_SINDRAGOSA, SindragosaSpawnPos))
|
||||
sindragosa->AI()->DoAction(ACTION_START_FROSTWYRM);
|
||||
|
||||
@@ -151,8 +151,6 @@ enum Misc
|
||||
DATA_SUPPRESSERS_COUNT = 4
|
||||
};
|
||||
|
||||
Position const ValithriaSpawnPos = {4210.813f, 2484.443f, 364.9558f, 0.01745329f};
|
||||
|
||||
class RisenArchmageCheck
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -29,13 +29,6 @@
|
||||
#include "TemporarySummon.h"
|
||||
#include "VehicleDefines.h"
|
||||
|
||||
// Weekly quest support
|
||||
// * Deprogramming (DONE)
|
||||
// * Securing the Ramparts (DONE)
|
||||
// * Residue Rendezvous (DONE)
|
||||
// * Blood Quickening (DONE)
|
||||
// * Respite for a Tormented Soul
|
||||
|
||||
enum ICCTexts
|
||||
{
|
||||
// Highlord Tirion Fordring (at Light's Hammer)
|
||||
@@ -70,9 +63,6 @@ enum ICCTexts
|
||||
// Deathbound Ward
|
||||
SAY_TRAP_ACTIVATE = 0,
|
||||
|
||||
// Rotting Frost Giant
|
||||
EMOTE_DEATH_PLAGUE_WARNING = 0,
|
||||
|
||||
// Sister Svalna
|
||||
SAY_SVALNA_KILL_CAPTAIN = 1, // happens when she kills a captain
|
||||
SAY_SVALNA_KILL = 4,
|
||||
@@ -103,21 +93,9 @@ enum ICCTexts
|
||||
|
||||
enum ICCSpells
|
||||
{
|
||||
// Rotting Frost Giant
|
||||
SPELL_DEATH_PLAGUE = 72879,
|
||||
SPELL_DEATH_PLAGUE_AURA = 72865,
|
||||
SPELL_RECENTLY_INFECTED = 72884,
|
||||
SPELL_DEATH_PLAGUE_KILL = 72867,
|
||||
SPELL_STOMP = 64652,
|
||||
SPELL_ARCTIC_BREATH = 72848,
|
||||
|
||||
// Frost Freeze Trap
|
||||
SPELL_COLDFLAME_JETS = 70460,
|
||||
|
||||
// Alchemist Adrianna
|
||||
SPELL_HARVEST_BLIGHT_SPECIMEN = 72155,
|
||||
SPELL_HARVEST_BLIGHT_SPECIMEN25 = 72162,
|
||||
|
||||
// Crok Scourgebane
|
||||
SPELL_ICEBOUND_ARMOR = 70714,
|
||||
SPELL_SCOURGE_STRIKE = 71488,
|
||||
@@ -601,78 +579,6 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
class npc_rotting_frost_giant : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_rotting_frost_giant() : CreatureScript("npc_rotting_frost_giant") { }
|
||||
|
||||
struct npc_rotting_frost_giantAI : public ScriptedAI
|
||||
{
|
||||
npc_rotting_frost_giantAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
_events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15000);
|
||||
_events.ScheduleEvent(EVENT_STOMP, urand(5000, 8000));
|
||||
_events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(10000, 15000));
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_events.Reset();
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_DEATH_PLAGUE:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true))
|
||||
{
|
||||
Talk(EMOTE_DEATH_PLAGUE_WARNING, target);
|
||||
DoCast(target, SPELL_DEATH_PLAGUE);
|
||||
}
|
||||
_events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15000);
|
||||
break;
|
||||
case EVENT_STOMP:
|
||||
DoCastVictim(SPELL_STOMP);
|
||||
_events.ScheduleEvent(EVENT_STOMP, urand(15000, 18000));
|
||||
break;
|
||||
case EVENT_ARCTIC_BREATH:
|
||||
DoCastVictim(SPELL_ARCTIC_BREATH);
|
||||
_events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(26000, 33000));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetIcecrownCitadelAI<npc_rotting_frost_giantAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class npc_frost_freeze_trap : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@@ -719,30 +625,6 @@ class npc_frost_freeze_trap : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
class npc_alchemist_adrianna : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_alchemist_adrianna() : CreatureScript("npc_alchemist_adrianna") { }
|
||||
|
||||
struct npc_alchemist_adriannaAI : public ScriptedAI
|
||||
{
|
||||
npc_alchemist_adriannaAI(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
|
||||
{
|
||||
if (!me->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN) && !me->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN25))
|
||||
if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
|
||||
me->CastSpell(me, SPELL_HARVEST_BLIGHT_SPECIMEN, false);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetIcecrownCitadelAI<npc_alchemist_adriannaAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class boss_sister_svalna : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@@ -1888,118 +1770,6 @@ class spell_icc_sprit_alarm : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class DeathPlagueTargetSelector
|
||||
{
|
||||
public:
|
||||
explicit DeathPlagueTargetSelector(Unit* caster) : _caster(caster) { }
|
||||
|
||||
bool operator()(WorldObject* object) const
|
||||
{
|
||||
if (object == _caster)
|
||||
return true;
|
||||
|
||||
if (object->GetTypeId() != TYPEID_PLAYER)
|
||||
return true;
|
||||
|
||||
if (object->ToUnit()->HasAura(SPELL_RECENTLY_INFECTED) || object->ToUnit()->HasAura(SPELL_DEATH_PLAGUE_AURA))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
Unit* _caster;
|
||||
};
|
||||
|
||||
class spell_frost_giant_death_plague : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_frost_giant_death_plague() : SpellScriptLoader("spell_frost_giant_death_plague") { }
|
||||
|
||||
class spell_frost_giant_death_plague_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_frost_giant_death_plague_SpellScript);
|
||||
|
||||
// First effect
|
||||
void CountTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.remove(GetCaster());
|
||||
_failed = targets.empty();
|
||||
}
|
||||
|
||||
// Second effect
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
// Select valid targets for jump
|
||||
targets.remove_if(DeathPlagueTargetSelector(GetCaster()));
|
||||
if (!targets.empty())
|
||||
{
|
||||
WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
|
||||
targets.clear();
|
||||
targets.push_back(target);
|
||||
}
|
||||
|
||||
targets.push_back(GetCaster());
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
if (GetHitUnit() != GetCaster())
|
||||
GetCaster()->CastSpell(GetHitUnit(), SPELL_DEATH_PLAGUE_AURA, true);
|
||||
else if (_failed)
|
||||
GetCaster()->CastSpell(GetCaster(), SPELL_DEATH_PLAGUE_KILL, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_frost_giant_death_plague_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_frost_giant_death_plague_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_frost_giant_death_plague_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
|
||||
bool _failed = false;
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_frost_giant_death_plague_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_icc_harvest_blight_specimen : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_icc_harvest_blight_specimen() : SpellScriptLoader("spell_icc_harvest_blight_specimen") { }
|
||||
|
||||
class spell_icc_harvest_blight_specimen_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_icc_harvest_blight_specimen_SpellScript);
|
||||
|
||||
void HandleScript(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue()));
|
||||
}
|
||||
|
||||
void HandleQuestComplete(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue()));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleQuestComplete, EFFECT_1, SPELL_EFFECT_QUEST_COMPLETE);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_icc_harvest_blight_specimen_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class AliveCheck
|
||||
{
|
||||
public:
|
||||
@@ -2203,20 +1973,6 @@ class at_icc_shutdown_traps : public AreaTriggerScript
|
||||
}
|
||||
};
|
||||
|
||||
class at_icc_start_blood_quickening : public AreaTriggerScript
|
||||
{
|
||||
public:
|
||||
at_icc_start_blood_quickening() : AreaTriggerScript("at_icc_start_blood_quickening") { }
|
||||
|
||||
bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
|
||||
{
|
||||
if (InstanceScript* instance = player->GetInstanceScript())
|
||||
if (instance->GetData(DATA_BLOOD_QUICKENING_STATE) == NOT_STARTED)
|
||||
instance->SetData(DATA_BLOOD_QUICKENING_STATE, IN_PROGRESS);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class at_icc_start_frostwing_gauntlet : public AreaTriggerScript
|
||||
{
|
||||
public:
|
||||
@@ -2234,9 +1990,7 @@ class at_icc_start_frostwing_gauntlet : public AreaTriggerScript
|
||||
void AddSC_icecrown_citadel()
|
||||
{
|
||||
new npc_highlord_tirion_fordring_lh();
|
||||
new npc_rotting_frost_giant();
|
||||
new npc_frost_freeze_trap();
|
||||
new npc_alchemist_adrianna();
|
||||
new boss_sister_svalna();
|
||||
new npc_crok_scourgebane();
|
||||
new npc_captain_arnath();
|
||||
@@ -2248,14 +2002,11 @@ void AddSC_icecrown_citadel()
|
||||
new npc_arthas_teleport_visual();
|
||||
new spell_icc_stoneform();
|
||||
new spell_icc_sprit_alarm();
|
||||
new spell_frost_giant_death_plague();
|
||||
new spell_icc_harvest_blight_specimen();
|
||||
new spell_trigger_spell_from_caster("spell_svalna_caress_of_death", SPELL_IMPALING_SPEAR_KILL);
|
||||
new spell_svalna_revive_champion();
|
||||
new spell_svalna_remove_spear();
|
||||
new spell_icc_soul_missile();
|
||||
new at_icc_saurfang_portal();
|
||||
new at_icc_shutdown_traps();
|
||||
new at_icc_start_blood_quickening();
|
||||
new at_icc_start_frostwing_gauntlet();
|
||||
}
|
||||
|
||||
@@ -29,10 +29,7 @@ enum TriggerCastFlags : uint32;
|
||||
|
||||
uint32 const EncounterCount = 13;
|
||||
uint32 const WeeklyNPCs = 9;
|
||||
uint32 const MaxHeroicAttempts = 50;
|
||||
|
||||
// Defined in boss_valithria_dreamwalker.cpp
|
||||
extern Position const ValithriaSpawnPos;
|
||||
// Defined in boss_sindragosa.cpp
|
||||
extern Position const SindragosaSpawnPos;
|
||||
// Defined in boss_the_lich_king.cpp
|
||||
@@ -106,8 +103,6 @@ enum ICDataTypes
|
||||
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,
|
||||
@@ -153,19 +148,6 @@ enum ICCreaturesIds
|
||||
NPC_UTHER_THE_LIGHTBRINGER_QUEST = 38608,
|
||||
NPC_LADY_SYLVANAS_WINDRUNNER_QUEST = 38609,
|
||||
|
||||
// Weekly quests
|
||||
NPC_INFILTRATOR_MINCHAR = 38471,
|
||||
NPC_KOR_KRON_LIEUTENANT = 38491,
|
||||
NPC_SKYBREAKER_LIEUTENANT = 38492,
|
||||
NPC_ROTTING_FROST_GIANT_10 = 38490,
|
||||
NPC_ROTTING_FROST_GIANT_25 = 38494,
|
||||
NPC_ALCHEMIST_ADRIANNA = 38501,
|
||||
NPC_ALRIN_THE_AGILE = 38551,
|
||||
NPC_INFILTRATOR_MINCHAR_BQ = 38558,
|
||||
NPC_INFILTRATOR_MINCHAR_BQ_25 = 39123,
|
||||
NPC_MINCHAR_BEAM_STALKER = 38557,
|
||||
NPC_VALITHRIA_DREAMWALKER_QUEST = 38589,
|
||||
|
||||
// Lord Marrowgar
|
||||
NPC_LORD_MARROWGAR = 36612,
|
||||
NPC_COLDFLAME = 36672,
|
||||
@@ -487,9 +469,6 @@ enum ICSharedActions
|
||||
ACTION_ROTFACE_DEATH = -366272,
|
||||
ACTION_CHANGE_PHASE = -366780,
|
||||
|
||||
// Blood-Queen Lana'thel
|
||||
ACTION_KILL_MINCHAR = -379550,
|
||||
|
||||
// Frostwing Halls gauntlet event
|
||||
ACTION_VRYKUL_DEATH = 37129,
|
||||
|
||||
@@ -502,29 +481,6 @@ enum ICSharedActions
|
||||
ACTION_FROSTMOURNE_INTRO = -36823
|
||||
};
|
||||
|
||||
enum ICWeekliesICC
|
||||
{
|
||||
QUEST_DEPROGRAMMING_10 = 24869,
|
||||
QUEST_DEPROGRAMMING_25 = 24875,
|
||||
QUEST_SECURING_THE_RAMPARTS_10 = 24870,
|
||||
QUEST_SECURING_THE_RAMPARTS_25 = 24877,
|
||||
QUEST_RESIDUE_RENDEZVOUS_10 = 24873,
|
||||
QUEST_RESIDUE_RENDEZVOUS_25 = 24878,
|
||||
QUEST_BLOOD_QUICKENING_10 = 24874,
|
||||
QUEST_BLOOD_QUICKENING_25 = 24879,
|
||||
QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_10 = 24872,
|
||||
QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_25 = 24880
|
||||
};
|
||||
|
||||
enum ICWorldStatesICC
|
||||
{
|
||||
WORLDSTATE_SHOW_TIMER = 4903,
|
||||
WORLDSTATE_EXECUTION_TIME = 4904,
|
||||
WORLDSTATE_SHOW_ATTEMPTS = 4940,
|
||||
WORLDSTATE_ATTEMPTS_REMAINING = 4941,
|
||||
WORLDSTATE_ATTEMPTS_MAX = 4942
|
||||
};
|
||||
|
||||
enum ICAreaIds
|
||||
{
|
||||
AREA_ICECROWN_CITADEL = 4812
|
||||
|
||||
@@ -44,7 +44,6 @@ enum EventIds
|
||||
|
||||
enum TimedEvents
|
||||
{
|
||||
EVENT_UPDATE_EXECUTION_TIME = 1,
|
||||
EVENT_QUAKE_SHATTER = 2,
|
||||
EVENT_REBUILD_PLATFORM = 3,
|
||||
EVENT_RESPAWN_GUNSHIP = 4
|
||||
@@ -98,27 +97,6 @@ DoorData const doorData[] =
|
||||
{0, 0, DOOR_TYPE_ROOM } // END
|
||||
};
|
||||
|
||||
// this doesnt have to only store questgivers, also can be used for related quest spawns
|
||||
struct WeeklyQuest
|
||||
{
|
||||
uint32 creatureEntry;
|
||||
uint32 questId[2]; // 10 and 25 man versions
|
||||
};
|
||||
|
||||
// when changing the content, remember to update SetData, DATA_BLOOD_QUICKENING_STATE case for NPC_ALRIN_THE_AGILE index
|
||||
WeeklyQuest const 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
|
||||
{NPC_ROTTING_FROST_GIANT_10, {QUEST_SECURING_THE_RAMPARTS_10, QUEST_SECURING_THE_RAMPARTS_25 }}, // Securing the Ramparts
|
||||
{NPC_ROTTING_FROST_GIANT_25, {QUEST_SECURING_THE_RAMPARTS_10, QUEST_SECURING_THE_RAMPARTS_25 }}, // Securing the Ramparts
|
||||
{NPC_ALCHEMIST_ADRIANNA, {QUEST_RESIDUE_RENDEZVOUS_10, QUEST_RESIDUE_RENDEZVOUS_25 }}, // Residue Rendezvous
|
||||
{NPC_ALRIN_THE_AGILE, {QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 }}, // Blood Quickening
|
||||
{NPC_INFILTRATOR_MINCHAR_BQ, {QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 }}, // Blood Quickening
|
||||
{NPC_MINCHAR_BEAM_STALKER, {QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 }}, // Blood Quickening
|
||||
{NPC_VALITHRIA_DREAMWALKER_QUEST, {QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_10, QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_25}} // Respite for a Tormented Soul
|
||||
};
|
||||
|
||||
// NPCs spawned at Light's Hammer on Lich King dead
|
||||
Position const JainaSpawnPos = { -48.65278f, 2211.026f, 27.98586f, 3.124139f };
|
||||
Position const MuradinSpawnPos = { -47.34549f, 2208.087f, 27.98586f, 3.106686f };
|
||||
@@ -139,15 +117,12 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
LoadBossBoundaries(boundaries);
|
||||
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;
|
||||
LadyDeathwhisperElevatorTimer = 3000;
|
||||
@@ -168,15 +143,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
}
|
||||
}
|
||||
|
||||
void FillInitialWorldStates(WorldPacket& data) override
|
||||
{
|
||||
data << uint32(WORLDSTATE_SHOW_TIMER) << uint32(BloodQuickeningState == IN_PROGRESS);
|
||||
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(MaxHeroicAttempts);
|
||||
}
|
||||
|
||||
void OnPlayerEnter(Player* player) override
|
||||
{
|
||||
if (!TeamInInstance)
|
||||
@@ -318,29 +284,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
uint32 entry = data->id;
|
||||
switch (entry)
|
||||
{
|
||||
case NPC_INFILTRATOR_MINCHAR:
|
||||
case NPC_KOR_KRON_LIEUTENANT:
|
||||
case NPC_ALCHEMIST_ADRIANNA:
|
||||
case NPC_ALRIN_THE_AGILE:
|
||||
case NPC_INFILTRATOR_MINCHAR_BQ:
|
||||
case NPC_MINCHAR_BEAM_STALKER:
|
||||
case NPC_VALITHRIA_DREAMWALKER_QUEST:
|
||||
{
|
||||
for (uint8 questIndex = 0; questIndex < WeeklyNPCs; ++questIndex)
|
||||
{
|
||||
if (WeeklyQuestData[questIndex].creatureEntry == entry)
|
||||
{
|
||||
uint8 diffIndex = uint8(instance->GetSpawnMode() & 1);
|
||||
if (!sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[questIndex].questId[diffIndex]))
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (entry == NPC_KOR_KRON_LIEUTENANT && TeamInInstance == ALLIANCE)
|
||||
return NPC_SKYBREAKER_LIEUTENANT;
|
||||
break;
|
||||
}
|
||||
case NPC_HORDE_GUNSHIP_CANNON:
|
||||
case NPC_ORGRIMS_HAMMER_CREW:
|
||||
case NPC_SKY_REAVER_KORM_BLACKSCAR:
|
||||
@@ -454,9 +397,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case NPC_RIMEFANG:
|
||||
case NPC_SPINESTALKER:
|
||||
{
|
||||
if (instance->IsHeroic() && !HeroicAttempts)
|
||||
return;
|
||||
|
||||
if (GetBossState(DATA_SINDRAGOSA) == DONE)
|
||||
return;
|
||||
|
||||
@@ -712,10 +652,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
return UpperSpireTeleporterActiveState;
|
||||
case DATA_TEAM_IN_INSTANCE:
|
||||
return TeamInInstance;
|
||||
case DATA_BLOOD_QUICKENING_STATE:
|
||||
return BloodQuickeningState;
|
||||
case DATA_HEROIC_ATTEMPTS:
|
||||
return HeroicAttempts;
|
||||
case DATA_BLOOD_PRINCE_COUNCIL_INTRO:
|
||||
return BloodPrinceIntro;
|
||||
case DATA_SINDRAGOSA_INTRO:
|
||||
@@ -916,39 +852,15 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
HandleGameObject(PlagueSigilGUID, state != DONE);
|
||||
if (state == DONE)
|
||||
CheckLichKingAvailability();
|
||||
if (instance->IsHeroic())
|
||||
{
|
||||
if (state == FAIL && HeroicAttempts)
|
||||
{
|
||||
--HeroicAttempts;
|
||||
DoUpdateWorldState(WORLDSTATE_ATTEMPTS_REMAINING, HeroicAttempts);
|
||||
if (!HeroicAttempts)
|
||||
if (Creature* putricide = instance->GetCreature(ProfessorPutricideGUID))
|
||||
putricide->DespawnOrUnsummon();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DATA_BLOOD_QUEEN_LANA_THEL:
|
||||
HandleGameObject(BloodwingSigilGUID, state != DONE);
|
||||
if (state == DONE)
|
||||
CheckLichKingAvailability();
|
||||
if (instance->IsHeroic())
|
||||
{
|
||||
if (state == FAIL && HeroicAttempts)
|
||||
{
|
||||
--HeroicAttempts;
|
||||
DoUpdateWorldState(WORLDSTATE_ATTEMPTS_REMAINING, HeroicAttempts);
|
||||
if (!HeroicAttempts)
|
||||
if (Creature* bq = instance->GetCreature(BloodQueenLanaThelGUID))
|
||||
bq->DespawnOrUnsummon();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DATA_VALITHRIA_DREAMWALKER:
|
||||
if (state == DONE)
|
||||
{
|
||||
if (sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[8].questId[instance->GetSpawnMode() & 1]))
|
||||
instance->SummonCreature(NPC_VALITHRIA_DREAMWALKER_QUEST, ValithriaSpawnPos);
|
||||
if (GameObject* teleporter = instance->GetGameObject(TeleporterSindragosaGUID))
|
||||
SetTeleporterState(teleporter, true);
|
||||
}
|
||||
@@ -957,17 +869,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
HandleGameObject(FrostwingSigilGUID, state != DONE);
|
||||
if (state == DONE)
|
||||
CheckLichKingAvailability();
|
||||
if (instance->IsHeroic())
|
||||
{
|
||||
if (state == FAIL && HeroicAttempts)
|
||||
{
|
||||
--HeroicAttempts;
|
||||
DoUpdateWorldState(WORLDSTATE_ATTEMPTS_REMAINING, HeroicAttempts);
|
||||
if (!HeroicAttempts)
|
||||
if (Creature* sindra = instance->GetCreature(SindragosaGUID))
|
||||
sindra->DespawnOrUnsummon();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DATA_THE_LICH_KING:
|
||||
{
|
||||
@@ -979,18 +880,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID))
|
||||
platform->SetFarVisible(state == IN_PROGRESS);
|
||||
|
||||
if (instance->IsHeroic())
|
||||
{
|
||||
if (state == FAIL && HeroicAttempts)
|
||||
{
|
||||
--HeroicAttempts;
|
||||
DoUpdateWorldState(WORLDSTATE_ATTEMPTS_REMAINING, HeroicAttempts);
|
||||
if (!HeroicAttempts)
|
||||
if (Creature* theLichKing = instance->GetCreature(TheLichKingGUID))
|
||||
theLichKing->DespawnOrUnsummon();
|
||||
}
|
||||
}
|
||||
|
||||
if (state == DONE)
|
||||
{
|
||||
if (GameObject* bolvar = instance->GetGameObject(FrozenBolvarGUID))
|
||||
@@ -1055,37 +944,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
if (ColdflameJetsState == DONE)
|
||||
SaveToDB();
|
||||
break;
|
||||
case DATA_BLOOD_QUICKENING_STATE:
|
||||
{
|
||||
// skip if nothing changes
|
||||
if (BloodQuickeningState == data)
|
||||
break;
|
||||
|
||||
// 5 is the index of Blood Quickening
|
||||
if (!sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[5].questId[instance->GetSpawnMode() & 1]))
|
||||
break;
|
||||
|
||||
switch (data)
|
||||
{
|
||||
case IN_PROGRESS:
|
||||
Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 60000);
|
||||
BloodQuickeningMinutes = 30;
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1);
|
||||
DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes);
|
||||
break;
|
||||
case DONE:
|
||||
Events.CancelEvent(EVENT_UPDATE_EXECUTION_TIME);
|
||||
BloodQuickeningMinutes = 0;
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
BloodQuickeningState = data;
|
||||
SaveToDB();
|
||||
break;
|
||||
}
|
||||
case DATA_UPPERSPIRE_TELE_ACT:
|
||||
UpperSpireTeleporterActiveState = data;
|
||||
if (UpperSpireTeleporterActiveState == DONE)
|
||||
@@ -1303,17 +1161,12 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
|
||||
void WriteSaveDataMore(std::ostringstream& data) override
|
||||
{
|
||||
data << HeroicAttempts << ' '
|
||||
<< ColdflameJetsState << ' '
|
||||
<< BloodQuickeningState << ' '
|
||||
<< BloodQuickeningMinutes << ' '
|
||||
data << ColdflameJetsState << ' '
|
||||
<< UpperSpireTeleporterActiveState;
|
||||
}
|
||||
|
||||
void ReadSaveDataMore(std::istringstream& data) override
|
||||
{
|
||||
data >> HeroicAttempts;
|
||||
|
||||
uint32 temp = 0;
|
||||
data >> temp;
|
||||
if (temp == IN_PROGRESS)
|
||||
@@ -1321,10 +1174,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
else
|
||||
ColdflameJetsState = temp ? DONE : NOT_STARTED;
|
||||
|
||||
data >> temp;
|
||||
BloodQuickeningState = temp ? DONE : NOT_STARTED; // DONE means finished (not success/fail)
|
||||
data >> BloodQuickeningMinutes;
|
||||
|
||||
data >> temp;
|
||||
UpperSpireTeleporterActiveState = temp ? DONE : NOT_STARTED;
|
||||
}
|
||||
@@ -1353,7 +1202,7 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
else
|
||||
LadyDeathwhisperElevatorTimer -= diff;
|
||||
|
||||
if (BloodQuickeningState != IN_PROGRESS && GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != FAIL)
|
||||
if (GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != FAIL)
|
||||
return;
|
||||
|
||||
Events.Update(diff);
|
||||
@@ -1362,25 +1211,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_UPDATE_EXECUTION_TIME:
|
||||
{
|
||||
--BloodQuickeningMinutes;
|
||||
if (BloodQuickeningMinutes)
|
||||
{
|
||||
Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 60000);
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1);
|
||||
DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes);
|
||||
}
|
||||
else
|
||||
{
|
||||
BloodQuickeningState = DONE;
|
||||
DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0);
|
||||
if (Creature* bq = instance->GetCreature(BloodQueenLanaThelGUID))
|
||||
bq->AI()->DoAction(ACTION_KILL_MINCHAR);
|
||||
}
|
||||
SaveToDB();
|
||||
break;
|
||||
}
|
||||
case EVENT_QUAKE_SHATTER:
|
||||
{
|
||||
if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID))
|
||||
@@ -1534,9 +1364,6 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
std::set<uint32> FrostwyrmGUIDs;
|
||||
std::set<uint32> SpinestalkerTrash;
|
||||
std::set<uint32> RimefangTrash;
|
||||
uint32 BloodQuickeningState;
|
||||
uint32 HeroicAttempts;
|
||||
uint16 BloodQuickeningMinutes;
|
||||
uint8 BloodPrinceIntro;
|
||||
uint8 SindragosaIntro;
|
||||
uint32 LadyDeathwhisperElevatorTimer;
|
||||
|
||||
Reference in New Issue
Block a user