public override void PostMapGenerate()
        {
            if (!active)
            {
                return;
            }
            MapParent map = (MapParent)parent;

            List <Pawn> pawns = map.Map.mapPawns.FreeHumanlikesSpawnedOfFaction(parent.Faction).ToList();
            float       num   = 0;

            for (int i = 0; i < pawns.Count(); i++)
            {
                num += pawns[i].kindDef.combatPower;
            }
            if (num > 0)
            {
                SpawnPawnsFromPoints(num, CellFinder.RandomSpawnCellForPawnNear(pawns.RandomElement().RandomAdjacentCellCardinal(), map.Map, 10), map.Map);
            }
            var storyComp   = Find.Storyteller.storytellerComps.First(x => x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain);
            var threatparms = storyComp.GenerateParms(IncidentCategoryDefOf.ThreatBig, map.Map);

            threatparms.faction                 = enemy;
            threatparms.raidStrategy            = RaidStrategyDefOf.ImmediateAttack;
            threatparms.raidArrivalMode         = PawnsArrivalModeDefOf.EdgeWalkIn;
            threatparms.points                  = StorytellerUtility.DefaultSiteThreatPointsNow() * 2;
            threatparms.raidNeverFleeIndividual = true;
            IncidentDefOf.RaidEnemy.Worker.TryExecute(threatparms);
            foreach (Pawn p in map.Map.mapPawns.AllPawns)
            {
                map.Map.mapPawns.UpdateRegistryForPawn(p);
            }
        }
예제 #2
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map  map = parms.target as Map;
            bool result;
            int  num;

            if (TileFinder.TryFindNewSiteTile(out num, 7, 27, false, true, -1))
            {
                Site site = (Site)WorldObjectMaker.MakeWorldObject(PurpleIvyDefOf.PI_InfectedTile);
                site.Tile = num;
                site.SetFaction(PurpleIvyData.AlienFaction);
                site.AddPart(new SitePart(site, PurpleIvyDefOf.InfectedSite,
                                          PurpleIvyDefOf.InfectedSite.Worker.GenerateDefaultParams
                                              (StorytellerUtility.DefaultSiteThreatPointsNow(), num, PurpleIvyData.AlienFaction)));
                var comp = site.GetComponent <WorldObjectComp_InfectedTile>();
                comp.StartInfection();
                comp.gameConditionCaused = PurpleIvyDefOf.PurpleFogGameCondition;
                comp.counter             = 600;
                comp.infectedTile        = site.Tile;
                comp.radius = comp.GetRadius();
                PurpleIvyData.TotalFogProgress[comp] = PurpleIvyUtils.getFogProgress(comp.counter);
                comp.fillRadius(true);
                site.GetComponent <TimeoutComp>().StartTimeout(30 * 60000);
                Find.WorldObjects.Add(site);
                Find.LetterStack.ReceiveLetter("InfectedTile".Translate(),
                                               "InfectedTileDesc".Translate(), LetterDefOf.ThreatBig, site);
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }
예제 #3
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Caravan caravan = parms.target as Caravan;
            bool    result;

            if (caravan == null)
            {
                result = false;
            }
            else
            {
                int  tile;
                Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_Adventure);
                TileFinder.TryFindPassableTileWithTraversalDistance(caravan.Tile, 1, 2, out tile, (int t) => !Find.WorldObjects.AnyMapParentAt(t), false);
                site.Tile = tile;
                Faction faction = Find.FactionManager.RandomEnemyFaction(true, false, true, TechLevel.Spacer);
                site.SetFaction(faction);

                site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_AbandonedColony, SiteDefOfReconAndDiscovery.RD_AbandonedColony.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction)));

                SitePart holoDisk = new SitePart(site, SiteDefOfReconAndDiscovery.RD_HoloDisk, SiteDefOfReconAndDiscovery.RD_HoloDisk.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                holoDisk.hidden = true;
                site.parts.Add(holoDisk);
                if (Rand.Value < 0.3f)
                {
                    SitePart scatteredManhunters = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters.Worker.GenerateDefaultParams
                                                                    (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                    scatteredManhunters.hidden = true;
                    site.parts.Add(scatteredManhunters);
                }
                if (Rand.Value < 0.1f)
                {
                    SitePart mechanoidForces = new SitePart(site, SiteDefOfReconAndDiscovery.RD_MechanoidForces, SiteDefOfReconAndDiscovery.RD_MechanoidForces.Worker.GenerateDefaultParams
                                                                (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                    mechanoidForces.hidden = true;
                    site.parts.Add(mechanoidForces);
                }
                if (Rand.Value < 0.05f)
                {
                    SitePart stargate = new SitePart(site, SiteDefOfReconAndDiscovery.RD_Stargate, SiteDefOfReconAndDiscovery.RD_Stargate.Worker.GenerateDefaultParams
                                                         (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));

                    stargate.hidden = true;

                    site.parts.Add(stargate);
                }
                Find.WorldObjects.Add(site);
                if (site == null)
                {
                    result = false;
                }
                else
                {
                    base.SendStandardLetter(parms, caravan);
                    result = true;
                }
            }
            return(result);
        }
예제 #4
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 4)
            {
                Toolkit.client.SendMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}", separateChannel);
                return(false);
            }

            if (!VariablesHelpers.PointsWagerIsValid(
                    command[3],
                    viewer,
                    ref pointsWager,
                    ref storeIncident,
                    separateChannel
                    ))
            {
                return(false);
            }

            string animalKind = command[2].ToLower();


            List <PawnKindDef> allAnimals = DefDatabase <PawnKindDef> .AllDefs.Where(
                s => s.RaceProps.Animal &&
                string.Join("", s.defName.Split(' ')).ToLower() == animalKind
                ).ToList();

            if (allAnimals.Count < 1)
            {
                Toolkit.client.SendMessage($"@{viewer.username} no animal {animalKind} found.", separateChannel);
                return(false);
            }

            target = Current.Game.AnyPlayerHomeMap;
            if (target == null)
            {
                return(false);
            }

            float points = IncidentHelper_PointsHelper.RollProportionalGamePoints(storeIncident, pointsWager, StorytellerUtility.DefaultThreatPointsNow(target));

            pawnKind = allAnimals[0];
            int num = ManhunterPackIncidentUtility.GetAnimalsCount(pawnKind, points);

            worker = new IncidentWorker_SpecificAnimalsWanderIn(null, pawnKind, true, num, false, true);

            worker.def = IncidentDef.Named("FarmAnimalsWanderIn");

            float defaultThreatPoints = StorytellerUtility.DefaultSiteThreatPointsNow();

            parms        = StorytellerUtility.DefaultParmsNow(worker.def.category, target);
            parms.points = points;
            return(worker.CanFireNow(parms));
        }
예제 #5
0
        public static Site MakeSite(IEnumerable <SitePartDef> siteParts, int tile, Faction faction, bool ifHostileThenMustRemainHostile = true, float?threatPoints = null)
        {
            float num = threatPoints ?? StorytellerUtility.DefaultSiteThreatPointsNow();

            SiteMakerHelper.GenerateDefaultParams(num, tile, faction, siteParts, out var sitePartDefsWithParams);
            Site site = MakeSite(sitePartDefsWithParams, tile, faction, ifHostileThenMustRemainHostile);

            site.desiredThreatPoints = num;
            return(site);
        }
