From fa12cf63bce2c2db10bd671ea2d64d65df2cabf0 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 20 Jan 2022 10:37:57 -0500 Subject: [PATCH] Core/Commands: implement commands to look up a map/item/quest name for a given id Port From (https://github.com/TrinityCore/TrinityCore/commit/ae43820ca0db692d1ff176b216ab641cc4760d49) --- Source/Game/Chat/Commands/LookupCommands.cs | 715 +++++++++++--------- 1 file changed, 385 insertions(+), 330 deletions(-) diff --git a/Source/Game/Chat/Commands/LookupCommands.cs b/Source/Game/Chat/Commands/LookupCommands.cs index 8a25fc2c8..f8f4bcbad 100644 --- a/Source/Game/Chat/Commands/LookupCommands.cs +++ b/Source/Game/Chat/Commands/LookupCommands.cs @@ -33,12 +33,9 @@ namespace Game.Chat static int maxResults = 50; [Command("area", RBACPermissions.CommandLookupArea, true)] - static bool Area(CommandHandler handler, StringArguments args) + static bool HandleLookupAreaCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - - string namePart = args.NextString().ToLower(); + namePart = namePart.ToLower(); bool found = false; uint count = 0; @@ -97,12 +94,9 @@ namespace Game.Chat } [Command("creature", RBACPermissions.CommandLookupCreature, true)] - static bool Creature(CommandHandler handler, StringArguments args) + static bool HandleLookupCreatureCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - - string namePart = args.NextString().ToLower(); + namePart = namePart.ToLower(); bool found = false; uint count = 0; @@ -169,12 +163,9 @@ namespace Game.Chat } [Command("event", RBACPermissions.CommandLookupEvent, true)] - static bool Event(CommandHandler handler, StringArguments args) + static bool HandleLookupEventCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - - string namePart = args.NextString().ToLower(); + namePart = namePart.ToLower(); bool found = false; uint count = 0; @@ -217,15 +208,12 @@ namespace Game.Chat } [Command("faction", RBACPermissions.CommandLookupFaction, true)] - static bool Faction(CommandHandler handler, StringArguments args) + static bool HandleLookupFactionCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - // Can be NULL at console call Player target = handler.GetSelectedPlayer(); - string namePart = args.NextString().ToLower(); + namePart = namePart.ToLower(); bool found = false; uint count = 0; @@ -309,56 +297,10 @@ namespace Game.Chat return true; } - [Command("item", RBACPermissions.CommandLookupItem, true)] - static bool Item(CommandHandler handler, StringArguments args) - { - if (args.Empty()) - return false; - - string namePart = args.NextString(""); - - bool found = false; - uint count = 0; - - // Search in ItemSparse - var its = Global.ObjectMgr.GetItemTemplates(); - foreach (var template in its.Values) - { - string name = template.GetName(handler.GetSessionDbcLocale()); - if (string.IsNullOrEmpty(name)) - continue; - - if (name.Like(namePart)) - { - if (maxResults != 0 && count++ == maxResults) - { - handler.SendSysMessage(CypherStrings.CommandLookupMaxResults, maxResults); - return true; - } - - if (handler.GetSession() != null) - handler.SendSysMessage(CypherStrings.ItemListChat, template.GetId(), template.GetId(), name); - else - handler.SendSysMessage(CypherStrings.ItemListConsole, template.GetId(), name); - - if (!found) - found = true; - } - } - - if (!found) - handler.SendSysMessage(CypherStrings.CommandNoitemfound); - - return true; - } - [Command("itemset", RBACPermissions.CommandLookupItemset, true)] - static bool ItemSet(CommandHandler handler, StringArguments args) + static bool HandleLookupItemSetCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - - string namePart = args.NextString().ToLower(); + namePart = namePart.ToLower(); bool found = false; uint count = 0; @@ -413,13 +355,8 @@ namespace Game.Chat } [Command("object", RBACPermissions.CommandLookupObject, true)] - static bool Object(CommandHandler handler, StringArguments args) + static bool HandleLookupObjectCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - - string namePart = args.NextString(); - bool found = false; uint count = 0; @@ -484,165 +421,12 @@ namespace Game.Chat return true; } - [Command("quest", RBACPermissions.CommandLookupQuest, true)] - static bool Quest(CommandHandler handler, StringArguments args) - { - if (args.Empty()) - return false; - - // can be NULL at console call - Player target = handler.GetSelectedPlayer(); - - string namePart = args.NextString().ToLower(); - - bool found = false; - uint count = 0; - - var qTemplates = Global.ObjectMgr.GetQuestTemplates(); - foreach (var qInfo in qTemplates.Values) - { - int localeIndex = handler.GetSessionDbLocaleIndex(); - QuestTemplateLocale questLocale = Global.ObjectMgr.GetQuestLocale(qInfo.Id); - if (questLocale != null) - { - if (questLocale.LogTitle.Length > localeIndex && !questLocale.LogTitle[localeIndex].IsEmpty()) - { - string title = questLocale.LogTitle[localeIndex]; - - if (title.Like(namePart)) - { - if (maxResults != 0 && count++ == maxResults) - { - handler.SendSysMessage(CypherStrings.CommandLookupMaxResults, maxResults); - return true; - } - - string statusStr = ""; - - if (target) - { - switch (target.GetQuestStatus(qInfo.Id)) - { - case QuestStatus.Complete: - statusStr = handler.GetCypherString(CypherStrings.CommandQuestComplete); - break; - case QuestStatus.Incomplete: - statusStr = handler.GetCypherString(CypherStrings.CommandQuestActive); - break; - case QuestStatus.Rewarded: - statusStr = handler.GetCypherString(CypherStrings.CommandQuestRewarded); - break; - default: - break; - } - } - - if (handler.GetSession() != null) - { - int maxLevel = 0; - var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); - if (questLevels.HasValue) - maxLevel = questLevels.Value.MaxLevel; - - int scalingFactionGroup = 0; - ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(qInfo.ContentTuningId); - if (contentTuning != null) - scalingFactionGroup = contentTuning.GetScalingFactionGroup(); - - handler.SendSysMessage(CypherStrings.QuestListChat, qInfo.Id, qInfo.Id, - handler.GetSession().GetPlayer().GetQuestLevel(qInfo), - handler.GetSession().GetPlayer().GetQuestMinLevel(qInfo), - maxLevel, scalingFactionGroup, - title, statusStr); - } - else - handler.SendSysMessage(CypherStrings.QuestListConsole, qInfo.Id, title, statusStr); - - if (!found) - found = true; - - continue; - } - } - } - - string _title = qInfo.LogTitle; - if (string.IsNullOrEmpty(_title)) - continue; - - if (_title.Like(namePart)) - { - if (maxResults != 0 && count++ == maxResults) - { - handler.SendSysMessage(CypherStrings.CommandLookupMaxResults, maxResults); - return true; - } - - string statusStr = ""; - - if (target) - { - QuestStatus status = target.GetQuestStatus(qInfo.Id); - - switch (status) - { - case QuestStatus.Complete: - statusStr = handler.GetCypherString(CypherStrings.CommandQuestComplete); - break; - case QuestStatus.Incomplete: - statusStr = handler.GetCypherString(CypherStrings.CommandQuestActive); - break; - case QuestStatus.Rewarded: - statusStr = handler.GetCypherString(CypherStrings.CommandQuestRewarded); - break; - default: - break; - } - } - - if (handler.GetSession() != null) - { - int maxLevel = 0; - var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); - if (questLevels.HasValue) - maxLevel = questLevels.Value.MaxLevel; - - int scalingFactionGroup = 0; - ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(qInfo.ContentTuningId); - if (contentTuning != null) - scalingFactionGroup = contentTuning.GetScalingFactionGroup(); - - handler.SendSysMessage(CypherStrings.QuestListChat, qInfo.Id, qInfo.Id, - handler.GetSession().GetPlayer().GetQuestLevel(qInfo), - handler.GetSession().GetPlayer().GetQuestMinLevel(qInfo), - maxLevel, scalingFactionGroup, - _title, statusStr); - } - else - handler.SendSysMessage(CypherStrings.QuestListConsole, qInfo.Id, _title, statusStr); - - if (!found) - found = true; - } - } - - if (!found) - handler.SendSysMessage(CypherStrings.CommandNoquestfound); - - return true; - } - [Command("skill", RBACPermissions.CommandLookupSkill, true)] - static bool Skill(CommandHandler handler, StringArguments args) + static bool HandleLookupSkillCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - // can be NULL in console call Player target = handler.GetSelectedPlayer(); - string namePart = args.NextString(); - bool found = false; uint count = 0; // Search in SkillLine.dbc @@ -710,13 +494,8 @@ namespace Game.Chat } [Command("taxinode", RBACPermissions.CommandLookupTaxinode, true)] - static bool TaxiNode(CommandHandler handler, StringArguments args) + static bool HandleLookupTaxiNodeCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - - string namePart = args.NextString(); - bool found = false; uint count = 0; Locale locale = handler.GetSessionDbcLocale(); @@ -756,15 +535,9 @@ namespace Game.Chat } [Command("tele", RBACPermissions.CommandLookupTele, true)] - static bool Tele(CommandHandler handler, StringArguments args) + static bool HandleLookupTeleCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - { - handler.SendSysMessage(CypherStrings.CommandTeleParameter); - return false; - } - - string namePart = args.NextString().ToLower(); + namePart = namePart.ToLower(); StringBuilder reply = new(); uint count = 0; @@ -799,19 +572,14 @@ namespace Game.Chat } [Command("title", RBACPermissions.CommandLookupTitle, true)] - static bool Title(CommandHandler handler, StringArguments args) + static bool HandleLookupTitleCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - // can be NULL in console call Player target = handler.GetSelectedPlayer(); // title name have single string arg for player name string targetName = target ? target.GetName() : "NAME"; - string namePart = args.NextString(); - uint counter = 0; // Counter for figure out that we found smth. // Search in CharTitles.dbc foreach (var titleInfo in CliDB.CharTitlesStorage.Values) @@ -875,56 +643,169 @@ namespace Game.Chat return true; } - [Command("map", RBACPermissions.CommandLookupMap, true)] - static bool Map(CommandHandler handler, StringArguments args) + [CommandGroup("item", RBACPermissions.CommandLookupItem, true)] + class ItemCommandGroup { - if (args.Empty()) - return false; - - string namePart = args.NextString(); - - uint counter = 0; - - // search in Map.dbc - foreach (var mapInfo in CliDB.MapStorage.Values) + [Command("", RBACPermissions.CommandLookupItem, true)] + static bool HandleLookupItemCommand(CommandHandler handler, string namePart) { - Locale locale = handler.GetSessionDbcLocale(); - string name = mapInfo.MapName[locale]; - if (string.IsNullOrEmpty(name)) - continue; + bool found = false; + uint count = 0; - if (!name.Like(namePart) && handler.GetSession()) + // Search in ItemSparse + var its = Global.ObjectMgr.GetItemTemplates(); + foreach (var template in its.Values) { - locale = 0; - for (; locale < Locale.Total; ++locale) + string name = template.GetName(handler.GetSessionDbcLocale()); + if (string.IsNullOrEmpty(name)) + continue; + + if (name.Like(namePart)) { - if (locale == handler.GetSessionDbcLocale()) - continue; + if (maxResults != 0 && count++ == maxResults) + { + handler.SendSysMessage(CypherStrings.CommandLookupMaxResults, maxResults); + return true; + } - name = mapInfo.MapName[locale]; - if (name.IsEmpty()) - continue; + if (handler.GetSession() != null) + handler.SendSysMessage(CypherStrings.ItemListChat, template.GetId(), template.GetId(), name); + else + handler.SendSysMessage(CypherStrings.ItemListConsole, template.GetId(), name); - if (name.Like(namePart)) - break; + if (!found) + found = true; } } - if (locale < Locale.Total) - { - if (maxResults != 0 && counter == maxResults) + if (!found) + handler.SendSysMessage(CypherStrings.CommandNoitemfound); + + return true; + } + + [Command("id", RBACPermissions.CommandLookupItemId, true)] + static bool HandleLookupItemIdCommand(CommandHandler handler, uint id) + { + ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(id); + if (itemTemplate != null) + { + string name = itemTemplate.GetName(handler.GetSessionDbcLocale()); + + if (name.IsEmpty()) { - handler.SendSysMessage(CypherStrings.CommandLookupMaxResults, maxResults); + handler.SendSysMessage(CypherStrings.CommandNoitemfound); + return true; + } + + if (handler.GetSession()) + handler.SendSysMessage(CypherStrings.ItemListChat, id, id, name); + else + handler.SendSysMessage(CypherStrings.ItemListConsole, id, name); + } + else + handler.SendSysMessage(CypherStrings.CommandNoitemfound); + + return true; + } + } + + [CommandGroup("map", RBACPermissions.CommandLookupMap, true)] + class MapCommandGroup + { + [Command("", RBACPermissions.CommandLookupMap, true)] + static bool HandleLookupMapCommand(CommandHandler handler, string namePart) + { + uint counter = 0; + + // search in Map.dbc + foreach (var mapInfo in CliDB.MapStorage.Values) + { + Locale locale = handler.GetSessionDbcLocale(); + string name = mapInfo.MapName[locale]; + if (string.IsNullOrEmpty(name)) + continue; + + if (!name.Like(namePart) && handler.GetSession()) + { + locale = 0; + for (; locale < Locale.Total; ++locale) + { + if (locale == handler.GetSessionDbcLocale()) + continue; + + name = mapInfo.MapName[locale]; + if (name.IsEmpty()) + continue; + + if (name.Like(namePart)) + break; + } + } + + if (locale < Locale.Total) + { + if (maxResults != 0 && counter == maxResults) + { + handler.SendSysMessage(CypherStrings.CommandLookupMaxResults, maxResults); + return true; + } + + StringBuilder ss = new(); + ss.Append(mapInfo.Id + " - [" + name + ']'); + + if (mapInfo.IsContinent()) + ss.Append(handler.GetCypherString(CypherStrings.Continent)); + + switch (mapInfo.InstanceType) + { + case MapTypes.Instance: + ss.Append(handler.GetCypherString(CypherStrings.Instance)); + break; + case MapTypes.Raid: + ss.Append(handler.GetCypherString(CypherStrings.Raid)); + break; + case MapTypes.Battleground: + ss.Append(handler.GetCypherString(CypherStrings.Battleground)); + break; + case MapTypes.Arena: + ss.Append(handler.GetCypherString(CypherStrings.Arena)); + break; + } + + handler.SendSysMessage(ss.ToString()); + + ++counter; + } + } + + if (counter == 0) + handler.SendSysMessage(CypherStrings.CommandNomapfound); + + return true; + } + + [Command("", RBACPermissions.CommandLookupMap, true)] + static bool HandleLookupMapIdCommand(CommandHandler handler, uint id) + { + var mapInfo = CliDB.MapStorage.LookupByKey(id); + if (mapInfo != null) + { + Locale locale = handler.GetSession() ? handler.GetSession().GetSessionDbcLocale() : Global.WorldMgr.GetDefaultDbcLocale(); + string name = mapInfo.MapName[locale]; + if (name.IsEmpty()) + { + handler.SendSysMessage(CypherStrings.CommandNomapfound); return true; } StringBuilder ss = new(); - ss.Append(mapInfo.Id + " - [" + name + ']'); + ss.Append($"{id} - [{name}]"); if (mapInfo.IsContinent()) ss.Append(handler.GetCypherString(CypherStrings.Continent)); - switch (mapInfo.InstanceType) + switch ((MapTypes)mapInfo.MapType) { case MapTypes.Instance: ss.Append(handler.GetCypherString(CypherStrings.Instance)); @@ -938,46 +819,34 @@ namespace Game.Chat case MapTypes.Arena: ss.Append(handler.GetCypherString(CypherStrings.Arena)); break; + case MapTypes.Scenario: + ss.Append(handler.GetCypherString(CypherStrings.Scenario)); + break; } handler.SendSysMessage(ss.ToString()); - - ++counter; } + else + handler.SendSysMessage(CypherStrings.CommandNomapfound); + + return true; } - - if (counter == 0) - handler.SendSysMessage(CypherStrings.CommandNomapfound); - - return true; } [CommandGroup("player", RBACPermissions.CommandLookupPlayer, true)] class PlayerCommandGroup { [Command("ip", RBACPermissions.CommandLookupPlayerIp)] - static bool IP(CommandHandler handler, StringArguments args) + static bool HandleLookupPlayerIpCommand(CommandHandler handler, string ip, int limit = -1) { - string ip; - int limit; - string limitStr; - Player target = handler.GetSelectedPlayer(); - if (args.Empty()) + if (ip.IsEmpty()) { // NULL only if used from console if (!target || target == handler.GetSession().GetPlayer()) return false; ip = target.GetSession().GetRemoteAddress(); - limit = -1; - } - else - { - ip = args.NextString(); - limitStr = args.NextString(); - if (!int.TryParse(limitStr, out limit)) - limit = -1; } PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_BY_IP); @@ -986,32 +855,16 @@ namespace Game.Chat } [Command("account", RBACPermissions.CommandLookupPlayerAccount)] - static bool Account(CommandHandler handler, StringArguments args) + static bool HandleLookupPlayerAccountCommand(CommandHandler handler, string account, int limit = -1) { - if (args.Empty()) - return false; - - string account = args.NextString(); - string limitStr = args.NextString(); - if (!int.TryParse(limitStr, out int limit)) - limit = -1; - PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_LIST_BY_NAME); stmt.AddValue(0, account); return LookupPlayerSearchCommand(DB.Login.Query(stmt), limit, handler); } [Command("email", RBACPermissions.CommandLookupPlayerEmail)] - static bool Email(CommandHandler handler, StringArguments args) + static bool HandleLookupPlayerEmailCommand(CommandHandler handler, string email, int limit = -1) { - if (args.Empty()) - return false; - - string email = args.NextString(); - string limitStr = args.NextString(); - if (!int.TryParse(limitStr, out int limit)) - limit = -1; - PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_LIST_BY_EMAIL); stmt.AddValue(0, email); return LookupPlayerSearchCommand(DB.Login.Query(stmt), limit, handler); @@ -1068,20 +921,227 @@ namespace Game.Chat } } + [CommandGroup("quest", RBACPermissions.CommandLookupQuest, true)] + class QuestCommandGroup + { + [Command("", RBACPermissions.CommandLookupQuest, true)] + static bool HandleLookupQuestCommand(CommandHandler handler, string namePart) + { + // can be NULL at console call + Player target = handler.GetSelectedPlayer(); + + namePart = namePart.ToLower(); + + bool found = false; + uint count = 0; + + var qTemplates = Global.ObjectMgr.GetQuestTemplates(); + foreach (var qInfo in qTemplates.Values) + { + int localeIndex = handler.GetSessionDbLocaleIndex(); + QuestTemplateLocale questLocale = Global.ObjectMgr.GetQuestLocale(qInfo.Id); + if (questLocale != null) + { + if (questLocale.LogTitle.Length > localeIndex && !questLocale.LogTitle[localeIndex].IsEmpty()) + { + string title = questLocale.LogTitle[localeIndex]; + + if (title.Like(namePart)) + { + if (maxResults != 0 && count++ == maxResults) + { + handler.SendSysMessage(CypherStrings.CommandLookupMaxResults, maxResults); + return true; + } + + string statusStr = ""; + + if (target) + { + switch (target.GetQuestStatus(qInfo.Id)) + { + case QuestStatus.Complete: + statusStr = handler.GetCypherString(CypherStrings.CommandQuestComplete); + break; + case QuestStatus.Incomplete: + statusStr = handler.GetCypherString(CypherStrings.CommandQuestActive); + break; + case QuestStatus.Rewarded: + statusStr = handler.GetCypherString(CypherStrings.CommandQuestRewarded); + break; + default: + break; + } + } + + if (handler.GetSession() != null) + { + int maxLevel = 0; + var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (questLevels.HasValue) + maxLevel = questLevels.Value.MaxLevel; + + int scalingFactionGroup = 0; + ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(qInfo.ContentTuningId); + if (contentTuning != null) + scalingFactionGroup = contentTuning.GetScalingFactionGroup(); + + handler.SendSysMessage(CypherStrings.QuestListChat, qInfo.Id, qInfo.Id, + handler.GetSession().GetPlayer().GetQuestLevel(qInfo), + handler.GetSession().GetPlayer().GetQuestMinLevel(qInfo), + maxLevel, scalingFactionGroup, + title, statusStr); + } + else + handler.SendSysMessage(CypherStrings.QuestListConsole, qInfo.Id, title, statusStr); + + if (!found) + found = true; + + continue; + } + } + } + + string _title = qInfo.LogTitle; + if (string.IsNullOrEmpty(_title)) + continue; + + if (_title.Like(namePart)) + { + if (maxResults != 0 && count++ == maxResults) + { + handler.SendSysMessage(CypherStrings.CommandLookupMaxResults, maxResults); + return true; + } + + string statusStr = ""; + + if (target) + { + QuestStatus status = target.GetQuestStatus(qInfo.Id); + + switch (status) + { + case QuestStatus.Complete: + statusStr = handler.GetCypherString(CypherStrings.CommandQuestComplete); + break; + case QuestStatus.Incomplete: + statusStr = handler.GetCypherString(CypherStrings.CommandQuestActive); + break; + case QuestStatus.Rewarded: + statusStr = handler.GetCypherString(CypherStrings.CommandQuestRewarded); + break; + default: + break; + } + } + + if (handler.GetSession() != null) + { + int maxLevel = 0; + var questLevels = Global.DB2Mgr.GetContentTuningData(qInfo.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (questLevels.HasValue) + maxLevel = questLevels.Value.MaxLevel; + + int scalingFactionGroup = 0; + ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(qInfo.ContentTuningId); + if (contentTuning != null) + scalingFactionGroup = contentTuning.GetScalingFactionGroup(); + + handler.SendSysMessage(CypherStrings.QuestListChat, qInfo.Id, qInfo.Id, + handler.GetSession().GetPlayer().GetQuestLevel(qInfo), + handler.GetSession().GetPlayer().GetQuestMinLevel(qInfo), + maxLevel, scalingFactionGroup, + _title, statusStr); + } + else + handler.SendSysMessage(CypherStrings.QuestListConsole, qInfo.Id, _title, statusStr); + + if (!found) + found = true; + } + } + + if (!found) + handler.SendSysMessage(CypherStrings.CommandNoquestfound); + + return true; + } + + [Command("id", RBACPermissions.CommandLookupQuestId, true)] + static bool HandleLookupQuestIdCommand(CommandHandler handler, uint id) + { + // can be NULL at console call + Player target = handler.GetSelectedPlayerOrSelf(); + + Quest quest = Global.ObjectMgr.GetQuestTemplate(id); + if (quest != null) + { + string title = quest.LogTitle; + if (title.IsEmpty()) + { + handler.SendSysMessage(CypherStrings.CommandNoquestfound); + return true; + } + + string statusStr = ""; + + if (target) + { + switch (target.GetQuestStatus(id)) + { + case QuestStatus.Complete: + statusStr = handler.GetCypherString(CypherStrings.CommandQuestComplete); + break; + case QuestStatus.Incomplete: + statusStr = handler.GetCypherString(CypherStrings.CommandQuestActive); + break; + case QuestStatus.Rewarded: + statusStr = handler.GetCypherString(CypherStrings.CommandQuestRewarded); + break; + default: + break; + } + } + + if (handler.GetSession()) + { + int maxLevel = 0; + var questLevels = Global.DB2Mgr.GetContentTuningData(quest.ContentTuningId, handler.GetSession().GetPlayer().m_playerData.CtrOptions.GetValue().ContentTuningConditionMask); + if (questLevels.HasValue) + maxLevel = questLevels.Value.MaxLevel; + + int scalingFactionGroup = 0; + var contentTuning = CliDB.ContentTuningStorage.LookupByKey(quest.ContentTuningId); + if (contentTuning != null) + scalingFactionGroup = contentTuning.GetScalingFactionGroup(); + + handler.SendSysMessage(CypherStrings.QuestListChat, id, id, + handler.GetSession().GetPlayer().GetQuestLevel(quest), + handler.GetSession().GetPlayer().GetQuestMinLevel(quest), + maxLevel, scalingFactionGroup, + title, statusStr); + } + else + handler.SendSysMessage(CypherStrings.QuestListConsole, id, title, statusStr); + } + else + handler.SendSysMessage(CypherStrings.CommandNoquestfound); + + return true; + } + } + [CommandGroup("spell",RBACPermissions.CommandLookupSpell)] class SpellCommandGroup { [Command("", RBACPermissions.CommandLookupSpell)] - static bool Default(CommandHandler handler, StringArguments args) + static bool HandleLookupSpellCommand(CommandHandler handler, string namePart) { - if (args.Empty()) - return false; - // can be NULL at console call Player target = handler.GetSelectedPlayer(); - string namePart = args.NextString(); - bool found = false; uint count = 0; @@ -1173,16 +1233,11 @@ namespace Game.Chat } [Command("id", RBACPermissions.CommandLookupSpellId)] - static bool SpellId(CommandHandler handler, StringArguments args) + static bool HandleLookupSpellIdCommand(CommandHandler handler, uint id) { - if (args.Empty()) - return false; - // can be NULL at console call Player target = handler.GetSelectedPlayer(); - uint id = args.NextUInt32(); - SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(id, Difficulty.None); if (spellInfo != null) {