From 328c56be116cf422afacbbeab6c784acc94da878 Mon Sep 17 00:00:00 2001 From: FabianK3 <21039694+FabianK3@users.noreply.github.com> Date: Tue, 5 May 2026 03:25:06 +0200 Subject: [PATCH] Arc feature - Persistent supplies (#22368) # Summary This PR adds persistent supply packages and a specialized charge card for lore arcs. Both can only be created using admin permissions and are not intended for general availability. ## Changes - Added a new package type, persistent supplies. - Abstracted existing orion deliveries for shared code. - Added a new persistent charge card variant. - Added exceptions and specific logging for new card variant. ## Notes Depends on PR #22367. Specific merge order not relevant. Icons by @Fyniiy. Relevant information for the current arc can be found on the forum thread [Operation Deep Dive](https://forums.aurorastation.org/topic/22921-all-crew-thread-operation-deep-dive/). --------- Signed-off-by: FabianK3 <21039694+FabianK3@users.noreply.github.com> Co-authored-by: Copilot Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com> --- code/datums/components/commissaryShop.dm | 2 + code/game/machinery/computer/slotmachine.dm | 3 + code/game/machinery/vending/_vending.dm | 6 +- code/modules/cargo/delivery/backpack.dm | 12 +- code/modules/cargo/delivery/package.dm | 126 +++++++++++------- code/modules/cargo/delivery/receptacle.dm | 12 +- code/modules/economy/ATM.dm | 3 + code/modules/economy/EFTPOS.dm | 2 + code/modules/economy/cash.dm | 39 +++++- .../programs/civilian/cargo_delivery.dm | 5 +- ...fabiank3-arc-feature-persistent-supply.yml | 7 + icons/obj/cash.dmi | Bin 1682 -> 1841 bytes icons/obj/orion_delivery.dmi | Bin 4653 -> 0 bytes icons/obj/package.dmi | Bin 0 -> 6436 bytes .../orion/orion_automated_station.dmm | 24 ++-- .../uueoaesa/tret/tret_industrial_complex.dmm | 6 +- maps/away/ships/golden_deep/golden_deep.dmm | 12 +- .../ships/himeo/himeo_patrol_ship_submaps.dmm | 8 +- maps/away/ships/lone_spacer/lone_spacer.dmm | 8 +- .../ships/lone_spacer/lone_spacer_submaps.dmm | 4 +- .../orion_express_ship/orion_express_ship.dmm | 18 +-- .../ships/orion/orion_miner/orion_miner.dmm | 8 +- maps/away/ships/scc/scc_scout_ship.dmm | 12 +- .../ships/tramp_freighter/tramp_freighter.dmm | 12 +- .../exoplanets/delivery/delivery_site.dmm | 4 +- 25 files changed, 209 insertions(+), 124 deletions(-) create mode 100644 html/changelogs/fabiank3-arc-feature-persistent-supply.yml delete mode 100644 icons/obj/orion_delivery.dmi create mode 100644 icons/obj/package.dmi diff --git a/code/datums/components/commissaryShop.dm b/code/datums/components/commissaryShop.dm index 6227cdcea27..692a748e5db 100644 --- a/code/datums/components/commissaryShop.dm +++ b/code/datums/components/commissaryShop.dm @@ -183,6 +183,8 @@ if(transaction_amount <= E.worth) SSeconomy.charge_to_account(SSeconomy.get_department_account(destinationact)?.account_number, E.owner_name, transaction_purpose, transaction_terminal, transaction_amount) E.worth -= transaction_amount + if(istype(E, /obj/item/spacecash/ewallet/persistent_charge_card)) + log_and_message_admins("[E] used for a transaction at [src] with amount [transaction_amount]. Remaining balance: [E.worth]", user, get_turf(src)) end_transaction(user) else if (transaction_amount > E.worth) diff --git a/code/game/machinery/computer/slotmachine.dm b/code/game/machinery/computer/slotmachine.dm index 152c1d09659..6c0ec3b19c6 100644 --- a/code/game/machinery/computer/slotmachine.dm +++ b/code/game/machinery/computer/slotmachine.dm @@ -98,6 +98,9 @@ return TRUE else if(istype(attacking_item, /obj/item/spacecash)) if(paymode == CREDITCHIP) + if(istype(attacking_item, /obj/item/spacecash/ewallet/persistent_charge_card)) + to_chat(user, SPAN_WARNING("This machine does not accept this kind of card!")) + return TRUE var/obj/item/spacecash/H = attacking_item to_chat(user, SPAN_NOTICE("You insert [H.worth]电 into [src]'s slot!")) playsound(loc, 'sound/arcade/sloto_token.ogg', 10, 1, extrarange = -3, falloff_distance = 10, required_asfx_toggles = ASFX_ARCADE) diff --git a/code/game/machinery/vending/_vending.dm b/code/game/machinery/vending/_vending.dm index 36e64ce7199..03df64f8a1c 100644 --- a/code/game/machinery/vending/_vending.dm +++ b/code/game/machinery/vending/_vending.dm @@ -402,7 +402,7 @@ handled = 1 else if (istype(attacking_item, /obj/item/spacecash/ewallet)) var/obj/item/spacecash/ewallet/C = attacking_item - paid = pay_with_ewallet(C) + paid = pay_with_ewallet(C, user) handled = 1 else if (istype(attacking_item, /obj/item/spacecash)) var/obj/item/spacecash/C = attacking_item @@ -535,7 +535,7 @@ * Takes payment for whatever is the currently_vending item. Returns 1 if * successful, 0 if failed. */ -/obj/machinery/vending/proc/pay_with_ewallet(var/obj/item/spacecash/ewallet/wallet) +/obj/machinery/vending/proc/pay_with_ewallet(var/obj/item/spacecash/ewallet/wallet, var/mob/user) visible_message("\The [usr] swipes \the [wallet] through \the [src].") playsound(src.loc, 'sound/machines/id_swipe.ogg', 50, 1) if(currently_vending.price > wallet.worth) @@ -544,6 +544,8 @@ return 0 else wallet.worth -= currently_vending.price + if(istype(wallet, /obj/item/spacecash/ewallet/persistent_charge_card)) + log_and_message_admins("[wallet] used for a transaction at [src] with amount [currently_vending.price]. Remaining balance: [wallet.worth]", user, get_turf(src)) credit_purchase("[wallet.owner_name] (chargecard)") return 1 diff --git a/code/modules/cargo/delivery/backpack.dm b/code/modules/cargo/delivery/backpack.dm index 5bc144e1562..e10739d2d7d 100644 --- a/code/modules/cargo/delivery/backpack.dm +++ b/code/modules/cargo/delivery/backpack.dm @@ -1,7 +1,7 @@ /obj/item/cargo_backpack name = "cargo pack" desc = "A robust set of rigs and buckles that allows the wearer to carry two additional Orion Express delivery packages on their back." - icon = 'icons/obj/orion_delivery.dmi' + icon = 'icons/obj/package.dmi' icon_state = "package_pack" item_state = "package_pack" contained_sprite = TRUE @@ -41,7 +41,7 @@ var/list/data = list() data["cargo_pack_details"] = list() - for(var/obj/item/cargo_package/package in contained_packages) + for(var/obj/item/package/delivery/package in contained_packages) var/delivery_site = "Unknown" if(package.delivery_point_sector) var/obj/effect/overmap/visitable/delivery_sector = package.delivery_point_sector.resolve() @@ -82,7 +82,7 @@ return for(var/package_index = 1 to length(contained_packages)) - var/obj/item/cargo_package/package = contained_packages[package_index] + var/obj/item/package/delivery/package = contained_packages[package_index] var/image/package_tag = image(icon, icon_state = "package_pack_[package_index]_tag") package_tag.color = package.accent_color mob_overlay.AddOverlays(package_tag) @@ -110,7 +110,7 @@ to_chat(user, SPAN_WARNING("Your other hand is occupied!")) return user.visible_message("[user] unloads a package from \the [src]!", SPAN_NOTICE("You unload a package from \the [src]!")) - var/obj/item/cargo_package/package = contained_packages[1] + var/obj/item/package/delivery/package = contained_packages[1] user.put_in_hands(package) if(user.species.mob_size < 12) package.wield(user) @@ -121,11 +121,11 @@ if(!ishuman(user)) return ..() if(user.back != src) - if(istype(attacking_item, /obj/item/cargo_package)) + if(istype(attacking_item, /obj/item/package/delivery)) to_chat(user, SPAN_WARNING("Put \the [src] on your back before you load packages onto it!")) return return ..() - if(!istype(attacking_item, /obj/item/cargo_package)) + if(!istype(attacking_item, /obj/item/package/delivery)) return ..() if(LAZYLEN(contained_packages) >= 2) diff --git a/code/modules/cargo/delivery/package.dm b/code/modules/cargo/delivery/package.dm index 6b4b3717352..0ce4be6998b 100644 --- a/code/modules/cargo/delivery/package.dm +++ b/code/modules/cargo/delivery/package.dm @@ -1,4 +1,42 @@ -/obj/item/cargo_package +ABSTRACT_TYPE(/obj/item/package) + name = "package" + icon = 'icons/obj/package.dmi' + contained_sprite = TRUE + update_icon_on_init = TRUE + has_accents = TRUE + w_class = WEIGHT_CLASS_HUGE + force = 15 + slowdown = 0.5 + +/obj/item/package/proc/wield(var/mob/living/carbon/human/user) + var/obj/A = user.get_inactive_hand() + if(A) + to_chat(user, SPAN_WARNING("Your other hand is occupied!")) + return + item_state += "_wielded" + var/obj/item/offhand/O = new(user) + O.name = "[initial(name)] - offhand" + O.desc = "Your second grip on \the [initial(name)]." + user.put_in_inactive_hand(O) + +/obj/item/package/dropped(mob/user) + ..() + item_state = initial(item_state) + if(user) + var/obj/item/offhand/O = user.get_inactive_hand() + if(istype(O)) + O.unwield() + +/obj/item/package/can_swap_hands(var/mob/user) + var/obj/item/offhand/O = user.get_inactive_hand() + if(istype(O)) + return FALSE + return TRUE + +/obj/item/package/too_heavy_to_throw() + return TRUE + +/obj/item/package/delivery name = "cargo package" desc = "\ An Orion Express cargo package. \ @@ -8,17 +46,8 @@ This package makes use of the small-scale shipping network of Orion Express. \ It is a common sight all over the Spur, where Orion Express services depend on ordinary people and ships picking up and delivering packages for each other, \ with Orion Express only delivering to automated stations and other distribution points." - icon = 'icons/obj/orion_delivery.dmi' icon_state = "express_package" item_state = "express_package" - contained_sprite = TRUE - update_icon_on_init = TRUE - has_accents = TRUE - - w_class = WEIGHT_CLASS_HUGE - force = 15 - - slowdown = 0.5 var/delivery_point_id = "" var/datum/weakref/delivery_point_sector @@ -32,12 +61,12 @@ /// If true, pay_amount goes into Operations Account var/pays_horizon_account = TRUE -/obj/item/cargo_package/mechanics_hints(mob/user, distance, is_adjacent) +/obj/item/package/delivery/mechanics_hints(mob/user, distance, is_adjacent) . += ..() . += "You can deliver this package to a cargo delivery point." . += "An additional 2% is added to your account on delivery, or paid to you directly. Can be loaded into a cargo pack." -/obj/item/cargo_package/feedback_hints(mob/user, distance, is_adjacent) +/obj/item/package/delivery/feedback_hints(mob/user, distance, is_adjacent) . += ..() if(delivery_point_id) // if name not already set by cargo receptacle, acquire the sector name instead @@ -49,7 +78,7 @@ . += SPAN_NOTICE("The label on the package reads: SITE: [delivery_site] | COORD: [delivery_point_coordinates] | ID: [delivery_point_id]") . += SPAN_NOTICE("The price tag on the package reads: [pay_amount]电.") -/obj/item/cargo_package/Initialize(mapload, obj/structure/cargo_receptacle/delivery_point) +/obj/item/package/delivery/Initialize(mapload, obj/structure/cargo_receptacle/delivery_point) . = ..() pay_amount = rand(4, 7) * 100 if(prob(3)) @@ -58,7 +87,7 @@ setup_delivery_point(delivery_point) accent_color = pick(COLOR_RED, COLOR_AMBER, COLOR_PINK, COLOR_YELLOW, COLOR_LIME) -/obj/item/cargo_package/proc/setup_delivery_point(var/obj/structure/cargo_receptacle/delivery_point) +/obj/item/package/delivery/proc/setup_delivery_point(var/obj/structure/cargo_receptacle/delivery_point) associated_delivery_point = WEAKREF(delivery_point) delivery_point_id = delivery_point.delivery_id delivery_point_sector = delivery_point.delivery_sector @@ -67,7 +96,7 @@ delivery_point_coordinates = "[delivery_point.x]-[delivery_point.y]" pay_amount = pay_amount * delivery_point.payment_modifier -/obj/item/cargo_package/do_additional_pickup_checks(var/mob/living/carbon/human/user) +/obj/item/package/delivery/do_additional_pickup_checks(var/mob/living/carbon/human/user) if(!ishuman(user)) return FALSE @@ -92,58 +121,57 @@ return TRUE return FALSE -/obj/item/cargo_package/proc/wield(var/mob/living/carbon/human/user) - var/obj/A = user.get_inactive_hand() - if(A) - to_chat(user, SPAN_WARNING("Your other hand is occupied!")) - return - item_state += "_wielded" - var/obj/item/offhand/O = new(user) - O.name = "[initial(name)] - offhand" - O.desc = "Your second grip on \the [initial(name)]." - user.put_in_inactive_hand(O) - -/obj/item/cargo_package/dropped(mob/user) - ..() - item_state = initial(item_state) - if(user) - var/obj/item/offhand/O = user.get_inactive_hand() - if(istype(O)) - O.unwield() - -/obj/item/cargo_package/can_swap_hands(var/mob/user) - var/obj/item/offhand/O = user.get_inactive_hand() - if(istype(O)) - return FALSE - return TRUE - -/obj/item/cargo_package/too_heavy_to_throw() - return TRUE - - -/obj/item/cargo_package/offship +/obj/item/package/delivery/offship pays_horizon_account = FALSE /// Whether this package is guaranteed to deliver to the horizon or not var/horizon_delivery = FALSE -/obj/item/cargo_package/offship/feedback_hints(mob/user, distance, is_adjacent) +/obj/item/package/delivery/offship/feedback_hints(mob/user, distance, is_adjacent) . += ..() if(!delivery_point_id) . += SPAN_NOTICE("Delivery site still being calculated, please check back later!") -/obj/item/cargo_package/offship/Initialize(mapload, obj/structure/cargo_receptacle/delivery_point) +/obj/item/package/delivery/offship/Initialize(mapload, obj/structure/cargo_receptacle/delivery_point) . = ..() if(!delivery_point) // add a timer before we pick the delivery point, in case any ships or ruins still need to load addtimer(CALLBACK(src, PROC_REF(get_delivery_point)), 3 MINUTES) -/obj/item/cargo_package/offship/proc/get_delivery_point() +/obj/item/package/delivery/offship/proc/get_delivery_point() var/obj/structure/cargo_receptacle/selected_delivery_point = get_cargo_package_delivery_point(src, horizon_delivery) if(!selected_delivery_point) qdel(src) return setup_delivery_point(selected_delivery_point) -/obj/item/cargo_package/offship/to_horizon +/obj/item/package/delivery/offship/to_horizon horizon_delivery = TRUE + +// Persistent supply packages. These are meant to be spawned by admins and feature no mechanics like the orion deliveries. +/obj/item/package/persistent_supply + name = "supply package" + desc = "A supply package. Doesn't qualify for deliveries." + desc_extended = "\ + Usually each package contains a different set of things one might need as supplies. \ + Unlike the Orion deliveries, these packages are not tied to a specific delivery network and are not eligible for deliveries. \ + Probably more expensive then it should be." + icon_state = "supply_package" + item_state = "supply_package" + persistant_objects_expiration_time_days = 360 + +/obj/item/package/persistent_supply/Initialize() + . = ..() + SSpersistence.objectsRegisterTrack(src) + +/obj/item/package/persistent_supply/persistent_objects_get_content() + return list() + +/obj/item/package/persistent_supply/persistent_objects_apply_content(content, x, y, z) + src.x = x + src.y = y + src.z = z + +/obj/item/package/persistent_supply/Destroy() + log_and_message_admins("Persistent supply package at [src] was destroyed!", null, get_turf(src)) + . = ..() diff --git a/code/modules/cargo/delivery/receptacle.dm b/code/modules/cargo/delivery/receptacle.dm index a5b4df0d777..7775f47bfd4 100644 --- a/code/modules/cargo/delivery/receptacle.dm +++ b/code/modules/cargo/delivery/receptacle.dm @@ -10,7 +10,7 @@ GLOBAL_LIST_INIT_TYPED(all_cargo_receptacles, /obj/structure/cargo_receptacle, l These are set up by Orion to expand its small-scale shipping network, especially in more remote areas, like outer edges of the Frontier or Coalition. \ It is a common sight all over the Spur, however, where Orion Express services depend on ordinary people and ships picking up and delivering packages for each other, \ with Orion Express only delivering to automated stations and other distribution points." - icon = 'icons/obj/orion_delivery.dmi' + icon = 'icons/obj/package.dmi' icon_state = "delivery_point" density = TRUE @@ -86,7 +86,7 @@ GLOBAL_LIST_INIT_TYPED(all_cargo_receptacles, /obj/structure/cargo_receptacle, l for(var/i = 1 to package_amount) var/turf/random_turf = pick_n_take(warehouse_turfs) if(random_turf) - new /obj/item/cargo_package(random_turf, src) + new /obj/item/package/delivery(random_turf, src) if(late_spawner) playsound(pick(warehouse_turfs), 'sound/machines/twobeep.ogg', 50, 1) GLOB.global_announcer.autosay(announcement_message, capitalize_first_letters(announcer_name), channel) @@ -96,8 +96,8 @@ GLOBAL_LIST_INIT_TYPED(all_cargo_receptacles, /obj/structure/cargo_receptacle, l return ..() /obj/structure/cargo_receptacle/attackby(obj/item/attacking_item, mob/user) - if(istype(attacking_item, /obj/item/cargo_package)) - var/obj/item/cargo_package/package = attacking_item + if(istype(attacking_item, /obj/item/package/delivery)) + var/obj/item/package/delivery/package = attacking_item if(!package.associated_delivery_point) to_chat(user, SPAN_WARNING("Something's wrong with the cargo package, submit a bug report. ERRCODE: 0")) return @@ -120,14 +120,14 @@ GLOBAL_LIST_INIT_TYPED(all_cargo_receptacles, /obj/structure/cargo_receptacle, l visible_message("\The [src] beeps, \"[SPAN_NOTICE("New package available for delivery.")]\"") playsound(src, SFX_PRINT, 50, TRUE) - var/obj/item/cargo_package/printed_package = new /obj/item/cargo_package/offship(get_turf(user), selected_delivery_point) + var/obj/item/package/delivery/printed_package = new /obj/item/package/delivery/offship(get_turf(user), selected_delivery_point) printed_package.pays_horizon_account = pays_horizon_account animate(printed_package, alpha = 0, alpha = 255, time = 1 SECOND) // Makes them fade in return return ..() -/obj/structure/cargo_receptacle/proc/pay_account(var/mob/living/carbon/human/courier, var/obj/item/cargo_package/package) +/obj/structure/cargo_receptacle/proc/pay_account(var/mob/living/carbon/human/courier, var/obj/item/package/delivery/package) if(package.pays_horizon_account) var/datum/money_account/supply_account = SScargo.supply_account if(supply_account && !supply_account.suspended) diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 6ff33b518ae..78adb41a03b 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -104,6 +104,9 @@ update_icon() else if(authenticated_account) if(istype(attacking_item,/obj/item/spacecash)) + if(istype(attacking_item, /obj/item/spacecash/ewallet/persistent_charge_card)) + to_chat(user, SPAN_WARNING("You insert the [attacking_item] into [src], but the machine immediately rejects it!")) + return var/obj/item/spacecash/cash = attacking_item //consume the money authenticated_account.money += cash.worth diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index a05857e51b8..50656b51a9d 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -133,6 +133,8 @@ //transfer the money E.worth -= transaction_amount + if(istype(E, /obj/item/spacecash/ewallet/persistent_charge_card)) + log_and_message_admins("[E] used for a transaction at [src] with amount [transaction_amount]. Remaining balance: [E.worth]", user, get_turf(src)) linked_account.money += transaction_amount //create entry in the EFTPOS linked account transaction log diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index 3348dded99f..606bc56496f 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -297,7 +297,7 @@ name = "charge card" icon_state = "efundcard" desc = "A card that holds an amount of money." - var/owner_name = "" //So the ATM can set it so the EFTPOS can put a valid name on transactions. + var/owner_name = "unknown" //So the ATM can set it so the EFTPOS can put a valid name on transactions. drop_sound = 'sound/items/drop/card.ogg' pickup_sound = 'sound/items/pickup/card.ogg' @@ -305,7 +305,8 @@ . = ..() if(distance > 2 && user != loc) return - . += SPAN_NOTICE("The charge card's owner is [src.owner_name].") + if(src.owner_name) + . += SPAN_NOTICE("The charge card's owner is [src.owner_name].") . += SPAN_NOTICE("It has [src.worth]电 left.") /obj/item/spacecash/ewallet/c2000 @@ -316,3 +317,37 @@ /obj/item/spacecash/ewallet/c10000 worth = 10000 + +// Persistent ewallet that keeps it's value across rounds. +// When spawned, using VV, set "worth", "initial_worth", "owner_name" and "name". +/obj/item/spacecash/ewallet/persistent_charge_card + name = "specialized charge card" + desc = "A specialized charge card that holds a certain amount of money. This type of charge card is in use for special purposes and not generally available." + icon_state = "efundcard_special" + var/initial_worth = 0 // Used for calculating how much cash was spend, needs to be set using VV after spawning it. + persistant_objects_expiration_time_days = 360 + +/obj/item/spacecash/ewallet/persistent_charge_card/Initialize() + . = ..() + SSpersistence.objectsRegisterTrack(src) + +/obj/item/spacecash/ewallet/persistent_charge_card/persistent_objects_get_content() + var/list/content = list() + content["name"] = src.name + content["initial_worth"] = src.initial_worth + content["worth"] = src.worth + content["owner_name"] = src.owner_name + return content + +/obj/item/spacecash/ewallet/persistent_charge_card/persistent_objects_apply_content(content, x, y, z) + name = isnull(content["name"]) ? src.name : content["name"] + initial_worth = isnull(content["initial_worth"]) ? 0 : content["initial_worth"] + worth = isnull(content["worth"]) ? 0 : content["worth"] + owner_name = isnull(content["owner_name"]) ? src.owner_name : content["owner_name"] + src.x = x + src.y = y + src.z = z + +/obj/item/spacecash/ewallet/persistent_charge_card/Destroy() + log_and_message_admins("Persistent charge card ([src.name]) at [src] was destroyed!", null, get_turf(src)) + . = ..() diff --git a/code/modules/modular_computers/file_system/programs/civilian/cargo_delivery.dm b/code/modules/modular_computers/file_system/programs/civilian/cargo_delivery.dm index 2c3a44ad65b..9f1fdb58f86 100644 --- a/code/modules/modular_computers/file_system/programs/civilian/cargo_delivery.dm +++ b/code/modules/modular_computers/file_system/programs/civilian/cargo_delivery.dm @@ -107,9 +107,10 @@ return TRUE var/obj/item/spacecash/ewallet/charge_card + var/mob/living/L if(!using_id) if(isliving(usr)) - var/mob/living/L = usr + L = usr charge_card = L.get_active_hand() if(!istype(charge_card)) return TRUE @@ -137,6 +138,8 @@ status_message = "Account Error: Failed to Deposit Credits into Cargo Account" return TRUE charge_card.worth -= transaction_amount + if(istype(charge_card, /obj/item/spacecash/ewallet/persistent_charge_card)) + log_and_message_admins("[charge_card] used for a transaction at [src] with amount [transaction_amount]. Remaining balance: [charge_card.worth]", L, get_turf(src)) playsound(computer, 'sound/machines/chime.ogg', 50, TRUE) status_message = co.set_paid(GetNameAndAssignmentFromId(id_card), usr.character_id, destinationact) diff --git a/html/changelogs/fabiank3-arc-feature-persistent-supply.yml b/html/changelogs/fabiank3-arc-feature-persistent-supply.yml new file mode 100644 index 00000000000..7327f450252 --- /dev/null +++ b/html/changelogs/fabiank3-arc-feature-persistent-supply.yml @@ -0,0 +1,7 @@ +author: FabianK3 + +delete-after: True + +changes: + - rscadd: "Added a persistent version of charge cards - Arc feature / Admin spawn only." + - rscadd: "Added a persistent version of cargo packages, called supply package - Arc feature / Admin spawn only." diff --git a/icons/obj/cash.dmi b/icons/obj/cash.dmi index 73399e656bef9567bda9ca4bc219a42278b46d01..d8ae968dbc55f9916c13ee020231af101d6bfd7f 100644 GIT binary patch delta 1465 zcmV;q1xEUk4Y3Z87Y?8Z0{{R3yb+fl0004Nu_aLfGZ;>9ByoigHcuX9ceAsz*4EbB zodC0S4H{f+mX?+ea)sUi0004WQchCf6}zYHmQ`fRpZ->;=llr z+wPk0zkIn|V{)p_bwkQajUUo^ZF_Pg`-Ecj)FP;{$uo?U)K?Xz#s?PUSVn$eTyo|W zO=ucnB((G6dx}x#*iBCLB3(e}ltSnXFdHBZnF{dD0BiwZQwov*S->>@)3Uqwf-@(U z$?^JxH0<>$e-FD^&e#y_dT#E+9SdBw`DQZPOm4WLAGx{-WUL)lcGCJma?Q+IHYQb5 zet+*9vEmfDF%h?Q000D!NklgWaW@mB3u~F6)3<8_r#Pr;p!w~%DU53|Yz;9~inoSV& zBGPU_f97a#;riU%^#!ZI;yeh>FS-Q5&?=Zow;N1n5(MoHf}z9j-w3)I%*^r%)3a_t z=Nn8dIQ$~Rd52$Q2-y6%VN@dGr+!Hs4JNU;=<)+Yz!7Jn1~ETAGkj?hR;J%%05njB z`sIQ75d=XH1VIo4K@k1n#w!x90$RTGn#AjXf0i%blz0Qs@|8Cw-U76I^=*lF0A29i zHTbJ}&07=bg72+EzV59HbiwyGAm8vd1iIh{n~-mMn*v?%!!5|Sye)w#ctgVXO~EAz z-!}!9C4Ao$T#@j7Q*c$n_c1}nI)Xuf2(l%{V!W{#2r^59LXhDNf?QjW;SF{KnWe#wAxmhGSsGmK2%-(Hu#TX+L1t@^x!<64 z#b|@l72^$duh`w7?F~wx4N9O5O5hE4K^v4n8(fQ4#`7#I!)Jys4ZbpbX86+JE5m1o zFAcsjd}jF4SXM?I>W>URb*Mi!{M4cTf5h-phx${)PaW#dOh1Ak2!bF8f*=TDkla$) z-rnvlPh~%s_yW-K+?Ntx0b0KEwZu1o_WScHySux4z2vFX?S1&GdEeU?=z@0+AV2U9 z1iIk2hmaq7hXPITJ5kN|0Q|GJw^u;(eESFV90aoxzHbWVBz)f#+>!8oo8Vmze+V2E zOGut?=XoQK1R0A@HX8(pAY<{#<$?eaWIIfpAg~HTh468!P%0q}=I=s*@L}e>K_STS z2EicJkN^`u?D3p#vANj z@v}78%NxWSl)xM8f;K3DHF)nwe}I3DqnBtl80YN@u{XFMt&HbcR))_EUmAR6_{{L7 zL01L@qThdy3*rrmJRki)-fU1A>Yofhb*O(f{M4cTMfWpy5dRj(Gl+hR`%FhL#yZrN z`~nPB3WY*%IYAHvK@bE%5dUwEF$OIqb6oyar#xJOC-?84@>3R^^d|V=e?ffuCHU~+ zDL>_Mr2?nYtKg$Y@#&Y~X$%NfE7fwfSHV7W{wq%6oKHZ$;%cQ*t@eDyNu2Wu$XDE- z2G5Cd#lQXj$De;)v|z#$kgs?!4JJH+v*Qz;IStzXFDm>>R}^n2)8Hor$Z;$48vB~tk)Y&IL)Wc=FkZ?T8&0C zY=$lPcoG>7o1npP3AVzpp#V2NXeWgh7^<{}OR#3{;BZ}Ws%9`~BZ43Z;`!ho7}--1 T0XC7J00000NkvXXu0mjfmsPU( delta 1305 zcmV+!1?Kv(4w4O!7Y=|30{{R3ySAhF^D@N94U9|9oT3R$BaDQ$F1)80wU*uGlo#m&LZ=i$XMouNX~f1jquW@t>CMqZgc6u}p^R6S8CPZ#;kOW__LU-mLe{eYj(0iL+yFn}6%bq7Jv9ds+4f;~N6f!^L;uiufrz9VkKj>B01 zHSFrtV9Y7l)8Fqi>^*wysK+q$8*m$jeuIO!VOJ+_3JT#8?CBpG@)&~Ou+Q-L0QmI{ z9CrzVUP#t2$UO~?oERE9G2#>$9R|VSQJ;Sx7&--W*+zreT#BH(K``|A{fVHj!Q7y% zFgxfM^uEE&h{rE99QOEyhJedY8ipkze#sAsr@=HvM}2-^2zcUL*dXR7XGShf%F48x z9DoLip+329egr`f1VIo4K@dcH7(1nL8Zh$lGa6?BBcC{@aUL-8$qO160VAKfq;Y>4 zFa@tn!+*`w!L-5@ygCE0ukinoJWE}AcCBSMCipv8C zfeI=;jyD(!az}$okmC)4TtkrK4aR?h+|gic$Wt2Rjs_=ULA1e19t-*#s2XGSiKV`Y*Z2!bF8f*^nPlY2=P z78Y8|Gx_@(4*(-CJk)pu82RF3jVFNd`-@4ImX?-V$upU!EAU_QO0c3Z1)r@#z8b75 zOu^@Ckgo-63PbRPs^%pC-`LV%M~Oq zHu9pChk~3(C!ZGr5#&5Ng@S(&h#+6&>ImT!gbLxyy;7xuG+2BE1;Q6QmklaGjyDKq zkt5!qCWtlodVPJp>}gQuszAKKd@P7ISm3eXP8zI~%jJrvL75j-hggH!72^#yuXra7 zw(oo1hJ9U=6-`3&@Xg_!8{~qr6ce_6AqNl?ejJ%E+0KOM`!}jGP&{H0a8J zK=}LLNI|?ol^4SwDB2AshWef5mmKQ%mS1wHKbU^j4&tBUXa>}^;*4JZ&k3(?EZ?=*yR(@uee^T)$1)^aT>dP0{RuVr@>v4 zxZ-c$fBgKl*McceK)>SsX)xspY;SCuY;5nTU>e)jAG&|bk01zwAa=%Y^~~}?bM{?y P00000NkvXXu0mjfT!~|% diff --git a/icons/obj/orion_delivery.dmi b/icons/obj/orion_delivery.dmi deleted file mode 100644 index c21e11f36196396c563e04679c9650b2b54bca20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4653 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

qq3PkL_rC+E-7Orh8w!#gh5 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 literal 0 HcmV?d00001 diff --git a/maps/away/away_site/orion/orion_automated_station.dmm b/maps/away/away_site/orion/orion_automated_station.dmm index e94a282a57d..11477cdee35 100644 --- a/maps/away/away_site/orion/orion_automated_station.dmm +++ b/maps/away/away_site/orion/orion_automated_station.dmm @@ -62,7 +62,7 @@ /area/orion_automated_station/west) "bt" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /turf/simulated/floor/tiled/dark, /area/orion_automated_station/packages) "bu" = ( @@ -792,10 +792,10 @@ /area/orion_automated_station/east) "nB" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package{ +/obj/item/package/delivery{ pixel_y = 12 }, -/obj/item/cargo_package, +/obj/item/package/delivery, /turf/simulated/floor/tiled/dark, /area/orion_automated_station/packages) "nH" = ( @@ -931,10 +931,10 @@ /area/orion_automated_station/engineering) "qB" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package{ +/obj/item/package/delivery{ pixel_y = 12 }, -/obj/item/cargo_package, +/obj/item/package/delivery, /obj/machinery/light{ dir = 1 }, @@ -1253,10 +1253,10 @@ /area/orion_automated_station/east) "xw" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 12 }, -/obj/item/cargo_package/offship/to_horizon, +/obj/item/package/delivery/offship/to_horizon, /obj/machinery/light{ dir = 8 }, @@ -1575,10 +1575,10 @@ /area/orion_automated_station/west) "Do" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = 12 }, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /turf/simulated/floor/tiled/dark, /area/orion_automated_station/packages) "DA" = ( @@ -1783,7 +1783,7 @@ /area/orion_automated_station/exterior) "FT" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package{ +/obj/item/package/delivery{ pixel_y = 12 }, /obj/machinery/light, @@ -1897,7 +1897,7 @@ /area/orion_automated_station/west) "HV" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 12 }, /turf/simulated/floor/tiled/dark, @@ -2870,7 +2870,7 @@ /area/orion_automated_station/west) "Wg" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package, +/obj/item/package/delivery, /turf/simulated/floor/tiled/dark, /area/orion_automated_station/packages) "Wh" = ( diff --git a/maps/away/away_site/uueoaesa/tret/tret_industrial_complex.dmm b/maps/away/away_site/uueoaesa/tret/tret_industrial_complex.dmm index df77e9ffac2..69c9115985b 100644 --- a/maps/away/away_site/uueoaesa/tret/tret_industrial_complex.dmm +++ b/maps/away/away_site/uueoaesa/tret/tret_industrial_complex.dmm @@ -8939,15 +8939,15 @@ icon_state = "1-2" }, /obj/random/dirt_75, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = 10; pixel_x = -3 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 3 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = 7 }, /turf/simulated/floor/plating, diff --git a/maps/away/ships/golden_deep/golden_deep.dmm b/maps/away/ships/golden_deep/golden_deep.dmm index d8cf23f6481..326d6f4b347 100644 --- a/maps/away/ships/golden_deep/golden_deep.dmm +++ b/maps/away/ships/golden_deep/golden_deep.dmm @@ -7751,11 +7751,11 @@ /area/golden_deep/owned_lounge) "Ga" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 10; pixel_x = -1 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 3 }, @@ -8241,11 +8241,11 @@ dir = 8 }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 10; pixel_x = -1 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 3 }, @@ -11555,11 +11555,11 @@ dir = 4 }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = 10; pixel_x = -2 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 3 }, diff --git a/maps/away/ships/himeo/himeo_patrol_ship_submaps.dmm b/maps/away/ships/himeo/himeo_patrol_ship_submaps.dmm index 04d0fed1e47..8b2c4571126 100644 --- a/maps/away/ships/himeo/himeo_patrol_ship_submaps.dmm +++ b/maps/away/ships/himeo/himeo_patrol_ship_submaps.dmm @@ -607,8 +607,8 @@ "DX" = ( /obj/effect/map_effect/marker/mapmanip/submap/extract/himeo_patrol_ship/storage_1, /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package/offship, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship, +/obj/item/package/delivery/offship{ pixel_x = 3; pixel_y = 9 }, @@ -776,8 +776,8 @@ "Oe" = ( /obj/effect/map_effect/marker/mapmanip/submap/extract/himeo_patrol_ship/storage_2, /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/cargo_package/offship, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship, +/obj/item/package/delivery/offship{ pixel_x = 3; pixel_y = 9 }, diff --git a/maps/away/ships/lone_spacer/lone_spacer.dmm b/maps/away/ships/lone_spacer/lone_spacer.dmm index ef872611dc0..753fd0f77e4 100644 --- a/maps/away/ships/lone_spacer/lone_spacer.dmm +++ b/maps/away/ships/lone_spacer/lone_spacer.dmm @@ -151,11 +151,11 @@ /turf/simulated/floor/tiled/dark/full, /area/shuttle/lone_spacer/port_nacelle) "aT" = ( -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 10; pixel_x = -1 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 1 }, @@ -2435,11 +2435,11 @@ /turf/simulated/floor/tiled/dark/full, /area/shuttle/lone_spacer/storage) "Mz" = ( -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 11; pixel_x = 1 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 3 }, diff --git a/maps/away/ships/lone_spacer/lone_spacer_submaps.dmm b/maps/away/ships/lone_spacer/lone_spacer_submaps.dmm index 69c181898a4..ab453d8bb0b 100644 --- a/maps/away/ships/lone_spacer/lone_spacer_submaps.dmm +++ b/maps/away/ships/lone_spacer/lone_spacer_submaps.dmm @@ -284,11 +284,11 @@ /area/shuttle/lone_spacer/storage) "G" = ( /obj/effect/floor_decal/industrial/outline/operations, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 10; pixel_x = -1 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 1 }, diff --git a/maps/away/ships/orion/orion_express_ship/orion_express_ship.dmm b/maps/away/ships/orion/orion_express_ship/orion_express_ship.dmm index 5a757234ed0..2f08b11e213 100644 --- a/maps/away/ships/orion/orion_express_ship/orion_express_ship.dmm +++ b/maps/away/ships/orion/orion_express_ship/orion_express_ship.dmm @@ -991,7 +991,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/tiled/dark, /area/ship/orion/cargo) @@ -1988,7 +1988,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/tiled/dark, /area/ship/orion/cargo) @@ -2058,7 +2058,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/tiled/dark, /area/ship/orion/cargo) @@ -3408,7 +3408,7 @@ /turf/simulated/floor/wood, /area/ship/orion/crew) "lQT" = ( -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/tiled/dark, /area/ship/orion/cargo) @@ -3662,7 +3662,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/tiled/dark, /area/ship/orion/cargo) @@ -3884,7 +3884,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/tiled/dark, /area/ship/orion/cargo) @@ -6847,7 +6847,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/tiled/dark, /area/ship/orion/cargo) @@ -7211,7 +7211,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/tiled/dark, /area/ship/orion/cargo) @@ -7659,7 +7659,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/item/cargo_package/offship, +/obj/item/package/delivery/offship, /obj/effect/floor_decal/industrial/hatch/grey, /turf/simulated/floor/tiled/dark, /area/ship/orion/cargo) diff --git a/maps/away/ships/orion/orion_miner/orion_miner.dmm b/maps/away/ships/orion/orion_miner/orion_miner.dmm index 95cf88037c6..5e09eddb807 100644 --- a/maps/away/ships/orion/orion_miner/orion_miner.dmm +++ b/maps/away/ships/orion/orion_miner/orion_miner.dmm @@ -573,8 +573,8 @@ /area/shuttle/orion_miner/cargo_bay) "dY" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/cargo_package/offship/to_horizon, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon, +/obj/item/package/delivery/offship/to_horizon{ pixel_x = -1; pixel_y = 11 }, @@ -4363,8 +4363,8 @@ /area/shuttle/orion_miner/tech_storage) "Oc" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/cargo_package/offship, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship, +/obj/item/package/delivery/offship{ pixel_x = 1; pixel_y = 10 }, diff --git a/maps/away/ships/scc/scc_scout_ship.dmm b/maps/away/ships/scc/scc_scout_ship.dmm index ddee8636899..602257bfdf2 100644 --- a/maps/away/ships/scc/scc_scout_ship.dmm +++ b/maps/away/ships/scc/scc_scout_ship.dmm @@ -3874,11 +3874,11 @@ /area/ship/scc_scout_ship/medbay) "wI" = ( /obj/random/dirt_75, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 10; pixel_x = -3 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 3 }, @@ -4916,11 +4916,11 @@ /area/ship/scc_scout_ship/exterior) "DX" = ( /obj/random/dirt_75, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = 10; pixel_x = -3 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 3 }, @@ -5690,11 +5690,11 @@ }, /obj/random/dirt_75, /obj/random/dirt_75, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = 10; pixel_x = -3 }, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = -2; pixel_x = 3 }, diff --git a/maps/away/ships/tramp_freighter/tramp_freighter.dmm b/maps/away/ships/tramp_freighter/tramp_freighter.dmm index ef27708d011..74cb7308193 100644 --- a/maps/away/ships/tramp_freighter/tramp_freighter.dmm +++ b/maps/away/ships/tramp_freighter/tramp_freighter.dmm @@ -2091,11 +2091,11 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/floor_decal/industrial/outline/operations, /obj/effect/decal/cleanable/dirt, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 10; pixel_x = -1 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 1 }, @@ -2714,11 +2714,11 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/floor_decal/industrial/outline/operations, /obj/effect/decal/cleanable/dirt, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = 10; pixel_x = -2 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 3 }, @@ -4884,11 +4884,11 @@ "ys" = ( /obj/effect/floor_decal/industrial/outline/operations, /obj/effect/decal/cleanable/dirt, -/obj/item/cargo_package/offship/to_horizon{ +/obj/item/package/delivery/offship/to_horizon{ pixel_y = 10; pixel_x = -1 }, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = -2; pixel_x = 3 }, diff --git a/maps/random_ruins/exoplanets/delivery/delivery_site.dmm b/maps/random_ruins/exoplanets/delivery/delivery_site.dmm index dd6406d3c31..66beb02b72a 100644 --- a/maps/random_ruins/exoplanets/delivery/delivery_site.dmm +++ b/maps/random_ruins/exoplanets/delivery/delivery_site.dmm @@ -101,7 +101,7 @@ /obj/effect/floor_decal/industrial/outline/yellow, /obj/random/dirt_75, /obj/random/dirt_75, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = 3 }, /turf/simulated/floor/exoplanet/concrete, @@ -109,7 +109,7 @@ "te" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/random/dirt_75, -/obj/item/cargo_package/offship{ +/obj/item/package/delivery/offship{ pixel_y = 3 }, /turf/simulated/floor/exoplanet/concrete,