Merge pull request #15536 from AffectedArc07/disaster-counter

Disaster Counters
This commit is contained in:
Fox McCloud
2021-02-24 03:40:51 -05:00
committed by GitHub
5 changed files with 133 additions and 18 deletions
+5 -2
View File
@@ -81119,10 +81119,10 @@
/turf/simulated/wall/r_wall,
/area/medical/chemistry)
"cXf" = (
/obj/machinery/status_display{
/obj/structure/closet/secure_closet/reagents,
/obj/structure/disaster_counter/chemistry{
pixel_x = -32
},
/obj/structure/closet/secure_closet/reagents,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "whitegreen";
@@ -95264,6 +95264,9 @@
network = list("Research Outpost")
},
/obj/effect/decal/warning_stripes/yellow/hollow,
/obj/structure/disaster_counter/toxins{
pixel_y = 32
},
/turf/simulated/floor/plasteel,
/area/toxins/mixing)
"dxe" = (
@@ -67017,6 +67017,9 @@
/obj/structure/closet/wardrobe/chemistry_white,
/obj/item/storage/backpack/satchel_chem,
/obj/effect/decal/warning_stripes/south,
/obj/structure/disaster_counter/chemistry{
pixel_y = 32
},
/turf/simulated/floor/plasteel{
icon_state = "white"
},
@@ -73773,6 +73776,9 @@
dir = 4
},
/obj/effect/decal/warning_stripes/yellow/hollow,
/obj/structure/disaster_counter/toxins{
pixel_y = 32
},
/turf/simulated/floor/plasteel,
/area/toxins/mixing{
name = "\improper Toxins Lab"
@@ -84090,6 +84096,9 @@
/obj/structure/noticeboard{
pixel_y = 30
},
/obj/structure/disaster_counter/scichem{
pixel_x = 32
},
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "whitepurplefull";
+22 -16
View File
@@ -43596,6 +43596,9 @@
/area/hallway/secondary/entry)
"bLD" = (
/obj/structure/closet/secure_closet/reagents,
/obj/structure/disaster_counter/chemistry{
pixel_x = -32
},
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "whiteyellow"
@@ -44752,12 +44755,6 @@
/area/medical/reception)
"bNA" = (
/obj/effect/decal/warning_stripes/northeast,
/obj/item/radio/intercom{
frequency = 1459;
name = "station intercom (General)";
pixel_x = -28;
pixel_y = 22
},
/turf/simulated/floor/plasteel,
/area/medical/chemistry)
"bNB" = (
@@ -60290,7 +60287,13 @@
pixel_y = 0
},
/obj/machinery/alarm{
pixel_y = 25
pixel_y = 31
},
/obj/machinery/driver_button{
dir = 2;
id_tag = "toxinsdriver";
pixel_y = 22;
range = 18
},
/turf/simulated/floor/plasteel,
/area/toxins/launch{
@@ -61438,15 +61441,12 @@
name = "Toxins Launch Room"
})
"cqq" = (
/obj/machinery/driver_button{
dir = 2;
id_tag = "toxinsdriver";
pixel_y = 24;
range = 18
},
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
/obj/structure/disaster_counter/toxins{
pixel_y = 32
},
/turf/simulated/floor/plasteel,
/area/toxins/launch{
name = "Toxins Launch Room"
@@ -68306,13 +68306,13 @@
},
/area/toxins/misc_lab)
"cCl" = (
/obj/machinery/newscaster{
pixel_y = 34
},
/obj/machinery/light{
dir = 1;
on = 1
},
/obj/structure/disaster_counter/scichem{
pixel_y = 32
},
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "vault";
@@ -68334,6 +68334,9 @@
/area/toxins/misc_lab)
"cCn" = (
/obj/machinery/chem_heater,
/obj/machinery/newscaster{
pixel_y = 34
},
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "vault";
@@ -78694,6 +78697,9 @@
},
/obj/machinery/meter,
/obj/machinery/light,
/obj/structure/disaster_counter/supermatter{
pixel_y = -32
},
/turf/simulated/floor/engine,
/area/engine/engineering)
"cVB" = (
@@ -0,0 +1,96 @@
/**
* # Disaster counter.
*
* Tracks how many shifts it has been since the counter with that ID was exploded.
*/
/obj/structure/disaster_counter
name = "disaster counter"
desc = "This device will count how many shifts it has been since a major disaster in this area. A safe workplace is a productive workplace."
icon = 'icons/obj/status_display.dmi'
icon_state = "frame"
maptext_y = 10 // Offset by 10 so it renders properly
/// ID of the counter. Must be overriden. Use alphanumerics with no spaces only, as this is used in the filesystem.
var/counter_id
/// Current count number
var/current_count = 0
/// Record count
var/record_count = 0
/obj/structure/disaster_counter/examine(mob/user)
. = ..()
. += "The display reads 'Currently [current_count] shifts without an accident, with a record of [record_count] shifts!'"
/obj/structure/disaster_counter/Initialize(mapload)
. = ..()
if(!counter_id)
stack_trace("Disaster counter at [x],[y],[z] does not have a counter_id set. Deleting...")
return INITIALIZE_HINT_QDEL
// If we still exist, put ourselves in
SSpersistent_data.register(src)
/obj/structure/disaster_counter/ex_act(severity)
if(severity < 2)
current_count = -1
persistent_save()
. = ..()
/obj/structure/disaster_counter/Destroy()
if(counter_id)
SSpersistent_data.registered_atoms -= src // Take us out the list
return ..()
/obj/structure/disaster_counter/persistent_load()
// Just incase some bad actor sets the counter ID to "../../../../Windows/System32"
// Yes I am that paranoid
if(counter_id != paranoid_sanitize(counter_id))
stack_trace("Counter ID did not pass sanitization for disaster counter at [x],[y],[z]. Potential attempt at filesystem manipulation.")
qdel(src)
return
var/savefile/S = new /savefile("data/disaster_counters/[counter_id].sav")
S["count"] >> current_count
S["record"] >> record_count
if(isnull(current_count))
current_count = 0
else
current_count++ // Increase by 1 since this is the next shift without a disaster (yet)
if(isnull(record_count))
record_count = current_count
else
// NEW RECORD
if(current_count > record_count)
record_count = current_count
log_debug("Persistent data for [src] loaded (current_count: [current_count] | record_count: [record_count])")
maptext = "<span class='maptext' style='text-align: center'>[current_count]/[record_count]</span>"
/obj/structure/disaster_counter/persistent_save()
if(counter_id != paranoid_sanitize(counter_id))
stack_trace("Counter ID did not pass sanitization for disaster counter at [x],[y],[z]. Potential attempt at filesystem manipulation.")
qdel(src)
return
var/savefile/S = new /savefile("data/disaster_counters/[counter_id].sav")
S["count"] << current_count
S["record"] << record_count
log_debug("Persistent data for [src] saved (current_count: [current_count] | record_count: [record_count])")
// Prefab definitions to make mapping easier
/obj/structure/disaster_counter/supermatter
name = "supermatter disaster counter"
counter_id = "supermatter"
/obj/structure/disaster_counter/chemistry
name = "chemistry disaster counter"
counter_id = "chemistry"
/obj/structure/disaster_counter/scichem
name = "science chemistry disaster counter"
counter_id = "scichem"
/obj/structure/disaster_counter/toxins
name = "toxins launch room disaster counter"
counter_id = "toxinslaunch"
+1
View File
@@ -1036,6 +1036,7 @@
#include "code\game\objects\structures\coathanger.dm"
#include "code\game\objects\structures\curtains.dm"
#include "code\game\objects\structures\depot.dm"
#include "code\game\objects\structures\disaster_counter.dm"
#include "code\game\objects\structures\displaycase.dm"
#include "code\game\objects\structures\door_assembly.dm"
#include "code\game\objects\structures\door_assembly_types.dm"