コード例 #1
0
        internal static void RefuelPawnOnCaravan(Pawn pawn, Caravan caravan)
        {
            if (pawn.needs.rest.CurLevel > 0.4)
            {
                return;
            }
            var fuel = caravan.AllThings.FirstOrDefault(t => t.def == RSDefOf.RSPowerCell);

            if (fuel == null)
            {
                return;
            }
            var owner  = CaravanInventoryUtility.GetOwnerOf(caravan, fuel);
            var amount = Math.Min(fuel.stackCount, 6);

            if (fuel.stackCount > amount)
            {
                fuel.stackCount -= amount;
            }
            else
            {
                owner.inventory.innerContainer.Remove(fuel);
            }
            pawn.needs.rest.CurLevel += amount / 10f;
        }
コード例 #2
0
        public static bool TryGetBestWater(Caravan caravan, Pawn forPawn, out Thing water, out Pawn owner)
        {
            var   inventoryThings = CaravanInventoryUtility.AllInventoryItems(caravan);
            Thing foundThing      = null;
            var   bestScore       = float.MinValue;

            // キャラバンの全所持品をチェック
            foreach (var thing in inventoryThings)
            {
                // それが飲めるものかどうか
                if (!CanNowGetWater(thing, forPawn))
                {
                    continue;
                }

                var waterScore = GetWaterScore(thing);

                // 今まで見つけたベストスコアを超えたか
                if (bestScore >= waterScore)
                {
                    continue;
                }

                foundThing = thing;
                bestScore  = waterScore;
            }

            if (foundThing != null)
            {
                // 何かしらの水が見つかった
                water = foundThing;

                // 水が個人の所持品に含まれている場合は持ち主が誰かを調べておく
                owner = CaravanInventoryUtility.GetOwnerOf(caravan, foundThing);
                return(true);
            }

            water = null;
            owner = null;
            return(false);
        }
コード例 #3
0
        public static bool TryGetBestArt(Caravan caravan, out Thing thing, out Pawn owner)
        {
            thing = null;
            List <Thing> list = CaravanInventoryUtility.AllInventoryItems(caravan);
            float        num  = 0f;

            foreach (Thing current in list)
            {
                if (current.GetInnerIfMinified().GetStatValue(StatDefOf.Beauty) > num && (current.GetInnerIfMinified().TryGetComp <CompArt>()?.Props?.canBeEnjoyedAsArt ?? false))
                {
                    thing = current;
                }
            }
            if (thing != null)
            {
                owner = CaravanInventoryUtility.GetOwnerOf(caravan, thing);
                return(true);
            }
            owner = null;
            return(false);
        }
コード例 #4
0
        private bool DockBoatTransferPawns()
        {
            DockedBoat dockedBoat = (DockedBoat)WorldObjectMaker.MakeWorldObject(WorldObjectDefOfShips.DockedBoat);

            dockedBoat.Tile = caravan.Tile;
            float randomInRange = Rand.Range(2f, 4f) + (50 * (1 - caravan.PawnsListForReading.Where(x => HelperMethods.IsShip(x)).Max(x => x.GetComp <CompShips>().Props.visibility)));

            dockedBoat.GetComponent <TimeoutComp>().StartTimeout(Mathf.CeilToInt(randomInRange * 60000));
            List <Pawn> boats = caravan.PawnsListForReading.Where(x => HelperMethods.IsShip(x)).ToList();
            List <Pawn> pawns = caravan.PawnsListForReading.Where(x => !HelperMethods.IsShip(x)).ToList();

            if (caravan.PawnsListForReading.Where(x => !HelperMethods.IsShip(x)).Count() <= 0)
            {
                return(false);
            }

            foreach (TransferableOneWay t in this.transferables)
            {
                TransferableUtility.TransferNoSplit(t.things, t.CountToTransfer, delegate(Thing thing, int numToTake)
                {
                    Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(this.caravan, thing);
                    if (ownerOf is null)
                    {
                        return;
                    }
                    CaravanInventoryUtility.MoveInventoryToSomeoneElse(ownerOf, thing, pawns, boats, numToTake);
                }, true, true);
            }

            for (int i = caravan.pawns.Count - 1; i >= 0; i--)
            {
                Pawn p = caravan.PawnsListForReading[i];
                if (HelperMethods.IsShip(p))
                {
                    dockedBoat.dockedBoats.TryAddOrTransfer(p, false);
                }
            }
            Find.WorldObjects.Add(dockedBoat);
            return(true);
        }
