Ejemplo n.º 1
0
        public Game Join(Player player, string world)
        {
            if (!Games.ContainsKey(player.Level.LevelId))
            {
                Games.Add(player.Level.LevelId, new Game(this)
                {
                    Name  = player.Level.LevelId,
                    Level = player.Level,
                    State = GameState.Undefined
                });
            }

            if (!Games.ContainsKey(world))
            {
                if (!GameTemplates.ContainsKey(world))
                {
                    return(null);
                }

                GameSettings settings = GameTemplates[world];

                Level gameLevel = new Level(settings.Name, new AnvilWorldProvider(settings.ArenaWorldPath));
                gameLevel.Initialize();

                var spawn = gameLevel.SpawnPoint;
                if (!world.Equals("Default"))
                {
                    gameLevel.SpawnPoint = new BlockCoordinates
                    {
                        X = spawn.X,
                        Y = spawn.Y + 20,
                        Z = spawn.Z,
                    };
                }

                Games.Add(world, new Game(this)
                {
                    Name = world, Level = gameLevel, State = GameState.WaitingToStart
                });
            }

            Game currentGame = Games[player.Level.LevelId];
            Game game        = Games[world];

            if (game.State == GameState.Started || game.State == GameState.Finshed)
            {
                return(currentGame);
            }

            currentGame.RemovePlayer(player);

            game.AddPlayer(player);
            player.SpawnLevel(game.Level);
            game.Level.BroadcastTextMessage(string.Format("{0} joined game <{1}>.", player.Username, game.Name));

            return(game);
        }
Ejemplo n.º 2
0
            public override bool Execute(IEnumerable <string> arguments)
            {
                if (arguments.Count() < 2)
                {
                    Console.WriteLine("ERROR: Not enough arguments given!");
                    return(false);
                }

                var basePath  = arguments.ElementAt(0);
                var outputDir = arguments.ElementAt(1);

                if (!Directory.Exists(basePath))
                {
                    Console.WriteLine("ERROR: The game base path does not exist!");
                    return(false);
                }

                Directory.CreateDirectory(outputDir);

                var looseFilePath = Path.Combine(basePath, @"France\loosefiles_BinPC.pack");

                if (!File.Exists(looseFilePath))
                {
                    Console.WriteLine($"ERROR: Loosefile could not be found under \"{looseFilePath}\"!");
                    return(false);
                }

                var looseFile = new LooseFile();

                using (var fs = new FileStream(looseFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                    looseFile.Read(fs);

                var gameTemplatesEntry = looseFile.Files.Where(f => f.Name == "GameTemplates.wsd").FirstOrDefault();

                if (gameTemplatesEntry == null)
                {
                    Console.WriteLine("ERROR: Could not read GameTemplates.wsd from loosefiles!");
                    return(false);
                }

                var gameTemplates = new GameTemplates();

                using (var ms = new MemoryStream(gameTemplatesEntry.Data))
                    gameTemplates.Read(ms);

                return(true);
            }