Core/Spells: Partial revert of 5ddf90c5fe, use checkcast hook for disallowing spells to be casted directly

Closes #2108
This commit is contained in:
Shocker
2011-06-24 21:56:37 +03:00
parent 14cb9496e3
commit 3de42791ee
4 changed files with 42 additions and 3 deletions

View File

@@ -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'),

View File

@@ -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');

View File

@@ -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;

View File

@@ -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();
}