mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
* Steals tg's span macros * Fix alphabet * Updated some more spans * Misses a conflict * Fix compile errors * Converts more spans * oops
140 lines
4.8 KiB
Plaintext
140 lines
4.8 KiB
Plaintext
/obj/machinery/computer/shuttle
|
|
name = "shuttle console"
|
|
desc = "A shuttle control computer."
|
|
icon_screen = "shuttle"
|
|
icon_keyboard = "tech_key"
|
|
light_color = LIGHT_COLOR_CYAN
|
|
req_access = list( )
|
|
/// ID of the attached shuttle
|
|
var/shuttleId
|
|
/// Possible destinations of the attached shuttle
|
|
var/possible_destinations = ""
|
|
/// Variable dictating if the attached shuttle requires authorization from the admin staff to move
|
|
var/admin_controlled = FALSE
|
|
/// Variable dictating if the attached shuttle is forbidden to change destinations mid-flight
|
|
var/no_destination_swap = FALSE
|
|
/// ID of the currently selected destination of the attached shuttle
|
|
var/destination
|
|
/// Authorization request cooldown to prevent request spam to admin staff
|
|
COOLDOWN_DECLARE(request_cooldown)
|
|
|
|
/obj/machinery/computer/shuttle/ui_interact(mob/user, datum/tgui/ui)
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "ShuttleConsole", name)
|
|
ui.open()
|
|
|
|
/obj/machinery/computer/shuttle/ui_data(mob/user)
|
|
var/list/data = list()
|
|
var/list/options = params2list(possible_destinations)
|
|
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
|
|
data["docked_location"] = M ? M.get_status_text_tgui() : "Unknown"
|
|
data["locations"] = list()
|
|
data["locked"] = FALSE
|
|
data["authorization_required"] = admin_controlled
|
|
data["timer_str"] = M ? M.getTimerStr() : "00:00"
|
|
data["destination"] = destination
|
|
if(!M)
|
|
data["status"] = "Missing"
|
|
return data
|
|
if(admin_controlled)
|
|
data["status"] = "Unauthorized Access"
|
|
else
|
|
switch(M.mode)
|
|
if(SHUTTLE_IGNITING)
|
|
data["status"] = "Igniting"
|
|
if(SHUTTLE_IDLE)
|
|
data["status"] = "Idle"
|
|
if(SHUTTLE_RECHARGING)
|
|
data["status"] = "Recharging"
|
|
else
|
|
data["status"] = "In Transit"
|
|
for(var/obj/docking_port/stationary/S in SSshuttle.stationary)
|
|
if(!options.Find(S.id))
|
|
continue
|
|
if(!M.check_dock(S, silent = TRUE))
|
|
continue
|
|
var/list/location_data = list(
|
|
id = S.id,
|
|
name = S.name
|
|
)
|
|
data["locations"] += list(location_data)
|
|
if(length(data["locations"]) == 1)
|
|
for(var/location in data["locations"])
|
|
destination = location["id"]
|
|
data["destination"] = destination
|
|
if(!length(data["locations"]))
|
|
data["locked"] = TRUE
|
|
data["status"] = "Locked"
|
|
return data
|
|
|
|
/**
|
|
* Checks if we are allowed to launch the shuttle, for special cases
|
|
*
|
|
* Arguments:
|
|
* * user - The mob trying to initiate the launch
|
|
*/
|
|
/obj/machinery/computer/shuttle/proc/launch_check(mob/user)
|
|
return TRUE
|
|
|
|
/obj/machinery/computer/shuttle/ui_act(action, params)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
if(!allowed(usr))
|
|
to_chat(usr, span_danger("Access denied."))
|
|
return
|
|
|
|
switch(action)
|
|
if("move")
|
|
if(!launch_check(usr))
|
|
return
|
|
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
|
|
if(M.launch_status == ENDGAME_LAUNCHED)
|
|
to_chat(usr, span_warning("You've already escaped. Never going back to that place again!"))
|
|
return
|
|
if(no_destination_swap)
|
|
if(M.mode == SHUTTLE_RECHARGING)
|
|
to_chat(usr, span_warning("Shuttle engines are not ready for use."))
|
|
return
|
|
if(M.mode != SHUTTLE_IDLE)
|
|
to_chat(usr, span_warning("Shuttle already in transit."))
|
|
return
|
|
var/list/options = params2list(possible_destinations)
|
|
if(!(params["shuttle_id"] in options))
|
|
log_admin("[usr] attempted to href dock exploit on [src] with target location \"[params["shuttle_id"]]\"")
|
|
message_admins("[usr] just attempted to href dock exploit on [src] with target location \"[params["shuttle_id"]]\"")
|
|
return
|
|
switch(SSshuttle.moveShuttle(shuttleId, params["shuttle_id"], 1))
|
|
if(0)
|
|
say("Shuttle departing. Please stand away from the doors.")
|
|
return TRUE
|
|
if(1)
|
|
to_chat(usr, span_warning("Invalid shuttle requested."))
|
|
else
|
|
to_chat(usr, span_warning("Unable to comply."))
|
|
if("set_destination")
|
|
var/target_destination = params["destination"]
|
|
if(target_destination)
|
|
destination = target_destination
|
|
return TRUE
|
|
if("request")
|
|
if(!COOLDOWN_FINISHED(src, request_cooldown))
|
|
to_chat(usr, span_warning("CentCom is still processing last authorization request!"))
|
|
return
|
|
COOLDOWN_START(src, request_cooldown, 1 MINUTES)
|
|
to_chat(usr, span_notice("Your request has been received by CentCom."))
|
|
to_chat(GLOB.admins, "<b>FERRY: <font color='#3d5bc3'>[ADMIN_LOOKUPFLW(usr)] (<A HREF='?_src_=holder;[HrefToken()];secrets=moveferry'>Move Ferry</a>)</b> is requesting to move the transport ferry to CentCom.</font>")
|
|
return TRUE
|
|
|
|
/obj/machinery/computer/shuttle/emag_act(mob/user)
|
|
if(obj_flags & EMAGGED)
|
|
return
|
|
req_access = list()
|
|
obj_flags |= EMAGGED
|
|
to_chat(user, span_notice("You fried the consoles ID checking system."))
|
|
|
|
/obj/machinery/computer/shuttle/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
|
|
if(port && (shuttleId == initial(shuttleId) || override))
|
|
shuttleId = port.id
|