public int Refill(Troop troop, float rate)
 {
     if (this.InefficiencyDays > 0)
     {
         rate *= 2f;
     }
     if (rate < 1f)
     {
         rate = 1f - rate;
         int increment = troop.FoodMax - troop.Food;
         if (increment > 0)
         {
             int num2 = (int) (this.StartArchitecture.Food * rate);
             if ((num2 + troop.Food) >= troop.FoodCostPerDay)
             {
                 if (num2 >= increment)
                 {
                     troop.IncreaseFood(increment);
                     this.StartArchitecture.DecreaseFood((int) (((float) increment) / rate));
                     this.BelongedFaction.IncreaseTechniquePoint(increment / 200);
                     this.BelongedFaction.IncreaseReputation(increment / 0x2710);
                     return (int) (increment * rate);
                 }
                 int num3 = (((num2 + troop.Food) / troop.FoodCostPerDay) * troop.FoodCostPerDay) - troop.Food;
                 troop.IncreaseFood(num3);
                 this.StartArchitecture.DecreaseFood((int) (((float) num3) / rate));
                 this.BelongedFaction.IncreaseTechniquePoint(num3 / 200);
                 this.BelongedFaction.IncreaseReputation(num3 / 0x2710);
                 return (int) (num3 * rate);
             }
         }
     }
     return 0;
 }