diff options
-rw-r--r-- | sql/updates/world/3.3.5/2021_12_01_04_world.sql | 15 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp | 26 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_quest.cpp | 52 |
3 files changed, 48 insertions, 45 deletions
diff --git a/sql/updates/world/3.3.5/2021_12_01_04_world.sql b/sql/updates/world/3.3.5/2021_12_01_04_world.sql new file mode 100644 index 00000000000..207f29d83fc --- /dev/null +++ b/sql/updates/world/3.3.5/2021_12_01_04_world.sql @@ -0,0 +1,15 @@ +-- +DELETE FROM `spell_scripts` WHERE `id` = 53099; + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_teleport_leaders_blessing','spell_59064_59439_portals'); +DELETE FROM `spell_script_names` WHERE `spell_id` IN (53099,57896,58418,58420,59064,59065,59439,60900,60940) AND `ScriptName` = 'spell_quest_portal_with_condition'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(53099,'spell_quest_portal_with_condition'), +(57896,'spell_quest_portal_with_condition'), +(58418,'spell_quest_portal_with_condition'), +(58420,'spell_quest_portal_with_condition'), +(59064,'spell_quest_portal_with_condition'), +(59065,'spell_quest_portal_with_condition'), +(59439,'spell_quest_portal_with_condition'), +(60900,'spell_quest_portal_with_condition'), +(60940,'spell_quest_portal_with_condition'); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index 52ce80c0994..9b33e002de8 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -1671,34 +1671,8 @@ public: }; -// 58418 - Portal to Orgrimmar -// 58420 - Portal to Stormwind -class spell_teleport_leaders_blessing : public SpellScript -{ - PrepareSpellScript(spell_teleport_leaders_blessing); - - void HandleScriptEffect(SpellEffIndex /* effIndex */) - { - Player* target = GetHitPlayer(); - if (!target) - return; - - uint32 spellID = GetEffectInfo().CalcValue(); - uint32 questID = GetEffectInfo(EFFECT_1).CalcValue(); - - if (target->GetQuestStatus(questID) == QUEST_STATUS_COMPLETE) - target->CastSpell(target, spellID, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_teleport_leaders_blessing::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - void AddSC_the_scarlet_enclave_c5() { new npc_highlord_darion_mograine(); new npc_the_lich_king_tirion_dawn(); - RegisterSpellScript(spell_teleport_leaders_blessing); } diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 6805b8c70e8..39e74ad3767 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -26,6 +26,7 @@ #include "CreatureAIImpl.h" #include "CreatureTextMgr.h" #include "GridNotifiersImpl.h" +#include "ObjectMgr.h" #include "Player.h" #include "ScriptedCreature.h" #include "SpellAuraEffects.h" @@ -2078,24 +2079,6 @@ class spell_q13665_q13790_bested_trigger : public SpellScript } }; -// herald of war and life without regret portal spells -// 59064 - Portal to Orgrimmar -// 59439 - Portal to Undercity -class spell_59064_59439_portals : public SpellScript -{ - PrepareSpellScript(spell_59064_59439_portals); - - void HandleScript(SpellEffIndex /*effIndex*/) - { - GetHitUnit()->CastSpell(GetHitUnit(), uint32(GetEffectValue())); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_59064_59439_portals::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } -}; - enum ApplyHeatAndStir { SPELL_SPURTS_AND_SMOKE = 38594, @@ -2328,6 +2311,37 @@ class spell_quest_taming_the_beast : public AuraScript } }; +// 53099, 57896, 58418, 58420, 59064, 59065, 59439, 60900, 60940 +class spell_quest_portal_with_condition : public SpellScript +{ + PrepareSpellScript(spell_quest_portal_with_condition); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }) && + sObjectMgr->GetQuestTemplate(uint32(spellInfo->GetEffect(EFFECT_1).CalcValue())); + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + Player* target = GetHitPlayer(); + if (!target) + return; + + uint32 spellId = GetEffectInfo().CalcValue(); + uint32 questId = GetEffectInfo(EFFECT_1).CalcValue(); + + // This probably should be a way to throw error in SpellCastResult + if (target->IsActiveQuest(questId)) + target->CastSpell(target, spellId, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_quest_portal_with_condition::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_quest_spell_scripts() { new spell_q55_sacred_cleansing(); @@ -2396,10 +2410,10 @@ void AddSC_quest_spell_scripts() RegisterSpellScript(spell_q10929_fumping); RegisterSpellScript(spell_q12414_hand_over_reins); RegisterSpellScript(spell_q13665_q13790_bested_trigger); - RegisterSpellScript(spell_59064_59439_portals); RegisterSpellScript(spell_q11306_mixing_blood); RegisterSpellScript(spell_q11306_mixing_vrykul_blood); RegisterSpellScript(spell_q11306_failed_mix_43376); RegisterSpellScript(spell_q11306_failed_mix_43378); RegisterSpellScript(spell_quest_taming_the_beast); + RegisterSpellScript(spell_quest_portal_with_condition); } |