From b5841c718bfc9a4c9f72a916adb5fc21071de42a Mon Sep 17 00:00:00 2001 From: Poojawa Date: Wed, 7 Aug 2019 06:14:35 -0500 Subject: [PATCH 1/2] Genpop for security --- code/__DEFINES/access.dm | 4 +- .../weather/weather_types/radiation_storm.dm | 2 +- code/game/machinery/turnstile.dm | 84 +++++++++++++ code/game/objects/items/cards_ids.dm | 35 +++++- .../crates_lockers/closets/genpop.dm | 117 ++++++++++++++++++ code/modules/jobs/access.dm | 8 +- icons/obj/closet.dmi | Bin 37806 -> 38279 bytes icons/obj/turnstile.dmi | Bin 0 -> 4951 bytes tgstation.dme | 2 + 9 files changed, 245 insertions(+), 7 deletions(-) create mode 100644 code/game/machinery/turnstile.dm create mode 100644 code/game/objects/structures/crates_lockers/closets/genpop.dm create mode 100644 icons/obj/turnstile.dmi diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index c9d545fc03..c2021a86f2 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -6,7 +6,7 @@ #define ACCESS_MORGUE 6 #define ACCESS_TOX 7 //R&D department, R&D console, burn chamber on some maps #define ACCESS_TOX_STORAGE 8 //Toxins storage, burn chamber on some maps -#define ACCESS_GENETICS 9 +#define ACCESS_GENETICS 9 #define ACCESS_ENGINE 10 //Engineering area, power monitor, power flow control console #define ACCESS_ENGINE_EQUIP 11 //APCs, EngiVend/YouTool, engineering equipment lockers #define ACCESS_MAINT_TUNNELS 12 @@ -64,6 +64,8 @@ #define ACCESS_WEAPONS 66 //Weapon authorization for secbots #define ACCESS_NETWORK 67 //NTnet diagnostics/monitoring software #define ACCESS_CLONING 68 //Cloning room and clone pod ejection +#define ACCESS_ENTER_GENPOP 69 +#define ACCESS_LEAVE_GENPOP 70 //BEGIN CENTCOM ACCESS /*Should leave plenty of room if we need to add more access levels. diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index f3b8118087..6765cdf2cd 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -18,7 +18,7 @@ area_type = /area protected_areas = list(/area/maintenance, /area/ai_monitored/turret_protected/ai_upload, /area/ai_monitored/turret_protected/ai_upload_foyer, - /area/ai_monitored/turret_protected/ai, /area/storage/emergency/starboard, /area/storage/emergency/port, /area/shuttle) + /area/ai_monitored/turret_protected/ai, /area/storage/emergency/starboard, /area/storage/emergency/port, /area/shuttle, /area/security/prison) target_trait = ZTRAIT_STATION immunity_type = "rad" diff --git a/code/game/machinery/turnstile.dm b/code/game/machinery/turnstile.dm new file mode 100644 index 0000000000..1fd78056d4 --- /dev/null +++ b/code/game/machinery/turnstile.dm @@ -0,0 +1,84 @@ +/obj/machinery/turnstile + name = "turnstile" + desc = "A mechanical door that permits one-way access and prevents tailgating." + icon = 'icons/obj/turnstile.dmi' + icon_state = "turnstile_map" + density = FALSE + armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100, fire = 90, acid = 70) + anchored = TRUE + use_power = FALSE + idle_power_usage = 2 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + layer = OPEN_DOOR_LAYER + +/obj/machinery/turnstile/Initialize() + . = ..() + icon_state = "turnstile" + +/obj/machinery/turnstile/CanAtmosPass(turf/T) + return TRUE + +/obj/machinery/turnstile/bullet_act(obj/item/projectile/P, def_zone) + return -1 //Pass through! + +/obj/machinery/turnstile/proc/allowed_access(var/mob/B) + if(B.pulledby && ismob(B.pulledby)) + return allowed(B.pulledby) | allowed(B) + else + return allowed(B) + +/obj/machinery/turnstile/CanPass(atom/movable/AM, turf/T) + if(ismob(AM)) + var/mob/B = AM + if(isliving(AM)) + var/mob/living/M = AM + + if(world.time - M.last_bumped <= 5) + return FALSE + M.last_bumped = world.time + + var/allowed_access = FALSE + var/turf/behind = get_step(src, dir) + + if(B in behind.contents) + allowed_access = allowed_access(B) + else + to_chat(usr, "\the [src] resists your efforts.") + return FALSE + + if(allowed_access) + flick("operate", src) + playsound(src,'sound/items/ratchet.ogg',50,0,3) + return TRUE + else + flick("deny", src) + playsound(src,'sound/machines/deniedbeep.ogg',50,0,3) + return FALSE + if(ispath(AM, /obj/item/)) + return TRUE + else + return FALSE + +/obj/machinery/turnstile/CheckExit(atom/movable/AM as mob|obj, target) + if(isliving(AM)) + var/mob/living/M = AM + var/outdir = dir + if(allowed_access(M)) + switch(dir) + if(NORTH) + outdir = SOUTH + if(SOUTH) + outdir = NORTH + if(EAST) + outdir = WEST + if(WEST) + outdir = EAST + var/turf/outturf = get_step(src, outdir) + var/canexit = (target == src.loc) | (target == outturf) + + if(!canexit && world.time - M.last_bumped <= 5) + to_chat(usr, "\the [src] resists your efforts.") + M.last_bumped = world.time + return canexit + else + return TRUE \ No newline at end of file diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 96bbe759ca..e5f40d7c52 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -354,12 +354,41 @@ update_label("John Doe", "Clowny") lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' assignment = "Prisoner" - registered_name = "Scum" + access = list(ACCESS_ENTER_GENPOP) + + //Lavaland labor camp var/goal = 0 //How far from freedom? var/points = 0 + //Genpop + var/sentence = 0 //When world.time is greater than this number, the card will have its ACCESS_ENTER_GENPOP access replaced with ACCESS_LEAVE_GENPOP the next time it's checked, unless this value is 0/null + var/crime= "\[REDACTED\]" -/obj/item/card/id/prisoner/attack_self(mob/user) - to_chat(usr, "You have accumulated [points] out of the [goal] points you need for freedom.") +/obj/item/card/id/prisoner/GetAccess() + if((sentence && world.time >= sentence) || (goal && points >= goal)) + access = list(ACCESS_LEAVE_GENPOP) + return ..() + +/obj/item/card/id/prisoner/process() + if(!sentence) + STOP_PROCESSING(SSobj, src) + return + if(world.time >= sentence) + playsound(loc, 'sound/machines/ping.ogg', 50, 1) + if(isliving(loc)) + to_chat(loc, "[src] buzzes: You have served your sentence! You may now exit prison through the turnstiles and collect your belongings.") + STOP_PROCESSING(SSobj, src) + return + +/obj/item/card/id/prisoner/examine(mob/user) + . = ..() + if(sentence && world.time < sentence) + to_chat(user, "You're currently serving a sentence for [crime]. [DisplayTimeText(sentence - world.time)] left.") + else if(goal) + to_chat(user, "You have accumulated [points] out of the [goal] points you need for freedom.") + else if(!sentence) + to_chat(user, "You are currently serving a permanent sentence for [crime].") + else + to_chat(user, "Your sentence is up! You're free!") /obj/item/card/id/prisoner/one name = "Prisoner #13-001" diff --git a/code/game/objects/structures/crates_lockers/closets/genpop.dm b/code/game/objects/structures/crates_lockers/closets/genpop.dm new file mode 100644 index 0000000000..80b64aaedc --- /dev/null +++ b/code/game/objects/structures/crates_lockers/closets/genpop.dm @@ -0,0 +1,117 @@ +/obj/structure/closet/secure_closet/genpop + desc = "It's a secure locker for inmates's personal belongings." + var/default_desc = "It's a secure locker for the storage inmates's personal belongings during their time in prison." + name = "prisoner closet" + var/default_name = "prisoner closet" + req_access = list(ACCESS_BRIG) + var/obj/item/card/id/prisoner/registered_id = null + icon_state = "prisoner" + locked = FALSE + anchored = TRUE + opened = TRUE + density = FALSE + +/obj/structure/closet/secure_closet/genpop/attackby(obj/item/W, mob/user, params) + if(!broken && locked && W == registered_id) //Prisoner opening + handle_prisoner_id(user) + return + + return ..() + +/obj/structure/closet/secure_closet/genpop/proc/handle_prisoner_id(mob/user) + var/obj/item/card/id/prisoner/prisoner_id = null + for(prisoner_id in user.held_items) + if(prisoner_id != registered_id) + prisoner_id = null + else + break + + if(!prisoner_id) + to_chat(user, "Access Denied.") + return FALSE + + qdel(registered_id) + registered_id = null + locked = FALSE + open(user) + desc = "It's a secure locker for prisoner effects." + to_chat(user, "You insert your prisoner id into \the [src] and it springs open!") + + return TRUE + +/obj/structure/closet/secure_closet/genpop/proc/handle_edit_sentence(mob/user) + var/prisoner_name = input(user, "Please input the name of the prisoner.", "Prisoner Name", registered_id.registered_name) as text|null + if(prisoner_name == null | !user.Adjacent(src)) + return FALSE + var/sentence_length = input(user, "Please input the length of their sentence in minutes (0 for perma).", "Sentence Length", registered_id.sentence) as num|null + if(sentence_length == null | !user.Adjacent(src)) + return FALSE + var/crimes = input(user, "Please input their crimes.", "Crimes", registered_id.crime) as text|null + if(crimes == null | !user.Adjacent(src)) + return FALSE + + registered_id.registered_name = prisoner_name + var/filteredsentlength = text2num(sentence_length) + registered_id.sentence = filteredsentlength ? (filteredsentlength MINUTES) + world.time : 0 + registered_id.crime = crimes + registered_id.update_label(prisoner_name, registered_id.assignment) + if(registered_id.sentence) + START_PROCESSING(SSobj, registered_id) + else + STOP_PROCESSING(SSobj, registered_id) + + name = "[default_name] ([prisoner_name])" + desc = "[default_desc] It contains the personal effects of [prisoner_name]." + + return TRUE + +/obj/structure/closet/secure_closet/genpop/togglelock(mob/living/user) + if(!allowed(user)) + return ..() + + if(!broken && locked && registered_id != null) + var/name = registered_id.registered_name + var/result = alert(user, "This locker currently contains [name]'s personal belongings ","Locker In Use","Reset","Amend ID", "Open") + if(!user.Adjacent(src)) + return + if(result == "Reset") + name = default_name + desc = default_desc + registered_id = null + if(result == "Open" | result == "Reset") + locked = FALSE + open(user) + if(result == "Amend ID") + handle_edit_sentence(user) + else + return ..() + +/obj/structure/closet/secure_closet/genpop/close(mob/living/user) + if(registered_id != null) + locked = TRUE + return ..() + +/obj/structure/closet/secure_closet/genpop/attack_hand(mob/user) + if(user.lying && get_dist(src, user) > 0) + return + + if(!broken && registered_id != null && registered_id in user.held_items) + handle_prisoner_id(user) + return + + if(!broken && opened && !locked && allowed(user) && !registered_id) //Genpop setup + + registered_id = new /obj/item/card/id/prisoner/(src.contents) + if(handle_edit_sentence(user)) + close(user) + locked = TRUE + update_icon() + registered_id.forceMove(src.loc) + new /obj/item/clothing/under/rank/prisoner(src.loc) + else + qdel(registered_id) + registered_id = null + + return + + ..() \ No newline at end of file diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index e88a80514a..1ffdff2347 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -121,7 +121,7 @@ return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR) /proc/get_all_accesses() - return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, + return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_RD, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_CHEMISTRY, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, @@ -157,7 +157,7 @@ if(1) //station general return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER) if(2) //security - return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS) + return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,) if(3) //medbay return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO) if(4) //research @@ -312,6 +312,10 @@ return "Gateway" if(ACCESS_SEC_DOORS) return "Brig" + if(ACCESS_ENTER_GENPOP) + return "Prison Turnstile Entrance" + if(ACCESS_LEAVE_GENPOP) + return "Prison Turnstile Exit" if(ACCESS_MINERAL_STOREROOM) return "Mineral Storage" if(ACCESS_MINISAT) diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index 1b8eada39c5fcd0f7983fc574ab9b96eb6ce8100..d3f055d1f2e8148a08c9921c39623da9d7d28290 100644 GIT binary patch delta 15314 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 delta 14803 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 Date: Mon, 16 Sep 2019 18:05:55 -0500 Subject: [PATCH 2/2] adds GenPop access to security --- code/modules/jobs/job_types/head_of_security.dm | 4 ++-- code/modules/jobs/job_types/security_officer.dm | 4 ++-- code/modules/jobs/job_types/warden.dm | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index f6b5dbd3ef..33c8856d81 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -19,11 +19,11 @@ outfit = /datum/outfit/job/hos mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, + minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 4f12d6a19c..ae50f71c0c 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -15,8 +15,8 @@ outfit = /datum/outfit/job/security - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) // See /datum/job/officer/get_access() + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_MINERAL_STOREROOM) // See /datum/job/officer/get_access() mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index a5c16ab5cf..1787d13ee3 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -15,8 +15,8 @@ outfit = /datum/outfit/job/warden - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) // See /datum/job/warden/get_access() + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_MINERAL_STOREROOM) // See /datum/job/warden/get_access() mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)