コード例 #1
0
        public static ScriptModules New(
            Random random,
            GameDatabase db,
            AssetDatabase assetdb,
            GameSession game,
            NamesPool namesPool,
            GameSetup gameSetup)
        {
            ScriptModules scriptModules = new ScriptModules();

            scriptModules.VonNeumann      = VonNeumann.InitializeEncounter(db, assetdb);
            scriptModules.Swarmers        = Swarmers.InitializeEncounter(db, assetdb);
            scriptModules.Gardeners       = Gardeners.InitializeEncounter(db, assetdb);
            scriptModules.AsteroidMonitor = AsteroidMonitor.InitializeEncounter(db, assetdb);
            scriptModules.MorrigiRelic    = MorrigiRelic.InitializeEncounter(db, assetdb);
            scriptModules.Slaver          = Slaver.InitializeEncounter(db, assetdb);
            scriptModules.Pirates         = Pirates.InitializeEncounter(db, assetdb);
            scriptModules.Spectre         = Spectre.InitializeEncounter(db, assetdb);
            scriptModules.GhostShip       = GhostShip.InitializeEncounter(db, assetdb);
            scriptModules.MeteorShower    = MeteorShower.InitializeEncounter(db, assetdb);
            scriptModules.SystemKiller    = SystemKiller.InitializeEncounter(db, assetdb);
            scriptModules.Locust          = Locust.InitializeEncounter(db, assetdb);
            scriptModules.Comet           = Comet.InitializeEncounter(db, assetdb);
            if (db.HasEndOfFleshExpansion())
            {
                scriptModules.NeutronStar = NeutronStar.InitializeEncounter(db, assetdb);
                scriptModules.SuperNova   = SuperNova.InitializeEncounter();
            }
            scriptModules.AddEasterEggs(random, db, assetdb, game, namesPool, gameSetup);
            return(scriptModules);
        }
コード例 #2
0
        public static ScriptModules Resume(GameDatabase db)
        {
            ScriptModules scriptModules = new ScriptModules();

            scriptModules.VonNeumann      = VonNeumann.ResumeEncounter(db);
            scriptModules.Swarmers        = Swarmers.ResumeEncounter(db);
            scriptModules.Gardeners       = Gardeners.ResumeEncounter(db);
            scriptModules.AsteroidMonitor = AsteroidMonitor.ResumeEncounter(db);
            scriptModules.MorrigiRelic    = MorrigiRelic.ResumeEncounter(db);
            scriptModules.Slaver          = Slaver.ResumeEncounter(db);
            scriptModules.Pirates         = Pirates.ResumeEncounter(db);
            scriptModules.Spectre         = Spectre.ResumeEncounter(db);
            scriptModules.GhostShip       = GhostShip.ResumeEncounter(db);
            scriptModules.MeteorShower    = MeteorShower.ResumeEncounter(db);
            scriptModules.SystemKiller    = SystemKiller.ResumeEncounter(db);
            scriptModules.Locust          = Locust.ResumeEncounter(db);
            scriptModules.Comet           = Comet.ResumeEncounter(db);
            if (db.HasEndOfFleshExpansion())
            {
                scriptModules.NeutronStar = NeutronStar.ResumeEncounter(db);
                scriptModules.SuperNova   = SuperNova.ResumeEncounter();
            }
            List <PlayerInfo> list = db.GetPlayerInfos().Where <PlayerInfo>((Func <PlayerInfo, bool>)(x =>
            {
                if (!x.isStandardPlayer)
                {
                    return(!x.includeInDiplomacy);
                }
                return(false);
            })).ToList <PlayerInfo>();

            foreach (int playerID in db.GetStandardPlayerIDs().ToList <int>())
            {
                foreach (PlayerInfo playerInfo in list)
                {
                    DiplomacyInfo diplomacyInfo = db.GetDiplomacyInfo(playerID, playerInfo.ID);
                    if (diplomacyInfo.State != DiplomacyState.WAR)
                    {
                        db.UpdateDiplomacyState(playerID, playerInfo.ID, DiplomacyState.WAR, diplomacyInfo.Relations, true);
                    }
                }
            }
            return(scriptModules);
        }
