diff options
author | PolarCookie <sei009@post.uit.no> | 2019-01-05 01:43:53 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-11-18 22:41:57 +0100 |
commit | 19646a8363310c5371728fa7b50dcd33bb2278e2 (patch) | |
tree | f6becbb3b7304988a1817d41e2a6124415252473 /src | |
parent | 1199906b3258a01cf3ceb89691f4aeb778759595 (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.cpp | 347 |
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(); |