From 3de42791ee0343696586137d385f53bcc46ebd90 Mon Sep 17 00:00:00 2001 From: Shocker Date: Fri, 24 Jun 2011 21:56:37 +0300 Subject: [PATCH] Core/Spells: Partial revert of 5ddf90c5fe8e51a72697, use checkcast hook for disallowing spells to be casted directly Closes #2108 --- sql/scripts/world_scripts_full.sql | 5 ++++ ...2011_06_24_06_world_spell_script_names.sql | 7 +++++ src/server/game/Spells/Spell.cpp | 3 -- src/server/scripts/Spells/spell_generic.cpp | 30 +++++++++++++++++++ 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 sql/updates/world/2011_06_24_06_world_spell_script_names.sql diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql index 92c5b80d603d6..c9f3efd4b8eae 100644 --- a/sql/scripts/world_scripts_full.sql +++ b/sql/scripts/world_scripts_full.sql @@ -1976,6 +1976,11 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES ( 25281, 'spell_gen_turkey_marker'), (-55428, 'spell_gen_lifeblood'), ( 65917, 'spell_gen_magic_rooster'), +( 4073, 'spell_gen_allow_cast_from_item_only'), +( 19804, 'spell_gen_allow_cast_from_item_only'), +( 12749, 'spell_gen_allow_cast_from_item_only'), +( 13258, 'spell_gen_allow_cast_from_item_only'), +( 13166, 'spell_gen_allow_cast_from_item_only'), -- instances -- Black Temple ( 41475, 'spell_boss_lady_malande_shield'), diff --git a/sql/updates/world/2011_06_24_06_world_spell_script_names.sql b/sql/updates/world/2011_06_24_06_world_spell_script_names.sql new file mode 100644 index 0000000000000..5c7b6e9bfc06f --- /dev/null +++ b/sql/updates/world/2011_06_24_06_world_spell_script_names.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN(4073,19804,12749,13258,13166); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(4073,'spell_gen_allow_cast_from_item_only'), +(19804,'spell_gen_allow_cast_from_item_only'), +(12749,'spell_gen_allow_cast_from_item_only'), +(13258,'spell_gen_allow_cast_from_item_only'), +(13166,'spell_gen_allow_cast_from_item_only'); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 4357fb4bbc2a4..118f46cd7016f 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4652,9 +4652,6 @@ SpellCastResult Spell::CheckCast(bool strict) if (m_spellInfo->AttributesEx7 & SPELL_ATTR7_IS_CHEAT_SPELL && !m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS)) return SPELL_FAILED_SPELL_UNAVAILABLE; - if (m_castedClientside && m_spellInfo->Attributes & SPELL_ATTR0_HIDDEN_CLIENTSIDE && m_caster->GetTypeId() == TYPEID_PLAYER && !m_CastItem) - return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; - // Check global cooldown if (strict && !m_IsTriggeredSpell && HasGlobalCooldown()) return SPELL_FAILED_NOT_READY; diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 583e199979a23..9de0ffa6f5471 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1125,6 +1125,35 @@ class spell_gen_magic_rooster : public SpellScriptLoader } }; +class spell_gen_allow_cast_from_item_only : public SpellScriptLoader +{ +public: + spell_gen_allow_cast_from_item_only() : SpellScriptLoader("spell_gen_allow_cast_from_item_only") { } + + class spell_gen_allow_cast_from_item_only_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_allow_cast_from_item_only_SpellScript); + + SpellCastResult CheckRequirement() + { + if (!GetCastItem()) + return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; + + return SPELL_CAST_OK; + } + + void Register() + { + OnCheckCast += SpellCheckCastFn(spell_gen_allow_cast_from_item_only_SpellScript::CheckRequirement); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_gen_allow_cast_from_item_only_SpellScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -1151,4 +1180,5 @@ void AddSC_generic_spell_scripts() new spell_gen_turkey_marker(); new spell_gen_lifeblood(); new spell_gen_magic_rooster(); + new spell_gen_allow_cast_by_item_only(); }