コード例 #3
0
        private static void SimulateSwarmerQueen(
            Random rand,
            GameSession game,
            int systemId,
            FleetInfo randomsFleet,
            int aiPlayerID,
            List <FleetInfo> aiPlayerFleets)
        {
            int numToKill = rand.NextInclusive(4, 6);
            Dictionary <FleetInfo, List <ShipInfo> > shipsInFleets = CombatSimulatorRandoms.GetShipsInFleets(game, aiPlayerFleets);

            shipsInFleets.Sum <KeyValuePair <FleetInfo, List <ShipInfo> > >((Func <KeyValuePair <FleetInfo, List <ShipInfo> >, int>)(x => x.Value.Count));
            if (shipsInFleets.Sum <KeyValuePair <FleetInfo, List <ShipInfo> > >((Func <KeyValuePair <FleetInfo, List <ShipInfo> >, int>)(x =>
            {
                if (x.Value.Count <= 0)
                {
                    return(0);
                }
                return(x.Value.Sum <ShipInfo>((Func <ShipInfo, int>)(y =>
                {
                    if (y.DesignInfo == null)
                    {
                        return 0;
                    }
                    return CombatAI.GetShipStrength(y.DesignInfo.Class) / 3;
                })));
            })) <= 4)
            {
                foreach (KeyValuePair <FleetInfo, List <ShipInfo> > keyValuePair in shipsInFleets)
                {
                    foreach (ShipInfo shipInfo in keyValuePair.Value)
                    {
                        game.GameDatabase.RemoveShip(shipInfo.ID);
                    }
                    CombatSimulatorRandoms.FleetDestroyed(game, randomsFleet.PlayerID, keyValuePair.Key, (ShipInfo)null);
                    game.GameDatabase.RemoveFleet(keyValuePair.Key.ID);
                }
                if (game.GameDatabase.GetShipInfoByFleetID(randomsFleet.ID, false).ToList <ShipInfo>().Count == 0)
                {
                    game.GameDatabase.RemoveFleet(randomsFleet.ID);
                }
            }
            else
            {
                CombatSimulatorRandoms.UpdateShipsKilled(game, rand, shipsInFleets, randomsFleet.PlayerID, numToKill);
                List <ShipInfo> list = game.GameDatabase.GetShipInfoByFleetID(randomsFleet.ID, false).ToList <ShipInfo>();
                if (list.Count > 0)
                {
                    CombatSimulatorRandoms.FleetDestroyed(game, aiPlayerID, randomsFleet, list.First <ShipInfo>());
                }
                game.GameDatabase.RemoveFleet(randomsFleet.ID);
            }
            foreach (SwarmerInfo si in game.GameDatabase.GetSwarmerInfos().ToList <SwarmerInfo>())
            {
                if (si.QueenFleetId.HasValue)
                {
                    FleetInfo fleetInfo = game.GameDatabase.GetFleetInfo(si.QueenFleetId.Value);
                    if (fleetInfo != null && fleetInfo.SystemID == systemId)
                    {
                        Swarmers.ClearTransform(game.GameDatabase, si);
                    }
                }
            }
        }
コード例 #4
0
        private void SpawnMaxSwarmerAttackers(Swarmers swarmers)
        {
            if (this.m_MaxToCreate <= 0)
            {
                return;
            }
            Matrix rotationYpr = Matrix.CreateRotationYPR(this.m_SwarmerSpawner.Maneuvering.Rotation);

            rotationYpr.Position = this.m_SwarmerSpawner.Maneuvering.Position;
            int num1 = Math.Max(this.m_SwarmerSpawner.BattleRiderMounts.Count <BattleRiderMount>() - (this.m_LoadingSwarmers.Count + this.m_LoadingGuardians.Count + this.m_LaunchingShips.Count), 0);

            if (num1 == 0)
            {
                return;
            }
            int val2_1 = Math.Max(this.m_MaxSwarmers - (this.m_LoadingSwarmers.Count + this.m_SpawnedSwarmers.Count), 0);
            int val2_2 = Math.Max(this.m_MaxGuardians - (this.m_LoadingGuardians.Count + this.m_SpawnedGuardians.Count), 0);

            if (val2_1 + val2_2 == 0)
            {
                return;
            }
            int num2 = Math.Min(num1 / 2, val2_1);
            int num3 = Math.Min(num1 - num2, val2_2);
            int num4 = Math.Min(num2 + Math.Max(num1 - (num2 + num3), 0), val2_1);
            int num5 = num4 + num3;

            for (int index = 0; index < num5; ++index)
            {
                int designId;
                if (num4 > 0 && (index % 2 == 0 || num3 == 0))
                {
                    designId = swarmers.SwarmerDesignID;
                    --num4;
                }
                else if (num3 > 0)
                {
                    designId = swarmers.GuardianDesignID;
                    --num3;
                }
                else
                {
                    break;
                }
                Ship newShip = CombatAIController.CreateNewShip(this.m_Game.Game, rotationYpr, designId, this.m_SwarmerSpawner.ObjectID, this.m_SwarmerSpawner.InputID, this.m_SwarmerSpawner.Player.ObjectID);
                if (newShip != null)
                {
                    if (designId == swarmers.GuardianDesignID)
                    {
                        this.m_LoadingGuardians.Add(newShip);
                    }
                    else
                    {
                        this.m_LoadingSwarmers.Add(newShip);
                    }
                    --this.m_MaxToCreate;
                }
                if (this.m_MaxToCreate <= 0)
                {
                    break;
                }
            }
            if (this.m_LoadingSwarmers.Count <= 0 && this.m_LoadingGuardians.Count <= 0)
            {
                return;
            }
            this.m_State = SwarmerSpawnerStates.INTEGRATESWARMER;
        }