diff options
-rw-r--r-- | sql/updates/world/3.3.5/2021_10_07_00_world.sql | 21 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 29 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.h | 1 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_quest.cpp | 111 |
5 files changed, 132 insertions, 35 deletions
diff --git a/sql/updates/world/3.3.5/2021_10_07_00_world.sql b/sql/updates/world/3.3.5/2021_10_07_00_world.sql new file mode 100644 index 00000000000..fe6cc6dddcc --- /dev/null +++ b/sql/updates/world/3.3.5/2021_10_07_00_world.sql @@ -0,0 +1,21 @@ +-- +DELETE FROM `spell_script_names` WHERE `spell_id` IN (19548,19674,19687,19688,19689,19692,19693,19694,19696,19697,19699,19700,30646,30653,30654,30099,30102,30105) AND `ScriptName` = 'spell_quest_taming_the_beast'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(19548,'spell_quest_taming_the_beast'), +(19674,'spell_quest_taming_the_beast'), +(19687,'spell_quest_taming_the_beast'), +(19688,'spell_quest_taming_the_beast'), +(19689,'spell_quest_taming_the_beast'), +(19692,'spell_quest_taming_the_beast'), +(19693,'spell_quest_taming_the_beast'), +(19694,'spell_quest_taming_the_beast'), +(19696,'spell_quest_taming_the_beast'), +(19697,'spell_quest_taming_the_beast'), +(19699,'spell_quest_taming_the_beast'), +(19700,'spell_quest_taming_the_beast'), +(30646,'spell_quest_taming_the_beast'), +(30653,'spell_quest_taming_the_beast'), +(30654,'spell_quest_taming_the_beast'), +(30099,'spell_quest_taming_the_beast'), +(30102,'spell_quest_taming_the_beast'), +(30105,'spell_quest_taming_the_beast'); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index a60e6b44645..3728b3c2b81 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -4453,35 +4453,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool // AT REMOVE else { - if ((GetSpellInfo()->IsQuestTame()) && caster && caster->IsAlive() && target->IsAlive()) - { - uint32 finalSpelId = 0; - switch (GetId()) - { - case 19548: finalSpelId = 19597; break; - case 19674: finalSpelId = 19677; break; - case 19687: finalSpelId = 19676; break; - case 19688: finalSpelId = 19678; break; - case 19689: finalSpelId = 19679; break; - case 19692: finalSpelId = 19680; break; - case 19693: finalSpelId = 19684; break; - case 19694: finalSpelId = 19681; break; - case 19696: finalSpelId = 19682; break; - case 19697: finalSpelId = 19683; break; - case 19699: finalSpelId = 19685; break; - case 19700: finalSpelId = 19686; break; - case 30646: finalSpelId = 30647; break; - case 30653: finalSpelId = 30648; break; - case 30654: finalSpelId = 30652; break; - case 30099: finalSpelId = 30100; break; - case 30102: finalSpelId = 30103; break; - case 30105: finalSpelId = 30104; break; - } - - if (finalSpelId) - caster->CastSpell(target, finalSpelId, this); - } - switch (m_spellInfo->SpellFamilyName) { case SPELLFAMILY_GENERIC: diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 0226f70e020..0abf694251a 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -930,11 +930,6 @@ bool SpellInfo::IsLootCrafting() const ((TotemCategory[0] != 0 || (Totem[0] != 0 && SpellIconID == 1)) || GetEffect(EFFECT_0).ItemType == 0))); } -bool SpellInfo::IsQuestTame() const -{ - return GetEffect(EFFECT_0).Effect == SPELL_EFFECT_THREAT && GetEffect(EFFECT_1).Effect == SPELL_EFFECT_APPLY_AURA && GetEffect(EFFECT_1).ApplyAuraName == SPELL_AURA_DUMMY; -} - bool SpellInfo::IsProfessionOrRiding() const { for (SpellEffectInfo const& effect : GetEffects()) diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index 0ad1810853c..b9ec5514adc 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -424,7 +424,6 @@ class TC_GAME_API SpellInfo bool IsExplicitDiscovery() const; bool IsLootCrafting() const; - bool IsQuestTame() const; bool IsProfessionOrRiding() const; bool IsProfession() const; bool IsPrimaryProfession() const; diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 7ce8d2f58d1..7d3bb72c396 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -2269,6 +2269,116 @@ class spell_q11896_weakness_to_lightning_46444 : public SpellScript } }; +enum TamingTheBeast +{ + SPELL_TAME_ICE_CLAW_BEAR = 19548, + SPELL_TAME_LARGE_CRAG_BOAR = 19674, + SPELL_TAME_SNOW_LEOPARD = 19687, + SPELL_TAME_ADULT_PLAINSTRIDER = 19688, + SPELL_TAME_PRAIRIE_STALKER = 19689, + SPELL_TAME_SWOOP = 19692, + SPELL_TAME_WEBWOOD_LURKER = 19693, + SPELL_TAME_DIRE_MOTTLED_BOAR = 19694, + SPELL_TAME_SURF_CRAWLER = 19696, + SPELL_TAME_ARMORED_SCORPID = 19697, + SPELL_TAME_NIGHTSABER_STALKER = 19699, + SPELL_TAME_STRIGID_SCREECHER = 19700, + SPELL_TAME_BARBED_CRAWLER = 30646, + SPELL_TAME_GREATER_TIMBERSTRIDER = 30653, + SPELL_TAME_NIGHTSTALKER = 30654, + SPELL_TAME_CRAZED_DRAGONHAWK = 30099, + SPELL_TAME_ELDER_SPRINGPAW = 30102, + SPELL_TAME_MISTBAT = 30105, + SPELL_TAME_ICE_CLAW_BEAR_1 = 19597, + SPELL_TAME_LARGE_CRAG_BOAR_1 = 19677, + SPELL_TAME_SNOW_LEOPARD_1 = 19676, + SPELL_TAME_ADULT_PLAINSTRIDER_1 = 19678, + SPELL_TAME_PRAIRIE_STALKER_1 = 19679, + SPELL_TAME_SWOOP_1 = 19680, + SPELL_TAME_WEBWOOD_LURKER_1 = 19684, + SPELL_TAME_DIRE_MOTTLED_BOAR_1 = 19681, + SPELL_TAME_SURF_CRAWLER_1 = 19682, + SPELL_TAME_ARMORED_SCORPID_1 = 19683, + SPELL_TAME_NIGHTSABER_STALKER_1 = 19685, + SPELL_TAME_STRIGID_SCREECHER_1 = 19686, + SPELL_TAME_BARBED_CRAWLER_1 = 30647, + SPELL_TAME_GREATER_TIMBERSTRIDER_1 = 30648, + SPELL_TAME_NIGHTSTALKER_1 = 30652, + SPELL_TAME_CRAZED_DRAGONHAWK_1 = 30100, + SPELL_TAME_ELDER_SPRINGPAW_1 = 30103, + SPELL_TAME_MISTBAT_1 = 30104 +}; + +class spell_quest_taming_the_beast : public AuraScript +{ + PrepareAuraScript(spell_quest_taming_the_beast); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_TAME_ICE_CLAW_BEAR_1, + SPELL_TAME_LARGE_CRAG_BOAR_1, + SPELL_TAME_SNOW_LEOPARD_1, + SPELL_TAME_ADULT_PLAINSTRIDER_1, + SPELL_TAME_PRAIRIE_STALKER_1, + SPELL_TAME_SWOOP_1, + SPELL_TAME_WEBWOOD_LURKER_1, + SPELL_TAME_DIRE_MOTTLED_BOAR_1, + SPELL_TAME_SURF_CRAWLER_1, + SPELL_TAME_ARMORED_SCORPID_1, + SPELL_TAME_NIGHTSABER_STALKER_1, + SPELL_TAME_STRIGID_SCREECHER_1, + SPELL_TAME_BARBED_CRAWLER_1, + SPELL_TAME_GREATER_TIMBERSTRIDER_1, + SPELL_TAME_NIGHTSTALKER_1, + SPELL_TAME_CRAZED_DRAGONHAWK_1, + SPELL_TAME_ELDER_SPRINGPAW_1, + SPELL_TAME_MISTBAT_1 + }); + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (!GetCaster() || !GetCaster()->IsAlive() || !GetTarget()->IsAlive()) + return; + + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) + return; + + uint32 finalSpellId = 0; + switch (GetId()) + { + case SPELL_TAME_ICE_CLAW_BEAR: finalSpellId = SPELL_TAME_ICE_CLAW_BEAR_1; break; + case SPELL_TAME_LARGE_CRAG_BOAR: finalSpellId = SPELL_TAME_LARGE_CRAG_BOAR_1; break; + case SPELL_TAME_SNOW_LEOPARD: finalSpellId = SPELL_TAME_SNOW_LEOPARD_1; break; + case SPELL_TAME_ADULT_PLAINSTRIDER: finalSpellId = SPELL_TAME_ADULT_PLAINSTRIDER_1; break; + case SPELL_TAME_PRAIRIE_STALKER: finalSpellId = SPELL_TAME_PRAIRIE_STALKER_1; break; + case SPELL_TAME_SWOOP: finalSpellId = SPELL_TAME_SWOOP_1; break; + case SPELL_TAME_WEBWOOD_LURKER: finalSpellId = SPELL_TAME_WEBWOOD_LURKER_1; break; + case SPELL_TAME_DIRE_MOTTLED_BOAR: finalSpellId = SPELL_TAME_DIRE_MOTTLED_BOAR_1; break; + case SPELL_TAME_SURF_CRAWLER: finalSpellId = SPELL_TAME_SURF_CRAWLER_1; break; + case SPELL_TAME_ARMORED_SCORPID: finalSpellId = SPELL_TAME_ARMORED_SCORPID_1; break; + case SPELL_TAME_NIGHTSABER_STALKER: finalSpellId = SPELL_TAME_NIGHTSABER_STALKER_1; break; + case SPELL_TAME_STRIGID_SCREECHER: finalSpellId = SPELL_TAME_STRIGID_SCREECHER_1; break; + case SPELL_TAME_BARBED_CRAWLER: finalSpellId = SPELL_TAME_BARBED_CRAWLER_1; break; + case SPELL_TAME_GREATER_TIMBERSTRIDER: finalSpellId = SPELL_TAME_GREATER_TIMBERSTRIDER_1; break; + case SPELL_TAME_NIGHTSTALKER: finalSpellId = SPELL_TAME_NIGHTSTALKER_1; break; + case SPELL_TAME_CRAZED_DRAGONHAWK: finalSpellId = SPELL_TAME_CRAZED_DRAGONHAWK_1; break; + case SPELL_TAME_ELDER_SPRINGPAW: finalSpellId = SPELL_TAME_ELDER_SPRINGPAW_1; break; + case SPELL_TAME_MISTBAT: finalSpellId = SPELL_TAME_MISTBAT_1; break; + } + + if (finalSpellId) + GetCaster()->CastSpell(GetTarget(), finalSpellId, true); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_quest_taming_the_beast::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_quest_spell_scripts() { new spell_q55_sacred_cleansing(); @@ -2343,4 +2453,5 @@ void AddSC_quest_spell_scripts() RegisterSpellScript(spell_q11306_mixing_vrykul_blood); RegisterSpellScript(spell_q11306_failed_mix_43376); RegisterSpellScript(spell_q11306_failed_mix_43378); + RegisterSpellScript(spell_quest_taming_the_beast); } |