diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index db730a26034..8c8583cd28d 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -374,8 +374,7 @@ var/datum/subsystem/ticker/ticker world << "
[TAB]Total Population: [joined_player_list.len]" if(station_evacuated) world << "
[TAB]Evacuation Rate: [num_escapees] ([round((num_escapees/joined_player_list.len)*100, 0.1)]%)" - else - world << "
[TAB]Survival Rate: [num_survivors] ([round((num_survivors/joined_player_list.len)*100, 0.1)]%)" + world << "
[TAB]Survival Rate: [num_survivors] ([round((num_survivors/joined_player_list.len)*100, 0.1)]%)" world << "
" //Silicon laws report diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 179ba2c0fb1..452288e8ffd 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -280,10 +280,12 @@ return 0 if(isbrain(owner.current)) return 0 - if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) - return 0 if(!owner.current || owner.current.stat == DEAD) return 0 + if(ticker.force_ending) //This one isn't their fault, so lets just assume good faith + return 1 + if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) + return 0 var/turf/location = get_turf(owner.current) if(!location) return 0 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 9d8c74ea4f8..71e35f2ff89 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -221,21 +221,21 @@ var/global/floorIsLava = 0 if(6) dat+="ERROR: Could not submit Feed story to Network.

" if(src.admincaster_feed_channel.channel_name=="") - dat+="•Invalid receiving channel name.
" + dat+="•Invalid receiving channel name.
" if(src.admincaster_feed_message.returnBody(-1) == "" || src.admincaster_feed_message.returnBody(-1) == "\[REDACTED\]") - dat+="•Invalid message body.
" + dat+="•Invalid message body.
" dat+="
Return
" if(7) dat+="ERROR: Could not submit Feed Channel to Network.

" if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]") - dat+="•Invalid channel name.
" + dat+="•Invalid channel name.
" var/check = 0 for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) if(FC.channel_name == src.admincaster_feed_channel.channel_name) check = 1 break if(check) - dat+="•Channel name already in use.
" + dat+="•Channel name already in use.
" dat+="
Return
" if(9) dat+="[admincaster_feed_channel.channel_name]: \[created by: [admincaster_feed_channel.returnAuthor(-1)]\]
" @@ -336,9 +336,9 @@ var/global/floorIsLava = 0 if(16) dat+="ERROR: Wanted Issue rejected by Network.

" if(src.admincaster_wanted_message.criminal =="" || src.admincaster_wanted_message.criminal == "\[REDACTED\]") - dat+="•Invalid name for person wanted.
" + dat+="•Invalid name for person wanted.
" if(src.admincaster_wanted_message.body == "" || src.admincaster_wanted_message.body == "\[REDACTED\]") - dat+="•Invalid description.
" + dat+="•Invalid description.
" dat+="
Return
" if(17) dat+="Wanted Issue successfully deleted from Circulation
" @@ -406,7 +406,7 @@ var/global/floorIsLava = 0 /datum/admins/proc/restart() set category = "Server" - set name = "Restart" + set name = "Hard Restart" set desc="Restarts the world immediately" if (!usr.client.holder) return @@ -418,6 +418,20 @@ var/global/floorIsLava = 0 feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10) +/datum/admins/proc/end_round() + set category = "Server" + set name = "End Round" + set desc = "Attempts to produce a round end report and then restart the server organically." + + if (!usr.client.holder) + return + var/confirm = alert("End the round and restart the game world?", "End Round", "Yes", "Cancel") + if(confirm == "Cancel") + return + if(confirm == "Yes") + ticker.force_ending = 1 + feedback_add_details("admin_verb","ER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + /datum/admins/proc/announce() set category = "Special Verbs" @@ -790,4 +804,4 @@ var/global/floorIsLava = 0 tomob.ckey = frommob.ckey qdel(frommob) - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 7d0d320bbc7..e9164a44db9 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -98,6 +98,7 @@ var/list/admin_verbs_spawn = list( var/list/admin_verbs_server = list( /datum/admins/proc/startnow, /datum/admins/proc/restart, + /datum/admins/proc/end_round, /datum/admins/proc/delay, /datum/admins/proc/toggleaban, /client/proc/toggle_log_hrefs, diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index bcc55ee136a..eec40beca16 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -352,7 +352,6 @@ message_admins("[key_name_admin(usr)] is considering ending the round.") if(alert(usr, "This will end the round, are you SURE you want to do this?", "Confirmation", "Yes", "No") == "Yes") - spawn(200) //I wish you would step back from that ledge my friend if(alert(usr, "Final Confirmation: End the round NOW?", "Confirmation", "Yes", "No") == "Yes") message_admins("[key_name_admin(usr)] has ended the round.") ticker.force_ending = 1 //Yeah there we go APC destroyed mission accomplished