public static bool AddPlayer(string roomName, Player player, bool welcomeMessage = true)
        {
            if (roomName == "Message")
                return true;

            if (player.CurrentRooms.Contains(roomName))
                return false;

            if (player.CurrentRooms.Count >= 10)
                return false;

            RoomInfo room;
            if (!roomStore.TryGetValue(roomName, out room))
            {
                if (!AddRoom(roomName))
                    return false;

                room = roomStore[roomName];
            }

            if (room.GetPlayerCount() >= ConfigManager.Config.Room.MaxPlayersPerRoom)
            {
                if (room.Incremental)
                {
                    // find next avaliable name to create new room
                    uint offset = 1u;
                    string newName = room.Name + "-" + (room.Id + offset);

                    while (!AddRoom(newName, room.Password, room.Permission, true, (room.Id + offset), false))
                        newName = room.Name + "-" + (room.Id + offset++);

                    room = roomStore[newName];
                }
                else
                    return false;
            }

            if (player.AdminRole < room.Permission)
                return false;

            if (!room.AddPlayer(player))
                return false;

            player.CurrentRooms.Add(room.Name);

            // notify client that joining room was successful
            var roomEnter = new PacketRoomEnter
            {
                RoomName = room.Name
            };

            player.Session.Send(roomEnter);

            // send current players in room to player joining
            var roomInfo = new PacketRoomInfo()
            {
                RoomName = room.Name,
                Reset    = false,
                Updated  = room.GeneratePlayerList(player)
            };

            player.Session.Send(roomInfo);

            // only display welcome message if player is not reconnecting to room
            if (welcomeMessage)
                player.SendRoomMessage(room.Name, "You have joined \"" + room.Name + "\"");

            return true;
        }