using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using rjw; using Verse; using RimWorld; namespace RJW_BGS { internal class RJWcopy { //code based on racegroupdefinternal which has a similar function public static RaceGeneDef GetRaceGeneDefInternal(Pawn pawn) { PawnKindDef kindDef = pawn.kindDef; if (kindDef == null) { return null; } string raceName = kindDef.race.defName; string pawnKindName = kindDef.defName; IEnumerable allDefs = DefDatabase.AllDefs; PawnData pawnData = SaveStorage.DataStore.GetPawnData(pawn); RaceGroupDef raceGroupDef = pawnData.RaceSupportDef; List pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group) { List pawnKindNames = group.pawnKindNames; return pawnKindNames != null && pawnKindNames.Contains(pawnKindName); }).ToList(); List raceKindDefs = allDefs.Where(delegate (RaceGeneDef group) { List raceNames = group.raceNames; return raceNames != null && raceNames.Contains(raceName); }).ToList(); List raceGroupDefs = new List(); if (raceGroupDef != null) { raceGroupDefs = allDefs.Where(delegate (RaceGeneDef group) { String raceGroupDefName = group.raceGroup; return raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName; }).ToList(); } RaceGeneDef result = null; //First check if there is a matching pawnkinddef then race, then racegroup if (pawnKindDefs.Any()) { result = pawnKindDefs.RandomElement(); } else if (raceKindDefs.Any() && result == null) { result = raceKindDefs.RandomElement(); } else if (raceGroupDefs.Any() && result == null) { result = raceGroupDefs.RandomElement(); } else { result = null; } return result; } } }