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; }