Well soz for double post here it is (was done on revision 3, gonna check if it work on rev 4):
Hello guys, I do not have access to internet this weekend, but I did a few things for the emulator, I added 3 commands:
!who : returns information about clients connected (UserID, UGradeID, UID).
!clients : returns the number of clients connected.
!getclient <UserID> : show information about selected client (password, UGradeID, IP address, UID).
Here is my revised version of getUserInput,
In Program.cs,
add:
PHP Code:
using Zebra.DataStructures;
replace getUserInput() by:
PHP Code:
public static void getUserInput()
{
Client[] c;
string cUsername;
string input;
input = Console.ReadLine();
while (input.ToLower() != "!quit")
{
string[] command = input.Split();
switch (command[0].ToLower())
{
case "!commands":
ConsoleOutput.writeLineWithTimeStamp("Commands: !quit, !commands, !rawsql <query>, !who, !clients, !getclient <username>");
break;
case "!rawsql":
string query = input.Substring(8, input.Length - 8);
SQLConnector.executeQuery(query);
break;
case "!clients":
c = Networking.Networking.getUserList();
ConsoleOutput.writeLineWithTimeStamp(c.Length + " Clients connected.");
break;
case "!who":
c = Networking.Networking.getUserList();
if (c.Length > 0)
{
for (int i = 0; i < c.Length; i++)
{
ConsoleOutput.writeLineWithTimeStamp("\nClient " + i + " :\nUID = " + c[i].uid.first + "\nUserID = " + c[i].account.username + "\nUGradeID = " + c[i].account.uGradeID);
}
}
else
{
ConsoleOutput.writeLineWithTimeStamp("No clients connected.");
}
break;
case "!getclient":
try
{
c = Networking.Networking.getUserList();
cUsername = input.Substring(11, input.Length - 11);
if (c.Length > 0)
{
for (int i = 0; i < c.Length; i++)
{
if (c[i].account.username == cUsername)
{
ConsoleOutput.writeLineWithTimeStamp("\nUserID : " + c[i].account.username +
"\nPassword = " + c[i].account.password +
"\nUGradeID = " + c[i].account.uGradeID);
Console.WriteLine("Ip = " + c[i].ip +
"\nUID = " + c[i].uid.first);
for (int j = 0; j < 4; j++)
{
if (c[i].account.characters[j].name.Length > 0)
{
Console.WriteLine("char[" + j + "] : " + c[i].account.characters[j].name +
"\nLevel = " + c[i].account.characters[j].level +
"\nClan = " + c[i].account.characters[j].clanName +
"\nCLID = " + c[i].account.characters[j].CLID);
}
else
{
j = 4;
}
}
break;
}
else
{
ConsoleOutput.writeLineWithTimeStamp("Client " + cUsername + " is not connected or does not exist.");
}
}
}
else
{
ConsoleOutput.writeLineWithTimeStamp("No clients connected.");
}
}
catch
{
ConsoleOutput.writeLineWithTimeStamp("Usage: !getclient <UserID>");
}
break;
default:
ConsoleOutput.writeLineWithTimeStamp("Invalid command!");
break;
}
input = Console.ReadLine();
}
exit();
}
In Networking.cs,
add:
PHP Code:
/// <summary>
/// Return userList
/// </summary>
/// <returns>an Array filledwith userList</returns>
public static Client[] getUserList()
{
return userList.ToArray();
}
Here are a few screenshots :

No client connected to the server in this screenshot.

And here I connected to the (local) server, my username is test.
That's my little contribution to that project :) Too bad I'm still not good enough with C# to write packetHandling, I'll do my best to enchance that emulator.
As I said I moved and do not have internet for at least one more week.