mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-06 06:40:42 +01:00
df7f509185
## About The Pull Request Fixes an issue where crafting something that uses a tool as a part of its recipe using an integrated arm implant would delete the cyborg tool from the implant. Technically the flamethrower was not eating the implant, but it was doing other weird stuff. The tools can still be used if they are part of the needed tools to put together the item. fixes: #74081 ## Why It's Good For The Game We don't want players losing their tool implants from crafting an item. ## Changelog 🆑 Seven fix: Crafting recipes will not eat your implanted toolset if the recipe calls for a tool /🆑
103 lines
3.9 KiB
Plaintext
103 lines
3.9 KiB
Plaintext
/datum/crafting_recipe
|
|
/// in-game display name
|
|
/// Optional, if not set uses result name
|
|
var/name
|
|
/// description displayed in game
|
|
/// Optional, if not set uses result desc
|
|
var/desc
|
|
///type paths of items consumed associated with how many are needed
|
|
var/list/reqs = list()
|
|
///type paths of items explicitly not allowed as an ingredient
|
|
var/list/blacklist = list()
|
|
///type path of item resulting from this craft
|
|
var/result
|
|
/// String defines of items needed but not consumed. Lazy list.
|
|
var/list/tool_behaviors
|
|
/// Type paths of items needed but not consumed. Lazy list.
|
|
var/list/tool_paths
|
|
///time in seconds. Remember to use the SECONDS define!
|
|
var/time = 3 SECONDS
|
|
///type paths of items that will be placed in the result
|
|
var/list/parts = list()
|
|
///like tool_behaviors but for reagents
|
|
var/list/chem_catalysts = list()
|
|
///where it shows up in the crafting UI
|
|
var/category
|
|
///Set to FALSE if it needs to be learned first.
|
|
var/always_available = TRUE
|
|
///Required machines for the craft, set the assigned value of the typepath to CRAFTING_MACHINERY_CONSUME or CRAFTING_MACHINERY_USE. Lazy associative list: type_path key -> flag value.
|
|
var/list/machinery
|
|
///Required structures for the craft, set the assigned value of the typepath to CRAFTING_STRUCTURE_CONSUME or CRAFTING_STRUCTURE_USE. Lazy associative list: type_path key -> flag value.
|
|
var/list/structures
|
|
///Should only one object exist on the same turf?
|
|
var/one_per_turf = FALSE
|
|
/// Steps needed to achieve the result
|
|
var/list/steps
|
|
/// Whether the result can be crafted with a crafting menu button
|
|
var/non_craftable
|
|
/// Chemical reaction described in the recipe
|
|
var/datum/chemical_reaction/reaction
|
|
/// Resulting amount (for stacks only)
|
|
var/result_amount
|
|
/// Whether we should delete the contents of the crafted storage item (Only works with storage items, used for ammo boxes, donut boxes, internals boxes, etc)
|
|
var/delete_contents = TRUE
|
|
|
|
/datum/crafting_recipe/New()
|
|
if(!(result in reqs))
|
|
blacklist += result
|
|
// These should be excluded from all crafting recipies
|
|
blacklist += list(
|
|
/obj/item/cautery/augment,
|
|
/obj/item/circular_saw/augment,
|
|
/obj/item/crowbar/cyborg,
|
|
/obj/item/hemostat/augment,
|
|
/obj/item/multitool/cyborg,
|
|
/obj/item/retractor/augment,
|
|
/obj/item/scalpel/augment,
|
|
/obj/item/screwdriver/cyborg,
|
|
/obj/item/surgicaldrill/augment,
|
|
/obj/item/weldingtool/largetank/cyborg,
|
|
/obj/item/wirecutters/cyborg,
|
|
/obj/item/wrench/cyborg,
|
|
)
|
|
if(tool_behaviors)
|
|
tool_behaviors = string_list(tool_behaviors)
|
|
if(tool_paths)
|
|
tool_paths = string_list(tool_paths)
|
|
|
|
/datum/crafting_recipe/stack/New(obj/item/stack/material, datum/stack_recipe/stack_recipe)
|
|
if(!material || !stack_recipe || !stack_recipe.result_type)
|
|
stack_trace("Invalid stack recipe [stack_recipe]")
|
|
return
|
|
..()
|
|
|
|
src.name = stack_recipe.title
|
|
src.time = stack_recipe.time
|
|
src.result = stack_recipe.result_type
|
|
src.result_amount = stack_recipe.res_amount
|
|
src.reqs[material] = stack_recipe.req_amount
|
|
src.category = stack_recipe.category || CAT_MISC
|
|
|
|
/**
|
|
* Run custom pre-craft checks for this recipe, don't add feedback messages in this because it will spam the client
|
|
*
|
|
* user: The /mob that initiated the crafting
|
|
* collected_requirements: A list of lists of /obj/item instances that satisfy reqs. Top level list is keyed by requirement path.
|
|
*/
|
|
/datum/crafting_recipe/proc/check_requirements(mob/user, list/collected_requirements)
|
|
return TRUE
|
|
|
|
/datum/crafting_recipe/proc/on_craft_completion(mob/user, atom/result)
|
|
return
|
|
|
|
///Check if the pipe used for atmospheric device crafting is the proper one
|
|
/datum/crafting_recipe/proc/atmos_pipe_check(mob/user, list/collected_requirements)
|
|
var/obj/item/pipe/required_pipe = collected_requirements[/obj/item/pipe][1]
|
|
if(ispath(required_pipe.pipe_type, /obj/machinery/atmospherics/pipe/smart))
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/// Additional UI data to be passed to the crafting UI for this recipe
|
|
/datum/crafting_recipe/proc/crafting_ui_data()
|
|
return list()
|