From 04f90b749f6a72dfdfa097b41aa8c53c3032e975 Mon Sep 17 00:00:00 2001
From: qweq12yt <45515587+qweq12yt@users.noreply.github.com>
Date: Tue, 30 Mar 2021 12:33:23 -0300
Subject: [PATCH] fixes material crates not shipping
---
.../closets/secure/secure_closets.dm | 47 +++++++++++++++++++
code/modules/cargo/packs.dm | 5 +-
code/modules/cargo/packs/materials.dm | 16 +++----
code/modules/cargo/packs/misc.dm | 2 +-
code/modules/shuttle/supply.dm | 1 -
5 files changed, 60 insertions(+), 11 deletions(-)
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 0c314d988c..5b78ca323c 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
@@ -19,3 +19,50 @@
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"
+ 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
+ ///Department of the person buying the crate if buying via the NIRN app.
+ var/datum/bank_account/department/department_account
+ ///Is the secure crate opened or closed?
+ var/privacy_lock = TRUE
+ ///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)
+ . = ..()
+ . += "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)
+ . = ..()
+ 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)
+ if(privacy_lock)
+ if(!broken)
+ var/obj/item/card/id/id_card = user.get_idcard(TRUE)
+ if(id_card)
+ if(id_card.registered_account)
+ if(id_card.registered_account == buyer_account || (department_purchase && (id_card.registered_account?.account_job?.paycheck_department) == (department_account.department_id)))
+ if(iscarbon(user))
+ add_fingerprint(user)
+ locked = !locked
+ user.visible_message("[user] unlocks [src]'s privacy lock.",
+ "You unlock [src]'s privacy lock.")
+ privacy_lock = FALSE
+ update_icon()
+ else if(!silent)
+ to_chat(user, "Bank account does not match with buyer!")
+ else if(!silent)
+ to_chat(user, "No linked bank account detected!")
+ else if(!silent)
+ to_chat(user, "No ID detected!")
+ else if(!silent)
+ to_chat(user, "[src] is broken!")
+ else ..()
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 7ec3a775a5..db722436ca 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -21,7 +21,10 @@
/datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account)
var/obj/structure/closet/crate/C
if(paying_account)
- C = new /obj/structure/closet/crate/secure/owned(A, paying_account)
+ if(ispath(crate_type, /obj/structure/closet/secure_closet/goodies))
+ C = new /obj/structure/closet/secure_closet/goodies/owned(A, paying_account)
+ else
+ C = new /obj/structure/closet/crate/secure/owned(A, paying_account)
C.name = "[crate_name] - Purchased by [paying_account.account_holder]"
else
C = new crate_type(A)
diff --git a/code/modules/cargo/packs/materials.dm b/code/modules/cargo/packs/materials.dm
index 86c6b114f0..8b063c1a30 100644
--- a/code/modules/cargo/packs/materials.dm
+++ b/code/modules/cargo/packs/materials.dm
@@ -14,56 +14,56 @@
//////////////////////////////////////////////////////////////////////////////
/datum/supply_pack/materials/cardboard50
- goody = PACK_GOODY_PUBLIC
+ crate_type = /obj/structure/closet/secure_closet/goodies
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
- goody = PACK_GOODY_PUBLIC
+ crate_type = /obj/structure/closet/secure_closet/goodies
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
- goody = PACK_GOODY_PUBLIC
+ crate_type = /obj/structure/closet/secure_closet/goodies
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
- goody = PACK_GOODY_PUBLIC
+ crate_type = /obj/structure/closet/secure_closet/goodies
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
- goody = PACK_GOODY_PUBLIC
+ crate_type = /obj/structure/closet/secure_closet/goodies
name = "50 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
- goody = PACK_GOODY_PUBLIC
+ crate_type = /obj/structure/closet/secure_closet/goodies
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/wood50
- goody = PACK_GOODY_PUBLIC
+ crate_type = /obj/structure/closet/secure_closet/goodies
name = "50 Wood Planks"
desc = "Turn cargo's boring metal groundwork into beautiful panelled flooring and much more with fifty 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
- goody = PACK_GOODY_PUBLIC
+ crate_type = /obj/structure/closet/secure_closet/goodies
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 985c827e65..d72ee231a8 100644
--- a/code/modules/cargo/packs/misc.dm
+++ b/code/modules/cargo/packs/misc.dm
@@ -370,7 +370,7 @@
//////////////////////////////////////////////////////////////////////////////
/datum/supply_pack/misc/carpet
- goody = PACK_GOODY_PUBLIC
+ crate_type = /obj/structure/closet/secure_closet/goodies
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 899e2b2f6f..60dfdd53c5 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -128,7 +128,6 @@ 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
-
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
if(!empty_turfs.len)
break