/// <summary> /// Fills the PlayerTable with players and their teams /// </summary> /// <param name="server">A reference to the Allsrv server</param> public void Initialize(IAdminServer server) { _players.Clear(); foreach (IAdminUser User in server.Users) { string Callsign = User.Name; IAGCGame TempGame = User.Ship.Game; int GameID = TempGame.GameID; // Find this player's team int TeamID = 0; for (int j = 0; j < TempGame.Teams.Count; j++) { object TeamIndex = j; IAGCTeam Team = TempGame.Teams.get_Item(ref TeamIndex); if (User.Ship.Team == Team) { break; } TeamID += 1; } _players.Rows.Add(new object[] { Callsign, GameID, TeamID }); } }
/// <summary> /// Initializes the GameServer and reads the games from the server /// </summary> public static void Initialize() { _players = new Players(_server); // Start Allsrv if not already started if (!AllsrvConnector.IsRunning()) { AllsrvConnector.StartAllsrv(); } // Connect to Allsrv and retrieve the server object _connector = AllsrvConnector.Connect(); _server = _connector.Session.Server; TagTrace.WriteLine(TraceLevel.Info, "Connection to Allsrv established."); // Load Player list TagTrace.WriteLine(TraceLevel.Verbose, "Retrieving players..."); _players.Initialize(_server); TagTrace.WriteLine(TraceLevel.Info, "Playerlist loaded. {0} players online.", _players.Count); // Read the games TagTrace.WriteLine(TraceLevel.Verbose, "Reading Games..."); _games = new Games(); for (int i = 0; i < _server.Games.Count; i++) { object Index = (object)i; IAGCGame TempGame = _server.Games.get_Item(ref Index); Game NewGame = new Game(TempGame); _games.Add(NewGame); // Initialize game if in progress if (NewGame.InProgress) { // Get StartTime DateTime StartTime = DateTime.FromOADate(TempGame.GameParameters.TimeStart); // Initialize game NewGame.Start(StartTime); // Log event NewGame.GameData.LogGameStarted(StartTime); } } TagTrace.WriteLine(TraceLevel.Info, "Games read. {0} games online.", _games.Count); // Connect event handlers TagTrace.WriteLine(TraceLevel.Verbose, "Hooking up events..."); AGCEventHandler.Initialize(_connector); TagTrace.WriteLine(TraceLevel.Verbose, "Events connected."); }
/// <summary> /// Default Constructor /// </summary> /// <param name="game">Allsrv's IAGCGame interface</param> public Game(IAGCGame game) { _game = game; _gameID = game.GameID; _gameData = new GameData(game.Name, game.GameParameters.IGCStaticFile, GameSettingsHelper.GetMapName(game), game.GameParameters.IsSquadGame, game.GameParameters.IsGoalConquest, game.GameParameters.IsGoalTeamKills, game.GameParameters.GoalTeamKills, game.GameParameters.AllowFriendlyFire, game.GameParameters.ShowMap, game.GameParameters.AllowDevelopments, game.GameParameters.AllowShipyardPath, game.GameParameters.AllowDefections, game.GameParameters.InvulnerableStations, game.GameParameters.ScoresCount, game.GameParameters.MaxImbalance, game.GameParameters.StartingMoney, game.GameParameters.He3Density, GameSettingsHelper.GetResources(game), DateTime.FromOADate(game.GameParameters.TimeStart), DateTime.FromOADate(game.GameParameters.TimeStart)); _gameEndedMRE = new ManualResetEvent(false); }
/// <summary> /// Attempts to load the game with the specified ID from Allsrv /// </summary> /// <param name="gameID">The ID of the game to load</param> /// <returns>A reference to the newly-added game</returns> public static Game LoadGame(int gameID) { Game Result = null; if (gameID > 0) { for (int i = 0; i < _server.Games.Count; i++) { object Index = i; IAGCGame NewGame = _server.Games.get_Item(ref Index); if (NewGame.GameID == gameID) { Result = new Game(NewGame); _games.Add(Result); break; } } } return(Result); }
/// <summary> /// Convert the map number into a map name for the specified game /// </summary> /// <param name="game">The game whose MapName should be retrieved</param> public static string GetMapName(IAGCGame game) { string Result = game.GameParameters.CustomMap; if (Result.Equals(string.Empty)) { switch (game.GameParameters.MapType) { case 0: Result = "Single Ring"; break; case 1: Result = "Double Ring"; break; case 2: Result = "Pinwheel"; break; case 3: Result = "Diamond Ring"; break; case 4: Result = "Snowflake"; break; case 5: Result = "Split Bases"; break; case 6: Result = "Brawl"; break; case 7: Result = "Big Ring"; break; case 8: Result = "HiLo"; break; case 9: Result = "HiHigher"; break; case 10: Result = "Star"; break; case 11: Result = "InsideOut"; break; case 12: Result = "Grid"; break; case 13: Result = "East West"; break; case 14: Result = "Large Split"; break; default: break; } } return(Result); }
/// <summary> /// Retrieves the Resources setting for this game /// </summary> /// <param name="game">The game whose resources setting should be read</param> /// <returns>The integer representing the resources setting, or -1 if "custom"</returns> public static int GetResources(IAGCGame game) { int Result = -1; // Very Scarce if (game.GameParameters.NeutralSectorMineableAsteroids == 2 && game.GameParameters.PlayerSectorMineableAsteroids == 0 && game.GameParameters.NeutralSectorSpecialAsteroids == 1 && game.GameParameters.PlayerSectorSpecialAsteroids == 0) { Result = 0; } // Scarce if (game.GameParameters.NeutralSectorMineableAsteroids == 2 && game.GameParameters.PlayerSectorMineableAsteroids == 1 && game.GameParameters.NeutralSectorSpecialAsteroids == 1 && game.GameParameters.PlayerSectorSpecialAsteroids == 1) { Result = 1; } // Scarce+ if (game.GameParameters.NeutralSectorMineableAsteroids == 2 && game.GameParameters.PlayerSectorMineableAsteroids == 2 && game.GameParameters.NeutralSectorSpecialAsteroids == 1 && game.GameParameters.PlayerSectorSpecialAsteroids == 2) { Result = 2; } // Normal if (game.GameParameters.NeutralSectorMineableAsteroids == 4 && game.GameParameters.PlayerSectorMineableAsteroids == 2 && game.GameParameters.NeutralSectorSpecialAsteroids == 1 && game.GameParameters.PlayerSectorSpecialAsteroids == 1) { Result = 3; } // N:NoHomeS if (game.GameParameters.NeutralSectorMineableAsteroids == 4 && game.GameParameters.PlayerSectorMineableAsteroids == 2 && game.GameParameters.NeutralSectorSpecialAsteroids == 1 && game.GameParameters.PlayerSectorSpecialAsteroids == 0) { Result = 4; } // Equal if (game.GameParameters.NeutralSectorMineableAsteroids == 2 && game.GameParameters.PlayerSectorMineableAsteroids == 2 && game.GameParameters.NeutralSectorSpecialAsteroids == 2 && game.GameParameters.PlayerSectorSpecialAsteroids == 0) { Result = 5; } // Plentiful if (game.GameParameters.NeutralSectorMineableAsteroids == 4 && game.GameParameters.PlayerSectorMineableAsteroids == 2 && game.GameParameters.NeutralSectorSpecialAsteroids == 2 && game.GameParameters.PlayerSectorSpecialAsteroids == 1) { Result = 6; } // P:NoHomeS if (game.GameParameters.NeutralSectorMineableAsteroids == 4 && game.GameParameters.PlayerSectorMineableAsteroids == 2 && game.GameParameters.NeutralSectorSpecialAsteroids == 2 && game.GameParameters.PlayerSectorSpecialAsteroids == 0) { Result = 7; } return(Result); }
/// <summary> /// Disposes of any resources used by this game /// </summary> public void Dispose() { _gameData.Dispose(); _game = null; }