diff options
author | silinoron <none@none> | 2010-09-04 12:49:39 -0700 |
---|---|---|
committer | silinoron <none@none> | 2010-09-04 12:49:39 -0700 |
commit | 0f997162ee5652fd2ff5d6916f461dabc5050f9c (patch) | |
tree | 288f4f87fdfef3c9ca17854cd008a2289a495ca6 | |
parent | 0f9fe8dbeb3990175cfac07a3b7349c9d8e668b7 (diff) |
Core/ScriptSystem: Refactor ScriptMgr::OnPlayerChat to no longer accept a C-style parameter of type void*.
Instead, use overloaded methods for the different types.
--HG--
branch : trunk
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 24 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 21 | ||||
-rw-r--r-- | src/server/scripts/World/chat_log.cpp | 146 |
3 files changed, 108 insertions, 83 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 47c67c2bb80..987580a7701 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1117,9 +1117,29 @@ void ScriptMgr::OnPlayerReputationChange(Player *player, uint32 factionID, int32 FOREACH_SCRIPT(PlayerScript)->OnReputationChange(player, factionID, standing, incremental); } -void ScriptMgr::OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, void* param) +void ScriptMgr::OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg) { - FOREACH_SCRIPT(PlayerScript)->OnChat(player, type, lang, msg, param); + FOREACH_SCRIPT(PlayerScript)->OnChat(player, type, lang, msg); +} + +void ScriptMgr::OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Player* receiver) +{ + FOREACH_SCRIPT(PlayerScript)->OnChat(player, type, lang, msg, receiver); +} + +void ScriptMgr::OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Group* group) +{ + FOREACH_SCRIPT(PlayerScript)->OnChat(player, type, lang, msg, group); +} + +void ScriptMgr::OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Guild* guild) +{ + FOREACH_SCRIPT(PlayerScript)->OnChat(player, type, lang, msg, guild); +} + +void ScriptMgr::OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Channel* channel) +{ + FOREACH_SCRIPT(PlayerScript)->OnChat(player, type, lang, msg, channel); } void ScriptMgr::OnPlayerEmote(Player* player, uint32 emote) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index c55e9a9385f..7b5b6d1ef55 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -675,15 +675,12 @@ public: // Called when a player's reputation changes (before it is actually changed) virtual void OnReputationChange(Player* /*player*/, uint32 /*factionID*/, int32& /*standing*/, bool /*incremental*/) { } - // Called when a player sends a chat message. param depends on the chat type: - // CHAT_MSG_WHISPER - Player*: receiver; - // CHAT_MSG_PARTY, CHAT_MSG_PARTY_LEADER - Group*: group of player; - // CHAT_MSG_OFFICER, CHAT_MSG_GUILD - Guild*: guild of player; - // CHAT_MSG_RAID, CHAT_MSG_RAID_LEADER, CHAT_MSG_RAID_WARNING - Group*: group of player; - // CHAT_MSG_BATTLEGROUND, CHAT_MSG_BATTLEGROUND_LEADER - Group*: group of player; - // CHAT_MSG_CHANNEL - Channel*: channel player speaks to; - // other - NULL. - virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string /*msg*/, void* /*param*/ = NULL) { } + // The following methods are called when a player sends a chat message + virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string /*msg*/) { } + virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string /*msg*/, Player* /*receiver*/) { } + virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string /*msg*/, Group* /*group*/) { } + virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string /*msg*/, Guild* /*guild*/) { } + virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string /*msg*/, Channel* /*channel*/) { } // Both of the below are called on emote opcodes virtual void OnEmote(Player* /*player*/, uint32 /*emote*/) { } @@ -887,7 +884,11 @@ class ScriptMgr void OnPlayerMoneyChanged(Player *player, int32& amount); void OnGivePlayerXP(Player *player, uint32& amount, Unit *victim); void OnPlayerReputationChange(Player *player, uint32 factionID, int32& standing, bool incremental); - void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, void* param = NULL); + void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg); + void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Player* receiver); + void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Group* group); + void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string msg, Guild* guild); + 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); diff --git a/src/server/scripts/World/chat_log.cpp b/src/server/scripts/World/chat_log.cpp index 54ce034e282..3b1d3af38bb 100644 --- a/src/server/scripts/World/chat_log.cpp +++ b/src/server/scripts/World/chat_log.cpp @@ -25,7 +25,7 @@ class ChatLogScript : public PlayerScript public: ChatLogScript() : PlayerScript("ChatLogScript") { } - void OnChat(Player* player, uint32 type, uint32 lang, std::string msg, void* param) + void OnChat(Player* player, uint32 type, uint32 lang, std::string msg) { switch (type) { @@ -52,113 +52,117 @@ public: sLog.outChat("[YELL] Player %s yells (language %u): %s", player->GetName(), lang, msg.c_str()); break; + } + } + + void OnChat(Player *player, uint32 type, uint32 lang, std::string msg, Player *receiver) + { + if (sWorld.getBoolConfig(CONFIG_CHATLOG_WHISPER)) + { + sLog.outChat("[WHISPER] Player %s tells %s: %s", + player->GetName(), receiver ? receiver->GetName() : "<unknown>", msg.c_str()); + } + } - case CHAT_MSG_WHISPER: - if (sWorld.getBoolConfig(CONFIG_CHATLOG_WHISPER)) - { - Player* pReceiver = reinterpret_cast <Player*> (param); - sLog.outChat("[WHISPER] Player %s tells %s: %s", - player->GetName(), pReceiver ? pReceiver->GetName() : "<unknown>", msg.c_str()); - } - break; - + void OnChat(Player *player, uint32 type, uint32 lang, std::string msg, Group *group) + { + switch (type) + { case CHAT_MSG_PARTY: if (sWorld.getBoolConfig(CONFIG_CHATLOG_PARTY)) { - Group* pGroup = reinterpret_cast <Group*> (param); sLog.outChat("[PARTY] Player %s tells group with leader %s: %s", - player->GetName(), pGroup ? pGroup->GetLeaderName() : "<unknown>", msg.c_str()); + player->GetName(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); } break; + case CHAT_MSG_RAID_LEADER: + if (sWorld.getBoolConfig(CONFIG_CHATLOG_RAID)) + sLog.outChat("[RAID] Leader player %s tells raid: %s", + player->GetName(), msg.c_str()); + break; + + case CHAT_MSG_RAID_WARNING: + if (sWorld.getBoolConfig(CONFIG_CHATLOG_RAID)) + sLog.outChat("[RAID] Leader player %s warns raid with: %s", + player->GetName(), msg.c_str()); + break; + case CHAT_MSG_PARTY_LEADER: if (sWorld.getBoolConfig(CONFIG_CHATLOG_PARTY)) sLog.outChat("[PARTY] Leader %s tells group: %s", player->GetName(), msg.c_str()); break; - case CHAT_MSG_GUILD: - { - Guild* pGuild = reinterpret_cast <Guild*> (param); - if (lang != LANG_ADDON && sWorld.getBoolConfig(CONFIG_CHATLOG_GUILD)) - { - sLog.outChat("[GUILD] Player %s tells guild %s: %s", - player->GetName(), pGuild ? pGuild->GetName().c_str() : "<unknown>", msg.c_str()); - } - else if (lang == LANG_ADDON && sWorld.getBoolConfig(CONFIG_CHATLOG_ADDON)) - { - sLog.outChat("[ADDON] Player %s sends to guild %s: %s", - player->GetName(), pGuild ? pGuild->GetName().c_str() : "<unknown>", msg.c_str()); - } - break; - } - - case CHAT_MSG_OFFICER: - if (sWorld.getBoolConfig(CONFIG_CHATLOG_GUILD)) - { - Guild* pGuild = reinterpret_cast <Guild*> (param); - sLog.outChat("[OFFICER] Player %s tells guild %s officers: %s", - player->GetName(), pGuild ? pGuild->GetName().c_str() : "<unknown>", msg.c_str()); - } + case CHAT_MSG_BATTLEGROUND_LEADER: + if (sWorld.getBoolConfig(CONFIG_CHATLOG_BGROUND)) + sLog.outChat("[RAID] Leader player %s tells battleground: %s", + player->GetName(), msg.c_str()); break; case CHAT_MSG_RAID: if (sWorld.getBoolConfig(CONFIG_CHATLOG_RAID)) { - Group* pGroup = reinterpret_cast <Group*> (param); sLog.outChat("[RAID] Player %s tells raid with leader %s: %s", - player->GetName(), pGroup ? pGroup->GetLeaderName() : "<unknown>", msg.c_str()); + player->GetName(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); } break; - case CHAT_MSG_RAID_LEADER: - if (sWorld.getBoolConfig(CONFIG_CHATLOG_RAID)) - sLog.outChat("[RAID] Leader player %s tells raid: %s", - player->GetName(), msg.c_str()); - break; - - case CHAT_MSG_RAID_WARNING: - if (sWorld.getBoolConfig(CONFIG_CHATLOG_RAID)) - sLog.outChat("[RAID] Leader player %s warns raid with: %s", - player->GetName(), msg.c_str()); - break; - case CHAT_MSG_BATTLEGROUND: if (sWorld.getBoolConfig(CONFIG_CHATLOG_BGROUND)) { - Group* pGroup = reinterpret_cast <Group*> (param); sLog.outChat("[BATTLEGROUND] Player %s tells battleground with leader %s: %s", - player->GetName(), pGroup ? pGroup->GetLeaderName() : "<unknown>", msg.c_str()); + player->GetName(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); } break; + } + } - case CHAT_MSG_BATTLEGROUND_LEADER: - if (sWorld.getBoolConfig(CONFIG_CHATLOG_BGROUND)) - sLog.outChat("[RAID] Leader player %s tells battleground: %s", - player->GetName(), msg.c_str()); + void OnChat(Player *player, uint32 type, uint32 lang, std::string msg, Guild *guild) + { + switch(type) + { + case CHAT_MSG_GUILD: + if (lang != LANG_ADDON && sWorld.getBoolConfig(CONFIG_CHATLOG_GUILD)) + { + sLog.outChat("[GUILD] Player %s tells guild %s: %s", + player->GetName(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); + } + else if (lang == LANG_ADDON && sWorld.getBoolConfig(CONFIG_CHATLOG_ADDON)) + { + sLog.outChat("[ADDON] Player %s sends to guild %s: %s", + player->GetName(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); + } break; - case CHAT_MSG_CHANNEL: - { - Channel* pChannel = reinterpret_cast <Channel*> (param); - bool isSystem = pChannel && - (pChannel->HasFlag(CHANNEL_FLAG_TRADE) || - pChannel->HasFlag(CHANNEL_FLAG_GENERAL) || - pChannel->HasFlag(CHANNEL_FLAG_CITY) || - pChannel->HasFlag(CHANNEL_FLAG_LFG)); - if (sWorld.getBoolConfig(CONFIG_CHATLOG_SYSCHAN) && isSystem) - sLog.outChat("[SYSCHAN] Player %s tells channel %s: %s", - player->GetName(), pChannel->GetName().c_str(), msg.c_str()); - else if (sWorld.getBoolConfig(CONFIG_CHATLOG_CHANNEL)) - sLog.outChat("[CHANNEL] Player %s tells channel %s: %s", - player->GetName(), pChannel ? pChannel->GetName().c_str() : "<unknown>", msg.c_str()); + case CHAT_MSG_OFFICER: + if (sWorld.getBoolConfig(CONFIG_CHATLOG_GUILD)) + { + sLog.outChat("[OFFICER] Player %s tells guild %s officers: %s", + player->GetName(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); + } break; - } } } + + void OnChat(Player *player, uint32 type, uint32 lang, std::string msg, Channel *channel) + { + bool isSystem = channel && + (channel->HasFlag(CHANNEL_FLAG_TRADE) || + channel->HasFlag(CHANNEL_FLAG_GENERAL) || + channel->HasFlag(CHANNEL_FLAG_CITY) || + channel->HasFlag(CHANNEL_FLAG_LFG)); + + if (sWorld.getBoolConfig(CONFIG_CHATLOG_SYSCHAN) && isSystem) + sLog.outChat("[SYSCHAN] Player %s tells channel %s: %s", + player->GetName(), channel->GetName().c_str(), msg.c_str()); + else if (sWorld.getBoolConfig(CONFIG_CHATLOG_CHANNEL)) + sLog.outChat("[CHANNEL] Player %s tells channel %s: %s", + player->GetName(), channel ? channel->GetName().c_str() : "<unknown>", msg.c_str()); + } }; void AddSC_chat_log() { - new ChatLogScript(); + new ChatLogScript; } |