public static void CanUse_XenoQueen_Postfix(RaidStrategyWorker __instance, ref Pawn p, List <Pawn> otherPawns, ref bool __result) { if (p.def == XenomorphRacesDefOf.RRY_Xenomorph_Queen) { if (otherPawns.Any(x => x.def == XenomorphRacesDefOf.RRY_Xenomorph_Queen)) { p.def = XenomorphRacesDefOf.RRY_Xenomorph_Warrior; p.kindDef = XenomorphDefOf.RRY_Xenomorph_Warrior; } } }
public static void Postfix(RaidStrategyWorker __instance, PawnGenOption g, List <PawnGenOption> chosenGroups, ref bool __result) { if (g.kind.factionLeader) { if (chosenGroups.Any(x => x.kind.factionLeader && x.kind == g.kind)) { __result = false; // Log.Warning(string.Format("Excess {0} detected: there are {1} already in the raid, Disallowing", g.kind.LabelCap, chosenGroups.Where(x => x.kind == g.kind).Count())); return; } } }
public static void CanUse_factionLeader_Postfix(RaidStrategyWorker __instance, Pawn p, List <Pawn> otherPawns, ref bool __result) { if (p.kindDef.factionLeader) { if (otherPawns.Any(x => x.kindDef.factionLeader)) { __result = false; Log.Warning(string.Format("Excess {0} detected: there are {1} already in the raid, Disallowing", p.LabelShortCap, otherPawns.Where(x => x.def == p.def).Count())); return; } } }
static bool Prefix(ref RaidStrategyWorker __instance, ref List <Pawn> __result, IncidentParms parms) { if (parms.faction == FactionColonies.getPlayerColonyFaction()) { List <PawnKindDef> list2 = new List <PawnKindDef>(); foreach (ThingDef def in Find.World.GetComponent <FactionFC>().raceFilter.AllowedThingDefs) { list2.Add(def.race.AnyPawnKind); } if (parms.pawnKind != null) { List <Pawn> list = new List <Pawn>(); for (int i = 0; i < parms.pawnCount; i++) { PawnKindDef pawnKind = parms.pawnKind; Faction faction = parms.faction; PawnGenerationContext context = PawnGenerationContext.NonPlayer; int tile = -1; bool forceGenerateNewPawn = false; bool newborn = false; bool allowDead = false; bool allowDowned = false; bool canGeneratePawnRelations = true; bool mustBeCapableOfViolence = true; float colonistRelationChanceFactor = 1f; bool forceAddFreeWarmLayerIfNeeded = false; bool allowGay = true; float biocodeWeaponsChance = parms.biocodeWeaponsChance; PawnKindDef pawnkind = new PawnKindDef(); pawnkind = list2.RandomElement(); pawnkind.techHediffsTags = parms.pawnKind.techHediffsTags; pawnkind.apparelTags = parms.pawnKind.apparelTags; pawnkind.isFighter = parms.pawnKind.isFighter; pawnkind.combatPower = parms.pawnKind.combatPower; pawnkind.gearHealthRange = parms.pawnKind.gearHealthRange; pawnkind.weaponTags = parms.pawnKind.weaponTags; pawnkind.apparelMoney = parms.pawnKind.apparelMoney; pawnkind.weaponMoney = parms.pawnKind.weaponMoney; pawnkind.apparelAllowHeadgearChance = parms.pawnKind.apparelAllowHeadgearChance; pawnkind.techHediffsMoney = parms.pawnKind.techHediffsMoney; pawnkind.label = parms.pawnKind.label; Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(pawnkind, faction, context, tile, forceGenerateNewPawn, newborn, allowDead, allowDowned, canGeneratePawnRelations, mustBeCapableOfViolence, colonistRelationChanceFactor, forceAddFreeWarmLayerIfNeeded, allowGay, __instance.def.pawnsCanBringFood, true, false, false, false, false, biocodeWeaponsChance, null, 1f, null, null, null, null, null, null, null, null, null, null, null, null) { BiocodeApparelChance = 1f }); if (pawn != null) { list.Add(pawn); } } if (list.Any <Pawn>()) { parms.raidArrivalMode.Worker.Arrive(list, parms); __result = list; return(false); } } __result = null; return(false); } else { return(true); } }