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