public static void SortPolicy(DrugPolicy DP) { var list = NonPublicFields.DrugPolicyEntryList(DP); var list2 = new List <DrugPolicyEntry>(); if (list.Count <= 0) { return; } foreach (var drugPolicyEntry in list) { if (drugPolicyEntry?.drug == null) { continue; } CheckValues(DP, drugPolicyEntry, drugPolicyEntry.drug, out var drugPolicyEntry2); if (drugPolicyEntry2 != null) { list2.AddDistinct(drugPolicyEntry2); } } if (list2.Count <= 0) { return; } var list3 = (from dpe in list2 orderby dpe.drug.label select dpe).ToList(); NonPublicFields.DrugPolicyEntryList(DP) = list3; }
public static void SortPolicies() { var allPolicies = Current.Game.drugPolicyDatabase.AllPolicies; var num = 0; if (allPolicies.Count > 0) { foreach (var drugPolicy in allPolicies) { var list = NonPublicFields.DrugPolicyEntryList(drugPolicy); var list2 = new List <DrugPolicyEntry>(); if (list.Count <= 0) { continue; } foreach (var drugPolicyEntry in list) { if (drugPolicyEntry?.drug == null) { continue; } CheckValues(drugPolicy, drugPolicyEntry, drugPolicyEntry.drug, out var drugPolicyEntry2); if (drugPolicyEntry2 != null) { list2.AddDistinct(drugPolicyEntry2); } } if (list2.Count <= 0) { continue; } var list3 = (from dpe in list2 orderby dpe.drug.label select dpe).ToList(); NonPublicFields.DrugPolicyEntryList(drugPolicy) = list3; num++; } } Log.Message("DrugPolicyFix.Sorted".Translate(num.ToString())); }
public static void AddNewDrugToPolicy(DrugPolicy dp, ThingDef newdrug, DrugCategory DC) { var drugPolicyEntry = new DrugPolicyEntry { drug = newdrug, allowedForAddiction = false, allowedForJoy = false, allowScheduled = false }; if (dp.label == "SocialDrugs".Translate()) { if (DC == DrugCategory.Social) { drugPolicyEntry.allowedForJoy = true; } } else if (dp.label == "Unrestricted".Translate()) { if (newdrug.IsPleasureDrug) { drugPolicyEntry.allowedForJoy = true; } } else if (dp.label == "OneDrinkPerDay".Translate() && (DrugPolicyUtility.IsAlcohol(newdrug) || DrugPolicyUtility.IsSmokey(newdrug)) && newdrug.IsPleasureDrug) { drugPolicyEntry.allowedForJoy = true; } if (DrugPolicyUtility.IsAddictive(newdrug)) { drugPolicyEntry.allowedForAddiction = true; } var list = NonPublicFields.DrugPolicyEntryList(dp); list.AddDistinct(drugPolicyEntry); NonPublicFields.DrugPolicyEntryList(dp) = list; }
private MemberIndexInfo[] get(Func <MemberIndexInfo, bool> isValue) { return(AutoCSer.Extensions.ArrayExtension.concat(PublicFields.getFindArray(isValue), NonPublicFields.getFindArray(isValue), PublicProperties.getFindArray(isValue), NonPublicProperties.getFindArray(isValue))); }
public static void CorrectPolicies() { var allDefsListForReading = DefDatabase <ThingDef> .AllDefsListForReading; var policiesAddedToCount = 0; var defsAddedCount = 0; var policiesRemovedFromCount = 0; var defsRemovedCount = 0; var allPolicies = Current.Game.drugPolicyDatabase.AllPolicies; if (allPolicies.Count > 0) { // Collect together all known ThingDefs that are categorized as drugs var allDrugDefs = new List <ThingDef>(); if (allDefsListForReading.Count > 0) { foreach (var thingDef in allDefsListForReading) { if (IsDrug(thingDef)) { allDrugDefs.AddDistinct(thingDef); } } } foreach (var drugPolicy in allPolicies) { // Remove any non-drugs that might have found their way into existing policies (e.g. through use of the // Cherry Picker mod) var existingDrugPolicyEntries = NonPublicFields.DrugPolicyEntryList(drugPolicy); var filteredDrugPolicyEntries = new List <DrugPolicyEntry>(); if (existingDrugPolicyEntries.Count > 0) { foreach (var drugPolicyEntry in existingDrugPolicyEntries) { if (IsDrug(drugPolicyEntry.drug)) { filteredDrugPolicyEntries.AddDistinct(drugPolicyEntry); } } } if (existingDrugPolicyEntries.Count > filteredDrugPolicyEntries.Count) { defsRemovedCount = existingDrugPolicyEntries.Count - filteredDrugPolicyEntries.Count; policiesRemovedFromCount++; NonPublicFields.DrugPolicyEntryList(drugPolicy) = filteredDrugPolicyEntries; } // Find new drugs that aren't already in the policy to add var drugDefsToAdd = new List <ThingDef>(); foreach (var thingDef in allDrugDefs) { var b = false; if (filteredDrugPolicyEntries.Count > 0) { foreach (var drugPolicyEntry in filteredDrugPolicyEntries) { if (thingDef != drugPolicyEntry.drug) { continue; } b = true; break; } } if (!b) { drugDefsToAdd.AddDistinct(thingDef); } } if (drugDefsToAdd.Count <= 0) { continue; } policiesAddedToCount++; // Create drug policy entries from the ThingDef and add them foreach (var thingDef2 in drugDefsToAdd) { defsAddedCount++; var drugCategory2 = thingDef2.ingestible.drugCategory; AddNewDrugToPolicy(drugPolicy, thingDef2, drugCategory2); } } } // Log out what was done. if (policiesAddedToCount == 0 && policiesRemovedFromCount == 0) { Log.Message("DrugPolicyFix.DoneNothing".Translate()); } if (policiesAddedToCount > 0) { Log.Message("DrugPolicyFix.Feedback".Translate(policiesAddedToCount.ToString(), defsAddedCount.ToString())); } if (policiesRemovedFromCount > 0) { Log.Message("DrugPolicyFix.Removed".Translate(policiesRemovedFromCount.ToString(), defsRemovedCount.ToString())); } }