aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-12-01 02:52:31 +0200
committerGitHub <noreply@github.com>2021-12-01 02:52:31 +0200
commit251304b19c2fc42ee330b9a533b54f7b80df5d4a (patch)
tree4f9e950a03780c51509d35608fc8cb93bc637bd8
parent43315e0e19fe1609b336f6a9aae486e302317c79 (diff)
Scripts/Spells: Generic spell script for quest portals (#27305)
-rw-r--r--sql/updates/world/3.3.5/2021_12_01_04_world.sql15
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp26
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp52
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);
}