Scripts/Icecrown Citadel: Added support for weekly quest Residue Rendezvous
This commit is contained in:
@@ -7856,7 +7856,7 @@ void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, std::string table,
|
||||
|
||||
if (mQuestTemplates.find(quest) == mQuestTemplates.end())
|
||||
{
|
||||
sLog->outErrorDb("Table `%s: Quest %u listed for entry %u does not exist.", table.c_str(), quest, id);
|
||||
sLog->outErrorDb("Table `%s`: Quest %u listed for entry %u does not exist.", table.c_str(), quest, id);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -463,6 +463,42 @@ class spell_festergut_blighted_spores : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_festergut_gaseous_blight : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_festergut_gaseous_blight() : SpellScriptLoader("spell_festergut_gaseous_blight") { }
|
||||
|
||||
class spell_festergut_gaseous_blight_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_festergut_gaseous_blight_SpellScript);
|
||||
|
||||
bool Validate(SpellEntry const* /*spell*/)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(SPELL_ORANGE_BLIGHT_RESIDUE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void ExtraEffect()
|
||||
{
|
||||
if (GetHitUnit()->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE))
|
||||
return;
|
||||
|
||||
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_ORANGE_BLIGHT_RESIDUE, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterHit += SpellHitFn(spell_festergut_gaseous_blight_SpellScript::ExtraEffect);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_festergut_gaseous_blight_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_flu_shot_shortage : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
@@ -484,5 +520,6 @@ void AddSC_boss_festergut()
|
||||
new spell_festergut_pungent_blight();
|
||||
new spell_festergut_gastric_bloat();
|
||||
new spell_festergut_blighted_spores();
|
||||
new spell_festergut_gaseous_blight();
|
||||
new achievement_flu_shot_shortage();
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ class boss_rotface : public CreatureScript
|
||||
events.ScheduleEvent(EVENT_SLIME_SPRAY, 20000);
|
||||
break;
|
||||
case EVENT_HASTEN_INFECTIONS:
|
||||
if (infectionStage < 4)
|
||||
if (infectionStage++ < 4)
|
||||
{
|
||||
infectionCooldown -= 2000;
|
||||
events.ScheduleEvent(EVENT_HASTEN_INFECTIONS, 90000);
|
||||
@@ -722,6 +722,42 @@ class spell_rotface_unstable_ooze_explosion_suicide : 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);
|
||||
|
||||
bool Validate(SpellEntry const* /*spell*/)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(SPELL_GREEN_BLIGHT_RESIDUE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void ExtraEffect()
|
||||
{
|
||||
if (GetHitUnit()->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
|
||||
return;
|
||||
|
||||
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_GREEN_BLIGHT_RESIDUE, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterHit += SpellHitFn(spell_rotface_slime_spray_SpellScript::ExtraEffect);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_rotface_slime_spray_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_rotface()
|
||||
{
|
||||
new boss_rotface();
|
||||
@@ -735,4 +771,5 @@ void AddSC_boss_rotface()
|
||||
new spell_rotface_unstable_ooze_explosion_init();
|
||||
new spell_rotface_unstable_ooze_explosion();
|
||||
new spell_rotface_unstable_ooze_explosion_suicide();
|
||||
new spell_rotface_slime_spray();
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
// Weekly quest support
|
||||
//* Deprogramming (DONE)
|
||||
//* Securing the Ramparts (DONE)
|
||||
//* Residue Rendezvous
|
||||
//* Residue Rendezvous (DONE)
|
||||
//* Blood Quickening // AreaTrigger 5729 starts the timer, pulling BQ before it runs out means success
|
||||
//* Respite for a Tormented Soul
|
||||
|
||||
@@ -38,15 +38,19 @@ enum Texts
|
||||
enum Spells
|
||||
{
|
||||
// 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,
|
||||
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,
|
||||
SPELL_COLDFLAME_JETS = 70460,
|
||||
|
||||
// Alchemist Adrianna
|
||||
SPELL_HARVEST_BLIGHT_SPECIMEN = 72155,
|
||||
SPELL_HARVEST_BLIGHT_SPECIMEN25 = 72162,
|
||||
};
|
||||
|
||||
enum Events
|
||||
@@ -181,6 +185,20 @@ class npc_frost_freeze_trap : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
class npc_alchemist_adrianna : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_alchemist_adrianna() : CreatureScript("npc_alchemist_adrianna") { }
|
||||
|
||||
bool OnGossipHello(Player* player, Creature* creature)
|
||||
{
|
||||
if (!creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN) && !creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN25))
|
||||
if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
|
||||
creature->CastSpell(creature, SPELL_HARVEST_BLIGHT_SPECIMEN, false);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class DeathPlagueTargetSelector
|
||||
{
|
||||
public:
|
||||
@@ -267,6 +285,39 @@ class spell_frost_giant_death_plague : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
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()
|
||||
{
|
||||
OnEffect += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
OnEffect += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleQuestComplete, EFFECT_1, SPELL_EFFECT_QUEST_COMPLETE);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_icc_harvest_blight_specimen_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class at_icc_saurfang_portal : public AreaTriggerScript
|
||||
{
|
||||
public:
|
||||
@@ -318,7 +369,9 @@ void AddSC_icecrown_citadel()
|
||||
{
|
||||
new npc_rotting_frost_giant();
|
||||
new npc_frost_freeze_trap();
|
||||
new npc_alchemist_adrianna();
|
||||
new spell_frost_giant_death_plague();
|
||||
new spell_icc_harvest_blight_specimen();
|
||||
new at_icc_saurfang_portal();
|
||||
new at_icc_shutdown_traps();
|
||||
}
|
||||
|
||||
@@ -20,11 +20,15 @@
|
||||
|
||||
#define ICCScriptName "instance_icecrown_citadel"
|
||||
|
||||
// Shared spells used by every boss
|
||||
// Shared spells used by more than one script
|
||||
enum SharedSpells
|
||||
{
|
||||
SPELL_BERSERK = 26662,
|
||||
SPELL_BERSERK2 = 47008
|
||||
SPELL_BERSERK = 26662,
|
||||
SPELL_BERSERK2 = 47008,
|
||||
|
||||
// Residue Rendezvous
|
||||
SPELL_ORANGE_BLIGHT_RESIDUE = 72144,
|
||||
SPELL_GREEN_BLIGHT_RESIDUE = 72145,
|
||||
};
|
||||
|
||||
enum TeleporterSpells
|
||||
|
||||
@@ -227,14 +227,16 @@ class instance_icecrown_citadel : public InstanceMapScript
|
||||
case NPC_ALRIN_THE_AGILE:
|
||||
case NPC_VALITHRIA_DREAMWALKER_QUEST:
|
||||
{
|
||||
uint8 questIndex = 0;
|
||||
for (; questIndex < 5; ++questIndex)
|
||||
for (uint8 questIndex = 0; questIndex < 5; ++questIndex)
|
||||
{
|
||||
if (WeeklyQuestData[questIndex].npcStart == entry)
|
||||
{
|
||||
uint8 diffIndex = instance->GetSpawnMode() & 1;
|
||||
if (!sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[questIndex].questId[diffIndex]))
|
||||
entry = 0;
|
||||
break;
|
||||
|
||||
uint8 diffIndex = instance->GetSpawnMode() & 1;
|
||||
if (!sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[questIndex].questId[diffIndex]))
|
||||
entry = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user