예제 #6
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.Viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 4)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}");
                return(false);
            }

            if (!VariablesHelpers.PointsWagerIsValid(
                    command[3],
                    viewer,
                    ref pointsWager,
                    ref storeIncident,
                    separateChannel
                    ))
            {
                return(false);
            }

            string diseaseLabel = command[2].ToLower();

            worker = new IncidentWorker_DiseaseHuman();
            List <IncidentDef> allDiseases = DefDatabase <IncidentDef> .AllDefs.Where(s =>
                                                                                      s.category == IncidentCategoryDefOf.DiseaseHuman &&
                                                                                      string.Join("", s.LabelCap.RawText.Split(' ')).ToLower() == diseaseLabel
                                                                                      ).ToList();

            if (allDiseases.Count < 1)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} no disease {diseaseLabel} found.");
                return(false);
            }

            allDiseases.Shuffle();
            worker.def = allDiseases[0];

            target = Current.Game.AnyPlayerHomeMap;
            if (target == null)
            {
                return(false);
            }

            float defaultThreatPoints = StorytellerUtility.DefaultSiteThreatPointsNow();

            parms        = StorytellerUtility.DefaultParmsNow(worker.def.category, target);
            parms.points = IncidentHelper_PointsHelper.RollProportionalGamePoints(storeIncident, pointsWager, StorytellerUtility.DefaultThreatPointsNow(target));
            return(worker.CanFireNow(parms));
        }
 public override bool TryExecuteEvent()
 {
     try
     {
         Slate          slate  = new Slate();
         float          points = StorytellerUtility.DefaultSiteThreatPointsNow();
         QuestScriptDef script = NaturalRandomQuestChooser.ChooseNaturalRandomQuest(points, Find.CurrentMap);
         SetPoints(script, slate, points);
         GenerateQuest(script, slate);
     }
     catch (Exception ex)
     {
         Log.Error($"Failed to generate random quest reward. Exception: {ex.Message}");
         return(false);
     }
     return(true);
 }
예제 #8
0
        public override void Execute()
        {
            QuestScriptDef scriptDef = DefDatabase <QuestScriptDef> .GetNamed("TKUtilsViewerRescue");

            float threatPoints = StorytellerUtility.DefaultSiteThreatPointsNow();

            var component = Current.Game.GetComponent <GameComponentPawns>();

            if (component != null && component.pawnHistory.ContainsKey(Viewer.username.ToLower()))
            {
                component.pawnHistory.Remove(Viewer.username.ToLower());
            }

            ViewerRescue.QueuedViewers.Enqueue(_report);
            QuestUtility.SendLetterQuestAvailable(QuestUtility.GenerateQuestAndMakeAvailable(scriptDef, threatPoints));
            Viewer.Charge(storeIncident);
        }
        private void Outcome_Disaster(Caravan caravan)
        {
            Faction.TryAffectGoodwillWith(Faction.OfPlayer, -40);
            bool       chance   = Rand.Chance(0.5f);
            Settlement s        = chance ? Set1 : Set2;
            Settlement turncoat = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);

            turncoat.SetFaction(Find.FactionManager.AllFactionsVisible.Where(f => !f.IsPlayer && f.HostileTo(Faction.OfPlayer)).RandomElementWithFallback(null));
            turncoat.Tile = s.Tile;
            turncoat.Name = s.Name;
            if (turncoat.Faction == null)
            {
                Outcome_Fail(caravan);
                return;
            }

            Settlement friendly = chance ? Set2 : Set1;

            Find.WorldObjects.Remove(s);
            Find.WorldObjects.Remove(chance ? Set2 : Set1);
            Find.WorldObjects.Add(turncoat);
            Site ambush = SiteMaker.MakeSite(SiteCoreDefOf.Nothing, SitePartDefOf.AmbushEdge, Tile, turncoat.Faction, true, StorytellerUtility.DefaultSiteThreatPointsNow());

            Find.LetterStack.ReceiveLetter("LetterLabelDisputeDisaster".Translate(), "DisputeDisaster".Translate(turncoat, turncoat.Faction, friendly)
                                           , LetterDefOf.ThreatBig, turncoat, null, "Disaster");

            LongEventHandler.QueueLongEvent(new Action(() =>
            {
                MapGenerator.GenerateMap(new IntVec3(110, 1, 110), ambush, MapGeneratorDefOf.Encounter);
                List <PawnKindDef> kindDefs = new List <PawnKindDef>();
                for (int i = 0; i < 2; i++)
                {
                    kindDefs.Clear();
                    Lord lord = LordMaker.MakeNewLord(i == 0 ? turncoat.Faction : Faction, new LordJob_AssaultColony(i == 0 ? turncoat.Faction : Faction), ambush.Map);
                    kindDefs  = Utilities.GeneratePawnKindDef(45, i == 0 ? turncoat.Faction : Faction);
                    // Balance
                    IntVec3 vec = CellFinder.RandomClosewalkCellNear(new IntVec3(ambush.Map.Center.x - 30 + (i * 60), ambush.Map.Center.y, ambush.Map.Center.z), ambush.Map, 10);
                    Utilities.GenerateFighter(StorytellerUtility.DefaultSiteThreatPointsNow() + 300, lord, kindDefs, ambush.Map, i == 0 ? turncoat.Faction : Faction, vec);
                }
                CaravanEnterMapUtility.Enter(caravan, ambush.Map, CaravanEnterMode.Center, CaravanDropInventoryMode.DoNotDrop, true);
            }), "GeneratingMapForNewEncounter", false, null);
            Utilities.FactionsWar().GetByFaction(turncoat.Faction).resources += FE_WorldComp_FactionsWar.SETTLEMENT_RESOURCE_VALUE * 2;
            Utilities.FactionsWar().GetByFaction(friendly.Faction).resources -= FE_WorldComp_FactionsWar.SETTLEMENT_RESOURCE_VALUE * 2;
            Find.WorldObjects.Remove(this);
        }
