public static StationType ToType(this StationTypeFlags value) { for (int index = 0; index < 8; ++index) { StationType stationType = (StationType)index; StationTypeFlags flags = stationType.ToFlags(); if ((flags & value) == flags) { return(stationType); } } return(StationType.INVALID_TYPE); }
private static void SimulateIndyColony( Random rand, GameSession game, int systemId, ColonyInfo indyColony, Dictionary <PlayerInfo, List <FleetInfo> > enemyPlayers) { StarSystemInfo starSystemInfo = game.GameDatabase.GetStarSystemInfo(systemId); PlanetInfo planetInfo = game.GameDatabase.GetPlanetInfo(indyColony.OrbitalObjectID); List <PlayerInfo> standardPlayers = game.GameDatabase.GetStandardPlayerInfos().ToList <PlayerInfo>(); foreach (FleetInfo fleetInfo in game.GameDatabase.GetFleetInfoBySystemID(systemId, FleetType.FL_NORMAL).ToList <FleetInfo>()) { MissionInfo missionByFleetId = game.GameDatabase.GetMissionByFleetID(fleetInfo.ID); if (missionByFleetId != null && missionByFleetId.Type == MissionType.INVASION && missionByFleetId.TargetOrbitalObjectID == planetInfo.ID) { game.GameDatabase.InsertGovernmentAction(fleetInfo.PlayerID, App.Localize("@GA_INDEPENDANTCONQUERED"), "IndependantConquered", 0, 0); foreach (PlayerInfo playerInfo in standardPlayers) { if (game.GameDatabase.GetDiplomacyInfo(fleetInfo.PlayerID, playerInfo.ID).isEncountered) { game.GameDatabase.ApplyDiplomacyReaction(playerInfo.ID, fleetInfo.PlayerID, StratModifiers.DiplomacyReactionInvadeIndependentWorld, 1); } } } } game.GameDatabase.InsertTurnEvent(new TurnEvent() { EventType = TurnEventType.EV_COLONY_DESTROYED, EventMessage = TurnEventMessage.EM_COLONY_DESTROYED, PlayerID = indyColony.PlayerID, ColonyID = indyColony.ID, SystemID = systemId, TurnNumber = game.GameDatabase.GetTurnCount(), ShowsDialog = false }); StationTypeFlags stationTypeFlags = StationTypeFlags.CIVILIAN | StationTypeFlags.DIPLOMATIC | StationTypeFlags.DEFENCE; foreach (StationInfo stationInfo in game.GameDatabase.GetStationForSystemAndPlayer(systemId, indyColony.PlayerID).ToList <StationInfo>()) { int?parentId = stationInfo.OrbitalObjectInfo.ParentID; int id = planetInfo.ID; if ((parentId.GetValueOrDefault() != id ? 0 : (parentId.HasValue ? 1 : 0)) != 0 && ((StationTypeFlags)(1 << (int)(stationInfo.DesignInfo.StationType & (StationType)31)) & stationTypeFlags) != (StationTypeFlags)0) { game.GameDatabase.DestroyStation(game, stationInfo.ID, 0); } } game.GameDatabase.RemoveColonyOnPlanet(planetInfo.ID); if (enemyPlayers.Keys.Any <PlayerInfo>((Func <PlayerInfo, bool>)(x => standardPlayers.Any <PlayerInfo>((Func <PlayerInfo, bool>)(y => y.ID == x.ID))))) { GameSession.ApplyMoralEvent(game.App, MoralEvent.ME_LOSE_WORLD_ENEMY, indyColony.PlayerID, new int?(), starSystemInfo.ProvinceID, new int?()); } foreach (int num in enemyPlayers.Keys.Select <PlayerInfo, int>((Func <PlayerInfo, int>)(x => x.ID)).ToList <int>()) { int i = num; game.App.GameDatabase.ApplyDiplomacyReaction(indyColony.PlayerID, i, StratModifiers.DiplomacyReactionKillColony, 1); int factionId = game.App.GameDatabase.GetPlayerFactionID(indyColony.PlayerID); foreach (PlayerInfo playerInfo in standardPlayers.Where <PlayerInfo>((Func <PlayerInfo, bool>)(x => { if (x.FactionID == factionId) { return(x.ID != i); } return(false); })).ToList <PlayerInfo>()) { if (game.App.GameDatabase.GetDiplomacyInfo(i, playerInfo.ID).isEncountered) { game.App.GameDatabase.ApplyDiplomacyReaction(playerInfo.ID, i, StratModifiers.DiplomacyReactionKillRaceWorld, 1); } } } if (indyColony.CurrentStage == Kerberos.Sots.Data.ColonyStage.GemWorld) { GameSession.ApplyMoralEvent(game.App, MoralEvent.ME_LOSE_GEM, indyColony.PlayerID, new int?(), starSystemInfo.ProvinceID, new int?()); } else { if (indyColony.CurrentStage != Kerberos.Sots.Data.ColonyStage.ForgeWorld) { return; } GameSession.ApplyMoralEvent(game.App, MoralEvent.ME_LOSE_FORGE, indyColony.PlayerID, new int?(), starSystemInfo.ProvinceID, new int?()); } }