From 957e6e8bda901a864bce1019da88488aaa75d2ab Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 23 Oct 2021 01:24:29 +0200 Subject: [PATCH] [MIRROR] makes it so lockers/crates can have access electronics removed/inserted [MDB IGNORE] (#8968) * makes it so lockers/crates can have access electronics removed/inserted (#62022) They can only have electronics inserted if they are welded shut (if they can be welded) don't have electronics already and aren't secure They can only have electronics removed if they are welded shut (if they can be welded) are unlocked are secure (even if they don't have electronics, then it'll create them) * makes it so lockers/crates can have access electronics removed/inserted Co-authored-by: Seris02 <49109742+Seris02@users.noreply.github.com> --- code/game/objects/items/mail.dm | 1 + .../structures/crates_lockers/closets.dm | 56 ++++++++++++++++++- .../crates_lockers/closets/bodybag.dm | 1 + .../crates_lockers/closets/cardboardbox.dm | 1 + .../structures/crates_lockers/crates.dm | 14 +++++ .../structures/crates_lockers/crates/bins.dm | 1 + .../crates_lockers/crates/critter.dm | 1 + .../structures/crates_lockers/crates/large.dm | 1 + .../crates_lockers/crates/secure.dm | 11 ---- .../mining/lavaland/necropolis_chests.dm | 1 + .../lavalandruin_code/elephantgraveyard.dm | 1 + 11 files changed, 76 insertions(+), 13 deletions(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 369b71b642c..392f8cfa0d0 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -204,6 +204,7 @@ name = "mail crate" desc = "A certified post crate from CentCom." icon_state = "mail" + can_install_electronics = FALSE /obj/structure/closet/crate/mail/update_icon_state() . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index ab332fc6ffa..a6104060a00 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -64,6 +64,9 @@ var/divable = TRUE /// true whenever someone with the strong pull component is dragging this, preventing opening var/strong_grab = FALSE + ///electronics for access + var/obj/item/electronics/airlock/electronics + var/can_install_electronics = TRUE /obj/structure/closet/Initialize(mapload) if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents @@ -79,6 +82,7 @@ /obj/structure/closet/Destroy() dump_contents() QDEL_NULL(door_obj) + QDEL_NULL(electronics) return ..() /obj/structure/closet/update_appearance(updates=ALL) @@ -325,8 +329,13 @@ return open(user) /obj/structure/closet/deconstruct(disassembled = TRUE) - if(ispath(material_drop) && material_drop_amount && !(flags_1 & NODECONSTRUCT_1)) - new material_drop(loc, material_drop_amount) + if (!(flags_1 & NODECONSTRUCT_1)) + if(ispath(material_drop) && material_drop_amount) + new material_drop(loc, material_drop_amount) + if (electronics) + var/obj/item/electronics/airlock/electronics_ref = electronics + electronics = null + electronics_ref.forceMove(drop_location()) qdel(src) /obj/structure/closet/atom_break(damage_flag) @@ -389,6 +398,49 @@ user.visible_message(span_notice("[user] [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground."), \ span_notice("You [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground."), \ span_hear("You hear a ratchet.")) + else if (can_install_electronics && istype(W, /obj/item/electronics/airlock)\ + && !secure && !electronics && !locked && (welded || !can_weld_shut) && !broken) + user.visible_message(span_notice("[user] installs the electronics into the [src]."),\ + span_notice("You start to install electronics into the [src]...")) + if (!do_after(user, 4 SECONDS, target = src)) + return FALSE + if (electronics || secure) + return FALSE + if (!user.transferItemToLoc(W, src)) + return FALSE + to_chat(user, span_notice("You install the electronics.")) + electronics = W + if (electronics.one_access) + req_one_access = electronics.accesses + else + req_access = electronics.accesses + secure = TRUE + update_appearance() + else if (can_install_electronics && W.tool_behaviour == TOOL_SCREWDRIVER\ + && (secure || electronics) && !locked && (welded || !can_weld_shut)) + user.visible_message(span_notice("[user] begins to remove the electronics from the [src]."),\ + span_notice("You begin to remove the electronics from the [src]...")) + var/had_electronics = !!electronics + var/was_secure = secure + if (!do_after(user, 4 SECONDS, target = src)) + return FALSE + if ((had_electronics && !electronics) || (was_secure && !secure)) + return FALSE + var/obj/item/electronics/airlock/electronics_ref + if (!electronics) + electronics_ref = new /obj/item/electronics/airlock(loc) + gen_access() + if (req_one_access.len) + electronics_ref.one_access = 1 + electronics_ref.accesses = req_one_access + else + electronics_ref.accesses = req_access + else + electronics_ref = electronics + electronics = null + electronics_ref.forceMove(drop_location()) + secure = FALSE + update_appearance() else if(!user.combat_mode) var/item_is_id = W.GetID() if(!item_is_id) diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index 3903649bd38..f2e50f0c2d7 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -20,6 +20,7 @@ var/foldedbag_path = /obj/item/bodybag var/obj/item/bodybag/foldedbag_instance = null var/tagged = FALSE // so closet code knows to put the tag overlay back + can_install_electronics = FALSE /obj/structure/closet/body_bag/Destroy() // If we have a stored bag, and it's in nullspace (not in someone's hand), delete it. diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 6433c13536b..1314e081359 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -21,6 +21,7 @@ var/move_speed_multiplier = 1 var/move_delay = FALSE var/egged = 0 + can_install_electronics = FALSE /obj/structure/closet/cardboard/relaymove(mob/living/user, direction) if(opened || move_delay || user.incapacitated() || !isturf(loc) || !has_gravity(loc)) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 8f15fa65e7a..10d60eefc11 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -28,6 +28,18 @@ AddElement(/datum/element/climbable, climb_time = crate_climb_time, climb_stun = 0) update_appearance() +/obj/structure/closet/crate/update_overlays() + . = ..() + if(broken) + . += "securecrateemag" + return + if(locked) + . += "securecrater" + return + if(secure) + . += "securecrateg" + return + /obj/structure/closet/crate/CanAllowThrough(atom/movable/mover, border_dir) . = ..() if(!istype(mover, /obj/structure/closet)) @@ -96,6 +108,7 @@ close_sound = 'sound/machines/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 + can_install_electronics = FALSE /obj/structure/closet/crate/maint @@ -127,6 +140,7 @@ desc = "A heavy, metal trashcart with wheels." name = "trash cart" icon_state = "trashcart" + can_install_electronics = FALSE /obj/structure/closet/crate/trashcart/Moved() . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index 7c27898290e..5f7faf406fb 100644 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ b/code/game/objects/structures/crates_lockers/crates/bins.dm @@ -7,6 +7,7 @@ anchored = TRUE horizontal = FALSE delivery_icon = null + can_install_electronics = FALSE /obj/structure/closet/crate/bin/Initialize(mapload) . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm index 24c94b3861e..6f27595b8d8 100644 --- a/code/game/objects/structures/crates_lockers/crates/critter.dm +++ b/code/game/objects/structures/crates_lockers/crates/critter.dm @@ -14,6 +14,7 @@ close_sound_volume = 50 contents_pressure_protection = 0.8 var/obj/item/tank/internals/emergency_oxygen/tank + can_install_electronics = FALSE /obj/structure/closet/crate/critter/Initialize(mapload) . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index ae347e5a4e2..7bbd2f4acbb 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -11,6 +11,7 @@ close_sound = 'sound/machines/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 + can_install_electronics = FALSE // Stops people from "diving into" a crate you can't open normally divable = FALSE diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 0ebf383f04f..13c052e5739 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -9,23 +9,12 @@ var/tamperproof = 0 damage_deflection = 25 -/obj/structure/closet/crate/secure/update_overlays() - . = ..() - if(broken) - . += "securecrateemag" - return - if(locked) - . += "securecrater" - return - . += "securecrateg" - /obj/structure/closet/crate/secure/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) if(prob(tamperproof) && damage_amount >= DAMAGE_PRECISION) boom() else return ..() - /obj/structure/closet/crate/secure/proc/boom(mob/user) if(user) to_chat(user, span_danger("The crate's anti-tamper system activates!")) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index e7dd8525bad..f432c7e4aa2 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -5,6 +5,7 @@ desc = "It's watching you closely." icon_state = "necrocrate" resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + can_install_electronics = FALSE /obj/structure/closet/crate/necropolis/tendril desc = "It's watching you suspiciously. You need a skeleton key to open it." diff --git a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm index c08d4a282d2..c90b4eb7545 100644 --- a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm +++ b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm @@ -128,6 +128,7 @@ cutting_tool = /obj/item/shovel var/lead_tomb = FALSE var/first_open = FALSE + can_install_electronics = FALSE /obj/structure/closet/crate/grave/filled/PopulateContents() //GRAVEROBBING IS NOW A FEATURE ..()