static bool HandleGuildInfoCommand(StringArguments args, CommandHandler handler) { Guild guild = null; Player target = handler.GetSelectedPlayerOrSelf(); if (!args.Empty() && args[0] != '\0') { if (char.IsDigit(args[0])) { guild = Global.GuildMgr.GetGuildById(args.NextUInt64()); } else { guild = Global.GuildMgr.GetGuildByName(args.NextString()); } } else if (target) { guild = target.GetGuild(); } if (!guild) { return(false); } // Display Guild Information handler.SendSysMessage(CypherStrings.GuildInfoName, guild.GetName(), guild.GetId()); // Guild Id + Name string guildMasterName; if (Global.CharacterCacheStorage.GetCharacterNameByGuid(guild.GetLeaderGUID(), out guildMasterName)) { handler.SendSysMessage(CypherStrings.GuildInfoGuildMaster, guildMasterName, guild.GetLeaderGUID().ToString()); // Guild Master } // Format creation date var createdDateTime = Time.UnixTimeToDateTime(guild.GetCreatedDate()); handler.SendSysMessage(CypherStrings.GuildInfoCreationDate, createdDateTime.ToLongDateString()); // Creation Date handler.SendSysMessage(CypherStrings.GuildInfoMemberCount, guild.GetMembersCount()); // Number of Members handler.SendSysMessage(CypherStrings.GuildInfoBankGold, guild.GetBankMoney() / 100 / 100); // Bank Gold (in gold coins) handler.SendSysMessage(CypherStrings.GuildInfoLevel, guild.GetLevel()); // Level handler.SendSysMessage(CypherStrings.GuildInfoMotd, guild.GetMOTD()); // Message of the Day handler.SendSysMessage(CypherStrings.GuildInfoExtraInfo, guild.GetInfo()); // Extra Information return(true); }
static bool HandleTitlesSetMaskCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } ulong titles = args.NextUInt64(); Player target = handler.getSelectedPlayer(); if (!target) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // check online security if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } ulong titles2 = titles; foreach (CharTitlesRecord tEntry in CliDB.CharTitlesStorage.Values) { titles2 &= ~(1ul << (int)tEntry.MaskID); } titles &= ~titles2; // remove not existed titles target.SetUInt64Value(PlayerFields.KnownTitles, titles); handler.SendSysMessage(CypherStrings.Done); if (!target.HasTitle(target.GetUInt32Value(PlayerFields.ChosenTitle))) { target.SetUInt32Value(PlayerFields.ChosenTitle, 0); handler.SendSysMessage(CypherStrings.CurrentTitleReset, handler.GetNameLink(target)); } return(true); }
static bool HandleLfgGroupInfoCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } Player playerTarget = null; ObjectGuid guidTarget; string nameTarget; ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64()); if (Global.CharacterCacheStorage.GetCharacterNameByGuid(parseGUID, out nameTarget)) { playerTarget = Global.ObjAccessor.FindPlayer(parseGUID); guidTarget = parseGUID; } else if (!handler.ExtractPlayerTarget(args, out playerTarget, out guidTarget, out nameTarget)) { return(false); } Group groupTarget = null; if (playerTarget) { groupTarget = playerTarget.GetGroup(); } else { PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GROUP_MEMBER); stmt.AddValue(0, guidTarget.GetCounter()); SQLResult resultGroup = DB.Characters.Query(stmt); if (!resultGroup.IsEmpty()) { groupTarget = Global.GroupMgr.GetGroupByDbStoreId(resultGroup.Read <uint>(0)); } } if (!groupTarget) { handler.SendSysMessage(CypherStrings.LfgNotInGroup, nameTarget); return(false); } ObjectGuid guid = groupTarget.GetGUID(); handler.SendSysMessage(CypherStrings.LfgGroupInfo, groupTarget.IsLFGGroup(), Global.LFGMgr.GetState(guid), Global.LFGMgr.GetDungeon(guid)); foreach (var slot in groupTarget.GetMemberSlots()) { Player p = Global.ObjAccessor.FindPlayer(slot.guid); if (p) { GetPlayerInfo(handler, p); } else { handler.SendSysMessage("{0} is offline.", slot.name); } } return(true); }
static bool HandleListMailCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } Player target; ObjectGuid targetGuid; string targetName; ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64()); if (Global.CharacterCacheStorage.GetCharacterNameByGuid(parseGUID, out targetName)) { target = Global.ObjAccessor.FindPlayer(parseGUID); targetGuid = parseGUID; } else if (!handler.ExtractPlayerTarget(args, out target, out targetGuid, out targetName)) { return(false); } PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_MAIL_LIST_COUNT); stmt.AddValue(0, targetGuid.GetCounter()); SQLResult result = DB.Characters.Query(stmt); if (!result.IsEmpty()) { uint countMail = result.Read <uint>(0); string nameLink = handler.PlayerLink(targetName); handler.SendSysMessage(CypherStrings.ListMailHeader, countMail, nameLink, targetGuid.ToString()); handler.SendSysMessage(CypherStrings.AccountListBar); stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_MAIL_LIST_INFO); stmt.AddValue(0, targetGuid.GetCounter()); SQLResult result1 = DB.Characters.Query(stmt); if (!result1.IsEmpty()) { do { uint messageId = result1.Read <uint>(0); ulong senderId = result1.Read <ulong>(1); string sender = result1.Read <string>(2); ulong receiverId = result1.Read <ulong>(3); string receiver = result1.Read <string>(4); string subject = result1.Read <string>(5); long deliverTime = result1.Read <uint>(6); long expireTime = result1.Read <uint>(7); ulong money = result1.Read <ulong>(8); byte hasItem = result1.Read <byte>(9); uint gold = (uint)(money / MoneyConstants.Gold); uint silv = (uint)(money % MoneyConstants.Gold) / MoneyConstants.Silver; uint copp = (uint)(money % MoneyConstants.Gold) % MoneyConstants.Silver; string receiverStr = handler.PlayerLink(receiver); string senderStr = handler.PlayerLink(sender); handler.SendSysMessage(CypherStrings.ListMailInfo1, messageId, subject, gold, silv, copp); handler.SendSysMessage(CypherStrings.ListMailInfo2, senderStr, senderId, receiverStr, receiverId); handler.SendSysMessage(CypherStrings.ListMailInfo3, Time.UnixTimeToDateTime(deliverTime).ToLongDateString(), Time.UnixTimeToDateTime(expireTime).ToLongDateString()); if (hasItem == 1) { SQLResult result2 = DB.Characters.Query("SELECT item_guid FROM mail_items WHERE mail_id = '{0}'", messageId); if (!result2.IsEmpty()) { do { uint item_guid = result2.Read <uint>(0); stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_MAIL_LIST_ITEMS); stmt.AddValue(0, item_guid); SQLResult result3 = DB.Characters.Query(stmt); if (!result3.IsEmpty()) { do { uint item_entry = result3.Read <uint>(0); uint item_count = result3.Read <uint>(1); ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(item_entry); if (itemTemplate == null) { continue; } if (handler.GetSession() != null) { uint color = ItemConst.ItemQualityColors[(int)itemTemplate.GetQuality()]; string itemStr = $"|c{color}|Hitem:{item_entry}:0:0:0:0:0:0:0:{handler.GetSession().GetPlayer().GetLevel()}:0:0:0:0:0|h[{itemTemplate.GetName(handler.GetSessionDbcLocale())}]|h|r"; handler.SendSysMessage(CypherStrings.ListMailInfoItem, itemStr, item_entry, item_guid, item_count); } else { handler.SendSysMessage(CypherStrings.ListMailInfoItem, itemTemplate.GetName(handler.GetSessionDbcLocale()), item_entry, item_guid, item_count); } }while (result3.NextRow()); } }while (result2.NextRow()); } } handler.SendSysMessage(CypherStrings.AccountListBar); }while (result1.NextRow()); } else { handler.SendSysMessage(CypherStrings.ListMailNotFound); } return(true); } else { handler.SendSysMessage(CypherStrings.ListMailNotFound); } return(true); }
static bool HandleGroupListCommand(StringArguments args, CommandHandler handler) { // Get ALL the variables! Player playerTarget; ObjectGuid guidTarget; string nameTarget; string zoneName = ""; string onlineState = ""; // Parse the guid to uint32... ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64()); // ... and try to extract a player out of it. if (Global.CharacterCacheStorage.GetCharacterNameByGuid(parseGUID, out nameTarget)) { playerTarget = Global.ObjAccessor.FindPlayer(parseGUID); guidTarget = parseGUID; } // If not, we return false and end right away. else if (!handler.extractPlayerTarget(args, out playerTarget, out guidTarget, out nameTarget)) { return(false); } // Next, we need a group. So we define a group variable. Group groupTarget = null; // We try to extract a group from an online player. if (playerTarget) { groupTarget = playerTarget.GetGroup(); } // If not, we extract it from the SQL. if (!groupTarget) { PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GROUP_MEMBER); stmt.AddValue(0, guidTarget.GetCounter()); SQLResult resultGroup = DB.Characters.Query(stmt); if (!resultGroup.IsEmpty()) { groupTarget = Global.GroupMgr.GetGroupByDbStoreId(resultGroup.Read <uint>(0)); } } // If both fails, players simply has no party. Return false. if (!groupTarget) { handler.SendSysMessage(CypherStrings.GroupNotInGroup, nameTarget); return(false); } // We get the group members after successfully detecting a group. var members = groupTarget.GetMemberSlots(); // To avoid a cluster f**k, namely trying multiple queries to simply get a group member count... handler.SendSysMessage(CypherStrings.GroupType, (groupTarget.isRaidGroup() ? "raid" : "party"), members.Count); // ... we simply move the group type and member count print after retrieving the slots and simply output it's size. // While rather dirty codestyle-wise, it saves space (if only a little). For each member, we look several informations up. foreach (var slot in members) { // Check for given flag and assign it to that iterator string flags = ""; if (slot.flags.HasAnyFlag(GroupMemberFlags.Assistant)) { flags = "Assistant"; } if (slot.flags.HasAnyFlag(GroupMemberFlags.MainTank)) { if (!string.IsNullOrEmpty(flags)) { flags += ", "; } flags += "MainTank"; } if (slot.flags.HasAnyFlag(GroupMemberFlags.MainAssist)) { if (!string.IsNullOrEmpty(flags)) { flags += ", "; } flags += "MainAssist"; } if (string.IsNullOrEmpty(flags)) { flags = "None"; } // Check if iterator is online. If is... Player p = Global.ObjAccessor.FindPlayer(slot.guid); string phases = ""; if (p && p.IsInWorld) { // ... than, it prints information like "is online", where he is, etc... onlineState = "online"; phases = PhasingHandler.FormatPhases(p.GetPhaseShift()); AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(p.GetAreaId()); if (area != null) { AreaTableRecord zone = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID); if (zone != null) { zoneName = zone.AreaName[handler.GetSessionDbcLocale()]; } } } else { // ... else, everything is set to offline or neutral values. zoneName = "<ERROR>"; onlineState = "Offline"; } // Now we can print those informations for every single member of each group! handler.SendSysMessage(CypherStrings.GroupPlayerNameGuid, slot.name, onlineState, zoneName, phases, slot.guid.ToString(), flags, LFGQueue.GetRolesString(slot.roles)); } // And finish after every iterator is done. return(true); }