public virtual void MakeLords(IncidentParms parms, List <Pawn> pawns) { Map map = (Map)parms.target; List <List <Pawn> > list = IncidentParmsUtility.SplitIntoGroups(pawns, parms.pawnGroups); int @int = Rand.Int; for (int i = 0; i < list.Count; i++) { List <Pawn> list2 = list[i]; Lord lord = LordMaker.MakeNewLord(parms.faction, this.MakeLordJob(parms, map, list2, @int), map, list2); if (DebugViewSettings.drawStealDebug && parms.faction.HostileTo(Faction.OfPlayer)) { Log.Message(string.Concat(new object[] { "Market value threshold to start stealing (raiders=", lord.ownedPawns.Count, "): ", StealAIUtility.StartStealingMarketValueThreshold(lord), " (colony wealth=", map.wealthWatcher.WealthTotal, ")" }), false); } } }
public static void Notify_ThingChanged(Thing thing) { if (debugDrawLord == null) { return; } CheckInitDebugDrawGrid(); if (thing.def.category != ThingCategory.Building && thing.def.category != ThingCategory.Item && thing.def.passability != Traversability.Impassable) { return; } if (thing.def.passability == Traversability.Impassable) { debugDrawLord = null; return; } int num = GenRadial.NumCellsInRadius(8f); float num2 = StealAIUtility.StartStealingMarketValueThreshold(debugDrawLord); for (int i = 0; i < num; i++) { IntVec3 intVec = thing.Position + GenRadial.RadialPattern[i]; if (intVec.InBounds(thing.Map)) { debugDrawGrid[intVec] = TotalMarketValueAround(intVec, Find.CurrentMap, debugDrawLord.ownedPawns.Count) > num2; } } }
public override bool ActivateOn(Lord lord, TriggerSignal signal) { if (signal.type == TriggerSignalType.Tick && Find.TickManager.TicksGame % 120 == 0) { if (TutorSystem.TutorialMode) { return(false); } if (Find.TickManager.TicksGame - lord.lastPawnHarmTick > 300) { float num = StealAIUtility.TotalMarketValueAround(lord.ownedPawns); float num2 = StealAIUtility.StartStealingMarketValueThreshold(lord); return(num > num2); } } return(false); }
public static void DebugDraw() { if (!DebugViewSettings.drawStealDebug) { StealAIDebugDrawer.debugDrawLord = null; return; } Lord lord = StealAIDebugDrawer.debugDrawLord; StealAIDebugDrawer.debugDrawLord = StealAIDebugDrawer.FindHostileLord(); if (StealAIDebugDrawer.debugDrawLord == null) { return; } StealAIDebugDrawer.CheckInitDebugDrawGrid(); float num = StealAIUtility.StartStealingMarketValueThreshold(StealAIDebugDrawer.debugDrawLord); if (lord != StealAIDebugDrawer.debugDrawLord) { foreach (IntVec3 intVec in Find.CurrentMap.AllCells) { StealAIDebugDrawer.debugDrawGrid[intVec] = (StealAIDebugDrawer.TotalMarketValueAround(intVec, Find.CurrentMap, StealAIDebugDrawer.debugDrawLord.ownedPawns.Count) > num); } } foreach (IntVec3 c in Find.CurrentMap.AllCells) { if (StealAIDebugDrawer.debugDrawGrid[c]) { CellRenderer.RenderCell(c, 0.5f); } } StealAIDebugDrawer.tmpToSteal.Clear(); for (int i = 0; i < StealAIDebugDrawer.debugDrawLord.ownedPawns.Count; i++) { Pawn pawn = StealAIDebugDrawer.debugDrawLord.ownedPawns[i]; Thing thing; if (StealAIUtility.TryFindBestItemToSteal(pawn.Position, pawn.Map, 7f, out thing, pawn, StealAIDebugDrawer.tmpToSteal)) { GenDraw.DrawLineBetween(pawn.TrueCenter(), thing.TrueCenter()); StealAIDebugDrawer.tmpToSteal.Add(thing); } } StealAIDebugDrawer.tmpToSteal.Clear(); }
public static void DebugDraw() { if (!DebugViewSettings.drawStealDebug) { debugDrawLord = null; return; } Lord lord = debugDrawLord; debugDrawLord = FindHostileLord(); if (debugDrawLord == null) { return; } CheckInitDebugDrawGrid(); float num = StealAIUtility.StartStealingMarketValueThreshold(debugDrawLord); if (lord != debugDrawLord) { foreach (IntVec3 allCell in Find.CurrentMap.AllCells) { debugDrawGrid[allCell] = TotalMarketValueAround(allCell, Find.CurrentMap, debugDrawLord.ownedPawns.Count) > num; } } foreach (IntVec3 allCell2 in Find.CurrentMap.AllCells) { if (debugDrawGrid[allCell2]) { CellRenderer.RenderCell(allCell2); } } tmpToSteal.Clear(); for (int i = 0; i < debugDrawLord.ownedPawns.Count; i++) { Pawn pawn = debugDrawLord.ownedPawns[i]; if (StealAIUtility.TryFindBestItemToSteal(pawn.Position, pawn.Map, 7f, out var item, pawn, tmpToSteal)) { GenDraw.DrawLineBetween(pawn.TrueCenter(), item.TrueCenter()); tmpToSteal.Add(item); } } tmpToSteal.Clear(); }
protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; this.ResolveRaidPoints(parms); if (!this.TryResolveRaidFaction(parms)) { return(false); } this.ResolveRaidStrategy(parms); this.ResolveRaidArriveMode(parms); if (!this.ResolveRaidSpawnCenter(parms)) { return(false); } IncidentParmsUtility.AdjustPointsForGroupArrivalParams(parms); PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(parms, false); List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(PawnGroupKindDefOf.Normal, defaultPawnGroupMakerParms, true).ToList(); if (list.Count == 0) { Log.Error("Got no pawns spawning raid from parms " + parms); return(false); } TargetInfo target = TargetInfo.Invalid; if (parms.raidArrivalMode == PawnsArriveMode.CenterDrop || parms.raidArrivalMode == PawnsArriveMode.EdgeDrop) { DropPodUtility.DropThingsNear(parms.spawnCenter, map, list.Cast <Thing>(), parms.raidPodOpenDelay, false, true, true, false); target = new TargetInfo(parms.spawnCenter, map, false); } else { foreach (Pawn item in list) { IntVec3 loc = CellFinder.RandomClosewalkCellNear(parms.spawnCenter, map, 8, null); GenSpawn.Spawn(item, loc, map, parms.spawnRotation, false); target = item; } } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Points = " + parms.points.ToString("F0")); foreach (Pawn item2 in list) { string str = (item2.equipment == null || item2.equipment.Primary == null) ? "unarmed" : item2.equipment.Primary.LabelCap; stringBuilder.AppendLine(item2.KindLabel + " - " + str); } string letterLabel = this.GetLetterLabel(parms); string letterText = this.GetLetterText(parms, list); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(list, ref letterLabel, ref letterText, this.GetRelatedPawnsInfoLetterText(parms), true, true); Find.LetterStack.ReceiveLetter(letterLabel, letterText, this.GetLetterDef(), target, stringBuilder.ToString()); if (this.GetLetterDef() == LetterDefOf.ThreatBig) { TaleRecorder.RecordTale(TaleDefOf.RaidArrived); } Lord lord = LordMaker.MakeNewLord(parms.faction, parms.raidStrategy.Worker.MakeLordJob(parms, map), map, list); AvoidGridMaker.RegenerateAvoidGridsFor(parms.faction, map); LessonAutoActivator.TeachOpportunity(ConceptDefOf.EquippingWeapons, OpportunityType.Critical); if (!PlayerKnowledgeDatabase.IsComplete(ConceptDefOf.ShieldBelts)) { for (int i = 0; i < list.Count; i++) { Pawn pawn = list[i]; if (pawn.apparel.WornApparel.Any((Apparel ap) => ap is ShieldBelt)) { LessonAutoActivator.TeachOpportunity(ConceptDefOf.ShieldBelts, OpportunityType.Critical); break; } } } if (DebugViewSettings.drawStealDebug && parms.faction.HostileTo(Faction.OfPlayer)) { Log.Message("Market value threshold to start stealing: " + StealAIUtility.StartStealingMarketValueThreshold(lord) + " (colony wealth = " + map.wealthWatcher.WealthTotal + ")"); } return(true); }
public virtual void MakeLords(IncidentParms parms, List <Pawn> pawns) { Map map = (Map)parms.target; List <List <Pawn> > list = IncidentParmsUtility.SplitIntoGroups(pawns, parms.pawnGroups); int @int = Rand.Int; for (int i = 0; i < list.Count; i++) { List <Pawn> list2 = list[i]; Lord lord = LordMaker.MakeNewLord(parms.faction, MakeLordJob(parms, map, list2, @int), map, list2); lord.inSignalLeave = parms.inSignalEnd; QuestUtility.AddQuestTag(lord, parms.questTag); if (DebugViewSettings.drawStealDebug && parms.faction.HostileTo(Faction.OfPlayer)) { Log.Message("Market value threshold to start stealing (raiders=" + lord.ownedPawns.Count + "): " + StealAIUtility.StartStealingMarketValueThreshold(lord) + " (colony wealth=" + map.wealthWatcher.WealthTotal + ")"); } } }