コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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)];
コード例 #3
0
        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;
        }