diff options
-rw-r--r-- | doc/lua/openstarbound/root.md | 4 | ||||
-rw-r--r-- | source/game/StarItemDatabase.cpp | 12 | ||||
-rw-r--r-- | source/game/StarItemDatabase.hpp | 6 | ||||
-rw-r--r-- | source/game/scripting/StarRootLuaBindings.cpp | 4 |
4 files changed, 24 insertions, 2 deletions
diff --git a/doc/lua/openstarbound/root.md b/doc/lua/openstarbound/root.md index c439c59..e87a0fe 100644 --- a/doc/lua/openstarbound/root.md +++ b/doc/lua/openstarbound/root.md @@ -101,4 +101,8 @@ Sets a configuration value in `/storage/starbound.config` by path. Returns all recipes. +#### `String` root.itemFile(`String` itemName) + +Returns the asset file path for the specified item. + --- diff --git a/source/game/StarItemDatabase.cpp b/source/game/StarItemDatabase.cpp index b3eb16b..b228eed 100644 --- a/source/game/StarItemDatabase.cpp +++ b/source/game/StarItemDatabase.cpp @@ -213,6 +213,14 @@ ItemDatabase::ItemConfig ItemDatabase::itemConfig(String const& itemName, Json p return itemConfig; } +Maybe<String> ItemDatabase::itemFile(String const& itemName) const { + if (!hasItem(itemName)) { + return {}; + } + auto const& data = itemData(itemName); + return data.directory + "/" + data.filename; +} + ItemPtr ItemDatabase::itemShared(ItemDescriptor descriptor, Maybe<float> level, Maybe<uint64_t> seed) const { if (!descriptor) return {}; @@ -563,6 +571,7 @@ void ItemDatabase::addItemSet(ItemType type, String const& extension) { data.itemTags = config.opt("itemTags").apply(jsonToStringSet).value(); data.agingScripts = config.opt("itemAgingScripts").apply(jsonToStringList).value(); data.directory = AssetPath::directory(file); + data.filename = AssetPath::filename(file); data.agingScripts = data.agingScripts.transformed(bind(&AssetPath::relativeTo, data.directory, _1)); } catch (std::exception const& e) { @@ -586,6 +595,7 @@ void ItemDatabase::addObjectDropItem(String const& objectPath, Json const& objec data.itemTags = objectConfig.opt("itemTags").apply(jsonToStringSet).value(); data.agingScripts = objectConfig.opt("itemAgingScripts").apply(jsonToStringList).value(); data.directory = AssetPath::directory(objectPath); + data.filename = AssetPath::filename(objectPath); JsonObject customConfig = objectConfig.toObject(); if (!customConfig.contains("inventoryIcon")) { customConfig["inventoryIcon"] = assets->json("/objects/defaultParameters.config:missingIcon"); @@ -757,4 +767,4 @@ void ItemDatabase::addCodexes() { } } -} +}
\ No newline at end of file diff --git a/source/game/StarItemDatabase.hpp b/source/game/StarItemDatabase.hpp index d5b86fc..8268ace 100644 --- a/source/game/StarItemDatabase.hpp +++ b/source/game/StarItemDatabase.hpp @@ -110,6 +110,9 @@ public: // of the unique item data or may be ignored. ItemConfig itemConfig(String const& itemName, Json parameters, Maybe<float> level = {}, Maybe<uint64_t> seed = {}) const; + // Returns the path to the item's json file in the assets. + Maybe<String> itemFile(String const& itemName) const; + // Generates the config for the given item descriptor and then loads the item // from the appropriate factory. If there is a problem instantiating the // item, will return a default item instead. If item is passed a null @@ -156,6 +159,7 @@ private: Maybe<String> assetsConfig; JsonObject customConfig; String directory; + String filename; }; static ItemPtr createItem(ItemType type, ItemConfig const& config); @@ -212,4 +216,4 @@ bool ItemDatabase::diskLoad(Json const& diskStore, shared_ptr<ItemT>& itemPtr) c return false; } } -} +}
\ No newline at end of file diff --git a/source/game/scripting/StarRootLuaBindings.cpp b/source/game/scripting/StarRootLuaBindings.cpp index d87b423..b7c9a74 100644 --- a/source/game/scripting/StarRootLuaBindings.cpp +++ b/source/game/scripting/StarRootLuaBindings.cpp @@ -116,6 +116,10 @@ LuaCallbacks LuaBindings::makeRootCallbacks() { return table; }); + callbacks.registerCallback("itemFile", [root](LuaEngine& engine, String const& itemName) -> Maybe<String> { + return root->itemDatabase()->itemFile(itemName); + }); + callbacks.registerCallback("materialConfig", [root](String const& materialName) -> Json { auto materialId = root->materialDatabase()->materialId(materialName); if (auto path = root->materialDatabase()->materialPath(materialId)) |