コード例 #5
0
        public static void Postfix(Caravan __instance, ref IEnumerable <Gizmo> __result)
        {
            float masss = 0.0f;

            foreach (Pawn pawn in __instance.pawns.InnerListForReading)
            {
                for (int index = 0; index < pawn.inventory.innerContainer.Count; ++index)
                {
                    if (pawn.inventory.innerContainer[index].def.defName != "Building_Helicopter")
                    {
                        masss += pawn.inventory.innerContainer[index].def.BaseMass * (float)pawn.inventory.innerContainer[index].stackCount;
                    }
                }
            }
            foreach (Pawn pawn in __instance.pawns.InnerListForReading)
            {
                Pawn_InventoryTracker pinv = pawn.inventory;
                for (int i = 0; i < pinv.innerContainer.Count; i++)
                {
                    if (pinv.innerContainer[i].def.defName == "Building_Helicopter")
                    {
                        Command_Action commandAction1 = new Command_Action();
                        commandAction1.defaultLabel = "CommandLaunchGroup".Translate();
                        commandAction1.defaultDesc  = "CommandLaunchGroupDesc".Translate();
                        commandAction1.icon         = ContentFinder <Texture2D> .Get("UI/Commands/LaunchShip", true);

                        commandAction1.alsoClickIfOtherInGroupClicked = false;
                        commandAction1.action = (Action)(() =>
                        {
                            float massCapacity = pinv.innerContainer[i].TryGetComp <CompTransporter>().Props.massCapacity;
                            if ((double)masss <= (double)massCapacity)
                            {
                                pinv.innerContainer[i].TryGetComp <CompLaunchableHelicopter>().WorldStartChoosingDestination(__instance);
                            }
                            else
                            {
                                Messages.Message("TooBigTransportersMassUsage".Translate() + "(" + (object)(float)((double)massCapacity - (double)masss) + "KG)", MessageTypeDefOf.RejectInput, false);
                            }
                        });
                        List <Gizmo> list = __result.ToList <Gizmo>();
                        list.Add((Gizmo)commandAction1);
                        Command_Action commandAction2 = new Command_Action();
                        commandAction2.defaultLabel = "CommandAddFuel".Translate();
                        commandAction2.defaultDesc  = "CommandAddFuelDesc".Translate();
                        commandAction2.icon         = ContentFinder <Texture2D> .Get("Things/Item/Resource/Chemfuel", true);

                        commandAction2.alsoClickIfOtherInGroupClicked = false;
                        commandAction2.action = (Action)(() =>
                        {
                            bool flag = false;
                            int count = 0;
                            CompRefuelable comp = pinv.innerContainer[i].TryGetComp <CompRefuelable>();
                            List <Thing> thingList = CaravanInventoryUtility.AllInventoryItems(__instance);
                            for (int index = 0; index < thingList.Count; ++index)
                            {
                                if (thingList[index].def == ThingDefOf.Chemfuel)
                                {
                                    count = thingList[index].stackCount;
                                    Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(__instance, thingList[index]);
                                    float num = comp.Props.fuelCapacity - comp.Fuel;
                                    if ((double)num < 1.0 && (double)num > 0.0)
                                    {
                                        count = 1;
                                    }
                                    if ((double)count * 1.0 >= (double)num)
                                    {
                                        count = (int)num;
                                    }
                                    if ((double)thingList[index].stackCount * 1.0 <= (double)count)
                                    {
                                        thingList[index].stackCount -= count;
                                        Thing thing = thingList[index];
                                        ownerOf.inventory.innerContainer.Remove(thing);
                                        thing.Destroy(DestroyMode.Vanish);
                                    }
                                    else if ((uint)count > 0U)
                                    {
                                        thingList[index].SplitOff(count).Destroy(DestroyMode.Vanish);
                                    }
                                    comp.GetType().GetField("fuel", BindingFlags.Instance | BindingFlags.NonPublic).SetValue((object)comp, (object)(float)((double)comp.Fuel + (double)count));
                                    flag = true;
                                    break;
                                }
                            }
                            if (flag)
                            {
                                Messages.Message("AddFuelDoneMsg".Translate((object)count, (object)comp.Fuel), MessageTypeDefOf.PositiveEvent, false);
                            }
                            else
                            {
                                Messages.Message("NonOilMsg".Translate(), MessageTypeDefOf.RejectInput, false);
                            }
                        });
                        list.Add((Gizmo)commandAction2);
                        Gizmo_MapRefuelableFuelStatus refuelableFuelStatus = new Gizmo_MapRefuelableFuelStatus()
                        {
                            nowFuel   = pinv.innerContainer[i].TryGetComp <CompRefuelable>().Fuel,
                            maxFuel   = pinv.innerContainer[i].TryGetComp <CompRefuelable>().Props.fuelCapacity,
                            compLabel = pinv.innerContainer[i].TryGetComp <CompRefuelable>().Props.FuelGizmoLabel
                        };
                        list.Add((Gizmo)refuelableFuelStatus);
                        __result = (IEnumerable <Gizmo>)list;
                        return;
                    }
                }
            }
        }
