From 1cd7739ea4647bb9b82ca7b0e25e0d8a5180e0dc Mon Sep 17 00:00:00 2001 From: Cadyn <35672377+cadyn@users.noreply.github.com> Date: Thu, 4 Apr 2024 22:44:51 -0700 Subject: [PATCH] Borg access (#8077) --- code/game/machinery/air_alarm.dm | 8 +- code/game/machinery/portable_turret.dm | 2 +- code/modules/power/apc.dm | 6 +- .../modules/mob/living/silicon/robot/robot.dm | 86 +++++++++++++++++++ 4 files changed, 95 insertions(+), 7 deletions(-) diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index 5c38eace6f..1f1daf1f78 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -543,7 +543,7 @@ /obj/machinery/alarm/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = list( "locked" = locked, - "siliconUser" = issilicon(user), + "siliconUser" = siliconaccess(user) || (isobserver(user) && is_admin(user)), //CHOMPEdit borg access + admin access "remoteUser" = !!ui.parent_ui, "danger_level" = danger_level, "target_temperature" = "[target_temperature - T0C]C", @@ -593,7 +593,7 @@ "danger_level" = TEST_TLV_VALUES ))) - if(!locked || issilicon(user) || data["remoteUser"]) + if(!locked || siliconaccess(user) || data["remoteUser"] || (isobserver(user) && is_admin(user))) //CHOMPEdit borg access + admin access var/list/list/vents = list() data["vents"] = vents for(var/id_tag in A.air_vent_names) @@ -706,13 +706,13 @@ // Yes, this is kinda snowflaky; however, I would argue it would be far more snowflakey // to include "custom hrefs" and all the other bullshit that nano states have just for the // like, two UIs, that want remote access to other UIs. - if((locked && !issilicon(usr) && !istype(state, /datum/tgui_state/air_alarm_remote)) || (issilicon(usr) && aidisabled)) + if((locked && !(siliconaccess(usr) || (isobserver(usr) && is_admin(usr))) && !istype(state, /datum/tgui_state/air_alarm_remote)) || (issilicon(usr) && aidisabled)) //CHOMPedit borg access return var/device_id = params["id_tag"] switch(action) if("lock") - if(issilicon(usr) && !wires.is_cut(WIRE_IDSCAN)) + if((siliconaccess(usr) && !wires.is_cut(WIRE_IDSCAN)) || (isobserver(usr) && is_admin(usr))) //CHOMPEdit borg access + admin acces locked = !locked . = TRUE if( "power", diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 938f272764..0102f47bc0 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -707,7 +707,7 @@ if(faction && L.faction == faction) return TURRET_NOT_TARGET - if(!emagged && issilicon(L) && check_all == FALSE) // Don't target silica, unless told to neutralize everything. + if((!emagged && siliconaccess(L) && check_all == FALSE) || (!check_access && !check_all)) // Don't target silica, unless told to neutralize everything. //CHOMPEdit no more free pass for borg... return TURRET_NOT_TARGET if(L.stat == DEAD && !emagged) //if the perp is dead, no need to bother really diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 099434b87c..bcef1e11cb 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -808,7 +808,7 @@ GLOBAL_LIST_EMPTY(apcs) "failTime" = failure_timer * 2, "gridCheck" = grid_check, "coverLocked" = coverlocked, - "siliconUser" = issilicon(user) || (isobserver(user) && is_admin(user)), //I add observer here so admins can have more control, even if it makes 'siliconUser' seem inaccurate. + "siliconUser" = siliconaccess(user) || (isobserver(user) && is_admin(user)), //I add observer here so admins can have more control, even if it makes 'siliconUser' seem inaccurate. //CHOMPEdit borg access "emergencyLights" = !emergency_lights, "nightshiftLights" = nightshift_lights, "nightshiftSetting" = nightshift_setting, @@ -917,8 +917,10 @@ GLOBAL_LIST_EMPTY(apcs) // If can_admin_interact() wasn't only defined on observers, this could just be part of a single-line // conditional. var/locked_exception = FALSE - if(issilicon(usr) || action == "nightshift") + if(siliconaccess(usr) || action == "nightshift") //CHOMPEdit borg access locked_exception = TRUE + + if(isobserver(usr)) var/mob/observer/dead/D = usr if(D.can_admin_interact()) diff --git a/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm b/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm index c82f7a4488..1c1b7351e6 100644 --- a/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm +++ b/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm @@ -57,3 +57,89 @@ vore_capacity_ex = list() vore_fullness_ex = list() vore_light_states = list() + + +/obj/machinery/door/airlock/BorgCtrlShiftClick(var/mob/living/silicon/robot/user) + if(check_access(user.idcard)) + ..() + +/obj/machinery/door/airlock/BorgShiftClick(var/mob/living/silicon/robot/user) // Opens and closes doors! Forwards to AI code. + if(check_access(user.idcard)) + ..() + +/obj/machinery/door/airlock/BorgCtrlClick(var/mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code. + if(check_access(user.idcard)) + ..() + +/obj/machinery/power/apc/BorgCtrlClick(var/mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code. + if(allowed(user)) + ..() + +/obj/machinery/turretid/BorgCtrlClick(var/mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code. + if(allowed(user)) + ..() + +/obj/machinery/door/airlock/BorgAltClick(var/mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code. + if(check_access(user.idcard)) + ..() + +/obj/machinery/turretid/BorgAltClick(var/mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code. + if(allowed(user)) + ..() + +/obj/machinery/door/airlock/user_allowed(mob/user) + var/mob/living/silicon/robot/R = user + if(istype(R) && !check_access(R.idcard)) + return FALSE + . = ..() + +/obj/machinery/computer/atmoscontrol/attack_robot(var/mob/user) + if(allowed(user)) + ..() + else if(Adjacent(user)) + attack_hand(user) + +/obj/machinery/computer/robotics/attack_robot(var/mob/user) + if(allowed(user)) + ..() + else if(Adjacent(user)) + attack_hand(user) + +/obj/machinery/turretid/attack_robot(var/mob/user) + if(allowed(user)) + ..() + else if(Adjacent(user)) + attack_hand(user) + +/obj/machinery/door/airlock/attack_robot(var/mob/user) + var/mob/living/silicon/robot/R = user + if(!istype(R)) + return //why are you here + if(check_access(R.idcard)) + ..() + else if(Adjacent(user)) + attack_hand(user) + +/obj/machinery/porta_turret/attack_robot(var/mob/user) + if(allowed(user)) + ..() + else if(Adjacent(user)) + attack_hand(user) + +/obj/machinery/porta_turret/isLocked(mob/user) + var/mob/living/silicon/robot/R = user + if(!istype(R)) + return ..() + if(!locked) + return FALSE + if(!check_access(R.idcard)) + return TRUE + return FALSE + +/obj/proc/siliconaccess(mob/user) + var/mob/living/silicon/robot/R = user + if(istype(R)) + return check_access(R.idcard) + if(issilicon(user)) + return TRUE + return FALSE