aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPolarCookie <sei009@post.uit.no>2019-01-05 01:43:53 +0100
committerShauren <shauren.trinity@gmail.com>2021-11-18 22:41:57 +0100
commit19646a8363310c5371728fa7b50dcd33bb2278e2 (patch)
treef6becbb3b7304988a1817d41e2a6124415252473 /src
parent1199906b3258a01cf3ceb89691f4aeb778759595 (diff)
That's Abominable for the 3 other quests, and knockbacks for all. (#22127)
(cherry picked from commit fb19f7be1f103b6d647e6d7d2aeabdfaadbc0631)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp347
1 files changed, 212 insertions, 135 deletions
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 30bf1857af1..a14bd2d6236 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -1964,178 +1964,251 @@ class spell_q13086_cannons_target : public SpellScriptLoader
}
};
-enum ThatsAbominable
+enum BurstAtTheSeams
{
- QUEST_THATS_ABOMINABLE = 13264,
+ AREA_THE_BROKEN_FRONT = 4507,
+ AREA_MORD_RETHAR_THE_DEATH_GATE = 4508,
+
+ NPC_DRAKKARI_CHIEFTAINK = 29099,
+ NPC_ICY_GHOUL = 31142,
+ NPC_VICIOUS_GEIST = 31147,
+ NPC_RISEN_ALLIANCE_SOLDIERS = 31205,
+ NPC_RENIMATED_ABOMINATION = 31692,
+
+ QUEST_FUEL_FOR_THE_FIRE = 12690,
+
+ SPELL_BLOATED_ABOMINATION_FEIGN_DEATH = 52593,
+ SPELL_BURST_AT_THE_SEAMS_BONE = 52516,
+ SPELL_EXPLODE_ABOMINATION_MEAT = 52520,
+ SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT = 52523,
+ SPELL_TROLL_EXPLOSION = 52565,
+ SPELL_EXPLODE_TROLL_MEAT = 52578,
+ SPELL_EXPLODE_TROLL_BLOODY_MEAT = 52580,
- NPC_ICY_GHOUL = 31142,
- NPC_RISEN_ALLIANCE_SOLDIERS = 31205,
- NPC_VICIOUS_GEIST = 31147,
- NPC_RENIMATED_ABOMINATION = 31692,
+ SPELL_BURST_AT_THE_SEAMS_59576 = 59576, //script/knockback, That's Abominable
+ SPELL_BURST_AT_THE_SEAMS_59579 = 59579, //dummy
+ SPELL_BURST_AT_THE_SEAMS_52510 = 52510, //script/knockback, Fuel for the Fire
+ SPELL_BURST_AT_THE_SEAMS_52508 = 52508, //damage 20000
+ SPELL_BURST_AT_THE_SEAMS_59580 = 59580, //damage 50000
- SPELL_ICY_GHOUL_CREDIT = 59591, // Credit for Icy Ghoul
- SPELL_VICIOUS_GEISTS_CREDIT = 60042, // Credit for Vicious Geists
- SPELL_RISEN_ALLIANCE_SOLDIERS_CREDIT = 60040, // Credit for Risen Alliance Soldiers
+ SPELL_ASSIGN_GHOUL_KILL_CREDIT_TO_MASTER = 59590,
+ SPELL_ASSIGN_GEIST_KILL_CREDIT_TO_MASTER = 60041,
+ SPELL_ASSIGN_SKELETON_KILL_CREDIT_TO_MASTER = 60039,
+
+ SPELL_DRAKKARI_SKULLCRUSHER_CREDIT = 52590,
+ SPELL_SUMMON_DRAKKARI_CHIEFTAIN = 52616,
+ SPELL_DRAKKARI_CHIEFTAINK_KILL_CREDIT = 52620
};
-class spell_q13264_thats_abominable : public SpellScriptLoader
+class spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59576 : public SpellScript
{
- public:
- spell_q13264_thats_abominable() : SpellScriptLoader("spell_q13264_thats_abominable") { }
+ PrepareSpellScript(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59576);
- class spell_q13264_thats_abominable_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_q13264_thats_abominable_SpellScript);
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(
+ {
+ SPELL_BURST_AT_THE_SEAMS_59576,
+ SPELL_BLOATED_ABOMINATION_FEIGN_DEATH,
+ SPELL_BURST_AT_THE_SEAMS_59579,
+ SPELL_BURST_AT_THE_SEAMS_BONE,
+ SPELL_EXPLODE_ABOMINATION_MEAT,
+ SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT
+ });
+ }
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_ICY_GHOUL_CREDIT,
- SPELL_VICIOUS_GEISTS_CREDIT,
- SPELL_RISEN_ALLIANCE_SOLDIERS_CREDIT,
- });
- }
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Creature* creature = GetCaster()->ToCreature())
+ {
+ creature->CastSpell(creature, SPELL_BLOATED_ABOMINATION_FEIGN_DEATH, true);
+ creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_59579, true);
+ creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true);
+ creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true);
+ creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true);
+ creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_MEAT, true);
+ creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true);
+ creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true);
+ creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true);
+ }
+ }
- void HandleKnockBack(SpellEffIndex effIndex)
- {
- PreventHitDefaultEffect(effIndex);
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59576::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
- if (Creature* creature = GetHitCreature())
- if (Unit* charmer = GetCaster()->GetCharmerOrOwner())
- if (Player* player = charmer->ToPlayer())
- if (player->GetQuestStatus(QUEST_THATS_ABOMINABLE) == QUEST_STATUS_INCOMPLETE)
- if (GiveCreditIfValid(player, creature))
- creature->KillSelf();
- }
+class spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579 : public AuraScript
+{
+ PrepareAuraScript(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579);
- bool GiveCreditIfValid(Player* player, Creature* creature)
+ void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->CastSpell(target, SPELL_TROLL_EXPLOSION, true);
+ target->CastSpell(target, SPELL_EXPLODE_ABOMINATION_MEAT, true);
+ target->CastSpell(target, SPELL_EXPLODE_TROLL_MEAT, true);
+ target->CastSpell(target, SPELL_EXPLODE_TROLL_MEAT, true);
+ target->CastSpell(target, SPELL_EXPLODE_TROLL_BLOODY_MEAT, true);
+ target->CastSpell(target, SPELL_BURST_AT_THE_SEAMS_BONE, true);
+ }
+
+ void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ if (Unit* caster = GetCaster())
+ {
+ switch (target->GetEntry())
{
- uint32 entry = creature->GetEntry();
+ case NPC_ICY_GHOUL:
+ target->CastSpell(caster, SPELL_ASSIGN_GHOUL_KILL_CREDIT_TO_MASTER, true);
+ break;
+ case NPC_VICIOUS_GEIST:
+ target->CastSpell(caster, SPELL_ASSIGN_GEIST_KILL_CREDIT_TO_MASTER, true);
+ break;
+ case NPC_RISEN_ALLIANCE_SOLDIERS:
+ target->CastSpell(caster, SPELL_ASSIGN_SKELETON_KILL_CREDIT_TO_MASTER, true);
+ break;
+ }
+ }
+ target->CastSpell(target, SPELL_BURST_AT_THE_SEAMS_59580, true);
+ }
- switch(entry)
- {
- case NPC_ICY_GHOUL:
- player->CastSpell(player, SPELL_ICY_GHOUL_CREDIT, true);
- return true;
- case NPC_VICIOUS_GEIST:
- player->CastSpell(player, SPELL_VICIOUS_GEISTS_CREDIT, true);
- return true;
- case NPC_RISEN_ALLIANCE_SOLDIERS:
- player->CastSpell(player, SPELL_RISEN_ALLIANCE_SOLDIERS_CREDIT, true);
- return true;
- }
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectApplyFn(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
- return false;
- }
+class spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death : public AuraScript
+{
+ PrepareAuraScript(spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death);
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- if (Creature* creature = GetCaster()->ToCreature()) {
- creature->KillSelf();
- creature->DespawnOrUnsummon();
- }
- }
+ void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->AddDynamicFlag(UNIT_DYNFLAG_DEAD);
+ target->AddUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_q13264_thats_abominable_SpellScript::HandleKnockBack, EFFECT_1, SPELL_EFFECT_KNOCK_BACK);
- OnEffectHitTarget += SpellEffectFn(spell_q13264_thats_abominable_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
+ if (Creature* creature = target->ToCreature())
+ creature->SetReactState(REACT_PASSIVE);
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_q13264_thats_abominable_SpellScript();
- }
+ void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ if (Creature* creature = target->ToCreature())
+ creature->DespawnOrUnsummon();
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectApplyFn(spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
};
-enum BurstAtTheSeams
+
+class spell_q13264_q13276_q13288_q13289_area_restrict_abom : public SpellScript
{
- NPC_DRAKKARI_CHIEFTAINK = 29099,
+ PrepareSpellScript(spell_q13264_q13276_q13288_q13289_area_restrict_abom);
- QUEST_BURST_AT_THE_SEAMS = 12690,
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Creature* creature = GetHitCreature()) {
+ uint32 area = creature->GetAreaId();
+ if (area != AREA_THE_BROKEN_FRONT && area != AREA_MORD_RETHAR_THE_DEATH_GATE)
+ creature->DespawnOrUnsummon();
+ }
+ }
- SPELL_BURST_AT_THE_SEAMS = 52510, // Burst at the Seams
- SPELL_BURST_AT_THE_SEAMS_DMG = 52508, // Damage spell
- SPELL_BURST_AT_THE_SEAMS_DMG_2 = 59580, // Abomination self damage spell
- SPELL_BURST_AT_THE_SEAMS_BONE = 52516, // Burst at the Seams:Bone
- SPELL_BURST_AT_THE_SEAMS_MEAT = 52520, // Explode Abomination:Meat
- SPELL_BURST_AT_THE_SEAMS_BMEAT = 52523, // Explode Abomination:Bloody Meat
- SPELL_DRAKKARI_SKULLCRUSHER_CREDIT = 52590, // Credit for Drakkari Skullcrusher
- SPELL_SUMMON_DRAKKARI_CHIEFTAIN = 52616, // Summon Drakkari Chieftain
- SPELL_DRAKKARI_CHIEFTAINK_KILL_CREDIT = 52620 // Drakkari Chieftain Kill Credit
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_q13264_q13276_q13288_q13289_area_restrict_abom::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
};
-class spell_q12690_burst_at_the_seams : public SpellScriptLoader
+class spell_q13264_q13276_q13288_q13289_assign_credit_to_master : public SpellScript
{
- public:
- spell_q12690_burst_at_the_seams() : SpellScriptLoader("spell_q12690_burst_at_the_seams") { }
+ PrepareSpellScript(spell_q13264_q13276_q13288_q13289_assign_credit_to_master);
- class spell_q12690_burst_at_the_seams_SpellScript : public SpellScript
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* target = GetHitUnit())
{
- PrepareSpellScript(spell_q12690_burst_at_the_seams_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
+ if (Unit* owner = target->GetOwner())
{
- return ValidateSpellInfo(
- {
- SPELL_BURST_AT_THE_SEAMS,
- SPELL_BURST_AT_THE_SEAMS_DMG,
- SPELL_BURST_AT_THE_SEAMS_DMG_2,
- SPELL_BURST_AT_THE_SEAMS_BONE,
- SPELL_BURST_AT_THE_SEAMS_MEAT,
- SPELL_BURST_AT_THE_SEAMS_BMEAT
- });
+ owner->CastSpell(owner, GetEffectValue(), true);
}
+ }
+ }
- bool Load() override
- {
- return GetCaster()->GetTypeId() == TYPEID_UNIT;
- }
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_q13264_q13276_q13288_q13289_assign_credit_to_master::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
- void HandleKnockBack(SpellEffIndex /*effIndex*/)
+class spell_q12690_burst_at_the_seams_52510 : public SpellScript
+{
+ PrepareSpellScript(spell_q12690_burst_at_the_seams_52510);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(
+ {
+ SPELL_BURST_AT_THE_SEAMS_52510,
+ SPELL_BURST_AT_THE_SEAMS_52508,
+ SPELL_BURST_AT_THE_SEAMS_59580,
+ SPELL_BURST_AT_THE_SEAMS_BONE,
+ SPELL_EXPLODE_ABOMINATION_MEAT,
+ SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT
+ });
+ }
+
+ bool Load() override
+ {
+ return GetCaster()->GetTypeId() == TYPEID_UNIT;
+ }
+
+ void HandleKnockBack(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* creature = GetHitCreature())
+ {
+ if (Unit* charmer = GetCaster()->GetCharmerOrOwner())
{
- if (Unit* creature = GetHitCreature())
+ if (Player* player = charmer->ToPlayer())
{
- if (Unit* charmer = GetCaster()->GetCharmerOrOwner())
+ if (player->GetQuestStatus(QUEST_FUEL_FOR_THE_FIRE) == QUEST_STATUS_INCOMPLETE)
{
- if (Player* player = charmer->ToPlayer())
- {
- if (player->GetQuestStatus(QUEST_BURST_AT_THE_SEAMS) == QUEST_STATUS_INCOMPLETE)
- {
- creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true);
- creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_MEAT, true);
- creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BMEAT, true);
- creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_DMG, true);
- creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_DMG_2, true);
-
- player->CastSpell(player, SPELL_DRAKKARI_SKULLCRUSHER_CREDIT, true);
- uint16 count = player->GetReqKillOrCastCurrentCount(QUEST_BURST_AT_THE_SEAMS, NPC_DRAKKARI_CHIEFTAINK);
- if ((count % 20) == 0)
- player->CastSpell(player, SPELL_SUMMON_DRAKKARI_CHIEFTAIN, true);
- }
- }
+ creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_BONE, true);
+ creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_MEAT, true);
+ creature->CastSpell(creature, SPELL_EXPLODE_ABOMINATION_BLOODY_MEAT, true);
+ creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_52508, true);
+ creature->CastSpell(creature, SPELL_BURST_AT_THE_SEAMS_59580, true);
+
+ player->CastSpell(player, SPELL_DRAKKARI_SKULLCRUSHER_CREDIT, true);
+ uint16 count = player->GetReqKillOrCastCurrentCount(QUEST_FUEL_FOR_THE_FIRE, NPC_DRAKKARI_CHIEFTAINK);
+ if ((count % 20) == 0)
+ player->CastSpell(player, SPELL_SUMMON_DRAKKARI_CHIEFTAIN, true);
}
}
}
+ }
+ }
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->ToCreature()->DespawnOrUnsummon(2 * IN_MILLISECONDS);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_SpellScript::HandleKnockBack, EFFECT_1, SPELL_EFFECT_KNOCK_BACK);
- OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->ToCreature()->DespawnOrUnsummon(2 * IN_MILLISECONDS);
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_q12690_burst_at_the_seams_SpellScript();
- }
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_52510::HandleKnockBack, EFFECT_1, SPELL_EFFECT_KNOCK_BACK);
+ OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_52510::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
};
enum EscapeFromSilverbrook
@@ -2947,8 +3020,12 @@ void AddSC_quest_spell_scripts()
new spell_q12847_summon_soul_moveto_bunny();
new spell_q13011_bear_flank_master();
new spell_q13086_cannons_target();
- new spell_q13264_thats_abominable();
- new spell_q12690_burst_at_the_seams();
+ RegisterSpellScript(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59576);
+ RegisterAuraScript(spell_q13264_q13276_q13288_q13289_burst_at_the_seams_59579);
+ RegisterAuraScript(spell_q13264_q13276_q13288_q13289_bloated_abom_feign_death);
+ RegisterSpellScript(spell_q13264_q13276_q13288_q13289_area_restrict_abom);
+ RegisterSpellScript(spell_q13264_q13276_q13288_q13289_assign_credit_to_master);
+ RegisterSpellScript(spell_q12690_burst_at_the_seams_52510);
new spell_q12308_escape_from_silverbrook_summon_worgen();
new spell_q12308_escape_from_silverbrook();
new spell_q12641_death_comes_from_on_high();