예제 #10
0
        public static Site MakeSite(SiteCoreDef core, IEnumerable <SitePartDef> siteParts, int tile, Faction faction, bool ifHostileThenMustRemainHostile = true, float?threatPoints = null)
        {
            Site site = (Site)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Site);

            site.Tile = tile;
            site.SetFaction(faction);
            if (ifHostileThenMustRemainHostile && faction != null && faction.HostileTo(Faction.OfPlayer))
            {
                site.factionMustRemainHostile = true;
            }
            float num = (!threatPoints.HasValue) ? StorytellerUtility.DefaultSiteThreatPointsNow() : threatPoints.Value;

            site.desiredThreatPoints = num;
            int num2 = 0;

            if (core.wantsThreatPoints)
            {
                num2++;
            }
            if (siteParts != null)
            {
                foreach (SitePartDef current in siteParts)
                {
                    if (current.wantsThreatPoints)
                    {
                        num2++;
                    }
                }
            }
            float num3           = (num2 == 0) ? 0f : (num / (float)num2);
            float myThreatPoints = (!core.wantsThreatPoints) ? 0f : num3;

            site.core = new SiteCore(core, core.Worker.GenerateDefaultParams(site, myThreatPoints));
            if (siteParts != null)
            {
                foreach (SitePartDef current2 in siteParts)
                {
                    float myThreatPoints2 = (!current2.wantsThreatPoints) ? 0f : num3;
                    site.parts.Add(new SitePart(current2, current2.Worker.GenerateDefaultParams(site, myThreatPoints2)));
                }
            }
            return(site);
        }
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.Viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 3)
            {
                Toolkit.client.SendMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}", separateChannel);
                return(false);
            }

            if (!VariablesHelpers.PointsWagerIsValid(
                    command[2],
                    viewer,
                    ref pointsWager,
                    ref storeIncident,
                    separateChannel
                    ))
            {
                return(false);
            }

            worker = new IncidentWorker_DiseaseHuman();
            List <IncidentDef> allDiseases = DefDatabase <IncidentDef> .AllDefs.Where(s => s.workerClass == typeof(IncidentWorker_DiseaseHuman)).ToList();

            allDiseases.Shuffle();
            worker.def = allDiseases[0];

            target = Current.Game.AnyPlayerHomeMap;
            if (target == null)
            {
                return(false);
            }

            float defaultThreatPoints = StorytellerUtility.DefaultSiteThreatPointsNow();

            parms        = StorytellerUtility.DefaultParmsNow(worker.def.category, target);
            parms.points = IncidentHelper_PointsHelper.RollProportionalGamePoints(storeIncident, pointsWager, StorytellerUtility.DefaultThreatPointsNow(target));
            return(worker.CanFireNow(parms));
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map  map = parms.target as Map;
            bool result;

            if (this.GetHasGoodStoryConditions(map))
            {
                Pawn pawn;
                if (!this.CanFindPsychic(map, out pawn))
                {
                    result = false;
                }
                else
                {
                    int randomInRange = IncidentWorker_OsirisCasket.TimeoutDaysRange.RandomInRange;

                    int tile;
                    if (TileFinder.TryFindNewSiteTile(out tile))
                    {
                        Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_Adventure);
                        site.Tile = tile;
                        Faction faction = Faction.OfInsects;
                        site.SetFaction(faction);
                        site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_AbandonedCastle,
                                                  SiteDefOfReconAndDiscovery.RD_AbandonedCastle.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction)));
                        IEnumerable <PowerNet> source = from net in map.powerNetManager.AllNetsListForReading
                                                        where net.hasPowerSource
                                                        select net;
                        if (source.Count <PowerNet>() > 0)
                        {
                            SitePart osirisCasket = new SitePart(site, SiteDefOfReconAndDiscovery.RD_OsirisCasket, SiteDefOfReconAndDiscovery.RD_OsirisCasket.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            osirisCasket.hidden = true;
                            site.parts.Add(osirisCasket);
                        }
                        if (Rand.Value < 0.15f)
                        {
                            SitePart weatherSat = new SitePart(site, SiteDefOfReconAndDiscovery.RD_WeatherSat, SiteDefOfReconAndDiscovery.RD_WeatherSat.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            weatherSat.hidden = true;
                            site.parts.Add(weatherSat);
                        }
                        site.GetComponent <TimeoutComp>().StartTimeout(randomInRange * 60000);
                        if (Rand.Value < 0.25f)
                        {
                            SitePart scatteredManhunters = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            scatteredManhunters.hidden = true;
                            site.parts.Add(scatteredManhunters);
                        }
                        if (Rand.Value < 0.1f)
                        {
                            SitePart scatteredTreasure = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            scatteredTreasure.hidden = true;
                            site.parts.Add(scatteredTreasure);
                        }
                        if (Rand.Value < 1f)
                        {
                            SitePart enemyRaidOnArrival = new SitePart(site, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            enemyRaidOnArrival.hidden = true;
                            site.parts.Add(enemyRaidOnArrival);
                        }
                        if (Rand.Value < 0.9f)
                        {
                            SitePart enemyRaidOnArrival = new SitePart(site, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            enemyRaidOnArrival.hidden = true;
                            site.parts.Add(enemyRaidOnArrival);
                        }
                        if (Rand.Value < 0.6f)
                        {
                            SitePart enemyRaidOnArrival = new SitePart(site, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            enemyRaidOnArrival.hidden = true;
                            site.parts.Add(enemyRaidOnArrival);
                        }
                        Find.WorldObjects.Add(site);
                        QueuedIncident qi = new QueuedIncident(new FiringIncident(IncidentDef.Named("PsychicDrone"), null, parms), Find.TickManager.TicksGame + 1);
                        Find.Storyteller.incidentQueue.Add(qi);
                        Find.LetterStack.ReceiveLetter("RD_PsychicMessage".Translate(),
                                                       GrammarResolverSimpleStringExtensions.Formatted(Translator
                                                                                                       .Translate("RD_ReceivedVisionBattle"), NamedArgumentUtility.Named(pawn, "PAWN"))
                                                       .AdjustedFor(pawn, "PAWN", true)
                                                       //has received visions accompanying the drone, showing a battle and crying out for help. Others must have noticed, so the site will probably be dangerous.
                                                       , LetterDefOf.PositiveEvent, null);
                        result = true;
                    }
                    else
                    {
                        result = false;
                    }
                }
            }
            else
            {
                result = false;
            }
            return(result);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            bool    result;
            Faction faction;

            if ((from wo in Find.WorldObjects.AllWorldObjects
                 where wo.def == SiteDefOfReconAndDiscovery.RD_AdventurePeaceTalks
                 select wo).Count <WorldObject>() > 0)
            {
                result = false;
            }
            else if (!this.TryFindFaction(out faction, (Faction f) => f != Faction.OfPlayer && f.PlayerGoodwill < 0f && f.def.CanEverBeNonHostile && f.def.humanlikeFaction))
            {
                result = false;
            }
            else
            {
                int tile;
                if (TileFinder.TryFindNewSiteTile(out tile))
                {
                    Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_AdventurePeaceTalks);
                    site.Tile = tile;
                    site.SetFaction(faction);
                    site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_PeaceTalks,
                                              SiteDefOfReconAndDiscovery.RD_PeaceTalks.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction)));

                    SitePart peaceTalksFaction = new SitePart(site, SiteDefOfReconAndDiscovery.RD_PeaceTalksFaction, SiteDefOfReconAndDiscovery.RD_PeaceTalksFaction.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                    peaceTalksFaction.hidden = true;
                    site.parts.Add(peaceTalksFaction);
                    site.GetComponent <QuestComp_PeaceTalks>().StartQuest(faction);
                    int num = 5;
                    site.GetComponent <TimeoutComp>().StartTimeout(num * 60000);
                    base.SendStandardLetter(parms, site, new NamedArgument[]
                    {
                        faction.leader.Label,
                        faction.Name,
                        num.ToString()
                    });
                    Find.WorldObjects.Add(site);
                    result = true;
                }
                else
                {
                    result = false;
                }
            }
            return(result);
        }
