mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-25 16:45:42 +00:00
The 50s/5s thing appears to be a mistake, given that 5s is 50ds and fast travel checks seconds against 50 and sets deciseconds to 50 on adjacent lines.
In addition to sending shuttles to docks, three extra modes are added:
Infinite Transit puts the shuttle in transit which lasts until another destination is chosen
Delete Shuttle does what it sounds like
Into The Sunset marks every mind on the shuttle as 'escaped' and then deletes the shuttle
Also puts the mobs in stasis so they won't suffocate, bleed out, etc. before roundend
It is also now possible to change the destination dock of the arrivals shuttle (example: an event where arrivals are sent to the Lavaland Wastes dock instead).
150 lines
4.4 KiB
Plaintext
150 lines
4.4 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/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)
|