Ejemplo n.º 1
0
        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.SpawnSpaceship(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);
        }
        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");
            }
            cargoSupplyDiaOption.action = delegate
            {
                TradeUtility.LaunchSilver(this.Map, Util_Spaceship.cargoSupplyCostInSilver);
                Util_Spaceship.SpawnSpaceship(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");
            }
            medicalSupplyDiaOption.action = delegate
            {
                TradeUtility.LaunchSilver(this.Map, Util_Spaceship.medicalSupplyCostInSilver);
                Util_Spaceship.SpawnSpaceship(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);
        }
Ejemplo n.º 4
0
        // ===================== Main function =====================
        public override void Tick()
        {
            base.Tick();

            if (powerComp.PowerOn == false)
            {
                StopRotationSound();
            }
            else
            {
                if (Find.TickManager.TicksGame >= this.nextSpaceshipLandingCheckTick)
                {
                    // Update landing pads availability.
                    this.nextSpaceshipLandingCheckTick = Find.TickManager.TicksGame + spaceshipLandingCheckPeriodInTick;
                    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]))
                    {
                        Building_LandingPad landingPad = Util_LandingPad.GetBestAvailableLandingPad(this.Map);
                        if (landingPad != null)
                        {
                            // Found an available landing pad. Spawn periodic supply spaceship.
                            Util_Spaceship.SpawnSpaceship(landingPad, SpaceshipKind.CargoPeriodic);
                        }
                    }
                }

                // Satellite dish rotation.
                UpdateDishRotation();
            }
        }
Ejemplo n.º 5
0
        // ===================== Main function =====================
        public override void Tick()
        {
            base.Tick();

            // Light flash to help beacon localization.
            if (Find.TickManager.TicksGame >= this.nextFlashTick)
            {
                MoteMaker.MakeStaticMote(this.Position.ToVector3Shifted(), this.Map, ThingDefOf.Mote_ShotFlash, 5f);
                this.nextFlashTick = Find.TickManager.TicksGame + flashPeriodInTicks;
            }

            if ((this.remainingRuns > 0) &&
                (Find.TickManager.TicksGame >= this.nextStrikeTick))
            {
                // Start new run.
                Util_Spaceship.SpawnStrikeShip(this.Map, this.Position, this.airStrikeDef);
                this.remainingRuns--;
                this.nextStrikeTick = Find.TickManager.TicksGame + ticksBetweenRuns;
            }
            if (this.remainingRuns == 0)
            {
                // Air strike is finished.
                this.Destroy();
            }
        }
        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.SpawnSpaceship(landingPad, SpaceshipKind.DispatcherDrop);

            return(true);
        }
Ejemplo n.º 7
0
        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));
        }
Ejemplo n.º 8
0
        // ===================== 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();
            }
        }