예제 #14
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map  map = parms.target as Map;
            bool result;
            int  tile;

            if (map == null)
            {
                result = false;
            }
            else if (!TileFinder.TryFindNewSiteTile(out tile))
            {
                result = false;
            }
            else
            {
                bool flag  = false;
                bool flag2 = true;
                IEnumerable <Pawn> source = from p in map.mapPawns.FreeColonistsSpawned
                                            where p.CurJob.def == JobDefOfReconAndDiscovery.Skygaze || p.CurJob.def == JobDefOfReconAndDiscovery.UseTelescope
                                            select p;
                Pawn pawn = null;
                if (map.listerBuildings.ColonistsHaveBuilding(ThingDef.Named("CommsConsole")))
                {
                    if (Rand.Chance(0.5f))
                    {
                        flag = true;
                    }
                }
                else if (source.Count <Pawn>() > 0)
                {
                    flag  = true;
                    flag2 = false;
                    pawn  = source.RandomElement <Pawn>();
                }
                if (!flag)
                {
                    result = false;
                }
                else
                {
                    bool flag3 = Rand.Value < 0.4f;
                    Site site;
                    if (flag3)
                    {
                        site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_AdventureMedical);
                    }
                    else
                    {
                        site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_Adventure);
                    }
                    site.Tile = tile;
                    Faction faction = Find.FactionManager.RandomEnemyFaction(true, false, true, TechLevel.Spacer);
                    site.SetFaction(faction);
                    site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_CrashedShip,
                                              SiteDefOfReconAndDiscovery.RD_CrashedShip.Worker.GenerateDefaultParams
                                                  (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction)));
                    if (flag3)
                    {
                        SitePart medicalEmergency = new SitePart(site, SiteDefOfReconAndDiscovery.RD_MedicalEmergency, SiteDefOfReconAndDiscovery.RD_MedicalEmergency.Worker.GenerateDefaultParams
                                                                     (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                        medicalEmergency.hidden = true;
                        site.parts.Add(medicalEmergency);
                        QuestComp_MedicalEmergency component = site.GetComponent <QuestComp_MedicalEmergency>();
                        component.parent = site;
                        component.Initialize(new WorldObjectCompProperties_MedicalEmergency());
                        component.maxPawns = Rand.RangeInclusive(3, 12);
                        List <Thing> rewards = this.GenerateRewards();
                        component.StartQuest(rewards);
                    }
                    else if (!Rand.Chance(0.75f))
                    {
                        SitePart rareBeasts = new SitePart(site, SiteDefOfReconAndDiscovery.RD_RareBeasts, SiteDefOfReconAndDiscovery.RD_RareBeasts.Worker.GenerateDefaultParams
                                                               (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));

                        rareBeasts.hidden = true;

                        site.parts.Add(rareBeasts);
                    }
                    if (Rand.Value < 0.85f)
                    {
                        SitePart scatteredTreasure = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure.Worker.GenerateDefaultParams
                                                                      (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));

                        scatteredTreasure.hidden = true;

                        site.parts.Add(scatteredTreasure);
                    }
                    if (Rand.Value < 0.1f)
                    {
                        SitePart scatteredManhunters = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters.Worker.GenerateDefaultParams
                                                                        (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                        scatteredManhunters.hidden = true;
                        site.parts.Add(scatteredManhunters);
                    }
                    if (Rand.Value < 0.1f)
                    {
                        SitePart mechanoidForces = new SitePart(site, SiteDefOfReconAndDiscovery.RD_MechanoidForces, SiteDefOfReconAndDiscovery.RD_MechanoidForces.Worker.GenerateDefaultParams
                                                                    (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                        mechanoidForces.hidden = true;
                        site.parts.Add(mechanoidForces);
                    }
                    if (Rand.Value < 0.5f)
                    {
                        SitePart enemyRaidOnArrival = new SitePart(site, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival.Worker.GenerateDefaultParams
                                                                       (StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                        enemyRaidOnArrival.hidden = true;
                        site.parts.Add(enemyRaidOnArrival);
                    }
                    int randomInRange = IncidentWorker_CrashedShip.TimeoutDaysRange.RandomInRange;
                    site.GetComponent <TimeoutComp>().StartTimeout(randomInRange * 60000);
                    Find.WorldObjects.Add(site);
                    if (flag2)
                    {
                        base.SendStandardLetter(parms, site);
                    }
                    else
                    {
                        Find.LetterStack.ReceiveLetter("RD_ShootingStar".Translate(), "SawFallFromSky".Translate(pawn.Named("PAWN"))                         //just saw something fall from the sky near here!
                                                       , LetterDefOf.PositiveEvent, site, null);
                    }
                    result = true;
                }
            }
            return(result);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!TryFindFactions(out Faction ally, out Faction enemyFaction) || !TryFindTile(out int tile))
            {
                return(false);
            }
            Site site = SiteMaker.MakeSite(SiteCoreDefOf.Nothing, EndGameDefOf.Outpost_defense, tile, ally, true);

            List <Thing> rewards = ThingSetMakerDefOf.Reward_StandardByDropPod.root.Generate(new ThingSetMakerParams()
            {
                totalMarketValueRange = new FloatRange?(SiteTuning.BanditCampQuestRewardMarketValueRange * SiteTuning.QuestRewardMarketValueThreatPointsFactor.Evaluate(StorytellerUtility.DefaultSiteThreatPointsNow() - 500))
            });

            int randomInRange = SiteTuning.QuestSiteTimeoutDaysRange.RandomInRange * Global.DayInTicks;

            site.GetComponent <WorldComp_SiteDefense>().StartComp(enemyFaction, rewards);
            site.GetComponent <TimeoutComp>().StartTimeout(randomInRange);

            Find.WorldObjects.Add(site);
            string text = def.letterText.Formatted(ally.leader.LabelShort, ally.def.leaderTitle, ally.Name, GenLabel.ThingsLabel(rewards, string.Empty), randomInRange.ToStringTicksToPeriod(), GenThing.GetMarketValue(rewards).ToStringMoney(null)).CapitalizeFirst();

            GenThing.TryAppendSingleRewardInfo(ref text, rewards);
            Find.LetterStack.ReceiveLetter(def.letterLabel, text, def.letterDef, site, ally, null);
            return(true);
        }
예제 #16
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            bool    result;
            Faction faction;

            if ((from wo in Find.WorldObjects.AllWorldObjects
                 where wo.def == SiteDefOfReconAndDiscovery.RD_AdventurePeaceTalks
                 select wo).Count <WorldObject>() > 0)
            {
                result = false;
            }
            else if (!this.TryFindFaction(out faction, (Faction f) => f != Faction.OfPlayer && f.PlayerGoodwill >= 0))
            {
                result = false;
            }
            else
            {
                int tile;
                if (TileFinder.TryFindNewSiteTile(out tile))
                {
                    Site site = (Site)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Site);
                    site.Tile = tile;
                    site.SetFaction(faction);
                    site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_Festival,
                                              SiteDefOfReconAndDiscovery.RD_Festival.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction)));

                    // TODO: check if this works correctly
                    SitePart outpost = new SitePart(site, SitePartDefOf.Outpost, SitePartDefOf.Outpost.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                    outpost.hidden = true;
                    site.parts.Add(outpost);
                    int num = 8;
                    site.GetComponent <TimeoutComp>().StartTimeout(num * 60000);
                    base.SendStandardLetter(parms, site, new NamedArgument[]
                    {
                        faction.Name
                    });
                    Find.WorldObjects.Add(site);
                    result = true;
                }
                else
                {
                    result = false;
                }
            }
            return(result);
        }
        private void Outcome_Backfire(Caravan caravan)
        {
            Faction.TryAffectGoodwillWith(Faction.OfPlayer, -25);
            Settlement turncoat, friendly;
            bool       chance = Rand.Chance(0.5f);

            Settlement s = chance ? Set1 : Set2;

            turncoat = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
            turncoat.SetFaction(Find.FactionManager.AllFactionsVisible.Where(f => !f.IsPlayer && f.HostileTo(Faction.OfPlayer)).RandomElementWithFallback(null));
            turncoat.Tile = s.Tile;
            turncoat.Name = s.Name;
            if (turncoat.Faction == null)
            {
                Outcome_Fail(caravan);
                return;
            }

            Thing silver = ThingMaker.MakeThing(ThingDefOf.Silver);

            silver.stackCount = (int)FE_IncidentWorker_Jointraid.SilverBonusRewardCurve.Evaluate(Set2.Faction.PlayerGoodwill);
            List <Thing> rewards = ThingSetMakerDefOf.Reward_StandardByDropPod.root.Generate(new ThingSetMakerParams()
            {
                totalMarketValueRange = new FloatRange?(SiteTuning.BanditCampQuestRewardMarketValueRange * SiteTuning.QuestRewardMarketValueThreatPointsFactor.Evaluate(StorytellerUtility.DefaultSiteThreatPointsNow()))
            });

            friendly = chance ? Set2 : Set1;
            turncoat.GetComponent <WorldComp_JointRaid>().StartComp(new IntRange(Global.DayInTicks * 15, Global.DayInTicks * 25).RandomInRange, friendly.Faction, rewards, silver);
            Find.WorldObjects.Remove(s);
            Find.WorldObjects.Add(turncoat);
            Utilities.FactionsWar().GetByFaction(turncoat.Faction).resources += FE_WorldComp_FactionsWar.SETTLEMENT_RESOURCE_VALUE * 2;
            Utilities.FactionsWar().GetByFaction(friendly.Faction).resources -= FE_WorldComp_FactionsWar.SETTLEMENT_RESOURCE_VALUE * 2;
            Find.LetterStack.ReceiveLetter("LetterLabelDisputeBackfire".Translate(), "DisputeBackfire".Translate(turncoat, turncoat.Faction, friendly)
                                           , LetterDefOf.ThreatBig, turncoat, Faction, null);
            Find.WorldObjects.Remove(this);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            int tile;

            if (!TileFinder.TryFindNewSiteTile(out tile, minDist, maxDist, false, true, -1))
            {
                return(false);
            }
            Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOf.ShipCoreStartupSiteLGE);

            site.Tile = tile;
            site.core = new SiteCore(SiteDefOf.ShipCoreStartupLGE, SiteDefOf.ShipCoreStartupLGE.Worker.GenerateDefaultParams(site, StorytellerUtility.DefaultSiteThreatPointsNow()));
            site.SetFaction(Faction.OfAncientsHostile);
            site.GetComponent <TimeoutComp>().StartTimeout(TimeoutDaysRange.RandomInRange * 60000);
            Find.WorldObjects.Add(site);
            Find.LetterStack.ReceiveLetter("LetterLabelShipCoreStartupLGE".Translate(), "LetterShipCoreStartupLGE".Translate(), LetterDefOf.PositiveEvent, site, null);

            return(true);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map  map = parms.target as Map;
            bool result;

            if (map == null)
            {
                result = false;
            }
            else if ((from wo in Find.WorldObjects.AllWorldObjects
                      where wo is Site && (wo as Site).parts.Select(x => x.def) == SiteDefOfReconAndDiscovery.RD_QuakesQuest
                      select wo).Count <WorldObject>() > 0)
            {
                result = false;
            }
            else
            {
                int tile;
                if (TileFinder.TryFindNewSiteTile(out tile))
                {
                    Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_AdventureThingCounter);
                    site.Tile = tile;
                    site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_SiteRadiationQuest,
                                              SiteDefOfReconAndDiscovery.RD_SiteRadiationQuest.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null)));
                    SitePart radioactiveDust = new SitePart(site, SiteDefOfReconAndDiscovery.RD_SitePart_RadioactiveDust, SiteDefOfReconAndDiscovery.RD_SitePart_RadioactiveDust.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                    radioactiveDust.hidden = true;
                    site.parts.Add(radioactiveDust);
                    QuestComp_CountThings component = site.GetComponent <QuestComp_CountThings>();
                    component.targetNumber        = 200;
                    component.ticksTarget         = 60000;
                    component.ticksHeld           = 0;
                    component.worldTileAffected   = map.Tile;
                    component.gameConditionCaused = GameConditionDef.Named("RD_Radiation");
                    component.StartQuest(ThingDef.Named("Plant_Psychoid"));
                    if (Rand.Value < 0.1f)
                    {
                        SitePart scatteredTreasure = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                        scatteredTreasure.hidden = true;
                        site.parts.Add(scatteredTreasure);
                    }
                    if (Rand.Value < 0.05f)
                    {
                        SitePart scatteredManhunters = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                        scatteredManhunters.hidden = true;
                        site.parts.Add(scatteredManhunters);
                    }
                    if (Rand.Value < 0.05f)
                    {
                        SitePart mechanoidForces = new SitePart(site, SiteDefOfReconAndDiscovery.RD_MechanoidForces, SiteDefOfReconAndDiscovery.RD_MechanoidForces.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                        mechanoidForces.hidden = true;
                        site.parts.Add(mechanoidForces);
                    }
                    if (Rand.Value < 0.05f)
                    {
                        SitePart enemyRaidOnArrival = new SitePart(site, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                        enemyRaidOnArrival.hidden = true;
                        site.parts.Add(enemyRaidOnArrival);
                    }

                    if (Find.World.tileTemperatures.GetSeasonalTemp(site.Tile) < 10f || Find.World.tileTemperatures.GetSeasonalTemp(site.Tile) > 40f)
                    {
                        result = false;
                    }
                    else
                    {
                        int           num           = 30;
                        GameCondition gameCondition = GameConditionMaker.MakeCondition(GameConditionDef.Named("RD_Radiation"), 60000 * num);
                        map.gameConditionManager.RegisterCondition(gameCondition);
                        site.GetComponent <TimeoutComp>().StartTimeout(num * 60000);
                        base.SendStandardLetter(parms, site);
                        Find.WorldObjects.Add(site);
                        result = true;
                    }
                }
                else
                {
                    result = false;
                }
            }
            return(result);
        }
        private void HostileDefeated()
        {
            // Killed all hostiles - Win outcome
            if (!GenHostility.AnyHostileActiveThreatTo(((MapParent)parent).Map, Faction.OfPlayer))
            {
                active = false;
                DropPodUtility.DropThingsNear(DropCellFinder.TradeDropSpot(Find.AnyPlayerHomeMap), Find.AnyPlayerHomeMap, rewards, 110, false, true, true);
                parent.Faction.TryAffectGoodwillWith(Faction.OfPlayer, +15, false, true);

                if (!Find.WorldObjects.Settlements.Where(s => s.Faction == enemy && !s.Faction.def.hidden && Find.WorldReachability.CanReach(Find.AnyPlayerHomeMap.Tile, s.Tile)).TryRandomElement(out Settlement enemySet))
                {
                    Find.LetterStack.ReceiveLetter("LetterLabelOutpostdefensesuccess".Translate(), TranslatorFormattedStringExtensions.Translate("Outpostdefensesuccess", parent.Faction.leader, parent.Faction.def.leaderTitle, GenLabel.ThingsLabel(rewards, string.Empty)), EndGameDefOf.FE_JointRaid.letterDef, null, parent.Faction, null);
                    active = false;
                    return;
                }

                List <Thing> rewardsNew = ThingSetMakerDefOf.Reward_StandardByDropPod.root.Generate(new ThingSetMakerParams()
                {
                    totalMarketValueRange = new FloatRange?(SiteTuning.BanditCampQuestRewardMarketValueRange * SiteTuning.QuestRewardMarketValueThreatPointsFactor.Evaluate(StorytellerUtility.DefaultSiteThreatPointsNow() + 500f))
                });

                Thing silver = ThingMaker.MakeThing(ThingDefOf.Silver);
                silver.stackCount = (int)FE_IncidentWorker_Jointraid.SilverBonusRewardCurve.Evaluate(parent.Faction.PlayerGoodwill);

                int random = new IntRange(Global.DayInTicks * 15, Global.DayInTicks * 25).RandomInRange;
                enemySet.GetComponent <WorldComp_JointRaid>().StartComp(random, parent.Faction, rewardsNew, silver);
                string text = TranslatorFormattedStringExtensions.Translate("OutpostdefensesuccessJointRaid", parent.Faction.leader, parent.Faction.def.leaderTitle, GenLabel.ThingsLabel(rewardsNew, string.Empty), random.ToStringTicksToPeriod(), GenThing.GetMarketValue(rewards).ToStringMoney(null), silver.stackCount.ToString(), GenLabel.ThingsLabel(rewards, string.Empty)).CapitalizeFirst();
                GenThing.TryAppendSingleRewardInfo(ref text, rewards);
                Find.LetterStack.ReceiveLetter(EndGameDefOf.FE_JointRaid.letterLabel, text, EndGameDefOf.FE_JointRaid.letterDef, enemySet, parent.Faction, null);
            }
        }
