namespace Holo.Managers { using Holo; using Holo.Virtual.Users; using System; using System.Collections; using System.Text; using System.Threading; public static class userManager { private static int ᙅ; private static Thread ᙄ; public static Hashtable _Users = new Hashtable(); private static void ᙃ() { while (true) { foreach (virtualUser user in ((Hashtable) _Users.Clone()).Values) { if (user.pingOK) { user.pingOK = false; user.sendData("@r"); } else { Out.WriteLine(user._Username + " timed out."); user.Disconnect(); } } Thread.Sleep(0xea60); } } public static void addChatMessage(string userName, int roomID, string Message) { DB.runQuery(string.Concat(new object[] { "INSERT INTO system_chatlog (username,roomid,mtime,message) VALUES ('", userName, "','", roomID, "',CURRENT_TIMESTAMP,'", DB.Stripslash(Message), "')" })); } public static void addUser(int userID, virtualUser User) { if (_Users.ContainsKey(userID)) { ((virtualUser) _Users[userID]).Disconnect(); if (_Users.ContainsKey(userID)) { _Users.Remove(userID); } } if (User.connectionRemoteIP == DB.runRead("SELECT ipaddress_last FROM users WHERE name = '" + User._Username + "'")) { _Users.Add(userID, User); DB.runQuery("UPDATE users SET ticket_sso = NULL WHERE id = '" + userID + "' LIMIT 1"); Out.WriteLine(string.Concat(new object[] { "User ", userID, " logged in. [", User._Username, "]" }), Out.logFlags.BelowStandardAction); } else { User.Disconnect(0x3e8); User.sendData("BKInvalid Session Ticket, please login again!"); } if (_Users.Count > ᙅ) { ᙅ = _Users.Count; } } public static bool containsUser(int userID) { return _Users.ContainsKey(userID); } public static bool containsUser(string userName) { int key = getUserID(userName); return _Users.ContainsKey(key); } public static string generateBanReport(int userID) { string[] strArray = DB.runReadRow("SELECT date_expire,descr,ipaddress FROM users_bans WHERE userid = '" + userID + "'"); string[] strArray2 = DB.runReadRow("SELECT name,rank,ipaddress_last FROM users WHERE id = '" + userID + "'"); if ((strArray.Length == 0) || (strArray2.Length == 0)) { return "holo.cast.banreport.null"; } string str = "-"; string str2 = "not available"; string str3 = "not available"; string[] strArray3 = DB.runReadRow("SELECT userid,note,timestamp FROM system_stafflog WHERE action = 'ban' AND targetid = '" + userID + "' ORDER BY id ASC"); if (strArray3.Length > 0) { if (strArray3[1] != "") { str = strArray3[1]; } str2 = DB.runRead("SELECT name FROM users WHERE id = '" + strArray3[0] + "'"); str3 = strArray3[2]; } StringBuilder builder = new StringBuilder(stringManager.getString("banreport_header") + " "); builder.Append(string.Concat(new object[] { strArray2[0], " [", userID, "]\r" })); builder.Append(stringManager.getString("common_userrank") + ": " + strArray2[1] + "\r"); builder.Append(stringManager.getString("common_ip") + ": " + strArray2[2] + "\r"); builder.Append(stringManager.getString("banreport_banner") + ": " + str2 + "\r"); builder.Append(stringManager.getString("banreport_posted") + ": " + str3 + "\r"); builder.Append(stringManager.getString("banreport_expires") + ": " + strArray[0] + "\r"); builder.Append(stringManager.getString("banreport_reason") + ": " + strArray[1] + "\r"); bool flag = strArray[2] != ""; builder.Append(stringManager.getString("banreport_ipbanflag") + ": " + flag.ToString().ToLower() + "\r"); builder.Append(stringManager.getString("banreport_staffnote") + ": " + str); return builder.ToString(); } public static string generateBanReport(string IP) { string[] strArray = DB.runReadRow("SELECT userid,date_expire,descr FROM users_bans WHERE ipaddress = '" + IP + "'"); if (strArray.Length == 0) { return "holo.cast.banreport.null"; } string str = "-"; string str2 = "not available"; string str3 = "not available"; string[] strArray2 = DB.runReadRow("SELECT userid,note,timestamp FROM system_stafflog WHERE action = 'ban' AND targetid = '" + strArray[0] + "' ORDER BY id DESC"); if (strArray2.Length > 0) { if (strArray2[1] != "") { str = strArray2[1]; } str2 = DB.runRead("SELECT name FROM users WHERE id = '" + strArray2[0] + "'"); str3 = strArray2[2]; } StringBuilder builder = new StringBuilder(stringManager.getString("banreport_header") + " "); builder.Append(IP + "\r"); builder.Append(stringManager.getString("banreport_banner") + ": " + str2 + "\r"); builder.Append(stringManager.getString("banreport_posted") + ": " + str3 + "\r"); builder.Append(stringManager.getString("banreport_expires") + ": " + strArray[0] + "\r"); builder.Append(stringManager.getString("banreport_reason") + ": " + strArray[1] + "\r"); bool flag = strArray[2] != ""; builder.Append(stringManager.getString("banreport_ipbanflag") + ": " + flag.ToString().ToLower() + "\r"); builder.Append(stringManager.getString("banreport_staffnote") + ": " + str + "\r\r"); string[] strArray3 = DB.runReadColumn("SELECT name FROM users WHERE ipaddress_last = '" + IP + "'", 0); builder.Append(stringManager.getString("banreport_affectedusernames") + ":"); for (int i = 0; i < strArray3.Length; i++) { builder.Append("\r - " + strArray3[i]); } return builder.ToString(); } public static string generateUserInfo(int userID, byte Rank) { string[] strArray = DB.runReadRow(string.Concat(new object[] { "SELECT name,rank,mission,credits,tickets,email,birth,hbirth,ipaddress_last,lastvisit FROM users WHERE id = '", userID, "' AND rank <= ", Rank })); if (strArray.Length == 0) { return stringManager.getString("userinfo_accesserror"); } StringBuilder builder = new StringBuilder(stringManager.getString("userinfo_header") + "\r"); builder.Append(string.Concat(new object[] { stringManager.getString("common_userid"), ": ", userID, "\r" })); builder.Append(stringManager.getString("common_username") + ": " + strArray[0] + "\r"); builder.Append(stringManager.getString("common_userrank") + ": " + strArray[1] + "\r"); builder.Append(stringManager.getString("common_usermission") + ": " + strArray[2] + "\r"); builder.Append(stringManager.getString("common_credits") + ": " + strArray[3] + "\r"); builder.Append(stringManager.getString("common_tickets") + ": " + strArray[4] + "\r"); builder.Append(stringManager.getString("common_hbirth") + ": " + strArray[7] + "\r\r"); builder.Append(stringManager.getString("common_birth") + ": " + strArray[6] + "\r"); builder.Append(stringManager.getString("common_email") + ": " + strArray[5] + "\r"); builder.Append(stringManager.getString("common_ip") + ": " + strArray[8] + "\r\r"); if (_Users.ContainsKey(userID)) { virtualUser user = (virtualUser) _Users[userID]; string str = ""; if (user._roomID == 0) { str = stringManager.getString("common_hotelview"); } else { str = string.Concat(new object[] { stringManager.getString("common_room"), " '", DB.runReadUnsafe("SELECT name FROM rooms WHERE id = '" + user._roomID + "'"), "' [id: ", user._roomID, ", ", stringManager.getString("common_owner"), ": ", DB.runReadUnsafe("SELECT owner FROM rooms WHERE id = '" + user._roomID + "'"), "]" }); } builder.Append(stringManager.getString("common_location") + ": " + str); } else { builder.Append(stringManager.getString("common_lastaccess") + ": " + strArray[9]); } return builder.ToString(); } public static string getBanReason(int userID) { if (DB.checkExists("SELECT userid FROM users_bans WHERE userid = '" + userID + "'")) { if (DateTime.Compare(DateTime.Parse(DB.runRead("SELECT date_expire FROM users_bans WHERE userid = '" + userID + "'")), DateTime.Now) > 0) { return DB.runRead("SELECT descr FROM users_bans WHERE userid = '" + userID + "'"); } DB.runQuery("DELETE FROM users_bans WHERE userid = '" + userID + "' LIMIT 1"); } return ""; } public static string getBanReason(string IP) { if (DB.checkExists("SELECT ipaddress FROM users_bans WHERE ipaddress = '" + IP + "'")) { if (DateTime.Compare(DateTime.Parse(DB.runRead("SELECT date_expire FROM users_bans WHERE ipaddress = '" + IP + "'")), DateTime.Now) > 0) { return DB.runRead("SELECT descr FROM users_bans WHERE ipaddress = '" + IP + "'"); } DB.runQuery("DELETE FROM user_bans WHERE ipaddress = '" + IP + "' LIMIT 1"); } return ""; } public static virtualUser getUser(int userID) { try { return (virtualUser) _Users[userID]; } catch { return null; } } public static virtualUser getUser(string userName) { return getUser(getUserID(userName)); } public static int[] getUserFriendIDs(int userID) { try { ArrayList list = new ArrayList(); int[] numArray = DB.runReadColumn("SELECT friendid FROM messenger_friendships WHERE userid = '" + userID + "'", 0, null); for (int i = 0; i < numArray.Length; i++) { list.Add(numArray[i]); } numArray = DB.runReadColumn("SELECT userid FROM messenger_friendships WHERE friendid = '" + userID + "'", 0, null); for (int j = 0; j < numArray.Length; j++) { list.Add(numArray[j]); } return (int[]) list.ToArray(typeof(int)); } catch { return new int[0]; } } public static int getUserID(string userName) { return DB.runRead("SELECT id FROM users WHERE name = '" + userName + "'", null); } public static string getUserName(int userID) { return DB.runRead("SELECT name FROM users WHERE id = '" + userID + "'"); } public static void Init() { try { ᙄ.Abort(); } catch { } ᙄ = new Thread(new ThreadStart(userManager.ᙃ)); ᙄ.Priority = ThreadPriority.BelowNormal; ᙄ.Start(); } public static void removeUser(int userID) { if (_Users.ContainsKey(userID)) { _Users.Remove(userID); Out.WriteLine("User [" + userID + "] disconnected.", Out.logFlags.BelowStandardAction); } } public static void sendData(string Data) { foreach (virtualUser user in _Users.Values) { user.sendData(Data); } } public static void sendToRank(byte Rank, bool includeHigher, string Data) { foreach (virtualUser user in _Users.Values) { if ((user._Rank >= Rank) && (includeHigher || (user._Rank <= Rank))) { user.sendData(Data); } } } public static void setBan(int userID, int Hours, string Reason) { string str = DateTime.Now.AddHours((double) Hours).ToString(); DB.runQuery("DELETE FROM users_bans WHERE userid = '" + userID + "' LIMIT 1"); DB.runQuery(string.Concat(new object[] { "INSERT INTO users_bans (userid,date_expire,descr) VALUES ('", userID, "','", str, "','", DB.Stripslash(Reason), "')" })); if (_Users.ContainsKey(userID)) { virtualUser user = (virtualUser) _Users[userID]; user.sendData("@c" + Reason); user.Disconnect(0x3e8); } } public static void setBan(string IP, int Hours, string Reason) { string str = DateTime.Now.AddHours((double) Hours).ToString(); DB.runQuery("DELETE FROM users_bans WHERE ipaddress = '" + IP + "'"); DB.runQuery("INSERT INTO users_bans (ipaddress,date_expire,descr) VALUES ('" + IP + "','" + str + "','" + DB.Stripslash(Reason) + "')"); int[] numArray = DB.runReadColumn("SELECT id FROM users WHERE ipaddress_last = '" + IP + "'", 0, null); for (int i = 0; i < numArray.Length; i++) { if (_Users.ContainsKey(numArray[i])) { virtualUser user = (virtualUser) _Users[numArray[i]]; user.sendData("@c" + Reason); user.Disconnect(0x3e8); } } } public static bool userExists(int userID) { return DB.checkExists("SELECT id FROM users WHERE id = '" + userID + "'"); } public static int peakUserCount { get { return ᙅ; } } public static int userCount { get { return _Users.Count; } } } }