From ac8a42373edea7e50f72643683efa71df36e6484 Mon Sep 17 00:00:00 2001 From: FabianK3 <21039694+FabianK3@users.noreply.github.com> Date: Sun, 28 Sep 2025 22:43:56 +0200 Subject: [PATCH] Fix - Persistent stashed trash (#21412) # Summary This PR fixes trash items becoming persistent when they get stashed in storage containers (e.g. backpacks or lunchboxes). ## Details When items get added to storage containers like backpacks, during the insertion `dropped` is called and makes the item persistent. During feature dev this was an unknown edge case of `dropped`. --- code/game/objects/items.dm | 30 +++++++++++-------- .../fabiank3-bug-persistent-stashed-trash.yml | 6 ++++ 2 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 html/changelogs/fabiank3-bug-persistent-stashed-trash.yml diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index ba6edaf170d..5342f40a722 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -505,18 +505,24 @@ /obj/item/proc/try_make_persistent_trash() SHOULD_NOT_OVERRIDE(TRUE) PROTECTED_PROC(TRUE) - if(persistency_considered_trash) // Persistent trash - Applicable if considered_persistent_trash is true - // Trash-like items should become only persistent when they are not dropped in a maint or disposals, otherwise they get deregistered - var/turf/T = get_turf(src) - if(T) - var/area/A = get_area(T) - if(A && !(A.area_flags & AREA_FLAG_PREVENT_PERSISTENT_TRASH)) - persistance_expiration_time_days = 3 // Ensure expiration date is set to prevent long term trash - SSpersistence.register_track(src, usr == null ? null : ckey(usr.key)) - else - SSpersistence.deregister_track(src) - else - SSpersistence.deregister_track(src) + if(!persistency_considered_trash) + return + + if(in_storage) // Items getting moved into storages (lunchboxes, backpacks) triggers the dropped handler and requires no persistency as a result + SSpersistence.deregister_track(src) + return + + // Trash-like items should become only persistent when they are not dropped in an area flagged with AREA_FLAG_PREVENT_PERSISTENT_TRASH + var/turf/T = get_turf(src) + if(T) + var/area/A = get_area(T) + if(A && !(A.area_flags & AREA_FLAG_PREVENT_PERSISTENT_TRASH)) + persistance_expiration_time_days = 3 // Ensure expiration date is set to prevent long term trash + SSpersistence.register_track(src, usr == null ? null : ckey(usr.key)) + return + + // Fallback - No persistency + SSpersistence.deregister_track(src) /obj/item/proc/remove_item_verbs(mob/user) if(ismech(user)) //very snowflake, but necessary due to how mechs work diff --git a/html/changelogs/fabiank3-bug-persistent-stashed-trash.yml b/html/changelogs/fabiank3-bug-persistent-stashed-trash.yml new file mode 100644 index 00000000000..7a653480d58 --- /dev/null +++ b/html/changelogs/fabiank3-bug-persistent-stashed-trash.yml @@ -0,0 +1,6 @@ +author: FabianK3 + +delete-after: True + +changes: + - bugfix: "Fixed trash items becoming persistent when put into storage containers (e.g. backpacks, lunchboxes)."