From a2c68d9a8df6ae0c5e80d4fae7eea3772fbec4b3 Mon Sep 17 00:00:00 2001 From: Atermonera Date: Mon, 13 Mar 2023 23:44:06 -0800 Subject: [PATCH] Sheet storage has different caps per type. (#9029) * Adds per-type max storage persistence * false paths --- code/game/objects/effects/decals/crayon.dm | 5 ++-- .../food/kitchen/smartfridge/engineering.dm | 8 +++---- .../persistence/storage/smartfridge.dm | 16 ++++++++++++- code/modules/persistence/storage/storage.dm | 24 ++++++++++++------- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index aad643e7be..e6464428e5 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -6,8 +6,7 @@ anchored = 1 /obj/effect/decal/cleanable/crayon/Initialize(var/ml, main = "#FFFFFF",shade = "#000000",var/type = "rune") - . = ..() - + . = ..(ml, 0) // mapload, age name = type desc = "A [type] drawn in crayon." @@ -26,4 +25,4 @@ add_overlay(mainOverlay) add_overlay(shadeOverlay) - add_hiddenprint(usr) \ No newline at end of file + add_hiddenprint(usr) diff --git a/code/modules/food/kitchen/smartfridge/engineering.dm b/code/modules/food/kitchen/smartfridge/engineering.dm index 2a3a56368b..2a6205c54d 100644 --- a/code/modules/food/kitchen/smartfridge/engineering.dm +++ b/code/modules/food/kitchen/smartfridge/engineering.dm @@ -1,4 +1,4 @@ -/obj/machinery/smartfridge/sheets //Is this used anywhere? It's not secure. +/obj/machinery/smartfridge/sheets name = "\improper Smart Sheet Storage" desc = "A storage unit for metals." icon_state = "fridge_dark" @@ -10,7 +10,7 @@ persistent = /datum/persistent/storage/smartfridge/sheet_storage /obj/machinery/smartfridge/sheets/persistent_lossy - persistent = /datum/persistent/storage/smartfridge/sheet_storage/lossy + persistent = /datum/persistent/storage/smartfridge/sheet_storage/variable_max /obj/machinery/smartfridge/sheets/accept_check(var/obj/item/O) return istype(O, /obj/item/stack/material) @@ -29,6 +29,6 @@ /obj/machinery/smartfridge/sheets/find_record(var/obj/item/O) for(var/datum/stored_item/stack/I as anything in item_records) - if(istype(O, I.item_path)) // Typecheck should evaluate material-specific subtype + if(O.type == I.item_path) // Typecheck should evaluate material-specific subtype return I - return null \ No newline at end of file + return null diff --git a/code/modules/persistence/storage/smartfridge.dm b/code/modules/persistence/storage/smartfridge.dm index 6d49000ee1..46dce07ed8 100644 --- a/code/modules/persistence/storage/smartfridge.dm +++ b/code/modules/persistence/storage/smartfridge.dm @@ -29,6 +29,20 @@ max_storage = 150 stacks_go_missing = TRUE +/datum/persistent/storage/smartfridge/sheet_storage/variable_max + name = "variable max storage" + max_storage = list( + /obj/item/stack/material/steel = 150, + /obj/item/stack/material/glass = 150, + /obj/item/stack/material/copper = 150, + /obj/item/stack/material/wood = 150, + /obj/item/stack/material/plastic = 150, + /obj/item/stack/material/phoron = 100, + /obj/item/stack/material/plasteel = 50, + /obj/item/stack/material/cardboard = 50, + "default" = 10 + ) + /datum/persistent/storage/smartfridge/sheet_storage/generate_items(var/list/L) . = list() for(var/obj/item/stack/material/S as anything in L) @@ -95,4 +109,4 @@ var/obj/item/reagent_containers/food/snacks/grown/G = I.instances[1] if(!istype(G)) continue - .[G.plantname] = I.get_amount() // Store the seed type, because that's what's used to generate the fruit \ No newline at end of file + .[G.plantname] = I.get_amount() // Store the seed type, because that's what's used to generate the fruit diff --git a/code/modules/persistence/storage/storage.dm b/code/modules/persistence/storage/storage.dm index 58b23a6ce9..a1b16e39b1 100644 --- a/code/modules/persistence/storage/storage.dm +++ b/code/modules/persistence/storage/storage.dm @@ -2,7 +2,7 @@ name = "storage" entries_expire_at = 1 has_admin_data = TRUE - + // Don't use these for storage persistence. If someone takes some sheets out and puts them back in mixed in with // new sheets, how do you know the age of the stack? If you want sheets to 'decay', see go_missing_chance entries_decay_at = 0 @@ -28,15 +28,21 @@ var/list/item_list = get_storage_list(entry) var/list/storage_list = list() for(var/item in item_list) - storage_list[item] = min(stored, storage_list[item] + item_list[item]) // Can't store more than max_storage - - // stored gets reduced by qty stored, if greater than stored, - // previous assignment will handle overage, and we set to 0 - if(!store_per_type) - stored = max(stored - item_list[item], 0) - + if(islist(max_storage)) + if(!is_path_in_list(item, stored)) + stored[item] = stored["default"] + storage_list[item] = min(stored[item], storage_list[item] + item_list[item]) // Can't store more than max_storage + + else + storage_list[item] = min(stored, storage_list[item] + item_list[item]) // Can't store more than max_storage + + // stored gets reduced by qty stored, if greater than stored, + // previous assignment will handle overage, and we set to 0 + if(!store_per_type) + stored = max(stored - item_list[item], 0) + LAZYADDASSOC(., "items", storage_list) - + // Usage: returns list with structure: // list( // [type1] = [stored_quantity],