diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index 44f07e84a..532c3e3d2 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -519,14 +519,13 @@ tl::expected ParseAffixAlignment(std::string_view value return tl::make_unexpected("Unknown enum value"); } -void LoadItemDat() +} // namespace + +void LoadItemDatFromFile(DataFile &dataFile, std::string_view filename) { - const std::string_view filename = "txtdata\\items\\itemdat.tsv"; - DataFile dataFile = DataFile::loadOrDie(filename); dataFile.skipHeaderOrDie(filename); - AllItemsList.clear(); - AllItemsList.reserve(dataFile.numRecords()); + AllItemsList.reserve(AllItemsList.size() + dataFile.numRecords()); for (DataFileRecord record : dataFile) { RecordReader reader { record, filename }; ItemData &item = AllItemsList.emplace_back(); @@ -557,6 +556,19 @@ void LoadItemDat() AllItemsList.shrink_to_fit(); } +namespace { + +void LoadItemDat() +{ + const std::string_view filename = "txtdata\\items\\itemdat.tsv"; + DataFile dataFile = DataFile::loadOrDie(filename); + + AllItemsList.clear(); + LoadItemDatFromFile(dataFile, filename); + + LuaEvent("ItemDataLoaded"); +} + void ReadItemPower(RecordReader &reader, std::string_view fieldName, ItemPower &power) { reader.read(fieldName, power.type, ParseItemEffectType); diff --git a/Source/itemdat.h b/Source/itemdat.h index 620548e70..74b18f225 100644 --- a/Source/itemdat.h +++ b/Source/itemdat.h @@ -650,6 +650,7 @@ extern std::vector ItemSuffixes; extern DVL_API_FOR_TEST std::vector UniqueItems; extern ankerl::unordered_dense::map UniqueItemMappingIdsToIndices; +void LoadItemDatFromFile(DataFile &dataFile, std::string_view filename); void LoadUniqueItemDatFromFile(DataFile &dataFile, std::string_view filename, int32_t baseMappingId); void LoadItemData(); diff --git a/Source/lua/modules/items.cpp b/Source/lua/modules/items.cpp index 8ca9c6497..7486beabd 100644 --- a/Source/lua/modules/items.cpp +++ b/Source/lua/modules/items.cpp @@ -453,6 +453,12 @@ void RegisterItemSpecialEffectHfEnum(sol::state_view &lua) }); } +void AddItemDataFromTsv(const std::string_view path) +{ + DataFile dataFile = DataFile::loadOrDie(path); + LoadItemDatFromFile(dataFile, path); +} + void AddUniqueItemDataFromTsv(const std::string_view path, const int32_t baseMappingId) { DataFile dataFile = DataFile::loadOrDie(path); @@ -476,6 +482,7 @@ sol::table LuaItemModule(sol::state_view &lua) sol::table table = lua.create_table(); + LuaSetDocFn(table, "addItemDataFromTsv", "(path: string)", AddItemDataFromTsv); LuaSetDocFn(table, "addUniqueItemDataFromTsv", "(path: string, baseMappingId: number)", AddUniqueItemDataFromTsv); return table; diff --git a/assets/lua/devilutionx/events.lua b/assets/lua/devilutionx/events.lua index 8bf4afa35..5f2a15723 100644 --- a/assets/lua/devilutionx/events.lua +++ b/assets/lua/devilutionx/events.lua @@ -44,6 +44,10 @@ local events = { LoadModsComplete = CreateEvent(), __doc_LoadModsComplete = "Called after all mods have been loaded.", + ---Called after the item data TSV file has been loaded. + ItemDataLoaded = CreateEvent(), + __doc_ItemDataLoaded = "Called after the item data TSV file has been loaded.", + ---Called after the unique item data TSV file has been loaded. UniqueItemDataLoaded = CreateEvent(), __doc_UniqueItemDataLoaded = "Called after the unique item data TSV file has been loaded.",