diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 0cf03e3a84..a634810dbf 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -29,6 +29,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/respawn_restrictions_active = FALSE
/// time of death we consider for respawns
var/respawn_time_of_death = -INFINITY
+ /// did they DNR? used to prevent respawns.
+ var/dnr_triggered = FALSE
// Intra-round persistence end
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index b16903f062..800f704ab6 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -428,12 +428,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
to_chat(usr, "You're already stuck out of your body!")
return FALSE
- var/response = alert(src, "Are you sure you want to prevent (almost) all means of resuscitation? This cannot be undone. ","Are you sure you want to stay dead?","Yes","No")
+ var/response = alert(src, "Are you sure you want to prevent (almost) all means of resuscitation? This cannot be undone. THIS WILL ALSO STOP YOU FROM RESPAWNING!!!","Are you sure you want to stay dead and never respawn?","Yes","No")
+
if(response != "Yes")
return
can_reenter_corpse = FALSE
- to_chat(src, "You can no longer be brought back into your body.")
+ client.prefs?.dnr_triggered = TRUE
+ to_chat(src, "You can no longer be brought back into your body or respawn.")
return TRUE
/mob/dead/observer/proc/notify_cloning(var/message, var/sound, var/atom/source, flashwindow = TRUE)
diff --git a/code/modules/mob/dead/observer/respawn.dm b/code/modules/mob/dead/observer/respawn.dm
index 5a5a4572bd..a53fc514b8 100644
--- a/code/modules/mob/dead/observer/respawn.dm
+++ b/code/modules/mob/dead/observer/respawn.dm
@@ -33,6 +33,7 @@
log_admin("[key_name(src)] gave [key_name(O)] a full respawn and sent them back to the lobby.")
to_chat(O, "You have been given a full respawn.")
O.do_respawn(FALSE)
+ O.client.prefs.dnr_triggered = FALSE
else if(istype(M, /mob/dead/new_player))
var/mob/dead/new_player/NP = M
var/confirm = alert(src, "Remove [NP]'s respawn restrictions?", "Remove Restrictions", "Yes", "No")
@@ -41,6 +42,7 @@
message_admins("[key_name_admin(src)] removed [ckey]'s respawn restrictions.")
log_admin("[key_name(src)] removed [ckey]'s respawn restrictions")
NP.client.prefs.respawn_restrictions_active = FALSE
+ NP.client.prefs.dnr_triggered = FALSE
to_chat(NP, "Your respawn restrictions have been removed.")
else
CRASH("Invalid mobtype")
@@ -107,6 +109,10 @@
to_chat(src, "Respawns are disabled in configuration.")
return
+ if(client.prefs.dnr_triggered)
+ to_chat(src, "You cannot respawn as you have enabled DNR.")
+ return
+
var/timeleft = time_left_to_respawn()
if(timeleft)
to_chat(src, "It's been too short of a time since you died/observed! Please wait [round(timeleft / 600, 0.1)] more minutes.")