public static void RecipeSkills() { IEnumerable <RecipeDef> arg_DD_0 = DefDatabase <RecipeDef> .AllDefs; TableDataGetter <RecipeDef>[] expr_0B = new TableDataGetter <RecipeDef> [5]; expr_0B[0] = new TableDataGetter <RecipeDef>("defName", (RecipeDef d) => d.defName); expr_0B[1] = new TableDataGetter <RecipeDef>("workSkill", (RecipeDef d) => (d.workSkill != null) ? d.workSkill.defName : string.Empty); expr_0B[2] = new TableDataGetter <RecipeDef>("workSpeedStat", (RecipeDef d) => (d.workSpeedStat != null) ? d.workSpeedStat.defName : string.Empty); expr_0B[3] = new TableDataGetter <RecipeDef>("workSpeedStat's skillNeedFactors", delegate(RecipeDef d) { string arg_67_0; if (d.workSpeedStat == null) { arg_67_0 = string.Empty; } else if (d.workSpeedStat.skillNeedFactors.NullOrEmpty <SkillNeed>()) { arg_67_0 = string.Empty; } else { arg_67_0 = (from fac in d.workSpeedStat.skillNeedFactors select fac.skill.defName).ToCommaList(false); } return(arg_67_0); }); expr_0B[4] = new TableDataGetter <RecipeDef>("workSkillLearnFactor", (RecipeDef d) => d.workSkillLearnFactor); DebugTables.MakeTablesDialog <RecipeDef>(arg_DD_0, expr_0B); }
public static void AnimalBreeding() { IEnumerable <ThingDef> arg_14B_0 = (from d in DefDatabase <ThingDef> .AllDefs where d.category == ThingCategory.Pawn && d.race.IsFlesh select d).OrderByDescending(new Func <ThingDef, float>(DebugOutputsEconomy.GestationDaysEach)); TableDataGetter <ThingDef>[] expr_4F = new TableDataGetter <ThingDef> [6]; expr_4F[0] = new TableDataGetter <ThingDef>(string.Empty, (ThingDef d) => d.defName); expr_4F[1] = new TableDataGetter <ThingDef>("gestDaysEach", (ThingDef d) => DebugOutputsEconomy.GestationDaysEach(d).ToString("F2")); expr_4F[2] = new TableDataGetter <ThingDef>("avgOffspring", (ThingDef d) => (!d.HasComp(typeof(CompEggLayer))) ? ((d.race.litterSizeCurve == null) ? 1f : Rand.ByCurveAverage(d.race.litterSizeCurve)).ToString("F2") : d.GetCompProperties <CompProperties_EggLayer>().eggCountRange.Average.ToString("F2")); expr_4F[3] = new TableDataGetter <ThingDef>("gestDaysRaw", (ThingDef d) => (!d.HasComp(typeof(CompEggLayer))) ? d.race.gestationPeriodDays.ToString("F1") : d.GetCompProperties <CompProperties_EggLayer>().eggLayIntervalDays.ToString("F1")); expr_4F[4] = new TableDataGetter <ThingDef>("growth per 30d", delegate(ThingDef d) { float f = 1f + ((!d.HasComp(typeof(CompEggLayer))) ? ((d.race.litterSizeCurve == null) ? 1f : Rand.ByCurveAverage(d.race.litterSizeCurve)) : d.GetCompProperties <CompProperties_EggLayer>().eggCountRange.Average); float num = d.race.lifeStageAges[d.race.lifeStageAges.Count - 1].minAge * 60f; float num2 = num + ((!d.HasComp(typeof(CompEggLayer))) ? d.race.gestationPeriodDays : d.GetCompProperties <CompProperties_EggLayer>().eggLayIntervalDays); float p = 30f / num2; return(Mathf.Pow(f, p).ToString("F2")); }); expr_4F[5] = new TableDataGetter <ThingDef>("growth per 60d", delegate(ThingDef d) { float f = 1f + ((!d.HasComp(typeof(CompEggLayer))) ? ((d.race.litterSizeCurve == null) ? 1f : Rand.ByCurveAverage(d.race.litterSizeCurve)) : d.GetCompProperties <CompProperties_EggLayer>().eggCountRange.Average); float num = d.race.lifeStageAges[d.race.lifeStageAges.Count - 1].minAge * 60f; float num2 = num + ((!d.HasComp(typeof(CompEggLayer))) ? d.race.gestationPeriodDays : d.GetCompProperties <CompProperties_EggLayer>().eggLayIntervalDays); float p = 60f / num2; return(Mathf.Pow(f, p).ToString("F2")); }); DebugTables.MakeTablesDialog <ThingDef>(arg_14B_0, expr_4F); }
private static void DoTableInternalApparel(ThingDef stuff) { IEnumerable <ThingDef> arg_1D1_0 = from d in DefDatabase <ThingDef> .AllDefs where d.IsApparel && (stuff == null || (d.MadeFromStuff && stuff.stuffProps.CanMake(d))) select d; TableDataGetter <ThingDef>[] expr_2A = new TableDataGetter <ThingDef> [14]; expr_2A[0] = new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName); expr_2A[1] = new TableDataGetter <ThingDef>("bodyParts", (ThingDef d) => GenText.ToSpaceList(from bp in d.apparel.bodyPartGroups select bp.defName)); expr_2A[2] = new TableDataGetter <ThingDef>("layers", (ThingDef d) => GenText.ToSpaceList(from l in d.apparel.layers select l.ToString())); expr_2A[3] = new TableDataGetter <ThingDef>("tags", (ThingDef d) => GenText.ToSpaceList(from t in d.apparel.tags select t.ToString())); expr_2A[4] = new TableDataGetter <ThingDef>("work", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.WorkToMake, stuff).ToString("F0")); expr_2A[5] = new TableDataGetter <ThingDef>("mktval", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.MarketValue, stuff).ToString("F0")); expr_2A[6] = new TableDataGetter <ThingDef>("insCold", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.Insulation_Cold, stuff).ToString("F1")); expr_2A[7] = new TableDataGetter <ThingDef>("insHeat", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.Insulation_Heat, stuff).ToString("F1")); expr_2A[8] = new TableDataGetter <ThingDef>("blunt", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.ArmorRating_Blunt, stuff).ToString("F2")); expr_2A[9] = new TableDataGetter <ThingDef>("sharp", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.ArmorRating_Sharp, stuff).ToString("F2")); expr_2A[10] = new TableDataGetter <ThingDef>("SEMultArmor", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.StuffEffectMultiplierArmor, stuff).ToString("F2")); expr_2A[11] = new TableDataGetter <ThingDef>("SEMultInsuCold", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.StuffEffectMultiplierInsulation_Cold, stuff).ToString("F2")); expr_2A[12] = new TableDataGetter <ThingDef>("SEMultInsuHeat", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.StuffEffectMultiplierInsulation_Heat, stuff).ToString("F2")); expr_2A[13] = new TableDataGetter <ThingDef>("equipTime", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.EquipDelay, stuff).ToString("F1")); DebugTables.MakeTablesDialog <ThingDef>(arg_1D1_0, expr_2A); }
public static void MakeTablePairsByThing(List <ThingStuffPair> pairList) { DefMap <ThingDef, float> totalCommMult = new DefMap <ThingDef, float>(); DefMap <ThingDef, float> totalComm = new DefMap <ThingDef, float>(); DefMap <ThingDef, int> pairCount = new DefMap <ThingDef, int>(); foreach (ThingStuffPair current in pairList) { DefMap <ThingDef, float> defMap; ThingDef thing; (defMap = totalCommMult)[thing = current.thing] = defMap[thing] + current.commonalityMultiplier; ThingDef thing2; (defMap = totalComm)[thing2 = current.thing] = defMap[thing2] + current.Commonality; DefMap <ThingDef, int> pairCount2; ThingDef thing3; (pairCount2 = pairCount)[thing3 = current.thing] = pairCount2[thing3] + 1; } IEnumerable <ThingDef> arg_192_0 = from d in DefDatabase <ThingDef> .AllDefs where pairList.Any((ThingStuffPair pa) => pa.thing == d) select d; TableDataGetter <ThingDef>[] expr_F3 = new TableDataGetter <ThingDef> [5]; expr_F3[0] = new TableDataGetter <ThingDef>("thing", (ThingDef t) => t.defName); expr_F3[1] = new TableDataGetter <ThingDef>("pair count", (ThingDef t) => pairCount[t].ToString()); expr_F3[2] = new TableDataGetter <ThingDef>("total commonality multiplier ", (ThingDef t) => totalCommMult[t].ToString("F4")); expr_F3[3] = new TableDataGetter <ThingDef>("total commonality", (ThingDef t) => totalComm[t].ToString("F4")); expr_F3[4] = new TableDataGetter <ThingDef>("generateCommonality", (ThingDef t) => t.generateCommonality.ToString("F4")); DebugTables.MakeTablesDialog <ThingDef>(arg_192_0, expr_F3); }
public static void BackstoryCountsPerTag() { IEnumerable <Backstory> enumerable = BackstoryDatabase.allBackstories.Select((KeyValuePair <string, Backstory> kvp) => kvp.Value); List <string> dataSources = enumerable.SelectMany((Backstory bs) => bs.spawnCategories).Distinct().ToList(); Dictionary <string, int> countAdulthoods = new Dictionary <string, int>(); Dictionary <string, int> countChildhoods = new Dictionary <string, int>(); foreach (Backstory item in enumerable) { Dictionary <string, int> dictionary = (item.slot == BackstorySlot.Adulthood) ? countAdulthoods : countChildhoods; foreach (string spawnCategory in item.spawnCategories) { if (!dictionary.ContainsKey(spawnCategory)) { dictionary.Add(spawnCategory, 0); } dictionary[spawnCategory]++; } } List <TableDataGetter <string> > list = new List <TableDataGetter <string> >(); list.Add(new TableDataGetter <string>("tag", (string t) => t)); list.Add(new TableDataGetter <string>("adulthoods", (string t) => countAdulthoods.ContainsKey(t) ? countAdulthoods[t] : 0)); list.Add(new TableDataGetter <string>("childhoods", (string t) => countChildhoods.ContainsKey(t) ? countChildhoods[t] : 0)); DebugTables.MakeTablesDialog(dataSources, list.ToArray()); }
public static void TraitsSampled() { List <Pawn> testColonists = new List <Pawn>(); for (int i = 0; i < 4000; i++) { testColonists.Add(PawnGenerator.GeneratePawn(PawnKindDefOf.Colonist, Faction.OfPlayer)); } DebugTables.MakeTablesDialog(DefDatabase <TraitDef> .AllDefs.SelectMany((TraitDef tr) => tr.degreeDatas), new TableDataGetter <TraitDegreeData>("trait", (TraitDegreeData d) => getTrait(d).defName), new TableDataGetter <TraitDegreeData>("trait commonality", (TraitDegreeData d) => getTrait(d).GetGenderSpecificCommonality(Gender.None).ToString("F2")), new TableDataGetter <TraitDegreeData>("trait commonalityFemale", (TraitDegreeData d) => getTrait(d).GetGenderSpecificCommonality(Gender.Female).ToString("F2")), new TableDataGetter <TraitDegreeData>("degree", (TraitDegreeData d) => d.label), new TableDataGetter <TraitDegreeData>("degree num", (TraitDegreeData d) => (getTrait(d).degreeDatas.Count <= 0) ? "" : d.degree.ToString()), new TableDataGetter <TraitDegreeData>("degree commonality", (TraitDegreeData d) => (getTrait(d).degreeDatas.Count <= 0) ? "" : d.commonality.ToString("F2")), new TableDataGetter <TraitDegreeData>("marketValueFactorOffset", (TraitDegreeData d) => d.marketValueFactorOffset.ToString("F0")), new TableDataGetter <TraitDegreeData>("prevalence among " + 4000 + "\ngenerated Colonists", (TraitDegreeData d) => getPrevalence(d).ToStringPercent())); float getPrevalence(TraitDegreeData d) { float num = 0f; foreach (Pawn item in testColonists) { Trait trait = item.story.traits.GetTrait(getTrait(d)); if (trait != null && trait.Degree == d.degree) { num += 1f; } } return(num / 4000f); } TraitDef getTrait(TraitDegreeData d) { return(DefDatabase <TraitDef> .AllDefs.First((TraitDef td) => td.degreeDatas.Contains(d))); } }
public static void TradeRequestsSampled() { Map currentMap = Find.CurrentMap; IncidentWorker_QuestTradeRequest incidentWorker_QuestTradeRequest = (IncidentWorker_QuestTradeRequest)IncidentDefOf.Quest_TradeRequest.Worker; Dictionary <ThingDef, int> counts = new Dictionary <ThingDef, int>(); for (int i = 0; i < 100; i++) { SettlementBase settlementBase = IncidentWorker_QuestTradeRequest.RandomNearbyTradeableSettlement(currentMap.Tile); if (settlementBase == null) { break; } TradeRequestComp component = settlementBase.GetComponent <TradeRequestComp>(); if (incidentWorker_QuestTradeRequest.TryGenerateTradeRequest(component, currentMap)) { if (!counts.ContainsKey(component.requestThingDef)) { counts.Add(component.requestThingDef, 0); } Dictionary <ThingDef, int> dictionary; ThingDef requestThingDef; (dictionary = counts)[requestThingDef = component.requestThingDef] = dictionary[requestThingDef] + 1; } settlementBase.GetComponent <TradeRequestComp>().Disable(); } DebugTables.MakeTablesDialog(from d in DefDatabase <ThingDef> .AllDefs where counts.ContainsKey(d) orderby counts[d] descending select d, new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("appearance rate in " + 100 + " trade requests", (ThingDef d) => ((float)counts[d] / 100f).ToStringPercent())); }
public static void Crops() { Func <ThingDef, float> workCost = delegate(ThingDef d) { float num = 1.1f; num += d.plant.growDays * 1f; return(num + (d.plant.sowWork + d.plant.harvestWork) * 0.00612f); }; IEnumerable <ThingDef> arg_297_0 = from d in DefDatabase <ThingDef> .AllDefs where d.category == ThingCategory.Plant && d.plant.Harvestable && d.plant.Sowable orderby d.plant.IsTree select d; TableDataGetter <ThingDef>[] expr_79 = new TableDataGetter <ThingDef> [14]; expr_79[0] = new TableDataGetter <ThingDef>("plant", (ThingDef d) => d.defName); expr_79[1] = new TableDataGetter <ThingDef>("product", (ThingDef d) => d.plant.harvestedThingDef.defName); expr_79[2] = new TableDataGetter <ThingDef>("grow time", (ThingDef d) => d.plant.growDays.ToString("F1")); expr_79[3] = new TableDataGetter <ThingDef>("work", (ThingDef d) => (d.plant.sowWork + d.plant.harvestWork).ToString("F0")); expr_79[4] = new TableDataGetter <ThingDef>("harvestCount", (ThingDef d) => d.plant.harvestYield.ToString("F1")); expr_79[5] = new TableDataGetter <ThingDef>("work-cost per cycle", (ThingDef d) => workCost(d).ToString("F2")); expr_79[6] = new TableDataGetter <ThingDef>("work-cost per harvestCount", (ThingDef d) => (workCost(d) / d.plant.harvestYield).ToString("F2")); expr_79[7] = new TableDataGetter <ThingDef>("value each", (ThingDef d) => d.plant.harvestedThingDef.BaseMarketValue.ToString("F2")); expr_79[8] = new TableDataGetter <ThingDef>("harvestValueTotal", (ThingDef d) => (d.plant.harvestYield * d.plant.harvestedThingDef.BaseMarketValue).ToString("F2")); expr_79[9] = new TableDataGetter <ThingDef>("profit per growDay", (ThingDef d) => ((d.plant.harvestYield * d.plant.harvestedThingDef.BaseMarketValue - workCost(d)) / d.plant.growDays).ToString("F2")); expr_79[10] = new TableDataGetter <ThingDef>("nutrition per growDay", (ThingDef d) => (d.plant.harvestedThingDef.ingestible == null) ? string.Empty : (d.plant.harvestYield * d.plant.harvestedThingDef.GetStatValueAbstract(StatDefOf.Nutrition, null) / d.plant.growDays).ToString("F2")); expr_79[11] = new TableDataGetter <ThingDef>("nutrition", (ThingDef d) => (d.plant.harvestedThingDef.ingestible == null) ? string.Empty : d.plant.harvestedThingDef.GetStatValueAbstract(StatDefOf.Nutrition, null).ToString("F2")); expr_79[12] = new TableDataGetter <ThingDef>("fertMin", (ThingDef d) => d.plant.fertilityMin.ToStringPercent()); expr_79[13] = new TableDataGetter <ThingDef>("fertSensitivity", (ThingDef d) => d.plant.fertilitySensitivity.ToStringPercent()); DebugTables.MakeTablesDialog <ThingDef>(arg_297_0, expr_79); }
public static void ThingDamageData() { DebugTables.MakeTablesDialog(from d in DefDatabase <ThingDef> .AllDefs where d.useHitPoints orderby d.category, d.defName select d, new TableDataGetter <ThingDef>("category", (ThingDef d) => d.category.ToString()), new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("hp", (ThingDef d) => d.BaseMaxHitPoints.ToString()), new TableDataGetter <ThingDef>("flammability", (ThingDef d) => (!(d.BaseFlammability > 0f)) ? string.Empty : d.BaseFlammability.ToString()), new TableDataGetter <ThingDef>("uses stuff", (ThingDef d) => d.MadeFromStuff.ToStringCheckBlank()), new TableDataGetter <ThingDef>("deterioration rate", (ThingDef d) => (!(d.GetStatValueAbstract(StatDefOf.DeteriorationRate) > 0f)) ? string.Empty : d.GetStatValueAbstract(StatDefOf.DeteriorationRate).ToString()), new TableDataGetter <ThingDef>("days to deterioriate", (ThingDef d) => (!(d.GetStatValueAbstract(StatDefOf.DeteriorationRate) > 0f)) ? string.Empty : ((float)d.BaseMaxHitPoints / d.GetStatValueAbstract(StatDefOf.DeteriorationRate)).ToString())); }
public static void DecreeSelectionWeightsNow() { IIncidentTarget target = Find.CurrentMap; string label = "selection weight now\ntarget: " + target.ToString(); DebugTables.MakeTablesDialog(DefDatabase <QuestScriptDef> .AllDefsListForReading.Where((QuestScriptDef x) => x.IsRootDecree), new TableDataGetter <QuestScriptDef>("defName", (QuestScriptDef x) => x.defName), new TableDataGetter <QuestScriptDef>(label, (QuestScriptDef x) => NaturalRandomQuestChooser.GetNaturalDecreeSelectionWeight(x, target.StoryState).ToString("F3"))); }
public static void BestThingRequestGroup() { DebugTables.MakeTablesDialog(from x in DefDatabase <ThingDef> .AllDefs where ListerThings.EverListable(x, ListerThingsUse.Global) || ListerThings.EverListable(x, ListerThingsUse.Region) orderby x.label select x, new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("best local", delegate(ThingDef d) { IEnumerable <ThingRequestGroup> source2 = ListerThings.EverListable(d, ListerThingsUse.Region) ? ((ThingRequestGroup[])Enum.GetValues(typeof(ThingRequestGroup))).Where((ThingRequestGroup x) => x.StoreInRegion() && x.Includes(d)) : Enumerable.Empty <ThingRequestGroup>(); if (!source2.Any()) { return("-"); } ThingRequestGroup best2 = source2.MinBy((ThingRequestGroup x) => DefDatabase <ThingDef> .AllDefs.Count((ThingDef y) => ListerThings.EverListable(y, ListerThingsUse.Region) && x.Includes(y))); return(best2 + " (defs: " + DefDatabase <ThingDef> .AllDefs.Count((ThingDef x) => ListerThings.EverListable(x, ListerThingsUse.Region) && best2.Includes(x)) + ")"); }), new TableDataGetter <ThingDef>("best global", delegate(ThingDef d) { IEnumerable <ThingRequestGroup> source = ListerThings.EverListable(d, ListerThingsUse.Global) ? ((ThingRequestGroup[])Enum.GetValues(typeof(ThingRequestGroup))).Where((ThingRequestGroup x) => x.Includes(d)) : Enumerable.Empty <ThingRequestGroup>(); if (!source.Any()) { return("-"); } ThingRequestGroup best = source.MinBy((ThingRequestGroup x) => DefDatabase <ThingDef> .AllDefs.Count((ThingDef y) => ListerThings.EverListable(y, ListerThingsUse.Global) && x.Includes(y))); return(best + " (defs: " + DefDatabase <ThingDef> .AllDefs.Count((ThingDef x) => ListerThings.EverListable(x, ListerThingsUse.Global) && best.Includes(x)) + ")"); })); }
public static void PawnKindsBasics() { IEnumerable <PawnKindDef> arg_36F_0 = from d in DefDatabase <PawnKindDef> .AllDefs where d.race != null && d.RaceProps.Humanlike select d into k orderby(k.defaultFactionType == null) ? string.Empty : k.defaultFactionType.label, k.combatPower select k; TableDataGetter <PawnKindDef>[] expr_72 = new TableDataGetter <PawnKindDef> [18]; expr_72[0] = new TableDataGetter <PawnKindDef>("defName", (PawnKindDef d) => d.defName); expr_72[1] = new TableDataGetter <PawnKindDef>("faction", (PawnKindDef d) => (d.defaultFactionType == null) ? string.Empty : d.defaultFactionType.defName); expr_72[2] = new TableDataGetter <PawnKindDef>("points", (PawnKindDef d) => d.combatPower.ToString("F0")); expr_72[3] = new TableDataGetter <PawnKindDef>("minAge", (PawnKindDef d) => d.minGenerationAge.ToString("F0")); expr_72[4] = new TableDataGetter <PawnKindDef>("maxAge", (PawnKindDef d) => (d.maxGenerationAge >= 10000) ? string.Empty : d.maxGenerationAge.ToString("F0")); expr_72[5] = new TableDataGetter <PawnKindDef>("recruitDiff", (PawnKindDef d) => d.baseRecruitDifficulty.ToStringPercent()); expr_72[6] = new TableDataGetter <PawnKindDef>("itemQuality", (PawnKindDef d) => d.itemQuality.ToString()); expr_72[7] = new TableDataGetter <PawnKindDef>("forceNormGearQual", (PawnKindDef d) => d.forceNormalGearQuality.ToStringCheckBlank()); expr_72[8] = new TableDataGetter <PawnKindDef>("weapon$", (PawnKindDef d) => d.weaponMoney.ToString()); expr_72[9] = new TableDataGetter <PawnKindDef>("apparel$", (PawnKindDef d) => d.apparelMoney.ToString()); expr_72[10] = new TableDataGetter <PawnKindDef>("techHediffsCh", (PawnKindDef d) => d.techHediffsChance.ToStringPercentEmptyZero("F0")); expr_72[11] = new TableDataGetter <PawnKindDef>("techHediffs$", (PawnKindDef d) => d.techHediffsMoney.ToString()); expr_72[12] = new TableDataGetter <PawnKindDef>("gearHealth", (PawnKindDef d) => d.gearHealthRange.ToString()); expr_72[13] = new TableDataGetter <PawnKindDef>("invNutrition", (PawnKindDef d) => d.invNutrition.ToString()); expr_72[14] = new TableDataGetter <PawnKindDef>("addictionChance", (PawnKindDef d) => d.chemicalAddictionChance.ToStringPercent()); expr_72[15] = new TableDataGetter <PawnKindDef>("combatDrugChance", (PawnKindDef d) => (d.combatEnhancingDrugsChance <= 0f) ? string.Empty : d.combatEnhancingDrugsChance.ToStringPercent()); expr_72[16] = new TableDataGetter <PawnKindDef>("combatDrugCount", (PawnKindDef d) => (d.combatEnhancingDrugsCount.max <= 0) ? string.Empty : d.combatEnhancingDrugsCount.ToString()); expr_72[17] = new TableDataGetter <PawnKindDef>("bsCryptosleepComm", (PawnKindDef d) => d.backstoryCryptosleepCommonality.ToStringPercentEmptyZero("F0")); DebugTables.MakeTablesDialog <PawnKindDef>(arg_36F_0, expr_72); }
public static void RacesFoodConsumption() { Func <ThingDef, int, string> lsName = delegate(ThingDef d, int lsIndex) { if (d.race.lifeStageAges.Count <= lsIndex) { return(string.Empty); } LifeStageDef def3 = d.race.lifeStageAges[lsIndex].def; return(def3.defName); }; Func <ThingDef, int, string> maxFood = delegate(ThingDef d, int lsIndex) { if (d.race.lifeStageAges.Count <= lsIndex) { return(string.Empty); } LifeStageDef def2 = d.race.lifeStageAges[lsIndex].def; return((d.race.baseBodySize * def2.bodySizeFactor * def2.foodMaxFactor).ToString("F2")); }; Func <ThingDef, int, string> hungerRate = delegate(ThingDef d, int lsIndex) { if (d.race.lifeStageAges.Count <= lsIndex) { return(string.Empty); } LifeStageDef def = d.race.lifeStageAges[lsIndex].def; return((d.race.baseHungerRate * def.hungerRateFactor).ToString("F2")); }; DebugTables.MakeTablesDialog(from d in DefDatabase <ThingDef> .AllDefs where d.race != null && d.race.EatsFood orderby d.race.baseHungerRate descending select d, new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("Lifestage 0", (ThingDef d) => lsName(d, 0)), new TableDataGetter <ThingDef>("maxFood", (ThingDef d) => maxFood(d, 0)), new TableDataGetter <ThingDef>("hungerRate", (ThingDef d) => hungerRate(d, 0)), new TableDataGetter <ThingDef>("Lifestage 1", (ThingDef d) => lsName(d, 1)), new TableDataGetter <ThingDef>("maxFood", (ThingDef d) => maxFood(d, 1)), new TableDataGetter <ThingDef>("hungerRate", (ThingDef d) => hungerRate(d, 1)), new TableDataGetter <ThingDef>("Lifestage 2", (ThingDef d) => lsName(d, 2)), new TableDataGetter <ThingDef>("maxFood", (ThingDef d) => maxFood(d, 2)), new TableDataGetter <ThingDef>("hungerRate", (ThingDef d) => hungerRate(d, 2)), new TableDataGetter <ThingDef>("Lifestage 3", (ThingDef d) => lsName(d, 3)), new TableDataGetter <ThingDef>("maxFood", (ThingDef d) => maxFood(d, 3)), new TableDataGetter <ThingDef>("hungerRate", (ThingDef d) => hungerRate(d, 3))); }
public static void PawnKindsTechHediffUsage() { List <TableDataGetter <PawnKindDef> > list = new List <TableDataGetter <PawnKindDef> >(); list.Add(new TableDataGetter <PawnKindDef>("defName", (PawnKindDef x) => x.defName)); list.Add(new TableDataGetter <PawnKindDef>("chance", (PawnKindDef x) => x.techHediffsChance.ToStringPercent())); list.Add(new TableDataGetter <PawnKindDef>("avg $", (PawnKindDef x) => x.techHediffsMoney.Average.ToString())); list.Add(new TableDataGetter <PawnKindDef>("min $", (PawnKindDef x) => x.techHediffsMoney.min.ToString())); list.Add(new TableDataGetter <PawnKindDef>("max $", (PawnKindDef x) => x.techHediffsMoney.max.ToString())); list.Add(new TableDataGetter <PawnKindDef>("points", (PawnKindDef x) => x.combatPower.ToString())); list.AddRange(from t in DefDatabase <ThingDef> .AllDefs where t.isTechHediff && t.techHediffsTags != null orderby t.techLevel descending, t.BaseMarketValue select new TableDataGetter <PawnKindDef>(t.label.Shorten() + "\n$" + t.BaseMarketValue.ToString("F0"), delegate(PawnKindDef k) { if (k.techHediffsTags != null && t.techHediffsTags.Any((string tag) => k.techHediffsTags.Contains(tag))) { if (k.techHediffsMoney.max < t.BaseMarketValue) { return("-"); } if (k.techHediffsMoney.min >= t.BaseMarketValue) { return("✓"); } return((1f - (t.BaseMarketValue - k.techHediffsMoney.min) / (k.techHediffsMoney.max - k.techHediffsMoney.min)).ToStringPercent("F0")); } return(string.Empty); })); DebugTables.MakeTablesDialog(from x in DefDatabase <PawnKindDef> .AllDefs where x.RaceProps.Humanlike orderby(x.defaultFactionType == null) ? 2147483647 : ((int)x.defaultFactionType.techLevel), x.combatPower select x, list.ToArray()); }
public static void PawnKindsWeaponUsage() { List <TableDataGetter <PawnKindDef> > list = new List <TableDataGetter <PawnKindDef> >(); list.Add(new TableDataGetter <PawnKindDef>("defName", (PawnKindDef x) => x.defName)); list.Add(new TableDataGetter <PawnKindDef>("avg $", (PawnKindDef x) => x.weaponMoney.Average.ToString())); list.Add(new TableDataGetter <PawnKindDef>("min $", (PawnKindDef x) => x.weaponMoney.min.ToString())); list.Add(new TableDataGetter <PawnKindDef>("max $", (PawnKindDef x) => x.weaponMoney.max.ToString())); list.Add(new TableDataGetter <PawnKindDef>("points", (PawnKindDef x) => x.combatPower.ToString())); list.AddRange(from w in DefDatabase <ThingDef> .AllDefs where w.IsWeapon && !w.weaponTags.NullOrEmpty() orderby w.IsMeleeWeapon descending, w.techLevel, w.BaseMarketValue select new TableDataGetter <PawnKindDef>(w.label.Shorten() + "\n$" + w.BaseMarketValue.ToString("F0"), delegate(PawnKindDef k) { if (k.weaponTags != null && w.weaponTags.Any((string z) => k.weaponTags.Contains(z))) { float num = PawnWeaponGenerator.CheapestNonDerpPriceFor(w); if (k.weaponMoney.max < num) { return("-"); } if (k.weaponMoney.min > num) { return("✓"); } return((1f - (num - k.weaponMoney.min) / (k.weaponMoney.max - k.weaponMoney.min)).ToStringPercent("F0")); } return(string.Empty); })); DebugTables.MakeTablesDialog(from x in DefDatabase <PawnKindDef> .AllDefs where (int)x.RaceProps.intelligence >= 1 orderby(x.defaultFactionType == null) ? 2147483647 : ((int)x.defaultFactionType.techLevel), x.combatPower select x, list.ToArray()); }
public static void Turrets() { DebugTables.MakeTablesDialog(DefDatabase <ThingDef> .AllDefs.Where((ThingDef d) => d.category == ThingCategory.Building && d.building.IsTurret), new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("market\nvalue", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.MarketValue).ToString("F0")), new TableDataGetter <ThingDef>("cost\nlist", (ThingDef d) => (!d.costList.NullOrEmpty()) ? d.costList.Select((ThingDefCountClass x) => x.Summary).ToCommaList() : ""), new TableDataGetter <ThingDef>("cost\nstuff\ncount", (ThingDef d) => (!d.MadeFromStuff) ? "" : d.costStuffCount.ToString()), new TableDataGetter <ThingDef>("work", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.WorkToBuild).ToString("F0")), new TableDataGetter <ThingDef>("hp", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.MaxHitPoints).ToString("F0")), new TableDataGetter <ThingDef>("damage", (ThingDef d) => damage(d.building.turretGunDef).ToString()), new TableDataGetter <ThingDef>("AP", (ThingDef d) => armorPenetration(d.building.turretGunDef).ToStringPercent()), new TableDataGetter <ThingDef>("stop\npower", (ThingDef d) => (!(stoppingPower(d.building.turretGunDef) > 0f)) ? "" : stoppingPower(d.building.turretGunDef).ToString("F1")), new TableDataGetter <ThingDef>("warmup", (ThingDef d) => warmup(d.building.turretGunDef).ToString("F2")), new TableDataGetter <ThingDef>("burst\nshots", (ThingDef d) => burstShots(d.building.turretGunDef).ToString()), new TableDataGetter <ThingDef>("cooldown", (ThingDef d) => cooldown(d.building.turretGunDef).ToString("F2")), new TableDataGetter <ThingDef>("full\ncycle", (ThingDef d) => fullcycle(d.building.turretGunDef).ToString("F2")), new TableDataGetter <ThingDef>("range", (ThingDef d) => d.building.turretGunDef.Verbs[0].range.ToString("F1")), new TableDataGetter <ThingDef>("projectile\nspeed", (ThingDef d) => (d.building.turretGunDef.projectile == null) ? "" : d.building.turretGunDef.projectile.speed.ToString("F0")), new TableDataGetter <ThingDef>("dps\nmissless", (ThingDef d) => dpsMissless(d.building.turretGunDef).ToString("F2")), new TableDataGetter <ThingDef>("accuracy\ntouch (" + 3f + ")", (ThingDef d) => accTouch(d.building.turretGunDef).ToStringPercent()), new TableDataGetter <ThingDef>("accuracy\nshort (" + 12f + ")", (ThingDef d) => accShort(d.building.turretGunDef).ToStringPercent()), new TableDataGetter <ThingDef>("accuracy\nmed (" + 25f + ")", (ThingDef d) => accMed(d.building.turretGunDef).ToStringPercent()), new TableDataGetter <ThingDef>("accuracy\nlong (" + 40f + ")", (ThingDef d) => accLong(d.building.turretGunDef).ToStringPercent()), new TableDataGetter <ThingDef>("accuracy\navg", (ThingDef d) => accAvg(d.building.turretGunDef).ToString("F2")), new TableDataGetter <ThingDef>("forced\nmiss\nradius", (ThingDef d) => (!(d.building.turretGunDef.Verbs[0].forcedMissRadius > 0f)) ? "" : d.building.turretGunDef.Verbs[0].forcedMissRadius.ToString()), new TableDataGetter <ThingDef>("dps\ntouch", (ThingDef d) => (dpsMissless(d.building.turretGunDef) * accTouch(d.building.turretGunDef)).ToString("F2")), new TableDataGetter <ThingDef>("dps\nshort", (ThingDef d) => (dpsMissless(d.building.turretGunDef) * accShort(d.building.turretGunDef)).ToString("F2")), new TableDataGetter <ThingDef>("dps\nmed", (ThingDef d) => (dpsMissless(d.building.turretGunDef) * accMed(d.building.turretGunDef)).ToString("F2")), new TableDataGetter <ThingDef>("dps\nlong", (ThingDef d) => (dpsMissless(d.building.turretGunDef) * accLong(d.building.turretGunDef)).ToString("F2")), new TableDataGetter <ThingDef>("dps\navg", (ThingDef d) => dpsAvg(d.building.turretGunDef).ToString("F2")), new TableDataGetter <ThingDef>("dpsAvg / $100", (ThingDef d) => (dpsAvg(d.building.turretGunDef) / (d.GetStatValueAbstract(StatDefOf.MarketValue) / 100f)).ToString("F3")), new TableDataGetter <ThingDef>("fuel\nshot capacity", (ThingDef d) => fuelCapacity(d).ToString()), new TableDataGetter <ThingDef>("fuel\ntype", (ThingDef d) => fuelType(d)), new TableDataGetter <ThingDef>("fuel to\nreload", (ThingDef d) => fuelToReload(d).ToString())); string fuelCapacity(ThingDef d) { if (!d.HasComp(typeof(CompRefuelable))) { return(""); } return(d.GetCompProperties <CompProperties_Refuelable>().fuelCapacity.ToString()); } string fuelToReload(ThingDef d) { if (!d.HasComp(typeof(CompRefuelable))) { return(""); } return((d.GetCompProperties <CompProperties_Refuelable>().fuelCapacity / d.GetCompProperties <CompProperties_Refuelable>().FuelMultiplierCurrentDifficulty).ToString()); } string fuelType(ThingDef d) { if (!d.HasComp(typeof(CompRefuelable))) { return(""); } return(d.GetCompProperties <CompProperties_Refuelable>().fuelFilter.Summary); } }
public static void Surgeries() { DebugTables.MakeTablesDialog(from d in DefDatabase <RecipeDef> .AllDefs where d.IsSurgery orderby d.WorkAmountTotal(null) descending select d, new TableDataGetter <RecipeDef>("defName", (RecipeDef d) => d.defName), new TableDataGetter <RecipeDef>("work", (RecipeDef d) => d.WorkAmountTotal(null).ToString("F0")), new TableDataGetter <RecipeDef>("ingredients", (RecipeDef d) => d.ingredients.Select((IngredientCount ing) => ing.ToString()).ToCommaList()), new TableDataGetter <RecipeDef>("skillRequirements", (RecipeDef d) => (d.skillRequirements != null) ? d.skillRequirements.Select((SkillRequirement ing) => ing.ToString()).ToCommaList() : "-"), new TableDataGetter <RecipeDef>("surgerySuccessChanceFactor", (RecipeDef d) => d.surgerySuccessChanceFactor.ToStringPercent()), new TableDataGetter <RecipeDef>("deathOnFailChance", (RecipeDef d) => d.deathOnFailedSurgeryChance.ToStringPercent())); }
public static void WildMissResults() { IntVec3 intVec = new IntVec3(100, 0, 0); ShootLine shootLine = new ShootLine(IntVec3.Zero, intVec); IEnumerable <int> enumerable = Enumerable.Range(0, 101); IEnumerable <int> colValues = Enumerable.Range(0, 12); int[,] results = new int[enumerable.Count(), colValues.Count()]; foreach (int item in enumerable) { for (int i = 0; i < 10000; i++) { ShootLine shootLine2 = shootLine; shootLine2.ChangeDestToMissWild((float)item / 100f); if (shootLine2.dest.z == 0 && shootLine2.dest.x > intVec.x) { results[item, shootLine2.dest.x - intVec.x]++; } } } DebugTables.MakeTablesDialog(colValues, (int cells) => cells.ToString() + "-away\ncell\nhit%", enumerable, (int hitchance) => ((float)hitchance / 100f).ToStringPercent() + " aimon chance", delegate(int cells, int hitchance) { float num = (float)hitchance / 100f; return((cells == 0) ? num.ToStringPercent() : ((float)results[hitchance, cells] / 10000f * (1f - num)).ToStringPercent()); }); }
public static void StunChances() { Func <ThingDef, float, bool, string> bluntBodyStunChance = delegate(ThingDef d, float dam, bool onHead) { SimpleCurve obj = (onHead ? DamageDefOf.Blunt.bluntStunChancePerDamagePctOfCorePartToHeadCurve : DamageDefOf.Blunt.bluntStunChancePerDamagePctOfCorePartToBodyCurve); Pawn pawn2 = PawnGenerator.GeneratePawn(new PawnGenerationRequest(d.race.AnyPawnKind, Find.FactionManager.FirstFactionOfDef(d.race.AnyPawnKind.defaultFactionType), PawnGenerationContext.NonPlayer, -1, forceGenerateNewPawn: true)); float x = dam / d.race.body.corePart.def.GetMaxHealth(pawn2); Find.WorldPawns.PassToWorld(pawn2, PawnDiscardDecideMode.Discard); return(Mathf.Clamp01(obj.Evaluate(x)).ToStringPercent()); }; List <TableDataGetter <ThingDef> > list = new List <TableDataGetter <ThingDef> >(); list.Add(new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName)); list.Add(new TableDataGetter <ThingDef>("body size", (ThingDef d) => d.race.baseBodySize.ToString("F2"))); list.Add(new TableDataGetter <ThingDef>("health scale", (ThingDef d) => d.race.baseHealthScale.ToString("F2"))); list.Add(new TableDataGetter <ThingDef>("body size\n* health scale", (ThingDef d) => (d.race.baseHealthScale * d.race.baseBodySize).ToString("F2"))); list.Add(new TableDataGetter <ThingDef>("core part\nhealth", delegate(ThingDef d) { Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(d.race.AnyPawnKind, Find.FactionManager.FirstFactionOfDef(d.race.AnyPawnKind.defaultFactionType), PawnGenerationContext.NonPlayer, -1, forceGenerateNewPawn: true)); float maxHealth = d.race.body.corePart.def.GetMaxHealth(pawn); Find.WorldPawns.PassToWorld(pawn, PawnDiscardDecideMode.Discard); return(maxHealth); })); list.Add(new TableDataGetter <ThingDef>("stun\nchance\nbody\n5", (ThingDef d) => bluntBodyStunChance(d, 5f, arg3: false))); list.Add(new TableDataGetter <ThingDef>("stun\nchance\nbody\n10", (ThingDef d) => bluntBodyStunChance(d, 10f, arg3: false))); list.Add(new TableDataGetter <ThingDef>("stun\nchance\nbody\n15", (ThingDef d) => bluntBodyStunChance(d, 15f, arg3: false))); list.Add(new TableDataGetter <ThingDef>("stun\nchance\nbody\n20", (ThingDef d) => bluntBodyStunChance(d, 20f, arg3: false))); list.Add(new TableDataGetter <ThingDef>("stun\nchance\nhead\n5", (ThingDef d) => bluntBodyStunChance(d, 5f, arg3: true))); list.Add(new TableDataGetter <ThingDef>("stun\nchance\nhead\n10", (ThingDef d) => bluntBodyStunChance(d, 10f, arg3: true))); list.Add(new TableDataGetter <ThingDef>("stun\nchance\nhead\n15", (ThingDef d) => bluntBodyStunChance(d, 15f, arg3: true))); list.Add(new TableDataGetter <ThingDef>("stun\nchance\nhead\n20", (ThingDef d) => bluntBodyStunChance(d, 20f, arg3: true))); DebugTables.MakeTablesDialog(DefDatabase <ThingDef> .AllDefs.Where((ThingDef d) => d.category == ThingCategory.Pawn), list.ToArray()); }
public static void Tools() { var tools = (from x in DefDatabase <ThingDef> .AllDefs.Where((ThingDef x) => !x.tools.NullOrEmpty()).SelectMany((ThingDef x) => x.tools.Select((Tool y) => new { Parent = (Def)x, Tool = y })).Concat(DefDatabase <TerrainDef> .AllDefs.Where((TerrainDef x) => !x.tools.NullOrEmpty()).SelectMany((TerrainDef x) => x.tools.Select((Tool y) => new { Parent = (Def)x, Tool = y }))) .Concat(DefDatabase <HediffDef> .AllDefs.Where((HediffDef x) => x.HasComp(typeof(HediffComp_VerbGiver)) && !x.CompProps <HediffCompProperties_VerbGiver>().tools.NullOrEmpty()).SelectMany((HediffDef x) => x.CompProps <HediffCompProperties_VerbGiver>().tools.Select((Tool y) => new { Parent = (Def)x, Tool = y }))) orderby x.Parent.defName, x.Tool.power descending select x).ToList(); Dictionary <Tool, float> selWeight = tools.ToDictionary(x => x.Tool, x => x.Tool.VerbsProperties.Average((VerbProperties y) => y.AdjustedMeleeSelectionWeight(x.Tool, null, null, null, x.Parent is ThingDef && ((ThingDef)x.Parent).category == ThingCategory.Pawn))); Dictionary <Def, float> selWeightSumInGroup = tools.Select(x => x.Parent).Distinct().ToDictionary((Def x) => x, (Def x) => tools.Where(y => y.Parent == x).Sum(y => selWeight[y.Tool])); DebugTables.MakeTablesDialog(tools.Select((x, index) => index), new TableDataGetter <int>("label", (int x) => tools[x].Tool.label), new TableDataGetter <int>("source", (int x) => tools[x].Parent.defName), new TableDataGetter <int>("power", (int x) => tools[x].Tool.power.ToString("0.##")), new TableDataGetter <int>("AP", delegate(int x) { float num = tools[x].Tool.armorPenetration; if (num < 0f) { num = tools[x].Tool.power * 0.015f; } return(num.ToStringPercent()); }), new TableDataGetter <int>("cooldown", (int x) => tools[x].Tool.cooldownTime.ToString("0.##")), new TableDataGetter <int>("selection weight", (int x) => selWeight[tools[x].Tool].ToString("0.##")), new TableDataGetter <int>("selection weight\nwithin def", (int x) => (selWeight[tools[x].Tool] / selWeightSumInGroup[tools[x].Parent]).ToStringPercent()), new TableDataGetter <int>("chance\nfactor", (int x) => (tools[x].Tool.chanceFactor != 1f) ? tools[x].Tool.chanceFactor.ToString("0.##") : ""), new TableDataGetter <int>("adds hediff", (int x) => (tools[x].Tool.hediff == null) ? "" : tools[x].Tool.hediff.defName), new TableDataGetter <int>("linked body parts", (int x) => (tools[x].Tool.linkedBodyPartsGroup == null) ? "" : tools[x].Tool.linkedBodyPartsGroup.defName), new TableDataGetter <int>("surprise attack", (int x) => (tools[x].Tool.surpriseAttack == null || tools[x].Tool.surpriseAttack.extraMeleeDamages.NullOrEmpty()) ? "" : (tools[x].Tool.surpriseAttack.extraMeleeDamages[0].amount.ToString("0.##") + " (" + tools[x].Tool.surpriseAttack.extraMeleeDamages[0].def.defName + ")")), new TableDataGetter <int>("capacities", (int x) => tools[x].Tool.capacities.ToStringSafeEnumerable()), new TableDataGetter <int>("maneuvers", (int x) => tools[x].Tool.Maneuvers.ToStringSafeEnumerable()), new TableDataGetter <int>("always weapon", (int x) => (!tools[x].Tool.alwaysTreatAsWeapon) ? "" : "always wep"), new TableDataGetter <int>("id", (int x) => tools[x].Tool.id)); }
public static void ThingFillPercents() { DebugTables.MakeTablesDialog(from d in DefDatabase <ThingDef> .AllDefs where d.fillPercent > 0f orderby d.fillPercent descending select d, new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("fillPercent", (ThingDef d) => d.fillPercent.ToStringPercent()), new TableDataGetter <ThingDef>("category", (ThingDef d) => d.category.ToString())); }
public static void PlantsBasics() { DebugTables.MakeTablesDialog(from d in DefDatabase <ThingDef> .AllDefs where d.category == ThingCategory.Plant orderby d.plant.fertilitySensitivity select d, new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("growDays", (ThingDef d) => d.plant.growDays.ToString("F2")), new TableDataGetter <ThingDef>("nutrition", (ThingDef d) => (d.ingestible == null) ? "-" : d.GetStatValueAbstract(StatDefOf.Nutrition).ToString("F2")), new TableDataGetter <ThingDef>("nut/day", (ThingDef d) => (d.ingestible == null) ? "-" : (d.GetStatValueAbstract(StatDefOf.Nutrition) / d.plant.growDays).ToString("F4")), new TableDataGetter <ThingDef>("fertilityMin", (ThingDef d) => d.plant.fertilityMin.ToString("F2")), new TableDataGetter <ThingDef>("fertilitySensitivity", (ThingDef d) => d.plant.fertilitySensitivity.ToString("F2"))); }
public static void ThingMasses() { IOrderedEnumerable <ThingDef> dataSources = from x in DefDatabase <ThingDef> .AllDefsListForReading where x.category == ThingCategory.Item || x.Minifiable where x.thingClass != typeof(MinifiedThing) && x.thingClass != typeof(UnfinishedThing) orderby x.GetStatValueAbstract(StatDefOf.Mass), x.GetStatValueAbstract(StatDefOf.MarketValue) select x; Func <ThingDef, float, string> perPawn = (ThingDef d, float bodySize) => (bodySize * 35f / d.GetStatValueAbstract(StatDefOf.Mass)).ToString("F0"); Func <ThingDef, string> perNutrition = delegate(ThingDef d) { if (d.ingestible == null || d.GetStatValueAbstract(StatDefOf.Nutrition) == 0f) { return(string.Empty); } return((d.GetStatValueAbstract(StatDefOf.Mass) / d.GetStatValueAbstract(StatDefOf.Nutrition)).ToString("F2")); }; DebugTables.MakeTablesDialog(dataSources, new TableDataGetter <ThingDef>("defName", delegate(ThingDef d) { if (d.Minifiable) { return(d.defName + " (minified)"); } string text = d.defName; if (!d.EverHaulable) { text += " (not haulable)"; } return(text); }), new TableDataGetter <ThingDef>("mass", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.Mass).ToString()), new TableDataGetter <ThingDef>("per human", (ThingDef d) => perPawn(d, ThingDefOf.Human.race.baseBodySize)), new TableDataGetter <ThingDef>("per muffalo", (ThingDef d) => perPawn(d, ThingDefOf.Muffalo.race.baseBodySize)), new TableDataGetter <ThingDef>("per dromedary", (ThingDef d) => perPawn(d, ThingDefOf.Dromedary.race.baseBodySize)), new TableDataGetter <ThingDef>("per nutrition", (ThingDef d) => perNutrition(d)), new TableDataGetter <ThingDef>("small volume", (ThingDef d) => (!d.smallVolume) ? string.Empty : "small")); }
public static void AnimalBehavior() { IEnumerable <PawnKindDef> arg_300_0 = from d in DefDatabase <PawnKindDef> .AllDefs where d.race != null && d.RaceProps.Animal select d; TableDataGetter <PawnKindDef>[] expr_2E = new TableDataGetter <PawnKindDef> [17]; expr_2E[0] = new TableDataGetter <PawnKindDef>(string.Empty, (PawnKindDef k) => k.defName); expr_2E[1] = new TableDataGetter <PawnKindDef>("wildness", (PawnKindDef k) => k.RaceProps.wildness.ToStringPercent()); expr_2E[2] = new TableDataGetter <PawnKindDef>("manhunterOnDamageChance", (PawnKindDef k) => k.RaceProps.manhunterOnDamageChance.ToStringPercentEmptyZero("F1")); expr_2E[3] = new TableDataGetter <PawnKindDef>("manhunterOnTameFailChance", (PawnKindDef k) => k.RaceProps.manhunterOnTameFailChance.ToStringPercentEmptyZero("F1")); expr_2E[4] = new TableDataGetter <PawnKindDef>("predator", (PawnKindDef k) => k.RaceProps.predator.ToStringCheckBlank()); expr_2E[5] = new TableDataGetter <PawnKindDef>("bodySize", (PawnKindDef k) => k.RaceProps.baseBodySize.ToString("F2")); expr_2E[6] = new TableDataGetter <PawnKindDef>("maxPreyBodySize", (PawnKindDef k) => (!k.RaceProps.predator) ? string.Empty : k.RaceProps.maxPreyBodySize.ToString("F2")); expr_2E[7] = new TableDataGetter <PawnKindDef>("canBePredatorPrey", (PawnKindDef k) => k.RaceProps.canBePredatorPrey.ToStringCheckBlank()); expr_2E[8] = new TableDataGetter <PawnKindDef>("petness", (PawnKindDef k) => k.RaceProps.petness.ToStringPercent()); expr_2E[9] = new TableDataGetter <PawnKindDef>("nuzzleMtbHours", (PawnKindDef k) => (k.RaceProps.nuzzleMtbHours <= 0f) ? string.Empty : k.RaceProps.nuzzleMtbHours.ToString()); expr_2E[10] = new TableDataGetter <PawnKindDef>("packAnimal", (PawnKindDef k) => k.RaceProps.packAnimal.ToStringCheckBlank()); expr_2E[11] = new TableDataGetter <PawnKindDef>("herdAnimal", (PawnKindDef k) => k.RaceProps.herdAnimal.ToStringCheckBlank()); expr_2E[12] = new TableDataGetter <PawnKindDef>("wildGroupSizeMin", (PawnKindDef k) => (k.wildGroupSize.min == 1) ? string.Empty : k.wildGroupSize.min.ToString()); expr_2E[13] = new TableDataGetter <PawnKindDef>("wildGroupSizeMax", (PawnKindDef k) => (k.wildGroupSize.max == 1) ? string.Empty : k.wildGroupSize.max.ToString()); expr_2E[14] = new TableDataGetter <PawnKindDef>("CanDoHerdMigration", (PawnKindDef k) => k.RaceProps.CanDoHerdMigration.ToStringCheckBlank()); expr_2E[15] = new TableDataGetter <PawnKindDef>("herdMigrationAllowed", (PawnKindDef k) => k.RaceProps.herdMigrationAllowed.ToStringCheckBlank()); expr_2E[16] = new TableDataGetter <PawnKindDef>("mateMtb", (PawnKindDef k) => k.RaceProps.mateMtbHours.ToStringEmptyZero("F0")); DebugTables.MakeTablesDialog <PawnKindDef>(arg_300_0, expr_2E); }
public static void WeaponsRanged() { Func <ThingDef, int> damage = (ThingDef d) => (d.Verbs[0].defaultProjectile != null) ? d.Verbs[0].defaultProjectile.projectile.GetDamageAmount(null) : 0; Func <ThingDef, float> armorPenetration = (ThingDef d) => (d.Verbs[0].defaultProjectile == null) ? 0f : d.Verbs[0].defaultProjectile.projectile.GetArmorPenetration(null); Func <ThingDef, float> stoppingPower = (ThingDef d) => (d.Verbs[0].defaultProjectile == null) ? 0f : d.Verbs[0].defaultProjectile.projectile.stoppingPower; Func <ThingDef, float> warmup = (ThingDef d) => d.Verbs[0].warmupTime; Func <ThingDef, float> cooldown = (ThingDef d) => d.GetStatValueAbstract(StatDefOf.RangedWeapon_Cooldown); Func <ThingDef, int> burstShots = (ThingDef d) => d.Verbs[0].burstShotCount; Func <ThingDef, float> fullcycle = (ThingDef d) => warmup(d) + cooldown(d) + ((d.Verbs[0].burstShotCount - 1) * d.Verbs[0].ticksBetweenBurstShots).TicksToSeconds(); Func <ThingDef, float> dpsMissless = delegate(ThingDef d) { int num = burstShots(d); float num2 = warmup(d) + cooldown(d); num2 += (float)(num - 1) * ((float)d.Verbs[0].ticksBetweenBurstShots / 60f); return((float)(damage(d) * num) / num2); }; Func <ThingDef, float> accTouch = (ThingDef d) => d.GetStatValueAbstract(StatDefOf.AccuracyTouch); Func <ThingDef, float> accShort = (ThingDef d) => d.GetStatValueAbstract(StatDefOf.AccuracyShort); Func <ThingDef, float> accMed = (ThingDef d) => d.GetStatValueAbstract(StatDefOf.AccuracyMedium); Func <ThingDef, float> accLong = (ThingDef d) => d.GetStatValueAbstract(StatDefOf.AccuracyLong); Func <ThingDef, float> accAvg = (ThingDef d) => (accTouch(d) + accShort(d) + accMed(d) + accLong(d)) / 4f; Func <ThingDef, float> dpsAvg = (ThingDef d) => dpsMissless(d) * accAvg(d); DebugTables.MakeTablesDialog((from d in DefDatabase <ThingDef> .AllDefs where d.IsRangedWeapon select d).OrderByDescending(dpsAvg), new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("damage", (ThingDef d) => damage(d).ToString()), new TableDataGetter <ThingDef>("AP", (ThingDef d) => armorPenetration(d).ToStringPercent()), new TableDataGetter <ThingDef>("stop\npower", (ThingDef d) => (!(stoppingPower(d) > 0f)) ? string.Empty : stoppingPower(d).ToString("F1")), new TableDataGetter <ThingDef>("warmup", (ThingDef d) => warmup(d).ToString("F2")), new TableDataGetter <ThingDef>("burst\nshots", (ThingDef d) => burstShots(d).ToString()), new TableDataGetter <ThingDef>("cooldown", (ThingDef d) => cooldown(d).ToString("F2")), new TableDataGetter <ThingDef>("full\ncycle", (ThingDef d) => fullcycle(d).ToString("F2")), new TableDataGetter <ThingDef>("range", (ThingDef d) => d.Verbs[0].range.ToString("F1")), new TableDataGetter <ThingDef>("projectile\nspeed", (ThingDef d) => (d.projectile == null) ? string.Empty : d.projectile.speed.ToString("F0")), new TableDataGetter <ThingDef>("dps\nmissless", (ThingDef d) => dpsMissless(d).ToString("F2")), new TableDataGetter <ThingDef>("accuracy\ntouch (" + 3f + ")", (ThingDef d) => accTouch(d).ToStringPercent()), new TableDataGetter <ThingDef>("accuracy\nshort (" + 12f + ")", (ThingDef d) => accShort(d).ToStringPercent()), new TableDataGetter <ThingDef>("accuracy\nmed (" + 25f + ")", (ThingDef d) => accMed(d).ToStringPercent()), new TableDataGetter <ThingDef>("accuracy\nlong (" + 40f + ")", (ThingDef d) => accLong(d).ToStringPercent()), new TableDataGetter <ThingDef>("accuracy\navg", (ThingDef d) => accAvg(d).ToString("F2")), new TableDataGetter <ThingDef>("forced\nmiss\nradius", (ThingDef d) => (!(d.Verbs[0].forcedMissRadius > 0f)) ? string.Empty : d.Verbs[0].forcedMissRadius.ToString()), new TableDataGetter <ThingDef>("dps\ntouch", (ThingDef d) => (dpsMissless(d) * accTouch(d)).ToString("F2")), new TableDataGetter <ThingDef>("dps\nshort", (ThingDef d) => (dpsMissless(d) * accShort(d)).ToString("F2")), new TableDataGetter <ThingDef>("dps\nmed", (ThingDef d) => (dpsMissless(d) * accMed(d)).ToString("F2")), new TableDataGetter <ThingDef>("dps\nlong", (ThingDef d) => (dpsMissless(d) * accLong(d)).ToString("F2")), new TableDataGetter <ThingDef>("dps\navg", (ThingDef d) => dpsAvg(d).ToString("F2")), new TableDataGetter <ThingDef>("market\nvalue", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.MarketValue).ToString("F0")), new TableDataGetter <ThingDef>("work", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.WorkToMake).ToString("F0")), new TableDataGetter <ThingDef>("dpsAvg*100 / market value", (ThingDef d) => (dpsAvg(d) * 100f / d.GetStatValueAbstract(StatDefOf.MarketValue)).ToString("F3"))); }
public static void RacesButchery() { DebugTables.MakeTablesDialog(from d in DefDatabase <ThingDef> .AllDefs where d.race != null orderby d.race.baseBodySize select d, new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("mktval", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.MarketValue).ToString("F0")), new TableDataGetter <ThingDef>("healthScale", (ThingDef d) => d.race.baseHealthScale.ToString("F2")), new TableDataGetter <ThingDef>("hunger rate", (ThingDef d) => d.race.baseHungerRate.ToString("F2")), new TableDataGetter <ThingDef>("wildness", (ThingDef d) => d.race.wildness.ToStringPercent()), new TableDataGetter <ThingDef>("bodySize", (ThingDef d) => d.race.baseBodySize.ToString("F2")), new TableDataGetter <ThingDef>("meatAmount", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.MeatAmount).ToString("F0")), new TableDataGetter <ThingDef>("leatherAmount", (ThingDef d) => d.GetStatValueAbstract(StatDefOf.LeatherAmount).ToString("F0"))); }
public static void TranshumanistBodyParts() { DebugTables.MakeTablesDialog(DefDatabase <HediffDef> .AllDefs, new List <TableDataGetter <HediffDef> > { new TableDataGetter <HediffDef>("defName", (HediffDef h) => h.defName), new TableDataGetter <HediffDef>("cares", (HediffDef h) => h.countsAsAddedPartOrImplant.ToStringCheckBlank()) }.ToArray()); }
public static void TranshumanistBodyParts() { DebugTables.MakeTablesDialog(DefDatabase <HediffDef> .AllDefs, new List <TableDataGetter <HediffDef> > { new TableDataGetter <HediffDef>("defName", (HediffDef h) => h.defName), new TableDataGetter <HediffDef>("cares", (HediffDef h) => typeof(Hediff_Implant).IsAssignableFrom(h.hediffClass).ToStringCheckBlank()) }.ToArray()); }
public static void PawnKindsBasics() { DebugTables.MakeTablesDialog(from d in DefDatabase <PawnKindDef> .AllDefs where d.race != null && d.RaceProps.Humanlike select d into k orderby(k.defaultFactionType == null) ? "" : k.defaultFactionType.label, k.combatPower select k, new TableDataGetter <PawnKindDef>("defName", (PawnKindDef d) => d.defName), new TableDataGetter <PawnKindDef>("faction", (PawnKindDef d) => (d.defaultFactionType == null) ? "" : d.defaultFactionType.defName), new TableDataGetter <PawnKindDef>("points", (PawnKindDef d) => d.combatPower.ToString("F0")), new TableDataGetter <PawnKindDef>("minAge", (PawnKindDef d) => d.minGenerationAge.ToString("F0")), new TableDataGetter <PawnKindDef>("maxAge", (PawnKindDef d) => (d.maxGenerationAge >= 10000) ? "" : d.maxGenerationAge.ToString("F0")), new TableDataGetter <PawnKindDef>("recruitDiff", (PawnKindDef d) => d.baseRecruitDifficulty.ToStringPercent()), new TableDataGetter <PawnKindDef>("itemQuality", (PawnKindDef d) => d.itemQuality.ToString()), new TableDataGetter <PawnKindDef>("forceNormGearQual", (PawnKindDef d) => d.forceNormalGearQuality.ToStringCheckBlank()), new TableDataGetter <PawnKindDef>("weapon$", (PawnKindDef d) => d.weaponMoney.ToString()), new TableDataGetter <PawnKindDef>("apparel$", (PawnKindDef d) => d.apparelMoney.ToString()), new TableDataGetter <PawnKindDef>("techHediffsCh", (PawnKindDef d) => d.techHediffsChance.ToStringPercentEmptyZero()), new TableDataGetter <PawnKindDef>("techHediffs$", (PawnKindDef d) => d.techHediffsMoney.ToString()), new TableDataGetter <PawnKindDef>("gearHealth", (PawnKindDef d) => d.gearHealthRange.ToString()), new TableDataGetter <PawnKindDef>("invNutrition", (PawnKindDef d) => d.invNutrition.ToString()), new TableDataGetter <PawnKindDef>("addictionChance", (PawnKindDef d) => d.chemicalAddictionChance.ToStringPercent()), new TableDataGetter <PawnKindDef>("combatDrugChance", (PawnKindDef d) => (!(d.combatEnhancingDrugsChance > 0f)) ? "" : d.combatEnhancingDrugsChance.ToStringPercent()), new TableDataGetter <PawnKindDef>("combatDrugCount", (PawnKindDef d) => (d.combatEnhancingDrugsCount.max <= 0) ? "" : d.combatEnhancingDrugsCount.ToString()), new TableDataGetter <PawnKindDef>("bsCryptosleepComm", (PawnKindDef d) => d.backstoryCryptosleepCommonality.ToStringPercentEmptyZero())); }
public static void UnfinishedThings() { DebugTables.MakeTablesDialog(from d in DefDatabase <ThingDef> .AllDefs where d.isUnfinishedThing orderby d.category, d.defName select d, new TableDataGetter <ThingDef>("category", (ThingDef d) => d.category.ToString()), new TableDataGetter <ThingDef>("defName", (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("billGivers", (ThingDef d) => string.Join(", ", (from td in DefDatabase <RecipeDef> .AllDefsListForReading.Where((RecipeDef r) => r.unfinishedThingDef == d).SelectMany((RecipeDef r) => DefDatabase <ThingDef> .AllDefsListForReading.Where((ThingDef td) => td.AllRecipes != null && td.AllRecipes.Contains(r))) select td.defName).Distinct()))); }