Merge pull request #15526 from timothyteakettle/bartender-pda

adds bartender cartridge for drink recipe searching, updates chemist cartridge to have equivalent functionality for all recipes
This commit is contained in:
silicons
2022-02-26 18:08:47 -07:00
committed by GitHub
9 changed files with 67 additions and 1 deletions
+35
View File
@@ -14,6 +14,7 @@
GLOB.chemical_reagents_list[path] = D
/proc/build_chemical_reactions_list()
message_admins("STARTY START START!")
//Chemical Reactions - Initialises all /datum/chemical_reaction into a list
// It is filtered into multiple lists within a list.
// For example:
@@ -26,11 +27,20 @@
//Randomized need to go last since they need to check against conflicts with normal recipes
var/paths = subtypesof(/datum/chemical_reaction) - typesof(/datum/chemical_reaction/randomized) + subtypesof(/datum/chemical_reaction/randomized)
GLOB.chemical_reactions_list = list()
GLOB.normalized_chemical_reactions_list = list() // chemistry pda
GLOB.drink_reactions_list = list() // bartender pda
for(var/path in paths)
var/datum/chemical_reaction/D = new path()
var/list/reaction_ids = list()
// store recipes separately for bartender/chemistry cartridges
if(D.id && !D.is_secret) // don't show things like secretcatchem or secret sauce
var/datum/reagent/r = D.id
if(ispath(D.id, /datum/reagent/consumable))
GLOB.drink_reactions_list[initial(r.name)] = D
if(ispath(D.id, /datum/reagent))
GLOB.normalized_chemical_reactions_list[initial(r.name)] = D
if(D.required_reagents && D.required_reagents.len)
for(var/reaction in D.required_reagents)
@@ -43,6 +53,31 @@
GLOB.chemical_reactions_list[id] += D
break // Don't bother adding ourselves to other reagent ids, it is redundant
/proc/recipe_search(mob/M, list/reaction_list)
var/option = input(M, "Enter keyword to return a recipe.")
if(option)
option = lowertext(option)
var/list/reagents_required
var/found_reagent_name
var/required_temp
for(var/reagent_name in reaction_list)
if(findtext(lowertext(reagent_name), option))
var/datum/chemical_reaction/reaction = reaction_list[reagent_name]
found_reagent_name = reagent_name
reagents_required = reaction.required_reagents
required_temp = reaction.required_temp
break
if(length(reagents_required))
to_chat(M, "<b>Recipe found: [found_reagent_name]</b>[required_temp ? "<br>Required Temperature: [required_temp]K" : ""]<br>Required Reagents:")
var/reagents_required_string = ""
for(var/r in reagents_required)
var/datum/reagent/reagent = r
reagents_required_string += "<br>[initial(reagent.name)]: [reagents_required[r]]"
to_chat(M, reagents_required_string)
return
else
to_chat(M, "<span class='warning'>Reagent with term: [option] could not be located!</span>")
///////////////////////////////////////////////////////////////////////////////////
/datum/reagents
@@ -38,6 +38,8 @@
var/clear_conversion //bitflags for clear conversions; REACTION_CLEAR_IMPURE or REACTION_CLEAR_INVERSE
var/PurityMin = 0.15 //If purity is below 0.15, it explodes too. Set to 0 to disable this.
var/is_secret = FALSE // If it should show in recipe searchers such as the bartender/chemistry PDA functions
/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, multiplier, specialreact)
set waitfor = FALSE
@@ -54,6 +54,8 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related
var/max_result_reagents = 1
var/list/possible_results = list()
is_secret = TRUE
/datum/chemical_reaction/randomized/proc/GenerateRecipe()
created = world.time
if(randomize_container)