public void ExecuteInstance(GameDatabase gamedb, AssetDatabase assetdb, int systemid) { StarSystemInfo starSystemInfo1 = gamedb.GetStarSystemInfo(systemid); StarSystemInfo starSystemInfo2 = EncounterTools.GetClosestStars(gamedb, starSystemInfo1).Last <StarSystemInfo>(); int fleetID = gamedb.InsertFleet(this.PlayerId, 0, 0, 0, "System Killer", FleetType.FL_NORMAL); gamedb.InsertShip(fleetID, this._systemKillerDesignId, null, (ShipParams)0, new int?(), 0); int missionID = gamedb.InsertMission(fleetID, MissionType.STRIKE, starSystemInfo1.ID, 0, 0, 0, false, new int?()); gamedb.InsertWaypoint(missionID, WaypointType.TravelTo, new int?(starSystemInfo1.ID)); gamedb.InsertMoveOrder(fleetID, 0, starSystemInfo1.Origin - Vector3.Normalize(starSystemInfo2.Origin - starSystemInfo1.Origin) * 10f, starSystemInfo1.ID, Vector3.Zero); gamedb.InsertSystemKillerInfo(new SystemKillerInfo() { Target = starSystemInfo2.Origin, FleetId = new int?(fleetID) }); }
private int SetNextScoutTarget( GameSession game, LocustSwarmInfo info, StarSystemInfo currentSystem, LocustSwarmScoutInfo scout, List <int> scoutedSystems) { List <int> previousTargets = game.GameDatabase.GetLocustSwarmTargets().ToList <int>(); List <StarSystemInfo> closestStars = EncounterTools.GetClosestStars(game.GameDatabase, currentSystem); closestStars.RemoveAll((Predicate <StarSystemInfo>)(x => previousTargets.Contains(x.ID))); closestStars.RemoveAll((Predicate <StarSystemInfo>)(x => scoutedSystems.Contains(x.ID))); if (closestStars.Count > 0) { scout.TargetSystemId = closestStars.First <StarSystemInfo>().ID; int num = game.GameDatabase.InsertFleet(this.PlayerId, 0, currentSystem.ID, currentSystem.ID, "Locust Swarm Scout", FleetType.FL_NORMAL); game.GameDatabase.TransferShip(scout.ShipId, num); int missionID = game.GameDatabase.InsertMission(num, MissionType.SURVEY, scout.TargetSystemId, 0, 0, 0, false, new int?()); Kerberos.Sots.StarFleet.StarFleet.SetWaypointsForMission(game, MissionType.SURVEY, missionID, num, scout.TargetSystemId, 0, new int?(currentSystem.ID)); game.GameDatabase.UpdateLocustSwarmScoutInfo(scout); } return(scout.TargetSystemId); }
public static List <StarSystemInfo> GetClosestStars( GameDatabase game, int SystemId) { return(EncounterTools.GetClosestStars(game, game.GetStarSystemInfo(SystemId))); }
public void UpdateTurn(GameSession game, int id) { SystemKillerInfo si = game.GameDatabase.GetSystemKillerInfo(id); FleetInfo fleetInfo = si.FleetId.HasValue ? game.GameDatabase.GetFleetInfo(si.FleetId.Value) : (FleetInfo)null; if (fleetInfo == null) { game.GameDatabase.RemoveEncounter(si.Id); } else { MissionInfo missionByFleetId = game.GameDatabase.GetMissionByFleetID(fleetInfo.ID); StarSystemInfo systemInfo = game.GameDatabase.GetStarSystemInfo(fleetInfo.SystemID); if (game.GameDatabase.GetMoveOrderInfoByFleetID(fleetInfo.ID) != null) { return; } List <OrbitalObjectInfo> list = game.GameDatabase.GetStarSystemOrbitalObjectInfos(fleetInfo.SystemID).ToList <OrbitalObjectInfo>(); list.RemoveAll((Predicate <OrbitalObjectInfo>)(x => { if (game.GameDatabase.GetAsteroidBeltInfo(x.ID) == null && game.GameDatabase.GetLargeAsteroidInfo(x.ID) == null) { return(game.GameDatabase.GetStationInfo(x.ID) != null); } return(true); })); if (list.Any <OrbitalObjectInfo>()) { if (game.isHostilesAtSystem(this.PlayerId, fleetInfo.SystemID)) { return; } OrbitalObjectInfo orbitalObjectInfo = list.OrderBy <OrbitalObjectInfo, float>((Func <OrbitalObjectInfo, float>)(x => x.OrbitalPath.Scale.Length)).First <OrbitalObjectInfo>(); game.GameDatabase.InsertTurnEvent(new TurnEvent() { EventType = TurnEventType.EV_PLANET_DESTROYED, EventMessage = TurnEventMessage.EM_PLANET_DESTROYED, PlayerID = this.PlayerId, SystemID = orbitalObjectInfo.StarSystemID, OrbitalID = orbitalObjectInfo.ID, TurnNumber = game.GameDatabase.GetTurnCount(), ShowsDialog = false }); game.GameDatabase.DestroyOrbitalObject(game, orbitalObjectInfo.ID); } else { if (missionByFleetId != null) { game.GameDatabase.RemoveMission(missionByFleetId.ID); } List <StarSystemInfo> closestStars = EncounterTools.GetClosestStars(game.GameDatabase, fleetInfo.SystemID); double maxCos = Math.Cos(Math.PI / 3.0); StarSystemInfo starSystemInfo = closestStars.FirstOrDefault <StarSystemInfo>((Func <StarSystemInfo, bool>)(x => (double)Vector3.Dot(Vector3.Normalize(si.Target - systemInfo.Origin), Vector3.Normalize(x.Origin - systemInfo.Origin)) > maxCos)); if (starSystemInfo == (StarSystemInfo)null) { foreach (int standardPlayerId in game.GameDatabase.GetStandardPlayerIDs()) { if (StarMap.IsInRange(game.GameDatabase, standardPlayerId, game.GameDatabase.GetFleetLocation(fleetInfo.ID, false).Coords, 1f, (Dictionary <int, List <ShipInfo> >)null)) { game.GameDatabase.InsertTurnEvent(new TurnEvent() { EventType = TurnEventType.EV_SYS_KILLER_LEAVING, EventMessage = TurnEventMessage.EM_SYS_KILLER_LEAVING, PlayerID = this.PlayerID, TurnNumber = game.GameDatabase.GetTurnCount() }); } } game.GameDatabase.RemoveFleet(fleetInfo.ID); game.GameDatabase.RemoveEncounter(si.Id); } else { int missionID = game.GameDatabase.InsertMission(fleetInfo.ID, MissionType.STRIKE, starSystemInfo.ID, 0, 0, 0, false, new int?()); game.GameDatabase.InsertWaypoint(missionID, WaypointType.TravelTo, new int?(starSystemInfo.ID)); game.GameDatabase.InsertMoveOrder(fleetInfo.ID, 0, game.GameDatabase.GetStarSystemOrigin(fleetInfo.SystemID), starSystemInfo.ID, Vector3.Zero); game.GameDatabase.UpdateFleetLocation(fleetInfo.ID, 0, new int?()); } if (systemInfo != (StarSystemInfo)null) { game.GameDatabase.DestroyStarSystem(game, systemInfo.ID); } if (!(game.App.CurrentState is StarMapState)) { return; } ((StarMapState)game.App.CurrentState).ClearSelectedObject(); ((StarMapState)game.App.CurrentState).RefreshStarmap(StarMapState.StarMapRefreshType.REFRESH_ALL); } } }
public void HandleGardenerCaptured( GameSession game, GameDatabase gamedb, int playerId, int gardenerId) { GardenerInfo gardenerInfo = gamedb.GetGardenerInfo(gardenerId); if (gardenerInfo == null) { return; } FleetInfo fleetInfo = gamedb.GetFleetInfo(gardenerInfo.FleetId); if (fleetInfo == null) { return; } if (gardenerInfo.DeepSpaceSystemId.HasValue) { foreach (StationInfo stationInfo in game.GameDatabase.GetStationForSystem(gardenerInfo.DeepSpaceSystemId.Value).ToList <StationInfo>()) { game.GameDatabase.DestroyStation(game, stationInfo.ID, 0); } } fleetInfo.PlayerID = playerId; gamedb.UpdateFleetInfo(fleetInfo); FleetLocation fleetLocation = gamedb.GetFleetLocation(fleetInfo.ID, false); List <StarSystemInfo> closestStars = EncounterTools.GetClosestStars(gamedb, fleetLocation.Coords); StarSystemInfo starSystemInfo1 = (StarSystemInfo)null; foreach (StarSystemInfo starSystemInfo2 in closestStars) { int?systemOwningPlayer = gamedb.GetSystemOwningPlayer(starSystemInfo2.ID); if (systemOwningPlayer.HasValue && systemOwningPlayer.Value == playerId) { starSystemInfo1 = starSystemInfo2; break; } } if (!(starSystemInfo1 != (StarSystemInfo)null)) { return; } MissionInfo missionByFleetId = gamedb.GetMissionByFleetID(fleetInfo.ID); if (missionByFleetId != null) { gamedb.RemoveMission(missionByFleetId.ID); } MoveOrderInfo orderInfoByFleetId = gamedb.GetMoveOrderInfoByFleetID(fleetInfo.ID); if (orderInfoByFleetId != null) { gamedb.RemoveMoveOrder(orderInfoByFleetId.ID); } int missionID = gamedb.InsertMission(fleetInfo.ID, MissionType.RETURN, starSystemInfo1.ID, 0, 0, 0, false, new int?()); gamedb.InsertWaypoint(missionID, WaypointType.TravelTo, new int?(starSystemInfo1.ID)); gamedb.InsertMoveOrder(fleetInfo.ID, 0, fleetLocation.Coords, starSystemInfo1.ID, Vector3.Zero); this.SpawnProteanChaser(game, gardenerInfo); }
private bool SetNextWorldTarget( GameSession game, LocustSwarmInfo info, FleetInfo fleet, StarSystemInfo currentSystem) { List <int> previousTargets = game.GameDatabase.GetLocustSwarmTargets().ToList <int>(); List <StarSystemInfo> source = new List <StarSystemInfo>(); if (game.GameDatabase.HasEndOfFleshExpansion()) { List <LocustSwarmScoutInfo> list = game.GameDatabase.GetLocustSwarmScoutsForLocustNest(info.Id).ToList <LocustSwarmScoutInfo>(); if (list.Count > 0) { bool flag1 = true; foreach (LocustSwarmScoutInfo locustSwarmScoutInfo in list) { ShipInfo shipInfo = game.GameDatabase.GetShipInfo(locustSwarmScoutInfo.ShipId, false); if (shipInfo != null) { int fleetId1 = shipInfo.FleetID; int?fleetId2 = info.FleetId; if ((fleetId1 != fleetId2.GetValueOrDefault() ? 1 : (!fleetId2.HasValue ? 1 : 0)) != 0) { flag1 = false; break; } } } if (!flag1) { return(true); } bool flag2 = false; List <StarSystemInfo> starSystemInfoList = new List <StarSystemInfo>(); foreach (LocustSwarmScoutTargetInfo swarmScoutTargetInfo in game.GameDatabase.GetLocustSwarmScoutTargetInfos().ToList <LocustSwarmScoutTargetInfo>()) { if (swarmScoutTargetInfo.SystemId != currentSystem.ID) { flag2 = true; int num = 0; foreach (PlanetInfo planetInfo in ((IEnumerable <PlanetInfo>)game.GameDatabase.GetStarSystemPlanetInfos(swarmScoutTargetInfo.SystemId)).ToList <PlanetInfo>()) { num += planetInfo.Resources; } if (num > 0) { StarSystemInfo starSystemInfo = game.GameDatabase.GetStarSystemInfo(swarmScoutTargetInfo.SystemId); if (swarmScoutTargetInfo.IsHostile) { starSystemInfoList.Add(starSystemInfo); } else { source.Add(starSystemInfo); } } } } if (!flag2) { source = EncounterTools.GetClosestStars(game.GameDatabase, currentSystem); } if (source.Count == 0) { source.AddRange((IEnumerable <StarSystemInfo>)starSystemInfoList); } source.OrderBy <StarSystemInfo, float>((Func <StarSystemInfo, float>)(x => (x.Origin - currentSystem.Origin).LengthSquared)); } else { source = EncounterTools.GetClosestStars(game.GameDatabase, currentSystem); } } else { source = EncounterTools.GetClosestStars(game.GameDatabase, currentSystem); } source.RemoveAll((Predicate <StarSystemInfo>)(x => previousTargets.Contains(x.ID))); if (source.Count <= 0) { return(false); } game.GameDatabase.InsertLocustSwarmTarget(info.Id, fleet.SystemID); int id = source.First <StarSystemInfo>().ID; int missionID = game.GameDatabase.InsertMission(fleet.ID, MissionType.STRIKE, source.First <StarSystemInfo>().ID, 0, 0, 0, false, new int?()); game.GameDatabase.InsertWaypoint(missionID, WaypointType.TravelTo, new int?(id)); this.UpdateScoutedSystems(game, id); return(true); }