From b40e58f342f8d2b7f54b78ea71e723f8cd81d37d Mon Sep 17 00:00:00 2001 From: Arkatos1 <43862960+Arkatos1@users.noreply.github.com> Date: Tue, 1 Sep 2020 09:37:50 +0200 Subject: [PATCH] Admin controlled shuttles improvements (#53237) This PR improves options for admin controlled shuttles - all shuttle controls can be admin-locked, and players must request authorization so the shuttle can move or for controls to unlock. Before this PR, authorization request always redirected admin staff to control the CentCom ferry, even if request came from a shuttle elsewhere, which was a little odd. Authorization request will now properly prompt the staff to control that specific shuttle, and now they also have quick option to unlock/lock the shuttle. Could come handy in events to restrict player movement. Last change, escape pods no longer start as admin controlled, as they cannot be launched without atleast code red anyway. They instead properly state they are just locked. --- code/modules/admin/topic.dm | 19 +++++++++++++++++++ .../security_levels/security_levels.dm | 4 ++-- code/modules/shuttle/computer.dm | 16 +++++++++++++--- code/modules/shuttle/emergency.dm | 2 +- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a3a995bb28a..c80d5d4315d 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -246,6 +246,25 @@ usr.client.trigger_centcom_recall() + else if(href_list["move_shuttle"]) + if(!check_rights(R_ADMIN)) + return + + var/obj/docking_port/mobile/shuttle = SSshuttle.getShuttle(href_list["move_shuttle"]) + if(!shuttle) + return + shuttle.admin_fly_shuttle(usr) + + else if(href_list["unlock_shuttle"]) + if(!check_rights(R_ADMIN)) + return + + var/obj/machinery/computer/shuttle/shuttle_console = locate(href_list["unlock_shuttle"]) + if(!shuttle_console) + return + shuttle_console.admin_controlled = !shuttle_console.admin_controlled + to_chat(usr, "[shuttle_console] was [shuttle_console.admin_controlled ? "locked" : "unlocked"].", confidential = TRUE) + else if(href_list["toggle_continuous"]) if(!check_rights(R_ADMIN)) return diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index 882d93e891f..3a17b3dab11 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -60,7 +60,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) if(is_station_level(FA.z)) FA.update_icon() for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) - pod.admin_controlled = FALSE + pod.locked = FALSE if(SEC_LEVEL_DELTA) minor_announce(CONFIG_GET(string/alert_delta), "Attention! Delta security level reached!",1) if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) @@ -73,7 +73,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) if(is_station_level(FA.z)) FA.update_icon() for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) - pod.admin_controlled = FALSE + pod.locked = FALSE if(level >= SEC_LEVEL_RED) for(var/obj/machinery/door/D in GLOB.machines) if(D.red_alert_access) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 6dfdd8fbb8e..d0dbf15d56c 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -15,6 +15,8 @@ var/no_destination_swap = FALSE /// ID of the currently selected destination of the attached shuttle var/destination + /// If the console controls are locked + var/locked = FALSE /// Authorization request cooldown to prevent request spam to admin staff COOLDOWN_DECLARE(request_cooldown) @@ -30,7 +32,7 @@ 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["locked"] = locked data["authorization_required"] = admin_controlled data["timer_str"] = M ? M.getTimerStr() : "00:00" data["destination"] = destination @@ -39,8 +41,16 @@ return data if(admin_controlled) data["status"] = "Unauthorized Access" + else if(locked) + data["status"] = "Locked" else - data["status"] = M.mode == SHUTTLE_IGNITING ? "Igniting" : M.mode != SHUTTLE_IDLE ? "In Transit" : "Idle" + switch(M.mode) + if(SHUTTLE_IGNITING) + data["status"] = "Igniting" + if(SHUTTLE_IDLE) + data["status"] = "Idle" + else + data["status"] = "In Transit" for(var/obj/docking_port/stationary/S in SSshuttle.stationary) if(!options.Find(S.id)) continue @@ -106,7 +116,7 @@ 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.") + to_chat(GLOB.admins, "SHUTTLE: [ADMIN_LOOKUPFLW(usr)] (Move Shuttle)(Lock/Unlock Shuttle) is requesting to move or unlock the shuttle.") return TRUE /obj/machinery/computer/shuttle/emag_act(mob/user) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 0f532aec134..636f6fc3274 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -465,7 +465,7 @@ /obj/machinery/computer/shuttle/pod name = "pod control computer" - admin_controlled = TRUE + locked = TRUE possible_destinations = "pod_asteroid" icon = 'icons/obj/terminals.dmi' icon_state = "dorm_available"