Example #1
0
 public static void TryAbandonSpecificCountViaInterface(TransferableImmutable t, Caravan caravan)
 {
     Find.WindowStack.Add(new Dialog_Slider("AbandonSliderText".Translate(t.Label), 1, t.TotalStackCount, delegate(int x)
     {
         int num = x;
         for (int i = 0; i < t.things.Count; i++)
         {
             if (num <= 0)
             {
                 break;
             }
             Thing thing  = t.things[i];
             Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(caravan, thing);
             if (ownerOf == null)
             {
                 Log.Error("Could not find owner of " + thing);
                 return;
             }
             if (num >= thing.stackCount)
             {
                 num -= thing.stackCount;
                 ownerOf.inventory.innerContainer.Remove(thing);
                 thing.Destroy();
             }
             else
             {
                 thing.SplitOff(num).Destroy();
                 num = 0;
             }
         }
         caravan.RecacheImmobilizedNow();
         caravan.RecacheDaysWorthOfFood();
     }));
 }
Example #2
0
        public static void TryAbandonOrBanishViaInterface(Thing t, Caravan caravan)
        {
            Pawn p = t as Pawn;

            if (p != null)
            {
                if (!caravan.PawnsListForReading.Any((Pawn x) => x != p && caravan.IsOwner(x)))
                {
                    Messages.Message("MessageCantBanishLastColonist".Translate(), caravan, MessageTypeDefOf.RejectInput, historical: false);
                }
                else
                {
                    PawnBanishUtility.ShowBanishPawnConfirmationDialog(p);
                }
            }
            else
            {
                Dialog_MessageBox window = Dialog_MessageBox.CreateConfirmation("ConfirmAbandonItemDialog".Translate(t.Label), delegate
                {
                    Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(caravan, t);
                    if (ownerOf == null)
                    {
                        Log.Error("Could not find owner of " + t);
                    }
                    else
                    {
                        ownerOf.inventory.innerContainer.Remove(t);
                        t.Destroy();
                        caravan.RecacheImmobilizedNow();
                        caravan.RecacheDaysWorthOfFood();
                    }
                }, destructive: true);
                Find.WindowStack.Add(window);
            }
        }
Example #3
0
 public static void TryAbandonSpecificCountViaInterface(Thing t, Caravan caravan)
 {
     Find.WindowStack.Add(new Dialog_Slider("AbandonSliderText".Translate(t.LabelNoCount), 1, t.stackCount, delegate(int x)
     {
         Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(caravan, t);
         if (ownerOf == null)
         {
             Log.Error("Could not find owner of " + t);
         }
         else
         {
             if (x >= t.stackCount)
             {
                 ownerOf.inventory.innerContainer.Remove(t);
                 t.Destroy();
             }
             else
             {
                 t.SplitOff(x).Destroy();
             }
             caravan.RecacheImmobilizedNow();
             caravan.RecacheDaysWorthOfFood();
         }
     }));
 }
Example #4
0
        public static bool TryGetBestFood(Caravan caravan, Pawn forPawn, out Thing food, out Pawn owner)
        {
            List <Thing> list  = CaravanInventoryUtility.AllInventoryItems(caravan);
            Thing        thing = null;
            float        num   = 0f;

            for (int i = 0; i < list.Count; i++)
            {
                Thing thing2 = list[i];
                if (CaravanPawnsNeedsUtility.CanNowEatForNutrition(thing2, forPawn))
                {
                    float foodScore = CaravanPawnsNeedsUtility.GetFoodScore(thing2, forPawn);
                    if (thing == null || foodScore > num)
                    {
                        thing = thing2;
                        num   = foodScore;
                    }
                }
            }
            if (thing != null)
            {
                food  = thing;
                owner = CaravanInventoryUtility.GetOwnerOf(caravan, thing);
                return(true);
            }
            food  = null;
            owner = null;
            return(false);
        }
