Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/lua/openstarbound/root.md4
-rw-r--r--source/game/StarItemDatabase.cpp12
-rw-r--r--source/game/StarItemDatabase.hpp6
-rw-r--r--source/game/scripting/StarRootLuaBindings.cpp4
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))