Example #1
0
        public void SendToRoom()
        {
            SyncNeeded = false;
            CanPlay    = true;

            if (CurrentRoom != null)
            {
                SendRoomList();

                ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                ez.Write1(1);
                ez.Write1(0);
                ez.WriteNT(CurrentRoom.Name);
                ez.WriteNT(CurrentRoom.Description);
                ez.Write1(1); // If this is 0, it won't change the players' screen
                ez.SendPack();

                foreach (User user in mainClass.Users)
                {
                    user.SendRoomPlayers();
                }

                CurrentRoomRights = RoomRights.Player;
                mainClass.SendChatAll(NameFormat() + Func.ChatColor("ffffff") + " joined the room.", CurrentRoom);

                if (CurrentRoom.Fixed)
                {
                    if (CurrentRoom.FixedMotd != "")
                    {
                        SendChatMessage(Func.ChatColor("00aa00") + CurrentRoom.FixedMotd);
                    }

                    if (CurrentRoom.FixedOperators.Contains(User_ID))
                    {
                        SendChatMessage(Func.ChatColor("0000aa") + "You are an operator in this fixed room.");
                        CurrentRoomRights = RoomRights.Operator;
                    }
                }
            }
            else
            {
                MainClass.AddLog("Not supported: Kicking from room. Fixme! User::SendToRoom", true);
            }
        }
Example #2
0
        public void NSCSMOnline()
        {
            packetCommandSub = ez.Read1();
            byte packetCommandSubSub = ez.Read1();

            if (packetCommandSub == 0) { // Login
                ez.Read1(); // Reserved byte

                string smoUsername = ez.ReadNT();
                string smoPassword = ez.ReadNT();

                if (!new Regex("^([A-F0-9]{32})$").Match(smoPassword).Success) {
                    ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                    ez.Write2(1);
                    ez.WriteNT("Login failed! Invalid password.");
                    ez.SendPack();

                    MainClass.AddLog("Invalid password hash given!", true);
                    return;
                }

                Hashtable[] smoLoginCheck = Sql.Query("SELECT * FROM \"users\" WHERE \"Username\"='" + Sql.AddSlashes(smoUsername) + "'");
                if (smoLoginCheck.Length == 1 && smoLoginCheck[0]["Password"].ToString() == smoPassword) {
                    MainClass.AddLog(smoUsername + " logged in.");

                    User_Table = smoLoginCheck[0];
                    User_ID = (int)User_Table["ID"];
                    User_Name = (string)User_Table["Username"];
                    User_Rank = (UserRank)User_Table["Rank"];

                    ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                    ez.Write2(0);
                    ez.WriteNT("Login success!");
                    ez.SendPack();

                    SendChatMessage(mainClass.ServerConfig.Get("Server_MOTD"));
                    SendRoomList();

                    User[] users = GetUsersInRoom();
                    foreach (User user in users)
                        user.SendRoomPlayers();

                    return;
                } else if (smoLoginCheck.Length == 0) {
                    if (bool.Parse(mainClass.ServerConfig.Get("Allow_Registration"))) {
                        Sql.Query("INSERT INTO main.users (\"Username\",\"Password\",\"Email\",\"Rank\",\"XP\") VALUES(\"" + Sql.AddSlashes(smoUsername) + "\",\"" + Sql.AddSlashes(smoPassword) + "\",\"\",0,0)");
                        MainClass.AddLog(smoUsername + " is now registered with hash " + smoPassword);

                        User_Table = Sql.Query("SELECT * FROM \"users\" WHERE \"Username\"='" + Sql.AddSlashes(smoUsername) + "' AND \"Password\"='" + Sql.AddSlashes(smoPassword) + "'")[0];
                        User_ID = (int)User_Table["ID"];
                        User_Name = (string)User_Table["Username"];
                        User_Rank = (UserRank)User_Table["Rank"];

                        ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                        ez.Write2(0);
                        ez.WriteNT("Login success!");
                        ez.SendPack();

                        SendChatMessage(mainClass.ServerConfig.Get("Server_MOTD"));
                        SendRoomList();

                        User[] users = GetUsersInRoom();
                        foreach (User user in users)
                            user.SendRoomPlayers();

                        return;
                    }
                }

                MainClass.AddLog(smoUsername + " tried logging in with hash " + smoPassword + " but failed");

                ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                ez.Write2(1);
                ez.WriteNT("Login failed! Invalid password.");
                ez.SendPack();
            } else if (packetCommandSub == 01) { // Join room
                if (!RequiresAuthentication()) return;

                if (ez.LastPacketSize == 0)
                    return;

                string joinRoomName = ez.ReadNT();
                string joinRoomPass = "";

                if (ez.LastPacketSize > 0)
                    joinRoomPass = ez.ReadNT();

                foreach (Room room in mainClass.Rooms) {
                    if (room.Name == joinRoomName && (room.Password == joinRoomPass || IsModerator())) {
                        CurrentRoom = room;
                        SendToRoom();
                        break;
                    }
                }
            } else if (packetCommandSub == 02) { // New room
                if (!RequiresAuthentication()) return;

                string newRoomName = ez.ReadNT();
                string newRoomDesc = ez.ReadNT();
                string newRoomPass = "";

                if (ez.LastPacketSize > 0)
                    newRoomPass = ez.ReadNT();

                MainClass.AddLog(User_Name + " made a new room '" + newRoomName + "'");

                Room newRoom = new Room(mainClass, this);

                newRoom.Name = newRoomName;
                newRoom.Description = newRoomDesc;
                newRoom.Password = newRoomPass;

                mainClass.Rooms.Add(newRoom);

                User[] users = GetUsersInRoom();
                foreach (User user in users)
                    user.SendRoomList();

                CurrentRoom = newRoom;
                CurrentRoomRights = RoomRights.Owner;
                SendToRoom();

                SendChatMessage("Welcome to your room! Type /help for a list of commands.");
            } else {
                // This is probably only for command sub 3, which is information you get when you hover over a room in the lobby.
                // TODO: Make NSCSMOnline sub packet 3 (room info on hover)
                //MainClass.AddLog( "Discarded unknown sub-packet " + packetCommandSub.ToString() + " for NSCSMOnline" );
                ez.Discard();
            }
        }
