diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm index 569c006cdf..f8c0031fca 100644 --- a/code/controllers/subsystems/transcore_vr.dm +++ b/code/controllers/subsystems/transcore_vr.dm @@ -295,8 +295,8 @@ SUBSYSTEM_DEF(transcore) // Moves all mind records from the databaes into the disk and shuts down all backup canary processing. /datum/transcore_db/proc/core_dump(obj/item/disk/transcore/disk) ASSERT(disk) - GLOB.global_announcer.autosay("An emergency core dump has been initiated!", "TransCore Oversight", "Command") - GLOB.global_announcer.autosay("An emergency core dump has been initiated!", "TransCore Oversight", "Medical") + GLOB.global_announcer.autosay("An emergency core dump has been completed!", "TransCore Oversight", "Command") + GLOB.global_announcer.autosay("An emergency core dump has been completed!", "TransCore Oversight", "Medical") disk.stored += backed_up backed_up.Cut() diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm index f1755b9204..01dc078698 100644 --- a/code/modules/resleeving/computers.dm +++ b/code/modules/resleeving/computers.dm @@ -2,6 +2,8 @@ #define MENU_BODY 2 #define MENU_MIND 3 +#define TRANSCORE_DUMP_TIME 30 SECONDS + /obj/machinery/computer/transhuman/resleeving name = "resleeving control console" catalogue_data = list(/datum/category_item/catalogue/technology/resleeving) @@ -34,6 +36,7 @@ var/datum/transcore_db/our_db // These persist all round and are never destroyed, just keep a hard ref var/gene_sequencing = FALSE // Traitgenes edit - create a dna injector for fixing dna, but don't let it be abusable + var/dump_in_progress_timer = null /obj/machinery/computer/transhuman/resleeving/Initialize(mapload) . = ..() @@ -47,6 +50,8 @@ releasepods() current_br = null current_mr = null + deltimer(dump_in_progress_timer) + dump_in_progress_timer = null return ..() /obj/machinery/computer/transhuman/resleeving/proc/updatemodules() @@ -184,7 +189,8 @@ )) data["sleevers"] = resleevers - data["coredumped"] = our_db.core_dumped + data["dump_progress"] = (!our_db.core_dumped && dump_in_progress_timer) ? (timeleft(dump_in_progress_timer, SStimer) / (TRANSCORE_DUMP_TIME)) : 0 + data["coredumped"] = !dump_in_progress_timer && our_db.core_dumped data["emergency"] = disk data["temp"] = temp data["selected_pod"] = REF(selected_pod) @@ -255,15 +261,20 @@ current_mr = null . = TRUE if("coredump") - if(disk) - our_db.core_dump(disk) - sleep(5) - visible_message(span_warning("\The [src] spits out \the [disk].")) - current_br = null - disk.forceMove(get_turf(src)) - disk = null + var/area/find_area = get_area(src) + if(!find_area) + find_area = "Unknown" + if(disk && !dump_in_progress_timer) + GLOB.global_announcer.autosay("An emergency core dump has been started in \the [find_area]!", "TransCore Oversight", "Command") + GLOB.global_announcer.autosay("An emergency core dump has been started in \the [find_area]!", "TransCore Oversight", "Medical") + dump_in_progress_timer = addtimer(CALLBACK(src, PROC_REF(dump_transcore_database)), TRANSCORE_DUMP_TIME, TIMER_STOPPABLE) . = TRUE if("ejectdisk") + if(dump_in_progress_timer) + GLOB.global_announcer.autosay("An emergency core dump has been canceled!", "TransCore Oversight", "Command") + GLOB.global_announcer.autosay("An emergency core dump has been canceled!", "TransCore Oversight", "Medical") + deltimer(dump_in_progress_timer) + dump_in_progress_timer = null current_br = null disk.forceMove(get_turf(src)) disk = null @@ -599,6 +610,20 @@ else set_temp("Error: Record missing.", "danger") +/obj/machinery/computer/transhuman/resleeving/proc/dump_transcore_database() + dump_in_progress_timer = null + our_db.core_dump(disk) + visible_message(span_warning("\The [src] spits out \the [disk].")) + current_br = null + var/area/find_area = get_area(src) + if(!find_area) + find_area = "Unknown" + disk.name += " \[[find_area]\]" + disk.forceMove(get_turf(src)) + disk = null + #undef MENU_MAIN #undef MENU_BODY #undef MENU_MIND + +#undef TRANSCORE_DUMP_TIME diff --git a/tgui/packages/tgui/interfaces/ResleevingConsole/ResleevingConsoleCoreDump.tsx b/tgui/packages/tgui/interfaces/ResleevingConsole/ResleevingConsoleCoreDump.tsx index 20851b9d73..35e1fa3be7 100644 --- a/tgui/packages/tgui/interfaces/ResleevingConsole/ResleevingConsoleCoreDump.tsx +++ b/tgui/packages/tgui/interfaces/ResleevingConsole/ResleevingConsoleCoreDump.tsx @@ -1,5 +1,13 @@ import { useBackend } from 'tgui/backend'; -import { Box, Button, Dimmer, Icon, Stack } from 'tgui-core/components'; +import { + Box, + Button, + Dimmer, + Icon, + ProgressBar, + Stack, +} from 'tgui-core/components'; +import type { Data } from './types'; export const ResleevingConsoleCoreDump = (props) => { return ( @@ -62,3 +70,25 @@ export const PulsingWarningTriangle = (props) => { /> ); }; + +export const ResleevingConsoleDumpProgress = (props) => { + const { act, data } = useBackend(); + const { dump_progress } = data; + return ( + + +

TRANSCORE DUMP IN PROGRESS

+
+ +

!!WARNING!!

+
+ + + + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ResleevingConsole/index.tsx b/tgui/packages/tgui/interfaces/ResleevingConsole/index.tsx index b7791656ec..d0ce958c31 100644 --- a/tgui/packages/tgui/interfaces/ResleevingConsole/index.tsx +++ b/tgui/packages/tgui/interfaces/ResleevingConsole/index.tsx @@ -7,6 +7,7 @@ import { MindRecordModal } from './MindRecordModal'; import { ResleevingConsoleCoreDump, ResleevingConsoleDiskPrep, + ResleevingConsoleDumpProgress, } from './ResleevingConsoleCoreDump'; import { ResleevingConsoleBody, @@ -18,7 +19,7 @@ import type { Data } from './types'; export const ResleevingConsole = (props) => { const { data } = useBackend(); - const { coredumped, emergency } = data; + const { coredumped, dump_progress, emergency } = data; let body: React.JSX.Element = ( @@ -41,6 +42,9 @@ export const ResleevingConsole = (props) => { if (emergency) { body = ; } + if (dump_progress) { + body = ; + } return ( {data.active_b_rec && ( diff --git a/tgui/packages/tgui/interfaces/ResleevingConsole/types.ts b/tgui/packages/tgui/interfaces/ResleevingConsole/types.ts index 5b9933d92c..6fea964b0a 100644 --- a/tgui/packages/tgui/interfaces/ResleevingConsole/types.ts +++ b/tgui/packages/tgui/interfaces/ResleevingConsole/types.ts @@ -18,6 +18,7 @@ export type Data = { occupied: BooleanLike; occupant: string; }[]; + dump_progress: number; coredumped: BooleanLike; emergency: BooleanLike; temp: { text: string; style: string } | null;