public static void Prefix_TryTransferToContainer(ThingOwner __instance, Thing item, ThingOwner otherContainer, out Pawn_ToolTracker __state) { __state = null; if (!(item is ThingWithComps thing) || !thing.IsTool()) { return; } Pawn pawn = __instance.Owner.HoldingPawn(true); Pawn otherPawn = otherContainer.Owner.HoldingPawn(true); if (pawn != null && pawn.CanUseTools(out __state) && otherPawn == pawn) { __state.transfering = true; } }
public static void Prefix(StatPart_Tool __instance, ref float val, Pawn pawn, Pawn_ToolTracker tracker) { var toolType = __instance.GetToolType(pawn, tracker, out _); if (toolType == null) { return; } var stat = __instance.parentStat; if (Dictionaries.SurvivalToolTypes[toolType]) { var values = Dictionaries.NoToolPenalty[(toolType, stat)];
public static void Postfix_TryTransferToContainer(ThingOwner __instance, int __result, Thing item, ThingOwner otherContainer, Pawn_ToolTracker __state) { if (__state == null) { return; } if (__result > 0) { var tool = (ThingWithComps)item; Pawn pawn = __instance.Owner.HoldingPawn(true); Pawn otherPawn = otherContainer.Owner.HoldingPawn(true); if (pawn != otherPawn) { __state.UsedHandler.HeldToolsList.RemoveAll(t => t.tool == tool); if (pawn.CurJobDef.IsReturningTool()) { __state.memoryTool.Remove(tool); } } #if DEBUG var test = new System.Text.StringBuilder($"Test 1.2: Tool pick-up: {pawn} : {item}\nHeldTools:\n"); foreach (var a in __state.UsedHandler.HeldTools) { test.AppendLine($"{a}"); } test.AppendLine($"\nBestTools:"); foreach (var b in __state.UsedHandler.BestTool) { test.AppendLine($"{b.Key} : {b.Value?.tool}"); } Log.Message(test.ToString()); #endif } __state.transfering = false; }