Example #3
0
        // Client sent SMO packet (note subpacket comments)
        public void NSCSMOnline()
        {
            packetCommandSub = ez.Read1();
            byte packetCommandSubSub = ez.Read1();

            if (packetCommandSub == 0) // Login
            {
                ez.Read1();            // Reserved byte

                string smoUsername = ez.ReadNT();
                string smoPassword = ez.ReadNT();

                if (!new Regex("^([A-F0-9]{32})$").Match(smoPassword).Success)
                {
                    ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                    ez.Write2(1);
                    ez.WriteNT("Login failed! Invalid password.");
                    ez.SendPack();

                    MainClass.AddLog("Invalid password hash given!", true);
                    return;
                }

                Hashtable[] smoLoginCheck = MySql.Query("SELECT * FROM users WHERE Username='******'");
                if (smoLoginCheck.Length == 1 && smoLoginCheck[0]["Password"].ToString() == smoPassword)
                {
                    MainClass.AddLog(smoUsername + " logged in.");

                    User_Table = smoLoginCheck[0];
                    User_ID    = (int)User_Table["ID"];
                    User_Name  = (string)User_Table["Username"];
                    User_Rank  = (UserRank)User_Table["Rank"];

                    ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                    ez.Write2(0);
                    ez.WriteNT("Login success!");
                    ez.SendPack();

                    SendChatMessage(mainClass.ServerConfig.Get("Server_MOTD"));
                    SendRoomList();

                    User[] users = GetUsersInRoom();
                    foreach (User user in users)
                    {
                        user.SendRoomPlayers();
                    }

                    return;
                }
                else if (smoLoginCheck.Length == 0)
                {
                    if (bool.Parse(mainClass.ServerConfig.Get("Allow_Registration")))
                    {
                        smoUsername = smoUsername.Trim();

                        if (smoUsername.Trim() == "")
                        {
                            ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                            ez.Write2(1);
                            ez.WriteNT("Registration failed! Invalid username.");
                            ez.SendPack();
                            return;
                        }

                        MySql.Query("INSERT INTO users (Username,Password,Email,Rank,XP) VALUES(\"" + MySql.AddSlashes(smoUsername) + "\",\"" + MySql.AddSlashes(smoPassword) + "\",\"\",0,0)");
                        MainClass.AddLog(smoUsername + " is now registered");

                        User_Table = MySql.Query("SELECT * FROM users WHERE Username='******' AND Password='******'")[0];
                        User_ID    = (int)User_Table["ID"];
                        User_Name  = (string)User_Table["Username"];
                        User_Rank  = (UserRank)User_Table["Rank"];

                        ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                        ez.Write2(0);
                        ez.WriteNT("Login success!");
                        ez.SendPack();

                        SendChatMessage(mainClass.ServerConfig.Get("Server_MOTD"));
                        SendRoomList();

                        User[] users = GetUsersInRoom();
                        foreach (User user in users)
                        {
                            user.SendRoomPlayers();
                        }

                        return;
                    }
                }

                MainClass.AddLog(smoUsername + " tried logging in but failed");

                ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                ez.Write2(1);
                ez.WriteNT("Login failed! Invalid password.");
                ez.SendPack();
            }
            else if (packetCommandSub == 01) // Join room
            {
                if (!RequiresAuthentication())
                {
                    return;
                }

                if (ez.LastPacketSize == 0)
                {
                    return;
                }

                string joinRoomName = ez.ReadNT();
                string joinRoomPass = "";

                if (ez.LastPacketSize > 0)
                {
                    joinRoomPass = ez.ReadNT();
                }

                foreach (Room room in mainClass.Rooms)
                {
                    if (room.Name == joinRoomName && (room.Password == joinRoomPass || IsModerator()))
                    {
                        CurrentRoomRights = RoomRights.Player;
                        CurrentRoom       = room;
                        SendToRoom();
                        break;
                    }
                }
            }
            else if (packetCommandSub == 02) // New room
            {
                if (!RequiresAuthentication())
                {
                    return;
                }

                string newRoomName = ez.ReadNT();
                string newRoomDesc = ez.ReadNT();
                string newRoomPass = "";

                if (ez.LastPacketSize > 0)
                {
                    newRoomPass = ez.ReadNT();
                }

                MainClass.AddLog(User_Name + " made a new room '" + newRoomName + "'");

                Room newRoom = new Room(mainClass, this);

                newRoom.Name        = newRoomName;
                newRoom.Description = newRoomDesc;
                newRoom.Password    = newRoomPass;

                mainClass.Rooms.Add(newRoom);

                User[] users = GetUsersInRoom();
                foreach (User user in users)
                {
                    user.SendRoomList();
                }

                CurrentRoom       = newRoom;
                CurrentRoomRights = RoomRights.Owner;
                SendToRoom();

                SendChatMessage("Welcome to your room! Type /help for a list of commands.");
            }
            else
            {
                // This is probably only for command sub 3, which is information you get when you hover over a room in the lobby.
                // TODO: Make NSCSMOnline sub packet 3 (room info on hover)
                //MainClass.AddLog( "Discarded unknown sub-packet " + packetCommandSub.ToString() + " for NSCSMOnline" );
                ez.Discard();
            }
        }
