mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-07-17 12:02:19 +01:00
Initial Commit
This commit is contained in:
@@ -0,0 +1,629 @@
|
||||
|
||||
/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, "<span style=\"color:blue\">You add the [E.name] to the [src].</span>")
|
||||
return
|
||||
else if(istype(E,/obj/item/electronics/soldering))
|
||||
if(!secured)
|
||||
secured = 1
|
||||
viewstat = 1
|
||||
boutput(user, "<span style=\"color:blue\">You secure the [src].</span>")
|
||||
else if(secured == 1)
|
||||
secured = 0
|
||||
viewstat = 0
|
||||
boutput(user, "<span style=\"color:blue\">You unsecure the [src].</span>")
|
||||
else if(secured == 2)
|
||||
secured = 0
|
||||
boutput(user, "<span style=\"color:red\">You deploy the [src]!</span>")
|
||||
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, "<span style=\"color:red\">That is not a valid component!</span>")
|
||||
return
|
||||
|
||||
if (!src.secured)
|
||||
var/turf/source_turf = get_turf(O)
|
||||
if(!source_turf) return
|
||||
user.visible_message("<span style=\"color:blue\">[user] begins quickly adding components to [src]!</span>", "<span style=\"color:blue\">You begin to quickly add components to [src]!</span>")
|
||||
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, "<span style=\"color:blue\">You finish adding components to [src]!</span>")
|
||||
else
|
||||
boutput(user, "<span style=\"color:red\">The board is already secured!</span>")
|
||||
return
|
||||
|
||||
/obj/item/electronics/frame/attack_self(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
var/dat
|
||||
dat = "Parts:<BR>"
|
||||
|
||||
switch(viewstat)
|
||||
|
||||
if(0)
|
||||
for(var/obj/item/electronics/P in src.contents)
|
||||
dat += "[P.name]: <A href='?src=\ref[src];op=\ref[P];tp=move'>Remove</A><BR>"
|
||||
|
||||
user.machine = src
|
||||
user << browse("<HEAD><TITLE>Frame</TITLE></HEAD><TT>[dat]</TT>", "window=fkit")
|
||||
onclose(user, "fkit")
|
||||
|
||||
if(1)
|
||||
var/check = parts_check()
|
||||
if(!check)
|
||||
boutput(user, "<span style=\"color:red\">Incomplete Object, unable to finish!</span>")
|
||||
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, "<span style=\"color:red\">Place box and solder to deploy!</span>")
|
||||
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, "<span style=\"color:red\">The structure of this object is not compatible with the scanner.</span>")
|
||||
return
|
||||
|
||||
if (O.mats == "Built" && (ticker && ticker.mode && !istype(ticker.mode, /datum/game_mode/construction)))
|
||||
boutput(user, "<span style=\"color:red\">You cannot scan an object that was already deployed by a mechanic.</span>")
|
||||
return
|
||||
|
||||
user.visible_message("<B>[user.name]</B> 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, "<span style=\"color:red\">You have already scanned that object.</span>")
|
||||
return
|
||||
|
||||
for(var/datum/electronics/scanned_item/I in mechanic_controls.scanned_items)
|
||||
if(final_type == I.item_type)
|
||||
boutput(user, "<span style=\"color:red\">That object already exists in the scanned database.</span>")
|
||||
return
|
||||
src.scanned += final_type
|
||||
boutput(user, "<span style=\"color:blue\">Item scan successful.</span>")
|
||||
|
||||
////////////////////////////////////////////////////////////////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, "<span style=\"color:blue\">[add_count] new items entered into kit.</span>")
|
||||
else
|
||||
boutput(user, "<span style=\"color:red\">No new items entered into kit.</span>")
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/rkit/attack_hand(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
var/dat
|
||||
dat = "<b>Ruckingenur Kit</b><HR>"
|
||||
|
||||
dat += "<b>Scanned Items:</b><br>"
|
||||
for(var/datum/electronics/scanned_item/S in mechanic_controls.scanned_items)
|
||||
dat += "<u>[S.name]</u><small> "
|
||||
//dat += "<A href='?src=\ref[src];op=\ref[S];tp=done'>Frame</A>"
|
||||
if (S.blueprint)
|
||||
dat += " * <A href='?src=\ref[src];op=\ref[S];tp=blueprint'>Blueprint</A>"
|
||||
dat += "</small><br>"
|
||||
dat += "<br>"
|
||||
|
||||
dat += "<HR>"
|
||||
|
||||
user.machine = src
|
||||
user << browse("<HEAD><TITLE>Ruckingenur Kit Control Panel</TITLE></HEAD><TT>[dat]</TT>", "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, "<span style=\"color:red\">This fixture cannot be deconstructed.</span>")
|
||||
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("<B>[user.name]</B> 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, "<span style=\"color:red\">Could not reclaim resources.</span>")
|
||||
spark_system.set_up(5, 0, src)
|
||||
spark_system.start()
|
||||
qdel(O)
|
||||
|
||||
else
|
||||
boutput(user, "<span style=\"color:red\">Deconstruction of [O] interrupted!</span>")
|
||||
return
|
||||
Reference in New Issue
Block a user