mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-19 05:26:28 +00:00
Doing my little update piece by piece because I'm lazy and because storage PR is going to conflict everything ever. Techfabs do not link to RND consoles, and have their own interface for producing things. RND production machinery code refactored. Techwebs have categories views instead of just a goddamn design list. Old machinery will be kept in, as some places will keep them. Read: Engineering, robotics, etc. experimental: Protolathes and circuit imprinters combined/changed to techfabs. All departments can now print related circuit boards. Engineering and science will keep their lathe/imprinter design by default at roundstart because they have specialized labs for those.
141 lines
4.0 KiB
Plaintext
141 lines
4.0 KiB
Plaintext
GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
|
|
/mob/living,
|
|
/obj/structure/blob,
|
|
/obj/effect/rune,
|
|
/obj/structure/spider/spiderling,
|
|
/obj/item/disk/nuclear,
|
|
/obj/machinery/nuclearbomb,
|
|
/obj/item/device/beacon,
|
|
/obj/singularity,
|
|
/obj/machinery/teleport/station,
|
|
/obj/machinery/teleport/hub,
|
|
/obj/machinery/quantumpad,
|
|
/obj/machinery/clonepod,
|
|
/obj/effect/mob_spawn,
|
|
/obj/effect/hierophant,
|
|
/obj/structure/recieving_pad,
|
|
/obj/effect/clockwork/spatial_gateway,
|
|
/obj/structure/destructible/clockwork/powered/clockwork_obelisk,
|
|
/obj/item/device/warp_cube,
|
|
/obj/machinery/rnd/production/protolathe, //print tracking beacons, send shuttle
|
|
/obj/machinery/autolathe, //same
|
|
/obj/item/projectile/beam/wormhole,
|
|
/obj/effect/portal,
|
|
/obj/item/device/shared_storage,
|
|
/obj/structure/extraction_point
|
|
)))
|
|
|
|
/obj/docking_port/mobile/supply
|
|
name = "supply shuttle"
|
|
id = "supply"
|
|
callTime = 600
|
|
|
|
dir = WEST
|
|
port_direction = EAST
|
|
width = 12
|
|
dwidth = 5
|
|
height = 7
|
|
|
|
// When TRUE, these vars allow exporting emagged/contraband items, and add some special interactions to existing exports.
|
|
var/contraband = FALSE
|
|
var/emagged = FALSE
|
|
|
|
/obj/docking_port/mobile/supply/register()
|
|
. = ..()
|
|
SSshuttle.supply = src
|
|
|
|
/obj/docking_port/mobile/supply/canMove()
|
|
if(is_station_level(z))
|
|
return check_blacklist(shuttle_areas)
|
|
return ..()
|
|
|
|
/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))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/obj/docking_port/mobile/supply/request()
|
|
if(mode != SHUTTLE_IDLE)
|
|
return 2
|
|
return ..()
|
|
|
|
/obj/docking_port/mobile/supply/initiate_docking()
|
|
if(getDockedId() == "supply_away") // Buy when we leave home.
|
|
buy()
|
|
. = ..() // Fly/enter transit.
|
|
if(. != DOCKING_SUCCESS)
|
|
return
|
|
if(getDockedId() == "supply_away") // Sell when we get home
|
|
sell()
|
|
|
|
/obj/docking_port/mobile/supply/proc/buy()
|
|
if(!SSshuttle.shoppinglist.len)
|
|
return
|
|
|
|
var/list/empty_turfs = list()
|
|
for(var/place in shuttle_areas)
|
|
var/area/shuttle/shuttle_area = place
|
|
for(var/turf/open/floor/T in shuttle_area)
|
|
if(is_blocked_turf(T))
|
|
continue
|
|
empty_turfs += T
|
|
|
|
var/value = 0
|
|
var/purchases = 0
|
|
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
|
|
if(!empty_turfs.len)
|
|
break
|
|
if(SO.pack.cost > SSshuttle.points)
|
|
continue
|
|
|
|
SSshuttle.points -= SO.pack.cost
|
|
value += SO.pack.cost
|
|
SSshuttle.shoppinglist -= SO
|
|
SSshuttle.orderhistory += SO
|
|
|
|
SO.generate(pick_n_take(empty_turfs))
|
|
SSblackbox.record_feedback("nested tally", "cargo_imports", 1, list("[SO.pack.cost]", "[SO.pack.name]"))
|
|
investigate_log("Order #[SO.id] ([SO.pack.name], placed by [key_name(SO.orderer_ckey)]) has shipped.", INVESTIGATE_CARGO)
|
|
if(SO.pack.dangerous)
|
|
message_admins("\A [SO.pack.name] ordered by [key_name_admin(SO.orderer_ckey)] has shipped.")
|
|
purchases++
|
|
|
|
investigate_log("[purchases] orders in this shipment, worth [value] credits. [SSshuttle.points] credits left.", INVESTIGATE_CARGO)
|
|
|
|
/obj/docking_port/mobile/supply/proc/sell()
|
|
var/presale_points = SSshuttle.points
|
|
|
|
if(!GLOB.exports_list.len) // No exports list? Generate it!
|
|
setupExports()
|
|
|
|
var/msg = ""
|
|
var/sold_atoms = ""
|
|
|
|
for(var/place in shuttle_areas)
|
|
var/area/shuttle/shuttle_area = place
|
|
for(var/atom/movable/AM in shuttle_area)
|
|
if(AM.anchored || iscameramob(AM))
|
|
continue
|
|
sold_atoms += export_item_and_contents(AM, contraband, emagged, dry_run = FALSE)
|
|
|
|
if(sold_atoms)
|
|
sold_atoms += "."
|
|
|
|
for(var/a in GLOB.exports_list)
|
|
var/datum/export/E = a
|
|
var/export_text = E.total_printout()
|
|
if(!export_text)
|
|
continue
|
|
|
|
msg += export_text + "\n"
|
|
SSshuttle.points += E.total_cost
|
|
E.export_end()
|
|
|
|
SSshuttle.centcom_message = msg
|
|
investigate_log("Shuttle contents sold for [SSshuttle.points - presale_points] credits. Contents: [sold_atoms || "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO)
|