/obj/item/electronics/ name = "electronic thing" icon = 'icons/obj/electronics.dmi' inhand_image_icon = 'icons/mob/inhand/hand_tools.dmi' force = 5 damtype = "brute" throwforce = 5 w_class = 1.0 pressure_resistance = 10 item_state = "electronic" flags = FPRINT | TABLEPASS | CONDUCT /obj/item/electronics/New() desc = "A [src.name] used in electronic projects." return /obj/item/electronics/proc/randompix() src.pixel_x = rand(8, 12) src.pixel_y = rand(8, 12) return //////////////////////////////////////////////////////////////// /obj/item/electronics/battery name = "battery" icon_state = "batt1" module_research = list("electronics" = 2) /obj/item/electronics/battery/New() src.icon_state = pick("batt1", "batt2", "batt3") randompix() ..() ////////////////////////////////////////////////////////////////up /obj/item/electronics/board name = "board" icon_state = "board1" module_research = list("electronics" = 2) /obj/item/electronics/board/New() src.icon_state = pick("board1", "board2", "board3") randompix() ..() //////////////////////////////////////////////////////////////// /obj/item/electronics/fuse name = "fuse" icon_state = "fuse1" module_research = list("electronics" = 2) /obj/item/electronics/fuse/New() src.icon_state = pick("fuse1", "fuse2", "fuse3") randompix() ..() //////////////////////////////////////////////////////////////// /obj/item/electronics/switc name = "switch" icon_state = "switch1" module_research = list("electronics" = 2) /obj/item/electronics/switc/New() src.icon_state = pick("switch1", "switch2", "switch3") randompix() ..() ////////////////////////////////////////////////////////////////up /obj/item/electronics/keypad name = "keypad" icon_state = "keypad1" module_research = list("electronics" = 2) /obj/item/electronics/keypad/New() src.icon_state = pick("keypad1", "keypad2", "keypad3") randompix() ..() ////////////////////////////////////////////////////////////////up /obj/item/electronics/screen name = "screen" icon_state = "screen1" module_research = list("electronics" = 2) /obj/item/electronics/screen/New() src.icon_state = pick("screen1", "screen2", "screen3") randompix() ..() //////////////////////////////////////////////////////////////// /obj/item/electronics/capacitor name = "capacitor" icon_state = "capacitor1" module_research = list("electronics" = 2) /obj/item/electronics/capacitor/New() src.icon_state = pick("capacitor1", "capacitor2", "capacitor3") randompix() ..() ////////////////////////////////////////////////////////////////up /obj/item/electronics/buzzer name = "buzzer" icon_state = "buzzer" module_research = list("electronics" = 2) /obj/item/electronics/buzzer/New() randompix() ..() //////////////////////////////////////////////////////////////// /obj/item/electronics/resistor name = "resistor" icon_state = "resistor1" module_research = list("electronics" = 2) /obj/item/electronics/resistor/New() src.icon_state = pick("resistor1", "resistor2") randompix() ..() //////////////////////////////////////////////////////////////// /obj/item/electronics/bulb name = "bulb" icon_state = "bulb1" module_research = list("electronics" = 2) /obj/item/electronics/bulb/New() src.icon_state = pick("bulb1", "bulb2") randompix() ..() //////////////////////////////////////////////////////////////// /obj/item/electronics/relay name = "relay" icon_state = "relay1" module_research = list("electronics" = 2) /obj/item/electronics/bulb/New() src.icon_state = pick("relay1", "relay2") randompix() ..() ////////////////////////////////////////////////////////////////no /obj/item/electronics/frame name = "frame" icon_state = "frame" var/store_type = null var/secured = 0 var/viewstat = 0 var/dir_needed = 0 //var/list/parts = new/list() var/list/needed_parts = new/list() module_research = list("electronics" = 3, "engineering" = 1) /obj/item/electronics/frame/verb/rotate() set src in view(1) if (!istype(usr, /mob/living)) return src.dir = turn(src.dir, 90) /obj/item/electronics/frame/attackby(obj/item/W as obj, mob/user as mob) if(istype(W,/obj/item/electronics/)) var/obj/item/electronics/E = W if(!(istype(E,/obj/item/electronics/disk)||istype(E,/obj/item/electronics/scanner)||istype(E,/obj/item/electronics/soldering)||istype(E,/obj/item/electronics/frame))) E.set_loc(src) user.u_equip(E) //parts.Add(E) boutput(user, "You add the [E.name] to the [src].") return else if(istype(E,/obj/item/electronics/soldering)) if(!secured) secured = 1 viewstat = 1 boutput(user, "You secure the [src].") else if(secured == 1) secured = 0 viewstat = 0 boutput(user, "You unsecure the [src].") else if(secured == 2) secured = 0 boutput(user, "You deploy the [src]!") logTheThing("station", user, null, "deploys a [src.name] in [user.loc.loc] ([showCoords(src.x, src.y, src.z)])") deploy() return ..() /obj/item/electronics/frame/MouseDrop_T(atom/movable/O as obj, mob/user as mob) if(!iscarbon(user) || user.stat || user.weakened || user.paralysis) return if(get_dist(user, src) > 1) return var/list/bad_types = list(/obj/item/electronics/disk, /obj/item/electronics/scanner, /obj/item/electronics/soldering, /obj/item/electronics/frame) if(!istype(O, /obj/item/electronics) || (O.type in bad_types)) boutput(user, "That is not a valid component!") return if (!src.secured) var/turf/source_turf = get_turf(O) if(!source_turf) return user.visible_message("[user] begins quickly adding components to [src]!", "You begin to quickly add components to [src]!") var/staystill = user.loc for(var/obj/item/electronics/I in source_turf) if(I.type in bad_types) continue I.set_loc(src) //parts.Add(I) sleep(3) if (user.loc != staystill) break boutput(user, "You finish adding components to [src]!") else boutput(user, "The board is already secured!") return /obj/item/electronics/frame/attack_self(mob/user as mob) src.add_fingerprint(user) var/dat dat = "Parts:
" switch(viewstat) if(0) for(var/obj/item/electronics/P in src.contents) dat += "[P.name]: Remove
" user.machine = src user << browse("Frame[dat]", "window=fkit") onclose(user, "fkit") if(1) var/check = parts_check() if(!check) boutput(user, "Incomplete Object, unable to finish!") return if(dir_needed) var/dirr = input("Select A Direction!", "UDLR", null, null) in list("Up","Down","Left","Right") switch(dirr) if("Up") src.dir = 1 if("Down") src.dir = 2 if("Left") src.dir = 8 if("Right") src.dir = 4 boutput(user, "Ready to deploy!") switch(alert("Ready to deploy?",,"Yes","No")) if("Yes") boutput(user, "Place box and solder to deploy!") viewstat = 2 secured = 2 icon_state = "dbox" if("No") return else return /obj/item/electronics/frame/Topic(href, href_list) if (usr.stat) return if ((usr.contents.Find(src) || usr.contents.Find(src.master) || in_range(src, usr) && istype(src.loc, /turf))) usr.machine = src switch(href_list["tp"]) if("move") if(href_list["op"]) var/obj/Z = locate(href_list["op"]) var/turf/T = src.loc if (ismob(T)) T = T.loc Z.set_loc(T) //parts.Remove(Z) updateDialog() else usr << browse(null, "window=fkit") usr.machine = null return /obj/item/electronics/frame/proc/deploy() var/turf/T = get_turf(src) var/obj/O = new store_type(T) O.dir = src.dir O.mats = "Built" qdel(src) return /obj/item/electronics/frame/proc/parts_check() // if(src.contents.len != needed_parts.len) // return 0 //for(var/tracker = 1, tracker <= parts:len, tracker ++) var/list/checkList = needed_parts.Copy() for(var/tracker = 1, tracker <= src.contents:len, tracker ++) var/partID //var/obj/T = parts[tracker] var/obj/T = src.contents[tracker] if(istype(T,/obj/item/electronics/battery)) partID = "battery" else if(istype(T,/obj/item/electronics/fuse)) partID = "fuse" else if(istype(T,/obj/item/electronics/switc)) partID = "switch" else if(istype(T,/obj/item/electronics/capacitor)) partID = "capacitor" else if(istype(T,/obj/item/electronics/resistor)) partID = "resistor" else if(istype(T,/obj/item/electronics/bulb)) partID = "bulb" else if(istype(T,/obj/item/electronics/relay)) partID = "relay" else if(istype(T,/obj/item/electronics/board)) partID = "board" else if(istype(T,/obj/item/electronics/keypad)) partID = "keypad" else if(istype(T,/obj/item/electronics/screen)) partID = "screen" else if(istype(T,/obj/item/electronics/buzzer)) partID = "buzzer" if (!isnum(checkList[partID]) || (checkList[partID] < 1)) continue checkList[partID] = checkList[partID] - 1 for (var/i in checkList) if (checkList[i] > 0) return 0 return 1 ////////////////////////////////////////////////////////////////? /obj/item/electronics/soldering name = "soldering iron" icon = 'icons/obj/electronics.dmi' icon_state = "solderingiron" force = 10 damtype = "fire" throwforce = 5 w_class = 2.0 pressure_resistance = 40 module_research = list("electronics" = 3, "engineering" = 1) ////////////////////////////////////////////////////////////////no /obj/item/electronics/disk name = "data module" icon_state = "disk" var/list/parts = new/list() var/item_name = "Error" ////////////////////////////////////////////////////////////////up /obj/item/electronics/scanner name = "device analyzer" icon_state = "deviceana" desc = "Used for scanning certain items for use with the ruckingenur kit." force = 2 damtype = "brute" throwforce = 5 w_class = 2.0 pressure_resistance = 50 var/list/scanned = list() var/viewstat = 0 module_research = list("electronics" = 3, "engineering" = 3, "analysis" = 2) syndicate is_syndicate = 1 /obj/item/electronics/scanner/afterattack(var/obj/O, mob/user as mob) if(istype(O,/obj/machinery/rkit)) return if(istype(O,/obj/)) if(O.mats == 0 || (O.is_syndicate != 0 && src.is_syndicate == 0)) // if this item doesn't have mats defined or was constructed or // attempting to scan a syndicate item and this is a normal scanner boutput(user, "The structure of this object is not compatible with the scanner.") return if (O.mats == "Built" && (ticker && ticker.mode && !istype(ticker.mode, /datum/game_mode/construction))) boutput(user, "You cannot scan an object that was already deployed by a mechanic.") return user.visible_message("[user.name] scans [O].") var/final_type = O.mechanics_type_override ? O.mechanics_type_override : O.type for (var/X in src.scanned) if (final_type == X) boutput(user, "You have already scanned that object.") return for(var/datum/electronics/scanned_item/I in mechanic_controls.scanned_items) if(final_type == I.item_type) boutput(user, "That object already exists in the scanned database.") return src.scanned += final_type boutput(user, "Item scan successful.") ////////////////////////////////////////////////////////////////no /obj/machinery/rkit name = "ruckingenur kit" desc = "Used for reverse engineering certain items." icon = 'icons/obj/electronics.dmi' icon_state = "rkit" anchored = 1 density = 1 //var/datum/electronics/electronics_items/link = null var/processing = 0 var/net_id = null var/frequency = 1149 var/datum/radio_frequency/radio_connection var/no_print_spam = 1 // In relation to world.time. /obj/machinery/rkit/New() ..() //link = mechanic_controls spawn(8) if(radio_controller) radio_connection = radio_controller.add_object(src, "[frequency]") if(!src.net_id) src.net_id = generate_net_id(src) mechanic_controls.rkit_addresses += src.net_id /obj/machinery/rkit/disposing() if(radio_controller) radio_controller.remove_object(src, "[frequency]") radio_connection = null if (src.net_id) mechanic_controls.rkit_addresses -= src.net_id //link = null ..() /obj/machinery/rkit/receive_signal(datum/signal/signal) if(stat & NOPOWER) return if(!signal || signal.encryption || !signal.data["sender"]) return var/target = signal.data["sender"] if((signal.data["address_1"] == "ping") && target) spawn(5) //Send a reply for those curious jerks var/datum/signal/newsignal = get_free_signal() newsignal.source = src newsignal.transmission_method = TRANSMISSION_RADIO newsignal.data["command"] = "ping_reply" newsignal.data["device"] = "NET_RKANALZYER" newsignal.data["netid"] = src.net_id newsignal.data["address_1"] = target newsignal.data["sender"] = src.net_id radio_connection.post_signal(src, newsignal) return if(signal.data["address_1"] != src.net_id || !target || signal.data["command"] != "add" || !istype(signal.data_file, /datum/computer/file/electronics_scan)) return var/datum/computer/file/electronics_scan/scanFile = signal.data_file for(var/datum/electronics/scanned_item/O in mechanic_controls.scanned_items) if(scanFile.scannedPath == O.item_type) spawn(5) var/datum/signal/newsignal = get_free_signal() newsignal.source = src newsignal.transmission_method = TRANSMISSION_RADIO newsignal.data["command"] = "text_message" newsignal.data["sender_name"] = "RKIT-MAILBOT" newsignal.data["message"] = "Notice: Item already in database." newsignal.data["address_1"] = target newsignal.data["sender"] = src.net_id radio_connection.post_signal(src, newsignal) return mechanic_controls.scan_in(scanFile.scannedName, scanFile.scannedPath, scanFile.scannedMats) spawn(5) var/datum/signal/newsignal = get_free_signal() newsignal.source = src newsignal.transmission_method = TRANSMISSION_RADIO newsignal.data["command"] = "text_message" newsignal.data["sender_name"] = "RKIT-MAILBOT" newsignal.data["message"] = "Notice: Item entered into database." newsignal.data["address_1"] = target newsignal.data["sender"] = src.net_id radio_connection.post_signal(src, newsignal) /obj/machinery/rkit/attackby(obj/item/W as obj, mob/user as mob) if(stat & (NOPOWER|BROKEN)) return if(istype(W,/obj/item/electronics/scanner)) var/obj/item/electronics/scanner/S = W var/add_count = 0 var/match_check = 1 for(var/X in S.scanned) match_check = 0 for(var/datum/electronics/scanned_item/O in mechanic_controls.scanned_items) if(S.scanned == O.item_type) S.scanned -= X match_check = 1 break if (!match_check) var/obj/tempobj = new X (src) mechanic_controls.scan_in(tempobj.name,tempobj.type,tempobj.mats) spawn(40) qdel(tempobj) S.scanned -= X add_count++ if (add_count > 0) boutput(user, "[add_count] new items entered into kit.") else boutput(user, "No new items entered into kit.") else ..() /obj/machinery/rkit/attack_hand(mob/user as mob) src.add_fingerprint(user) var/dat dat = "Ruckingenur Kit
" dat += "Scanned Items:
" for(var/datum/electronics/scanned_item/S in mechanic_controls.scanned_items) dat += "[S.name] " //dat += "Frame" if (S.blueprint) dat += " * Blueprint" dat += "
" dat += "
" dat += "
" user.machine = src user << browse("Ruckingenur Kit Control Panel[dat]", "window=rkit") onclose(user, "rkit") /obj/machinery/rkit/Topic(href, href_list) if (usr.stat) return if ((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) usr.machine = src switch(href_list["tp"]) if("done") if(href_list["op"]) var/datum/electronics/scanned_item/O = locate(href_list["op"]) if(istype(O,/datum/electronics/scanned_item/)) var/obj/item/electronics/frame/F = new/obj/item/electronics/frame(src.loc) F.name = "[O.name]-frame" F.store_type = O.item_type F.needed_parts = O.item_mats if("blueprint") if(href_list["op"]) if (src.no_print_spam && world.time < src.no_print_spam + 50) usr.show_text("[src] isn't done with the previous print job.", "red") else var/datum/electronics/scanned_item/O = locate(href_list["op"]) if (istype(O.blueprint, /datum/manufacture/mechanics/)) usr.show_text("Print job started...", "blue") var/datum/manufacture/mechanics/M = O.blueprint playsound(src.loc, 'sound/machines/printer_thermal.ogg', 50, 1) src.no_print_spam = world.time spawn (50) if (src) new /obj/item/paper/manufacturer_blueprint(src.loc, M.name) updateDialog() else usr << browse(null, "window=rkit") usr.machine = null return /obj/item/deconstructor name = "deconstruction device" desc = "A device able to break copied objects down into their base materials." icon = 'icons/obj/device.dmi' icon_state = "forensic0" w_class = 3.0 var/datum/effects/system/spark_spread/spark_system module_research = list("electronics" = 3, "engineering" = 1) New() ..() src.spark_system = unpool(/datum/effects/system/spark_spread) spark_system.set_up(5, 0, src) spark_system.attach(src) return afterattack(atom/target as mob|obj|turf|area, mob/user as mob) if (!istype(target,/obj/)) return var/obj/O = target if (O.mats != "Built") boutput(user, "This fixture cannot be deconstructed.") return boutput(user, "Deconstructing [O], please remain still...") playsound(user.loc, 'sound/effects/pop.ogg', 50, 1) if(do_after(user, 20)) logTheThing("station", user, null, "deconstructs [O] in [user.loc.loc] ([showCoords(user.x, user.y, user.z)])") playsound(user.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user.name] deconstructs [O].") var/datum/manufacture/mechanics/R = null for (var/datum/manufacture/mechanics/M in manuf_controls.custom_schematics) if (M.frame_path == O.type) R = M break if (istype(R)) var/looper = round(R.item_amounts[1] / 10, 1) while (looper > 0) new /obj/item/material_piece/mauxite(O.loc) looper-- looper = round(R.item_amounts[2] / 10, 1) while (looper > 0) new /obj/item/material_piece/pharosium(O.loc) looper-- looper = round(R.item_amounts[3] / 10, 1) while (looper > 0) new /obj/item/material_piece/molitz(O.loc) looper-- else boutput(user, "Could not reclaim resources.") spark_system.set_up(5, 0, src) spark_system.start() qdel(O) else boutput(user, "Deconstruction of [O] interrupted!") return