Codeside Cargo Refactor (#20030)

**NOTE TO SYSADMINS: See "SQL Details" section below for information on
SQL modifications.**

Moves the data containing cargo items (i.e. the ones you order from ops
and get in the cargo shuttle) from the online database to the codebase.
Everything from suppliers to categories to individual items is now
code-side and editable by developers/contributors.

Refactors cargo items to use `singletons` instead of `datums` for
`cargo_supplier`, `cargo_category`, and `cargo_item`. Multiple-instnace
things like cargo_orders, etc. still use `datums`.

Fixed a bunch of strange discrepancies in categories, suppliers, and
pricing for various cargo items. I did a little bit, but it's exhausting
to go through all of it right now.

Clicking the 'Details' button on the Cargo Order app now actually gives
you details instead of bluescreening. Also added some UI elements to the
Cargo Order app - Cargo Control and Delivery remain untouched.

Overhauled the Cargo Order console TGUI window. It now has tabs on the
left, displays restricted access, supplier information, and boasts
search functionality.

### SQL Details
<details>
<summary>SQL Details [Click to Expand]</summary>

The following SQL tables should be deleted or deprecated from the server
database, as they are no longer in use:

- `ss13_cargo_items`
- `ss13_cargo_categories`
- `ss13_cargo_suppliers`

The included migration file, `V011__codeside_cargo`, creates a new table
`ss13_cargo_item_orderlog` to the DB. This **replaces**
`ss13_cargo_orderlog_items`. Because of this,
`ss13_cargo_orderlog_items` is deprecated and should either be deleted
or locked & preserved for logging purposes.

</details>

## Screenshots


![image](https://github.com/user-attachments/assets/79129923-1fb6-4cee-ac8d-5505a52270a4)

![image](https://github.com/user-attachments/assets/a323be35-8ce6-4ec4-98f7-ee701d0931a3)

![image](https://github.com/user-attachments/assets/5ddb02c5-152f-4715-b2da-20903fa11c93)

![image](https://github.com/user-attachments/assets/420e45b0-6a9f-4420-beb8-a2c8423a5be4)

![image](https://github.com/user-attachments/assets/114f4755-ee51-41e6-8670-07aacc5326ae)

---------

Signed-off-by: naut <55491249+nauticall@users.noreply.github.com>
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
This commit is contained in:
naut
2025-03-04 18:18:00 +00:00
committed by GitHub
co-authored by Fluffy
parent 14d7425cee
commit 55f4e12614
32 changed files with 7869 additions and 583 deletions
+236
View File
@@ -0,0 +1,236 @@
/singleton/cargo_item/stokcubebox
category = "science"
name = "stok cube box"
supplier = "nanotrasen"
description = "Drymate brand stok cubes, shipped from Moghes. Just add water!"
price = 60
items = list(
/obj/item/storage/box/monkeycubes/stokcubes
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/vkrexicubebox
category = "science"
name = "vkrexi cube box"
supplier = "nanotrasen"
description = "Drymate brand vkrexi cubes. Just add water!"
price = 60
items = list(
/obj/item/storage/box/monkeycubes/vkrexicubes
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/farwacubebox
category = "science"
name = "farwa cube box"
supplier = "nanotrasen"
description = "Drymate brand farwa cubes, shipped from Adhomai. Just add water!"
price = 55
items = list(
/obj/item/storage/box/monkeycubes/farwacubes
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/monkeycubebox
category = "science"
name = "monkey cube box"
supplier = "nanotrasen"
description = "Drymate brand monkey cubes. Just add water!"
price = 60
items = list(
/obj/item/storage/box/monkeycubes
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/neaeracubebox
category = "science"
name = "neaera cube box"
supplier = "nanotrasen"
description = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!"
price = 65
items = list(
/obj/item/storage/box/monkeycubes/neaeracubes
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/hazmathood
category = "science"
name = "hazmat hood"
supplier = "nanotrasen"
description = "This hood protects against biological hazards."
price = 105
items = list(
/obj/item/clothing/head/hazmat/general
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/hazmatsuit
category = "science"
name = "hazmat suit"
supplier = "nanotrasen"
description = "This suit protects against biological hazards."
price = 105
items = list(
/obj/item/clothing/suit/hazmat/general
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/igniter
category = "science"
name = "igniter"
supplier = "nanotrasen"
description = "A small electronic device able to ignite combustable substances."
price = 23
items = list(
/obj/item/device/assembly/igniter
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/mindshieldfiringpin
category = "science"
name = "mindshield firing pin"
supplier = "nanotrasen"
description = "This implant - locked firing pin authorizes the weapon for only loyalty - implanted users."
price = 2000
items = list(
/obj/item/device/firing_pin/implant/loyalty
)
access = ACCESS_HEADS
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/protohuman
category = "science"
name = "Proto-Human"
supplier = "zeng_hu"
description = "A human body, vat-grown and artificially raised without a functional brain. The everyman's relatively-ethical solution to organ harvesting."
price = 2300
items = list(
/mob/living/carbon/human
)
access = ACCESS_RESEARCH
container_type = "bodybag"
groupable = FALSE
spawn_amount = 1
/singleton/cargo_item/proto_skrell
category = "science"
name = "Proto-Skrell"
supplier = "zeng_hu"
description = "A Skrell body, vat-grown and artificially raised without a functional brain. The everyman's relatively-ethical solution to organ harvesting."
price = 4000
items = list(
/mob/living/carbon/human/skrell
)
access = ACCESS_RESEARCH
container_type = "bodybag"
groupable = FALSE
spawn_amount = 1
/singleton/cargo_item/proto_tajara
category = "science"
name = "Proto-Tajara"
supplier = "zeng_hu"
description = "A Tajara body, vat-grown and artificially raised without a functional brain. The everyman's relatively-ethical solution to organ harvesting."
price = 1800
items = list(
/mob/living/carbon/human/tajaran
)
access = ACCESS_RESEARCH
container_type = "bodybag"
groupable = FALSE
spawn_amount = 1
/singleton/cargo_item/proto_unathi
category = "science"
name = "Proto-Unathi"
supplier = "zeng_hu"
description = "An Unathi body, vat-grown and artificially raised without a functional brain. The everyman's relatively-ethical solution to organ harvesting."
price = 2000
items = list(
/mob/living/carbon/human/unathi
)
access = ACCESS_RESEARCH
container_type = "bodybag"
groupable = FALSE
spawn_amount = 1
/singleton/cargo_item/blankvaurcadrone
category = "science"
name = "Blank Vaurca Drone"
supplier = "zora"
description = "A surplus Vaurca drone body. Thousands of these are thrown at the wayside every day. The everyman's relatively-ethical solution to organ harvesting."
price = 300
items = list(
/mob/living/carbon/human/type_a/cargo
)
access = ACCESS_RESEARCH
container_type = "bodybag"
groupable = FALSE
spawn_amount = 1
/singleton/cargo_item/proximitysensor
category = "science"
name = "proximity sensor"
supplier = "nanotrasen"
description = "Used for scanning and alerting when someone enters a certain proximity."
price = 75
items = list(
/obj/item/device/assembly/prox_sensor
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/testrange_firingpin
category = "science"
name = "test - range firing pin"
supplier = "nanotrasen"
description = "This safety firing pin allows weapons to be fired within proximity to a firing range."
price = 500
items = list(
/obj/item/device/firing_pin/test_range
)
access = ACCESS_RESEARCH
container_type = "crate"
groupable = TRUE
spawn_amount = 1
/singleton/cargo_item/timer
category = "science"
name = "timer"
supplier = "nanotrasen"
description = "Used to time things. Works well with contraptions which has to count down. Tick tock."
price = 75
items = list(
/obj/item/device/assembly/timer
)
access = 0
container_type = "crate"
groupable = TRUE
spawn_amount = 1