예제 #21
0
        public override void CompTick()
        {
            if (!active)
            {
                return;
            }

            if (!ParentHasMap)
            {
                if (!enemy.HostileTo(ally))
                {
                    active = false;
                    return;
                }
                if (timer <= Find.TickManager.TicksGame)
                {
                    active = false;

                    Utilities.FactionsWar().GetByFaction(ally).resources -= FE_WorldComp_FactionsWar.SETTLEMENT_RESOURCE_VALUE;
                    if (!Find.WorldObjects.Settlements.Where(f => f.Faction == parent.Faction).Any())
                    {
                        Find.LetterStack.ReceiveLetter("FactionDestroyed".Translate(), "LetterFactionBaseDefeated_FactionDestroyed".Translate(parent.Faction.Name), LetterDefOf.PositiveEvent, null, parent.Faction, null);
                        parent.Faction.defeated = true;
                        return;
                    }

                    Site resuce = SiteMaker.MakeSite(SiteCoreDefOf.Nothing, EndGameDefOf.Outpost_SiteResuce, parent.Tile, enemy, true, StorytellerUtility.DefaultSiteThreatPointsNow());
                    resuce.GetComponent <WorldComp_SettlementResuce>().StartComp(ally);
                    resuce.GetComponent <TimeoutComp>().StartTimeout(new IntRange(9 * Global.DayInTicks, 15 * Global.DayInTicks).RandomInRange);
                    Find.WorldObjects.Remove(parent);
                    Find.WorldObjects.Add(resuce);

                    Find.LetterStack.ReceiveLetter("LetterLabelSettlementDefenderIgnored".Translate(), TranslatorFormattedStringExtensions.Translate("SettlementDefenderIgnored", parent, parent.Faction.leader),
                                                   LetterDefOf.ThreatBig, new LookTargets(parent.Tile), null, null);
                }
                return;
            }
            //Goodwill cost to unforbid items in the ally map
            foreach (Thing thing in FactionThings)
            {
                if (thing.Faction == Faction.OfPlayer || (thing.TryGetComp <CompForbiddable>() != null && !thing.IsForbidden(Faction.OfPlayer)))
                {
                    parent.Faction.TryAffectGoodwillWith(Faction.OfPlayer, -5);
                    FactionThings.Remove(thing);
                    break;
                }
            }
            FriendliesDead();
            HostileDefeated();
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!TryFindFactions(out Faction ally, out Faction enemyFaction) || !TryFindTile(ally, out Settlement sis))
            {
                return(false);
            }

            int          random  = new IntRange(Global.DayInTicks * 15, Global.DayInTicks * 25).RandomInRange;
            List <Thing> rewards = ThingSetMakerDefOf.Reward_StandardByDropPod.root.Generate(new ThingSetMakerParams()
            {
                totalMarketValueRange = new FloatRange?(SiteTuning.BanditCampQuestRewardMarketValueRange * SiteTuning.QuestRewardMarketValueThreatPointsFactor.Evaluate(StorytellerUtility.DefaultSiteThreatPointsNow() + 500f))
            });

            sis.GetComponent <WorldComp_SettlementDefender>().StartComp(enemyFaction, ally, random, rewards);

            string text = def.letterText.Formatted(ally.leader.LabelShort, ally.def.leaderTitle, ally.Name, GenLabel.ThingsLabel(rewards, string.Empty), random.ToStringTicksToPeriod(), GenThing.GetMarketValue(rewards).ToStringMoney(null)).CapitalizeFirst();

            GenThing.TryAppendSingleRewardInfo(ref text, rewards);
            Find.LetterStack.ReceiveLetter(def.letterLabel, text, def.letterDef, sis, ally, null);
            return(true);
        }
