diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 5b78ca323c..4266f006ec 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -13,15 +13,16 @@ return 0 . = ..() -// Exists to work around the minimum 700 cr price for goodies / small items -/obj/structure/closet/secure_closet/goodies +// Exists to work around the minimum 700 cr price for goodies / small items / materials +/obj/structure/closet/secure_closet/cargo + name = "cargo locker" icon_state = "goodies" desc = "A sturdier card-locked storage unit used for bulky shipments." max_integrity = 500 // Same as crates. melee_min_damage = 25 // Idem. -/obj/structure/closet/secure_closet/goodies/owned - name = "private locker" +/obj/structure/closet/secure_closet/cargo/owned + name = "private cargo locker" desc = "A locker designed to only open for who purchased its contents." ///Account of the person buying the crate if private purchasing. var/datum/bank_account/buyer_account @@ -32,18 +33,18 @@ ///Is the crate being bought by a person, or a budget card? var/department_purchase = FALSE -/obj/structure/closet/secure_closet/goodies/owned/examine(mob/user) +/obj/structure/closet/secure_closet/cargo/owned/examine(mob/user) . = ..() . += "It's locked with a privacy lock, and can only be unlocked by the buyer's ID." -/obj/structure/closet/secure_closet/goodies/owned/Initialize(mapload, datum/bank_account/_buyer_account) +/obj/structure/closet/secure_closet/cargo/owned/Initialize(mapload, datum/bank_account/_buyer_account) . = ..() buyer_account = _buyer_account if(istype(buyer_account, /datum/bank_account/department)) department_purchase = TRUE department_account = buyer_account -/obj/structure/closet/secure_closet/goodies/owned/togglelock(mob/living/user, silent) +/obj/structure/closet/secure_closet/cargo/owned/togglelock(mob/living/user, silent) if(privacy_lock) if(!broken) var/obj/item/card/id/id_card = user.get_idcard(TRUE) diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index ad9fa2018e..c2c7897f0f 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -96,7 +96,7 @@ var/static/list/blacklisted_error = typecacheof(list( /obj/structure/closet/crate/secure, /obj/structure/closet/crate/large, - /obj/structure/closet/secure_closet/goodies + /obj/structure/closet/secure_closet/cargo )) if(is_type_in_list(container, blacklisted_error)) P.errors &= ~MANIFEST_ERROR_ITEM diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 3e3aeff592..13f1e77441 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -22,8 +22,8 @@ /datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account) var/obj/structure/closet/crate/C if(paying_account) - if(ispath(crate_type, /obj/structure/closet/secure_closet/goodies)) // lets ensure private orders don't come in crates when the original one comes in lockers - C = new /obj/structure/closet/secure_closet/goodies/owned(A, paying_account) // that would lead to infinite money exploits + if(ispath(crate_type, /obj/structure/closet/secure_closet/cargo)) // lets ensure private orders don't come in crates when the original one comes in lockers + C = new /obj/structure/closet/secure_closet/cargo/owned(A, paying_account) // that would lead to infinite money exploits else C = new /obj/structure/closet/crate/secure/owned(A, paying_account) C.name = "[crate_name] - Purchased by [paying_account.account_holder]" diff --git a/code/modules/cargo/packs/materials.dm b/code/modules/cargo/packs/materials.dm index 94f14fb503..90629706b5 100644 --- a/code/modules/cargo/packs/materials.dm +++ b/code/modules/cargo/packs/materials.dm @@ -14,56 +14,56 @@ ////////////////////////////////////////////////////////////////////////////// /datum/supply_pack/materials/cardboard50 - crate_type = /obj/structure/closet/secure_closet/goodies + crate_type = /obj/structure/closet/secure_closet/cargo name = "50 Cardboard Sheets" desc = "Create a bunch of boxes." cost = 300 //thrice their export value contains = list(/obj/item/stack/sheet/cardboard/fifty) /datum/supply_pack/materials/glass50 - crate_type = /obj/structure/closet/secure_closet/goodies + crate_type = /obj/structure/closet/secure_closet/cargo name = "50 Glass Sheets" desc = "Let some nice light in with fifty glass sheets!" cost = 300 //double their export value contains = list(/obj/item/stack/sheet/glass/fifty) /datum/supply_pack/materials/metal50 - crate_type = /obj/structure/closet/secure_closet/goodies + crate_type = /obj/structure/closet/secure_closet/cargo name = "50 Metal Sheets" desc = "Any construction project begins with a good stack of fifty metal sheets!" cost = 300 //double their export value contains = list(/obj/item/stack/sheet/metal/fifty) /datum/supply_pack/materials/plasteel20 - crate_type = /obj/structure/closet/secure_closet/goodies + crate_type = /obj/structure/closet/secure_closet/cargo name = "20 Plasteel Sheets" desc = "Reinforce the station's integrity with twenty plasteel sheets!" cost = 4000 contains = list(/obj/item/stack/sheet/plasteel/twenty) -/datum/supply_pack/materials/plastic50 - crate_type = /obj/structure/closet/secure_closet/goodies - name = "50 Plastic Sheets" +/datum/supply_pack/materials/plastic20 + crate_type = /obj/structure/closet/secure_closet/cargo + name = "20 Plastic Sheets" desc = "Build a limitless amount of toys with fifty plastic sheets!" cost = 200 // double their export contains = list(/obj/item/stack/sheet/plastic/twenty) /datum/supply_pack/materials/sandstone30 - crate_type = /obj/structure/closet/secure_closet/goodies + crate_type = /obj/structure/closet/secure_closet/cargo name = "30 Sandstone Blocks" desc = "Neither sandy nor stoney, these thirty blocks will still get the job done." cost = 150 // five times their export contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty) /datum/supply_pack/materials/wood20 - crate_type = /obj/structure/closet/secure_closet/goodies + crate_type = /obj/structure/closet/secure_closet/cargo name = "20 Wood Planks" desc = "Turn cargo's boring metal groundwork into beautiful panelled flooring and much more with twenty wooden planks!" cost = 400 // 6-7 planks shy from having equal import/export prices contains = list(/obj/item/stack/sheet/mineral/wood/twenty) /datum/supply_pack/materials/rcdammo - crate_type = /obj/structure/closet/secure_closet/goodies + crate_type = /obj/structure/closet/secure_closet/cargo name = "Large RCD ammo Single-Pack" desc = "A single large compressed RCD matter pack, to help with any holes or projects people might be working on." cost = 600 diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm index d72ee231a8..91663dbe0f 100644 --- a/code/modules/cargo/packs/misc.dm +++ b/code/modules/cargo/packs/misc.dm @@ -370,7 +370,7 @@ ////////////////////////////////////////////////////////////////////////////// /datum/supply_pack/misc/carpet - crate_type = /obj/structure/closet/secure_closet/goodies + crate_type = /obj/structure/closet/secure_closet/cargo name = "Classic Carpet Single-Pack" desc = "Plasteel floor tiles getting on your nerves? This 50 units stack of extra soft carpet will tie any room together." cost = 200 diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 74ac0fc166..e62c9076f0 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -128,7 +128,8 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( var/value = 0 var/purchases = 0 var/list/goodies_by_buyer = list() // if someone orders more than GOODY_FREE_SHIPPING_MAX goodies, we upcharge to a normal crate so they can't carry around 20 combat shotties - // var/list/lockers_by_buyer = list() // TODO, combine orders that come in lockers into a single locker to not crowd the shuttle + var/list/lockers_by_buyer = list() // used to combine orders that come in lockers into a single locker to not crowd the shuttle + for(var/datum/supply_order/SO in SSshuttle.shoppinglist) if(!empty_turfs.len) break @@ -149,11 +150,15 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( D.bank_card_talk("Goody order size exceeds free shipping limit: Assessing [CRATE_TAX] credit S&H fee.") else D = SSeconomy.get_dep_account(ACCOUNT_CAR) + if(D) if(!D.adjust_money(-price)) if(SO.paying_account) D.bank_card_talk("Cargo order #[SO.id] rejected due to lack of funds. Credits required: [price]") continue + else if(ispath(SO.pack.crate_type, /obj/structure/closet/secure_closet/cargo)) + LAZYADD(lockers_by_buyer[D], SO) + if(SO.paying_account) if(SO.pack.goody) @@ -166,7 +171,7 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( SSshuttle.orderhistory += SO QDEL_NULL(SO.applied_coupon) - if(!SO.pack.goody) //we handle goody crates below + if(!SO.pack.goody && !ispath(SO.pack.crate_type, /obj/structure/closet/secure_closet/cargo)) //we handle goody crates and material closets below SO.generate(pick_n_take(empty_turfs)) SSblackbox.record_feedback("nested tally", "cargo_imports", 1, list("[SO.pack.cost]", "[SO.pack.name]")) @@ -200,6 +205,33 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( misc_contents[buyer] += item misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] " + + // mat locker test + for(var/D in lockers_by_buyer) + var/list/buying_account_orders = lockers_by_buyer[D] + + var/buyer + + if(!istype(D, /datum/bank_account/department)) // department accounts break the secure closet for some reason + var/obj/structure/closet/secure_closet/cargo/owned/our_closet = new /obj/structure/closet/secure_closet/cargo/owned(pick_n_take(empty_turfs)) + var/datum/bank_account/buying_account = D + buyer = buying_account.account_holder + our_closet.buyer_account = buying_account + our_closet.name = "private cargo locker - purchased by [buyer]" + miscboxes[buyer] = our_closet + else + var/obj/structure/closet/secure_closet/cargo/our_closet = new /obj/structure/closet/secure_closet/cargo(pick_n_take(empty_turfs)) + buyer = "Cargo" + miscboxes[buyer] = our_closet + + misc_contents[buyer] = list() + for(var/O in buying_account_orders) + var/datum/supply_order/our_order = O + for(var/item in our_order.pack.contains) + misc_contents[buyer] += item + misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] " + + for(var/I in miscboxes) var/datum/supply_order/SO = new/datum/supply_order() SO.id = misc_order_num[I]