diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm index ddac25ee83..ddfb679932 100644 --- a/code/controllers/subsystems/transcore_vr.dm +++ b/code/controllers/subsystems/transcore_vr.dm @@ -56,7 +56,7 @@ SUBSYSTEM_DEF(transcore) implants -= imp continue - //In a human + //In a human BITSET(H.hud_updateflag, BACKUP_HUD) if(H == imp.imp_in && H.mind && H.stat < DEAD) @@ -93,6 +93,7 @@ SUBSYSTEM_DEF(transcore) else if(curr_MR.dead_state != MR_DEAD) //First time switching to dead notify(name) + curr_MR.last_notification = world.time curr_MR.dead_state = MR_DEAD if(MC_TICK_CHECK) @@ -158,9 +159,12 @@ SUBSYSTEM_DEF(transcore) return 1 // Send a past-due notification to the medical radio channel. -/datum/controller/subsystem/transcore/proc/notify(var/name) +/datum/controller/subsystem/transcore/proc/notify(var/name, var/repeated = FALSE) ASSERT(name) - global_announcer.autosay("[name] is past-due for a mind backup. This will be the only notification.", "TransCore Oversight", "Medical") + if(repeated) + global_announcer.autosay("This is a repeat notification that [name] is past-due for a mind backup.", "TransCore Oversight", "Medical") + else + global_announcer.autosay("[name] is past-due for a mind backup.", "TransCore Oversight", "Medical") // Called from mind_record to add itself to the transcore. /datum/controller/subsystem/transcore/proc/add_backup(var/datum/transhuman/mind_record/MR) diff --git a/code/modules/mob/dead/observer/observer_vr.dm b/code/modules/mob/dead/observer/observer_vr.dm index 97280c78b9..a0079cbee4 100644 --- a/code/modules/mob/dead/observer/observer_vr.dm +++ b/code/modules/mob/dead/observer/observer_vr.dm @@ -56,3 +56,23 @@ mind.active = TRUE SC.catch_mob(src) //This will result in us being deleted so... + +/mob/observer/dead/verb/backup_ping() + set category = "Ghost" + set name = "Notify Transcore" + set desc = "If your past-due backup notification was missed or ignored, you can use this to send a new one." + + var/record_found = FALSE + for(var/datum/transhuman/mind_record/record in SStranscore.backed_up) + if(record.ckey == ckey) + record_found = TRUE + if(!(record.dead_state == MR_DEAD)) + to_chat(src, "Your backup is not past-due yet.") + else if((world.time - record.last_notification) < 10 MINUTES) + to_chat(src, "Too little time has passed since your last notification.") + else + SStranscore.notify(record.mindname, TRUE) + to_chat(src, "New notification has been sent.") + + if(!record_found) + to_chat(src, "No mind record found!") \ No newline at end of file diff --git a/code/modules/resleeving/infocore_records.dm b/code/modules/resleeving/infocore_records.dm index 834b067e9d..134d2be87d 100644 --- a/code/modules/resleeving/infocore_records.dm +++ b/code/modules/resleeving/infocore_records.dm @@ -14,6 +14,7 @@ //0: Normal, 1: Might be dead, 2: Definitely dead, show on console var/dead_state = 0 var/last_update = 0 + var/last_notification //Backend var/ckey = ""