예제 #23
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map  map = parms.target as Map;
            bool result;

            if (this.GetHasGoodStoryConditions(map))
            {
                Pawn pawn;
                Pawn pawn2;
                if (!this.CanFindVisitor(map, out pawn))
                {
                    result = false;
                }
                else if (!this.CanFindPsychic(map, out pawn2))
                {
                    result = false;
                }
                else
                {
                    int tile;
                    if (TileFinder.TryFindNewSiteTile(out tile))
                    {
                        Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_Adventure);

                        site.Tile = tile;

                        Faction faction = Faction.OfInsects;
                        site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_PsiMachine,
                                                  SiteDefOfReconAndDiscovery.RD_PsiMachine.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction)));

                        SitePart warIdol = new SitePart(site, SiteDefOfReconAndDiscovery.RD_SitePart_WarIdol, SiteDefOfReconAndDiscovery.RD_SitePart_WarIdol.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));

                        warIdol.hidden = true;

                        site.parts.Add(warIdol);
                        if (Rand.Value < 0.15f)
                        {
                            SitePart scatteredManhunters = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            scatteredManhunters.hidden = true;
                            site.parts.Add(scatteredManhunters);
                        }
                        if (Rand.Value < 0.3f)
                        {
                            SitePart scatteredTreasure = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            scatteredTreasure.hidden = true;
                            site.parts.Add(scatteredTreasure);
                        }
                        if (Rand.Value < 0.3f)
                        {
                            SitePart enemyRaidOnArrival = new SitePart(site, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            enemyRaidOnArrival.hidden = true;
                            site.parts.Add(enemyRaidOnArrival);
                        }
                        if (Rand.Value < 0.1f)
                        {
                            SitePart mechanoidForces = new SitePart(site, SiteDefOfReconAndDiscovery.RD_MechanoidForces, SiteDefOfReconAndDiscovery.RD_MechanoidForces.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            mechanoidForces.hidden = true;
                            site.parts.Add(mechanoidForces);
                        }
                        Find.WorldObjects.Add(site);
                        if (site == null)
                        {
                            result = false;
                        }
                        base.SendStandardLetter(parms, site, new NamedArgument[]
                        {
                            pawn.Label,
                            pawn2.Label
                        });
                        result = true;
                    }
                    else
                    {
                        result = false;
                    }
                }
            }
            else
            {
                result = false;
            }
            return(result);
        }
예제 #24
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map  map = parms.target as Map;
            bool result;

            if (map == null)
            {
                result = false;
            }

            else if ((from wo in Find.WorldObjects.Sites
                      where wo is Site && wo.parts.Select(x => x.def) == SiteDefOfReconAndDiscovery.RD_QuakesQuest
                      select wo).Count <WorldObject>() > 0)
            {
                result = false;
            }
            else
            {
                int tile;
                if (TileFinder.TryFindNewSiteTile(out tile))
                {
                    Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_AdventureDestroyThing);
                    site.Tile = tile;
                    site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_QuakesQuest,
                                              SiteDefOfReconAndDiscovery.RD_QuakesQuest.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null)));
                    SitePart faultyGenerator = new SitePart(site, SiteDefOfReconAndDiscovery.RD_SitePart_FaultyGenerator,
                                                            SiteDefOfReconAndDiscovery.RD_SitePart_FaultyGenerator.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                    faultyGenerator.hidden = true;
                    site.parts.Add(faultyGenerator);
                    site.GetComponent <QuestComp_DestroyThing>().StartQuest(ThingDefOf.GeothermalGenerator);
                    site.GetComponent <QuestComp_DestroyThing>().gameConditionCaused = GameConditionDef.Named("RD_Tremors");
                    site.GetComponent <QuestComp_DestroyThing>().worldTileAffected   = map.Tile;
                    if (Rand.Value < 0.05f)
                    {
                        SitePart scatteredTreasure = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                        scatteredTreasure.hidden = true;
                        site.parts.Add(scatteredTreasure);
                    }
                    if (Rand.Value < 0.1f)
                    {
                        SitePart scatteredManhunters = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                        scatteredManhunters.hidden = true;
                        site.parts.Add(scatteredManhunters);
                    }
                    if (Rand.Value < 0.1f)
                    {
                        SitePart mechanoidForces = new SitePart(site, SiteDefOfReconAndDiscovery.RD_MechanoidForces, SiteDefOfReconAndDiscovery.RD_MechanoidForces.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                        mechanoidForces.hidden = true;
                        site.parts.Add(mechanoidForces);
                    }
                    if (Rand.Value < 0.05f)
                    {
                        SitePart enemyRaidOnArrival = new SitePart(site, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, null));
                        enemyRaidOnArrival.hidden = true;
                        site.parts.Add(enemyRaidOnArrival);
                    }
                    int           num           = 30;
                    GameCondition gameCondition = GameConditionMaker.MakeCondition(GameConditionDef.Named("RD_Tremors"), 60000 * num);
                    map.gameConditionManager.RegisterCondition(gameCondition);
                    site.GetComponent <TimeoutComp>().StartTimeout(num * 60000);
                    base.SendStandardLetter(parms, site);
                    Find.WorldObjects.Add(site);
                    result = true;
                }
                else
                {
                    result = false;
                }
            }
            return(result);
        }
