165 lines
5.8 KiB
Python
165 lines
5.8 KiB
Python
import unreal
|
|
|
|
|
|
ITEM_FOLDER = "/Game/Agrarian/DataAssets/Items"
|
|
|
|
ITEMS = [
|
|
{
|
|
"asset": "DA_Item_Wood",
|
|
"item_id": "wood",
|
|
"display_name": "Wood",
|
|
"description": "Usable branches, logs, and rough-cut timber for fires, tools, and early structures.",
|
|
"item_type": unreal.AgrarianItemType.RESOURCE,
|
|
"unit_weight": 1.0,
|
|
"max_stack_size": 99,
|
|
},
|
|
{
|
|
"asset": "DA_Item_Stone",
|
|
"item_id": "stone",
|
|
"display_name": "Stone",
|
|
"description": "Field stone suitable for crude tools, fire rings, and primitive construction.",
|
|
"item_type": unreal.AgrarianItemType.RESOURCE,
|
|
"unit_weight": 1.5,
|
|
"max_stack_size": 99,
|
|
},
|
|
{
|
|
"asset": "DA_Item_Fiber",
|
|
"item_id": "fiber",
|
|
"display_name": "Fiber",
|
|
"description": "Plant fiber that can be twisted, woven, or bound into survival gear and simple structures.",
|
|
"item_type": unreal.AgrarianItemType.RESOURCE,
|
|
"unit_weight": 0.1,
|
|
"max_stack_size": 99,
|
|
},
|
|
{
|
|
"asset": "DA_Item_Food",
|
|
"item_id": "food",
|
|
"display_name": "Food",
|
|
"description": "Foraged edible food that can stave off hunger in the earliest survival loop.",
|
|
"item_type": unreal.AgrarianItemType.FOOD,
|
|
"unit_weight": 0.3,
|
|
"max_stack_size": 50,
|
|
},
|
|
{
|
|
"asset": "DA_Item_Meat",
|
|
"item_id": "meat",
|
|
"display_name": "Meat",
|
|
"description": "Raw harvested meat that should be cooked or preserved before long-term use.",
|
|
"item_type": unreal.AgrarianItemType.FOOD,
|
|
"unit_weight": 0.5,
|
|
"max_stack_size": 50,
|
|
},
|
|
{
|
|
"asset": "DA_Item_Hide",
|
|
"item_id": "hide",
|
|
"display_name": "Hide",
|
|
"description": "Animal hide used for shelter, clothing, containers, and other early craft work.",
|
|
"item_type": unreal.AgrarianItemType.RESOURCE,
|
|
"unit_weight": 0.7,
|
|
"max_stack_size": 50,
|
|
},
|
|
{
|
|
"asset": "DA_Item_PrimitiveFrame",
|
|
"item_id": "primitive_frame",
|
|
"display_name": "Primitive Frame",
|
|
"description": "A lashed support frame used as the backbone for early shelters and simple buildables.",
|
|
"item_type": unreal.AgrarianItemType.STRUCTURE,
|
|
"unit_weight": 3.0,
|
|
"max_stack_size": 20,
|
|
},
|
|
{
|
|
"asset": "DA_Item_PrimitiveWallPanel",
|
|
"item_id": "primitive_wall_panel",
|
|
"display_name": "Primitive Wall Panel",
|
|
"description": "A crude wall panel built from wood and fiber for early shelter construction.",
|
|
"item_type": unreal.AgrarianItemType.STRUCTURE,
|
|
"unit_weight": 4.0,
|
|
"max_stack_size": 20,
|
|
},
|
|
{
|
|
"asset": "DA_Item_PrimitiveRoofPanel",
|
|
"item_id": "primitive_roof_panel",
|
|
"display_name": "Primitive Roof Panel",
|
|
"description": "A simple roof panel made from lashed branches, fiber, and cover material.",
|
|
"item_type": unreal.AgrarianItemType.STRUCTURE,
|
|
"unit_weight": 4.0,
|
|
"max_stack_size": 20,
|
|
},
|
|
{
|
|
"asset": "DA_Item_Campfire",
|
|
"item_id": "campfire",
|
|
"display_name": "Campfire",
|
|
"description": "A placeable fire ring for warmth, light, and early cooking.",
|
|
"item_type": unreal.AgrarianItemType.STRUCTURE,
|
|
"unit_weight": 12.0,
|
|
"max_stack_size": 5,
|
|
},
|
|
{
|
|
"asset": "DA_Item_PrimitiveShelter",
|
|
"item_id": "primitive_shelter",
|
|
"display_name": "Primitive Shelter",
|
|
"description": "A compact early shelter that provides basic weather protection.",
|
|
"item_type": unreal.AgrarianItemType.STRUCTURE,
|
|
"unit_weight": 25.0,
|
|
"max_stack_size": 1,
|
|
},
|
|
{
|
|
"asset": "DA_Item_BasicTool",
|
|
"item_id": "basic_tool",
|
|
"display_name": "Basic Tool",
|
|
"description": "A crude stone-and-wood tool for the first gather and build loops.",
|
|
"item_type": unreal.AgrarianItemType.TOOL,
|
|
"unit_weight": 1.2,
|
|
"max_stack_size": 10,
|
|
},
|
|
{
|
|
"asset": "DA_Item_Bandage",
|
|
"item_id": "bandage",
|
|
"display_name": "Bandage",
|
|
"description": "A simple treatment item made from hide and fiber.",
|
|
"item_type": unreal.AgrarianItemType.MEDICINE,
|
|
"unit_weight": 0.1,
|
|
"max_stack_size": 20,
|
|
},
|
|
]
|
|
|
|
|
|
def create_or_load_item_asset(asset_name):
|
|
path = f"{ITEM_FOLDER}/{asset_name}"
|
|
existing = unreal.EditorAssetLibrary.load_asset(path)
|
|
if existing:
|
|
return existing
|
|
|
|
factory = unreal.DataAssetFactory()
|
|
factory.set_editor_property("data_asset_class", unreal.AgrarianItemDefinitionAsset)
|
|
asset_tools = unreal.AssetToolsHelpers.get_asset_tools()
|
|
asset = asset_tools.create_asset(asset_name, ITEM_FOLDER, unreal.AgrarianItemDefinitionAsset, factory)
|
|
if not asset:
|
|
raise RuntimeError(f"Could not create {path}")
|
|
return asset
|
|
|
|
|
|
def apply_definition(asset, item):
|
|
definition = unreal.AgrarianItemDefinition()
|
|
definition.set_editor_property("item_id", item["item_id"])
|
|
definition.set_editor_property("display_name", item["display_name"])
|
|
definition.set_editor_property("description", item["description"])
|
|
definition.set_editor_property("item_type", item["item_type"])
|
|
definition.set_editor_property("unit_weight", item["unit_weight"])
|
|
definition.set_editor_property("max_stack_size", item["max_stack_size"])
|
|
asset.set_editor_property("definition", definition)
|
|
unreal.EditorAssetLibrary.save_loaded_asset(asset)
|
|
|
|
|
|
def main():
|
|
unreal.EditorAssetLibrary.make_directory(ITEM_FOLDER)
|
|
for item in ITEMS:
|
|
asset = create_or_load_item_asset(item["asset"])
|
|
apply_definition(asset, item)
|
|
unreal.log(f"Configured item definition: {item['item_id']} -> {ITEM_FOLDER}/{item['asset']}")
|
|
|
|
unreal.log("Agrarian item definition setup complete.")
|
|
|
|
|
|
main()
|