aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Northrend
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-05-27 19:05:47 +0300
committerShauren <shauren.trinity@gmail.com>2022-03-10 22:36:09 +0100
commit09551b663a8190ef2ce9af6ad3e7cb5058e82b2e (patch)
tree57b69fe4ce06afce7ae759b7aabc6ee1a90222ce /src/server/scripts/Northrend
parent86e77891602797be24c30fe7dfad7ed484a4fcf0 (diff)
Scripts/Quest: Rework cocooned creatures (#26554)
(cherry picked from commit 78bd609e8a37caa354c42ee6da798ab6c0bb3009)
Diffstat (limited to 'src/server/scripts/Northrend')
-rw-r--r--src/server/scripts/Northrend/zone_howling_fjord.cpp74
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp60
2 files changed, 105 insertions, 29 deletions
diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp
index 2590215091e..a5035094a95 100644
--- a/src/server/scripts/Northrend/zone_howling_fjord.cpp
+++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp
@@ -512,7 +512,11 @@ class spell_mindless_abomination_explosion_fx_master : public SpellScriptLoader
}
};
-enum SummonSpells
+/*######
+## Quest 11296: Rivenwood Captives
+######*/
+
+enum RivenwoodCaptives
{
SPELL_SUMMON_BABY_RIVEN_WIDOWS = 43275,
SPELL_SUMMON_DARKCLAW_BAT = 43276,
@@ -525,11 +529,10 @@ enum SummonSpells
SPELL_SUMMON_WINTERSKORN_WOODSMAN = 43283,
SPELL_SUMMON_WINTERSKORN_TRIBESMAN = 43284,
SPELL_SUMMON_WINTERSKORN_ORACLE = 43285,
- SPELL_SUMMON_FREED_MIST_WHISPER_SCOUT = 43289,
- NPC_MIST_WHISPER_SCOUT = 24211
+ SPELL_SUMMON_FREED_MIST_WHISPER_SCOUT = 43289
};
-const uint32 rivenWidowCocoonVictims[11] =
+uint32 const CocoonSummonSpells[11] =
{
SPELL_SUMMON_BABY_RIVEN_WIDOWS,
SPELL_SUMMON_DARKCLAW_BAT,
@@ -544,39 +547,51 @@ const uint32 rivenWidowCocoonVictims[11] =
SPELL_SUMMON_WINTERSKORN_ORACLE
};
-class npc_riven_widow_cocoon : public CreatureScript
+// 43288 - Rivenwood Captives: Player Not On Quest
+class spell_rivenwood_captives_not_on_quest : public SpellScript
{
-public:
- npc_riven_widow_cocoon() : CreatureScript("npc_riven_widow_cocoon") { }
+ PrepareSpellScript(spell_rivenwood_captives_not_on_quest);
- struct npc_riven_widow_cocoonAI : public ScriptedAI
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- npc_riven_widow_cocoonAI(Creature* creature) : ScriptedAI(creature) { }
+ return ValidateSpellInfo(CocoonSummonSpells);
+ }
- void Reset() override { }
- void JustEngagedWith(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) override { }
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetCaster(), Trinity::Containers::SelectRandomContainerElement(CocoonSummonSpells), true);
+ }
- void JustDied(Unit* killer) override
- {
- if (!killer || killer->GetTypeId() != TYPEID_PLAYER)
- return;
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_rivenwood_captives_not_on_quest::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
- Player* player = killer->ToPlayer();
+// 43287 - Rivenwood Captives: Player On Quest
+class spell_rivenwood_captives_on_quest : public SpellScript
+{
+ PrepareSpellScript(spell_rivenwood_captives_on_quest);
- if (roll_chance_i(20))
- {
- player->CastSpell(me, SPELL_SUMMON_FREED_MIST_WHISPER_SCOUT, true);
- player->KilledMonsterCredit(NPC_MIST_WHISPER_SCOUT);
- }
- else
- player->CastSpell(me, rivenWidowCocoonVictims[urand(0, 10)], true);
- }
- };
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(CocoonSummonSpells) && ValidateSpellInfo({ SPELL_SUMMON_FREED_MIST_WHISPER_SCOUT });
+ }
- CreatureAI* GetAI(Creature* creature) const override
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ Unit* target = GetHitUnit();
+
+ if (roll_chance_i(80))
+ target->CastSpell(caster, Trinity::Containers::SelectRandomContainerElement(CocoonSummonSpells), true);
+ else
+ target->CastSpell(caster, SPELL_SUMMON_FREED_MIST_WHISPER_SCOUT, true);
+ }
+
+ void Register() override
{
- return new npc_riven_widow_cocoonAI(creature);
+ OnEffectHitTarget += SpellEffectFn(spell_rivenwood_captives_on_quest::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
@@ -586,5 +601,6 @@ void AddSC_howling_fjord()
RegisterCreatureAI(npc_daegarn);
new npc_mindless_abomination();
new spell_mindless_abomination_explosion_fx_master();
- new npc_riven_widow_cocoon();
+ RegisterSpellScript(spell_rivenwood_captives_not_on_quest);
+ RegisterSpellScript(spell_rivenwood_captives_on_quest);
}
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index 6b1022c631f..e3a1c2ae790 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -1045,6 +1045,64 @@ class spell_drop_disguise : public SpellScript
}
};
+/*######
+## Quest 12606: Cocooned!
+######*/
+
+enum Cocooned
+{
+ SPELL_SUMMON_SCOURGED_CAPTIVE = 51597,
+ SPELL_SUMMON_CAPTIVE_FOOTMAN = 51599
+};
+
+// 51596 - Cocooned: Player Not On Quest
+class spell_cocooned_not_on_quest : public SpellScript
+{
+ PrepareSpellScript(spell_cocooned_not_on_quest);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_SUMMON_SCOURGED_CAPTIVE });
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetCaster(), SPELL_SUMMON_SCOURGED_CAPTIVE, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_cocooned_not_on_quest::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
+// 51598 - Cocooned: Player On Quest
+class spell_cocooned_on_quest : public SpellScript
+{
+ PrepareSpellScript(spell_cocooned_on_quest);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_SUMMON_SCOURGED_CAPTIVE, SPELL_SUMMON_CAPTIVE_FOOTMAN });
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ Unit* target = GetHitUnit();
+
+ if (roll_chance_i(66))
+ target->CastSpell(caster, SPELL_SUMMON_SCOURGED_CAPTIVE, true);
+ else
+ target->CastSpell(caster, SPELL_SUMMON_CAPTIVE_FOOTMAN, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_cocooned_on_quest::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
void AddSC_zuldrak()
{
new npc_drakuru_shackles();
@@ -1063,4 +1121,6 @@ void AddSC_zuldrak()
RegisterSpellScript(spell_scourge_disguise_instability);
RegisterSpellScript(spell_scourge_disguise_expiring);
RegisterSpellScript(spell_drop_disguise);
+ RegisterSpellScript(spell_cocooned_not_on_quest);
+ RegisterSpellScript(spell_cocooned_on_quest);
}