public static void Try(string[] parameters) { //RMT:pid:destination:sound:text string sender = Player.GetPlayerName(parameters[1]); string message = SiusUtil.Collate(4, parameters); for (int i = 0; i < Player.PlayerList.Count; i++) { Player.PlayerStruct p = (Player.PlayerStruct)Player.PlayerList[i]; if (p.name == parameters[2]) { try { TcpClient tcpZone = (TcpClient)Listen.htRcon[p.ZoneName]; StreamWriter swSenderSender; swSenderSender = new StreamWriter(tcpZone.GetStream()); //RMT:pid:sender:sound:text swSenderSender.WriteLine("RMT:" + p.pid + ":" + sender + ":" + parameters[3] + ":" + message); swSenderSender.Flush(); swSenderSender = null; } catch (Exception e) { SiusLog.Log(SiusLog.DEBUG, "remote", e.Message); } SiusLog.Log(SiusLog.INFORMATION, "remote", sender + " sent remote message to " + parameters[2]); SiusLog.Log(SiusLog.DEBUG, "remote", "Message: " + message); return; } } Message.Send = "MSG:" + parameters[1] + ":0:Unable to locate player."; SiusLog.Log(SiusLog.DEBUG, "remote", "Unable to locate and send remote message from " + sender + " to " + parameters[2]); SiusLog.Log(SiusLog.DEBUG, "remote", "Message: " + message); }
public static void Try(string[] parameters) { Player.PlayerStruct p = Player.GetPlayer(parameters[1]); if (!string.IsNullOrEmpty(p.Squad)) { /* Begin Database Connection */ DataTable dt = new DataTable(); SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(SConnection); cmd.CommandText = @"SELECT name FROM players WHERE squad = @nsquad"; SQLiteParameter nsquad = new SQLiteParameter("@nsquad"); cmd.Parameters.Add(nsquad); nsquad.Value = p.Squad; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); /* End Database Connection */ if (dt.Rows.Count > 0) { string list = ""; for (int i = 0; i < dt.Rows.Count; i++) { list += dt.Rows[i][0].ToString(); if ((i + 1) < dt.Rows.Count) { list += ", "; } } string message = "MSG:" + parameters[1] + ":0:Members: " + list; if (message.Length >= 250) { SendSquadList(list.Split(", ".ToCharArray()), parameters); } else { Message.Send = message; } SiusLog.Log(SiusLog.INFORMATION, "?squadlist", p.name + " requested <" + p.Squad + ">'s member list."); } else { SiusLog.Log(SiusLog.WARNING, "?squadlist", "An error occured while trying to locate " + p.name + "'s squad member list."); } } }
public static void Try(string[] parameters) { Player.PlayerStruct p = Player.GetPlayer(parameters[1]); if (!string.IsNullOrEmpty(p.Squad) && !string.IsNullOrEmpty(parameters[3]) && p.name.ToLower() != parameters[3].ToLower()) { /* Begin Database Connection */ DataTable dt = new DataTable(); SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(SConnection); cmd.CommandText = @"SELECT owner FROM squads WHERE name = @nsquad"; SQLiteParameter nsquad = new SQLiteParameter("@nsquad"); SQLiteParameter pname = new SQLiteParameter("@pname"); cmd.Parameters.Add(nsquad); cmd.Parameters.Add(pname); nsquad.Value = p.Squad; pname.Value = p.name; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); /* End Database Connection */ if (dt.Rows.Count > 0) { if (dt.Rows[0][0].ToString().ToLower() == p.name.ToLower()) { /* Begin Database Connection */ SConnection.Open(); cmd.CommandText = @"UPDATE players SET squad = '' WHERE name = @kname AND squad = @nsquad"; SQLiteParameter kname = new SQLiteParameter("@kname"); cmd.Parameters.Add(kname); kname.Value = parameters[3]; cmd.ExecuteNonQuery(); SConnection.Close(); /* End Database Connection */ //TODO: do we send the kicked player a message? Message.Send = "MSG:" + parameters[1] + ":0:If said player was a member of your squad, he or she has been kicked."; SiusLog.Log(SiusLog.INFORMATION, "?squadkick", p.name + " kicked " + parameters[3] + " from squad <" + p.Squad + ">."); } else { Message.Send = "MSG:" + parameters[1] + ":0:You do not own this squad."; SiusLog.Log(SiusLog.INFORMATION, "?squadkick", p.name + " attempted to kick " + parameters[3] + " from squad <" + p.Squad + ">, but is not owner."); return; } } } }
public static void Try(string[] parameters) { Player.PlayerStruct p = Player.GetPlayer(parameters[1]); if (!string.IsNullOrEmpty(p.Squad)) { /* Begin Database Connection */ DataTable dt = new DataTable(); SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(SConnection); cmd.CommandText = @"SELECT owner FROM squads WHERE name = @nsquad"; SQLiteParameter nsquad = new SQLiteParameter("@nsquad"); SQLiteParameter pname = new SQLiteParameter("@pname"); cmd.Parameters.Add(nsquad); cmd.Parameters.Add(pname); nsquad.Value = p.Squad; pname.Value = p.name; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); /* End Database Connection */ if (dt.Rows.Count > 0) { if (dt.Rows[0][0].ToString().ToLower() == p.name.ToLower()) { /* Begin Database Connection */ SConnection.Open(); cmd.CommandText = @"DELETE FROM squads WHERE name = @nsquad AND owner = @pname"; cmd.ExecuteNonQuery(); cmd.CommandText = @"UPDATE players SET squad = '' WHERE squad = @nsquad"; cmd.ExecuteNonQuery(); SConnection.Close(); /* End Database Connection */ Message.Send = "MSG:" + parameters[1] + ":0:Squad dissolved."; SiusLog.Log(SiusLog.DEBUG, "?squaddissolve", "Dissolved squad <" + p.Squad + "> for " + p.name); } else { Message.Send = "MSG:" + parameters[1] + ":0:You do not own this squad."; SiusLog.Log(SiusLog.DEBUG, "?squaddissolve", "Unable to dissolve squad <" + p.Squad + "> for " + p.name + " (not owner)."); return; } } } }
public static void Try(string[] parameters) { Player.PlayerStruct p = Player.GetPlayer(parameters[1]); if (!string.IsNullOrEmpty(p.Squad)) { /* Begin Database Connection */ DataTable dt = new DataTable(); SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(SConnection); cmd.CommandText = @"SELECT owner FROM squads WHERE name = @nsquad"; SQLiteParameter nsquad = new SQLiteParameter("@nsquad"); SQLiteParameter pname = new SQLiteParameter("@pname"); cmd.Parameters.Add(nsquad); cmd.Parameters.Add(pname); nsquad.Value = p.Squad; pname.Value = p.name; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); /* End Database Connection */ if (dt.Rows.Count > 0) { if (dt.Rows[0][0].ToString().ToLower() == p.name.ToLower()) //if owner { string password = SiusUtil.Collate(3, parameters); if (string.IsNullOrEmpty(password)) { Message.Send = "MSG:" + parameters[1] + ":0:Please specify a password."; return; } if (password.Length > 23) { Message.Send = "MSG:" + parameters[1] + ":0:Password is too long."; return; } password = SiusEncrypt.Encrypt(password, p.Squad, "squads"); /* Begin Database Connection */ SConnection.Open(); cmd.CommandText = @"UPDATE squads SET password = @spass WHERE name = @nsquad"; SQLiteParameter spass = new SQLiteParameter("@spass"); cmd.Parameters.Add(spass); spass.Value = password; cmd.ExecuteNonQuery(); SConnection.Close(); /* End Database Connection */ Message.Send = "MSG:" + parameters[1] + ":0:Squad password successfully changed."; SiusLog.Log(SiusLog.INFORMATION, "?squadpassword", p.name + " successfully changed the password to squad <" + p.Squad + ">"); return; } else { Message.Send = "MSG:" + parameters[1] + ":0:You do not own this squad."; SiusLog.Log(SiusLog.INFORMATION, "?squadpassword", p.name + " attempted to change the password of <" + p.Squad + ">, but is not owner."); return; } } } Message.Send = "MSG:" + parameters[1] + ":0:You are not on a squad."; }
public static void Try(string[] parameters) { Player.PlayerStruct p = Player.GetPlayer(parameters[1]); /* Begin Database Connection */ SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(SConnection); cmd.CommandText = @"UPDATE players SET lastseen = @lastseen WHERE name = @pname; " + @"UPDATE players SET usage = (usage + @time) WHERE name = @pname;"; SQLiteParameter lastseen = new SQLiteParameter("@lastseen"); SQLiteParameter pname = new SQLiteParameter("@pname"); SQLiteParameter time = new SQLiteParameter("@time"); cmd.Parameters.Add(lastseen); cmd.Parameters.Add(pname); cmd.Parameters.Add(time); lastseen.Value = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); pname.Value = p.name; DateTime Current = DateTime.Now; TimeSpan diff = Current.Subtract(p.LoginTime); int totalseconds = (((((diff.Days * 24) + diff.Hours) * 60) + diff.Minutes) * 60) + diff.Seconds; time.Value = totalseconds; cmd.ExecuteNonQuery(); SConnection.Close(); /* End Database Connection */ SiusLog.Log(SiusLog.DEBUG, "leave", "Updated " + p.name + "'s player information into database."); // Remove the player Player.RemovePlayer(parameters[1]); /* Begin Database Connection */ DataTable messages = new DataTable(); SConnection.Open(); cmd.CommandText = @"SELECT * FROM messages WHERE name = @pname"; SQLiteDataReader Reader = cmd.ExecuteReader(); messages.Load(Reader); Reader.Close(); SConnection.Close(); /* End Database Connection */ if (messages.Rows.Count != 0) { for (int i = 0; i < messages.Rows.Count; i++) { if (messages.Rows[i][4].ToString() == "1") { /* Begin Database Connection */ SConnection.Open(); cmd.CommandText = @"DELETE FROM messages WHERE name = @pname AND sender = @sender AND message = @message"; SQLiteParameter sender = new SQLiteParameter("@sender"); SQLiteParameter message = new SQLiteParameter("@message"); cmd.Parameters.Add(sender); cmd.Parameters.Add(message); sender.Value = messages.Rows[i][1].ToString(); message.Value = messages.Rows[i][2].ToString(); cmd.ExecuteNonQuery(); SConnection.Close(); /* End Database Connection */ } } SiusLog.Log(SiusLog.INFORMATION, "leave", "Deleted " + p.name + "'s old messages."); } SConnection.Dispose(); SiusLog.Log(SiusLog.INFORMATION, "leave", "Player " + p.name + " disconnected from " + Zone.ZoneName); }
public static void Try(string[] parameters) { Player.PlayerStruct p = Player.GetPlayer(parameters[1]); if (!string.IsNullOrEmpty(p.Squad)) { /* Begin Database Connection */ DataTable dt = new DataTable(); SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(SConnection); cmd.CommandText = @"SELECT owner FROM squads WHERE name = @nsquad"; SQLiteParameter nsquad = new SQLiteParameter("@nsquad"); SQLiteParameter pname = new SQLiteParameter("@pname"); cmd.Parameters.Add(nsquad); cmd.Parameters.Add(pname); nsquad.Value = p.Squad; pname.Value = p.name; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); /* End Database Connection */ if (dt.Rows.Count > 0) { DataTable others = new DataTable(); SConnection.Open(); cmd.CommandText = @"SELECT * FROM players WHERE squad = @nsquad"; SQLiteDataReader Reade = cmd.ExecuteReader(); others.Load(Reade); Reade.Close(); SConnection.Close(); if (others.Rows.Count > 1) //there are others on this squad { if (dt.Rows[0][0].ToString().ToLower() == p.name.ToLower()) //is owner { Message.Send = "MSG:" + parameters[1] + ":0:Unable to remove you from squad. Consider transfering ownership" + " to someone else (?squadgrant <name>), or dissolving this squad (?squaddissolve)."; SiusLog.Log(SiusLog.INFORMATION, "?squadleave", "Unable to remove " + p.name + " from squad <" + p.Squad + "> due to ownership."); return; //cmd.CommandText = @"UPDATE squads SET owner = '**UNKNOWN**' WHERE name = @nsquad"; //TODO: Should we allow him to squadleave? //cmd.ExecuteNonQuery(); } SConnection.Open(); cmd.CommandText = @"UPDATE players SET squad = '' WHERE name = @pname"; cmd.ExecuteNonQuery(); SConnection.Close(); Message.Send = "MSG:" + parameters[1] + ":0:Left squad. Please exit the zone for the changes to take effect."; SiusLog.Log(SiusLog.INFORMATION, "?squadleave", p.name + " left squad <" + p.Squad + ">"); } else //player is lone on squad { SConnection.Open(); cmd.CommandText = @"DELETE FROM squads WHERE name = @nsquad"; cmd.ExecuteNonQuery(); cmd.CommandText = @"UPDATE players SET squad = '' WHERE name = @pname"; cmd.ExecuteNonQuery(); SConnection.Close(); Message.Send = "MSG:" + parameters[1] + ":0:Left squad. Please exit the zone for the changes to take effect."; SiusLog.Log(SiusLog.INFORMATION, "?squadleave", p.name + " left squad <" + p.Squad + ">"); SiusLog.Log(SiusLog.DEBUG, "?squadleave", "Deleted squad from database: no other players."); } SConnection.Dispose(); return; } else { //squad doesn't exist? no owner? Remove player from squad only. SiusLog.Log(SiusLog.WARNING, "squad", "Unable to locate the squad <" + p.Squad + "> in database."); SConnection.Open(); cmd.CommandText = @"UPDATE players SET squad = '' WHERE name = @pname"; cmd.ExecuteNonQuery(); SConnection.Close(); SConnection.Dispose(); Message.Send = "MSG:" + parameters[1] + ":0:Left squad. Please exit the zone for the changes to take effect."; SiusLog.Log(SiusLog.INFORMATION, "?squadleave", p.name + " left squad <" + p.Squad + ">"); return; } } }
public static void Try(string[] parameters) { Player.PlayerStruct p = Player.GetPlayer(parameters[1]); if (!string.IsNullOrEmpty(p.Squad) && !string.IsNullOrEmpty(parameters[3])) { /* Begin Database Connection */ DataTable dt = new DataTable(); SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(SConnection); cmd.CommandText = @"SELECT owner FROM squads WHERE name = @nsquad"; SQLiteParameter nsquad = new SQLiteParameter("@nsquad"); SQLiteParameter pname = new SQLiteParameter("@pname"); cmd.Parameters.Add(nsquad); cmd.Parameters.Add(pname); nsquad.Value = p.Squad; pname.Value = p.name; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); /* End Database Connection */ if (dt.Rows.Count > 0) { if (dt.Rows[0][0].ToString().ToLower() == p.name.ToLower()) { /* Begin Database Connection */ DataTable check = new DataTable(); SConnection.Open(); cmd.CommandText = @"SELECT squad FROM players WHERE name = @gplayer"; SQLiteParameter gplayer = new SQLiteParameter("@gplayer"); cmd.Parameters.Add(gplayer); gplayer.Value = parameters[3]; SQLiteDataReader Reade = cmd.ExecuteReader(); check.Load(Reade); Reade.Close(); SConnection.Close(); /* End Database Connection */ if (check.Rows.Count > 0) { if (check.Rows[0][0].ToString().ToLower() == p.Squad.ToLower()) { SConnection.Open(); cmd.CommandText = @"UPDATE squads SET owner = @gplayer WHERE name = @nsquad"; cmd.ExecuteNonQuery(); SConnection.Close(); SConnection.Dispose(); Message.Send = "MSG:" + parameters[1] + ":0:Ownership of the squad has been granted to " + parameters[3] + "."; return; } else { Message.Send = "MSG:" + parameters[1] + ":0:This player is not on your squad."; } } else { Message.Send = "MSG:" + parameters[1] + ":0:This player does not exist."; } } else { Message.Send = "MSG:" + parameters[1] + ":0:You do not own this squad."; return; } } } }
public static void Try(string[] parameters) { //CHAT:pid:channel:sound:text string sender = ""; // the name of the sender string channel = ""; // the name of the chat channel Player.PlayerStruct p = Player.GetPlayer(parameters[1]); // Check if the player is sending to a valid channel if (p.Chat != null) { sender = p.name; int num; try { num = Convert.ToInt32(parameters[2]); } catch { num = 0; } if (num < p.Chat.Length) { channel = p.Chat[num]; } else { return; } } if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(sender)) { return; } // Send the message to every player on that chat for (int i = 0; i < Player.PlayerList.Count; i++) { Player.PlayerStruct pp = (Player.PlayerStruct)Player.PlayerList[i]; if (SiusUtil.StringInArray(channel, pp.Chat) && pp.name != sender) { try { TcpClient tcpZone = (TcpClient)Listen.htRcon[pp.ZoneName]; StreamWriter swSenderSender; swSenderSender = new StreamWriter(tcpZone.GetStream()); //CHATTXT:channel:sender:sound:text //CHAT:pid:number swSenderSender.WriteLine("CHATTXT:" + channel + ":" + sender + ":" + parameters[3] + ":" + SiusUtil.Collate(4, parameters)); if (pp.ZoneSW == "asss 1.4.3" || pp.ZoneSW == "asss 1.4.2") // Older versions are broken. { swSenderSender.WriteLine("CHAT:" + pp.pid + ":" + Array.IndexOf(pp.Chat, channel).ToString() + ":"); } else { swSenderSender.WriteLine("CHAT:" + pp.pid + ":" + Array.IndexOf(pp.Chat, channel).ToString()); } swSenderSender.Flush(); swSenderSender = null; } catch (Exception e) { SiusLog.Log(SiusLog.DEBUG, "chat", e.Message); } } } SiusLog.Log(SiusLog.INFORMATION, "chat", sender + " to " + channel + ": " + SiusUtil.Collate(4, parameters)); return; }
public static void Try(string[] parameters) { //CMD:pid:find:name for (int i = 0; i < Player.PlayerList.Count; i++) { Player.PlayerStruct p = (Player.PlayerStruct)Player.PlayerList[i]; if (p.name == parameters[3]) { Message.Send = "MSG:" + parameters[1] + ":0:" + p.name + " is in " + p.ZoneName; SiusLog.Log(SiusLog.INFORMATION, "?find", "Located " + parameters[3] + " for " + Player.GetPlayerName(parameters[1])); return; } } /* Begin Database Connection */ DataTable dt = new DataTable(); SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(SConnection); cmd.CommandText = @"SELECT lastseen FROM 'players' WHERE name = @pname"; SQLiteParameter pname = new SQLiteParameter("@pname"); cmd.Parameters.Add(pname); pname.Value = parameters[3]; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); SConnection.Dispose(); /* End Database Connection */ if (dt.Rows.Count > 0) { DateTime Seen = new DateTime(); Seen = DateTime.ParseExact(dt.Rows[0][0].ToString(), "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); TimeSpan diff = DateTime.UtcNow.Subtract(Seen); if (diff.Days >= 10) { Message.Send = "MSG:" + parameters[1] + ":0:Not online, last seen over 10 days ago."; } else if (diff.Days >= 1) { Message.Send = "MSG:" + parameters[1] + ":0:Not online, last seen " + diff.Days + (diff.Days == 1 ? " day" : " days") + " ago"; } else if (diff.Hours >= 1) { Message.Send = "MSG:" + parameters[1] + ":0:Not online, last seen" + diff.Hours + (diff.Hours == 1 ? " hour" : " hours") + " ago"; } else { Message.Send = "MSG:" + parameters[1] + ":0:Not online, last seen " + diff.Minutes + (diff.Minutes == 1 ? " minute" : " minutes") + " ago"; } } else { Message.Send = "MSG:" + parameters[1] + ":0:Unknown user."; } SiusLog.Log(SiusLog.INFORMATION, "?find", "Attempted to locate when " + parameters[3] + " was last seen for " + Player.GetPlayerName(parameters[1])); }
public static void Try(string[] parameters) { //CMD:pid:cmdname:name:text if (string.IsNullOrEmpty(parameters[3])) { Player.PlayerStruct p = Player.GetPlayer(parameters[1]); /* Begin Database Connection */ DataTable dt = new DataTable(); SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(SConnection); cmd.CommandText = @"UPDATE 'messages' SET flag = 1 WHERE name = @pname;" + "SELECT * FROM 'messages' WHERE name = @pname"; SQLiteParameter pname = new SQLiteParameter("@pname"); cmd.Parameters.Add(pname); pname.Value = p.name; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); /* End Database Connection */ // The player has no new messages if (dt.Rows.Count == 0) { Message.Send = "MSG:" + parameters[1] + ":0:You have no new messages."; SiusLog.Log(SiusLog.DEBUG, "?messages", "[" + p.name + "] has no new messages."); return; } TcpClient tcpZone = (TcpClient)p.tcpZone; StreamWriter swSenderSender; swSenderSender = new StreamWriter(tcpZone.GetStream()); for (int a = 0; a < dt.Rows.Count; a++) { string time = dt.Rows[a][3].ToString(); string sender = dt.Rows[a][1].ToString(); string message = dt.Rows[a][2].ToString(); swSenderSender.WriteLine("MSG:" + parameters[1] + ":0:" + "[" + time + "] " + sender + ": " + message); } swSenderSender.Flush(); swSenderSender = null; SiusLog.Log(SiusLog.INFORMATION, "?messages", "Sent [" + p.name + "] their messages."); return; } else { if (parameters.Length < 5) { return; } string receiver = parameters[3]; string message = SiusUtil.Collate(4, parameters); string name = Player.GetPlayerName(parameters[1]); /*SQLite.SendQuery("INSERT INTO 'messages' (name,sender,message,time) " + * "VALUES ('" + receiver + "','" + * name + "','" + message + "','" + * System.DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") + "');"); * * SiusLog.Log(SiusLog.DEBUG, "messages", "[" + name + "] sent [" + receiver + * "] the following message: " + message);*/ /* Begin Database Connection */ DataTable dt = new DataTable(); SQLiteConnection SConnection = new SQLiteConnection(); SConnection.ConnectionString = SQLite.ConnectionString; SQLiteCommand cmd = new SQLiteCommand(SConnection); SQLiteParameter apname = new SQLiteParameter("@pname"); cmd.Parameters.Add(apname); apname.Value = name; //Check maximum number of messages sent if (!string.IsNullOrEmpty(SiusConf.GetSetting.String("maxsent"))) { SConnection.Open(); cmd.CommandText = @"SELECT * FROM messages WHERE name = @pname"; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); int rows = 0; for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i][4].ToString() == "0") { rows++; } } if (rows >= SiusConf.GetSetting.Integer("maxsent")) { Message.Send = "MSG:" + parameters[1] + ":0:Error: Too many messages have been sent out." + " Please wait a while before trying again"; SConnection.Dispose(); SiusLog.Log(SiusLog.INFORMATION, "?message", "Unable to send <" + receiver + "> " + name + "'s message (too many pending messages sent)."); return; } dt.Clear(); } //Check maximum number of messages received if (!string.IsNullOrEmpty(SiusConf.GetSetting.String("maxinbox"))) { SConnection.Open(); cmd.CommandText = @"SELECT * FROM messages WHERE sender = @pname"; SQLiteDataReader Reader = cmd.ExecuteReader(); dt.Load(Reader); Reader.Close(); SConnection.Close(); int rows = 0; for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i][4].ToString() == "0") { rows++; } } if (rows >= SiusConf.GetSetting.Integer("maxinbox")) { Message.Send = "MSG:" + parameters[1] + ":0:Error: This player's message inbox is full." + " Please try again at another time."; SConnection.Dispose(); SiusLog.Log(SiusLog.DEBUG, "?message", "Unable to send <" + receiver + "> " + name + "'s message (inbox full)."); return; } dt.Clear(); } //Send the message SConnection.Open(); cmd.CommandText = @"INSERT INTO 'messages' (name,sender,message,time) " + "VALUES (@receiver,@pname,@message,@utc);"; SQLiteParameter areceiver = new SQLiteParameter("@receiver"); SQLiteParameter amessage = new SQLiteParameter("@message"); SQLiteParameter autc = new SQLiteParameter("@utc"); cmd.Parameters.Add(areceiver); cmd.Parameters.Add(amessage); cmd.Parameters.Add(autc); areceiver.Value = receiver; amessage.Value = message; autc.Value = System.DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); cmd.ExecuteNonQuery(); SConnection.Close(); SConnection.Dispose(); /* End Database Connection */ Message.Send = "MSG:" + parameters[1] + ":0:Message has been sent to " + receiver; SiusLog.Log(SiusLog.INFORMATION, "?message", name + " sent " + receiver + " a message."); SiusLog.Log(SiusLog.DEBUG, "?message", "Message: " + message); } }