Files
Bubberstation/code/modules/shuttle/supply.dm
kevinz000 28b1fb254d RND TECHWEBS: TECHFABS (#36055)
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.
2018-03-08 15:09:44 +13:00

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)