private static int CalculateGarrisonChangeInternal(
            Settlement settlement,
            StatExplainer explanation = null)
        {
            ExplainedNumber result = new ExplainedNumber(0.0f, explanation, (TextObject)null);

            if (settlement.IsTown || settlement.IsCastle)
            {
                double loyalty = (double)settlement.Town.Loyalty;
                if (settlement.IsStarving)
                {
                    float foodChange = settlement.Town.FoodChange;
                    int   num        = !settlement.Town.Owner.IsStarving || (double)foodChange >= -19.0 ?
                                       0 : (int)(((double)foodChange + 10.0) * SubModule.Settings.garrisonFoodConsumpetionMultiplier / 10.0);

                    result.Add((float)num, LightSettlementGarrisonModel._foodShortageText);
                }
                if (settlement.Town.GarrisonParty != null && ((double)settlement.Town.GarrisonParty.Party.NumberOfHealthyMembers + (double)result.ResultNumber) / (double)settlement.Town.GarrisonParty.Party.PartySizeLimit > (double)settlement.Town.GarrisonParty.PaymentRatio)
                {
                    int num = 0;
                    do
                    {
                        ++num;
                    }while (((double)settlement.Town.GarrisonParty.Party.NumberOfHealthyMembers + (double)result.ResultNumber - (double)num) / (double)settlement.Town.GarrisonParty.Party.PartySizeLimit >= (double)settlement.Town.GarrisonParty.PaymentRatio && (double)settlement.Town.GarrisonParty.Party.NumberOfHealthyMembers + (double)result.ResultNumber - (double)num > 0.0 && num < 20);
                    result.Add((float)-num, LightSettlementGarrisonModel._paymentIsLess);
                }
            }
            LightSettlementGarrisonModel.GetSettlementGarrisonChangeDueToIssues(settlement, ref result);
            return((int)result.ResultNumber);
        }
        private static int CalculateGarrisonChangeInternal(Settlement settlement, StatExplainer?explanation = null)
        {
            ExplainedNumber explainedNumber = new ExplainedNumber(0f, explanation, null);
            bool            flag            = settlement.IsTown || settlement.IsCastle;

            if (flag)
            {
                double num        = (double)settlement.Town.Loyalty;
                bool   isStarving = settlement.IsStarving;
                if (isStarving)
                {
                    float foodChange = settlement.Town.FoodChange;
                    int   num2       = (!settlement.Town.Owner.IsStarving || (double)foodChange >= -19.0) ? 0 : ((int)(((double)foodChange + 10.0) * (double)SubModule.Settings.GarrisonFoodConsumpetionMultiplier / 10.0));
                    explainedNumber.Add((float)num2, LightSettlementGarrisonModel._foodShortageText, null);
                }
                bool flag2 = settlement.Town.GarrisonParty != null && ((double)settlement.Town.GarrisonParty.Party.NumberOfHealthyMembers + (double)explainedNumber.ResultNumber) / (double)settlement.Town.GarrisonParty.Party.PartySizeLimit > (double)settlement.Town.GarrisonParty.PaymentRatio;
                if (flag2)
                {
                    int num3 = 0;
                    do
                    {
                        num3++;
                    }while ((settlement is not null && settlement.Town.GarrisonParty is not null) &&
                            (((double)settlement.Town.GarrisonParty.Party.NumberOfHealthyMembers + (double)explainedNumber.ResultNumber - (double)num3) / (double)settlement.Town.GarrisonParty.Party.PartySizeLimit >=
                             (double)settlement.Town.GarrisonParty.PaymentRatio && (double)settlement.Town.GarrisonParty.Party.NumberOfHealthyMembers + (double)explainedNumber.ResultNumber - (double)num3 > 0.0 && num3 < 20));
                    explainedNumber.Add((float)(-(float)num3), LightSettlementGarrisonModel._paymentIsLess, null);
                }
            }

            if (settlement is not null)
            {
                LightSettlementGarrisonModel.GetSettlementGarrisonChangeDueToIssues(settlement, ref explainedNumber);
            }

            return((int)explainedNumber.ResultNumber);
        }
 public override int CalculateGarrisonChange(Settlement settlement, StatExplainer explanation = null)
 {
     return(LightSettlementGarrisonModel.CalculateGarrisonChangeInternal(settlement, explanation));
 }