diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 364bda112d6..8a9b45aa06e 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -366,6 +366,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Marks the item as having been transmuted. Functionally blacklists the item from being recycled or sold for materials. #define TRAIT_MAT_TRANSMUTED "transmuted" +///If the item will block the cargo shuttle from flying to centcom +#define TRAIT_BANNED_FROM_CARGO_SHUTTLE "banned_from_cargo_shuttle" + // item traits #define TRAIT_NODROP "nodrop" /// cannot be inserted in a storage. diff --git a/code/controllers/subsystem/eigenstate.dm b/code/controllers/subsystem/eigenstate.dm index eb587ef6c31..0cc59c44d67 100644 --- a/code/controllers/subsystem/eigenstate.dm +++ b/code/controllers/subsystem/eigenstate.dm @@ -41,6 +41,7 @@ SUBSYSTEM_DEF(eigenstates) RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/remove_eigen_entry) RegisterSignal(target, COMSIG_ATOM_TOOL_ACT(TOOL_WELDER), .proc/tool_interact) target.RegisterSignal(target, COMSIG_EIGENSTATE_ACTIVATE, /obj/structure/closet/proc/bust_open) + ADD_TRAIT(target, TRAIT_BANNED_FROM_CARGO_SHUTTLE, src) var/obj/item = target if(item) item.color = COLOR_PERIWINKLEE //Tint the locker slightly. @@ -73,6 +74,7 @@ SUBSYSTEM_DEF(eigenstates) COMSIG_CLOSET_INSERT, COMSIG_ATOM_TOOL_ACT(TOOL_WELDER), )) + REMOVE_TRAIT(entry, TRAIT_BANNED_FROM_CARGO_SHUTTLE, src) entry.UnregisterSignal(entry, COMSIG_EIGENSTATE_ACTIVATE) //This is a signal on the object itself so we have to call it from that ///Remove the current entry if we're empty for(var/targets in eigen_targets) diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm index fae0dfcbefe..a043098960a 100644 --- a/code/modules/cargo/orderconsole.dm +++ b/code/modules/cargo/orderconsole.dm @@ -15,7 +15,7 @@ var/self_paid = FALSE var/safety_warning = "For safety reasons, the automated supply shuttle \ cannot transport live organisms, human remains, classified nuclear weaponry, \ - homing beacons or machinery housing any form of artificial intelligence." + homing beacons, unstable eigenstates or machinery housing any form of artificial intelligence." var/blockade_warning = "Bluespace instability detected. Shuttle movement impossible." /// radio used by the console to send messages on supply channel var/obj/item/radio/headset/radio diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index 5e1afe8c4d7..f980c795546 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -20,7 +20,7 @@ ///What do we say when the shuttle moves with living beings on it. var/safety_warning = "For safety reasons, the automated supply shuttle \ cannot transport live organisms, human remains, classified nuclear weaponry, \ - homing beacons or machinery housing any form of artificial intelligence." + homing beacons, unstable eigenstates or machinery housing any form of artificial intelligence." ///If you're being raided by pirates, what do you tell the crew? var/blockade_warning = "Bluespace instability detected. Shuttle movement impossible." diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index b142a00e2f2..e2b24e4f8f1 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -68,10 +68,9 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/docking_port/mobile/supply/proc/check_blacklist(areaInstances) for(var/place in areaInstances) var/area/shuttle/shuttle_area = place - for(var/trf in shuttle_area) - var/turf/T = trf - for(var/a in T.GetAllContents()) - if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types) && !istype(a, /obj/docking_port)) + for(var/turf/shuttle_turf as anything in shuttle_area) + for(var/atom/passenger in shuttle_turf.GetAllContents()) + if((is_type_in_typecache(passenger, GLOB.blacklisted_cargo_types) || HAS_TRAIT(passenger, TRAIT_BANNED_FROM_CARGO_SHUTTLE)) && !istype(passenger, /obj/docking_port)) return FALSE return TRUE