diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 16 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.cpp | 1 |
4 files changed, 39 insertions, 3 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 5dba5b1ed30..fc3061b04e7 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1174,6 +1174,26 @@ void ScriptMgr::OnPlayerSpellCast(Player *player, Spell *spell, bool skipCheck) FOREACH_SCRIPT(PlayerScript)->OnSpellCast(player, spell, skipCheck); } +void ScriptMgr::OnPlayerLogin(Player *player) +{ + FOREACH_SCRIPT(PlayerScript)->OnLogin(player); +} + +void ScriptMgr::OnPlayerLogout(Player *player) +{ + FOREACH_SCRIPT(PlayerScript)->OnLogout(player); +} + +void ScriptMgr::OnPlayerCreate(Player *player) +{ + FOREACH_SCRIPT(PlayerScript)->OnCreate(player); +} + +void ScriptMgr::OnPlayerDelete(uint64 guid) +{ + FOREACH_SCRIPT(PlayerScript)->OnDelete(guid); +} + 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 6e030638d38..443d7f28653 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -706,7 +706,15 @@ class PlayerScript : public ScriptObject 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*/) { } + virtual void OnSpellCast(Player* /*player*/, Spell * /*spell*/, bool /*skipCheck*/) { } + + // Called when a player logs in or out + virtual void OnLogin(Player* /*player*/) { } + virtual void OnLogout(Player* /*player*/) { } + + // Called when a player is created/deleted + virtual void OnCreate(Player* /*player*/) { } + virtual void OnDelete(uint64 /*guid*/) { } }; class GuildScript : public ScriptObject @@ -930,7 +938,11 @@ class ScriptMgr void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Channel* channel); 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); + void OnPlayerSpellCast(Player* player, Spell *spell, bool skipCheck); + void OnPlayerLogin(Player* player); + void OnPlayerLogout(Player* player); + void OnPlayerCreate(Player* player); + void OnPlayerDelete(uint64 guid); public: /* GuildScript */ void OnGuildAddMember(Guild *guild, Player *player, uint32& plRank); diff --git a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp index 4c76cc077d8..120341d96ee 100644 --- a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp @@ -471,8 +471,9 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket & recv_data) SendPacket(&data); std::string IP_str = GetRemoteAddress(); - sLog.outBasic("Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), name.c_str(), pNewChar->GetGUIDLow()); + sLog.outDetail("Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), name.c_str(), pNewChar->GetGUIDLow()); sLog.outChar("Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), name.c_str(), pNewChar->GetGUIDLow()); + sScriptMgr.OnPlayerCreate(pNewChar); delete pNewChar; // created only to call SaveToDB() } @@ -522,6 +523,7 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket & recv_data) std::string IP_str = GetRemoteAddress(); sLog.outDetail("Account: %d (IP: %s) Delete Character:[%s] (GUID: %u)",GetAccountId(),IP_str.c_str(),name.c_str(),GUID_LOPART(guid)); sLog.outChar("Account: %d (IP: %s) Delete Character:[%s] (GUID: %u)",GetAccountId(),IP_str.c_str(),name.c_str(),GUID_LOPART(guid)); + sScriptMgr.OnPlayerDelete(guid); if (sLog.IsOutCharDump()) // optimize GetPlayerDump call { @@ -801,6 +803,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder) m_playerLoading = false; + sScriptMgr.OnPlayerLogin(pCurrChar); delete holder; } diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index f1642641143..7a6502a0279 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -479,6 +479,7 @@ void WorldSession::LogoutPlayer(bool Save) CharacterDatabase.PExecute("UPDATE characters SET online = 0 WHERE account = '%u'", GetAccountId()); sLog.outDebug("SESSION: Sent SMSG_LOGOUT_COMPLETE Message"); + sScriptMgr.OnPlayerLogout(GetPlayer()); } m_playerLogout = false; |