diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 09be2918a3b..e52cf428fd3 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -243,7 +243,8 @@
if(href_list["search"])
matching_designs.Cut()
- for(var/datum/design/D in files.known_designs)
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
if(findtext(D.name,href_list["to_search"]))
matching_designs.Add(D)
@@ -445,7 +446,8 @@
dat += "Metal amount: [materials.amount(MAT_METAL)] cm3
"
dat += "Glass amount: [materials.amount(MAT_GLASS)] cm3
"
- for(var/datum/design/D in files.known_designs)
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
if(!(selected_category in D.category))
continue
@@ -518,8 +520,8 @@
if(hack)
for(var/datum/design/D in files.possible_designs)
if((D.build_type & AUTOLATHE) && ("hacked" in D.category))
- files.known_designs += D
+ files.AddDesign2Known(D)
else
for(var/datum/design/D in files.known_designs)
if("hacked" in D.category)
- files.known_designs -= D
+ files.known_designs -= D.id
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 23cf5522a5c..3da5587b2a4 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -86,7 +86,8 @@
/obj/machinery/mecha_part_fabricator/proc/output_parts_list(set_name)
var/output = ""
- for(var/datum/design/D in files.known_designs)
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
if(D.build_type & MECHFAB)
if(!(set_name in D.category))
continue
@@ -165,7 +166,8 @@
/obj/machinery/mecha_part_fabricator/proc/add_part_set_to_queue(set_name)
if(set_name in part_sets)
- for(var/datum/design/D in files.known_designs)
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
if(D.build_type & MECHFAB)
if(set_name in D.category)
add_to_queue(D)
@@ -230,11 +232,7 @@
for(var/obj/machinery/computer/rdconsole/RDC in localarea.contents)
if(!RDC.sync)
continue
- for(var/datum/tech/T in RDC.files.known_tech)
- files.AddTech2Known(T)
- for(var/datum/design/D in RDC.files.known_designs)
- files.AddDesign2Known(D)
- files.RefreshResearch()
+ RDC.files.push_data(files)
temp = "Processed equipment designs.
"
//check if the tech coefficients have changed
temp += "Return"
@@ -334,21 +332,17 @@
screen = "parts"
if(href_list["part"])
var/T = filter.getStr("part")
- for(var/datum/design/D in files.known_designs)
- if(D.build_type & MECHFAB)
- if(D.id == T)
- if(!processing_queue)
- build_part(D)
- else
- add_to_queue(D)
- break
+ var/datum/design/D = files.known_designs[T]
+ if(D && (D.build_type & MECHFAB))
+ if(!processing_queue)
+ build_part(D)
+ else
+ add_to_queue(D)
if(href_list["add_to_queue"])
var/T = filter.getStr("add_to_queue")
- for(var/datum/design/D in files.known_designs)
- if(D.build_type & MECHFAB)
- if(D.id == T)
- add_to_queue(D)
- break
+ var/datum/design/D = files.known_designs[T]
+ if(D && D.build_type & MECHFAB)
+ add_to_queue(D)
return update_queue_on_page()
if(href_list["remove_from_queue"])
remove_from_queue(filter.getNum("remove_from_queue"))
@@ -381,15 +375,13 @@
sync()
if(href_list["part_desc"])
var/T = filter.getStr("part_desc")
- for(var/datum/design/D in files.known_designs)
- if(D.build_type & MECHFAB)
- if(D.id == T)
- var/obj/part = D.build_path
- temp = {"
[initial(part.name)] description:
- [initial(part.desc)]
- Return
- "}
- break
+ var/datum/design/D = files.known_designs[T]
+ if(D && D.build_type & MECHFAB)
+ var/obj/part = D.build_path
+ temp = {"[initial(part.name)] description:
+ [initial(part.desc)]
+ Return
+ "}
if(href_list["remove_mat"] && href_list["material"])
var/amount = text2num(href_list["remove_mat"])
@@ -519,4 +511,4 @@
return
/obj/machinery/mecha_part_fabricator/proc/material2name(var/ID)
- return copytext(ID,2)
\ No newline at end of file
+ return copytext(ID,2)
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 7840f9f538f..3f17b047007 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -60,24 +60,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/list/datum/design/matching_designs = list() //for the search function
/proc/CallTechName(ID) //A simple helper proc to find the name of a tech with a given ID.
- var/datum/tech/check_tech
- var/return_name = null
for(var/T in subtypesof(/datum/tech))
- check_tech = null
- check_tech = new T()
- if(check_tech.id == ID)
- return_name = check_tech.name
- qdel(check_tech)
- check_tech = null
- break
+ var/datum/tech/tt = T
+ if(initial(tt.id) == ID)
+ return initial(tt.name)
- return return_name
-
-proc/CallMaterialName(ID)
- var/datum/reagent/temp_reagent
- var/return_name = null
+/proc/CallMaterialName(ID)
if(copytext(ID, 1, 2) == "$")
- return_name = copytext(ID, 2)
+ var/return_name = copytext(ID, 2)
switch(return_name)
if("metal")
return_name = "Metal"
@@ -97,16 +87,12 @@ proc/CallMaterialName(ID)
return_name = "Bananium"
if("mime")
return_name = "Tranquillite"
+ return return_name
else
for(var/R in subtypesof(/datum/reagent))
- temp_reagent = null
- temp_reagent = new R()
- if(temp_reagent.id == ID)
- return_name = temp_reagent.name
- qdel(temp_reagent)
- temp_reagent = null
- break
- return return_name
+ var/datum/reagent/rt = R
+ if(initial(rt.id) == ID)
+ return initial(rt.name)
/obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any).
for(var/obj/machinery/r_n_d/D in range(3,src))
@@ -129,11 +115,7 @@ proc/CallMaterialName(ID)
//Have it automatically push research to the centcom server so wild griffins can't fuck up R&D's work --NEO
/obj/machinery/computer/rdconsole/proc/griefProtection()
for(var/obj/machinery/r_n_d/server/centcom/C in world)
- for(var/datum/tech/T in files.known_tech)
- C.files.AddTech2Known(T)
- for(var/datum/design/D in files.known_designs)
- C.files.AddDesign2Known(D)
- C.files.RefreshResearch()
+ files.push_data(C.files)
/obj/machinery/computer/rdconsole/proc/Maximize()
files.known_tech=files.possible_tech
@@ -154,11 +136,6 @@ proc/CallMaterialName(ID)
..()
SyncRDevices()
-/* Instead of calling this every tick, it is only being called when needed
-/obj/machinery/computer/rdconsole/process()
- griefProtection()
-*/
-
/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob, params)
//Loading a disk into it.
@@ -215,7 +192,8 @@ proc/CallMaterialName(ID)
else
compare = IMPRINTER
- for(var/datum/design/D in files.known_designs)
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
if(!(D.build_type & compare))
continue
if(href_list["category"] in D.category)
@@ -244,10 +222,8 @@ proc/CallMaterialName(ID)
submenu = 0
else if(href_list["copy_tech"]) //Copy some technology data from the research holder to the disk.
- for(var/datum/tech/T in files.known_tech)
- if(href_list["copy_tech_ID"] == T.id)
- t_disk.load_tech(T)
- break
+ // Somehow this href makes me very nervous
+ t_disk.stored = files.known_tech[href_list["copy_tech_ID"]]
menu = 2
submenu = 0
@@ -271,21 +247,22 @@ proc/CallMaterialName(ID)
submenu = 0
else if(href_list["copy_design"]) //Copy design data from the research holder to the design disk.
- for(var/datum/design/D in files.known_designs)
- if(href_list["copy_design_ID"] == D.id)
- var/autolathe_friendly = 1
- for(var/x in D.materials)
- if( !(x in list(MAT_METAL, MAT_GLASS)))
- autolathe_friendly = 0
- D.category -= "Imported"
- if(D.locked)
+ // This href ALSO makes me very nervous
+ var/datum/design/D = files.known_designs[href_list["copy_design_ID"]]
+ if(D)
+ // eeeeeep design datums are global be careful!
+ var/autolathe_friendly = 1
+ for(var/x in D.materials)
+ if( !(x in list(MAT_METAL, MAT_GLASS)))
autolathe_friendly = 0
D.category -= "Imported"
- if(D.build_type & (AUTOLATHE|PROTOLATHE|CRAFTLATHE)) // Specifically excludes circuit imprinter and mechfab
- D.build_type = autolathe_friendly ? (D.build_type | AUTOLATHE) : D.build_type
- D.category |= "Imported"
- d_disk.load_blueprint(D)
- break
+ if(D.locked)
+ autolathe_friendly = 0
+ D.category -= "Imported"
+ if(D.build_type & (AUTOLATHE|PROTOLATHE|CRAFTLATHE)) // Specifically excludes circuit imprinter and mechfab
+ D.build_type = autolathe_friendly ? (D.build_type | AUTOLATHE) : D.build_type
+ D.category |= "Imported"
+ d_disk.blueprint = D
menu = 2
submenu = 0
@@ -386,19 +363,11 @@ proc/CallMaterialName(ID)
var/server_processed = 0
if(S.disabled)
continue
- if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom))
- for(var/datum/tech/T in files.known_tech)
- S.files.AddTech2Known(T)
- for(var/datum/design/D in files.known_designs)
- S.files.AddDesign2Known(D)
- S.files.RefreshResearch()
+ if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom))
+ files.push_data(S.files)
server_processed = 1
- if(((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom)) || S.hacked)
- for(var/datum/tech/T in S.files.known_tech)
- files.AddTech2Known(T)
- for(var/datum/design/D in S.files.known_designs)
- files.AddDesign2Known(D)
- files.RefreshResearch()
+ if(((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom)) || S.hacked)
+ S.files.push_data(files)
server_processed = 1
if(!istype(S, /obj/machinery/r_n_d/server/centcom) && server_processed)
S.produce_heat(100)
@@ -416,11 +385,7 @@ proc/CallMaterialName(ID)
coeff = 1
var/g2g = 1
if(linked_lathe)
- var/datum/design/being_built = null
- for(var/datum/design/D in files.known_designs)
- if(D.id == href_list["build"])
- being_built = D
- break
+ var/datum/design/being_built = files.known_designs[href_list["build"]]
if(being_built)
var/power = 2000
var/amount=text2num(href_list["amount"])
@@ -499,10 +464,7 @@ proc/CallMaterialName(ID)
var/g2g = 1
if(linked_imprinter)
var/datum/design/being_built = null
- for(var/datum/design/D in files.known_designs)
- if(D.id == href_list["imprint"])
- being_built = D
- break
+ being_built = files.known_designs[href_list["imprint"]]
if(being_built)
var/power = 2000
for(var/M in being_built.materials)
@@ -639,7 +601,8 @@ proc/CallMaterialName(ID)
else
compare = IMPRINTER
- for(var/datum/design/D in files.known_designs)
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
if(!(D.build_type & compare))
continue
if(findtext(D.name,href_list["to_search"]))
@@ -682,7 +645,8 @@ proc/CallMaterialName(ID)
if(menu == 0 || menu == 1)
var/list/tech_levels = list()
data["tech_levels"] = tech_levels
- for(var/datum/tech/T in files.known_tech)
+ for(var/v in files.known_tech)
+ var/datum/tech/T = files.known_tech[v]
if(T.level <= 0)
continue
var/list/this_tech_list = list()
@@ -703,7 +667,8 @@ proc/CallMaterialName(ID)
if(t_disk != null && submenu == 1)
var/list/to_copy = list()
data["to_copy"] = to_copy
- for(var/datum/tech/T in files.known_tech)
+ for(var/v in files.known_tech)
+ var/datum/tech/T = files.known_tech[v]
var/list/item = list()
to_copy[++to_copy.len] = item
if(T.level <= 0)
@@ -736,7 +701,8 @@ proc/CallMaterialName(ID)
if(d_disk != null && submenu == 1)
var/list/to_copy = list()
data["to_copy"] = to_copy
- for(var/datum/design/D in files.known_designs)
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
var/list/item = list()
to_copy[++to_copy.len] = item
item["name"] = D.name
@@ -755,7 +721,8 @@ proc/CallMaterialName(ID)
tech_list[++tech_list.len] = tech_item
tech_item["name"] = CallTechName(T)
tech_item["object_level"] = temp_tech[T]
- for(var/datum/tech/F in files.known_tech)
+ for(var/v in files.known_tech)
+ var/datum/tech/F = files.known_tech[v]
if(F.name == CallTechName(T))
tech_item["current_level"] = F.level
break
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index 2fc3b59f085..a3e175811ec 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -53,6 +53,11 @@ research holder datum.
var/list/known_designs = list() //List of available designs (at base reliability).
/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated.
+ // MON DIEU!!!
+ // These are semi-global, but not TOTALLY global?
+ // Using research disks, you can get techs/designs from one research datum
+ // onto another. What consequences this could have, I am presently unsure, but
+ // I imagine nothing good.
for(var/T in subtypesof(/datum/tech))
possible_tech += new T(src)
for(var/D in subtypesof(/datum/design))
@@ -65,47 +70,43 @@ research holder datum.
//Input: datum/tech; Output: 0/1 (false/true)
/datum/research/proc/TechHasReqs(var/datum/tech/T)
if(T.req_tech.len == 0)
- return 1
- var/matches = 0
+ return TRUE
for(var/req in T.req_tech)
- for(var/datum/tech/known in known_tech)
- if((req == known.id) && (known.level >= T.req_tech[req]))
- matches++
- break
- if(matches == T.req_tech.len)
- return 1
- else
- return 0
+ var/datum/tech/known = known_tech[req]
+ if(!known || known.level < T.req_tech[req])
+ return FALSE
+ return TRUE
//Checks to see if design has all the required pre-reqs.
//Input: datum/design; Output: 0/1 (false/true)
/datum/research/proc/DesignHasReqs(var/datum/design/D)
if(D.req_tech.len == 0)
- return 1
- for(var/datum/tech/T in known_tech)
- if((D.req_tech[T.id]) && (T.level < D.req_tech[T.id]))
- return 0
- return 1
+ return TRUE
+ for(var/req in D.req_tech)
+ var/datum/tech/known = known_tech[req]
+ if(!known || known.level < D.req_tech[req])
+ return FALSE
+ return TRUE
//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed.
//Input: datum/tech; Output: Null
/datum/research/proc/AddTech2Known(var/datum/tech/T)
- for(var/datum/tech/known in known_tech)
- if(T.id == known.id)
- if(T.level > known.level)
- known.level = T.level
- return
- known_tech += T
- return
+ if(known_tech[T.id])
+ var/datum/tech/known = known_tech[T.id]
+ if(T.level > known.level)
+ known.level = T.level
+ return
+ known_tech[T.id] = T
/datum/research/proc/AddDesign2Known(var/datum/design/D)
- for(var/datum/design/known in known_designs)
- if(D.id == known.id)
- if(D.reliability > known.reliability)
- known.reliability = D.reliability
- return
- known_designs += D
- return
+ if(known_designs[D.id])
+ // NOTE: This is for reliability only - This is on the chopping block
+ var/datum/design/known = known_designs[D.id]
+ if(D.reliability > known.reliability)
+ known.reliability = D.reliability
+ return
+ // Global datums make me nervous
+ known_designs[D.id] = D
//Refreshes known_tech and known_designs list. Then updates the reliability vars of the designs in the known_designs list.
//Input/Output: n/a
@@ -116,25 +117,30 @@ research holder datum.
for(var/datum/design/PD in possible_designs)
if(DesignHasReqs(PD))
AddDesign2Known(PD)
- for(var/datum/tech/T in known_tech)
+ for(var/v in known_tech)
+ var/datum/tech/T = known_tech[v]
T = Clamp(T.level, 0, 20)
- for(var/datum/design/D in known_designs)
+ for(var/v in known_designs)
+ var/datum/design/D = known_designs[v]
+ // NOTE: reliability stuff, axe this later
D.CalcReliability(known_tech)
- return
//Refreshes the levels of a given tech.
//Input: Tech's ID and Level; Output: null
/datum/research/proc/UpdateTech(var/ID, var/level)
- for(var/datum/tech/KT in known_tech)
- if(KT.id == ID)
- if(KT.level <= level)
- KT.level = max((KT.level + 1), (level - 1))
- return
+ var/datum/tech/KT = known_tech[ID]
+ if(KT)
+ if(KT.level <= level)
+ // Will bump the tech to (value_of_target - 1) automatically -
+ // after that it'll only bump it up by 1 until it's greater
+ // than the source tech
+ KT.level = max((KT.level + 1), (level - 1))
/datum/research/proc/UpdateDesigns(var/obj/item/I, var/list/temp_tech)
for(var/T in temp_tech)
if(temp_tech[T] - 1 >= known_tech[T])
for(var/datum/design/D in known_designs)
+ // NOTE: icky reliability stuff
if(D.req_tech[T])
D.reliability = min(100, D.reliability + 1)
if(D.build_path == I.type)
@@ -143,19 +149,27 @@ research holder datum.
D.reliability = min(100, D.reliability + rand(3, 5))
/datum/research/proc/FindDesignByID(var/id)
- for(var/datum/design/D in known_designs)
- if(D.id == id)
- return D
+ return known_designs[id]
+
+// A common task is for one research datum to copy over its techs and designs
+// and update them on another research datum.
+// Arguments:
+// `other` - The research datum to send designs and techs to
+/datum/research/proc/push_data(datum/research/other)
+ for(var/v in known_tech)
+ var/datum/tech/T = known_tech[v]
+ other.AddTech2Known(T)
+ for(var/v in known_designs)
+ var/datum/design/D = known_designs[v]
+ other.AddDesign2Known(D)
+ other.RefreshResearch()
+
//Autolathe files
-/datum/research/autolathe/New()
- for(var/T in subtypesof(/datum/tech))
- possible_tech += new T(src)
- for(var/path in subtypesof(/datum/design))
- var/datum/design/D = new path(src)
- possible_designs += D
- if((D.build_type & AUTOLATHE) && ("initial" in D.category)) //autolathe starts without hacked designs
- AddDesign2Known(D)
+/datum/research/autolathe
+
+/datum/research/autolathe/DesignHasReqs(var/datum/design/D)
+ return D && (D.build_type & AUTOLATHE) && ("initial" in D.category)
/datum/research/autolathe/AddDesign2Known(var/datum/design/D)
if(!(D.build_type & AUTOLATHE))
@@ -167,7 +181,7 @@ research holder datum.
** Includes all the various technoliges and what they make. **
***************************************************************/
-datum/tech //Datum of individual technologies.
+/datum/tech //Datum of individual technologies.
var/name = "name" //Name of the technology.
var/desc = "description" //General description of what it does and what it makes.
var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols.
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 3116293607b..5b842c90e08 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -76,7 +76,9 @@
refreshParts and the hasReq procs that get called by this are laggy and do not need to be called by every server on the map every tick */
var/updateRD = 0
files.known_designs = list()
- for(var/datum/tech/T in files.known_tech)
+ for(var/v in files.known_tech)
+ var/datum/tech/T = files.known_tech[v]
+ // Slowly decrease research if health drops below 0
if(prob(1))
updateRD++
T.level--
@@ -105,11 +107,7 @@
// Backup files to CentComm to help admins recover data after griefer attacks
/obj/machinery/r_n_d/server/proc/griefProtection()
for(var/obj/machinery/r_n_d/server/centcom/C in machines)
- for(var/datum/tech/T in files.known_tech)
- C.files.AddTech2Known(T)
- for(var/datum/design/D in files.known_designs)
- C.files.AddDesign2Known(D)
- C.files.RefreshResearch()
+ files.push_data(C.files)
/obj/machinery/r_n_d/server/proc/produce_heat(heat_amt)
if(!(stat & (NOPOWER|BROKEN))) // Blatantly stolen from space heater.
diff --git a/code/modules/spacepods/pod_fabricator.dm b/code/modules/spacepods/pod_fabricator.dm
index b111a508afc..da3b9879a4d 100644
--- a/code/modules/spacepods/pod_fabricator.dm
+++ b/code/modules/spacepods/pod_fabricator.dm
@@ -99,7 +99,8 @@
/obj/machinery/spod_part_fabricator/proc/output_parts_list(set_name)
var/output = ""
- for(var/datum/design/D in files.known_designs)
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
if(D.build_type & PODFAB)
if(!(set_name in D.category))
continue
@@ -178,7 +179,8 @@
/obj/machinery/spod_part_fabricator/proc/add_part_set_to_queue(set_name)
if(set_name in part_sets)
- for(var/datum/design/D in files.known_designs)
+ for(var/v in files.known_designs)
+ var/datum/design/D = files.known_designs[v]
if(D.build_type & PODFAB)
if(set_name in D.category)
add_to_queue(D)
@@ -238,7 +240,8 @@
if(!files)
return
var/output
- for(var/datum/tech/T in files.known_tech)
+ for(var/v in files.known_tech)
+ var/datum/tech/T = files.known_tech[v]
if(T && T.level > 1)
var/diff
switch(T.id)
@@ -266,11 +269,7 @@
for(var/obj/machinery/computer/rdconsole/RDC in localarea.contents)
if(!RDC.sync)
continue
- for(var/datum/tech/T in RDC.files.known_tech)
- files.AddTech2Known(T)
- for(var/datum/design/D in RDC.files.known_designs)
- files.AddDesign2Known(D)
- files.RefreshResearch()
+ RDC.files.push_data(files)
temp = "Processed equipment designs.
"
//check if the tech coefficients have changed
temp += update_tech()
@@ -364,21 +363,17 @@
screen = "parts"
if(href_list["part"])
var/T = filter.getStr("part")
- for(var/datum/design/D in files.known_designs)
- if(D.build_type & PODFAB)
- if(D.id == T)
- if(!processing_queue)
- build_part(D)
- else
- add_to_queue(D)
- break
+ var/datum/design/D = files.known_designs[T]
+ if(D && D.build_type & PODFAB)
+ if(!processing_queue)
+ build_part(D)
+ else
+ add_to_queue(D)
if(href_list["add_to_queue"])
var/T = filter.getStr("add_to_queue")
- for(var/datum/design/D in files.known_designs)
- if(D.build_type & PODFAB)
- if(D.id == T)
- add_to_queue(D)
- break
+ var/datum/design/D = files.known_designs[T]
+ if(D && D.build_type & PODFAB)
+ add_to_queue(D)
return update_queue_on_page()
if(href_list["remove_from_queue"])
remove_from_queue(filter.getNum("remove_from_queue"))
@@ -411,15 +406,13 @@
sync()
if(href_list["part_desc"])
var/T = filter.getStr("part_desc")
- for(var/datum/design/D in files.known_designs)
- if(D.build_type & PODFAB)
- if(D.id == T)
- var/obj/part = D.build_path
- temp = {"[initial(part.name)] description:
- [initial(part.desc)]
- Return
- "}
- break
+ var/datum/design/D = files.known_designs[T]
+ if(D && D.build_type & PODFAB)
+ var/obj/part = D.build_path
+ temp = {"[initial(part.name)] description:
+ [initial(part.desc)]
+ Return
+ "}
if(href_list["remove_mat"] && href_list["material"])
var/amount = text2num(href_list["remove_mat"])
@@ -545,4 +538,4 @@
return
/obj/machinery/spod_part_fabricator/proc/material2name(var/ID)
- return copytext(ID,2)
\ No newline at end of file
+ return copytext(ID,2)