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); }
public static void MoveAllInventoryToSomeoneElse(Pawn from, List <Pawn> candidates, List <Pawn> ignoreCandidates = null) { CaravanInventoryUtility.inventoryToMove.Clear(); CaravanInventoryUtility.inventoryToMove.AddRange(from.inventory.innerContainer); for (int i = 0; i < CaravanInventoryUtility.inventoryToMove.Count; i++) { CaravanInventoryUtility.MoveInventoryToSomeoneElse(from, CaravanInventoryUtility.inventoryToMove[i], candidates, ignoreCandidates, CaravanInventoryUtility.inventoryToMove[i].stackCount); } CaravanInventoryUtility.inventoryToMove.Clear(); }
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); }
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); }