From 04b34ec8edf4fda5b69a8a65a09f6b08a107f02f Mon Sep 17 00:00:00 2001 From: Seris02 Date: Sat, 18 Jan 2020 18:04:31 +0800 Subject: [PATCH 01/36] hijack implant --- code/__DEFINES/traits.dm | 1 + code/datums/action.dm | 40 +++++++ code/datums/wires/airlock.dm | 2 +- code/datums/wires/vending.dm | 2 +- code/game/machinery/Sleeper.dm | 2 +- code/game/machinery/_machinery.dm | 2 +- code/game/machinery/announcement_system.dm | 10 +- .../machinery/computer/arcade/minesweeper.dm | 6 +- code/game/machinery/computer/camera.dm | 2 +- code/game/machinery/computer/card.dm | 10 +- .../game/machinery/computer/communications.dm | 2 +- code/game/machinery/computer/dna_console.dm | 4 +- code/game/machinery/computer/medical.dm | 6 +- code/game/machinery/computer/pod.dm | 2 +- .../machinery/computer/prisoner/management.dm | 2 +- code/game/machinery/computer/security.dm | 6 +- code/game/machinery/computer/teleporter.dm | 4 +- code/game/machinery/dance_machine.dm | 2 +- code/game/machinery/dish_drive.dm | 2 +- code/game/machinery/dna_scanner.dm | 2 +- code/game/machinery/doors/airlock.dm | 12 +- code/game/machinery/newscaster.dm | 2 +- .../machinery/porta_turret/portable_turret.dm | 12 +- code/game/machinery/shieldgen.dm | 4 +- .../telecomms/computers/logbrowser.dm | 2 +- .../machinery/telecomms/computers/message.dm | 2 +- .../telecomms/computers/telemonitor.dm | 2 +- .../telecomms/machine_interactions.dm | 8 +- code/game/machinery/transformer.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 6 +- code/game/objects/items/devices/PDA/cart.dm | 2 +- .../objects/items/implants/implant_hijack.dm | 75 ++++++++++++ code/game/objects/items/implants/implanter.dm | 6 +- code/game/objects/objs.dm | 2 +- code/game/objects/structures/morgue.dm | 2 +- .../atmospherics/machinery/airalarm.dm | 8 +- .../awaymissions/bluespaceartillery.dm | 2 +- code/modules/cargo/supplypod_beacon.dm | 2 +- code/modules/events/holiday/vday.dm | 2 +- .../kitchen_machinery/microwave.dm | 12 +- code/modules/holodeck/computer.dm | 4 +- code/modules/hydroponics/gene_modder.dm | 2 +- .../integrated_electronics/core/printer.dm | 2 +- code/modules/jobs/access.dm | 2 +- .../mob/living/carbon/human/examine.dm | 2 + .../mob/living/simple_animal/bot/bot.dm | 12 +- .../mob/living/simple_animal/bot/cleanbot.dm | 2 +- .../mob/living/simple_animal/bot/ed209bot.dm | 2 +- .../mob/living/simple_animal/bot/firebot.dm | 2 +- .../mob/living/simple_animal/bot/floorbot.dm | 2 +- .../mob/living/simple_animal/bot/honkbot.dm | 2 +- .../mob/living/simple_animal/bot/medbot.dm | 2 +- .../mob/living/simple_animal/bot/mulebot.dm | 2 +- .../mob/living/simple_animal/bot/secbot.dm | 4 +- code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_defines.dm | 2 + code/modules/mob/mob_helpers.dm | 17 +++ .../computers/item/computer_ui.dm | 2 +- .../modular_computers/file_system/program.dm | 2 +- code/modules/oracle_ui/hookup_procs.dm | 4 +- code/modules/power/apc.dm | 108 ++++++++++++++---- code/modules/power/lighting.dm | 12 +- .../chemistry/machinery/chem_dispenser.dm | 2 +- .../chemistry/machinery/chem_master.dm | 14 +-- .../chemistry/machinery/reagentgrinder.dm | 8 +- code/modules/tgui/states/default.dm | 4 + .../uplink/uplink_items/uplink_implants.dm | 24 ++-- icons/obj/implants.dmi | Bin 2481 -> 2614 bytes icons/obj/lighting.dmi | Bin 75974 -> 77552 bytes icons/obj/power.dmi | Bin 33308 -> 32888 bytes tgstation.dme | 1 + tgui/assets/tgui.css | 2 +- tgui/assets/tgui.js | 26 ++--- tgui/src/interfaces/apc.ract | 14 +++ 74 files changed, 400 insertions(+), 160 deletions(-) create mode 100644 code/game/objects/items/implants/implant_hijack.dm diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index b7a5975ad5..a3dc8f69a3 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -110,6 +110,7 @@ #define TRAIT_NOHARDCRIT "nohardcrit" #define TRAIT_NOSOFTCRIT "nosoftcrit" #define TRAIT_MINDSHIELD "mindshield" +#define TRAIT_HIJACKER "hijacker" #define TRAIT_SIXTHSENSE "sixthsense" #define TRAIT_DISSECTED "dissected" #define TRAIT_FEARLESS "fearless" diff --git a/code/datums/action.dm b/code/datums/action.dm index cb56c26b91..371851186f 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -544,6 +544,46 @@ cooldown = world.time owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE) +/datum/action/item_action/removeAPCs + name = "Relinquish APC" + desc = "Let go of an APC, relinquish control back to the station." + icon_icon = 'icons/obj/implants.dmi' + button_icon_state = "hijackx" + +/datum/action/item_action/removeAPCs/Trigger() + var/list/areas = list() + for (var/area/a in owner.siliconaccessareas) + areas += a.name + areas += "None" + var/removeAPC = input("Select an APC to remove:","Remove APC Control",1) in areas + if (removeAPC == "None") + return + var/area/area = owner.siliconaccessareas[areas.Find(removeAPC)] + var/obj/machinery/power/apc/apc = area.get_apc() + apc.hijacker = 0 + apc.update_icon() + apc.set_hijacked_lighting() + owner.toggleSiliconAccessArea(area) + +/datum/action/item_action/accessAPCs + name = "Access APC Interface" + desc = "Open the APC's interface." + icon_icon = 'icons/obj/implants.dmi' + button_icon_state = "hijacky" + +/datum/action/item_action/accessAPCs/Trigger() + var/list/areas = list() + for (var/area/a in owner.siliconaccessareas) + areas += a.name + areas += "None" + var/accessAPC = input("Select an APC to access:","Access APC Interface",1) in areas + if (accessAPC == "None") + return + var/area/area = owner.siliconaccessareas[areas.Find(accessAPC)] + var/obj/machinery/power/apc/apc = area.get_apc() + apc.ui_interact(owner) + + //Preset for spells /datum/action/spell_action check_flags = 0 diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 315cfa59d6..6ff2a2fb4e 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -52,7 +52,7 @@ /datum/wires/airlock/interactable(mob/user) var/obj/machinery/door/airlock/A = holder - if(!issilicon(user) && A.isElectrified() && A.shock(user, 100)) + if(!hasSiliconAccessInArea(user,get_area(src)) && A.isElectrified() && A.shock(user, 100)) return FALSE if(A.panel_open) return TRUE diff --git a/code/datums/wires/vending.dm b/code/datums/wires/vending.dm index 0c66f26a92..84358ea79d 100644 --- a/code/datums/wires/vending.dm +++ b/code/datums/wires/vending.dm @@ -12,7 +12,7 @@ /datum/wires/vending/interactable(mob/user) var/obj/machinery/vending/V = holder - if(!issilicon(user) && V.seconds_electrified && V.shock(user, 100)) + if(!hasSiliconAccessInArea(user,get_area(src)) && V.seconds_electrified && V.shock(user, 100)) return FALSE if(V.panel_open) return TRUE diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index b6dc09eb59..d0d9d42abc 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -182,7 +182,7 @@ /obj/machinery/sleeper/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(state_open) close_machine() diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 5f44fccdac..4ceefa94f6 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -224,7 +224,7 @@ Class Procs: return !(stat & (NOPOWER|BROKEN|MAINT)) /obj/machinery/can_interact(mob/user) - var/silicon = issiliconoradminghost(user) + var/silicon = issiliconoradminghost(user) || hasSiliconAccessInArea(user,get_area(src)) if((stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE)) return FALSE if(panel_open && !(interaction_flags_machine & INTERACT_MACHINE_OPEN)) diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 56227cdd53..ff8d6a2d58 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) /obj/machinery/announcement_system/ui_interact(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(stat & BROKEN) visible_message("[src] buzzes.", "You hear a faint buzz.") @@ -123,7 +123,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) /obj/machinery/announcement_system/Topic(href, href_list) if(..()) return - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return if(stat & BROKEN) visible_message("[src] buzzes.", "You hear a faint buzz.") @@ -132,13 +132,13 @@ GLOBAL_LIST_EMPTY(announcement_systems) if(href_list["ArrivalTopic"]) var/NewMessage = stripped_input(usr, "Enter in the arrivals announcement configuration.", "Arrivals Announcement Config", arrival) - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return if(NewMessage) arrival = NewMessage else if(href_list["NewheadTopic"]) var/NewMessage = stripped_input(usr, "Enter in the departmental head announcement configuration.", "Head Departmental Announcement Config", newhead) - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return if(NewMessage) newhead = NewMessage @@ -157,7 +157,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) . = attack_ai(user) /obj/machinery/announcement_system/attack_ai(mob/user) - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(stat & BROKEN) to_chat(user, "[src]'s firmware appears to be malfunctioning!") diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm index 641ef1c9cd..452f180531 100644 --- a/code/game/machinery/computer/arcade/minesweeper.dm +++ b/code/game/machinery/computer/arcade/minesweeper.dm @@ -304,12 +304,12 @@ /obj/machinery/computer/arcade/minesweeper/proc/custom_generation(mob/user) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) //Entered into the menu so ping sound var/new_rows = input(user, "How many rows do you want? (Minimum: 4, Maximum: 30)", "Minesweeper Rows") as null|num - if(!new_rows || !user.canUseTopic(src, !issilicon(user))) + if(!new_rows || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return FALSE new_rows = CLAMP(new_rows + 1, 4, 30) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) var/new_columns = input(user, "How many columns do you want? (Minimum: 4, Maximum: 50)", "Minesweeper Squares") as null|num - if(!new_columns || !user.canUseTopic(src, !issilicon(user))) + if(!new_columns || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return FALSE new_columns = CLAMP(new_columns + 1, 4, 50) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) @@ -317,7 +317,7 @@ var/lower_limit = round(grid_area*0.156) var/upper_limit = round(grid_area*0.85) var/new_mine_limit = input(user, "How many mines do you want? (Minimum: [lower_limit], Maximum: [upper_limit])", "Minesweeper Mines") as null|num - if(!new_mine_limit || !user.canUseTopic(src, !issilicon(user))) + if(!new_mine_limit || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return FALSE playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) rows = new_rows diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 1d54e8f772..dd29481cd0 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -36,7 +36,7 @@ return ..() /obj/machinery/computer/security/can_interact(mob/user) - if((!issilicon(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src)) + if((!hasSiliconAccessInArea(user,get_area(src)) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src)) return FALSE return ..() diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 6703bae525..b9db0a6217 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -171,7 +171,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /obj/machinery/computer/card/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user)) || !is_operational()) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src))) || !is_operational()) return if(inserted_modify_id) if(id_eject(user, inserted_modify_id)) @@ -360,7 +360,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if(..()) return - if(!usr.canUseTopic(src, !issilicon(usr)) || !is_operational()) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src))) || !is_operational()) usr.unset_machine() usr << browse(null, "window=id_com") return @@ -392,7 +392,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) inserted_scan_id = id_to_insert updateUsrDialog() if ("auth") - if ((!( authenticated ) && (inserted_scan_id || issilicon(usr)) || mode)) + if ((!( authenticated ) && (inserted_scan_id || hasSiliconAccessInArea(usr,get_area(src))) || mode)) if (check_access(inserted_scan_id)) region_access = list() head_subordinates = list() @@ -426,7 +426,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) get_subordinates("Quartermaster") if(region_access) authenticated = 1 - else if ((!( authenticated ) && issilicon(usr)) && (!inserted_modify_id)) + else if ((!( authenticated ) && hasSiliconAccessInArea(usr,get_area(src))) && (!inserted_modify_id)) to_chat(usr, "You can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in.") if ("logout") region_access = null @@ -481,7 +481,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if ("reg") if (authenticated) var/t2 = inserted_modify_id - if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || issilicon(usr)) && isturf(loc))) + if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || hasSiliconAccessInArea(usr,get_area(src))) && isturf(loc))) var/newName = reject_bad_name(href_list["reg"]) if(newName) inserted_modify_id.registered_name = newName diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 1bc8a82147..1f5f63c20e 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -449,7 +449,7 @@ var/datum/browser/popup = new(user, "communications", "Communications Console", 400, 500) popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - if(issilicon(user)) + if(issilicon(user) || (hasSiliconAccessInArea(user,get_area(src)) && !in_range(user,src))) var/dat2 = interact_ai(user) // give the AI a different interact proc to limit its access if(dat2) dat += dat2 diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 7330ae26e7..d3b514c1ad 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -64,7 +64,7 @@ if(!user) return var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window - if(!(in_range(src, user) || issilicon(user))) + if(!(in_range(src, user) || hasSiliconAccessInArea(user,get_area(src)))) popup.close() return popup.add_stylesheet("scannernew", 'html/browser/scannernew.css') @@ -308,7 +308,7 @@ return if(!isturf(usr.loc)) return - if(!((isturf(loc) && in_range(src, usr)) || issilicon(usr))) + if(!((isturf(loc) && in_range(src, usr)) || hasSiliconAccessInArea(usr,get_area(src)))) return if(current_screen == "working") return diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 29055e87c3..d48300fbb9 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -190,7 +190,7 @@ if(!(active2 in GLOB.data_core.medical)) active2 = null - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr)) usr.set_machine(src) if(href_list["temp"]) temp = null @@ -216,7 +216,7 @@ else if(href_list["login"]) var/mob/M = usr var/obj/item/card/id/I = M.get_idcard(TRUE) - if(issilicon(M)) + if(hasSiliconAccessInArea(M,get_area(src))) active1 = null active2 = null authenticated = 1 @@ -569,7 +569,7 @@ if(user) if(message) if(authenticated) - if(user.canUseTopic(src, !issilicon(user))) + if(user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) if(!record1 || record1 == active1) if(!record2 || record2 == active2) return 1 diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 1388e3c8de..97578b5152 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -86,7 +86,7 @@ /obj/machinery/computer/pod/Topic(href, href_list) if(..()) return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src))) usr.set_machine(src) if(href_list["power"]) var/t = text2num(href_list["power"]) diff --git a/code/game/machinery/computer/prisoner/management.dm b/code/game/machinery/computer/prisoner/management.dm index 653f6bf48b..731cd72e15 100644 --- a/code/game/machinery/computer/prisoner/management.dm +++ b/code/game/machinery/computer/prisoner/management.dm @@ -87,7 +87,7 @@ /obj/machinery/computer/prisoner/management/Topic(href, href_list) if(..()) return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src))) usr.set_machine(src) if(href_list["id"]) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index aabb1fe408..2be544462c 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -265,7 +265,7 @@ What a mess.*/ active1 = null if(!( GLOB.data_core.security.Find(active2) )) active2 = null - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr)) usr.set_machine(src) switch(href_list["choice"]) // SORTING! @@ -299,7 +299,7 @@ What a mess.*/ if("Log In") var/mob/M = usr var/obj/item/card/id/I = M.get_idcard(TRUE) - if(issilicon(M)) + if(hasSiliconAccessInArea(M,get_area(src))) var/mob/living/silicon/borg = M active1 = null active2 = null @@ -802,7 +802,7 @@ What a mess.*/ /obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2) if(user) if(authenticated) - if(user.canUseTopic(src, !issilicon(user))) + if(user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) if(!trim(message1)) return 0 if(!record1 || record1 == active1) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 21fb70c38c..92c3748674 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -141,7 +141,7 @@ L[avoid_assoc_duplicate_keys(M.real_name, areaindex)] = M var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L - if(!user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) //check if we are still around + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)), NO_DEXTERY)) //check if we are still around return target = L[desc] if(imp_t) @@ -169,7 +169,7 @@ to_chat(user, "No active connected stations located.") return var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in L - if(!user.canUseTopic(src, !issilicon(user), NO_DEXTERY)) //again, check if we are still around + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)), NO_DEXTERY)) //again, check if we are still around return var/obj/machinery/teleport/station/target_station = L[desc] if(!target_station || !target_station.teleporter_hub) diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 91306585b8..44d54e6a8d 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -53,7 +53,7 @@ /obj/machinery/jukebox/ui_interact(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if (!anchored) to_chat(user,"This device must be anchored by a wrench!") diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 7f21d1c1b3..436af39895 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -98,7 +98,7 @@ /obj/machinery/dish_drive/AltClick(mob/living/user) . = ..() - if(user.canUseTopic(src, !issilicon(user))) + if(user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) do_the_dishes(TRUE) return TRUE diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index f62dceff6c..528b99a451 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -165,7 +165,7 @@ /obj/machinery/dna_scannernew/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return interact(user) return TRUE diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3e88223037..b35b00a953 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -676,7 +676,7 @@ else . += "It looks very robust." - if(issilicon(user) && (!stat & BROKEN)) + if(hasSiliconAccessInArea(user,get_area(src)) && (!stat & BROKEN)) . += "Shift-click [src] to [ density ? "open" : "close"] it." . += "Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts." . += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it." @@ -1322,9 +1322,9 @@ if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!) to_chat(user, "Despite your efforts, [src] managed to resist your attempts to open it!") -/obj/machinery/door/airlock/hostile_lockdown(mob/origin) +/obj/machinery/door/airlock/hostile_lockdown(mob/origin, aicontrolneeded = TRUE) // Must be powered and have working AI wire. - if(canAIControl(src) && !stat) + if((aicontrolneeded && canAIControl(src) && !stat) || !aicontrolneeded) locked = FALSE //For airlocks that were bolted open. safe = FALSE //DOOR CRUSH close() @@ -1334,9 +1334,9 @@ LAZYADD(shockedby, "\[[TIME_STAMP("hh:mm:ss", FALSE)]\] [key_name(origin)]") -/obj/machinery/door/airlock/disable_lockdown() +/obj/machinery/door/airlock/disable_lockdown(aicontrolneeded = TRUE) // Must be powered and have working AI wire. - if(canAIControl(src) && !stat) + if((aicontrolneeded && canAIControl(src) && !stat) || !aicontrolneeded) unbolt() set_electrified(NOT_ELECTRIFIED) open() @@ -1587,7 +1587,7 @@ . = TRUE /obj/machinery/door/airlock/proc/user_allowed(mob/user) - return (issilicon(user) && canAIControl(user)) || IsAdminGhost(user) + return (hasSiliconAccessInArea(user,get_area(src)) && canAIControl(user)) || IsAdminGhost(user) /obj/machinery/door/airlock/proc/shock_restore(mob/user) if(!user_allowed(user)) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 6bf9930eec..bcf266b9f5 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -509,7 +509,7 @@ GLOBAL_LIST_EMPTY(allCasters) /obj/machinery/newscaster/Topic(href, href_list) if(..()) return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && isturf(loc))) || issilicon(usr)) + if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && isturf(loc))) || hasSiliconAccessInArea(usr,get_area(src))) usr.set_machine(src) scan_user(usr) if(href_list["set_channel_name"]) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index a27cb9b78c..f6ff9d9815 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -839,7 +839,7 @@ /obj/machinery/turretid/examine(mob/user) . = ..() - if(issilicon(user) && (!stat & BROKEN)) + if(hasSiliconAccessInArea(user,get_area(src)) && (!stat & BROKEN)) . += "Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets." . += "Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"]." @@ -854,7 +854,7 @@ to_chat(user, "You link \the [M.buffer] with \the [src]") return - if (issilicon(user)) + if (hasSiliconAccessInArea(user,get_area(src))) return attack_hand(user) if ( get_dist(src, user) == 0 ) // trying to unlock the interface @@ -895,7 +895,7 @@ /obj/machinery/turretid/ui_interact(mob/user) . = ..() if ( get_dist(src, user) > 0 ) - if ( !(issilicon(user) || IsAdminGhost(user)) ) + if ( !(hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) ) to_chat(user, "You are too far away.") user.unset_machine() user << browse(null, "window=turretid") @@ -903,10 +903,10 @@ var/t = "" - if(locked && !(issilicon(user) || IsAdminGhost(user))) + if(locked && !(hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user))) t += "
Swipe ID card to unlock interface
" else - if(!issilicon(user) && !IsAdminGhost(user)) + if(!hasSiliconAccessInArea(user,get_area(src)) && !IsAdminGhost(user)) t += "
Swipe ID card to lock interface
" t += "Turrets [enabled?"activated":"deactivated"] - [enabled?"Disable":"Enable"]?
" t += "Currently set for [lethal?"lethal":"stun repeatedly"] - Change to [lethal?"Stun repeatedly":"Lethal"]?
" @@ -920,7 +920,7 @@ if(..()) return if (locked) - if(!(issilicon(usr) || IsAdminGhost(usr))) + if(!(hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr))) to_chat(usr, "Control panel is locked!") return if (href_list["toggleOn"]) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index fc6577a4f1..0705f4d18a 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -121,7 +121,7 @@ . = ..() if(.) return - if(locked && !issilicon(user)) + if(locked && !hasSiliconAccessInArea(user,get_area(src))) to_chat(user, "The machine is locked, you are unable to use it!") return if(panel_open) @@ -367,7 +367,7 @@ if(!anchored) to_chat(user, "\The [src] needs to be firmly secured to the floor first!") return - if(locked && !issilicon(user)) + if(locked && !hasSiliconAccessInArea(user,get_area(src))) to_chat(user, "The controls are locked!") return if(!power) diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index c1db49605c..fb0d33597d 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -196,7 +196,7 @@ var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - if(newnet && ((usr in range(1, src)) || issilicon(usr))) + if(newnet && ((usr in range(1, src)) || hasSiliconAccessInArea(usr,get_area(src)))) if(length(newnet) > 15) temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index 07028ba2d3..6d14bf89ca 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -260,7 +260,7 @@ if(..()) return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src))) //Authenticate if (href_list["auth"]) if(LINKED_SERVER_NONRESPONSIVE) diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index aebef711a9..630e94fb7c 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -108,7 +108,7 @@ if(href_list["network"]) var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - if(newnet && ((usr in range(1, src)) || issilicon(usr))) + if(newnet && ((usr in range(1, src)) || hasSiliconAccessInArea(usr,get_area(src)))) if(length(newnet) > 15) temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 1ad80ccbed..2a915bf118 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -30,7 +30,7 @@ /obj/machinery/telecomms/ui_interact(mob/user) . = ..() // You need a multitool to use this, or be silicon - if(!issilicon(user)) + if(!hasSiliconAccessInArea(user,get_area(src))) // istype returns false if the value is null if(!istype(user.get_active_held_item(), /obj/item/multitool)) return @@ -97,7 +97,7 @@ var/obj/item/multitool/P = null // Let's double check - if(!issilicon(user) && istype(user.get_active_held_item(), /obj/item/multitool)) + if(!hasSiliconAccessInArea(user,get_area(src)) && istype(user.get_active_held_item(), /obj/item/multitool)) P = user.get_active_held_item() else if(isAI(user)) var/mob/living/silicon/ai/U = user @@ -162,7 +162,7 @@ if(..()) return - if(!issilicon(usr)) + if(!hasSiliconAccessInArea(usr,get_area(src))) if(!istype(usr.get_active_held_item(), /obj/item/multitool)) return @@ -270,6 +270,6 @@ updateUsrDialog() /obj/machinery/telecomms/proc/canAccess(mob/user) - if(issilicon(user) || in_range(user, src)) + if(hasSiliconAccessInArea(user,get_area(src)) || in_range(user, src)) return TRUE return FALSE diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 3ff2424d83..9bb264a3d3 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -27,7 +27,7 @@ /obj/machinery/transformer/examine(mob/user) . = ..() - if(cooldown && (issilicon(user) || isobserver(user))) + if(cooldown && (hasSiliconAccessInArea(user,get_area(src)) || isobserver(user))) . += "It will be ready in [DisplayTimeText(cooldown_timer - world.time)]." /obj/machinery/transformer/Destroy() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index c0b510111f..47096a1c66 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -701,7 +701,7 @@ GLOBAL_LIST_EMPTY(PDAs) return /obj/item/pda/proc/remove_id(mob/user) - if(issilicon(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + if(hasSiliconAccessInArea(user,get_area(src)) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return do_remove_id(user) @@ -869,7 +869,7 @@ GLOBAL_LIST_EMPTY(PDAs) remove_pen() /obj/item/pda/proc/toggle_light() - if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE)) + if(hasSiliconAccessInArea(usr,get_area(src)) || !usr.canUseTopic(src, BE_CLOSE)) return if(fon) fon = FALSE @@ -881,7 +881,7 @@ GLOBAL_LIST_EMPTY(PDAs) /obj/item/pda/proc/remove_pen() - if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + if(hasSiliconAccessInArea(usr,get_area(src)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return if(inserted_item) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index e4fa241907..5ffc28285a 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -587,7 +587,7 @@ Code: /obj/item/cartridge/Topic(href, href_list) ..() - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) usr.unset_machine() usr << browse(null, "window=pda") return diff --git a/code/game/objects/items/implants/implant_hijack.dm b/code/game/objects/items/implants/implant_hijack.dm new file mode 100644 index 0000000000..f4592bea55 --- /dev/null +++ b/code/game/objects/items/implants/implant_hijack.dm @@ -0,0 +1,75 @@ +#define HIJACK_APC_MAX_AMOUNT 4 + +/obj/item/implant/hijack + name = "hijack implant" + desc = "Allows you to control the machinery in a room by hacking into the APC." + actions_types = list(/datum/action/item_action/hands_free/activate, /datum/action/item_action/removeAPCs, /datum/action/item_action/accessAPCs) + activated = 1 + var/toggled = FALSE + icon_state = "hijack" + var/eye_color + +/obj/item/implant/hijack/activate() + . = ..() + toggled = !toggled + if (toggled) + imp_in.click_intercept = src + imp_in.siliconaccesstoggle = TRUE + to_chat(imp_in,"You turn on [src]'s silicon interactions.") + if (ishuman(imp_in)) + var/mob/living/carbon/human/H = imp_in + H.eye_color = "ff0" + H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) + H.update_body() + else + imp_in.click_intercept = null + imp_in.siliconaccesstoggle = FALSE + to_chat(imp_in,"You turn off [src]'s silicon interactions.") + if (ishuman(imp_in)) + var/mob/living/carbon/human/H = imp_in + H.eye_color = eye_color + H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) + H.update_body() + +/obj/item/implant/hijack/implant(mob/living/target, mob/user, silent = FALSE) + if(..()) + ADD_TRAIT(target, TRAIT_HIJACKER, "implant") + if (ishuman(target)) + var/mob/living/carbon/human/H = target + eye_color = H.eye_color + return TRUE + +/obj/item/implant/hijack/removed(mob/target, silent = FALSE, special = 0) + if(..()) + REMOVE_TRAIT(target, TRAIT_HIJACKER, "implant") + if (ishuman(target)) + var/mob/living/carbon/human/H = target + H.eye_color = eye_color + return TRUE + +/obj/item/implant/hijack/proc/InterceptClickOn(mob/living/user,params,atom/object) + if (!toggled) + return + if (user.get_active_held_item()) + return + if (isitem(object)) + return + var/area/a = get_area(object) + if (!hasSiliconAccessInArea(imp_in,a)) + return + var/list/modifiers = params2list(params) + imp_in.face_atom(object) + if (modifiers["shift"] && modifiers["ctrl"]) + object.AICtrlShiftClick(imp_in) + return TRUE + if (modifiers["shift"]) + object.AIShiftClick(imp_in) + return TRUE + if (modifiers["ctrl"]) + object.AICtrlClick(imp_in) + return TRUE + if (modifiers["alt"]) + object.AIAltClick(imp_in) + return TRUE + object.attack_ai(imp_in) + return TRUE diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index ab902369cc..a0e27f14f0 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -74,4 +74,8 @@ /obj/item/implanter/stealth name = "implanter (stealth)" - imp_type = /obj/item/implant/stealth \ No newline at end of file + imp_type = /obj/item/implant/stealth + +/obj/item/implanter/hijack + name = "implanter (hijack)" + imp_type = /obj/item/implant/hijack \ No newline at end of file diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 8899f2f79f..e7d5a12920 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -125,7 +125,7 @@ if ((M.client && M.machine == src)) is_in_use = TRUE ui_interact(M) - if(isAI(usr) || iscyborg(usr) || IsAdminGhost(usr)) + if(isAI(usr) || iscyborg(usr) || IsAdminGhost(usr) || hasSiliconAccessInArea(usr,get_area(src))) if (!(usr in nearby)) if (usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. is_in_use = TRUE diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 7696a13bb2..89c48be419 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -168,7 +168,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an /obj/structure/bodycontainer/morgue/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return beeper = !beeper to_chat(user, "You turn the speaker function [beeper ? "on" : "off"].") diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index e49368016b..c9ccb90574 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -245,7 +245,7 @@ /obj/machinery/airalarm/ui_data(mob/user) var/data = list( "locked" = locked, - "siliconUser" = user.has_unlimited_silicon_privilege, + "siliconUser" = user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user,get_area(src)), "emagged" = (obj_flags & EMAGGED ? 1 : 0), "danger_level" = danger_level, ) @@ -288,7 +288,7 @@ "danger_level" = cur_tlv.get_danger_level(environment.gases[gas_id] * partial_pressure) )) - if(!locked || user.has_unlimited_silicon_privilege) + if(!locked || user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user,get_area(src))) data["vents"] = list() for(var/id_tag in A.air_vent_names) var/long_name = A.air_vent_names[id_tag] @@ -368,7 +368,7 @@ /obj/machinery/airalarm/ui_act(action, params) if(..() || buildstage != 2) return - if((locked && !usr.has_unlimited_silicon_privilege) || (usr.has_unlimited_silicon_privilege && aidisabled)) + if((locked && !usr.has_unlimited_silicon_privilege && !hasSiliconAccessInArea(usr,get_area(src))) || (usr.has_unlimited_silicon_privilege && aidisabled)) return var/device_id = params["id_tag"] switch(action) @@ -839,7 +839,7 @@ /obj/machinery/airalarm/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc)) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src))) || !isturf(loc)) return togglelock(user) return TRUE diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index deb05920e2..260bd9d743 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -44,7 +44,7 @@ return if(reload < reload_cooldown) return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || hasSiliconAccessInArea(usr,get_area(src))) priority_announce("Bluespace artillery fire detected. Brace for impact.") message_admins("[ADMIN_LOOKUPFLW(usr)] has launched an artillery strike.") var/list/L = list() diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index 006f1a8084..47d38eb7cd 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -77,7 +77,7 @@ /obj/item/supplypod_beacon/AltClick(mob/user) . = ..() - if (!user.canUseTopic(src, !issilicon(user))) + if (!user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if (express_console) unlink_console() diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm index 13c516960a..2fff7972df 100644 --- a/code/modules/events/holiday/vday.dm +++ b/code/modules/events/holiday/vday.dm @@ -140,7 +140,7 @@ /obj/item/valentine/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) - if( !(ishuman(user) || isobserver(user) || issilicon(user)) ) + if( !(ishuman(user) || isobserver(user) || hasSiliconAccessInArea(user,get_area(src))) ) user << browse("[name][stars(message)]", "window=[name]") onclose(user, "[name]") else diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index e4d36b29d2..4e665379c6 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -55,7 +55,7 @@ if(!operating) . += "Alt-click [src] to turn it on." - if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) + if(!in_range(user, src) && !hasSiliconAccessInArea(user,get_area(src)) && !isobserver(user)) . += "You're too far away to examine [src]'s contents and display!" return if(operating) @@ -63,7 +63,7 @@ return if(length(ingredients)) - if(issilicon(user)) + if(hasSiliconAccessInArea(user,get_area(src))) . += "\The [src] camera shows:" else . += "\The [src] contains:" @@ -187,14 +187,14 @@ /obj/machinery/microwave/AltClick(mob/user) . = ..() - if(user.canUseTopic(src, !issilicon(usr))) + if(user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) cook() return TRUE /obj/machinery/microwave/ui_interact(mob/user) . = ..() - if(operating || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user))) + if(operating || panel_open || !anchored || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(isAI(user) && (stat & NOPOWER)) return @@ -206,10 +206,10 @@ to_chat(user, "\The [src] is empty.") return - var/choice = show_radial_menu(user, src, isAI(user) ? ai_radial_options : radial_options, require_near = !issilicon(user)) + var/choice = show_radial_menu(user, src, isAI(user) ? ai_radial_options : radial_options, require_near = !hasSiliconAccessInArea(user,get_area(src))) // post choice verification - if(operating || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user))) + if(operating || panel_open || !anchored || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return if(isAI(user) && (stat & NOPOWER)) return diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index d551222836..3c86171159 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -92,7 +92,7 @@ data["emagged"] = TRUE data["emag_programs"] = emag_programs data["program"] = program - data["can_toggle_safety"] = issilicon(user) || IsAdminGhost(user) + data["can_toggle_safety"] = hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user) return data @@ -109,7 +109,7 @@ if(A) load_program(A) if("safety") - if(!issilicon(usr) && !IsAdminGhost(usr)) + if(!hasSiliconAccessInArea(usr,get_area(src)) && !IsAdminGhost(usr)) var/msg = "[key_name(usr)] attempted to emag the holodeck using a href they shouldn't have!" message_admins(msg) log_admin(msg) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 77199b3496..1aa9bb86e2 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -105,7 +105,7 @@ return var/datum/browser/popup = new(user, "plantdna", "Plant DNA Manipulator", 450, 600) - if(!(in_range(src, user) || issilicon(user))) + if(!(in_range(src, user) || hasSiliconAccessInArea(user,get_area(src)))) popup.close() return diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index f0aa10f2da..64c8e222a6 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -107,7 +107,7 @@ interact(user) /obj/item/integrated_circuit_printer/interact(mob/user) - if(!(in_range(src, user) || issilicon(user))) + if(!(in_range(src, user) || hasSiliconAccessInArea(user,get_area(src)))) return if(isnull(current_category)) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 81f47b9a1e..f023ad41a4 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -4,7 +4,7 @@ //check if it doesn't require any access at all if(src.check_access(null)) return TRUE - if(issilicon(M)) + if(hasSiliconAccessInArea(M,get_area(src))) if(ispAI(M)) return FALSE return TRUE //AI can do whatever it wants diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index e212e0e713..347f3f02fb 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -99,6 +99,8 @@ . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES)) . += "[t_His] eyes are glowing an unnatural red!" + else if(eye_color == "ff0" && HAS_TRAIT(src, TRAIT_HIJACKER)) + . += "[t_His] eyes are flickering a bright yellow!" //ears if(ears && !(SLOT_EARS in obscured)) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index cd449dacd9..e06d3e786f 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -809,14 +809,14 @@ Pass a positive integer as an argument to override a bot's default speed. switch(href_list["operation"]) if("patrol") - if(!issilicon(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked)) + if(!hasSiliconAccessInArea(usr,get_area(src)) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked)) return TRUE auto_patrol = !auto_patrol bot_reset() if("remote") remote_disabled = !remote_disabled if("hack") - if(!issilicon(usr) && !IsAdminGhost(usr)) + if(!hasSiliconAccessInArea(usr,get_area(src)) && !IsAdminGhost(usr)) var/msg = "[key_name(usr)] attempted to hack a bot with a href that shouldn't be available!" message_admins(msg) log_admin(msg) @@ -835,7 +835,7 @@ Pass a positive integer as an argument to override a bot's default speed. to_chat(usr, "[text_dehack]") bot_reset() if("ejectpai") - if(paicard && (!locked || issilicon(usr) || IsAdminGhost(usr))) + if(paicard && (!locked || hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr))) to_chat(usr, "You eject [paicard] from [bot_name]") ejectpai(usr) update_controls() @@ -862,13 +862,13 @@ Pass a positive integer as an argument to override a bot's default speed. if(emagged == 2) //An emagged bot cannot be controlled by humans, silicons can if one hacked it. if(!hacked) //Manually emagged by a human - access denied to all. return TRUE - else if(!issilicon(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access. + else if(!hasSiliconAccessInArea(user,get_area(src)) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access. return TRUE return FALSE /mob/living/simple_animal/bot/proc/hack(mob/user) var/hack - if(issilicon(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot. + if(hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot. hack += "[emagged == 2 ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"]
" hack += "Harm Prevention Safety System: [emagged ? "DANGER" : "Engaged"]
" else if(!locked) //Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control. @@ -877,7 +877,7 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/proc/showpai(mob/user) var/eject = "" - if((!locked || issilicon(usr) || IsAdminGhost(usr))) + if((!locked || hasSiliconAccessInArea(usr,get_area(src)) || IsAdminGhost(usr))) if(paicard || allow_pai) eject += "Personality card status: " if(paicard) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index d31c368ca4..374b682ac1 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -296,7 +296,7 @@ Status: [on ? "On" : "Off"]
Behaviour controls are [locked ? "locked" : "unlocked"]
Maintenance panel panel is [open ? "opened" : "closed"]"}) - if(!locked || issilicon(user)|| IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src))|| IsAdminGhost(user)) dat += "
Clean Blood: [blood ? "Yes" : "No"]" dat += "
Clean Trash: [trash ? "Yes" : "No"]" dat += "
Exterminate Pests: [pests ? "Yes" : "No"]" diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 4715a1361a..6d1c844231 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -110,7 +110,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]
"}, "[on ? "On" : "Off"]" ) - if(!locked || issilicon(user)|| IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src))|| IsAdminGhost(user)) if(!lasercolor) dat += text({"
Arrest Unidentifiable Persons: []
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm index 2b52da6821..3453546890 100644 --- a/code/modules/mob/living/simple_animal/bot/firebot.dm +++ b/code/modules/mob/living/simple_animal/bot/firebot.dm @@ -111,7 +111,7 @@ dat += "Maintenance panel panel is [open ? "opened" : "closed"]
" dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += "Extinguish Fires: [extinguish_fires ? "Yes" : "No"]
" dat += "Extinguish People: [extinguish_people ? "Yes" : "No"]
" dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
" diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index cae707ce46..8db1bdb1ae 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -83,7 +83,7 @@ dat += "None Loaded
" dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += "Add tiles to new hull plating: [autotile ? "Yes" : "No"]
" dat += "Place floor tiles: [placetiles ? "Yes" : "No"]
" dat += "Replace existing floor tiles with custom tiles: [replacetiles ? "Yes" : "No"]
" diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 109c7b4636..3fcbff26db 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -90,7 +90,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, "[on ? "On" : "Off"]" ) - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += text({"
Auto Patrol: []"}, "[auto_patrol ? "On" : "Off"]" ) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index a4496dd1f5..b27fcd7bb0 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -148,7 +148,7 @@ else dat += "None Loaded" dat += "
Behaviour controls are [locked ? "locked" : "unlocked"]
" - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += "Healing Threshold: " dat += "-- " dat += "- " diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 43963b4eef..911758a5ed 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -262,7 +262,7 @@ // TODO: remove this; PDAs currently depend on it /mob/living/simple_animal/bot/mulebot/get_controls(mob/user) - var/ai = issilicon(user) + var/ai = hasSiliconAccessInArea(user,get_area(src)) var/dat dat += "

