aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp5
-rw-r--r--src/server/game/Scripting/ScriptMgr.h4
-rw-r--r--src/server/game/Spells/Spell.cpp5
3 files changed, 14 insertions, 0 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index 860ec673b4f..9c19b0a20c0 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -1132,6 +1132,11 @@ void ScriptMgr::OnPlayerTextEmote(Player* player, uint32 text_emote, uint32 emot
FOREACH_SCRIPT(PlayerScript)->OnTextEmote(player, text_emote, emoteNum, guid);
}
+void ScriptMgr::OnPlayerSpellCast(Player *player, Spell *spell, bool skipCheck)
+{
+ FOREACH_SCRIPT(PlayerScript)->OnSpellCast(player, spell, skipCheck);
+}
+
void ScriptMgr::OnGuildAddMember(Guild *guild, Player *player, uint32& plRank)
{
FOREACH_SCRIPT(GuildScript)->OnAddMember(guild, player, plRank);
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index 4bb9cf4dcb3..50168dbf6da 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -688,6 +688,9 @@ public:
// Both of the below are called on emote opcodes
virtual void OnEmote(Player* /*player*/, uint32 /*emote*/) { }
virtual void OnTextEmote(Player* /*player*/, uint32 /*text_emote*/, uint32 /*emoteNum*/, uint64 /*guid*/) { }
+
+ // Called in Spell::cast
+ virtual void OnSpellCast(Player *player, Spell *spell, bool skipCheck) { }
};
class GuildScript : public ScriptObject
@@ -887,6 +890,7 @@ class ScriptMgr
void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, void* param = NULL);
void OnPlayerEmote(Player* player, uint32 emote);
void OnPlayerTextEmote(Player* player, uint32 text_emote, uint32 emoteNum, uint64 guid);
+ void OnPlayerSpellCast(Player *player, Spell *spell, bool skipCheck);
public: /* GuildScript */
void OnGuildAddMember(Guild *guild, Player *player, uint32& plRank);
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 7de3b7a38d1..51b044049ef 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3133,6 +3133,11 @@ void Spell::cast(bool skipCheck)
}
}
+ // now that we've done the basic check, now run the scripts
+ // should be done before the spell is actually executed
+ if (Player *playerCaster = m_caster->ToPlayer())
+ sScriptMgr.OnPlayerSpellCast(playerCaster, this, skipCheck);
+
SetExecutedCurrently(true);
if (m_caster->GetTypeId() != TYPEID_PLAYER && m_targets.getUnitTarget() && m_targets.getUnitTarget() != m_caster)