Files
CHOMPStation2/code/game/machinery/constructable_frame.dm
CHOMPStation2StaffMirrorBot 1b8f394a14 [MIRROR] Makes uses of do_after sane (#11582)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-09-07 23:02:27 -04:00

161 lines
5.5 KiB
Plaintext

//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
//Circuit boards are in /code/game/objects/items/weapons/circuitboards/machinery/
/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier.
name = "machine frame"
icon = 'icons/obj/stock_parts.dmi'
icon_state = "box_0"
density = TRUE
anchored = TRUE
use_power = USE_POWER_OFF
var/obj/item/circuitboard/circuit = null
var/list/components = null
var/list/req_components = null
var/list/req_component_names = null
var/state = 1
proc/update_desc()
var/D
if(req_components)
var/list/component_list = new
for(var/I in req_components)
if(req_components[I] > 0)
component_list += "[num2text(req_components[I])] [req_component_names[I]]"
D = "Requires [english_list(component_list)]."
desc = D
/obj/machinery/constructable_frame/machine_frame
attackby(obj/item/P as obj, mob/user as mob)
switch(state)
if(1)
if(istype(P, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = P
if (C.get_amount() < 5)
to_chat(user, span_warning("You need five lengths of cable to add them to the frame."))
return
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
to_chat(user, span_notice("You start to add cables to the frame."))
if(do_after(user, 2 SECONDS, target = src) && state == 1)
if(C.use(5))
to_chat(user, span_notice("You add cables to the frame."))
state = 2
icon_state = "box_1"
else
if(P.has_tool_quality(TOOL_WRENCH))
playsound(src, W.usesound, 75, 1)
to_chat(user, span_notice("You dismantle the frame"))
new /obj/item/stack/material/steel(src.loc, 5)
qdel(src)
if(2)
if(istype(P, /obj/item/circuitboard))
var/obj/item/circuitboard/B = P
if(B.board_type == "machine")
//VOREStation Addition End
if(istype(B, /obj/item/circuitboard/quantumpad) && istype(get_area(src), /area/shuttle))
to_chat(user, span_warning("This is too unstable a platform for a quantum pad to operate on!"))
return
//VOREStation Addition End
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
to_chat(user, span_notice("You add the circuit board to the frame."))
circuit = P
user.drop_item()
P.loc = src
icon_state = "box_2"
state = 3
components = list()
req_components = circuit.req_components.Copy()
for(var/A in circuit.req_components)
req_components[A] = circuit.req_components[A]
req_component_names = circuit.req_components.Copy()
for(var/A in req_components)
var/cp = text2path(A)
var/obj/ct = new cp() // have to quickly instantiate it get name
req_component_names[A] = ct.name
update_desc()
to_chat(user, desc)
else
to_chat(user, span_warning("This frame does not accept circuit boards of this type!"))
else
if(P.has_tool_quality(TOOL_WIRECUTTER))
playsound(src, P.usesound, 50, 1)
to_chat(user, span_notice("You remove the cables."))
state = 1
icon_state = "box_0"
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc )
A.amount = 5
if(3)
if(P.has_tool_quality(TOOL_CROWBAR))
playsound(src, P.usesound, 50, 1)
state = 2
circuit.loc = src.loc
circuit = null
if(components.len == 0)
to_chat(user, span_notice("You remove the circuit board."))
else
to_chat(user, span_notice("You remove the circuit board and other components."))
for(var/obj/item/W in components)
W.loc = src.loc
desc = initial(desc)
req_components = null
components = null
icon_state = "box_1"
else
if(P.has_tool_quality(TOOL_SCREWDRIVER))
var/component_check = 1
for(var/R in req_components)
if(req_components[R] > 0)
component_check = 0
break
if(component_check)
playsound(src, P.usesound, 50, 1)
var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir)
if(new_machine.component_parts)
new_machine.component_parts.Cut()
else
new_machine.component_parts = list()
src.circuit.construct(new_machine)
for(var/obj/O in src)
if(circuit.contain_parts) // things like disposal don't want their parts in them
O.loc = new_machine
else
O.loc = null
new_machine.component_parts += O
if(circuit.contain_parts)
circuit.loc = new_machine
else
circuit.loc = null
new_machine.RefreshParts()
qdel(src)
else
if(istype(P, /obj/item))
for(var/I in req_components)
if(istype(P, text2path(I)) && (req_components[I] > 0))
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
if(P.is_cable_coil)
var/obj/item/stack/cable_coil/CP = P
if(CP.get_amount() > 1)
var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src)
CC.amount = camt
CC.update_icon()
CP.use(camt)
components += CC
req_components[I] -= camt
update_desc()
break
user.drop_item()
P.loc = src
components += P
req_components[I]--
update_desc()
break
to_chat(user, desc)
if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil))
to_chat(user, span_warning("You cannot add that component to the machine!"))