Multiple Utility Load Effector Mk. V

" dat += "ID: [id]
" diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index d4fc98ee9e..ea1bbdbaa8 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -110,7 +110,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, "[on ? "On" : "Off"]" ) - if(!locked || issilicon(user) || IsAdminGhost(user)) + if(!locked || hasSiliconAccessInArea(user,get_area(src)) || IsAdminGhost(user)) dat += text({"
Arrest Unidentifiable Persons: []
Arrest for Unauthorized Weapons: []
@@ -131,7 +131,7 @@ Auto Patrol: []"}, /mob/living/simple_animal/bot/secbot/Topic(href, href_list) if(..()) return 1 - if(!issilicon(usr) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked)) + if(!hasSiliconAccessInArea(usr,get_area(src)) && !IsAdminGhost(usr) && !(bot_core.allowed(usr) || !locked)) return TRUE switch(href_list["operation"]) if("idcheck") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b4c3c93824..acb55e143a 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -812,7 +812,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) //Can the mob interact() with an atom? /mob/proc/can_interact_with(atom/A) - return IsAdminGhost(src) || Adjacent(A) + return IsAdminGhost(src) || Adjacent(A) || hasSiliconAccessInArea(src,get_area(A)) //Can the mob use Topic to interact with machines /mob/proc/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 695084a794..67a990fef9 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -120,3 +120,5 @@ var/registered_z var/mob/audiovisual_redirect //Mob to redirect messages, speech, and sounds to + var/siliconaccessareas = list() + var/siliconaccesstoggle = FALSE \ No newline at end of file diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index d78ae0ba8c..5b13a6d509 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -409,6 +409,23 @@ It's fairly easy to fix if dealing with single letters but not so much with comp return return TRUE +/proc/hasSiliconAccessInArea(mob/user,area/area) + return user && (issilicon(user) || (user.siliconaccesstoggle && area && (area in user.siliconaccessareas))) + +/mob/proc/toggleSiliconAccessArea(area/area) + if (area in siliconaccessareas) + siliconaccessareas -= area + to_chat(src,"You lost control of [area]!") + return FALSE + else + if (LAZYLEN(siliconaccessareas) < HIJACK_APC_MAX_AMOUNT) + siliconaccessareas += area + to_chat(src,"You successfully took control of [area].") + else + to_chat(src,"You are connected to too many APCs! Too many more will fry your brain.") + return FALSE + return TRUE + /proc/offer_control(mob/M) to_chat(M, "Control of your mob has been offered to dead players.") if(usr) diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index df3000d0fc..050ba78bae 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -14,7 +14,7 @@ return 0 // Robots don't really need to see the screen, their wireless connection works as long as computer is on. - if(!screen_on && !issilicon(user)) + if(!screen_on && !hasSiliconAccessInArea(user,get_area(src))) if(ui) ui.close() return 0 diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index f74b53ddd2..fe1bf888fe 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -87,7 +87,7 @@ if(IsAdminGhost(user)) return 1 - if(issilicon(user)) + if(hasSiliconAccessInArea(user,get_area(computer))) return 1 if(ishuman(user)) diff --git a/code/modules/oracle_ui/hookup_procs.dm b/code/modules/oracle_ui/hookup_procs.dm index 0a092caf30..749cbc5f8e 100644 --- a/code/modules/oracle_ui/hookup_procs.dm +++ b/code/modules/oracle_ui/hookup_procs.dm @@ -35,9 +35,9 @@ return ..() /obj/machinery/oui_canview(mob/user) - if(user.has_unlimited_silicon_privilege) + if(user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user,get_area(src))) return TRUE - if(!can_interact()) + if(!can_interact(user)) return FALSE if(iscyborg(user)) return can_see(user, src, 7) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 0ad2983b91..c7e82a94c2 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -103,6 +103,8 @@ var/update_overlay = -1 var/icon_update_needed = FALSE var/obj/machinery/computer/apc_control/remote_control = null + var/mob/living/carbon/hijacker = 0 + var/hijackerlast = FALSE /obj/machinery/power/apc/unlocked locked = FALSE @@ -268,7 +270,7 @@ . += "Alt-Click the APC to [ locked ? "unlock" : "lock"] the interface." - if(issilicon(user)) + if(hasSiliconAccessInArea(user,area)) . += "Ctrl-Click the APC to switch the breaker [ operating ? "off" : "on"]." // update the APC icon to show the three base states @@ -312,7 +314,7 @@ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD) SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco3-[charging]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) + SSvis_overlays.add_vis_overlay(src, icon, "apco3-[hijacker ? "3" : charging]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) if(operating) SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) @@ -327,6 +329,8 @@ light_color = LIGHT_COLOR_BLUE if(APC_FULLY_CHARGED) light_color = LIGHT_COLOR_GREEN + if (hijacker) + light_color = LIGHT_COLOR_YELLOW set_light(lon_range) else if(update_state & UPSTATE_BLUESCREEN) light_color = LIGHT_COLOR_BLUE @@ -395,14 +399,15 @@ else if(environ==2) update_overlay |= APC_UPOVERLAY_ENVIRON2 - var/results = 0 - if(last_update_state == update_state && last_update_overlay == update_overlay) + if(last_update_state == update_state && last_update_overlay == update_overlay && (hijacker == 0 ? 0 : 1) == hijackerlast) return 0 if(last_update_state != update_state) results += 1 - if(last_update_overlay != update_overlay) + if(last_update_overlay != update_overlay || (hijacker == 0 ? 0 : 1) != hijackerlast) results += 2 + if (hijacker ? TRUE : FALSE != hijackerlast) + hijackerlast = hijacker == 0 ? 0 : 1 return results // Used in process so it doesn't update the icon too much @@ -542,7 +547,7 @@ /obj/machinery/power/apc/attackby(obj/item/W, mob/living/user, params) - if(issilicon(user) && get_dist(src,user)>1) + if(hasSiliconAccessInArea(user,area) && get_dist(src,user)>1) return attack_hand(user) if (istype(W, /obj/item/stock_parts/cell) && opened) @@ -749,7 +754,7 @@ /obj/machinery/power/apc/AltClick(mob/user) . = ..() - if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc)) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user,area)) || !isturf(loc)) return togglelock(user) return TRUE @@ -764,7 +769,7 @@ else if(stat & (BROKEN|MAINT)) to_chat(user, "Nothing happens!") else - if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN) && !malfhack) + if((allowed(usr) || hasSiliconAccessInArea(usr,area)) && !wires.is_cut(WIRE_IDSCAN) && !malfhack) locked = !locked to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") update_icon() @@ -841,6 +846,11 @@ if((stat & MAINT) && !opened) //no board; no interface return +/obj/machinery/power/apc/oui_canview(mob/user) + if(user.has_unlimited_silicon_privilege || hasSiliconAccessInArea(user,area)) + return TRUE + return ..() + /obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) @@ -851,7 +861,7 @@ /obj/machinery/power/apc/ui_data(mob/user) var/list/data = list( - "locked" = locked && !(integration_cog && is_servant_of_ratvar(user)), + "locked" = locked && !(integration_cog && is_servant_of_ratvar(user)) && !hasSiliconAccessInArea(user,area), "failTime" = failure_timer, "isOperating" = operating, "externalPower" = main_status, @@ -860,11 +870,14 @@ "chargingStatus" = charging, "totalLoad" = DisplayPower(lastused_total), "coverLocked" = coverlocked, - "siliconUser" = user.has_unlimited_silicon_privilege || user.using_power_flow_console(), + "siliconUser" = user.has_unlimited_silicon_privilege || user.using_power_flow_console() || hasSiliconAccessInArea(user,area), "malfStatus" = get_malf_status(user), "emergencyLights" = !emergency_lights, "nightshiftLights" = nightshift_lights, - + "hijackable" = HAS_TRAIT(user,TRAIT_HIJACKER), + "hijacker" = hijacker == user ? TRUE : FALSE, + "drainavail" = cell.percent() > 85, + "lockdownavail" = cell.percent() > 35, "powerChannels" = list( list( "title" = "Equipment", @@ -932,17 +945,14 @@ /obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic() if(IsAdminGhost(user)) return TRUE + if (user == hijacker || hasSiliconAccessInArea(user,area)) + return TRUE + if (!aidisabled && issilicon(user)) + return TRUE if(user.has_unlimited_silicon_privilege) var/mob/living/silicon/ai/AI = user var/mob/living/silicon/robot/robot = user - if ( \ - src.aidisabled || \ - malfhack && istype(malfai) && \ - ( \ - (istype(AI) && (malfai!=AI && malfai != AI.parent)) || \ - (istype(robot) && (robot in malfai.connected_robots)) \ - ) \ - ) + if (src.aidisabled || malfhack && istype(malfai) && ((istype(AI) && (malfai!=AI && malfai != AI.parent)) || (istype(robot) && (robot in malfai.connected_robots)))) if(!loud) to_chat(user, "\The [src] has eee disabled!") return FALSE @@ -952,18 +962,25 @@ . = ..() if (!. && !QDELETED(remote_control)) . = remote_control.can_interact(user) + if (hasSiliconAccessInArea(user,area)) + return TRUE /obj/machinery/power/apc/ui_status(mob/user) . = ..() if (!QDELETED(remote_control) && user == remote_control.operator) . = UI_INTERACTIVE + if (hasSiliconAccessInArea(user,area)) + . = UI_INTERACTIVE /obj/machinery/power/apc/ui_act(action, params) - if(..() || !can_use(usr, 1) || (locked && !usr.has_unlimited_silicon_privilege && !failure_timer && !(integration_cog && (is_servant_of_ratvar(usr))))) + if (action == "hijack" && can_use(usr, 1)) + hijack(usr) + return + if(..() || !can_use(usr, 1) || (locked && !hasSiliconAccessInArea(usr,area) && !usr.has_unlimited_silicon_privilege && !failure_timer && !(integration_cog && (is_servant_of_ratvar(usr))))) return switch(action) if("lock") - if(usr.has_unlimited_silicon_privilege) + if(usr.has_unlimited_silicon_privilege || hasSiliconAccessInArea(usr,area)) if((obj_flags & EMAGGED) || (stat & (BROKEN|MAINT))) to_chat(usr, "The APC does not respond to the command.") else @@ -1000,7 +1017,7 @@ update() . = TRUE if("overload") - if(usr.has_unlimited_silicon_privilege) + if(usr.has_unlimited_silicon_privilege || hasSiliconAccessInArea(usr,area)) overload_lighting() . = TRUE if("hack") @@ -1023,6 +1040,21 @@ L.no_emergency = emergency_lights INVOKE_ASYNC(L, /obj/machinery/light/.proc/update, FALSE) CHECK_TICK + if("drain") + cell.use(cell.charge) + hijacker.toggleSiliconAccessArea(area) + hijacker = null + set_hijacked_lighting() + update_icon() + energy_fail(30 SECONDS * (cell.charge / cell.maxcharge)) + if("lockdown") + var/celluse = rand(20,35) + celluse = celluse /100 + for (var/obj/machinery/door/D in GLOB.airlocks) + if (get_area(D) == area) + INVOKE_ASYNC(D,/obj/machinery/door.proc/hostile_lockdown,usr, FALSE) + addtimer(CALLBACK(D,/obj/machinery/door.proc/disable_lockdown, FALSE), 30 SECONDS) + cell.charge -= cell.maxcharge*celluse return 1 /obj/machinery/power/apc/proc/toggle_breaker() @@ -1032,6 +1064,31 @@ update() update_icon() +/obj/machinery/power/apc/proc/hijack(mob/living/L) + if (!istype(L)) + return + if (hijacker && hijacker != L) + to_chat(L, "Someone already has control of this APC. Beginning counter-hijack.") + if (do_after(L,20 SECONDS,target=src)) + hijacker.toggleSiliconAccessArea(area) + if (L.toggleSiliconAccessArea(area)) + hijacker = L + update_icon() + set_hijacked_lighting() + return + else + to_chat(L, "Aborting.") + return + to_chat(L, "Beginning hijack of APC.") + if (do_after(L,5 SECONDS,target=src)) + if (L.toggleSiliconAccessArea(area)) + hijacker = L + update_icon() + set_hijacked_lighting() + else + to_chat(L, "Aborting.") + return + /obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf) if(!istype(malf)) return @@ -1436,6 +1493,13 @@ L.update(FALSE) CHECK_TICK +/obj/machinery/power/apc/proc/set_hijacked_lighting() + set waitfor = FALSE + for(var/obj/machinery/light/L in area) + L.hijacked = hijacker ? TRUE : FALSE + L.update(FALSE) + CHECK_TICK + #undef UPSTATE_CELL_IN #undef UPSTATE_OPENED1 #undef UPSTATE_OPENED2 diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index e50b11ea35..b0e79ea44b 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -220,6 +220,7 @@ var/bulb_emergency_colour = "#FF3232" // determines the colour of the light while it's in emergency mode var/bulb_emergency_pow_mul = 0.75 // the multiplier for determining the light's power in emergency mode var/bulb_emergency_pow_min = 0.5 // the minimum value for the light's power in emergency mode + var/hijacked = FALSE // if true, the light is in a hijacked area /obj/machinery/light/broken status = LIGHT_BROKEN @@ -298,7 +299,10 @@ if(emergency_mode || (A && A.fire)) icon_state = "[base_state]_emergency" else - icon_state = "[base_state]" + if (hijacked) + icon_state = "[base_state]_hijacked" + else + icon_state = "[base_state]" if(on) var/mutable_appearance/glowybit = mutable_appearance(overlayicon, base_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE) glowybit.alpha = CLAMP(light_power*250, 30, 200) @@ -326,6 +330,10 @@ var/area/A = get_area(src) if (A && A.fire) CO = bulb_emergency_colour + else if (hijacked) + BR = BR * 1.5 + PO = PO * 1.5 + CO = color ? color : LIGHT_COLOR_YELLOW else if (nightshift_enabled) BR = nightshift_brightness PO = nightshift_light_power @@ -355,7 +363,7 @@ if(on != on_gs) on_gs = on if(on) - static_power_used = brightness * 20 //20W per unit luminosity + static_power_used = brightness * 20 * (hijacked ? 2 : 1) //20W per unit luminosity addStaticPower(static_power_used, STATIC_LIGHT) else removeStaticPower(static_power_used, STATIC_LIGHT) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 424f2bce30..7344edb490 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -310,7 +310,7 @@ return var/name = stripped_input(usr,"Name","What do you want to name this recipe?", "Recipe", MAX_NAME_LEN) var/recipe = stripped_input(usr,"Recipe","Insert recipe with chem IDs") - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return if(name && recipe) var/list/first_process = splittext(recipe, ";") diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index e6b19417d8..d8a2b90b9e 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -261,7 +261,7 @@ return vol_each = min(reagents.total_volume / amount, 50) var/name = html_decode(stripped_input(usr,"Name:","Name your pill!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/pill/P var/target_loc = drop_location() @@ -288,7 +288,7 @@ reagents.trans_to(P,vol_each) else var/name = html_decode(stripped_input(usr, "Name:", "Name your pack!", reagents.get_master_reagent_name(), MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/food/condiment/pack/P = new/obj/item/reagent_containers/food/condiment/pack(drop_location()) @@ -314,7 +314,7 @@ return vol_each = min(reagents.total_volume / amount, 40) var/name = html_decode(stripped_input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/pill/P @@ -332,7 +332,7 @@ if(condi) var/name = html_decode(stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/food/condiment/P = new(drop_location()) P.originalname = name @@ -345,7 +345,7 @@ amount_full = round(reagents.total_volume / 30) vol_part = ((reagents.total_volume*1000) % 30000) / 1000 //% operator doesn't support decimals. var/name = html_decode(stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/glass/bottle/P @@ -373,7 +373,7 @@ amount_full = round(reagents.total_volume / 60) vol_part = reagents.total_volume % 60 var/name = html_decode(stripped_input(usr, "Name:","Name your hypovial!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/glass/bottle/vial/small/P @@ -408,7 +408,7 @@ vol_each = min(reagents.total_volume / amount, 20) var/name = html_decode(stripped_input(usr,"Name:","Name your SmartDart!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) + if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !hasSiliconAccessInArea(usr,get_area(src)))) return var/obj/item/reagent_containers/syringe/dart/D diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 7e1b7ec018..98901e8777 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -142,7 +142,7 @@ /obj/machinery/reagentgrinder/ui_interact(mob/user) // The microwave Menu //I am reasonably certain that this is not a microwave . = ..() - if(operating || !user.canUseTopic(src, !issilicon(user))) + if(operating || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return var/list/options = list() @@ -170,10 +170,10 @@ for(var/key in options) choice = key else - choice = show_radial_menu(user, src, options, require_near = !issilicon(user)) + choice = show_radial_menu(user, src, options, require_near = !hasSiliconAccessInArea(user,get_area(src))) // post choice verification - if(operating || (isAI(user) && stat & NOPOWER) || !user.canUseTopic(src, !issilicon(user))) + if(operating || (isAI(user) && stat & NOPOWER) || !user.canUseTopic(src, !hasSiliconAccessInArea(user,get_area(src)))) return switch(choice) @@ -190,7 +190,7 @@ /obj/machinery/reagentgrinder/examine(mob/user) . = ..() - if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) + if(!in_range(user, src) && !hasSiliconAccessInArea(user,get_area(src)) && !isobserver(user)) . += "You're too far away to examine [src]'s contents and display!" return diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index c6741f20b8..a1c35a29e8 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -14,6 +14,8 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) /mob/living/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) + if (hasSiliconAccessInArea(src,get_area(src_object))) + return UI_INTERACTIVE if(. > UI_CLOSE && loc) . = min(., loc.contents_ui_distance(src_object, src)) // Check the distance... if(. == UI_INTERACTIVE) // Non-human living mobs can only look, not touch. @@ -21,6 +23,8 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) /mob/living/carbon/human/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) + if (hasSiliconAccessInArea(src,get_area(src_object))) + return UI_INTERACTIVE if(. > UI_CLOSE) . = min(., shared_living_ui_distance(src_object)) // Check the distance... diff --git a/code/modules/uplink/uplink_items/uplink_implants.dm b/code/modules/uplink/uplink_items/uplink_implants.dm index 3262809cb5..b89df49f3d 100644 --- a/code/modules/uplink/uplink_items/uplink_implants.dm +++ b/code/modules/uplink/uplink_items/uplink_implants.dm @@ -29,6 +29,22 @@ item = /obj/item/storage/box/syndie_kit/imp_freedom cost = 5 +/datum/uplink_item/implants/hijack + name = "Hijack Implant" + desc = "An implant that will let you hack into the APCs on station, allowing you to control them at will and the machinery within those rooms." + item = /obj/item/implanter/hijack + cost = 14 //really overkill, 14 tc, can still get caught in a room you haven't hijacked and you're fucked. + surplus = 0 //nope not having hijack implants with surplus crates nope nope nope nope + restricted = TRUE + +/datum/uplink_item/implants/radio + name = "Internal Syndicate Radio Implant" + desc = "An implant injected into the body, allowing the use of an internal Syndicate radio. \ + Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection." + item = /obj/item/storage/box/syndie_kit/imp_radio + cost = 4 + restricted = TRUE + /datum/uplink_item/implants/microbomb name = "Microbomb Implant" desc = "An implant injected into the body, and later activated either manually or automatically upon death. \ @@ -47,14 +63,6 @@ include_modes = list(/datum/game_mode/nuclear) restricted = TRUE -/datum/uplink_item/implants/radio - name = "Internal Syndicate Radio Implant" - desc = "An implant injected into the body, allowing the use of an internal Syndicate radio. \ - Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection." - item = /obj/item/storage/box/syndie_kit/imp_radio - cost = 4 - restricted = TRUE - /datum/uplink_item/implants/reviver name = "Reviver Implant" desc = "This implant will attempt to revive and heal you if you lose consciousness. Comes with an autosurgeon." diff --git a/icons/obj/implants.dmi b/icons/obj/implants.dmi index 8dc2f08fdcb8ff736b8b73d26155e23e24f60787..7e97f0349d5aab5fa0c7d95b272a446f0f9521d8 100644 GIT binary patch delta 2000 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 Ef(+wyW&i*H diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 396d681f22101ba1337a117335a3325923fd913e..675005da91474f87aeb3a0b4449216d4a0da9ed0 100644 GIT binary patch literal 77552 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 aAi9K&Wb!-e10kCL_|ewTQ?F6A3I8wbY5np5 literal 75974 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

FeT;TBJ56Egn^DpWB#0?C{483<~fv#f^ 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