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/beacon, /obj/singularity/narsie, /obj/singularity/wizard, /obj/machinery/teleport/station, /obj/machinery/teleport/hub, /obj/machinery/quantumpad, /obj/machinery/clonepod, /obj/effect/mob_spawn, /obj/effect/hierophant, /obj/structure/receiving_pad, /obj/effect/clockwork/spatial_gateway, /obj/structure/destructible/clockwork/powered/clockwork_obelisk, /obj/item/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/shared_storage, /obj/structure/extraction_point, /obj/machinery/syndicatebomb ))) /obj/docking_port/mobile/supply name = "supply shuttle" id = "supply" callTime = 600 dir = WEST port_direction = EAST width = 12 dwidth = 5 height = 7 movement_force = list("KNOCKDOWN" = 0, "THROW" = 0) //Export categories for this run, this is set by console sending the shuttle. var/export_categories = EXPORT_CARGO /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(obj/docking_port/stationary/S) 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 [ADMIN_LOOKUPFLW(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/matched_bounty = FALSE var/datum/export_report/ex = new for(var/place in shuttle_areas) var/area/shuttle/shuttle_area = place for(var/atom/movable/AM in shuttle_area) if(iscameramob(AM)) continue if(bounty_ship_item_and_contents(AM, dry_run = FALSE)) matched_bounty = TRUE if(!AM.anchored || istype(AM, /obj/mecha)) export_item_and_contents(AM, export_categories , dry_run = FALSE, external_report = ex) if(ex.exported_atoms) ex.exported_atoms += "." //ugh if(matched_bounty) msg += "Bounty items received. An update has been sent to all bounty consoles. " for(var/datum/export/E in ex.total_amount) var/export_text = E.total_printout(ex) if(!export_text) continue msg += export_text + "\n" SSshuttle.points += ex.total_value[E] SSshuttle.centcom_message = msg investigate_log("Shuttle contents sold for [SSshuttle.points - presale_points] credits. Contents: [ex.exported_atoms || "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO)