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); } }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); } }
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); }
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); }
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); }
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); }
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); }
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); } } }