diff --git a/code/controllers/emergency_shuttle_controller.dm b/code/controllers/emergency_shuttle_controller.dm index 4194567ae10..7bdbb664724 100644 --- a/code/controllers/emergency_shuttle_controller.dm +++ b/code/controllers/emergency_shuttle_controller.dm @@ -70,8 +70,9 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle wait_for_launch = 0 //calls the shuttle for an emergency evacuation -/datum/emergency_shuttle_controller/proc/call_evac() - if(!can_call()) return 0 +/datum/emergency_shuttle_controller/proc/call_evac(var/reason) + if(!can_call()) + return 0 //set the launch timer autopilot = 1 @@ -82,7 +83,10 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle shuttle.move_time = SHUTTLE_TRANSIT_DURATION evac = 1 - emergency_shuttle_called.Announce("An emergency evacuation shuttle has been called. It will arrive in approximately [round(estimate_arrival_time()/60)] minutes.") + var/emergencytext = "An emergency evacuation shuttle has been called. It will arrive in approximately [round(estimate_arrival_time()/60)] minutes." + if(reason) + emergencytext += "\n\nReason: [reason]" + emergency_shuttle_called.Announce(emergencytext) for(var/area/A in world) if(istype(A, /area/hallway)) A.readyalert() diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 509082a7433..66c56dd196a 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -170,11 +170,14 @@ var/shuttle_call/shuttle_calls[0] message_cooldown = 0 if("callshuttle") - var/response = alert("Are you sure you wish to call the shuttle?", "Confirm", "Yes", "No") - if(response == "Yes") - call_shuttle_proc(usr) - if(emergency_shuttle.online()) - post_status("shuttle") + var/input = stripped_input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null + if(!input || ..() || !(is_authenticated(usr) == 2)) + nanomanager.update_uis(src) + return + + call_shuttle_proc(usr, input) + if(emergency_shuttle.online()) + post_status("shuttle") setMenuState(usr,COMM_SCREEN_MAIN) if("cancelshuttle") @@ -239,7 +242,7 @@ var/shuttle_call/shuttle_calls[0] usr << "Arrays recycling. Please stand by." nanomanager.update_uis(src) return - var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","") + var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","") as text|null if(!input || ..() || !(is_authenticated(usr) == 2)) nanomanager.update_uis(src) return @@ -258,7 +261,7 @@ var/shuttle_call/shuttle_calls[0] usr << "Arrays recycling. Please stand by." nanomanager.update_uis(src) return - var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") + var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") as text|null if(!input || ..() || !(is_authenticated(usr) == 2)) nanomanager.update_uis(src) return @@ -277,7 +280,7 @@ var/shuttle_call/shuttle_calls[0] usr << "Arrays recycling. Please stand by." nanomanager.update_uis(src) return - var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") + var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") as text|null if(!input || ..() || !(is_authenticated(usr) == 2)) nanomanager.update_uis(src) return @@ -410,39 +413,38 @@ var/shuttle_call/shuttle_calls[0] for(var/obj/machinery/computer/prison_shuttle/PS in world) PS.allowedtocall = !(PS.allowedtocall) -/proc/call_shuttle_proc(var/mob/user) +/proc/call_shuttle_proc(var/mob/user, var/reason) if ((!( ticker ) || !emergency_shuttle.location())) return if(sent_strike_team == 1) - user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated." + user << "Central Command will not allow the shuttle to be called. Consider all contracts terminated." return if(emergency_shuttle.deny_shuttle) - user << "The emergency shuttle may not be sent at this time. Please try again later." + user << "The emergency shuttle may not be sent at this time. Please try again later." return if(world.time < 6000) // Ten minute grace period to let the game get going without lolmetagaming. -- TLE - user << "The emergency shuttle is refueling. Please wait another [round((6000-world.time)/60)] minutes before trying again." + user << "The emergency shuttle is refueling. Please wait another [round((6000-world.time)/60)] minutes before trying again." return if(emergency_shuttle.going_to_centcom()) - user << "The emergency shuttle may not be called while returning to CentCom." + user << "The emergency shuttle may not be called while returning to Central Command." return if(emergency_shuttle.online()) - user << "The emergency shuttle is already on its way." + user << "The emergency shuttle is already on its way." return if(ticker.mode.name == "blob") - user << "Under directive 7-10, [station_name()] is quarantined until further notice." + user << "Under directive 7-10, [station_name()] is quarantined until further notice." return - emergency_shuttle.call_evac() + emergency_shuttle.call_evac(reason) log_game("[key_name(user)] has called the shuttle.") message_admins("[key_name_admin(user)] has called the shuttle.", 1) - return /proc/init_shift_change(var/mob/user, var/force = 0) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index feb735baef2..75eda3ea588 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -911,10 +911,13 @@ Traitors and the like can also be revived with the previous role mostly intact. choice = input("The shuttle will not be able to leave if you call it. Call anyway?") in list("Confirm", "Cancel") if(choice != "Confirm") return + + choice = input("Is this an emergency evacuation or a crew transfer?") in list("Emergency", "Crew Transfer") if (choice == "Emergency") - emergency_shuttle.call_evac() + var/reason = stripped_input(usr, "Optional: Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null + emergency_shuttle.call_evac(reason) else emergency_shuttle.call_transfer() diff --git a/code/modules/computer3/computers/communications.dm b/code/modules/computer3/computers/communications.dm index dd22bde09ec..e2595bda76a 100644 --- a/code/modules/computer3/computers/communications.dm +++ b/code/modules/computer3/computers/communications.dm @@ -129,7 +129,10 @@ if(!computer.radio.subspace) return if(authenticated) - call_shuttle_proc(usr) + var/input = stripped_input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null + if(!input || ..(href, href_list) || !authenticated) + return + call_shuttle_proc(usr, input) if(emergency_shuttle.online()) post_status("shuttle") state = STATE_DEFAULT @@ -236,7 +239,10 @@ if("ai-callshuttle2" in href_list) if(!computer.radio.subspace) return - call_shuttle_proc(usr) + var/input = stripped_input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null + if(!input || ..(href, href_list)) + return + call_shuttle_proc(usr, input) aistate = STATE_DEFAULT if("ai-messagelist" in href_list) aicurrmsg = 0 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 7c78b5ce604..c89552719bb 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -329,20 +329,21 @@ var/list/ai_verbs_default = list( set name = "Call Emergency Shuttle" set category = "AI Commands" - if(src.stat == 2) - src << "You can't call the shuttle because you are dead!" + if(src.stat == DEAD) + src << "You can't call the shuttle because you are dead!" return if(check_unable(AI_CHECK_WIRELESS)) return - var/confirm = alert("Are you sure you want to call the shuttle?", "Confirm Shuttle Call", "Yes", "No") + var/input = stripped_input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null + if(!input || stat) + return if(check_unable(AI_CHECK_WIRELESS)) return - if(confirm == "Yes") - call_shuttle_proc(src) + call_shuttle_proc(src, input) // hack to display shuttle timer if(emergency_shuttle.online())