This repository has been archived on 2026-05-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AgrarianGameArchive/Scripts/setup_recipe_definitions.py
T

157 lines
5.1 KiB
Python

import unreal
RECIPE_FOLDER = "/Game/Agrarian/DataAssets/Recipes"
ITEM_DISPLAY = {
"wood": ("Wood", 1.0),
"stone": ("Stone", 1.5),
"fiber": ("Fiber", 0.1),
"hide": ("Hide", 0.7),
"primitive_frame": ("Primitive Frame", 3.0),
"primitive_wall_panel": ("Primitive Wall Panel", 4.0),
"primitive_roof_panel": ("Primitive Roof Panel", 4.0),
"campfire": ("Campfire", 12.0),
"primitive_shelter": ("Primitive Shelter", 25.0),
"basic_tool": ("Basic Tool", 1.2),
"bandage": ("Bandage", 0.1),
}
RECIPES = [
{
"asset": "DA_Recipe_Campfire",
"recipe_id": "campfire",
"display_name": "Campfire",
"ingredients": [("wood", 5), ("stone", 8), ("fiber", 2)],
"result": ("campfire", 1),
"craft_seconds": 8.0,
"requires_campfire": False,
},
{
"asset": "DA_Recipe_PrimitiveShelter",
"recipe_id": "primitive_shelter",
"display_name": "Primitive Shelter",
"ingredients": [
("primitive_frame", 2),
("primitive_wall_panel", 4),
("primitive_roof_panel", 2),
("hide", 2),
("fiber", 6),
],
"result": ("primitive_shelter", 1),
"craft_seconds": 20.0,
"requires_campfire": False,
},
{
"asset": "DA_Recipe_PrimitiveFrame",
"recipe_id": "primitive_frame",
"display_name": "Primitive Frame",
"ingredients": [("wood", 4), ("fiber", 2)],
"result": ("primitive_frame", 1),
"craft_seconds": 8.0,
"requires_campfire": False,
},
{
"asset": "DA_Recipe_PrimitiveWallPanel",
"recipe_id": "primitive_wall_panel",
"display_name": "Primitive Wall Panel",
"ingredients": [("wood", 3), ("fiber", 2)],
"result": ("primitive_wall_panel", 1),
"craft_seconds": 6.0,
"requires_campfire": False,
},
{
"asset": "DA_Recipe_PrimitiveRoofPanel",
"recipe_id": "primitive_roof_panel",
"display_name": "Primitive Roof Panel",
"ingredients": [("wood", 3), ("fiber", 3)],
"result": ("primitive_roof_panel", 1),
"craft_seconds": 7.0,
"requires_campfire": False,
},
{
"asset": "DA_Recipe_BasicTool",
"recipe_id": "basic_tool",
"display_name": "Basic Tool",
"ingredients": [("wood", 1), ("stone", 2), ("fiber", 1)],
"result": ("basic_tool", 1),
"craft_seconds": 6.0,
"requires_campfire": False,
},
{
"asset": "DA_Recipe_Bandage",
"recipe_id": "bandage",
"display_name": "Bandage",
"ingredients": [("fiber", 3), ("hide", 1)],
"result": ("bandage", 1),
"craft_seconds": 4.0,
"requires_campfire": False,
},
]
def make_stack(item_id, quantity):
display_name, unit_weight = ITEM_DISPLAY[item_id]
stack = unreal.AgrarianItemStack()
stack.set_editor_property("item_id", item_id)
stack.set_editor_property("display_name", display_name)
stack.set_editor_property("quantity", quantity)
stack.set_editor_property("unit_weight", unit_weight)
return stack
def set_requires_campfire(recipe, value):
for property_name in ("requires_campfire", "b_requires_campfire"):
try:
recipe.set_editor_property(property_name, value)
return
except Exception:
continue
if value:
raise RuntimeError("Could not set bRequiresCampfire on recipe asset")
def create_or_load_recipe_asset(asset_name):
path = f"{RECIPE_FOLDER}/{asset_name}"
existing = unreal.EditorAssetLibrary.load_asset(path)
if existing:
return existing
factory = unreal.DataAssetFactory()
factory.set_editor_property("data_asset_class", unreal.AgrarianRecipeDataAsset)
asset_tools = unreal.AssetToolsHelpers.get_asset_tools()
asset = asset_tools.create_asset(asset_name, RECIPE_FOLDER, unreal.AgrarianRecipeDataAsset, factory)
if not asset:
raise RuntimeError(f"Could not create {path}")
return asset
def apply_recipe(asset, recipe_data):
recipe = unreal.AgrarianRecipe()
recipe.set_editor_property("recipe_id", recipe_data["recipe_id"])
recipe.set_editor_property("display_name", recipe_data["display_name"])
recipe.set_editor_property(
"ingredients",
[make_stack(item_id, quantity) for item_id, quantity in recipe_data["ingredients"]],
)
result_id, result_quantity = recipe_data["result"]
recipe.set_editor_property("result", make_stack(result_id, result_quantity))
recipe.set_editor_property("craft_seconds", recipe_data["craft_seconds"])
set_requires_campfire(recipe, recipe_data["requires_campfire"])
asset.set_editor_property("recipe", recipe)
unreal.EditorAssetLibrary.save_loaded_asset(asset)
def main():
unreal.EditorAssetLibrary.make_directory(RECIPE_FOLDER)
for recipe_data in RECIPES:
asset = create_or_load_recipe_asset(recipe_data["asset"])
apply_recipe(asset, recipe_data)
unreal.log(f"Configured recipe: {recipe_data['recipe_id']} -> {RECIPE_FOLDER}/{recipe_data['asset']}")
unreal.log("Agrarian recipe setup complete.")
main()