mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-19 19:13:30 +01:00
Merge pull request #15536 from AffectedArc07/disaster-counter
Disaster Counters
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user