I would suggest adding a command that displays the top10 players in each category. I've actually implemented this on my server. It could use some work (for example it doesnt have aquaire atm because I dont use that in my server), it's not perfrect but it gives a baseline.

[ChatCommand("top")]
void TopCommand(BasePlayer player, string command, string[] args)
{
if (args == null || args.Length == 0)
{
Print(player, msg("Please choose which level you want to see:\nWoodcutting, Mining, Skinning, Crafting", player.UserIDString));
}
if (args.Length >= 1)
{
var Skill = args[0];
if (args[0].ToLower() == "woodcutting")
Skill = Skills.WOODCUTTING;
if (args[0].ToLower() == "mining")
Skill = Skills.MINING;
if (args[0].ToLower() == "skinning")
Skill = Skills.SKINNING;
if (args[0].ToLower() == "crafting")
Skill = Skills.CRAFTING;

if (Skill!=args[0])
{
string topPlayers = "Top 10 players in "+args[0]+":";
Dictionary<ulong, long> topData = new Dictionary<ulong, long>();
foreach (var pl in playerPrefs.PlayerInfo.ToList())
{
topData.Add(pl.Key, getLevel(pl.Key, Skill));
}
foreach (var playerData in topData.OrderByDescending(x => x.Value).Take(10))
{
IPlayer p= this.covalence.Players.FindPlayer($"{playerData.Key}");
if (p==null)
topPlayers += $"\n{playerData.Key} - lvl{playerData.Value}";
else
topPlayers += $"\n{p.Name} - lvl{playerData.Value}";
}
Print(player, msg(topPlayers, player.UserIDString));
}
else
Print(player, msg("Invalid skill!\nAvailable skills are: Woodcutting, Mining, Skinning, Crafting", player.UserIDString));
}
}