diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 7ff770a697..6dd3f43592 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -11,6 +11,7 @@ flags_1 = NOBLUDGEON_1 materials = list() // To be filled later var/list/assembly_components = list() + var/list/ckeys_allowed_to_scan = list() // Players who built the circuit can scan it as a ghost. var/max_components = IC_MAX_SIZE_BASE var/max_complexity = IC_COMPLEXITY_BASE var/opened = TRUE @@ -62,6 +63,9 @@ else to_chat(user, "The maintainence panel [opened ? "can be" : "is"] screwed in place.") + if(isobserver(user) && ckeys_allowed_to_scan[user.ckey]) + to_chat(user, "You can scan this circuit."); + /obj/item/electronic_assembly/proc/check_interactivity(mob/user) return user.canUseTopic(src, BE_CLOSE) @@ -181,6 +185,15 @@ if(..()) return 1 + if(href_list["ghostscan"]) + if(isobserver(usr) && ckeys_allowed_to_scan[usr.ckey]) + if(assembly_components.len) + var/saved = "On circuit printers with cloning enabled, you may use the code below to clone the circuit:

[SScircuit.save_electronic_assembly(src)]" + usr << browse(saved, "window=circuit_scan;size=500x600;border=1;can_resize=1;can_close=1;can_minimize=1") + else + to_chat(usr, "The circuit is empty!") + return + if(href_list["rename"]) rename(usr) @@ -201,6 +214,8 @@ if(!component.removable) return + add_allowed_scanner(usr.ckey) + var/current_pos = assembly_components.Find(component) // Find the position of a first removable component @@ -264,6 +279,9 @@ to_chat(M, "The machine now has a label reading '[input]'.") name = input +/obj/item/electronic_assembly/proc/add_allowed_scanner(ckey) + ckeys_allowed_to_scan[ckey] = TRUE + /obj/item/electronic_assembly/proc/can_move() return FALSE @@ -329,6 +347,7 @@ to_chat(user, "You slide [IC] inside [src].") playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + add_allowed_scanner(user.ckey) add_component(IC) return TRUE @@ -367,6 +386,7 @@ to_chat(user, "You pop \the [IC] out of the case, and slide it out.") playsound(src, 'sound/items/crowbar.ogg', 50, 1) user.put_in_hands(IC) + add_allowed_scanner(user.ckey) return TRUE diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index 60fe6fd9cd..d5ebeb3001 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -247,11 +247,14 @@ a creative player the means to solve many problems. Circuits are held inside an if(href_list["rename"]) rename_component(usr) + if(assembly) + assembly.add_allowed_scanner(usr.ckey) if(href_list["pin"]) var/datum/integrated_io/pin = locate(href_list["pin"]) in inputs + outputs + activators if(pin) var/datum/integrated_io/linked + var/success = TRUE if(href_list["link"]) linked = locate(href_list["link"]) in pin.linked @@ -259,6 +262,9 @@ a creative player the means to solve many problems. Circuits are held inside an pin.handle_wire(linked, held_item, href_list["act"], usr) else to_chat(usr, "You can't do a whole lot without the proper tools.") + success = FALSE + if(success && assembly) + assembly.add_allowed_scanner(usr.ckey) if(href_list["scan"]) if(istype(held_item, /obj/item/integrated_electronics/debugger))