Example #4
0
        public void SendToRoom()
        {
            SyncNeeded = false;
              CanPlay = true;

              if (CurrentRoom != null) {
            SendRoomList();

            ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
            ez.Write1(1);
            ez.Write1(0);
            ez.WriteNT(CurrentRoom.Name);
            ez.WriteNT(CurrentRoom.Description);
            ez.Write1(1); // If this is 0, it won't change the players' screen
            ez.SendPack();

            foreach (User user in mainClass.Users)
              user.SendRoomPlayers();

            CurrentRoomRights = RoomRights.Player;
            mainClass.SendChatAll(NameFormat() + Func.ChatColor("ffffff") + " joined the room.", CurrentRoom);

            if (CurrentRoom.Fixed) {
              if (CurrentRoom.FixedMotd != "") {
            SendChatMessage(Func.ChatColor("00aa00") + CurrentRoom.FixedMotd);
              }

              if (CurrentRoom.FixedOperators.Contains(User_ID)) {
            SendChatMessage(Func.ChatColor("0000aa") + "You are an operator in this fixed room.");
            CurrentRoomRights = RoomRights.Operator;
              }
            }
              } else
            MainClass.AddLog("Not supported: Kicking from room. Fixme! User::SendToRoom", true);
        }
Example #5
0
        public void NSCSMS()
        {
            NSScreen oldScreen = CurrentScreen;
            NSScreen newScreen = (NSScreen)ez.Read1();

            User[] lobbyusers = GetUsersInRoom();
            foreach(User lobbyuser in lobbyusers)
            {
            lobbyuser.SendRoomList();
            lobbyuser.SendRoomPlayers();
            }
            if (newScreen == NSScreen.Lobby)
            {
            CurrentRoom = null;

            CurrentRoomRights = RoomRights.Player;
            CurrentScreen = newScreen;
            User[] roomusers = GetUsersInRoom();
            foreach(User roomuser in roomusers)
            {
                roomuser.SendRoomList();
                roomuser.SendRoomPlayers();
            }
            }
            else
            {

            if (newScreen == NSScreen.Room)
            {
                SendSong(false);
            }
            //	}else if (newScreen == NSScreen.Room) {
            //        // find people waiting for synchronization
            //        List<User> usersToSendPacketTo = new List<User>();
            //        foreach (User user in CurrentRoom.Users) {
            //          if (user.SyncNeeded) {
            //            usersToSendPacketTo.Add(user);
            //          }
            //        }

            //      } else if (newScreen == NSScreen.Room) {
            //        List<User> users = CurrentRoom.Users;
            //        // find people waiting for synchronization
            //        List<User> usersToSendPacketTo = new List<User>();
            //        foreach (User user in users) {
            //          if (user.SyncNeeded) {
            //            usersToSendPacketTo.Add(user);
            //          }
            //        }
            //
            //        // send packet those people
            //        SendSongStartTo(usersToSendPacketTo.ToArray());

            CurrentScreen = newScreen;

            User[] usersinroom = GetUsersInRoom();
            foreach (User user in usersinroom)
            {
                user.SendRoomPlayers();
            }
            }
        }
