Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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.");
                }
            }
        }
Esempio n. 3
0
        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;
                    }
                }
            }
        }
Esempio n. 4
0
        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;
                    }
                }
            }
        }
Esempio n. 5
0
        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.";
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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;
                }
            }
        }
Esempio n. 8
0
        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;
                    }
                }
            }
        }
Esempio n. 9
0
        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;
        }
Esempio n. 10
0
        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]));
        }
Esempio n. 11
0
        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);
            }
        }