diff --git a/res/layouts/pages/content.xml.lua b/res/layouts/pages/content.xml.lua index c682182b..d7480e23 100644 --- a/res/layouts/pages/content.xml.lua +++ b/res/layouts/pages/content.xml.lua @@ -6,8 +6,9 @@ add_packs = {} rem_packs = {} function apply() - core.reconfig_packs(add_packs, rem_packs) - menu:back() + if not core.reconfig_packs(add_packs, rem_packs) then + menu:back() + end end function refresh_changes() diff --git a/src/data/dynamic.cpp b/src/data/dynamic.cpp index 582f15e4..720c5b8b 100644 --- a/src/data/dynamic.cpp +++ b/src/data/dynamic.cpp @@ -335,6 +335,10 @@ Map& Map::put(std::string key, std::unique_ptr value) { return *this; } +void Map::remove(const std::string& key) { + values.erase(key); +} + List& Map::putList(std::string key) { List* arr = new List(); put(key, arr); diff --git a/src/data/dynamic.h b/src/data/dynamic.h index a47cd54f..6abf9f4c 100644 --- a/src/data/dynamic.h +++ b/src/data/dynamic.h @@ -118,6 +118,8 @@ namespace dynamic { Map& put(std::string key, bool value); Map& put(std::string key, std::unique_ptr value); + void remove(const std::string& key); + List& putList(std::string key); Map& putMap(std::string key); diff --git a/src/items/Inventory.cpp b/src/items/Inventory.cpp index 1e682e11..b3dd5f2b 100644 --- a/src/items/Inventory.cpp +++ b/src/items/Inventory.cpp @@ -88,7 +88,11 @@ void Inventory::convert(dynamic::Map* data, const ContentLUT* lut) { for (size_t i = 0; i < slotsarr->size(); i++) { auto item = slotsarr->map(i); itemid_t id = item->getInt("id", ITEM_EMPTY); - item->put("id", lut->getItemId(id)); + itemid_t replacement = lut->getItemId(id); + item->put("id", replacement); + if (replacement == 0 && item->has("count")) { + item->remove("count"); + } } } diff --git a/src/logic/scripting/lua/libcore.cpp b/src/logic/scripting/lua/libcore.cpp index 178b50f4..a83c3679 100644 --- a/src/logic/scripting/lua/libcore.cpp +++ b/src/logic/scripting/lua/libcore.cpp @@ -91,7 +91,8 @@ static int l_reconfig_packs(lua_State* L) { } auto controller = scripting::engine->getController(); controller->reconfigPacks(scripting::controller, addPacks, remPacks); - return 0; + lua_pushboolean(L, scripting::controller != nullptr); + return 1; } static int l_get_bindings(lua_State* L) {