Пример #1
0
        /// <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 });
            }
        }
Пример #2
0
        /// <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.");
        }
Пример #3
0
 /// <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);
 }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
 /// <summary>
 /// Disposes of any resources used by this game
 /// </summary>
 public void Dispose()
 {
     _gameData.Dispose();
     _game = null;
 }