예제 #1
0
        /// <summary>
        /// Creates a lobby for a deathmatch game with 10 players
        /// </summary>
        /// <param name="module"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        public static ILobby Deathmatch(LobbiesModule module, Dictionary <string, string> properties, IPeer creator)
        {
            // Create the teams
            var team = new LobbyTeam("")
            {
                MaxPlayers = 10,
                MinPlayers = 1
            };

            var config = new LobbyConfig();

            // Create the lobby
            var lobby = new BaseLobby(module.GenerateLobbyId(),
                                      new[] { team }, module, config)
            {
                Name = ExtractLobbyName(properties)
            };

            // Override properties with what user provided
            lobby.SetLobbyProperties(properties);

            // Add control for the game speed
            lobby.AddControl(new LobbyPropertyData()
            {
                Label   = "Game Speed",
                Options = new List <string>()
                {
                    "1x", "2x", "3x"
                },
                PropertyKey = "speed"
            }, "2x"); // Default option

            return(lobby);
        }
예제 #2
0
        /// <summary>
        /// Creates a 3 vs 3 lobby, instead of the regular <see cref="GameLobby"/>,
        /// it uses the <see cref="GameLobbyAuto"/>, which demonstrates how you
        /// can extend game lobby functionality
        /// </summary>
        /// <param name="module"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        public static ILobby ThreeVsThreeQueue(LobbiesModule module, Dictionary <string, string> properties, IPeer creator)
        {
            // Create the teams
            var teamA = new LobbyTeam("Team Blue")
            {
                MaxPlayers = 3,
                MinPlayers = 1
            };
            var teamB = new LobbyTeam("Team Red")
            {
                MaxPlayers = 3,
                MinPlayers = 1
            };

            // Set their colors
            teamA.SetProperty("color", "0000FF");
            teamB.SetProperty("color", "FF0000");

            var config = new LobbyConfig()
            {
                EnableReadySystem = false,
                EnableManualStart = false
            };

            // Create the lobby
            var lobby = new BaseLobbyAuto(module.GenerateLobbyId(),
                                          new[] { teamA, teamB }, module, config)
            {
                Name = ExtractLobbyName(properties)
            };

            // Override properties with what user provided
            lobby.SetLobbyProperties(properties);

            // Add control for the game speed
            lobby.AddControl(new LobbyPropertyData()
            {
                Label   = "Game Speed",
                Options = new List <string>()
                {
                    "1x", "2x", "3x"
                },
                PropertyKey = "speed"
            }, "2x"); // Default option

            // Add control to enable/disable gravity
            lobby.AddControl(new LobbyPropertyData()
            {
                Label   = "Gravity",
                Options = new List <string>()
                {
                    "On", "Off"
                },
                PropertyKey = "gravity",
            });

            lobby.StartAutomation();

            return(lobby);
        }
예제 #3
0
파일: BaseLobby.cs 프로젝트: xyberviri/MST
        public BaseLobby(int lobbyId, IEnumerable <LobbyTeam> teams, LobbiesModule module, LobbyConfig config)
        {
            Logger = Mst.Create.Logger(typeof(BaseLobby).Name);

            Id       = lobbyId;
            Module   = module;
            GameIp   = "";
            GamePort = -1;

            Config = config;

            controls = new List <LobbyPropertyData>();
            membersByUsernameList = new Dictionary <string, LobbyMember>();
            membersByPeerIdList   = new Dictionary <int, LobbyMember>();
            propertiesList        = new MstProperties();
            teamsList             = teams.ToDictionary(t => t.Name, t => t);
            subscribersList       = new HashSet <IPeer>();

            MaxPlayers = teamsList.Values.Sum(t => t.MaxPlayers);
            MinPlayers = teamsList.Values.Sum(t => t.MinPlayers);
        }
예제 #4
0
        /// <summary>
        /// Creates a game for two vs two vs four. This example shows
        /// how you can setup different size teams, and add them different constraints.
        /// </summary>
        /// <param name="module"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        public static ILobby TwoVsTwoVsFour(LobbiesModule module, Dictionary <string, string> properties, IPeer creator)
        {
            // Create the teams
            var teamA = new LobbyTeam("Team Blue")
            {
                MaxPlayers = 2,
                MinPlayers = 1
            };
            var teamB = new LobbyTeam("Team Red")
            {
                MaxPlayers = 2,
                MinPlayers = 1
            };

            var teamC = new LobbyTeam("N00bs")
            {
                MaxPlayers = 4,
                MinPlayers = 0
            };

            // Set their colors
            teamA.SetProperty("color", "0000FF");
            teamB.SetProperty("color", "FF0000");
            teamC.SetProperty("color", "00FF00");

            var config = new LobbyConfig();

            // Create the lobby
            var lobby = new BaseLobby(module.NextLobbyId(),
                                      new[] { teamA, teamB, teamC }, module, config)
            {
                Name = ExtractLobbyName(properties)
            };

            // Override properties with what user provided
            lobby.SetLobbyProperties(properties);

            // Add control for the game speed
            lobby.AddControl(new LobbyPropertyData()
            {
                Label   = "Game Speed",
                Options = new List <string>()
                {
                    "1x", "2x", "3x"
                },
                PropertyKey = "speed"
            }, "2x"); // Default option

            // Add control to enable/disable gravity
            lobby.AddControl(new LobbyPropertyData()
            {
                Label   = "Gravity",
                Options = new List <string>()
                {
                    "On", "Off"
                },
                PropertyKey = "gravity",
            });

            return(lobby);
        }
예제 #5
0
 public BaseLobbyAuto(int lobbyId, IEnumerable <LobbyTeam> teams, LobbiesModule module, LobbyConfig config) : base(lobbyId, teams, module, config)
 {
     config.EnableManualStart = true;
     config.PlayAgainEnabled  = false;
     config.EnableGameMasters = false;
 }