public override void Generate(Map map, GenStepParams parms) { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatSmall, map); incidentParms.faction = parms.sitePart.site.Faction; if (incidentParms.faction == null) { incidentParms.faction = Faction.OfMechanoids; } incidentParms.points = parms.sitePart.parms.threatPoints; List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, false), true).ToList <Pawn>(); if (list.Count > 0) { foreach (Pawn pawn in list) { IntVec3 result = new IntVec3(); CellFinder.TryFindRandomCellNear(map.Center, map, 10, c => c.Walkable(map), out result); GenSpawn.Spawn(pawn, result, map); } } MapGenerator.SetVar <CellRect>("RectOfInterest", CellRect.CenteredOn(map.Center, 1, 1)); LordMaker.MakeNewLord(incidentParms.faction, new LordJob_DefendBase(incidentParms.faction, map.Center), map, list); }
public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false) { if (!StoreIncidentMaker.CheckIfViewerHasEnoughCoins(viewer, this.storeIncident.cost, separateChannel)) { return(false); } if (Current.Game.GetComponent <GameComponentPawns>().HasUserBeenNamed(viewer.username)) { Toolkit.client.SendMessage($"@{viewer.username} you are already in the colony.", separateChannel); return(false); } this.separateChannel = separateChannel; this.viewer = viewer; IIncidentTarget target = Helper.AnyPlayerMap; parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, target); map = (Map)parms.target; bool cell = CellFinder.TryFindRandomEdgeCellWith((IntVec3 c) => map.reachability.CanReachColony(c) && !c.Fogged(map), map, CellFinder.EdgeRoadChance_Neutral, out loc); if (!cell) { return(false); } return(true); }
public override void MapComponentTick() { base.MapComponentTick(); //We don't need to run all that often if (Find.TickManager.TicksGame % 531 == 0 && GenDate.DaysPassed > 8) { foreach (KeyValuePair <Faction, int> kvp in this.NextFactionInteraction) { if (Find.TickManager.TicksGame >= kvp.Value) { Faction faction = kvp.Key; IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(incCat: IncidentCategoryDefOf.FactionArrival, target: this.map); incidentParms.faction = faction; //forced, because half the time game doesn't feel like firing events. incidentParms.forced = true; //trigger incident somewhere between half a day and 3 days from now Find.Storyteller.incidentQueue.Add(def: IncomingIncidentDef(faction) ?? IncomingIncidentDef(faction), // overly-cautious "try again" null-check after strange bugreport. fireTick: Find.TickManager.TicksGame + Rand.Range(min: GenDate.TicksPerDay / 2, max: GenDate.TicksPerDay * 3), parms: incidentParms, retryDurationTicks: 2500); this.NextFactionInteraction[key : faction] = Find.TickManager.TicksGame + (int)(FactionInteractionTimeSeperator.TimeBetweenInteraction.Evaluate(faction.PlayerGoodwill) * MoreFactionInteraction_Settings.timeModifierBetweenFactionInteraction); //kids, you shouldn't change values you iterate over. break; } } } }
public void SendRaid() { raidTimer = ticksBetweenRaids; if (camp.PlayerSiegeMap == null) { return; } if (!TryFindSpawnSpot(camp.PlayerSiegeMap, out IntVec3 spawnSpot)) { return; } float points = totalThreat * 0.5f; if (totalThreat <= 0) { points = totalThreat; } IncidentParms raidParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, camp.PlayerSiegeMap); raidParms.forced = true; raidParms.faction = camp.Faction; raidParms.raidStrategy = RaidStrategyDefOf.ImmediateAttack; raidParms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn; raidParms.spawnCenter = spawnSpot; raidParms.points = points; raidParms.pawnGroupMakerSeed = Rand.Int; var incident = new FiringIncident(IncidentDefOf.RaidEnemy, null, raidParms); Find.Storyteller.TryFire(incident); }
private void DoMapPartDrop() { IncidentDef def = IncidentDefOf.ShipChunkDrop; IncidentParms parms = StorytellerUtility.DefaultParmsNow(def.category, Find.AnyPlayerHomeMap); def.Worker.TryExecute(parms); }
public static void TenantInvite(Building_CommsConsole comms, Pawn pawn) { Messages.Message("InviteTenantMessage".Translate(), MessageTypeDefOf.NeutralEvent); MapComponent_Tenants.GetComponent(pawn.Map).Broadcast = true; if (Rand.Value < 0.20f) { var parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, pawn.Map); parms.raidStrategy = RaidStrategyDefOf.Retribution; parms.forced = true; Find.Storyteller.incidentQueue.Add(IncidentDefOf.Opportunists, Find.TickManager.TicksGame + Rand.Range(25000, 150000), parms, 240000); } else { var parms = new IncidentParms { target = pawn.Map, forced = true }; Find.Storyteller.incidentQueue.Add(IncidentDefOf.RequestForTenancy, Find.TickManager.TicksGame + Rand.Range(15000, 120000), parms, 240000); while (Rand.Value < 0.10) { Find.Storyteller.incidentQueue.Add(IncidentDefOf.RequestForTenancy, Find.TickManager.TicksGame + Rand.Range(15000, 120000), parms, 240000); } } }
public static void SendRaid(Faction faction, Map map, float points, int arrivalTime, PawnsArrivalModeDef pawnsArrivalModeDef = null, RaidStrategyDef raidStrategyDef = null) { int @int = Rand.Int; IncidentParms raidParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, map); raidParms.forced = true; raidParms.faction = faction; raidParms.points = points; raidParms.pawnGroupMakerSeed = @int; raidParms.generateFightersOnly = true; if (raidStrategyDef != null) { raidParms.raidStrategy = raidStrategyDef; } else { ResolveRaidStrategy(raidParms, PawnGroupKindDefOf.Combat); } if (pawnsArrivalModeDef != null) { raidParms.raidArrivalMode = pawnsArrivalModeDef; } else { ResolveRaidArriveMode(raidParms); } Find.Storyteller.incidentQueue.Add(IncidentDefOf.RaidEnemy, Find.TickManager.TicksGame + arrivalTime, raidParms); }
private static void DoIncidentDebugAction(IIncidentTarget target, int iterations = 1) { List <DebugMenuOption> list = new List <DebugMenuOption>(); foreach (IncidentDef item in from d in DefDatabase <IncidentDef> .AllDefs where d.TargetAllowed(target) orderby d.defName select d) { IncidentDef localDef = item; string text = localDef.defName; IncidentParms parms = StorytellerUtility.DefaultParmsNow(localDef.category, target); if (!localDef.Worker.CanFireNow(parms)) { text += " [NO]"; } list.Add(new DebugMenuOption(text, DebugMenuOptionMode.Action, delegate { for (int i = 0; i < iterations; i++) { IncidentParms parms2 = StorytellerUtility.DefaultParmsNow(localDef.category, target); if (localDef.pointsScaleable) { parms2 = Find.Storyteller.storytellerComps.First((StorytellerComp x) => x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain).GenerateParms(localDef.category, parms.target); } localDef.Worker.TryExecute(parms2); } })); } Find.WindowStack.Add(new Dialog_DebugOptionListLister(list)); }
private static void DoIncidentWithPointsAction(IIncidentTarget target) { List <DebugMenuOption> list = new List <DebugMenuOption>(); foreach (IncidentDef item in from d in DefDatabase <IncidentDef> .AllDefs where d.TargetAllowed(target) && d.pointsScaleable orderby d.defName select d) { IncidentDef localDef = item; string text = localDef.defName; IncidentParms parms = StorytellerUtility.DefaultParmsNow(localDef.category, target); if (!localDef.Worker.CanFireNow(parms)) { text += " [NO]"; } float localPoints = default(float); list.Add(new DebugMenuOption(text, DebugMenuOptionMode.Action, delegate { List <DebugMenuOption> list2 = new List <DebugMenuOption>(); foreach (float item2 in DebugActionsUtility.PointsOptions(extended: true)) { localPoints = item2; list2.Add(new DebugMenuOption(item2 + " points", DebugMenuOptionMode.Action, delegate { parms.points = localPoints; localDef.Worker.TryExecute(parms); })); } Find.WindowStack.Add(new Dialog_DebugOptionListLister(list2)); })); } Find.WindowStack.Add(new Dialog_DebugOptionListLister(list)); }
protected void CaravanAmbushManhuntersNoTreasure(Caravan caravan) { LongEventHandler.QueueLongEvent(delegate { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan); //make sure a minimum point threshold is hit if (incidentParms.points < MinimumPointThreshold) { incidentParms.points = MinimumPointThreshold; } PawnKindDef animalKind; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), incidentParms.target.Tile, out animalKind) && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), -1, out animalKind)) { Log.Warning("Could not find any valid animal kind for " + this.def + " incident. Going with Wargs", false); animalKind = ThingDefOfVanilla.Warg; } List <Pawn> list = ManhunterPackIncidentUtility.GenerateAnimals(animalKind, incidentParms.target.Tile, this.AdjustedPoints(incidentParms.points)); Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, list, false); for (int i = 0; i < list.Count; i++) { list[i].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false); } Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; GlobalTargetInfo lookTarget = (!list.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(list[0].Position, map, false); Find.LetterStack.ReceiveLetter("LetterLabelIMAmbushLGE".Translate(), "LetterIMAmbushLGE".Translate(), LetterDefOf.ThreatBig, lookTarget, null); }, "GeneratingMapForNewEncounter", false, null); }
public override void PostMapGenerate(Map map) { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.FactionArrival, map); incidentParms.forced = true; IntVec3 spawnCenter; if (RCellFinder.TryFindRandomPawnEntryCell(out spawnCenter, map, 0f, false, (IntVec3 v) => v.Standable(map))) { incidentParms.spawnCenter = spawnCenter; } Faction faction; if ((from f in Find.FactionManager.AllFactions where !f.def.hidden && f.HostileTo(Faction.OfPlayer) select f).TryRandomElement(out faction)) { IntVec3 spawnCenter2; if (CellFinder.TryFindRandomEdgeCellWith((IntVec3 c) => map.reachability.CanReachColony(c), map, CellFinder.EdgeRoadChance_Neutral, out spawnCenter2)) { incidentParms.faction = faction; incidentParms.raidStrategy = RaidStrategyDefOf.ImmediateAttack; incidentParms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn; incidentParms.spawnCenter = spawnCenter2; incidentParms.points *= 20f; incidentParms.points = Math.Max(incidentParms.points, 250f); QueuedIncident qi = new QueuedIncident(new FiringIncident(ThingDefOfReconAndDiscovery.RD_RaidEnemyQuest, null, incidentParms), Find.TickManager.TicksGame + Rand.RangeInclusive(5000, 15000)); Find.Storyteller.incidentQueue.Add(qi); } } }
protected void TreasureWithManhunters(Caravan caravan) { List <Thing> rewardList = GenerateReward(); for (int i = 0; i < rewardList.Count; i++) { caravan.AddPawnOrItem(rewardList[i], true); } LongEventHandler.QueueLongEvent(delegate { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan); //make sure a minimum point threshold is hit if (incidentParms.points < MinimumPointThreshold) { incidentParms.points = MinimumPointThreshold + 100f; } PawnKindDef animalKind; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), incidentParms.target.Tile, out animalKind) && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), -1, out animalKind)) { Log.Warning("Could not find any valid animal kind for " + this.def + " incident. Going with Wargs", false); animalKind = ThingDefOfVanilla.Warg; } List <Pawn> pawnList = ManhunterPackIncidentUtility.GenerateAnimals(animalKind, incidentParms.target.Tile, this.AdjustedPoints(incidentParms.points)); Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, pawnList, false); for (int i = 0; i < pawnList.Count; i++) { pawnList[i].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false); } Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; GlobalTargetInfo lookTarget = (!pawnList.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(pawnList[0].Position, map, false); Find.LetterStack.ReceiveLetter("LetterLabelTreasureAmbushLGE".Translate(), "LetterTreasureAmbushLGE".Translate(GenThing.GetMarketValue(rewardList).ToStringMoney(null), GenLabel.ThingsLabel(rewardList, string.Empty)), LetterDefOf.ThreatBig, lookTarget, null); }, "GeneratingMapForNewEncounter", false, null); }
protected void TreasureWithHumanAmbush(Caravan caravan) { List <Thing> rewardList = GenerateReward(); for (int i = 0; i < rewardList.Count; i++) { caravan.AddPawnOrItem(rewardList[i], true); } LongEventHandler.QueueLongEvent(delegate { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan); //make sure a minimum point threshold is hit if (incidentParms.points < MinimumPointThreshold) { incidentParms.points = MinimumPointThreshold + 100f; } incidentParms.faction = Find.FactionManager.RandomEnemyFaction(); PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, true); defaultPawnGroupMakerParms.generateFightersOnly = true; List <Pawn> pawnList = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>(); Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, pawnList, false); if (pawnList.Any <Pawn>()) { LordMaker.MakeNewLord(incidentParms.faction, new LordJob_AssaultColony(incidentParms.faction, true, true, false, false, true), map, pawnList); } Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; GlobalTargetInfo lookTarget = (!pawnList.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(pawnList[0].Position, map, false); Find.LetterStack.ReceiveLetter("LetterLabelTreasureAmbushLGE".Translate(), "LetterTreasureAmbushLGE".Translate(GenThing.GetMarketValue(rewardList).ToStringMoney(null), GenLabel.ThingsLabel(rewardList, string.Empty)), LetterDefOf.ThreatBig, lookTarget, null); }, "GeneratingMapForNewEncounter", false, null); }
private static void DoIncidentDebugAction(Dialog_DebugActionsMenu menu, IIncidentTarget target) { menu.DebugAction($"Incident on {target}", () => { var list = new List <DebugMenuOption>(); foreach (var localDef2 in DefDatabase <IncidentDef> .AllDefs.Where(d => d.TargetAllowed(target)).OrderBy(d => d.defName)) { IncidentDef localDef = localDef2; string text = localDef.defName; IncidentParms parms = StorytellerUtility.DefaultParmsNow(localDef.category, target); if (!localDef.Worker.CanFireNow(parms, false)) { text += " [NO]"; } list.Add(new DebugMenuOption(text, DebugMenuOptionMode.Action, () => { if (localDef.pointsScaleable) { StorytellerComp storytellerComp = Find.Storyteller.storytellerComps.First((StorytellerComp x) => x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain); parms = storytellerComp.GenerateParms(localDef.category, parms.target); } ExecuteIncident(localDef, parms, target as Map); })); } Find.WindowStack.Add(new Dialog_DebugOptionListLister(list)); }); }
private void Outcome_Disaster(Caravan caravan) { LongEventHandler.QueueLongEvent(delegate { int randomInRange = WorldObject_ResearchRequestLGE.DisasterFactionRelationOffset.RandomInRange; this.Faction.TryAffectGoodwillWith(Faction.OfPlayer, randomInRange, false, false, null, null); if (!this.Faction.HostileTo(Faction.OfPlayer)) { this.Faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, false, null, null); } IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan); incidentParms.faction = this.Faction; PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, true); defaultPawnGroupMakerParms.generateFightersOnly = true; List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>(); Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, list, false); if (list.Any <Pawn>()) { LordMaker.MakeNewLord(incidentParms.faction, new LordJob_AssaultColony(this.Faction, true, true, false, false, true), map, list); } Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; GlobalTargetInfo lookTarget = (!list.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(list[0].Position, map, false); Find.LetterStack.ReceiveLetter("LetterLabelResearchRequest_DisasterLGE".Translate(), this.GetLetterText("LetterResearchRequest_DisasterLGE".Translate(this.Faction.def.pawnsPlural.CapitalizeFirst(), this.Faction.Name, Mathf.RoundToInt(randomInRange)), caravan), LetterDefOf.ThreatBig, lookTarget, null); }, "GeneratingMapForNewEncounter", false, null); }
public override void CompTick() { base.CompTick(); if (!waitingForNight && this.parent.IsHashIntervalTick(Props.checkingInterval) && this.parent.Map != null && (!Props.requiresTamed || (Props.requiresTamed && this.parent.Faction != null && this.parent.Faction.IsPlayer))) { IncidentDef incidentDef = IncidentDef.Named(Props.incidentToCause); if (incidentDef.defName == "Aurora") { waitingForNight = true; } else { IncidentParms parms = StorytellerUtility.DefaultParmsNow(incidentDef.category, this.parent.Map); incidentDef.Worker.TryExecute(parms); } } if (waitingForNight && this.parent.IsHashIntervalTick(this.checkingForNightInterval) && this.parent.Map != null && GenCelestial.CurCelestialSunGlow(this.parent.Map) <= 0.4f && (!Props.requiresTamed || (Props.requiresTamed && this.parent.Faction != null && this.parent.Faction.IsPlayer))) { IncidentDef incidentDef = IncidentDef.Named(Props.incidentToCause); IncidentParms parms = StorytellerUtility.DefaultParmsNow(incidentDef.category, this.parent.Map); incidentDef.Worker.TryExecute(parms); waitingForNight = false; } }
public static void TenantWanted(Pawn pawn) { var tenantComp = pawn.GetTenantComponent(); if (Rand.Value < 0.66 && tenantComp.WantedBy.HostileTo(Find.FactionManager.OfPlayer) && !MapComponent_Tenants.GetComponent(pawn.Map).WantedTenants.Contains(pawn)) { MapComponent_Tenants.GetComponent(pawn.Map).WantedTenants.Add(pawn); var parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, pawn.Map); parms.raidStrategy = RaidStrategyDefOf.WantedRaid; parms.forced = true; Find.Storyteller.incidentQueue.Add(IncidentDefOf.WantedRaid, Find.TickManager.TicksGame + Rand.Range(100000, 300000), parms, 60000); } else if (Rand.Value < 0.5) { tenantComp.WantedBy.RelationWith(Find.FactionManager.OfPlayer).baseGoodwill -= SettingsHelper.LatestVersion.HarborPenalty; Find.FactionManager.OfPlayer.RelationWith(tenantComp.WantedBy).baseGoodwill -= SettingsHelper.LatestVersion.HarborPenalty; Messages.Message( "HarboringWantedTenant".Translate(pawn.GetTenantComponent().WantedBy, SettingsHelper.LatestVersion.HarborPenalty, pawn.Named("PAWN")), MessageTypeDefOf.NegativeEvent); } }
private IncidentParms IncidentParms(Map map, TargetInfo target) { IncidentParms parms = StorytellerUtility.DefaultParmsNow(category, map); parms.points = points >= 0 ? points : parms.points; parms.faction = Faction; parms.forced = true; parms.raidStrategy = raidStrategy; parms.raidArrivalMode = arriveMode; parms.spawnCenter = positionFilter.FindCell(map, spawnSettings.spawnList); if (type == IncidentType.Reward) { if (spawnSettings.mode == SpawnMode.Target) { parms.spawnCenter = target.Cell; } } if (type == IncidentType.Raid) { parms.points = spawnSettings.spawnList.Sum(tv => tv.PawnKindDef.combatPower); parms.raidArrivalMode.Worker.TryResolveRaidSpawnCenter(parms); } parms.points *= pointMultiplier; return(parms); }
public override bool IsPossible() { List <string> animals = new List <string>() { "Bear_Grizzly", "Bear_Polar", "Rhinoceros", "Elephant", "Megasloth", "Thrumbo" }; animals.Shuffle(); ThingDef def = ThingDef.Named(animals[0]); float averagePower = 0; if (def != null && def.race != null) { foreach (Tool t in def.tools) { averagePower += t.power; } averagePower = averagePower / def.tools.Count; } float animalCount = 2.5f; if (averagePower > 18) { animalCount = 2.0f; } worker = new IncidentWorker_SpecificAnimalsWanderIn("TwitchStoriesLetterLabelPredators", PawnKindDef.Named(animals[0]), false, (int)animalCount, true, true); worker.def = IncidentDef.Named("HerdMigration"); parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, target); return(worker.CanFireNow(parms)); }
public override IncidentParms GenerateParms(IncidentCategoryDef incCat, IIncidentTarget target) { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(incCat, target); incidentParms.points *= this.Props.randomPointsFactorRange.RandomInRange; return(incidentParms); }
public override void DoAction(EmailMessage message, EmailBox box, Pawn speaker) { IncidentDef def = null; switch (action) { case 0: { Utils.SendRaid(Find.FactionManager.OfMechanoids, 1.4f, Rand.Range(2, 5) * 60000); break; } case 1: { def = IncidentDefOfLocal.PsychicEmanatorShipPartCrash; def.Worker.TryExecute(StorytellerUtility.DefaultParmsNow(def.category, Find.AnyPlayerHomeMap)); break; } case 2: { Utils.SendRaid(Find.FactionManager.OfMechanoids, 1.2f, Rand.Range(2, 7) * 60000); break; } case 3: { def = IncidentDefOfLocal.ResourcePodCrash; def.Worker.TryExecute(StorytellerUtility.DefaultParmsNow(def.category, Find.AnyPlayerHomeMap)); break; } } }
private void Outcome_Disaster(Caravan caravan) { LongEventHandler.QueueLongEvent(delegate { FactionRelationKind playerRelationKind = base.Faction.PlayerRelationKind; int randomInRange = DiplomacyTuning.Goodwill_PeaceTalksDisasterRange.RandomInRange; base.Faction.TryAffectGoodwillWith(Faction.OfPlayer, randomInRange, canSendMessage: false, canSendHostilityLetter: false); base.Faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, canSendLetter: false); IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan); incidentParms.faction = base.Faction; PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, ensureCanGenerateAtLeastOnePawn: true); defaultPawnGroupMakerParms.generateFightersOnly = true; List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms).ToList(); Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, list, sendLetterIfRelatedPawns: false); if (list.Any()) { LordMaker.MakeNewLord(incidentParms.faction, new LordJob_AssaultColony(base.Faction), map, list); } Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); GlobalTargetInfo target = (list.Any() ? new GlobalTargetInfo(list[0].Position, map) : GlobalTargetInfo.Invalid); TaggedString letterLabel = "LetterLabelPeaceTalks_Disaster".Translate(); TaggedString letterText = GetLetterText("LetterPeaceTalks_Disaster".Translate(base.Faction.def.pawnsPlural.CapitalizeFirst(), base.Faction.NameColored, Mathf.RoundToInt(randomInRange)), caravan, playerRelationKind); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(list, ref letterLabel, ref letterText, "LetterRelatedPawnsGroupGeneric".Translate(Faction.OfPlayer.def.pawnsPlural), informEvenIfSeenBefore: true); Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.ThreatBig, target, base.Faction); }, "GeneratingMapForNewEncounter", doAsynchronously: false, null); }
public override bool IsPossible() { parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, target); points = parms.points; return(worker.CanFireNow(parms)); }
public override void WorldComponentTick() { base.WorldComponentTick(); if (Find.AnyPlayerHomeMap == null) { return; } if (!(Find.TickManager.TicksGame >= occuringTick)) { return; } var parms = StorytellerUtility.DefaultParmsNow(incident.category, Find.Maps.Where(x => x.IsPlayerHome).RandomElement()); if (incident.Worker.TryExecute(parms)) { occuringTick += IntervalTicks; } else { occuringTick += GenDate.TicksPerDay; } }
private void Outcome_Disaster(Caravan caravan) { LongEventHandler.QueueLongEvent(delegate() { FactionRelationKind playerRelationKind = this.Faction.PlayerRelationKind; int randomInRange = DiplomacyTuning.Goodwill_PeaceTalksDisasterRange.RandomInRange; this.Faction.TryAffectGoodwillWith(Faction.OfPlayer, randomInRange, false, false, null, null); this.Faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, false, null, null); IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan); incidentParms.faction = this.Faction; PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, true); defaultPawnGroupMakerParms.generateFightersOnly = true; List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>(); Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, list, false); if (list.Any <Pawn>()) { LordMaker.MakeNewLord(incidentParms.faction, new LordJob_AssaultColony(this.Faction, true, true, false, false, true), map, list); } Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); GlobalTargetInfo target = (!list.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(list[0].Position, map, false); string label = "LetterLabelPeaceTalks_Disaster".Translate(); string letterText = this.GetLetterText("LetterPeaceTalks_Disaster".Translate(new object[] { this.Faction.def.pawnsPlural.CapitalizeFirst(), this.Faction.Name, Mathf.RoundToInt((float)randomInRange) }), caravan, playerRelationKind); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(list, ref label, ref letterText, "LetterRelatedPawnsGroupGeneric".Translate(new object[] { Faction.OfPlayer.def.pawnsPlural }), true, true); Find.LetterStack.ReceiveLetter(label, letterText, LetterDefOf.ThreatBig, target, this.Faction, null); }, "GeneratingMapForNewEncounter", false, null); }
public static void CauseMechanoidRaid(Pawn pawn, BodyPartRecord part, RecipeDef recipe, float points = 1.25f, int minTicks = 2000, int maxTicks = 4000) { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, pawn.Map); IntVec3 spawnSpot; if (!CellFinder.TryFindRandomEdgeCellWith((IntVec3 c) => pawn.Map.reachability.CanReachColony(c), pawn.Map, CellFinder.EdgeRoadChance_Neutral, out spawnSpot)) { Nothing(pawn, null, recipe); return; } incidentParms.forced = true; incidentParms.faction = Faction.OfMechanoids; incidentParms.raidStrategy = RaidStrategyDefOf.ImmediateAttack; incidentParms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn; incidentParms.spawnCenter = spawnSpot; incidentParms.points *= points; int delay = new IntRange(minTicks, maxTicks).RandomInRange; QueuedIncident qi = new QueuedIncident(new FiringIncident(IncidentDefOf.RaidEnemy, null, incidentParms), Find.TickManager.TicksGame + delay); Find.Storyteller.incidentQueue.Add(qi); Base.Instance.GetExtendedDataStorage().lastEmergencySignalTick = Find.TickManager.TicksGame; Base.Instance.GetExtendedDataStorage().lastEmergencySignalDelay = delay; }
private void NextWave() { Map map = Bomb.Map; if (!TryFindSpawnSpot(map, out IntVec3 spawnSpot)) { return; } if (!TryFindEnemyFaction(out Faction enemyFac)) { return; } int @int = Rand.Int; IncidentParms raidParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, map); raidParms.forced = true; raidParms.faction = enemyFac; raidParms.raidStrategy = RaidStrategyDefOf.ImmediateAttack; raidParms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn; raidParms.spawnCenter = spawnSpot; raidParms.points = threatsMap[currentWave]; raidParms.pawnGroupMakerSeed = @int; var incident = new FiringIncident(IncidentDefOf.RaidEnemy, null, raidParms); Find.Storyteller.TryFire(incident); currentWave++; }
public override void Generate(Map map, GenStepParams parms) { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatSmall, map); incidentParms.faction = Find.FactionManager.AllFactionsListForReading.FindAll(f => (f.def == VFEV_DefOf.VFEV_VikingsClan || f.def == VFEV_DefOf.VFEV_VikingsSlaver) && f.HostileTo(Faction.OfPlayer))?.RandomElement(); /*parms.sitePart.site.Faction;*/ if (incidentParms.faction == null) { incidentParms.faction = Faction.OfMechanoids; } incidentParms.points = Mathf.Max(incidentParms.points * 0.5f, incidentParms.faction.def.MinPointsToGeneratePawnGroup(PawnGroupKindDefOf.Combat)); List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, false), true).ToList(); if (list.Count > 0) { foreach (Pawn pawn in list) { IntVec3 result = new IntVec3(); CellFinder.TryFindRandomCellNear(map.Center, map, 10, c => c.Walkable(map), out result); GenSpawn.Spawn(pawn, result, map); } } MapGenerator.SetVar("RectOfInterest", CellRect.CenteredOn(map.Center, 1, 1)); if (incidentParms.faction == Faction.OfMechanoids) { LordMaker.MakeNewLord(incidentParms.faction, new LordJob_DefendPoint(map.Center, 10, addFleeToil: false), map, list); } else { LordMaker.MakeNewLord(incidentParms.faction, new LordJob_DefendBase(incidentParms.faction, map.Center), map, list); } }
private static void SendCaravan(FCEvent evt) { Map playerHomeMap = Find.World.GetComponent <FactionFC>().TaxMap; if (DoDelayCaravanDueToDanger(evt)) { return; } MakeDeliveryLetterAndMessage(evt); List <Pawn> pawns = new List <Pawn>(); while (evt.goods.Count() > 0) { Pawn pawn = PawnGenerator.GeneratePawn(FCPawnGenerator.WorkerOrMilitaryRequest()); Thing next = evt.goods.First(); if (pawn.carryTracker.innerContainer.TryAdd(next)) { evt.goods.Remove(next); } pawns.Add(pawn); } PawnsArrivalModeWorker_EdgeWalkIn pawnsArrivalModeWorker = new PawnsArrivalModeWorker_EdgeWalkIn(); IncidentParms parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.FactionArrival, playerHomeMap); parms.spawnRotation = Rot4.FromAngleFlat((((Map)parms.target).Center - parms.spawnCenter).AngleFlat); RCellFinder.TryFindRandomPawnEntryCell(out parms.spawnCenter, playerHomeMap, CellFinder.EdgeRoadChance_Friendly); pawnsArrivalModeWorker.Arrive(pawns, parms); LordMaker.MakeNewLord(FCPawnGenerator.WorkerOrMilitaryRequest().Faction, new LordJob_DeliverSupplies(parms.spawnCenter), playerHomeMap, pawns); }
public override bool IsPossible() { worker = new IncidentWorker_CallForAid(); worker.def = IncidentDefOf.RaidFriendly; parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.AllyAssistance, Helper.AnyPlayerMap); IEnumerable <Faction> factionSearch = Find.FactionManager.AllFactions.Where(s => s.def.defName == factionDefName); Faction TaskForce141; if (factionSearch != null && factionSearch.Count() > 0) { TaskForce141 = factionSearch.ElementAt(0); } else { return(false); } if (TaskForce141.PlayerRelationKind == FactionRelationKind.Hostile) { return(false); } parms.faction = TaskForce141; parms.raidArrivalModeForQuickMilitaryAid = true; parms.points = DiplomacyTuning.RequestedMilitaryAidPointsRange.RandomInRange; return(true); }