コード例 #6
0
        private void exchangeOfGoods(Caravan caravan)
        {
            //Pawn bestNegotiator = CaravanVisitUtility.BestNegotiator(caravan);
            ThingOwner <Thing> сontainer = new ThingOwner <Thing>();
            Dialog_TradeOnline form      = null;

            if (сaravanOnline.OnlineWObject == null)
            {
                Log.Error("OCity_Caravan_LOGNoData".Translate());
                return;
            }

            var goods = GameUtils.GetAllThings(caravan);

            form = new Dialog_TradeOnline(goods
                                          , сaravanOnline.OnlinePlayerLogin
                                          , сaravanOnline.OnlineWObject.FreeWeight
                                          , () =>
            {
                if (!SessionClientController.Data.BackgroundSaveGameOff)
                {
                    var select            = form.GetSelect();
                    bool selectAllCaravan = caravan.PawnsListForReading.Count == select.Count(s => s.Key is Pawn);
                    if (selectAllCaravan)
                    {
                        Log.Message("OCity_Caravan_LOGSwap".Translate());
                        select = new Dictionary <Thing, int>();
                        foreach (var pawn in caravan.PawnsListForReading)
                        {
                            foreach (var item in pawn.inventory.innerContainer.ToDictionary(t => t, t => t.stackCount))
                            {
                                select.Add(item.Key, item.Value);
                            }
                            select.Add(pawn, 1);
                            pawn.inventory.innerContainer.Clear();
                        }
                    }
                    //передаем выбранные товары из caravan к другому игроку в сaravanOnline
                    var sendThings = new List <ThingEntry>();
                    foreach (var pair in select)
                    {
                        var thing     = pair.Key;
                        var numToTake = pair.Value;
                        if (thing is Pawn)
                        {
                            var pawn = thing as Pawn;
                            //если отдали пешку, то выкладываем все другим и удаляемся из каравана
                            var things = pawn.inventory.innerContainer.ToList();
                            pawn.inventory.innerContainer.Clear();
                            GameUtils.DeSpawnSetupOnCaravan(caravan, pawn);
                            foreach (var thin in things)
                            {
                                var p = CaravanInventoryUtility.FindPawnToMoveInventoryTo(thin, caravan.PawnsListForReading, null);
                                if (p != null)
                                {
                                    p.inventory.innerContainer.TryAdd(thin, true);
                                }
                            }
                        }
                        sendThings.Add(ThingEntry.CreateEntry(thing, numToTake));
                    }

                    if (selectAllCaravan)
                    {
                        //удаляем пешку из игры
                        foreach (var pawn in caravan.PawnsListForReading)
                        {
                            GameUtils.PawnDestroy(pawn);
                        }

                        Find.WorldObjects.Remove(caravan);
                    }
                    else
                    {
                        foreach (var pair in select)
                        {
                            var thing     = pair.Key;
                            var numToTake = pair.Value;
                            if (thing is Pawn)
                            {
                                var pawn = thing as Pawn;
                                //удаляем пешку из игры
                                GameUtils.PawnDestroy(pawn);
                            }
                            else
                            {
                                //если отдали вешь, то находим кто её тащит и убираем с него
                                Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(caravan, thing);
                                ownerOf.inventory.innerContainer.TryTransferToContainer(thing, сontainer, numToTake);
                            }
                        }
                    }

                    //После передачи сохраняем, чтобы нельзя было обузить, после чего передаем вещи
                    SessionClientController.SaveGameNowSingleAndCommandSafely(
                        (connect) =>
                    {
                        return(connect.SendThings(sendThings
                                                  , SessionClientController.My.Login
                                                  , сaravanOnline.OnlinePlayerLogin
                                                  , сaravanOnline.OnlineWObject.ServerId
                                                  , сaravanOnline.Tile
                                                  ));
                    },
                        null,
                        null); //если не удалось отправить письмо, то жопа так как сейв уже прошел
                }
            });
            Find.WindowStack.Add(form);
        }
