diff --git a/doc/ru/scripting/builtins/libhud.md b/doc/ru/scripting/builtins/libhud.md index 1e904cc56..5c1696ef7 100644 --- a/doc/ru/scripting/builtins/libhud.md +++ b/doc/ru/scripting/builtins/libhud.md @@ -55,6 +55,9 @@ hud.close(layoutid: string) -- Дает ID инвентаря открытого блока или 0. hud.get_block_inventory() -> int +-- Дает ID второго открытого инвентаря (блок, виртуальный инвентарь...) или 0. +hud.get_second_inventory() -> int + -- Дает ID игрока, к которому привязан пользовательский интерфейс. hud.get_player() -> int diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index 6f3593610..c5c1352cb 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -725,6 +725,16 @@ std::shared_ptr Hud::getBlockInventory() { return blockUI->getInventory(); } +std::shared_ptr Hud::getSecondInventory() { + if (blockUI) { + return blockUI->getInventory(); + } + if (secondInvView) { + return secondInvView->getInventory(); + } + return nullptr; +} + bool Hud::isContentAccess() const { return showContentPanel; } diff --git a/src/frontend/hud.hpp b/src/frontend/hud.hpp index 4e3e4f3dc..dc0a35666 100644 --- a/src/frontend/hud.hpp +++ b/src/frontend/hud.hpp @@ -203,6 +203,8 @@ public: std::shared_ptr getBlockInventory(); + std::shared_ptr getSecondInventory(); + bool isContentAccess() const; void setContentAccess(bool flag); diff --git a/src/logic/scripting/lua/libs/libhud.cpp b/src/logic/scripting/lua/libs/libhud.cpp index 7ab5d33c0..a65acb170 100644 --- a/src/logic/scripting/lua/libs/libhud.cpp +++ b/src/logic/scripting/lua/libs/libhud.cpp @@ -140,6 +140,15 @@ static int l_get_block_inventory(lua::State* L) { } } +static int l_get_second_inventory(lua::State* L) { + auto inventory = hud->getSecondInventory(); + if (inventory == nullptr) { + return lua::pushinteger(L, 0); + } else { + return lua::pushinteger(L, inventory->getId()); + } +} + static int l_get_player(lua::State* L) { auto player = hud->getPlayer(); return lua::pushinteger(L, player->getId()); @@ -202,6 +211,7 @@ const luaL_Reg hudlib[] = { {"open_permanent", wrap_hud}, {"show_overlay", wrap_hud}, {"get_block_inventory", wrap_hud}, + {"get_second_inventory", wrap_hud}, {"close", wrap_hud}, {"pause", wrap_hud}, {"resume", wrap_hud},