From 9309ca46fb0fd313a97f46e503bc3ec91cf249d0 Mon Sep 17 00:00:00 2001 From: Toastical <20125180+Toastical@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:07:07 +0300 Subject: [PATCH] Adds storage dumping (#29641) * added storage dumping * retain in storage item shuffling --- .../items/weapons/storage/storage_base.dm | 21 +++++++++++++++++++ .../living/carbon/human/human_inventory.dm | 1 + code/modules/mod/mod_control.dm | 8 +++++++ 3 files changed, 30 insertions(+) diff --git a/code/game/objects/items/weapons/storage/storage_base.dm b/code/game/objects/items/weapons/storage/storage_base.dm index d016b95fbcf..b643e5342ef 100644 --- a/code/game/objects/items/weapons/storage/storage_base.dm +++ b/code/game/objects/items/weapons/storage/storage_base.dm @@ -103,6 +103,17 @@ /obj/item/storage/proc/removal_allowed_check(mob/user) return TRUE +/obj/item/storage/proc/dump_storage(mob/user, obj/item/storage/target) + if(!length(contents) || user.restrained() || (HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) || !user.can_reach(target) || src == target) + return + for(var/obj/item/thing in contents) + if(!target.can_be_inserted(thing)) + continue + if(!do_after(user, 0.3 SECONDS, target = user)) + break + playsound(loc, "rustle", 50, TRUE, -5) + target.handle_item_insertion(thing, user) + /obj/item/storage/MouseDrop(obj/over_object, src_location, over_location, src_control, over_control, params) if(!ismob(usr)) //so monkeys can take off their backpacks -- Urist return @@ -117,6 +128,16 @@ open(M) return + if(isstorage(over_object)) + var/obj/item/storage = over_object + if(!storage.in_storage) + dump_storage(M, over_object) + return + else if(ismodcontrol(over_object)) + var/obj/item/mod/control/mod = over_object + dump_storage(M, mod.bag) + return + if((istype(over_object, /obj/structure/table) || isfloorturf(over_object)) && length(contents) \ && loc == M && !M.stat && !M.restrained() && !HAS_TRAIT(M, TRAIT_HANDS_BLOCKED) && over_object.Adjacent(M) && !istype(src, /obj/item/storage/lockbox)) // Worlds longest `if()` var/turf/T = get_turf(over_object) diff --git a/code/modules/mob/living/carbon/human/human_inventory.dm b/code/modules/mob/living/carbon/human/human_inventory.dm index 3151948540b..039a5487485 100644 --- a/code/modules/mob/living/carbon/human/human_inventory.dm +++ b/code/modules/mob/living/carbon/human/human_inventory.dm @@ -342,6 +342,7 @@ I.forceMove(C.bag) else I.forceMove(back) + I.in_storage = TRUE if(ITEM_SLOT_ACCESSORY) var/obj/item/clothing/under/uniform = src.w_uniform uniform.attackby__legacy__attackchain(I, src) diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 481a766cb01..82fc0e64b17 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -277,6 +277,14 @@ if(ismecha(M.loc)) return + if(ismodcontrol(over_object)) + var/obj/item/mod/control/target = over_object + bag?.dump_storage(M, target.bag) + return + if(isstorage(over_object)) + bag?.dump_storage(M, over_object) + return + if(!M.restrained() && !M.stat) playsound(loc, "rustle", 50, TRUE, -5)