예제 #25
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!TryFindSettlement(out Faction ally, out Settlement Set))
            {
                return(false);
            }

            // Balance
            List <Thing> rewards = ThingSetMakerDefOf.Reward_StandardByDropPod.root.Generate(new ThingSetMakerParams()
            {
                totalMarketValueRange = new FloatRange?(SiteTuning.BanditCampQuestRewardMarketValueRange * SiteTuning.QuestRewardMarketValueThreatPointsFactor.Evaluate(StorytellerUtility.DefaultSiteThreatPointsNow() + 500f))
            });

            Thing silver = ThingMaker.MakeThing(ThingDefOf.Silver);

            silver.stackCount = (int)SilverBonusRewardCurve.Evaluate(ally.PlayerGoodwill);
            int random = new IntRange(Global.DayInTicks * 15, Global.DayInTicks * 25).RandomInRange;

            Set.GetComponent <WorldComp_JointRaid>().StartComp(random, ally, rewards, silver);
            string text = def.letterText.Formatted(ally.leader.LabelShort, ally.def.leaderTitle, ally.Name, GenLabel.ThingsLabel(rewards, string.Empty), random.ToStringTicksToPeriod(), GenThing.GetMarketValue(rewards).ToStringMoney(null), silver.stackCount.ToString()).CapitalizeFirst();

            GenThing.TryAppendSingleRewardInfo(ref text, rewards);
            Find.LetterStack.ReceiveLetter(def.letterLabel, text, def.letterDef, Set, ally, null);
            return(true);
        }
예제 #26
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map  map = parms.target as Map;
            bool result;

            if (this.GetHasGoodStoryConditions(map))
            {
                Pawn pawn;
                Pawn pawn2;
                if (!this.CanFindVisitor(map, out pawn))
                {
                    result = false;
                }
                else if (!this.CanFindLuciferiumAddict(map, out pawn2))
                {
                    result = false;
                }
                else
                {
                    int tile;
                    if (TileFinder.TryFindNewSiteTile(out tile))
                    {
                        Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_Adventure);
                        site.Tile = tile;
                        Faction faction = Faction.OfInsects;
                        site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_SeraphitesQuest,
                                                  SiteDefOfReconAndDiscovery.RD_SeraphitesQuest.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction)));
                        SitePart sitePart_Computer = new SitePart(site, SiteDefOfReconAndDiscovery.RD_SitePart_Computer, SiteDefOfReconAndDiscovery.RD_SitePart_Computer.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                        sitePart_Computer.hidden = true;
                        site.parts.Add(sitePart_Computer);
                        foreach (SitePartDef sitePartDef in site.parts.Select(x => x.def))
                        {
                            if (sitePartDef.Worker is SitePartWorker_Computer)
                            {
                                (sitePartDef.Worker as SitePartWorker_Computer).action = ActionDefOfReconAndDiscovery.RD_ActionSeraphites;
                            }
                        }
                        if (Rand.Value < 0.15f)
                        {
                            SitePart scatteredManhunters = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters, SiteDefOfReconAndDiscovery.RD_ScatteredManhunters.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            scatteredManhunters.hidden = true;
                            site.parts.Add(scatteredManhunters);
                        }
                        if (Rand.Value < 0.3f)
                        {
                            SitePart scatteredTreasure = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            scatteredTreasure.hidden = true;
                            site.parts.Add(scatteredTreasure);
                        }
                        if (Rand.Value < 0.1f)
                        {
                            SitePart enemyRaidOnArrival = new SitePart(site, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival, SiteDefOfReconAndDiscovery.RD_EnemyRaidOnArrival.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            enemyRaidOnArrival.hidden = true;
                            site.parts.Add(enemyRaidOnArrival);
                        }
                        if (Rand.Value < 0.1f)
                        {
                            SitePart mechanoidForces = new SitePart(site, SiteDefOfReconAndDiscovery.RD_MechanoidForces, SiteDefOfReconAndDiscovery.RD_MechanoidForces.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), tile, faction));
                            mechanoidForces.hidden = true;
                            site.parts.Add(mechanoidForces);
                        }
                        base.SendStandardLetter(parms, site, new NamedArgument[]
                        {
                            pawn.Label,
                            pawn2.Label
                        });
                        Find.WorldObjects.Add(site);
                        result = true;
                    }
                    else
                    {
                        result = false;
                    }
                }
            }
            else
            {
                result = false;
            }
            return(result);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            int tile;

            if (!TileFinder.TryFindNewSiteTile(out tile, minDist, maxDist, false, true, -1))
            {
                return(false);
            }
            Faction faction;

            if (!TryFindFaction(out faction))
            {
                return(false);
            }
            Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOf.PrisonSiteLGE);

            site.Tile = tile;
            site.core = new SiteCore(SiteDefOf.PrisonCampLGE, SiteDefOf.PrisonCampLGE.Worker.GenerateDefaultParams(site, StorytellerUtility.DefaultSiteThreatPointsNow()));
            site.SetFaction(faction);
            ThingSetMakerParams thingMakerparms = default(ThingSetMakerParams);

            thingMakerparms.totalMarketValueRange = new FloatRange?(SiteTuning.BanditCampQuestRewardMarketValueRange);
            List <Thing> list = ThingSetMakerDefOf.Reward_StandardByDropPod.root.Generate(thingMakerparms);

            site.GetComponent <PrisonerRescueQuestComp>().StartQuest(faction, 18, list);

            site.GetComponent <TimeoutComp>().StartTimeout(TimeoutDaysRange.RandomInRange * 60000);
            Find.WorldObjects.Add(site);
            Find.LetterStack.ReceiveLetter("LetterLabelPrisonCampLGE".Translate(), "LetterPrisonCampLGE".Translate(faction.Name, GenThing.GetMarketValue(list).ToStringMoney(null), GenLabel.ThingsLabel(list, string.Empty)), LetterDefOf.PositiveEvent, site, null);

            return(true);
        }
