Example #1
0
    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;
    }
Example #2
0
    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()));
    }
Example #3
0
    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)));
 }
Example #5
0
    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()));
        }
    }