Skip to content

Commit 66d15bd

Browse files
authored
Robot/Prosthetics lathe Duplication fix (#9117)
* Fix fabs * Fab update * Better Eject_material_of_type * Update code/game/machinery/machinery.dm Co-authored-by: Atermonera <[email protected]> * Update code/game/mecha/mech_fabricator.dm Co-authored-by: Atermonera <[email protected]> * indent fix * Update machinery.dm
1 parent 4889b33 commit 66d15bd

File tree

5 files changed

+66
-6
lines changed

5 files changed

+66
-6
lines changed

code/game/machinery/machinery.dm

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,4 +510,17 @@ Class Procs:
510510
S.amount = round(materials[mat] / S.perunit)
511511
else
512512
qdel(S) //Prevents stacks smaller than 1
513-
return
513+
return
514+
515+
/obj/machinery/proc/eject_material_of_type(var/incoming_material) //Used for autolathe, protolathe, mechfab, exofab. Stuff that takes materials, basically.
516+
if(!LAZYLEN(materials[incoming_material]))
517+
return
518+
var/datum/material/M = get_material_by_name(incoming_material)
519+
if(!istype(M))
520+
return
521+
522+
while(materials[incoming_material] > M.perunit)
523+
var/obj/item/stack/material/S = new M.stack_type(get_turf(src))
524+
S.amount = min(round(materials[incoming_material] / S.perunit), S.max_amount)
525+
materials[incoming_material] -= (S.amount * S.perunit)
526+
return

code/game/mecha/mech_fabricator.dm

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@
1111
req_access = list(access_robotics)
1212
circuit = /obj/item/circuitboard/mechfab
1313

14+
var/list/href_data
15+
var/topic_result
16+
1417
var/speed = 1
1518
var/mat_efficiency = 1
1619
materials = list(MAT_STEEL = 0, "glass" = 0, "plastic" = 0, MAT_GRAPHITE = 0, MAT_PLASTEEL = 0, "gold" = 0, "silver" = 0, MAT_LEAD = 0, "osmium" = 0, "diamond" = 0, MAT_DURASTEEL = 0, "phoron" = 0, "uranium" = 0, MAT_VERDANTIUM = 0, MAT_MORPHIUM = 0, MAT_METALHYDROGEN = 0, MAT_SUPERMATTER = 0)
1720
var/list/hidden_materials = list(MAT_PLASTEEL, MAT_DURASTEEL, MAT_GRAPHITE, MAT_VERDANTIUM, MAT_MORPHIUM, MAT_METALHYDROGEN, MAT_SUPERMATTER)
21+
var/eject_lockout = FALSE
1822
var/res_max_amount = 200000
1923

2024
var/datum/research/files
@@ -108,6 +112,7 @@
108112
if(current)
109113
data["builtperc"] = round((progress / current.time) * 100)
110114

115+
href_data = data
111116
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
112117
if(!ui)
113118
ui = new(user, src, ui_key, "mechfab.tmpl", "Exosuit Fabricator UI", 800, 600)
@@ -116,6 +121,7 @@
116121
ui.set_auto_update(1)
117122

118123
/obj/machinery/mecha_part_fabricator/Topic(href, href_list)
124+
topic_result = href_list
119125
if(..())
120126
return
121127

@@ -129,8 +135,8 @@
129135
if(href_list["category"] in categories)
130136
category = href_list["category"]
131137

132-
if(href_list["eject"])
133-
eject_materials(href_list["eject"], text2num(href_list["amount"]))
138+
if(href_list["eject"] && !eject_lockout)
139+
eject_materials_partial(href_list["eject"], text2num(href_list["amount"]))
134140

135141
if(href_list["sync"])
136142
sync()
@@ -301,3 +307,22 @@
301307
files.RefreshResearch()
302308
sync_message = "Sync complete."
303309
update_categories()
310+
311+
/obj/machinery/mecha_part_fabricator/proc/eject_materials_partial(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything
312+
var/recursive = amount == -1
313+
var/matstring = lowertext(material)
314+
var/datum/material/M = get_material_by_name(matstring)
315+
if(recursive && materials[matstring] >= M.perunit)
316+
eject_material_of_type(matstring)
317+
return
318+
319+
var/obj/item/stack/material/S = M.place_sheet(get_turf(src))
320+
if(amount <= 0)
321+
amount = S.max_amount
322+
var/ejected = min(round(materials[matstring] / S.perunit), amount)
323+
S.amount = min(ejected, amount)
324+
if(S.amount <= 0)
325+
qdel(S)
326+
return
327+
materials[matstring] -= ejected * S.perunit
328+
update_busy()

code/game/mecha/mech_prosthetics.dm

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
var/mat_efficiency = 1
1616
materials = list(MAT_STEEL = 0, "glass" = 0, "plastic" = 0, MAT_GRAPHITE = 0, MAT_PLASTEEL = 0, "gold" = 0, "silver" = 0, MAT_LEAD = 0, "osmium" = 0, "diamond" = 0, MAT_DURASTEEL = 0, "phoron" = 0, "uranium" = 0, MAT_VERDANTIUM = 0, MAT_MORPHIUM = 0)
1717
var/list/hidden_materials = list(MAT_DURASTEEL, MAT_GRAPHITE, MAT_VERDANTIUM, MAT_MORPHIUM)
18+
var/eject_lockout = FALSE
1819
var/res_max_amount = 200000
1920

2021
var/datum/research/files
@@ -144,8 +145,8 @@
144145
if(href_list["manufacturer"] in all_robolimbs)
145146
manufacturer = href_list["manufacturer"]
146147

147-
if(href_list["eject"])
148-
eject_materials(href_list["eject"], text2num(href_list["amount"]))
148+
if(href_list["eject"] && !eject_lockout)
149+
eject_materials_partial(href_list["eject"], text2num(href_list["amount"]))
149150

150151
if(href_list["sync"])
151152
sync()
@@ -339,3 +340,23 @@
339340
files.RefreshResearch()
340341
sync_message = "Sync complete."
341342
update_categories()
343+
344+
/obj/machinery/pros_fabricator/proc/eject_materials_partial(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything
345+
var/recursive = amount == -1 ? 1 : 0
346+
var/matstring = lowertext(material)
347+
var/datum/material/M = get_material_by_name(matstring)
348+
349+
if(recursive && materials[matstring] >= M.perunit)
350+
eject_material_of_type(matstring)
351+
return
352+
353+
var/obj/item/stack/material/S = M.place_sheet(get_turf(src))
354+
if(amount <= 0)
355+
amount = S.max_amount
356+
var/ejected = min(round(materials[matstring] / S.perunit), amount)
357+
S.amount = min(ejected, amount)
358+
if(S.amount <= 0)
359+
qdel(S)
360+
return
361+
materials[matstring] -= ejected * S.perunit
362+
update_busy()

code/modules/materials/materials/_materials.dm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ var/global/list/name_to_material
116116
var/radiation_resistance = 0 // Radiation resistance, which is added on top of a material's weight for blocking radiation. Needed to make lead special without superrobust weapons.
117117
var/supply_conversion_value // Supply points per sheet that this material sells for.
118118

119+
var/perunit = SHEET_MATERIAL_AMOUNT //How much stacks of translate from sheet to amount
120+
119121
// Placeholder vars for the time being, todo properly integrate windows/light tiles/rods.
120122
var/created_window
121123
var/created_fulltile_window

nano/templates/mechfab.tmpl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,3 @@
8888
</div>
8989
{{/for}}
9090
</div>
91-

0 commit comments

Comments
 (0)