예제 #28
0
        private void FoundAnomaly()
        {
            int min = AnomalyDistanceMin;
            int max = AnomalyDistanceMax;

            int tile2 = base.parent.Tile;
            int tile  = default(int);

            if (!TryFindNewAnomalyTile(out tile, min, max, false, true, tile2))
            {
                return;
            }

            Site site;
            //bool spacerUsable = false;

            List <SitePartDef> siteParts = new List <SitePartDef>();

            if (Rand.Chance(Props.chanceForNoSitePart))
            {
                siteParts.Add(GetRandomSiteCoreDef());

                site = SiteMaker.TryMakeSite(siteParts, tile, false, null, true);
                //spacerUsable = true;
            }
            else
            {
                siteParts.Add(GetRandomSiteCoreDef());
                siteParts.AddRange(GetRandomSitePartDefs);
                site = SiteMaker.TryMakeSite(siteParts, tile, true, null, false);
            }

            //// if spacerUsable -> 35% chance that the faction is spacer
            //if (site != null && spacerUsable && Rand.Chance(0.35f))
            //{
            //    Faction spacerFaction = null;
            //    if ((from x in Find.FactionManager.AllFactionsListForReading
            //         where x.def == FactionDefOf.Ancients || x.def == FactionDefOf.AncientsHostile
            //         select x).TryRandomElement(out spacerFaction))
            //        site.SetFaction(spacerFaction);
            //}

            if (site != null)
            {
                // Try to add a railgun :)
                Thing    railgun    = null;
                ThingDef railgunDef = DefDatabase <ThingDef> .GetNamedSilentFail(railgunDefName);

                if (railgunDef != null &&
                    site.Faction != null && site.Faction.def.techLevel >= TechLevel.Industrial &&
                    Rand.Value < 0.10)
                {
                    railgun = ThingMaker.MakeThing(railgunDef);
                }


                List <Thing> items = null;
                // Improved Sensors -> Add Items
                if (HasImprovedSensors)
                {
                    ItemStashContentsComp itemStash = site.GetComponent <ItemStashContentsComp>();
                    if (itemStash != null && siteParts.Contains(DefDatabase <SitePartDef> .GetNamedSilentFail(defName_ItemStash)))
                    {
                        items = GenerateItems(site.Faction, StorytellerUtility.DefaultSiteThreatPointsNow());
                        itemStash.contents.TryAddRangeOrTransfer(items);

                        if (railgun != null)
                        {
                            itemStash.contents.TryAdd(railgun);
                        }
                    }
                }

                //site.Tile = tile;

                // Add a site timeout ???
                site.GetComponent <TimeoutComp>().StartTimeout(Rand.RangeInclusive(15, 60) * 60000);

                Find.WorldObjects.Add(site);
                Find.LetterStack.ReceiveLetter("TacticalComputer_LetterLabel_AnomalyFound".Translate(), "TacticalComputer_Message_AnomalyFound".Translate(), LetterDefOf.PositiveEvent, site);
            }
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map    map  = parms.target as Map;
            int    num  = IncidentWorker_MuffaloHerd.TimeoutDaysRange.RandomInRange;
            int    num2 = -1;
            string text;

            if (map != null)
            {
                if (!TileFinder.TryFindNewSiteTile(out num2))
                {
                    return(false);
                }
                text = "RD_LargeMuffaloMigration".Translate()

//A large muffalo migration is due to pass near here in

                       + " {0} " + "Days".Translate(); //days!
            }
            else
            {
                List <Caravan> list = (from c in Find.World.worldObjects.Caravans
                                       where c.Faction == Faction.OfPlayer
                                       select c).ToList <Caravan>();
                if (list.Count == 0)
                {
                    return(false);
                }
                Caravan caravan = list.RandomElement <Caravan>();
                num -= 3;
                TileFinder.TryFindPassableTileWithTraversalDistance(caravan.Tile, 1, 2, out num2, (int t) => !Find.WorldObjects.AnyMapParentAt(t), false);
                if (num2 == 0 || num2 == -1)
                {
                    return(false);
                }
                text = "RD_YourCaravanSpottedMuffaloMigration".Translate(); //"Your caravan has spotted a huge muffalo migration!";
            }
            bool result;

            if (num2 == 0 || num2 == -1)
            {
                result = false;
            }
            else
            {
                Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOfReconAndDiscovery.RD_Adventure);
                site.Tile = num2;

                site.AddPart(new SitePart(site, SiteDefOfReconAndDiscovery.RD_MuffaloMigration,
                                          SiteDefOfReconAndDiscovery.RD_MuffaloMigration.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), num2, null)));
                if (Rand.Value < 0.5f)
                {
                    SitePart scatteredTreasure = new SitePart(site, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure, SiteDefOfReconAndDiscovery.RD_ScatteredTreasure.Worker.GenerateDefaultParams(StorytellerUtility.DefaultSiteThreatPointsNow(), num2, null));
                    scatteredTreasure.hidden = true;
                    site.parts.Add(scatteredTreasure);
                }
                Find.LetterStack.ReceiveLetter("RD_MuffaloMigration".Translate(), text, LetterDefOf.PositiveEvent, site, null);
                site.GetComponent <TimeoutComp>().StartTimeout(num * 60000);
                Find.WorldObjects.Add(site);
                result = true;
            }
            return(result);
        }
 public override void CompTick()
 {
     base.CompTick();
     if (this.active && this.infected)
     {
         if (Find.TickManager.TicksGame % 600 == 0)
         {
             this.counter++;
             this.fillRadius();
             if (this.counter > 750 && this.delay < Find.TickManager.TicksGame)
             {
                 int             num;
                 Predicate <int> predicate = (int x) => this.infectedTile != x && !Find.WorldObjects.AnyWorldObjectAt
                                                 (x, PurpleIvyDefOf.PI_InfectedTile);
                 if (TileFinder.TryFindPassableTileWithTraversalDistance(this.parent.Tile,
                                                                         0, 1, out num, predicate, false, true, false))
                 {
                     Site site     = null;
                     bool infected = false;
                     if (!Find.WorldObjects.AnyMapParentAt(num))
                     {
                         site      = (Site)WorldObjectMaker.MakeWorldObject(PurpleIvyDefOf.PI_InfectedTile);
                         site.Tile = num;
                         site.SetFaction(PurpleIvyData.AlienFaction);
                     }
                     else
                     {
                         var worldObject = Find.WorldObjects.MapParentAt(num);
                         if (worldObject is Site)
                         {
                             Log.Message("Infect other non-infected sites");
                             site     = (Site)worldObject;
                             infected = true;
                         }
                         else
                         {
                             Log.Message("Error: " + worldObject.ToString());
                         }
                     }
                     if (infected == true)
                     {
                         site.AddPart(new SitePart(site, PurpleIvyDefOf.InfectedSite,
                                                   PurpleIvyDefOf.InfectedSite.Worker.GenerateDefaultParams
                                                       (StorytellerUtility.DefaultSiteThreatPointsNow(), num, PurpleIvyData.AlienFaction)));
                         site.AddPart(new SitePart(site, PurpleIvyDefOf.InfectedSite,
                                                   PurpleIvyDefOf.InfectedSite.Worker.GenerateDefaultParams
                                                       (StorytellerUtility.DefaultSiteThreatPointsNow(), num, PurpleIvyData.AlienFaction)));
                         var comp = site.GetComponent <WorldObjectComp_InfectedTile>();
                         comp.StartInfection();
                         comp.gameConditionCaused = PurpleIvyDefOf.PurpleFogGameCondition;
                         comp.counter             = 0;
                         comp.infectedTile        = site.Tile;
                         comp.radius = comp.GetRadius();
                         PurpleIvyData.TotalFogProgress[comp] = PurpleIvyUtils.getFogProgress(comp.counter);
                         comp.fillRadius();
                         site.GetComponent <TimeoutComp>().StartTimeout(30 * 60000);
                         Find.WorldObjects.Add(site);
                         Find.LetterStack.ReceiveLetter("InfectedTileSpreading".Translate(),
                                                        "InfectedTileSpreadingDesc".Translate(), LetterDefOf.ThreatBig, site);
                         this.delay = Find.TickManager.TicksGame + new IntRange(220000, 270000).RandomInRange;
                     }
                 }
             }
         }
         if (Find.TickManager.TicksGame % 60 == 0)
         {
             MapParent mapParent = this.parent as MapParent;
             if (mapParent != null && mapParent.Map != null)
             {
                 int count = mapParent.Map.listerThings.ThingsOfDef(PurpleIvyDefOf.PurpleIvy).Count;
                 if (count > 0)
                 {
                     this.counter = count;
                 }
                 else if (count <= 0)
                 {
                     this.counter = 0;
                     this.StopInfection();
                 }
             }
             PurpleIvyData.TotalFogProgress[this] = PurpleIvyUtils.getFogProgress(this.counter);
         }
     }
 }