From f0913b7da8bf9adcf3575b65ee2c0366a4ddb954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Gonz=C3=A1lez?= Date: Tue, 12 Feb 2019 17:19:27 -0300 Subject: [PATCH] feat(Command): Remove spy command from AC and make it a module (#1401) --- .../rev_1549462763029736000.sql | 4 + src/server/game/Miscellaneous/Language.h | 14 +- src/server/scripts/Commands/CMakeLists.txt | 1 - src/server/scripts/Commands/cs_spy.cpp | 281 ------------------ src/server/scripts/ScriptLoader.cpp | 2 - 5 files changed, 5 insertions(+), 297 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1549462763029736000.sql delete mode 100644 src/server/scripts/Commands/cs_spy.cpp diff --git a/data/sql/updates/pending_db_world/rev_1549462763029736000.sql b/data/sql/updates/pending_db_world/rev_1549462763029736000.sql new file mode 100644 index 000000000..1ba0d46f5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1549462763029736000.sql @@ -0,0 +1,4 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1549462763029736000'); + +DELETE FROM `trinity_string` WHERE `entry` BETWEEN 5062 AND 5071; +DELETE FROM `command` WHERE `name` IN ('spy follow', 'spy unfollow', 'spy groupfollow', 'spy groupunfollow', 'spy clear', 'spy status'); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index e8d71efb8..9148a8a8e 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1146,19 +1146,7 @@ enum TrinityStrings LANG_COMMAND_MUTEHISTORY_EMPTY = 5060, LANG_COMMAND_MUTEHISTORY_OUTPUT = 5061, - // Spy command - LANG_COMMAND_SPY_FOLLOWING = 5062, - LANG_COMMAND_SPY_UNFOLLOW = 5063, - LANG_COMMAND_SPY_ALREADY_FOLLOWED_BY = 5064, - LANG_COMMAND_SPY_FOLLOWING_GROUP = 5065, - LANG_COMMAND_SPY_UNFOLLOW_GROUP = 5066, - LANG_COMMAND_SPY_NOT_FOLLOWING_GROUP = 5067, - LANG_COMMAND_SPY_CLEARED = 5068, - LANG_COMMAND_SPY_LIST = 5069, - LANG_COMMAND_SPY_WHISPERS_PLAYER = 5070, - LANG_COMMAND_SPY_TELLS_GROUP = 5071, - - // Room for more Trinity strings 5072-9999 + // Room for more Trinity strings 5062-9999 // Level requirement notifications LANG_SAY_REQ = 6604, diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index 556e421c0..097be2b95 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -37,7 +37,6 @@ set(scripts_STAT_SRCS Commands/cs_quest.cpp Commands/cs_reload.cpp Commands/cs_reset.cpp - Commands/cs_spy.cpp Commands/cs_server.cpp Commands/cs_tele.cpp Commands/cs_ticket.cpp diff --git a/src/server/scripts/Commands/cs_spy.cpp b/src/server/scripts/Commands/cs_spy.cpp deleted file mode 100644 index 5a2aee703..000000000 --- a/src/server/scripts/Commands/cs_spy.cpp +++ /dev/null @@ -1,281 +0,0 @@ -#include "Player.h" -#include "ScriptMgr.h" -#include "Chat.h" -#include "Channel.h" -#include "Language.h" -#include "Group.h" - -// Maps to store followed players -std::map gmListening; -std::map gmListeningGroup; - -class chat_spy_playerscript : public PlayerScript -{ -public: - chat_spy_playerscript() : PlayerScript("chat_spy_playerscript") { } - - void OnChat(Player *sender, uint32 /*type*/, uint32 lang, std::string& msg, Player *receiver) - { - if (gmListening.size() > 0 && lang != LANG_ADDON) - { - // if the sender or the receiver is being followed - Player* gm = GetGmFromList(sender); - if (!gm) - gm = GetGmFromList(receiver); - - if (gm) - { - ChatHandler(gm->GetSession()).PSendSysMessage(LANG_COMMAND_SPY_WHISPERS_PLAYER, - sender->GetName().c_str(), receiver ? receiver->GetName().c_str() : "", msg.c_str()); - } - } - } - - void OnChat(Player* sender, uint32 /*type*/, uint32 lang, std::string& msg, Group* group) - { - if(gmListeningGroup.size() > 0 && lang != LANG_ADDON) - if(Player* gm = GetGmFromGroupList(group)) - ChatHandler(gm->GetSession()).PSendSysMessage(LANG_COMMAND_SPY_TELLS_GROUP, - sender->GetName().c_str(), msg.c_str()); - } - - Player* GetGmFromList(Player* from) - { - std::map::const_iterator itr = gmListening.find(from->GetGUIDLow()); - return itr != gmListening.end() ? sObjectMgr->GetPlayerByLowGUID(itr->second) : NULL; - } - - Player* GetGmFromGroupList(Group* group) - { - std::map::const_iterator itr = gmListeningGroup.find(group->GetLowGUID()); - return itr != gmListeningGroup.end() ? sObjectMgr->GetPlayerByLowGUID(itr->second) : NULL; - } -}; - -class chat_spy_commandscript : public CommandScript -{ -public: - chat_spy_commandscript() : CommandScript("chat_spy_commandscript") { } - - std::vector GetCommands() const override - { - static std::vector spyCommandTable = - { - { "follow", SEC_GAMEMASTER, false, &HandleSpyFollowCommand, ""}, - { "groupfollow", SEC_ADMINISTRATOR, false, &HandleSpyFollowGroupCommand, ""}, - { "unfollow", SEC_GAMEMASTER, false, &HandleSpyUnFollowCommand, ""}, - { "groupunfollow", SEC_ADMINISTRATOR, false, &HandleSpyUnFollowGroupCommand, ""}, - { "clear", SEC_GAMEMASTER, false, &HandleSpyClearCommand, ""}, - { "status", SEC_GAMEMASTER, false, &HandleSpyStatusCommand, ""} - }; - - static std::vector commandTable = - { - { "spy", SEC_GAMEMASTER, false, NULL, "", spyCommandTable} - }; - - return commandTable; - } - - static bool HandleSpyFollowCommand(ChatHandler* handler, const char* args) - { - if(!*args) - return false; - - char *cName = strtok ((char*)args, " "); - if(!cName) - return false; - - std::string pTarget = args; - if(!normalizePlayerName(pTarget)) - { - handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); - return true; - } - - if(Player* target = ObjectAccessor::FindPlayer(sObjectMgr->GetPlayerGUIDByName(pTarget.c_str()))) - { - std::map::const_iterator itr = gmListening.find(target->GetGUIDLow()); - if(itr != gmListening.end()) - { - if(Player* gm = sObjectMgr->GetPlayerByLowGUID(itr->second)) - { - handler->PSendSysMessage(LANG_COMMAND_SPY_ALREADY_FOLLOWED_BY, target->GetName().c_str(), gm->GetName().c_str()); - return true; - } - - gmListening[target->GetGUIDLow()] = handler->GetSession()->GetPlayer()->GetGUIDLow(); - handler->PSendSysMessage(LANG_COMMAND_SPY_FOLLOWING, target->GetName().c_str()); - } - } - else - handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); - - return true; - } - - static bool HandleSpyFollowGroupCommand(ChatHandler* handler, const char* args) - { - if(!*args) - return false; - - char *cName = strtok ((char*)args," "); - if(!cName) - return false; - - std::string pTarget = args; - if(!normalizePlayerName(pTarget)) - { - handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); - return true; - } - - if(Player* target = ObjectAccessor::FindPlayer(sObjectMgr->GetPlayerGUIDByName(pTarget.c_str()))) - { - if(Group* group = target->GetGroup()) - { - std::map::const_iterator itr = gmListeningGroup.find(group->GetLowGUID()); - if(itr != gmListeningGroup.end()) - { - if(Player* gm = sObjectMgr->GetPlayerByLowGUID(itr->second)) - { - handler->PSendSysMessage(LANG_COMMAND_SPY_ALREADY_FOLLOWED_BY, target->GetName().c_str(), gm->GetName().c_str()); - return true; - } - - gmListeningGroup[group->GetLowGUID()] = handler->GetSession()->GetPlayer()->GetGUIDLow(); - handler->PSendSysMessage(LANG_COMMAND_SPY_FOLLOWING_GROUP, target->GetName().c_str()); - } - } - else - handler->PSendSysMessage(LANG_NOT_IN_GROUP, target->GetName().c_str()); - } - else - handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); - - return true; - } - - static bool HandleSpyUnFollowCommand(ChatHandler* handler, const char* args) - { - if(!*args) - return false; - - char *cName = strtok ((char*)args," "); - if(!cName) - return false; - - std::string pTarget = args; - if(!normalizePlayerName(pTarget)) - { - handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); - return true; - } - - if(Player* target = ObjectAccessor::FindPlayer(sObjectMgr->GetPlayerGUIDByName(pTarget.c_str()))) - { - handler->PSendSysMessage(LANG_COMMAND_SPY_UNFOLLOW, cName); - if(gmListening.find(target->GetGUIDLow()) != gmListening.end()) - gmListening.erase(target->GetGUIDLow()); - } - else - handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); - return true; - } - - static bool HandleSpyUnFollowGroupCommand(ChatHandler* handler, const char* args) - { - if(!*args) - return false; - - char *cName = strtok ((char*)args," "); - if(!cName) - return false; - - std::string pTarget = args; - if(!normalizePlayerName(pTarget)) - { - handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); - return true; - } - - if(Player* target = ObjectAccessor::FindPlayer(sObjectMgr->GetPlayerGUIDByName(pTarget.c_str()))) - { - if(Group* group = target->GetGroup()) - { - if(gmListeningGroup.find(group->GetLowGUID()) != gmListening.end()) - { - gmListeningGroup.erase(group->GetLowGUID()); - handler->PSendSysMessage(LANG_COMMAND_SPY_UNFOLLOW_GROUP, cName); - } - else - handler->PSendSysMessage(LANG_COMMAND_SPY_NOT_FOLLOWING_GROUP, cName); - } - else - handler->PSendSysMessage(LANG_NOT_IN_GROUP, target->GetName().c_str()); - } - else - handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); - return true; - } - - static bool HandleSpyClearCommand(ChatHandler* handler, const char* /*args*/) - { - gmListening.clear(); - handler->SendSysMessage(LANG_COMMAND_SPY_CLEARED); - return true; - } - - static bool HandleSpyStatusCommand(ChatHandler* handler, const char* /*args*/) - { - uint32 guidlow = handler->GetSession()->GetPlayer()->GetGUIDLow(); - std::map::iterator next; - handler->SendSysMessage(LANG_COMMAND_SPY_LIST); - - for(std::map::iterator itr = gmListening.begin(); itr != gmListening.end(); itr = next) - { - // There's the possibility that itr is erased, so we save it - next = itr; - ++next; - if(itr->second == guidlow) - { - if(Player* target = ObjectAccessor::FindPlayer(itr->first)) - handler->PSendSysMessage("%s", target->GetName().c_str()); - else // clear offline players - gmListening.erase(itr); - } - } - - return true; - } - -}; - -class chat_spy_logout_cleaner : public PlayerScript -{ -public: - chat_spy_logout_cleaner() : PlayerScript("chat_spy_logout_cleaner") { } - - void OnLogout(Player* player) - { - if(player && player->IsGameMaster()) - { - uint32 guidlow = player->GetGUIDLow(); - std::map::iterator next; - for(std::map::iterator itr = gmListening.begin(); itr != gmListening.end(); itr = next) - { - next = itr; // Save a reference to the next one - ++next; - if(itr->second == guidlow) - gmListening.erase(itr); - } - } - } -}; - -void AddSC_spy_commandscript() -{ - new chat_spy_playerscript(); - new chat_spy_commandscript(); - new chat_spy_logout_cleaner(); -} diff --git a/src/server/scripts/ScriptLoader.cpp b/src/server/scripts/ScriptLoader.cpp index 8c4195ab2..c37a0a078 100644 --- a/src/server/scripts/ScriptLoader.cpp +++ b/src/server/scripts/ScriptLoader.cpp @@ -55,7 +55,6 @@ void AddSC_reload_commandscript(); void AddSC_reset_commandscript(); void AddSC_server_commandscript(); void AddSC_spectator_commandscript(); -void AddSC_spy_commandscript(); void AddSC_tele_commandscript(); void AddSC_ticket_commandscript(); void AddSC_titles_commandscript(); @@ -632,7 +631,6 @@ void AddCommandScripts() AddSC_reload_commandscript(); AddSC_reset_commandscript(); AddSC_spectator_commandscript(); - AddSC_spy_commandscript(); AddSC_tele_commandscript(); AddSC_ticket_commandscript(); AddSC_titles_commandscript();