コード例 #7
0
        public static void Postfix(Caravan __instance, ref IEnumerable <Gizmo> __result)
        {
            float masss = 0;

            foreach (Pawn pawn in __instance.pawns.InnerListForReading)
            {
                for (int j = 0; j < pawn.inventory.innerContainer.Count; j++)
                {
                    if (pawn.inventory.innerContainer[j].def != USCMDefOf.RRY_USCM_DropshipUD4L)
                    {
                        masss += (pawn.inventory.innerContainer[j].def.BaseMass * pawn.inventory.innerContainer[j].stackCount);
                    }
                }
            }

            foreach (Pawn pawn in __instance.pawns.InnerListForReading)
            {
                Pawn_InventoryTracker pinv = pawn.inventory;
                for (int i = 0; i < pinv.innerContainer.Count; i++)
                {
                    if (pinv.innerContainer[i].def == USCMDefOf.RRY_USCM_DropshipUD4L)
                    {
                        Command_Action launch = new Command_Action();
                        launch.defaultLabel = "CommandSendShuttle".Translate();
                        launch.defaultDesc  = "CommandSendShuttleDesc".Translate();
                        launch.icon         = ContentFinder <Texture2D> .Get("UI/Commands/LaunchShip", true);

                        launch.alsoClickIfOtherInGroupClicked = false;
                        launch.action = delegate
                        {
                            float maxmass = pinv.innerContainer[i].TryGetComp <CompTransporter>().Props.massCapacity;
                            if (masss <= maxmass)
                            {
                                pinv.innerContainer[i].TryGetComp <CompUSCMDropship>().WorldStartChoosingDestination(__instance);
                            }
                            else
                            {
                                Messages.Message("TooBigTransportersMassUsage".Translate() + "(" + (maxmass - masss) + "KG)", MessageTypeDefOf.RejectInput, false);
                            }
                        };

                        List <Gizmo> newr = __result.ToList();
                        newr.Add(launch);

                        Command_Action addFuel = new Command_Action();
                        addFuel.defaultLabel = "USCM_Dropship_CommandAddFuel".Translate();
                        addFuel.defaultDesc  = "USCM_Dropship_CommandAddFuelDesc".Translate();
                        addFuel.icon         = ContentFinder <Texture2D> .Get("Things/Item/Resource/Chemfuel", true);

                        addFuel.alsoClickIfOtherInGroupClicked = false;
                        addFuel.action = delegate
                        {
                            bool           hasAddFuel = false;
                            int            fcont      = 0;
                            CompRefuelable comprf     = pinv.innerContainer[i].TryGetComp <CompRefuelable>();
                            List <Thing>   list       = CaravanInventoryUtility.AllInventoryItems(__instance);
                            //pinv.innerContainer.Count
                            for (int j = 0; j < list.Count; j++)
                            {
                                if (list[j].def == ThingDefOf.Chemfuel)
                                {
                                    fcont = list[j].stackCount;
                                    Pawn  ownerOf = CaravanInventoryUtility.GetOwnerOf(__instance, list[j]);
                                    float need    = comprf.Props.fuelCapacity - comprf.Fuel;

                                    if (need < 1f && need > 0)
                                    {
                                        fcont = 1;
                                    }
                                    if (fcont * 1f >= need)
                                    {
                                        fcont = (int)need;
                                    }



                                    // Log.Warning("f&n is "+fcont+"/"+need);
                                    if (list[j].stackCount * 1f <= fcont)
                                    {
                                        list[j].stackCount -= fcont;
                                        Thing thing = list[j];
                                        ownerOf.inventory.innerContainer.Remove(thing);
                                        thing.Destroy(DestroyMode.Vanish);
                                    }
                                    else
                                    {
                                        if (fcont != 0)
                                        {
                                            list[j].SplitOff(fcont).Destroy(DestroyMode.Vanish);
                                        }
                                    }


                                    Type      crtype = comprf.GetType();
                                    FieldInfo finfo  = crtype.GetField("fuel", BindingFlags.NonPublic | BindingFlags.Instance);
                                    finfo.SetValue(comprf, comprf.Fuel + fcont);
                                    hasAddFuel = true;
                                    break;
                                }
                            }
                            if (hasAddFuel)
                            {
                                Messages.Message("USCM_Dropship_AddFuelDoneMsg".Translate(fcont, comprf.Fuel), MessageTypeDefOf.PositiveEvent, false);
                            }
                            else
                            {
                                Messages.Message("USCM_Dropship_NoFuelMsg".Translate(), MessageTypeDefOf.RejectInput, false);
                            }
                        };

                        newr.Add(addFuel);

                        Gizmo_MapRefuelableFuelStatus fuelStat = new Gizmo_MapRefuelableFuelStatus
                        {
                            nowFuel   = pinv.innerContainer[i].TryGetComp <CompRefuelable>().Fuel,
                            maxFuel   = pinv.innerContainer[i].TryGetComp <CompRefuelable>().Props.fuelCapacity,
                            compLabel = pinv.innerContainer[i].TryGetComp <CompRefuelable>().Props.FuelGizmoLabel
                        };


                        newr.Add(fuelStat);

                        __result = newr;
                        return;
                    }
                }
            }
        }
