protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; List <Building_LandingPad> freeLandingPads = Util_LandingPad.GetAllFreeLandingPads(map); if (freeLandingPads == null) { // Should not happen if CanFireNowSub returned true. return(false); } Building_LandingPad landingPad = freeLandingPads.RandomElement(); // Spawn landing damaged spaceship. FlyingSpaceshipLanding damagedSpaceship = Util_Spaceship.SpawnLandingSpaceship(landingPad, SpaceshipKind.Damaged); damagedSpaceship.HitPoints = Mathf.RoundToInt(Rand.Range(0.15f, 0.45f) * damagedSpaceship.HitPoints); string letterText = "-- Comlink with MiningCo. --\n\n" + "MiningCo. pilot:\n\n" + "\"Hello partner!\n" + "Our ship is damaged and we need some repairs before going back to the orbital station.\n" + "Help us and we will reward you. Business as usual!\n\n" + "-- End of transmission --\n\n" + "WARNING! Not helping the ship will negatively impact your partnership with MiningCo.."; Find.LetterStack.ReceiveLetter("Repairs request", letterText, LetterDefOf.NeutralEvent, new TargetInfo(landingPad.Position, landingPad.Map)); return(true); }
protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; Building_LandingPad landingPad = Util_LandingPad.GetBestAvailableLandingPadReachingMapEdge(map); if (landingPad == null) { // Should not happen if CanFireNowSub returned true. return(false); } // Spawn landing dispatcher spaceship. FlyingSpaceshipLanding dispatcherSpaceship = Util_Spaceship.SpawnLandingSpaceship(landingPad, SpaceshipKind.DispatcherDrop); return(true); }
protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; Building_LandingPad landingPad = Util_LandingPad.GetBestAvailableLandingPadReachingMapEdge(map); if (landingPad == null) { // Should not happen if CanFireNowSub returned true. return(false); } // Spawn landing dispatcher spaceship. FlyingSpaceshipLanding dispatcherSpaceship = Util_Spaceship.SpawnLandingSpaceship(landingPad, SpaceshipKind.DispatcherPick); // Spawn expedition team. List <Pawn> teamPawns = Expedition.GenerateExpeditionPawns(map); if (Rand.Value < 0.2f) { ApplyInjuriesOrIllnessToTeam(map, teamPawns); } return(SpawnTeamOnMapEdge(landingPad.Position, map, teamPawns)); }
// ===================== Main function ===================== /// <summary> /// When powered on, periodically spawn a supply spaceship and update dish rotation. /// </summary> public override void Tick() { base.Tick(); if (powerComp.PowerOn == false) { StopRotationSound(); } else { if (Find.TickManager.TicksGame >= this.nextSpaceshipLandingCheckTick) { this.nextSpaceshipLandingCheckTick = Find.TickManager.TicksGame + spaceshipLandingCheckPeriodInTick; // Update landing pads availability: it can change due to blocking trees for example. UpdateLandingPadAvailability(); // Try spawn periodic supply spaceship. if ((Util_Faction.MiningCoFaction.HostileTo(Faction.OfPlayer) == false) && (Util_Misc.Partnership.feeInSilver[this.Map] == 0) && (Find.TickManager.TicksGame >= Util_Misc.Partnership.nextPeriodicSupplyTick[this.Map]) && this.landingPadIsAvailable && (this.Map.GameConditionManager.ConditionIsActive(GameConditionDefOf.SolarFlare) == false) && (this.Map.GameConditionManager.ConditionIsActive(GameConditionDefOf.ToxicFallout) == false)) { Building_LandingPad landingPad = Util_LandingPad.GetBestAvailableLandingPad(this.Map); if (landingPad != null) { // Found an available landing pad. Spawn periodic supply spaceship. Util_Spaceship.SpawnLandingSpaceship(landingPad, SpaceshipKind.CargoPeriodic); } } } // Satellite dish rotation. UpdateDishRotation(); } }
public DiaOption GetCargoSupplyDiaOption(Building_OrbitalRelay orbitalRelay) { DiaOption cargoSupplyDiaOption = new DiaOption("Request cargo supply (" + Util_Spaceship.cargoSupplyCostInSilver + " silver)"); Building_LandingPad landingPad = Util_LandingPad.GetBestAvailableLandingPad(this.Map); if (Find.TickManager.TicksGame <= Util_Misc.Partnership.nextRequestedSupplyMinTick[this.Map]) { cargoSupplyDiaOption.Disable("no available ship for now"); } else if (TradeUtility.ColonyHasEnoughSilver(this.Map, Util_Spaceship.cargoSupplyCostInSilver) == false) { cargoSupplyDiaOption.Disable("not enough silver"); } else if (landingPad == null) { cargoSupplyDiaOption.Disable("no available landing pad"); } else if (this.Map.GameConditionManager.ConditionIsActive(GameConditionDefOf.ToxicFallout)) { cargoSupplyDiaOption.Disable("toxic fallout"); } cargoSupplyDiaOption.action = delegate { TradeUtility.LaunchSilver(this.Map, Util_Spaceship.cargoSupplyCostInSilver); Util_Spaceship.SpawnLandingSpaceship(landingPad, SpaceshipKind.CargoRequested); }; DiaNode supplyShipAcceptedDiaNode = new DiaNode("\"Alright, a supply ship should arrive soon with our best stuff.\n" + "Greetings partner!\"\n\n" + "-- End of transmission --"); DiaOption supplyShipAcceptedDiaOption = new DiaOption("OK"); supplyShipAcceptedDiaOption.resolveTree = true; supplyShipAcceptedDiaNode.options.Add(supplyShipAcceptedDiaOption); cargoSupplyDiaOption.link = supplyShipAcceptedDiaNode; return(cargoSupplyDiaOption); }
public DiaOption GetMedicalSupplyDiaOption(Building_OrbitalRelay orbitalRelay) { DiaOption medicalSupplyDiaOption = new DiaOption("Request medical supply (" + Util_Spaceship.medicalSupplyCostInSilver + " silver)"); Building_LandingPad landingPad = Util_LandingPad.GetBestAvailableLandingPad(this.Map); if (Find.TickManager.TicksGame <= Util_Misc.Partnership.nextMedicalSupplyMinTick[this.Map]) { medicalSupplyDiaOption.Disable("no available ship for now"); } else if (TradeUtility.ColonyHasEnoughSilver(this.Map, Util_Spaceship.medicalSupplyCostInSilver) == false) { medicalSupplyDiaOption.Disable("not enough silver"); } else if (landingPad == null) { medicalSupplyDiaOption.Disable("no available landing pad"); } else if (this.Map.GameConditionManager.ConditionIsActive(GameConditionDefOf.ToxicFallout)) { medicalSupplyDiaOption.Disable("toxic fallout"); } medicalSupplyDiaOption.action = delegate { TradeUtility.LaunchSilver(this.Map, Util_Spaceship.medicalSupplyCostInSilver); Util_Spaceship.SpawnLandingSpaceship(landingPad, SpaceshipKind.Medical); }; DiaNode supplyShipAcceptedDiaNode = new DiaNode("\"We are sending you a medical ship immediately.\n\n" + "Hold on down there, we're coming!\n\n" + "-- End of transmission --"); DiaOption supplyShipAcceptedDiaOption = new DiaOption("OK"); supplyShipAcceptedDiaOption.resolveTree = true; supplyShipAcceptedDiaNode.options.Add(supplyShipAcceptedDiaOption); medicalSupplyDiaOption.link = supplyShipAcceptedDiaNode; return(medicalSupplyDiaOption); }