Fixed plant analyzer crash when the plant graft gives reagent gene, rather than trait gene [NO GBP] (#89089)

## About The Pull Request


![image](https://github.com/user-attachments/assets/3d4c5d7a-904c-4b63-a6c8-8c65e1a490da)

Didn't know that some plants have reagent traits defined for grafted
traits.

It didn't work because the trait_db contained only subtypes of
`/datum/plant_gene/trait`, but not `/datum/plant_gene/reagent`.

## Why It's Good For The Game

Fix

## Changelog

🆑
fix: Fixed plant analyzer UI crashing on plants that have a reagent gene
on their graft
fix: Plants with reagent traits in the graft now properly say the name
of the grafted reagent
/🆑
This commit is contained in:
Andrew
2025-01-18 05:21:40 +03:00
committed by GitHub
parent 1c8def7837
commit 0f24743cbb
7 changed files with 14 additions and 11 deletions
+1 -1
View File
@@ -219,7 +219,7 @@ GLOBAL_LIST_INIT(allowed_money, typecacheof(list(
/// Inits GLOB.plant_traits
/proc/init_plant_traits()
var/traits = list()
for(var/trait_path in subtypesof(/datum/plant_gene/trait))
for(var/trait_path in subtypesof(/datum/plant_gene))
traits += new trait_path
sort_list(traits, GLOBAL_PROC_REF(cmp_typepaths_asc))
return traits
-2
View File
@@ -104,5 +104,3 @@ GLOBAL_LIST_INIT(prototype_organs, typecacheof(list(
/obj/item/organ/eyes/dullahan,
), only_root_path = TRUE))
/// list of all plan traits
GLOBAL_LIST_INIT(plant_traits, init_plant_traits())
+2
View File
@@ -56,6 +56,8 @@ GLOBAL_LIST_INIT(blacklisted_metalgen_types, typecacheof(list(
)))
/// Map of reagent names to its datum path
GLOBAL_LIST_INIT(name2reagent, build_name2reagentlist())
/// list of all plan traits
GLOBAL_LIST_INIT(plant_traits, init_plant_traits())
/// Initialises all /datum/reagent into a list indexed by reagent id
/proc/init_chemical_reagent_list()
@@ -140,10 +140,10 @@
var/list/data = list()
data["cycle_seconds"] = HYDROTRAY_CYCLE_DELAY / 10
data["trait_db"] = list()
for(var/datum/plant_gene/trait/trait as anything in GLOB.plant_traits)
for(var/datum/plant_gene/trait as anything in GLOB.plant_traits)
var/trait_data = list(list(
"path" = trait.type,
"name" = trait.name,
"name" = trait.get_name(),
"icon" = trait.icon,
"description" = trait.description
))
+4 -3
View File
@@ -2,6 +2,8 @@
/datum/plant_gene
/// The name of the gene.
var/name
/// Bonus lines displayed on examine.
var/description = ""
/// The font awesome icon name representing the gene in the seed extractor UI
var/icon = FA_ICON_DNA
/// Flags that determine if a gene can be modified.
@@ -62,7 +64,8 @@
var/formatted_name
if(!(mutability_flags & PLANT_GENE_REMOVABLE))
formatted_name += "Fragile "
formatted_name += "[name] production [rate*100]%"
var/datum/reagent/reagent = reagent_id
formatted_name += "[reagent.name] production [rate*100]%"
return formatted_name
/*
@@ -117,8 +120,6 @@
/datum/plant_gene/trait
/// The rate at which this trait affects something. This can be anything really - why? I dunno.
var/rate = 0.05
/// Bonus lines displayed on examine.
var/description = ""
/// Flag - Traits that share an ID cannot be placed on the same plant.
var/trait_ids
/// Flag - Modifications made to the final product.
+2 -2
View File
@@ -268,10 +268,10 @@
var/list/data = list()
data["cycle_seconds"] = HYDROTRAY_CYCLE_DELAY / 10
data["trait_db"] = list()
for(var/datum/plant_gene/trait/trait as anything in GLOB.plant_traits)
for(var/datum/plant_gene/trait as anything in GLOB.plant_traits)
var/trait_data = list(list(
"path" = trait.type,
"name" = trait.name,
"name" = trait.get_name(),
"icon" = trait.icon,
"description" = trait.description
))
@@ -436,9 +436,11 @@ export const TraitTooltip = (props) => {
const trait = props.trait_db.find((t) => {
return t.path === props.path;
});
if (!trait) {
return;
}
return (
<Tooltip
key=""
content={
<Table>
{!!props.grafting && (