コード例 #8
0
        public override void Arrived(Caravan caravan)
        {
            if (mode == "exchangeOfGoods")
            {
                //Pawn bestNegotiator = CaravanVisitUtility.BestNegotiator(caravan);
                ThingOwner <Thing> сontainer = new ThingOwner <Thing>();
                Dialog_TradeOnline form      = null;
                if (сaravanOnline.OnlineWObject == null)
                {
                    Log.Error("OCity_Caravan_LOGNoData".Translate());
                    return;
                }

                var goods = CaravanInventoryUtility.AllInventoryItems(caravan).ToList().Concat(
                    caravan.PawnsListForReading
                    .Cast <Thing>()
                    ).ToList();

                form = new Dialog_TradeOnline(goods
                                              , сaravanOnline.OnlinePlayerLogin
                                              , сaravanOnline.OnlineWObject.FreeWeight
                                              , () =>
                {
                    var select            = form.GetSelect();
                    bool selectAllCaravan = caravan.PawnsListForReading.Count == select.Count(s => s.Key is Pawn);
                    if (selectAllCaravan)
                    {
                        Log.Message("OCity_Caravan_LOGSwap".Translate());
                        select = new Dictionary <Thing, int>();
                        foreach (var pawn in caravan.PawnsListForReading)
                        {
                            foreach (var item in pawn.inventory.innerContainer.ToDictionary(t => t, t => t.stackCount))
                            {
                                select.Add(item.Key, item.Value);
                            }
                            select.Add(pawn, 1);
                            pawn.inventory.innerContainer.Clear();
                        }
                    }
                    //передаем выбранные товары из caravan к другому игроку в сaravanOnline
                    var sendThings = new List <ThingEntry>();
                    foreach (var pair in select)
                    {
                        var thing     = pair.Key;
                        var numToTake = pair.Value;
                        if (thing is Pawn)
                        {
                            var pawn = thing as Pawn;
                            //если отдали пешку, то выкладываем все другим и удаляемся из каравана
                            var things = pawn.inventory.innerContainer.ToList();
                            pawn.inventory.innerContainer.Clear();
                            GameUtils.DeSpawnSetupOnCaravan(caravan, pawn);
                            foreach (var thin in things)
                            {
                                var p = CaravanInventoryUtility.FindPawnToMoveInventoryTo(thin, caravan.PawnsListForReading, null);
                                if (p != null)
                                {
                                    p.inventory.innerContainer.TryAdd(thin, true);
                                }
                            }
                        }
                        sendThings.Add(new ThingEntry(thing, numToTake));
                    }
                    SessionClientController.Command((connect) =>
                    {
                        connect.SendThings(sendThings
                                           , SessionClientController.My.Login
                                           , сaravanOnline.OnlinePlayerLogin
                                           , сaravanOnline.OnlineWObject.ServerId
                                           , сaravanOnline.Tile
                                           );
                    });

                    if (selectAllCaravan)
                    {
                        //удаляем пешку из игры
                        foreach (var pawn in caravan.PawnsListForReading)
                        {
                            pawn.Destroy(DestroyMode.Vanish);
                        }

                        Find.WorldObjects.Remove(caravan);
                    }
                    else
                    {
                        foreach (var pair in select)
                        {
                            var thing     = pair.Key;
                            var numToTake = pair.Value;
                            if (thing is Pawn)
                            {
                                var pawn = thing as Pawn;
                                //удаляем пешку из игры
                                pawn.Destroy(DestroyMode.Vanish);
                                //Find.WorldPawns.RemovePawn(pawn); не проверенное не полное удаление, если её вернут назад
                            }
                            else
                            {
                                //если отдали вешь, то находим кто её тащит и убираем с него
                                Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(caravan, thing);
                                ownerOf.inventory.innerContainer.TryTransferToContainer(thing, сontainer, numToTake);
                            }
                        }
                    }
                });
                Find.WindowStack.Add(form);
            }
        }