Example #5
0
        public static void TryAbandonOrBanishViaInterface(TransferableImmutable t, Caravan caravan)
        {
            Pawn pawn = t.AnyThing as Pawn;

            if (pawn != null)
            {
                TryAbandonOrBanishViaInterface(pawn, caravan);
                return;
            }
            Dialog_MessageBox window = Dialog_MessageBox.CreateConfirmation("ConfirmAbandonItemDialog".Translate(t.LabelWithTotalStackCount), delegate
            {
                for (int i = 0; i < t.things.Count; i++)
                {
                    Thing thing  = t.things[i];
                    Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(caravan, thing);
                    if (ownerOf == null)
                    {
                        Log.Error("Could not find owner of " + thing);
                        return;
                    }
                    ownerOf.inventory.innerContainer.Remove(thing);
                    thing.Destroy();
                }
                caravan.RecacheImmobilizedNow();
                caravan.RecacheDaysWorthOfFood();
            }, destructive: true);

            Find.WindowStack.Add(window);
        }
Example #6
0
 public static bool TryGetBestMedicine(Caravan caravan, Pawn patient, out Medicine medicine, out Pawn owner)
 {
     if (patient.playerSettings != null && (int)patient.playerSettings.medCare > 1)
     {
         List <Thing> list      = CaravanInventoryUtility.AllInventoryItems(caravan);
         Medicine     medicine2 = null;
         float        num       = 0f;
         for (int i = 0; i < list.Count; i++)
         {
             Thing thing = list[i];
             if (thing.def.IsMedicine && patient.playerSettings.medCare.AllowsMedicine(thing.def))
             {
                 float statValue = thing.GetStatValue(StatDefOf.MedicalPotency, true);
                 if (statValue > num || medicine2 == null)
                 {
                     num       = statValue;
                     medicine2 = (Medicine)thing;
                 }
             }
         }
         if (medicine2 != null)
         {
             medicine = medicine2;
             owner    = CaravanInventoryUtility.GetOwnerOf(caravan, medicine2);
             return(true);
         }
         medicine = null;
         owner    = null;
         return(false);
     }
     medicine = null;
     owner    = null;
     return(false);
 }
Example #7
0
        private bool TrySplitCaravan()
        {
            List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(this.transferables);

            if (!this.CheckForErrors(pawnsFromTransferables))
            {
                return(false);
            }
            for (int i = 0; i < pawnsFromTransferables.Count; i++)
            {
                CaravanInventoryUtility.MoveAllInventoryToSomeoneElse(pawnsFromTransferables[i], this.caravan.PawnsListForReading, pawnsFromTransferables);
            }
            for (int j = 0; j < pawnsFromTransferables.Count; j++)
            {
                this.caravan.RemovePawn(pawnsFromTransferables[j]);
            }
            Caravan newCaravan = CaravanMaker.MakeCaravan(pawnsFromTransferables, this.caravan.Faction, this.caravan.Tile, true);

            this.transferables.RemoveAll((TransferableOneWay x) => x.AnyThing is Pawn);
            for (int k = 0; k < this.transferables.Count; k++)
            {
                TransferableUtility.TransferNoSplit(this.transferables[k].things, this.transferables[k].CountToTransfer, delegate(Thing thing, int numToTake)
                {
                    Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(this.caravan, thing);
                    if (ownerOf == null)
                    {
                        Log.Error("Error while splitting a caravan: Thing " + thing + " has no owner. Where did it come from then?", false);
                        return;
                    }
                    CaravanInventoryUtility.MoveInventoryToSomeoneElse(ownerOf, thing, newCaravan.PawnsListForReading, null, numToTake);
                }, true, true);
            }
            return(true);
        }
