/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 data["status"] = M.mode == SHUTTLE_IGNITING ? "Igniting" : M.mode != SHUTTLE_IDLE ? "In Transit" : "Idle" 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 /obj/machinery/computer/shuttle/ui_act(action, params) . = ..() if(.) return if(!allowed(usr)) to_chat(usr, "Access denied.") return switch(action) if("move") var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) if(M.launch_status == ENDGAME_LAUNCHED) to_chat(usr, "You've already escaped. Never going back to that place again!") return if(no_destination_swap) if(M.mode == SHUTTLE_RECHARGING) to_chat(usr, "Shuttle engines are not ready for use.") return if(M.mode != SHUTTLE_IDLE) to_chat(usr, "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.") log_shuttle("[key_name(usr)] has sent shuttle \"[M]\" towards \"[params["shuttle_id"]]\", using [src].") return TRUE if(1) to_chat(usr, "Invalid shuttle requested.") else to_chat(usr, "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, "CentCom is still processing last authorization request!") return COOLDOWN_START(src, request_cooldown, 1 MINUTES) to_chat(usr, "Your request has been received by CentCom.") to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.") return TRUE /obj/machinery/computer/shuttle/emag_act(mob/user) . = ..() if(obj_flags & EMAGGED) return req_access = list() obj_flags |= EMAGGED to_chat(user, "You fried the consoles ID checking system.") return TRUE /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