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 string DebugString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Start steal threshold: " + StealAIUtility.StartStealingMarketValueThreshold(this).ToString("F0")); stringBuilder.AppendLine("Duties:"); foreach (Pawn current in this.ownedPawns) { stringBuilder.AppendLine(string.Concat(new object[] { " ", current.LabelCap, " - ", current.mindState.duty })); } if (this.faction != null) { stringBuilder.AppendLine("Faction data:"); stringBuilder.AppendLine(this.faction.DebugString()); } stringBuilder.AppendLine("Raw save data:"); stringBuilder.AppendLine(Scribe.saver.DebugOutputFor(this)); return(stringBuilder.ToString()); }
static bool Prefix(ref Trigger_HighValueThingsAround __instance, ref bool __result, ref Lord lord, ref TriggerSignal signal) { __result = signal.type == TriggerSignalType.Tick && Find.TickManager.TicksGame % 120 < RefcellRespeedConfig.currentTimeMultiplier && (!TutorSystem.TutorialMode && Find.TickManager.TicksGame - lord.lastPawnHarmTick > 300) && (double)StealAIUtility.TotalMarketValueAround(lord.ownedPawns) > (double)StealAIUtility.StartStealingMarketValueThreshold(lord); return(false); }
protected override bool TryFindGoodOpportunisticTaskTarget(Pawn pawn, out Thing target, List <Thing> alreadyTakenTargets) { if (pawn.mindState.duty != null && pawn.mindState.duty.def == DutyDef && pawn.carryTracker.CarriedThing != null) { target = pawn.carryTracker.CarriedThing; return(true); } return(StealAIUtility.TryFindBestItemToSteal(pawn.Position, pawn.Map, 33f, out target, pawn, alreadyTakenTargets)); }
public string DebugString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Start steal threshold: " + StealAIUtility.StartStealingMarketValueThreshold(this).ToString("F0")); stringBuilder.AppendLine("Duties:"); foreach (Pawn ownedPawn in ownedPawns) { stringBuilder.AppendLine(" " + ownedPawn.LabelCap + " - " + ownedPawn.mindState.duty); } stringBuilder.AppendLine("Raw save data:"); stringBuilder.AppendLine(Scribe.saver.DebugOutputFor(this)); return(stringBuilder.ToString()); }
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.numPawnsLostViolently = int.MaxValue; 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 + ")"); } } }
protected override Job TryGiveJob(Pawn pawn) { IntVec3 vec; if (!RCellFinder.TryFindBestExitSpot(pawn, out vec)) { return(null); } List <Thing> steelVehicle = new List <Thing>(); foreach (Vehicle_Turret vehicle_Cart in ToolsForHaulUtility.CartTurret) { if (ToolsForHaulUtility.IsDriver(pawn)) { break; } if (pawn.RaceProps.Animal || !pawn.RaceProps.Humanlike || !pawn.RaceProps.hasGenders) { break; } if (!vehicle_Cart.IsBurning() && vehicle_Cart.Position.InHorDistOf(pawn.Position, 12f) && !vehicle_Cart.mountableComp.IsMounted && (float)vehicle_Cart.HitPoints / vehicle_Cart.MaxHitPoints > 0.2f && vehicle_Cart.VehicleSpeed >= pawn.GetStatValue(StatDefOf.MoveSpeed) && pawn.CanReserveAndReach(vehicle_Cart, PathEndMode.InteractionCell, Danger.Deadly)) { steelVehicle.Add(vehicle_Cart); } } foreach (Vehicle_Cart vehicle_Cart in ToolsForHaulUtility.Cart) { if (ToolsForHaulUtility.IsDriver(pawn)) { break; } if (pawn.RaceProps.Animal || !pawn.RaceProps.Humanlike || !pawn.RaceProps.hasGenders) { break; } if (!vehicle_Cart.IsBurning() && vehicle_Cart.Position.InHorDistOf(pawn.Position, 12f) && !vehicle_Cart.mountableComp.IsMounted && (float)vehicle_Cart.HitPoints / vehicle_Cart.MaxHitPoints > 0.2f && vehicle_Cart.VehicleSpeed >= pawn.GetStatValue(StatDefOf.MoveSpeed) && pawn.CanReserveAndReach(vehicle_Cart, PathEndMode.InteractionCell, Danger.Deadly)) { steelVehicle.Add(vehicle_Cart); } } if (steelVehicle.Any() && !GenAI.InDangerousCombat(pawn)) { IOrderedEnumerable <Thing> orderedEnumerable = steelVehicle.OrderBy(x => x.Position.DistanceToSquared(pawn.Position)); Job job = new Job(HaulJobDefOf.Mount); orderedEnumerable.First().SetFaction(null); job.targetA = orderedEnumerable.First(); return(job); } Thing thing; if (StealAIUtility.TryFindBestItemToSteal(pawn.Position, 12f, out thing, pawn) && !GenAI.InDangerousCombat(pawn)) { return(new Job(JobDefOf.Steal) { targetA = thing, targetB = vec, maxNumToCarry = Mathf.Min(thing.stackCount, (int)(pawn.GetStatValue(StatDefOf.CarryingCapacity) / thing.def.VolumePerUnit)) }); } return(null); }
public override bool TryExecute(IncidentParms parms) { ResolveRaidPoints(parms); if (!TryResolveRaidFaction(parms)) { return(false); } ResolveRaidStrategy(parms); ResolveRaidArriveMode(parms); ResolveRaidSpawnCenter(parms); PawnGroupMakerUtility.AdjustPointsForGroupArrivalParams(parms); List <Pawn> list = PawnGroupMakerUtility.GenerateArrivingPawns(parms).ToList(); if (list.Count == 0) { Log.Error("Got no pawns spawning raid from parms " + parms); return(false); } TargetInfo letterLookTarget = TargetInfo.Invalid; if (parms.raidArrivalMode == PawnsArriveMode.CenterDrop || parms.raidArrivalMode == PawnsArriveMode.EdgeDrop) { DropPodUtility.DropThingsNear(parms.spawnCenter, list.Cast <Thing>(), parms.raidPodOpenDelay, true, true); letterLookTarget = parms.spawnCenter; } else { foreach (Pawn current in list) { float value = Rand.Value; IntVec3 intVec = CellFinder.RandomClosewalkCellNear(parms.spawnCenter, 8); GenSpawn.Spawn(current, intVec); letterLookTarget = current; if (parms.faction.def.techLevel >= TechLevel.Industrial && value >= 0.5f && current.RaceProps.fleshType != FleshType.Mechanoid) { CellFinder.RandomClosewalkCellNear(current.Position, 5); Thing thing = ThingMaker.MakeThing(ThingDef.Named("VehicleATV")); thing.SetFaction(parms.faction); GenSpawn.Spawn(thing, current.Position); Job job = new Job(HaulJobDefOf.Mount); Find.Reservations.ReleaseAllForTarget(thing); job.targetA = thing; current.jobs.StartJob(job, JobCondition.InterruptForced); } } } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Points = " + parms.points.ToString("F0")); foreach (Pawn current2 in list) { string str = (current2.equipment == null || current2.equipment.Primary == null) ? "unarmed" : current2.equipment.Primary.LabelCap; stringBuilder.AppendLine(current2.KindLabel + " - " + str); } Find.LetterStack.ReceiveLetter(this.GetLetterLabel(parms), this.GetLetterText(parms, list), this.GetLetterType(), letterLookTarget, stringBuilder.ToString()); if (this.GetLetterType() == LetterType.BadUrgent) { TaleRecorder.RecordTale(TaleDefOf.RaidArrived, new object[0]); } PawnRelationUtility.Notify_PawnsSeenByPlayer(list, GetRelatedPawnsInfoLetterText(parms), true); Lord lord = LordMaker.MakeNewLord(parms.faction, parms.raidStrategy.Worker.MakeLordJob(ref parms), list); AvoidGridMaker.RegenerateAvoidGridsFor(parms.faction); LessonAutoActivator.TeachOpportunity(ConceptDefOf.EquippingWeapons, OpportunityType.Critical); if (!PlayerKnowledgeDatabase.IsComplete(ConceptDefOf.PersonalShields)) { for (int i = 0; i < list.Count; i++) { Pawn pawn = list[i]; if (pawn.apparel.WornApparel.Any((Apparel ap) => ap is PersonalShield)) { LessonAutoActivator.TeachOpportunity(ConceptDefOf.PersonalShields, OpportunityType.Critical); break; } } } if (DebugViewSettings.drawStealDebug && parms.faction.HostileTo(Faction.OfPlayer)) { Log.Message(string.Concat(new object[] { "Market value threshold to start stealing: ", StealAIUtility.StartStealingMarketValueThreshold(lord), " (colony wealth = ", Find.StoryWatcher.watcherWealth.WealthTotal, ")" })); } return(true); }
public override bool TryExecute(IncidentParms parms) { Map map = (Map)parms.target; this.ResolveRaidPoints(parms); if (!this.TryResolveRaidFaction(parms)) { return(false); } this.ResolveRaidStrategy(parms); this.ResolveRaidArriveMode(parms); this.ResolveRaidSpawnCenter(parms); IncidentParmsUtility.AdjustPointsForGroupArrivalParams(parms); PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(parms); List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(PawnGroupKindDefOf.Normal, defaultPawnGroupMakerParms, true).ToList <Pawn>(); if (list.Count == 0) { Log.Error("Got no pawns spawning raid from parms " + parms); return(false); } TargetInfo target = TargetInfo.Invalid; List <ShipBase> ships = DropShipUtility.CreateDropShips(list, parms.faction); DropShipUtility.DropShipGroups(parms.spawnCenter, map, ships, TravelingShipArrivalAction.EnterMapAssault); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Points = " + parms.points.ToString("F0")); foreach (Pawn current2 in list) { string str = (current2.equipment == null || current2.equipment.Primary == null) ? "unarmed" : current2.equipment.Primary.LabelCap; stringBuilder.AppendLine(current2.KindLabel + " - " + str); } string letterLabel = this.GetLetterLabel(parms); string letterText = this.GetLetterText(parms, list); PawnRelationUtility.Notify_PawnsSeenByPlayer(list, ref letterLabel, ref letterText, this.GetRelatedPawnsInfoLetterText(parms), true); Find.LetterStack.ReceiveLetter(letterLabel, letterText, this.GetLetterType(), target, stringBuilder.ToString()); if (this.GetLetterType() == LetterType.BadUrgent) { TaleRecorder.RecordTale(TaleDefOf.RaidArrived, new object[0]); } this.ResolveRaidParmOptions(parms); Lord lord = LordMaker.MakeNewLord(parms.faction, new LordJob_AerialAssault(ships, parms.faction, this.Kidnappers(parms.faction), true, this.UseSappers, this.SmartGrid, this.Stealers(parms.faction)), map, list); AvoidGridMaker.RegenerateAvoidGridsFor(parms.faction, map); LessonAutoActivator.TeachOpportunity(ConceptDefOf.EquippingWeapons, OpportunityType.Critical); if (!PlayerKnowledgeDatabase.IsComplete(ConceptDefOf.PersonalShields)) { for (int i = 0; i < list.Count; i++) { Pawn pawn = list[i]; if (pawn.apparel.WornApparel.Any((Apparel ap) => ap is PersonalShield)) { LessonAutoActivator.TeachOpportunity(ConceptDefOf.PersonalShields, OpportunityType.Critical); break; } } } if (DebugViewSettings.drawStealDebug && parms.faction.HostileTo(Faction.OfPlayer)) { Log.Message(string.Concat(new object[] { "Market value threshold to start stealing: ", StealAIUtility.StartStealingMarketValueThreshold(lord), " (colony wealth = ", map.wealthWatcher.WealthTotal, ")" })); } return(true); }
public void MakeLords(IncidentParms parms, List <Pawn> pawns) { Map map = (Map)parms.target; List <List <Pawn> > list = IncidentParmsUtility.SplitIntoGroups(pawns, parms.pawnGroups); for (int i = 0; i < list.Count; i++) { List <Pawn> list2 = list[i]; Lord lord = LordMaker.MakeNewLord(parms.faction, new LordJob_AssaultColonyWendigo(parms.faction), 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 + ")"); } } }
public override bool TryExecute(IncidentParms parms) { { this.ResolveRaidPoints(parms); if (!this.TryResolveRaidFaction(parms)) { return(false); } this.ResolveRaidStrategy(parms); this.ResolveRaidArriveMode(parms); this.ResolveRaidSpawnCenter(parms); PawnGroupMakerUtility.AdjustPointsForGroupArrivalParams(parms); List <Pawn> list = PawnGroupMakerUtility.GenerateArrivingPawns(parms, true).ToList <Pawn>(); if (list.Count == 0) { Log.Error("Got no pawns spawning raid from parms " + parms); return(false); } TargetInfo letterLookTarget = TargetInfo.Invalid; Deepstriker_Utilities.UnloadThingsNear(parms.faction, parms.spawnCenter, list.Cast <Thing>(), parms.raidPodOpenDelay, false, true, true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Points = " + parms.points.ToString("F0")); foreach (Pawn current2 in list) { string str = (current2.equipment == null || current2.equipment.Primary == null) ? "unarmed" : current2.equipment.Primary.LabelCap; stringBuilder.AppendLine(current2.KindLabel + " - " + str); } Find.LetterStack.ReceiveLetter(this.GetLetterLabel(parms), this.GetLetterText(parms, list), this.GetLetterType(), letterLookTarget, stringBuilder.ToString()); if (this.GetLetterType() == LetterType.BadUrgent) { TaleRecorder.RecordTale(TaleDefOf.RaidArrived, new object[0]); } PawnRelationUtility.Notify_PawnsSeenByPlayer(list, this.GetRelatedPawnsInfoLetterText(parms), true); Lord lord = LordMaker.MakeNewLord(parms.faction, parms.raidStrategy.Worker.MakeLordJob(ref parms), list); AvoidGridMaker.RegenerateAvoidGridsFor(parms.faction); LessonAutoActivator.TeachOpportunity(ConceptDefOf.EquippingWeapons, OpportunityType.Critical); if (!PlayerKnowledgeDatabase.IsComplete(ConceptDefOf.PersonalShields)) { for (int i = 0; i < list.Count; i++) { Pawn pawn = list[i]; if (pawn.apparel.WornApparel.Any((Apparel ap) => ap is PersonalShield)) { LessonAutoActivator.TeachOpportunity(ConceptDefOf.PersonalShields, OpportunityType.Critical); break; } } } if (DebugViewSettings.drawStealDebug && parms.faction.HostileTo(Faction.OfPlayer)) { Log.Message(string.Concat(new object[] { "Market value threshold to start stealing: ", StealAIUtility.StartStealingMarketValueThreshold(lord), " (colony wealth = ", Find.StoryWatcher.watcherWealth.WealthTotal, ")" })); } return(true); } }
public override bool TryExecute(IncidentParms parms) { // if (!base.TryExecute(parms)) { ResolveRaidPoints(parms); if (!TryResolveRaidFaction(parms)) { return(false); } ResolveRaidStrategy(parms); ResolveRaidArriveMode(parms); ResolveRaidSpawnCenter(parms); PawnGroupMakerUtility.AdjustPointsForGroupArrivalParams(parms); List <Pawn> list = PawnGroupMakerUtility.GenerateArrivingPawns(parms).ToList(); if (list.Count == 0) { Log.Error("Got no pawns spawning raid from parms " + parms); return(false); } TargetInfo letterLookTarget = TargetInfo.Invalid; if (parms.raidArrivalMode == PawnsArriveMode.CenterDrop || parms.raidArrivalMode == PawnsArriveMode.EdgeDrop) { DropPodUtility.DropThingsNear(parms.spawnCenter, list.Cast <Thing>(), parms.raidPodOpenDelay, true, true); letterLookTarget = parms.spawnCenter; } else { foreach (Pawn current in list) { float value = Rand.Value; IntVec3 intVec = CellFinder.RandomClosewalkCellNear(parms.spawnCenter, 8); GenSpawn.Spawn(current, intVec); letterLookTarget = current; // Vehicles for raiders // lowered probability for shield users as they are overpowered bool isShieldUser = false; if (parms.faction.def.techLevel >= TechLevel.Industrial && current.RaceProps.fleshType != FleshType.Mechanoid && current.RaceProps.ToolUser) { List <Apparel> wornApparel = current.apparel.WornApparel; for (int i = 0; i < wornApparel.Count; i++) { if (wornApparel[i] is PersonalShield) { isShieldUser = true; break; } } if (value >= 0.66f && !isShieldUser || isShieldUser && value > 0.9f) { CellFinder.RandomClosewalkCellNear(current.Position, 5); Thing thing = ThingMaker.MakeThing(ThingDef.Named("VehicleATV")); if (value >= 0.9f && !isShieldUser) { thing = ThingMaker.MakeThing(ThingDef.Named("VehicleCombatATV")); } GenSpawn.Spawn(thing, current.Position); Job job = new Job(HaulJobDefOf.Mount); Find.Reservations.ReleaseAllForTarget(thing); job.targetA = thing; current.jobs.StartJob(job, JobCondition.InterruptForced, null, true); int num2 = Mathf.FloorToInt(Rand.Value * 0.2f * thing.MaxHitPoints); thing.TakeDamage(new DamageInfo(DamageDefOf.Deterioration, num2, null, null)); SoundInfo info = SoundInfo.InWorld(thing); thing.TryGetComp <CompMountable>().sustainerAmbient = thing.TryGetComp <CompVehicle>().compProps.soundAmbient.TrySpawnSustainer(info); } } } } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Points = " + parms.points.ToString("F0")); foreach (Pawn current2 in list) { string str = (current2.equipment == null || current2.equipment.Primary == null) ? "unarmed" : current2.equipment.Primary.LabelCap; stringBuilder.AppendLine(current2.KindLabel + " - " + str); } Find.LetterStack.ReceiveLetter(GetLetterLabel(parms), GetLetterText(parms, list), GetLetterType(), letterLookTarget, stringBuilder.ToString()); if (GetLetterType() == LetterType.BadUrgent) { TaleRecorder.RecordTale(TaleDefOf.RaidArrived); } PawnRelationUtility.Notify_PawnsSeenByPlayer(list, GetRelatedPawnsInfoLetterText(parms), true); Lord lord = LordMaker.MakeNewLord(parms.faction, parms.raidStrategy.Worker.MakeLordJob(ref parms), list); AvoidGridMaker.RegenerateAvoidGridsFor(parms.faction); LessonAutoActivator.TeachOpportunity(ConceptDefOf.EquippingWeapons, OpportunityType.Critical); if (!PlayerKnowledgeDatabase.IsComplete(ConceptDefOf.PersonalShields)) { for (int i = 0; i < list.Count; i++) { Pawn pawn = list[i]; if (pawn.apparel.WornApparel.Any(ap => ap is PersonalShield)) { LessonAutoActivator.TeachOpportunity(ConceptDefOf.PersonalShields, OpportunityType.Critical); break; } } } if (DebugViewSettings.drawStealDebug && parms.faction.HostileTo(Faction.OfPlayer)) { Log.Message(string.Concat("Market value threshold to start stealing: ", StealAIUtility.StartStealingMarketValueThreshold(lord), " (colony wealth = ", Find.StoryWatcher.watcherWealth.WealthTotal, ")")); } } Find.TickManager.slower.SignalForceNormalSpeedShort(); Find.StoryWatcher.statsRecord.numRaidsEnemy++; return(true); }
protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; Cthulhu.Utility.DebugReport("Cosmic Horror Raid Report: Trying execution"); this.ResolveRaidPoints(parms); if (!this.TryResolveRaidFaction(parms)) { Cthulhu.Utility.DebugReport("Cosmic Horror Raid Report: Failed to resolve faction"); return(false); } this.ResolveRaidStrategy(parms); this.ResolveRaidArriveMode(parms); this.ResolveRaidSpawnCenter(parms); IncidentParmsUtility.AdjustPointsForGroupArrivalParams(parms); PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(parms); List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(PawnGroupKindDefOf.Normal, defaultPawnGroupMakerParms).ToList <Pawn>(); if (list.Count == 0) { Cthulhu.Utility.ErrorReport("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); target = new TargetInfo(parms.spawnCenter, map); } else { foreach (Pawn arg_B3_0 in list) { IntVec3 intVec = CellFinder.RandomClosewalkCellNear(parms.spawnCenter, map, 8); GenSpawn.Spawn(arg_B3_0, intVec, map); target = arg_B3_0; } } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("Points = " + parms.points.ToString("F0")); foreach (Pawn current2 in list) { string str = (current2.equipment == null || current2.equipment.Primary == null) ? "unarmed" : current2.equipment.Primary.LabelCap; stringBuilder.AppendLine(current2.KindLabel + " - " + str); } string letterLabel = this.GetLetterLabel(parms); string letterText = this.GetLetterText(parms, list); string lalalal = this.GetRelatedPawnsInfoLetterText(parms); PawnRelationUtility.Notify_PawnsSeenByPlayer(list, out lalalal, true); Find.LetterStack.ReceiveLetter(letterLabel, letterText, this.GetLetterDef(), target, stringBuilder.ToString()); if (this.GetLetterDef() == LetterDefOf.ThreatSmall) { TaleRecorder.RecordTale(TaleDefOf.RaidArrived, new object[0]); } 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.PersonalShields)) //{ // for (int i = 0; i < list.Count; i++) // { // Pawn pawn = list[i]; // if (pawn.apparel.WornApparel.Any((Apparel ap) => ap is PersonalShield)) // { // LessonAutoActivator.TeachOpportunity(ConceptDefOf.PersonalShields, OpportunityType.Critical); // break; // } // } //} if (DebugViewSettings.drawStealDebug && parms.faction.HostileTo(Faction.OfPlayer)) { Log.Message(string.Concat(new object[] { "Market value threshold to start stealing: ", StealAIUtility.StartStealingMarketValueThreshold(lord), " (colony wealth = ", map.wealthWatcher.WealthTotal, ")" })); } return(true); }