From 1972f60ddc9e85235ea5921a82be65773c219974 Mon Sep 17 00:00:00 2001 From: Mehni Date: Fri, 21 Oct 2022 19:28:20 +0200 Subject: [PATCH] 1.4 update --- 1.4/Assemblies/IHoldMultipleThings.dll | Bin 0 -> 4096 bytes 1.4/Assemblies/PickUpAndHaul.dll | Bin 0 -> 59904 bytes About/About.xml | 9 +++ .../IHoldMultipleThings.csproj | 72 +++++------------- .../Properties/AssemblyInfo.cs | 36 --------- Source/PickUpAndHaul/CompatHelper.cs | 15 ++-- Source/PickUpAndHaul/FishTranspiler.cs | 8 ++ Source/PickUpAndHaul/HarmonyPatches.cs | 14 +++- .../IHoldMultipleThings_Support.cs | 4 + .../JobDriver_HaulToInventory.cs | 6 ++ .../JobDriver_UnloadYourHauledInventory.cs | 8 +- Source/PickUpAndHaul/PawnUnloadChecker.cs | 2 + Source/PickUpAndHaul/PickUpAndHaul.csproj | 25 +++--- Source/PickUpAndHaul/Settings.cs | 3 + .../WorkGiver_HaulToInventory.cs | 58 ++++++++++++++ 15 files changed, 148 insertions(+), 112 deletions(-) create mode 100644 1.4/Assemblies/IHoldMultipleThings.dll create mode 100644 1.4/Assemblies/PickUpAndHaul.dll delete mode 100644 Source/IHoldMultipleThings/Properties/AssemblyInfo.cs diff --git a/1.4/Assemblies/IHoldMultipleThings.dll b/1.4/Assemblies/IHoldMultipleThings.dll new file mode 100644 index 0000000000000000000000000000000000000000..6f8921ff8c62f074a3601de463ee2a6e1919d1d9 GIT binary patch literal 4096 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
-3bkH@7Hzg2DtW#h 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.1
  • 1.2
  • 1.3
  • +
  • 1.4
  • Mehni.PickUpAndHaul @@ -34,6 +35,14 @@ https://github.com/pardeike/HarmonyRimWorld/releases/latest + +
  • + brrainz.harmony + Harmony + steam://url/CommunityFilePage/2009463077 + https://github.com/pardeike/HarmonyRimWorld/releases/latest +
  • +
  • brrainz.harmony
  • diff --git a/Source/IHoldMultipleThings/IHoldMultipleThings.csproj b/Source/IHoldMultipleThings/IHoldMultipleThings.csproj index 0f3e97f..27e6c00 100644 --- a/Source/IHoldMultipleThings/IHoldMultipleThings.csproj +++ b/Source/IHoldMultipleThings/IHoldMultipleThings.csproj @@ -1,56 +1,20 @@  - - - - Debug - AnyCPU - {E1536A54-D289-41FA-9D0B-8A2F6812C7FA} - Library - Properties - IHoldMultipleThings - IHoldMultipleThings - v4.7.2 - 512 - - - - false - none - true - ..\..\1.2\Assemblies\ - TRACE - prompt - 4 - false - - - none - true - ..\..\1.3\Assemblies\ - TRACE - prompt - 4 - false - - - - ..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll - False - - - - - - - - - - - - - - - - - + + + IHoldMultipleThings + IHoldMultipleThings + net48 + 10.0 + AnyCPU + true + none + prompt + ..\..\1.4\Assemblies\ + false + false + 5 + + + + \ No newline at end of file diff --git a/Source/IHoldMultipleThings/Properties/AssemblyInfo.cs b/Source/IHoldMultipleThings/Properties/AssemblyInfo.cs deleted file mode 100644 index bd14801..0000000 --- a/Source/IHoldMultipleThings/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IHoldMultipleThings")] -[assembly: AssemblyDescription("Pick Up and Haul interface for multi-stack solutions")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("IHoldMultipleThings")] -[assembly: AssemblyCopyright("Copyright © Mehni 2020")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("e1536a54-d289-41fa-9d0b-8a2f6812c7fa")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.1.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Source/PickUpAndHaul/CompatHelper.cs b/Source/PickUpAndHaul/CompatHelper.cs index 61d6be0..6547d26 100644 --- a/Source/PickUpAndHaul/CompatHelper.cs +++ b/Source/PickUpAndHaul/CompatHelper.cs @@ -4,15 +4,20 @@ internal class CompatHelper { public static bool CeOverweight(Pawn pawn) { - var ceCompInventory = pawn.GetComp(); - return (ceCompInventory.currentWeight / ceCompInventory.capacityWeight) >= Settings.MaximumOccupiedCapacityToConsiderHauling; + return false; + //var ceCompInventory = pawn.GetComp(); + //return (ceCompInventory.currentWeight / ceCompInventory.capacityWeight) >= Settings.MaximumOccupiedCapacityToConsiderHauling; } public static int CanFitInInventory(Pawn pawn, Thing thing) { - pawn.GetComp().CanFitInInventory(thing, out var countToPickUp); - return countToPickUp; + return thing.stackCount; + //pawn.GetComp().CanFitInInventory(thing, out var countToPickUp); + //return countToPickUp; } - internal static void UpdateInventory(Pawn pawn) => pawn.GetComp().UpdateInventory(); + internal static void UpdateInventory(Pawn pawn) + { + //pawn.GetComp().UpdateInventory(); + } } \ No newline at end of file diff --git a/Source/PickUpAndHaul/FishTranspiler.cs b/Source/PickUpAndHaul/FishTranspiler.cs index ee0d581..8ae09d8 100644 --- a/Source/PickUpAndHaul/FishTranspiler.cs +++ b/Source/PickUpAndHaul/FishTranspiler.cs @@ -58,7 +58,9 @@ public int GetIndex() => Operand is LocalBuilder builder ? builder.LocalIndex public static IEnumerable FindLoadLocals(MethodBase method, Predicate predicate) { foreach (var index in GetLocalIndices(method, predicate)) + { yield return new() { OpCode = GetLoadLocalOpCode(index), Operand = GetOperandFromIndex(index) }; + } } public static Container FindLoadLocal(IEnumerable codes, Type localType) => LoadLocal(GetLocalOperandsOrIndices(codes, c => c.Returns(localType)).First()); public static Container LoadLocal(object operand) => operand is LocalBuilder builder ? LoadLocal(builder) : LoadLocal((int)operand); @@ -70,7 +72,9 @@ public static IEnumerable FindLoadLocals(MethodBase method, Predicate public static IEnumerable FindStoreLocals(MethodBase method, Predicate predicate) { foreach (var index in GetLocalIndices(method, predicate)) + { yield return new() { OpCode = GetStoreLocalOpCode(index), Operand = GetOperandFromIndex(index) }; + } } public static Container FindStoreLocal(IEnumerable codes, Type localType) => StoreLocal(GetLocalOperandsOrIndices(codes, c => c.Returns(localType)).First()); public static Container StoreLocal(object operand) => operand is LocalBuilder builder ? StoreLocal(builder) : StoreLocal((int)operand); @@ -167,7 +171,9 @@ public static IEnumerable GetLocalOperandsOrIndices(IEnumerable GetLocalIndices(IEnumerable codes, Predicate predicate) { foreach (var operand in GetLocalOperandsOrIndices(codes, predicate)) + { yield return operand is LocalBuilder builder ? builder.LocalIndex : (int)operand; + } } public static IEnumerable GetLocalIndices(MethodBase method, Predicate predicate) { @@ -175,7 +181,9 @@ public static IEnumerable GetLocalIndices(MethodBase method, Predicate(); if (takenToInventory == null) + { return true; + } var carriedThing = takenToInventory.GetHashSet(); return !carriedThing.Contains(thing); @@ -62,11 +64,15 @@ private static void Pawn_InventoryTracker_PostFix(Pawn_InventoryTracker __instan { var takenToInventory = __instance.pawn?.GetComp(); if (takenToInventory == null) + { return; + } var carriedThing = takenToInventory.GetHashSet(); if (carriedThing?.Count > 0) + { carriedThing.Remove(item); + } } private static void JobDriver_HaulToCell_PostFix(JobDriver_HaulToCell __instance) @@ -74,7 +80,9 @@ private static void JobDriver_HaulToCell_PostFix(JobDriver_HaulToCell __instance var pawn = __instance.pawn; var takenToInventory = pawn?.GetComp(); if (takenToInventory == null) + { return; + } var carriedThing = takenToInventory.GetHashSet(); @@ -108,7 +116,9 @@ public static bool CanBeMadeToDropStuff(Pawn pawn, ref bool __result) public static bool SkipCorpses_Prefix(WorkGiver_Haul __instance, ref bool __result, Pawn pawn) { if (__instance is not WorkGiver_HaulCorpses) + { return true; + } if (Settings.AllowCorpses //Don't use the vanilla HaulCorpses WorkGiver if PUAH is allowed to haul those || pawn.Map.listerThings.ThingsInGroup(ThingRequestGroup.Corpse).Count < 1) //...or if there are no corpses to begin with. Indeed Tynan did not foresee this situation @@ -155,7 +165,9 @@ public static IEnumerable GearTabHighlightTranspiler(IEnumerabl } if (!done) + { Verse.Log.Warning("Pick Up And Haul failed to patch ITab_Pawn_Gear.DrawThingRow. This is only used for coloring and totally harmless, but you might wanna know anyway"); + } } private static Color GetColorForHauled(Pawn pawn, Thing thing) diff --git a/Source/PickUpAndHaul/IHoldMultipleThings_Support.cs b/Source/PickUpAndHaul/IHoldMultipleThings_Support.cs index 1818510..e0903c8 100644 --- a/Source/PickUpAndHaul/IHoldMultipleThings_Support.cs +++ b/Source/PickUpAndHaul/IHoldMultipleThings_Support.cs @@ -18,7 +18,9 @@ public static bool CapacityAt(Thing thing, IntVec3 storeCell, Map map, out int c foreach (var t in storeCell.GetThingList(map)) { if (t is IHoldMultipleThings.IHoldMultipleThings holderOfMultipleThings) + { return holderOfMultipleThings.CapacityAt(thing, storeCell, map, out capacity); + } } return false; @@ -36,7 +38,9 @@ public static bool StackableAt(Thing thing, IntVec3 storeCell, Map map) foreach (var t in storeCell.GetThingList(map)) { if (t is IHoldMultipleThings.IHoldMultipleThings holderOfMultipleThings) + { return holderOfMultipleThings.StackableAt(thing, storeCell, map); + } } return false; diff --git a/Source/PickUpAndHaul/JobDriver_HaulToInventory.cs b/Source/PickUpAndHaul/JobDriver_HaulToInventory.cs index 566f8b8..cd4815e 100644 --- a/Source/PickUpAndHaul/JobDriver_HaulToInventory.cs +++ b/Source/PickUpAndHaul/JobDriver_HaulToInventory.cs @@ -44,7 +44,9 @@ public override IEnumerable MakeNewToils() Log.Message($"{actor} is hauling to inventory {thing}:{countToPickUp}"); if (ModCompatibilityCheck.CombatExtendedIsActive) + { countToPickUp = CompatHelper.CanFitInInventory(pawn, thing); + } if (countToPickUp > 0) { @@ -54,7 +56,9 @@ public override IEnumerable MakeNewToils() takenToInventory.RegisterHauledItem(splitThing); if (ModCompatibilityCheck.CombatExtendedIsActive) + { CompatHelper.UpdateInventory(pawn); + } } //thing still remains, so queue up hauling if we can + end the current job (smooth/instant transition) @@ -136,7 +140,9 @@ public Toil CheckForOverencumberedForCombatExtended() var toil = new Toil(); if (!ModCompatibilityCheck.CombatExtendedIsActive) + { return toil; + } toil.initAction = () => { diff --git a/Source/PickUpAndHaul/JobDriver_UnloadYourHauledInventory.cs b/Source/PickUpAndHaul/JobDriver_UnloadYourHauledInventory.cs index 8e627ad..164568a 100644 --- a/Source/PickUpAndHaul/JobDriver_UnloadYourHauledInventory.cs +++ b/Source/PickUpAndHaul/JobDriver_UnloadYourHauledInventory.cs @@ -24,7 +24,9 @@ public override IEnumerable MakeNewToils() var carriedThing = takenToInventory.GetHashSet(); if (ModCompatibilityCheck.ExtendedStorageIsActive) + { _unloadDuration = 20; + } var wait = Toils_General.Wait(_unloadDuration); var celebrate = Toils_General.Wait(_unloadDuration); @@ -87,7 +89,9 @@ public override IEnumerable MakeNewToils() } if (ModCompatibilityCheck.CombatExtendedIsActive) - CompatHelper.UpdateInventory(pawn); + { + CompatHelper.UpdateInventory(pawn); + } thing.SetForbidden(false, false); } @@ -146,7 +150,9 @@ private static ThingCount FirstUnloadableThing(Pawn pawn) { var dirtyStraggler = innerPawnContainer[i]; if (dirtyStraggler.def == stragglerDef) + { return new ThingCount(dirtyStraggler, dirtyStraggler.stackCount); + } } } return new ThingCount(thing, thing.stackCount); diff --git a/Source/PickUpAndHaul/PawnUnloadChecker.cs b/Source/PickUpAndHaul/PawnUnloadChecker.cs index 94917fe..684d488 100644 --- a/Source/PickUpAndHaul/PawnUnloadChecker.cs +++ b/Source/PickUpAndHaul/PawnUnloadChecker.cs @@ -7,7 +7,9 @@ public static void CheckIfPawnShouldUnloadInventory(Pawn pawn, bool forced = fal var itemsTakenToInventory = pawn?.GetComp(); if (itemsTakenToInventory == null) + { return; + } var carriedThing = itemsTakenToInventory.GetHashSet(); diff --git a/Source/PickUpAndHaul/PickUpAndHaul.csproj b/Source/PickUpAndHaul/PickUpAndHaul.csproj index e6b0c80..5cb17c5 100644 --- a/Source/PickUpAndHaul/PickUpAndHaul.csproj +++ b/Source/PickUpAndHaul/PickUpAndHaul.csproj @@ -9,30 +9,25 @@ true none prompt - ..\..\1.3\Assemblies\ + ..\..\1.4\Assemblies\ false false 5 - - - - + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + - + - False - ..\..\1.3\Assemblies\IHoldMultipleThings.dll + ..\..\1.4\Assemblies\IHoldMultipleThings.dll \ No newline at end of file diff --git a/Source/PickUpAndHaul/Settings.cs b/Source/PickUpAndHaul/Settings.cs index 7a39ef7..562cd8c 100644 --- a/Source/PickUpAndHaul/Settings.cs +++ b/Source/PickUpAndHaul/Settings.cs @@ -29,7 +29,10 @@ public static void DoSettingsWindowContents(Rect inRect) ls.Label("PUAH.minimumFreeInventorySpace".Translate(), tooltip: "PUAH.minimumFreeInventorySpaceTooltip".Translate()); var newFreeInventorySpaceValue = Math.Round(ls.Slider(minimumFreeInventorySpace, 0, 100)); if (newFreeInventorySpaceValue != minimumFreeInventorySpace) + { _maximumOccupiedCapacityToConsiderHauling = (float)Math.Round((100d - newFreeInventorySpaceValue) * 0.01, 2); + } + ls.End(); } diff --git a/Source/PickUpAndHaul/WorkGiver_HaulToInventory.cs b/Source/PickUpAndHaul/WorkGiver_HaulToInventory.cs index bfa757b..664364d 100644 --- a/Source/PickUpAndHaul/WorkGiver_HaulToInventory.cs +++ b/Source/PickUpAndHaul/WorkGiver_HaulToInventory.cs @@ -58,7 +58,9 @@ public override bool HasJobOnThing(Pawn pawn, Thing thing, bool forced = false) public override Job JobOnThing(Pawn pawn, Thing thing, bool forced = false) { if (!OkThingToHaul(thing, pawn) || !HaulAIUtility.PawnCanAutomaticallyHaulFast(pawn, thing, forced)) + { return null; + } if (OverAllowedGearCapacity(pawn) || pawn.GetComp() is null // Misc. Robots compatibility @@ -81,9 +83,13 @@ public override Job JobOnThing(Pawn pawn, Thing thing, bool forced = false) //since we've gone through all the effort of getting the loc, might as well use it. //Don't multi-haul food to hoppers. if (HaulToHopperJob(thing, targetCell, map)) + { return HaulAIUtility.HaulToStorageJob(pawn, thing); + } else + { storeTarget = new(targetCell); + } } else if (haulDestination is Thing destinationAsThing && (nonSlotGroupThingOwner = destinationAsThing.TryGetInnerInteractableThingOwner()) != null) { @@ -107,7 +113,9 @@ var capacityStoreCell : nonSlotGroupThingOwner.GetCountCanAccept(thing); if (capacityStoreCell == 0) + { return HaulAIUtility.HaulToStorageJob(pawn, thing); + } var job = JobMaker.MakeJob(PickUpAndHaulJobDefOf.HaulToInventory, null, storeTarget); //Things will be in queues Log.Message($"-------------------------------------------------------------------"); @@ -124,7 +132,9 @@ var capacityStoreCell var ceOverweight = false; if (ModCompatibilityCheck.CombatExtendedIsActive) + { ceOverweight = CompatHelper.CeOverweight(pawn); + } var distanceToHaul = (storeTarget.Position - thing.Position).LengthHorizontal * SEARCH_FOR_OTHERS_RANGE_FRACTION; var distanceToSearchMore = Math.Max(12f, distanceToHaul); @@ -148,9 +158,13 @@ var capacityStoreCell skipCells = new(); skipThings = new(); if (storeTarget.container != null) + { skipThings.Add(storeTarget.container); + } else + { skipCells.Add(storeTarget.cell); + } bool Validator(Thing t) => (!isUrgent || designationManager.DesignationOn(t)?.def == haulUrgentlyDesignation) @@ -206,7 +220,9 @@ bool Validator(Thing t) carryCapacity -= nextThing.stackCount; if (AllocateThingAtCell(storeCellCapacity, pawn, nextThing, job)) + { break; + } if (carryCapacity <= 0) { @@ -232,7 +248,9 @@ private static bool HaulToHopperJob(Thing thing, IntVec3 targetCell, Map map) for (var i = 0; i < thingList.Count; i++) { if (thingList[i].def == ThingDefOf.Hopper) + { return true; + } } } return false; @@ -267,7 +285,9 @@ public StoreTarget(Thing container) public static Thing GetClosestAndRemove(IntVec3 center, Map map, List searchSet, PathEndMode peMode, TraverseParms traverseParams, float maxDistance = 9999f, Predicate validator = null) { if (searchSet == null || !searchSet.Any()) + { return null; + } var maxDistanceSquared = maxDistance * maxDistance; @@ -275,16 +295,24 @@ public static Thing GetClosestAndRemove(IntVec3 center, Map map, List sea { searchSet.RemoveAt(i); if (!closestThing.Spawned) + { continue; + } if ((center - closestThing.Position).LengthHorizontalSquared > maxDistanceSquared) + { break; + } if (!map.reachability.CanReach(center, closestThing, peMode, traverseParams)) + { continue; + } if (validator == null || validator(closestThing)) + { return closestThing; + } } return null; @@ -391,7 +419,9 @@ kvp.Key is var storeTarget Log.Message($"{nextThing} can't stack with allocated cells"); if (job.targetQueueA.NullOrEmpty()) + { job.targetQueueA.Add(nextThing); + } return false; } @@ -410,7 +440,9 @@ kvp.Key is var storeTarget Log.Message($"{pawn} overdone {storeCell} by {capacityOver}"); if (capacityOver == 0) + { break; //don't find new cell, might not have more of this thing to haul + } var currentPriority = StoreUtility.CurrentStoragePriorityOf(nextThing); if (TryFindBestBetterStorageFor(nextThing, pawn, map, currentPriority, pawn.Faction, out var nextStoreCell, out var nextHaulDestination, out var innerInteractableThingOwner)) @@ -460,10 +492,14 @@ public static bool TryFindBestBetterStorageFor(Thing t, Pawn carrier, Map map, S var storagePriority = StoragePriority.Unstored; innerInteractableThingOwner = null; if (TryFindBestBetterStoreCellFor(t, carrier, map, currentPriority, faction, out var foundCell2)) + { storagePriority = foundCell2.GetSlotGroup(map).Settings.Priority; + } if (!TryFindBestBetterNonSlotGroupStorageFor(t, carrier, map, currentPriority, faction, out var haulDestination2)) + { haulDestination2 = null; + } if (storagePriority == StoragePriority.Unstored && haulDestination2 == null) { @@ -478,12 +514,19 @@ public static bool TryFindBestBetterStorageFor(Thing t, Pawn carrier, Map map, S haulDestination = haulDestination2; if (haulDestination2 is not Thing destinationAsThing) + { Verse.Log.Error($"{haulDestination2} is not a valid Thing. Pick Up And Haul can't work with this"); + } else + { innerInteractableThingOwner = destinationAsThing.TryGetInnerInteractableThingOwner(); + } if (innerInteractableThingOwner is null) + { Verse.Log.Error($"{haulDestination2} gave null ThingOwner during lookup in Pick Up And Haul's WorkGiver_HaulToInventory"); + } + return true; } @@ -499,7 +542,9 @@ public static bool TryFindBestBetterStoreCellFor(Thing thing, Pawn carrier, Map { var slotGroup = haulDestinations[i]; if (slotGroup.Settings.Priority <= currentPriority || !slotGroup.parent.Accepts(thing)) + { continue; + } var cellsList = slotGroup.CellsList; @@ -507,7 +552,10 @@ public static bool TryFindBestBetterStoreCellFor(Thing thing, Pawn carrier, Map { var cell = cellsList[j]; if (skipCells.Contains(cell)) + { continue; + } + if (StoreUtility.IsGoodStoreCell(cell, map, thing, carrier, faction) && cell != default) { foundCell = cell; @@ -540,20 +588,28 @@ public static bool TryFindBestBetterNonSlotGroupStorageFor(Thing t, Pawn carrier var iHaulDestination = allHaulDestinationsListInPriorityOrder[i]; if (iHaulDestination is ISlotGroupParent || (iHaulDestination is Building_Grave && !t.CanBeBuried())) + { continue; + } var priority = iHaulDestination.GetStoreSettings().Priority; if ((int)priority < (int)storagePriority || (acceptSamePriority && (int)priority < (int)currentPriority) || (!acceptSamePriority && (int)priority <= (int)currentPriority)) + { break; + } float num2 = intVec.DistanceToSquared(iHaulDestination.Position); if (num2 > num || !iHaulDestination.Accepts(t)) + { continue; + } if (iHaulDestination is Thing thing) { if (skipThings.Contains(thing) || thing.Faction != faction) + { continue; + } if (carrier != null) { @@ -567,7 +623,9 @@ public static bool TryFindBestBetterNonSlotGroupStorageFor(Thing t, Pawn carrier else if (faction != null) { if (thing.IsForbidden(faction) || map.reservationManager.IsReservedByAnyoneOf(thing, faction)) + { continue; + } } skipThings.Add(thing);