aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWyrserth <43747507+Wyrserth@users.noreply.github.com>2019-06-16 19:52:13 +0200
committerShauren <shauren.trinity@gmail.com>2021-12-11 14:12:54 +0100
commitae43820ca0db692d1ff176b216ab641cc4760d49 (patch)
treeb1ec0f6220496b81c08e5630d3143f8e70c28d66
parent01be9f44af0687f03c34f0221dc285ec22803969 (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 (cherry picked from commit ce3dcdcb1ad1887fb3a531aaea09482c12b5e4f3)
-rw-r--r--sql/base/auth_database.sql7
-rw-r--r--sql/updates/auth/master/2019_06_16_00_auth.sql10
-rw-r--r--sql/updates/world/master/2021_12_11_12_world.sql3
-rw-r--r--src/server/game/Miscellaneous/Language.h3
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp170
5 files changed, 189 insertions, 4 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index a613a59c755..a42fd4ef9ef 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -1245,6 +1245,9 @@ INSERT INTO `rbac_linked_permissions` VALUES
(196,871),
(196,872),
(196,873),
+(196,875),
+(196,876),
+(196,877),
(196,881),
(196,882),
(197,232),
@@ -2155,6 +2158,9 @@ INSERT INTO `rbac_permissions` VALUES
(872,'Command: server debug'),
(873,'Command: reload creature_movement_override'),
(874,'Command: debug asan'),
+(875,'Command: lookup map id'),
+(876,'Command: lookup item id'),
+(877,'Command: lookup quest id'),
(881,'Command: reload vehicle_template'),
(882,'Command: reload spell_script_names');
/*!40000 ALTER TABLE `rbac_permissions` ENABLE KEYS */;
@@ -2393,6 +2399,7 @@ INSERT INTO `updates` VALUES
('2019_06_08_01_auth.sql','8165B1B787E3ECF0C8C0AD2D641513270977ABB4','ARCHIVED','2019-06-04 16:51:31',0),
('2019_06_08_02_auth.sql','B39DCBD902290700A81C9D028F54B58601C19A99','ARCHIVED','2019-06-05 16:26:31',0),
('2019_06_08_03_auth.sql','F483B657015D39D4F63E3905C27C3AA48241AB03','ARCHIVED','2019-06-08 17:14:21',0),
+('2019_06_16_00_auth.sql','B14AED4D3387B56FF8C8161D3671750AEEAE0F2E','ARCHIVED','2019-06-15 23:32:12',0),
('2019_07_14_00_auth.sql','94C2B877BD906538E1E008350BEA8D8B58E0A158','ARCHIVED','2019-07-14 19:22:08',0),
('2019_07_15_00_auth.sql','3649248104CFEC70553016273069A9AE744798E3','ARCHIVED','2019-07-15 19:22:08',0),
('2019_07_26_00_auth.sql','DC9D0651602AE78B1243B40555A1A7B8447D01B2','ARCHIVED','2019-07-26 18:21:34',0),
diff --git a/sql/updates/auth/master/2019_06_16_00_auth.sql b/sql/updates/auth/master/2019_06_16_00_auth.sql
new file mode 100644
index 00000000000..627e4dcab5d
--- /dev/null
+++ b/sql/updates/auth/master/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/sql/updates/world/master/2021_12_11_12_world.sql b/sql/updates/world/master/2021_12_11_12_world.sql
new file mode 100644
index 00000000000..811e1f046e5
--- /dev/null
+++ b/sql/updates/world/master/2021_12_11_12_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `trinity_string` WHERE `entry`=5088;
+INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES
+(5088,'[Scenario]');
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 81423034476..7b69fd52872 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -1144,8 +1144,9 @@ enum TrinityStrings
LANG_NPCINFO_UNIT_FIELD_FLAGS_3 = 5085,
LANG_NPCINFO_NPC_FLAGS = 5086,
LANG_NPCINFO_PHASE_IDS = 5087,
+ LANG_SCENARIO = 5088,
- // Room for more Trinity strings 5088-6603
+ // Room for more Trinity strings 5089-6603
// Level requirement notifications
LANG_SAY_REQ = 6604,
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index 608d4b3408a..55cc08587c8 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -45,6 +45,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, "" },
@@ -58,23 +70,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, "" },
+ { "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 },
{ "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 =
@@ -443,6 +461,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->GetName(handler->GetSessionDbcLocale());
+
+ 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)
@@ -740,6 +786,71 @@ 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->GetLogTitle();
+ 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())
+ {
+ int32 maxLevel = 0;
+ if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(quest->GetContentTuningId(),
+ handler->GetSession()->GetPlayer()->m_playerData->CtrOptions->ContentTuningConditionMask))
+ maxLevel = questLevels->MaxLevel;
+
+ int32 scalingFactionGroup = 0;
+ if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(quest->GetContentTuningId()))
+ scalingFactionGroup = contentTuning->GetScalingFactionGroup();
+
+ handler->PSendSysMessage(LANG_QUEST_LIST_CHAT, id, id,
+ handler->GetSession()->GetPlayer()->GetQuestLevel(quest),
+ handler->GetSession()->GetPlayer()->GetQuestMinLevel(quest),
+ maxLevel, scalingFactionGroup,
+ 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)
@@ -1282,6 +1393,9 @@ public:
case MAP_ARENA:
ss << handler->GetTrinityString(LANG_ARENA);
break;
+ case MAP_SCENARIO:
+ ss << handler->GetTrinityString(LANG_SCENARIO);
+ break;
}
handler->SendSysMessage(ss.str().c_str());
@@ -1297,6 +1411,56 @@ 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))
+ {
+ LocaleConstant locale = handler->GetSession() ? handler->GetSession()->GetSessionDbcLocale() : sWorld->GetDefaultDbcLocale();
+ std::string name = mapInfo->MapName[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->MapType)
+ {
+ 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;
+ case MAP_SCENARIO:
+ ss << handler->GetTrinityString(LANG_SCENARIO);
+ 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;