Example #8
0
            internal void <> m__0(Thing thing, int numToTake)
            {
                Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(this.$this.caravan, thing);

                if (ownerOf == null)
                {
                    Log.Error("Error while splitting a caravan: Thing " + thing + " has no owner. Where did it come from then?", false);
                    return;
                }
                CaravanInventoryUtility.MoveInventoryToSomeoneElse(ownerOf, thing, this.newCaravan.PawnsListForReading, null, numToTake);
            }
            internal void <> m__1()
            {
                Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(this.caravan, this.t);

                if (ownerOf == null)
                {
                    Log.Error("Could not find owner of " + this.t, false);
                    return;
                }
                ownerOf.inventory.innerContainer.Remove(this.t);
                this.t.Destroy(DestroyMode.Vanish);
                this.caravan.RecacheImmobilizedNow();
                this.caravan.RecacheDaysWorthOfFood();
            }
        public static bool TryGetDrugToSatisfyChemicalNeed(Caravan caravan, Pawn forPawn, Need_Chemical chemical, out Thing drug, out Pawn owner)
        {
            Hediff_Addiction addictionHediff = chemical.AddictionHediff;
            bool             result;

            if (addictionHediff == null)
            {
                drug   = null;
                owner  = null;
                result = false;
            }
            else
            {
                List <Thing> list  = CaravanInventoryUtility.AllInventoryItems(caravan);
                Thing        thing = null;
                for (int i = 0; i < list.Count; i++)
                {
                    Thing thing2 = list[i];
                    if (thing2.IngestibleNow && thing2.def.IsDrug)
                    {
                        CompDrug compDrug = thing2.TryGetComp <CompDrug>();
                        if (compDrug != null && compDrug.Props.chemical != null)
                        {
                            if (compDrug.Props.chemical.addictionHediff == addictionHediff.def)
                            {
                                if (forPawn.drugs == null || forPawn.drugs.CurrentPolicy[thing2.def].allowedForAddiction || forPawn.story == null || forPawn.story.traits.DegreeOfTrait(TraitDefOf.DrugDesire) > 0)
                                {
                                    thing = thing2;
                                    break;
                                }
                            }
                        }
                    }
                }
                if (thing != null)
                {
                    drug   = thing;
                    owner  = CaravanInventoryUtility.GetOwnerOf(caravan, thing);
                    result = true;
                }
                else
                {
                    drug   = null;
                    owner  = null;
                    result = false;
                }
            }
            return(result);
        }
Example #11
0
        public static bool TryGetThingOfDef(Caravan caravan, ThingDef thingDef, out Thing thing, out Pawn owner)
        {
            List <Thing> list = CaravanInventoryUtility.AllInventoryItems(caravan);

            for (int i = 0; i < list.Count; i++)
            {
                Thing thing2 = list[i];
                if (thing2.def == thingDef)
                {
                    thing = thing2;
                    owner = CaravanInventoryUtility.GetOwnerOf(caravan, thing2);
                    return(true);
                }
            }
            thing = null;
            owner = null;
            return(false);
        }
Example #12
0
        private bool TrySplitCaravan()
        {
            List <Pawn> pawns = TransferableUtility.GetPawnsFromTransferables(this.transferables);

            if (!this.CheckForErrors(pawns))
            {
                return(false);
            }
            for (int i = 0; i < pawns.Count; i++)
            {
                CaravanInventoryUtility.MoveAllInventoryToSomeoneElse(pawns[i], this.caravan.PawnsListForReading, pawns);
            }
            Caravan caravan = (Caravan)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Caravan);

            caravan.Tile = this.caravan.Tile;
            caravan.SetFaction(this.caravan.Faction);
            caravan.Name = CaravanNameGenerator.GenerateCaravanName(caravan);
            Find.WorldObjects.Add(caravan);
            for (int j = 0; j < pawns.Count; j++)
            {
                this.caravan.RemovePawn(pawns[j]);
                caravan.AddPawn(pawns[j], true);
            }
            this.transferables.RemoveAll((TransferableOneWay x) => x.AnyThing is Pawn);
            for (int k = 0; k < this.transferables.Count; k++)
            {
                TransferableUtility.TransferNoSplit(this.transferables[k].things, this.transferables[k].CountToTransfer, delegate(Thing thing, int numToTake)
                {
                    Pawn ownerOf = CaravanInventoryUtility.GetOwnerOf(this.caravan, thing);
                    if (ownerOf == null)
                    {
                        Log.Error("Error while splitting a caravan: Thing " + thing + " has no owner. Where did it come from then?");
                    }
                    else
                    {
                        CaravanInventoryUtility.MoveInventoryToSomeoneElse(ownerOf, thing, pawns, null, numToTake);
                    }
                }, true, true);
            }
            return(true);
        }