Example #6
0
        public void NSCSMOnline()
        {
            packetCommandSub = ez.Read1();

            //Client requested more info on room
            if (packetCommandSub == 3)
            {
            string joinRoomName = ez.ReadNT();
            ez.Discard();
            foreach (Room room in mainClass.Rooms)
            {
                if (room.Name == joinRoomName)
                {
                    //MainClass.AddLog("Found room name : " + room.Name);
                    MainClass.AddLog(Utf8Decode(room.CurrentSong.Name) + ", " + Utf8Decode(room.CurrentSong.SubTitle) + ", " + Utf8Decode(room.CurrentSong.Artist));
                    ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                    ez.Write1((byte)3);
                    ez.WriteNT(room.CurrentSong.Name);
                    ez.WriteNT(room.CurrentSong.SubTitle);
                    ez.WriteNT(room.CurrentSong.Artist);
                    ez.Write1((byte)room.Users.Count());
                    ez.Write1((byte)32);
                    foreach (User user in room.Users)
                    {
                        ez.WriteNT(user.User_Name);
                    }
                    return;

                }
            }

            }

            byte packetCommandSubSub = ez.Read1();

            if (packetCommandSub == 0)   // Login
            {
            ez.Read1(); // Reserved byte

            string smoUsername = ez.ReadNT();
            string smoPassword = ez.ReadNT();

            if (!new Regex("^([A-F0-9]{32})$").Match(smoPassword).Success)
            {
                ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                ez.Write2(1);
                ez.WriteNT("Login failed! Invalid password.");
                ez.SendPack();

                MainClass.AddLog("Invalid password hash given!", true);
                return;
            }

            if ( smoUsername.Length > 32 )
            {
                ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                ez.Write2(1);
                ez.WriteNT("Login failed! Name too Long");
                ez.SendPack();

                MainClass.AddLog("Login name too long:" + smoUsername, true);
                return;
            }

            Hashtable[] smoLoginCheck = MySql.Query("SELECT * from users where Username='******'");
            if (smoLoginCheck.Length == 1 && smoLoginCheck[0]["Password"].ToString() == smoPassword)
            {
                MainClass.AddLog(smoUsername + " logged in.");

                User_Table = smoLoginCheck[0];
                User_ID = (int)User_Table["ID"];
                User_Name = (string)User_Table["Username"];
                User_Rank = (UserRank)User_Table["Rank"];
                int User_XP = (int)User_Table["XP"];

                Hashtable[] checkstasrank = MySql.Query("select count(*) as 'levelrank' from users where xp > '" + User_XP.ToString() + "'");
                Rank_Table =  checkstasrank[0];
                User_Level_Rank = (int)Rank_Table["levelrank"] + 1;

                MySql.Query("INSERT INTO connectionlog (userid,username,password,ip,result,clientversion) VALUES('" + User_ID + "','" + MySql.AddSlashes(smoUsername) + "','" + smoPassword + "','" + User_IP + "','suceeded','" + MySql.AddSlashes(User_Game) + "')");

                User[] checkifconnected = GetUsersInServer();
                foreach (User user in  checkifconnected)
                {
                    if (user.User_Name.ToString() == this.User_Name.ToString())
                    {
                        connectioncount++;
                    }
                    if (connectioncount > 1 )
                    {
                        MainClass.AddLog("Kicking user " + this.User_Name.ToString() + " for duplicate login attempt");
                    }
                }
                if (connectioncount > 1)
                {
                    User[] kickconnected = GetUsersInServer();
                    foreach (User user in  kickconnected)
                    {
                        if (user.User_Name.ToString() == this.User_Name.ToString())
                        {
                            user.Kick();
                            break;
                        }
                    }
                }

                connectioncount = 0;
                ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                ez.Write2(0);
                ez.WriteNT("Login success!");
                ez.SendPack();

                SendChatMessage(mainClass.ServerConfig.Get("Server_MOTD"));
                string builddate = mainClass.RetrieveLinkerTimestamp().ToString("MM/dd/yy HH:mm:ss");
                SendChatMessage("Server was last updated on: "+ builddate);

                SendChatMessage("If you have not yet already Please create a room and run /scan");

                Hashtable[] checkforfriends = MySql.Query("select * from friends where friend = " + User_ID.ToString() + "");
                User[] allusers = GetUsersInServer();
                if (checkforfriends.Count() != 0 )
                {
                    for (int i = 0; i < checkforfriends.Count(); i++)
                    {
                        foreach (User user in allusers)
                        {
                            if (user.User_ID == (int)checkforfriends[i]["user"])
                            {
                                string time = DateTime.Now.ToString("HH:mm:ss");
                                user.SendChatMessage(Func.ChatColor("ffff00") + "Your friend: " + Func.ChatColor("ffffff") + "'" +NameFormat() + "'" + Func.ChatColor("ffff00") + " has connected to the server at " + time + "." + Func.ChatColor("ffffff"));
                            }
                        }
                    }
                }

                Hashtable[] checkforusers = MySql.Query("select * from friends where user = "******"");
                User[] allusersfriends = GetUsersInServer();
                if (checkforusers.Count() != 0 )
                {
                    for (int i = 0; i < checkforusers.Count(); i++)
                    {
                        foreach (User user in allusersfriends)
                        {
                            if (user.User_ID == (int)checkforusers[i]["friend"])
                            {
                                SendChatMessage(Func.ChatColor("ffff00") + "Your friend: " + Func.ChatColor("ffffff") + "'" + user.NameFormat() + "'" + Func.ChatColor("ffff00") + " Is on the server." + Func.ChatColor("ffffff"));
                            }
                        }
                    }
                }

                SendRoomList();

                User[] users = GetUsersInRoom();
                foreach (User user in users)
                    user.SendRoomPlayers();

                return;
            }
            else if (smoLoginCheck.Length == 0)
            {
                if (bool.Parse(mainClass.ServerConfig.Get("Allow_Registration")))
                {
                    MySql.Query("INSERT INTO users (Username,Password,Email,Rank,XP) VALUES(\'" + MySql.AddSlashes(smoUsername) + "\',\'" + MySql.AddSlashes(smoPassword) + "\',\'\',0,0)");
                    MainClass.AddLog(smoUsername + " is now registered with hash " + smoPassword);

                    User_Table = MySql.Query("SELECT * FROM users WHERE Username='******' AND Password='******'")[0];
                    User_ID = (int)User_Table["ID"];
                    User_Name = (string)User_Table["Username"];
                    User_Rank = (UserRank)User_Table["Rank"];

                    MySql.Query("INSERT INTO connectionlog (userid,username,password,ip,result,clientversion) VALUES('" + User_ID + "','" + MySql.AddSlashes(User_Name) + "','" + smoPassword + "','" + User_IP + "','suceeded','" + MySql.AddSlashes(User_Game) + "')");

                    ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
                    ez.Write2(0);
                    ez.WriteNT("Login success!");
                    ez.SendPack();

                    SendChatMessage(mainClass.ServerConfig.Get("Server_MOTD"));
                    SendRoomList();

                    User[] users = GetUsersInRoom();
                    foreach (User user in users)
                        user.SendRoomPlayers();

                    return;
                }
            }

            MainClass.AddLog(smoUsername + " tried logging in with hash " + smoPassword + " but failed");
            MySql.Query("INSERT INTO connectionlog (userid,username,password,ip,result,clientversion) VALUES('" + User_ID + "','" + MySql.AddSlashes(smoUsername) + "','" + smoPassword + "','" + User_IP + "','failed','" + MySql.AddSlashes(User_Game) + "')");

            ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCSMOnline));
            ez.Write2(1);
            ez.WriteNT("Login failed! Invalid password.");
            ez.SendPack();
            }
            else if (packetCommandSub == 01)     // Join room
            {
            if (!RequiresAuthentication()) return;

            if (ez.LastPacketSize == 0)
                return;

            string joinRoomName = ez.ReadNT();
            string joinRoomPass = "";

            if (ez.LastPacketSize > 0)
                joinRoomPass = ez.ReadNT();

            int roombanned = 0;
            foreach (Room room in mainClass.Rooms)
            {
                if (room.Name == joinRoomName)
                {
                    List<int> banned  = new List<int>(room.banned);
                    foreach (int banned_id in banned)
                    {
                        if (banned_id == User_ID)
                        {
                            roombanned = 1;
                            SendChatMessage("You have been banned from this room.");
                        }
                    }
                }

                if (room.Name == joinRoomName && (room.Password == joinRoomPass || IsModerator() || room.Password == joinpass) && roombanned == 0 )
                {
                    CurrentRoom = room;
                    SendToRoom();
                    break;
                }
            }
            }
            else if (packetCommandSub == 02)     // New room
            {
            if (!RequiresAuthentication()) return;

            string newRoomName = ez.ReadNT();
            string newRoomDesc = ez.ReadNT();
            string newRoomPass = "";

            if (ez.LastPacketSize > 0)
                newRoomPass = ez.ReadNT();

            MainClass.AddLog(User_Name + " made a new room '" + newRoomName + "'");
            Room newRoom = new Room(mainClass, this);

            newRoom.Name = newRoomName;
            newRoom.Description = newRoomDesc;
            newRoom.Password = newRoomPass;

            mainClass.Rooms.Add(newRoom);

            User[] users = GetUsersInRoom();
            foreach (User user in users)
                user.SendRoomList();

            CurrentRoom = newRoom;

            if (this.CurrentRoom != null)
            {
                if ( CurrentRoom.Password != "" )
                {
                    CurrentRoom.Status = RoomStatus.Locked;
                }
                else
                {
                    CurrentRoom.Status = RoomStatus.Ready;
                }
            }
            CurrentRoomRights = RoomRights.Owner;
            SendToRoom();
            UpdateRoomStatus();
            SendChatMessage("Welcome to your room! Type /help for a list of commands.");
            }
            else
            {
            // This is probably only for command sub 3, which is information you get when you hover over a room in the lobby.
            // TODO: Make NSCSMOnline sub packet 3 (room info on hover)
            //MainClass.AddLog( "Discarded unknown sub-packet " + packetCommandSub.ToString() + " for NSCSMOnline" );
            ez.Discard();
            }
        }