コード例 #9
0
ファイル: StartUp.cs プロジェクト: Juanfrank/SRTS-Expanded
    public static IEnumerable<Gizmo> LaunchAndBombGizmosPassthrough(IEnumerable<Gizmo> __result, Caravan __instance)
    {
      IEnumerator<Gizmo> enumerator = __result.GetEnumerator();
      while (enumerator.MoveNext())
      {
        var element = enumerator.Current;
        yield return element;
        if ((element as Command_Action)?.defaultLabel == "CommandSettle".Translate() && __instance.PawnsListForReading.Any(x => x.inventory.innerContainer.Any(y => y.TryGetComp<CompLaunchableSRTS>() != null)))
        {
          float massUsage = 0f;
          Thing srts = null;
          foreach (Pawn p in __instance.PawnsListForReading)
          {
            foreach (Thing t in p.inventory?.innerContainer)
            {
              if (t.TryGetComp<CompLaunchableSRTS>() != null)
                srts = t;
              else
              {
                massUsage += t.GetStatValue(StatDefOf.Mass, true) * t.stackCount;
              }
            }
            massUsage += p.GetStatValue(StatDefOf.Mass, true);
            massUsage -= MassUtility.InventoryMass(p) * p.stackCount;
          }
          yield return new Command_Action
          {
            defaultLabel = "CommandLaunchGroup".Translate(),
            defaultDesc = "CommandLaunchGroupDesc".Translate(),
            icon = Tex2D.LaunchSRTS,
            alsoClickIfOtherInGroupClicked = false,
            action = delegate ()
            {
              if (massUsage > SRTSMod.GetStatFor<float>(srts.def.defName, StatName.massCapacity))
                Messages.Message("TooBigTransportersMassUsage".Translate(), MessageTypeDefOf.RejectInput, false);
              else
                srts.TryGetComp<CompLaunchableSRTS>().WorldStartChoosingDestination(__instance);
            }
          };
          /* Not Yet Implemented */
          /*yield return new Command_Action
          {
              defaultLabel = "BombTarget".Translate(),
              defaultDesc = "BombTargetDesc".Translate(),
              icon = TexCommand.Attack,
              action = delegate ()
              {
                  if(SRTSMod.mod.settings.passengerLimits)
                  {
                      if(__instance.PawnsListForReading.Count < SRTSMod.GetStatFor<int>(srts.def.defName, StatName.minPassengers))
                      {
                          Messages.Message("NotEnoughPilots".Translate(), MessageTypeDefOf.RejectInput, false);
                          return;
                      }
                      else if(__instance.PawnsListForReading.Count > SRTSMod.GetStatFor<int>(srts.def.defName, StatName.maxPassengers))
                      {
                          Messages.Message("TooManyPilots".Translate(), MessageTypeDefOf.RejectInput, false);
                          return;
                      }
                  }

                  FloatMenuOption carpetBombing = new FloatMenuOption("CarpetBombing".Translate(), delegate ()
                  {
                      srts.TryGetComp<CompBombFlyer>().bombType = BombingType.carpet;
                      srts.TryGetComp<CompBombFlyer>().StartChoosingWorldDestinationBomb(__instance);
                  });
                  FloatMenuOption preciseBombing = new FloatMenuOption("PreciseBombing".Translate(), delegate ()
                  {
                      srts.TryGetComp<CompBombFlyer>().bombType = BombingType.precise;
                      srts.TryGetComp<CompBombFlyer>().StartChoosingWorldDestinationBomb(__instance);
                  });
                  Find.WindowStack.Add(new FloatMenuGizmo(new List<FloatMenuOption>() { carpetBombing, preciseBombing }, srts, srts.LabelCap, UI.MouseMapPosition()));
              }
          };*/

          Command_Action RefuelSRTS = new Command_Action()
          {
            defaultLabel = "CommandAddFuelSRTS".Translate(srts.TryGetComp<CompRefuelable>().parent.Label),
            defaultDesc = "CommandAddFuelDescSRTS".Translate(),
            icon = Tex2D.FuelSRTS,
            alsoClickIfOtherInGroupClicked = false,
            action = delegate ()
            {
              bool flag = false;
              int count = 0;
              List<Thing> thingList = CaravanInventoryUtility.AllInventoryItems(__instance);
              for (int index = 0; index < thingList.Count; ++index)
              {
                if (thingList[index].def == ThingDefOf.Chemfuel)
                {
                  count = thingList[index].stackCount;
                  Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(__instance, thingList[index]);
                  float num = srts.TryGetComp<CompRefuelable>().Props.fuelCapacity - srts.TryGetComp<CompRefuelable>().Fuel;
                  if ((double)num < 1.0 && (double)num > 0.0)
                    count = 1;
                  if ((double)count * 1.0 >= (double)num)
                    count = (int)num;
                  if ((double)thingList[index].stackCount * 1.0 <= (double)count)
                  {
                    thingList[index].stackCount -= count;
                    Thing thing = thingList[index];
                    ownerOf.inventory.innerContainer.Remove(thing);
                    thing.Destroy(DestroyMode.Vanish);
                  }
                  else if ((uint)count > 0U)
                    thingList[index].SplitOff(count).Destroy(DestroyMode.Vanish);
                  srts.TryGetComp<CompRefuelable>().GetType().GetField("fuel", BindingFlags.Instance | BindingFlags.NonPublic).SetValue((object)srts.TryGetComp<CompRefuelable>(), (object)(float)((double)srts.TryGetComp<CompRefuelable>().Fuel + (double)count));
                  flag = true;
                  break;
                }
              }
              if (flag)
                Messages.Message("AddFuelSRTSCaravan".Translate(count, srts.LabelCap), MessageTypeDefOf.PositiveEvent, false);
              else
                Messages.Message("NoFuelSRTSCaravan".Translate(), MessageTypeDefOf.RejectInput, false);
            }
          };
          if (srts.TryGetComp<CompRefuelable>().IsFull)
            RefuelSRTS.Disable();
          yield return RefuelSRTS;
          yield return new Gizmo_MapRefuelableFuelStatus
          {

            nowFuel = srts.TryGetComp<CompRefuelable>().Fuel,
            maxFuel = srts.TryGetComp<CompRefuelable>().Props.fuelCapacity,
            compLabel = srts.TryGetComp<CompRefuelable>().Props.FuelGizmoLabel
          };
        }
      }
    }