diff options
| author | Wyrserth <43747507+Wyrserth@users.noreply.github.com> | 2019-06-16 19:52:13 +0200 |
|---|---|---|
| committer | Giacomo Pozzoni <giacomopoz@gmail.com> | 2019-06-16 19:52:13 +0200 |
| commit | ce3dcdcb1ad1887fb3a531aaea09482c12b5e4f3 (patch) | |
| tree | b4095b86f3a385a0e3e7d6ab6fef4c0e38c2ef16 | |
| parent | 14c2bdc5dac81f5f2b76d78b09c1224dbebcd8bc (diff) | |
Core/Commands: implement commands to look up a map/item/quest name for a given id (#23416)
* Core/Commands: implement commands to look up a map/item/quest name for a given id.
* Add entry to updates table.
* Rename 9999_99_99_99_auth.sql to 2019_06_16_00_auth.sql
* Add missed change, thanks jackpoz!
* Update auth_database.sql
| -rw-r--r-- | sql/base/auth_database.sql | 17 | ||||
| -rw-r--r-- | sql/updates/auth/3.3.5/2019_06_16_00_auth.sql | 10 | ||||
| -rw-r--r-- | src/server/game/Accounts/RBAC.h | 3 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_lookup.cpp | 153 |
4 files changed, 173 insertions, 10 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index c4025858da9..54120fbfa0d 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -770,6 +770,9 @@ INSERT INTO `rbac_linked_permissions` VALUES (196,871), (196,872), (196,873), +(196,875), +(196,876), +(196,877), (197,232), (197,236), (197,237), @@ -1647,7 +1650,10 @@ INSERT INTO `rbac_permissions` VALUES (871,'Command: debug instancespawn'), (872,'Command: server debug'), (873,'Command: reload creature_movement_override'), -(874,'Command: debug asan'); +(874,'Command: debug asan'), +(875,'Command: lookup map id'), +(876,'Command: lookup item id'), +(877,'Command: lookup quest id'); /*!40000 ALTER TABLE `rbac_permissions` ENABLE KEYS */; UNLOCK TABLES; @@ -1777,12 +1783,13 @@ INSERT INTO `updates` VALUES ('2018_09_06_00_auth.sql','309D21E0DF82ED8921F77EAFDE741F38AC32BB13','ARCHIVED','2018-09-06 00:00:00',0), ('2018_09_17_00_auth.sql','4DB671F0A4FA1A93AF28FB6426AF13DE72C7DA3D','ARCHIVED','2018-09-17 00:00:00',0), ('2018_12_30_00_auth.sql','680F4F9194FC37592041C2DB5B2B7006B14E836D','ARCHIVED','2018-12-30 00:00:00',0), -('2019_03_19_00_auth.sql','03BA8CFC60ACD5B874840A3E50F11CD2643730A0','ARCHIVED','2019-03-19 07:17:45',5), -('2019_04_15_00_auth.sql','EC67389946A24BFAA226B9DFCFEDB3BA095B4C42','ARCHIVED','2019-04-15 06:16:09',5), +('2019_03_19_00_auth.sql','03BA8CFC60ACD5B874840A3E50F11CD2643730A0','ARCHIVED','2019-03-19 07:17:45',0), +('2019_04_15_00_auth.sql','EC67389946A24BFAA226B9DFCFEDB3BA095B4C42','ARCHIVED','2019-04-15 06:16:09',0), ('2019_04_27_00_auth.sql','84B1EB9CC9B09BAF55E6295D202EC57D99B1B60E','ARCHIVED','2019-04-27 18:07:18',0), -('2019_05_15_00_auth.sql','8A7B96E66D689DA63380654142FF60A1EE938697','ARCHIVED','2019-05-15 06:13:20',5), +('2019_05_15_00_auth.sql','8A7B96E66D689DA63380654142FF60A1EE938697','ARCHIVED','2019-05-15 06:13:20',0), ('2019_06_06_00_auth.sql','6DE8159E04BEE7BA0A4A81D72D160EB74934B6A5','ARCHIVED','2019-06-06 18:09:54',0), -('2019_06_15_00_auth.sql','456B92D99FFD2E7B6CBF64F4C68555A42B24B298','ARCHIVED','2019-06-15 07:33:45',5); +('2019_06_15_00_auth.sql','456B92D99FFD2E7B6CBF64F4C68555A42B24B298','ARCHIVED','2019-06-15 07:33:45',0), +('2019_06_16_00_auth.sql','B14AED4D3387B56FF8C8161D3671750AEEAE0F2E','ARCHIVED','2019-06-15 23:32:12',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/auth/3.3.5/2019_06_16_00_auth.sql b/sql/updates/auth/3.3.5/2019_06_16_00_auth.sql new file mode 100644 index 00000000000..627e4dcab5d --- /dev/null +++ b/sql/updates/auth/3.3.5/2019_06_16_00_auth.sql @@ -0,0 +1,10 @@ +DELETE FROM `rbac_permissions` WHERE `id` IN (875, 876, 877); +INSERT INTO `rbac_permissions` (`id`, `name`) VALUES +(875, "Command: lookup map id"), +(876, "Command: lookup item id"), +(877, "Command: lookup quest id"); + +INSERT INTO `rbac_linked_permissions` (`id`, `linkedId`) VALUES +(196, 875), +(196, 876), +(196, 877); diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 72951e0f77c..d16fa0cd3f9 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -772,6 +772,9 @@ enum RBACPermissions RBAC_PERM_COMMAND_SERVER_DEBUG = 872, RBAC_PERM_COMMAND_RELOAD_CREATURE_MOVEMENT_OVERRIDE = 873, RBAC_PERM_COMMAND_DEBUG_ASAN = 874, + RBAC_PERM_COMMAND_LOOKUP_MAP_ID = 875, + RBAC_PERM_COMMAND_LOOKUP_ITEM_ID = 876, + RBAC_PERM_COMMAND_LOOKUP_QUEST_ID = 877, // // IF YOU ADD NEW PERMISSIONS, ADD THEM IN MASTER BRANCH AS WELL! // diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index cb82960c1cb..30587bebd7a 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -44,6 +44,18 @@ public: std::vector<ChatCommand> GetCommands() const override { + static std::vector<ChatCommand> lookupItemCommandTable = + { + { "id", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEM_ID, true, &HandleLookupItemIdCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEM, true, &HandleLookupItemCommand, "" }, + }; + + static std::vector<ChatCommand> lookupQuestCommandTable = + { + { "id", rbac::RBAC_PERM_COMMAND_LOOKUP_QUEST_ID, true, &HandleLookupQuestIdCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_LOOKUP_QUEST, true, &HandleLookupQuestCommand, "" }, + }; + static std::vector<ChatCommand> lookupPlayerCommandTable = { { "ip", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_IP, true, &HandleLookupPlayerIpCommand, "" }, @@ -57,23 +69,29 @@ public: { "", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, &HandleLookupSpellCommand, "" }, }; + static std::vector<ChatCommand> lookupMapCommandTable = + { + { "id", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL_ID, true, &HandleLookupMapIdCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, &HandleLookupMapCommand, "" }, + }; + static std::vector<ChatCommand> lookupCommandTable = { { "area", rbac::RBAC_PERM_COMMAND_LOOKUP_AREA, true, &HandleLookupAreaCommand, "" }, { "creature", rbac::RBAC_PERM_COMMAND_LOOKUP_CREATURE, true, &HandleLookupCreatureCommand, "" }, { "event", rbac::RBAC_PERM_COMMAND_LOOKUP_EVENT, true, &HandleLookupEventCommand, "" }, { "faction", rbac::RBAC_PERM_COMMAND_LOOKUP_FACTION, true, &HandleLookupFactionCommand, "" }, - { "item", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEM, true, &HandleLookupItemCommand, "" }, + { "item", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEM, true, nullptr, "", lookupItemCommandTable }, { "itemset", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEMSET, true, &HandleLookupItemSetCommand, "" }, { "object", rbac::RBAC_PERM_COMMAND_LOOKUP_OBJECT, true, &HandleLookupObjectCommand, "" }, - { "quest", rbac::RBAC_PERM_COMMAND_LOOKUP_QUEST, true, &HandleLookupQuestCommand, "" }, - { "player", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER, true, nullptr, "", lookupPlayerCommandTable }, + { "quest", rbac::RBAC_PERM_COMMAND_LOOKUP_QUEST, true, nullptr, "", lookupQuestCommandTable }, + { "player", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER, true, nullptr, "", lookupPlayerCommandTable }, { "skill", rbac::RBAC_PERM_COMMAND_LOOKUP_SKILL, true, &HandleLookupSkillCommand, "" }, - { "spell", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, nullptr, "", lookupSpellCommandTable }, + { "spell", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, nullptr, "", lookupSpellCommandTable }, { "taxinode", rbac::RBAC_PERM_COMMAND_LOOKUP_TAXINODE, true, &HandleLookupTaxiNodeCommand, "" }, { "tele", rbac::RBAC_PERM_COMMAND_LOOKUP_TELE, true, &HandleLookupTeleCommand, "" }, { "title", rbac::RBAC_PERM_COMMAND_LOOKUP_TITLE, true, &HandleLookupTitleCommand, "" }, - { "map", rbac::RBAC_PERM_COMMAND_LOOKUP_MAP, true, &HandleLookupMapCommand, "" }, + { "map", rbac::RBAC_PERM_COMMAND_LOOKUP_MAP, true, nullptr, "", lookupMapCommandTable }, }; static std::vector<ChatCommand> commandTable = @@ -471,6 +489,34 @@ public: return true; } + static bool HandleLookupItemIdCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 id = atoi((char*)args); + + if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(id)) + { + std::string name = itemTemplate->Name1; + + if (name.empty()) + { + handler->SendSysMessage(LANG_COMMAND_NOITEMFOUND); + return true; + } + + if (handler->GetSession()) + handler->PSendSysMessage(LANG_ITEM_LIST_CHAT, id, id, name.c_str()); + else + handler->PSendSysMessage(LANG_ITEM_LIST_CONSOLE, id, name.c_str()); + } + else + handler->SendSysMessage(LANG_COMMAND_NOITEMFOUND); + + return true; + } + static bool HandleLookupItemSetCommand(ChatHandler* handler, char const* args) { if (!*args) @@ -738,6 +784,56 @@ public: return true; } + static bool HandleLookupQuestIdCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 id = atoi((char*)args); + + // can be NULL at console call + Player* target = handler->getSelectedPlayerOrSelf(); + + if (Quest const* quest = sObjectMgr->GetQuestTemplate(id)) + { + std::string title = quest->GetTitle(); + if (title.empty()) + { + handler->SendSysMessage(LANG_COMMAND_NOQUESTFOUND); + return true; + } + + char const* statusStr = ""; + + if (target) + { + switch (target->GetQuestStatus(id)) + { + case QUEST_STATUS_COMPLETE: + statusStr = handler->GetTrinityString(LANG_COMMAND_QUEST_COMPLETE); + break; + case QUEST_STATUS_INCOMPLETE: + statusStr = handler->GetTrinityString(LANG_COMMAND_QUEST_ACTIVE); + break; + case QUEST_STATUS_REWARDED: + statusStr = handler->GetTrinityString(LANG_COMMAND_QUEST_REWARDED); + break; + default: + break; + } + } + + if (handler->GetSession()) + handler->PSendSysMessage(LANG_QUEST_LIST_CHAT, id, id, quest->GetQuestLevel(), title.c_str(), statusStr); + else + handler->PSendSysMessage(LANG_QUEST_LIST_CONSOLE, id, title.c_str(), statusStr); + } + else + handler->SendSysMessage(LANG_COMMAND_NOQUESTFOUND); + + return true; + } + static bool HandleLookupSkillCommand(ChatHandler* handler, char const* args) { if (!*args) @@ -1294,6 +1390,53 @@ public: return true; } + static bool HandleLookupMapIdCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 id = atoi((char*)args); + + if (MapEntry const* mapInfo = sMapStore.LookupEntry(id)) + { + uint8 locale = handler->GetSession() ? handler->GetSession()->GetSessionDbcLocale() : sWorld->GetDefaultDbcLocale(); + std::string name = mapInfo->name[locale]; + if (name.empty()) + { + handler->SendSysMessage(LANG_COMMAND_NOSPELLFOUND); + return true; + } + + std::ostringstream ss; + ss << id << " - [" << name << ']'; + + if (mapInfo->IsContinent()) + ss << handler->GetTrinityString(LANG_CONTINENT); + + switch (mapInfo->map_type) + { + case MAP_INSTANCE: + ss << handler->GetTrinityString(LANG_INSTANCE); + break; + case MAP_RAID: + ss << handler->GetTrinityString(LANG_RAID); + break; + case MAP_BATTLEGROUND: + ss << handler->GetTrinityString(LANG_BATTLEGROUND); + break; + case MAP_ARENA: + ss << handler->GetTrinityString(LANG_ARENA); + break; + } + + handler->SendSysMessage(ss.str().c_str()); + } + else + handler->SendSysMessage(LANG_COMMAND_NOMAPFOUND); + + return true; + } + static bool HandleLookupPlayerIpCommand(ChatHandler* handler, char const* args) { std::string ip; |
