namespace Aeshnidae.Leaderboard; /// /// The leaderboards in the Aeshnidae Codex: your standing first, then the top five /// of every board, two boards a page. Found by Aeshnidae.Codex through reflection. /// public static class CodexPage { public static string Title => "Leaderboards"; public static string[] Pages(Player player) { if (player is null || !Db.Ready || Boards.Snapshot.Count == 0) return Array.Empty(); var pages = new List(); var me = new StringBuilder(); me.AppendLine("LEADERBOARDS"); me.AppendLine(); me.AppendLine($"{Boards.CharacterCount} characters. Where you stand:"); me.AppendLine(); foreach (var board in Boards.All) { var pos = Boards.Position(board.Key, player.Name); if (pos is not null) me.AppendLine($"{board.Title}: #{pos.Rank}, {pos.Value:N0}"); } me.AppendLine(); me.AppendLine("/top for the full list."); pages.Add(me.ToString().TrimEnd()); var sb = new StringBuilder(); var onPage = 0; foreach (var board in Boards.All) { if (!Boards.Snapshot.TryGetValue(board.Key, out var rows) || rows.Count == 0) continue; if (onPage == 2) { pages.Add(sb.ToString().TrimEnd()); sb.Clear(); onPage = 0; } sb.AppendLine(board.Title.ToUpperInvariant()); foreach (var row in rows.Take(5)) sb.AppendLine($"{row.Rank}. {row.Name}: {row.Value:N0}"); sb.AppendLine(); onPage++; } if (sb.Length > 0) pages.Add(sb.ToString().TrimEnd()); return pages.ToArray(); } }