diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-03-10 09:38:46 +0100 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-03-10 09:38:46 +0100 |
commit | 1309066be8bc9e7cd688b8f84f8cfa761bea9ebe (patch) | |
tree | d02114be6438fab3e68513d941ca5af101acf34c /src/script/lua_api | |
parent | bc79c2344e226bdf833382b5ce51c47ddd536bf2 (diff) | |
parent | 16696823242ca3b82d932542899e77894238fa2c (diff) | |
download | dragonfireclient-1309066be8bc9e7cd688b8f84f8cfa761bea9ebe.tar.xz |
Merge branch 'master' of https://github.com/EliasFleckenstein03/dragonfireclient
Diffstat (limited to 'src/script/lua_api')
-rw-r--r-- | src/script/lua_api/l_client.cpp | 46 | ||||
-rw-r--r-- | src/script/lua_api/l_client.h | 6 |
2 files changed, 51 insertions, 1 deletions
diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp index dac2febae..484af2ec3 100644 --- a/src/script/lua_api/l_client.cpp +++ b/src/script/lua_api/l_client.cpp @@ -440,7 +440,7 @@ int ModApiClient::l_place_node(lua_State *L) pointed.node_abovesurface = pos; pointed.node_undersurface = pos; NodeMetadata *meta = map.getNodeMetadata(pos); - g_game->nodePlacement(selected_def, selected_item, pos, pos, pointed, meta); + g_game->nodePlacement(selected_def, selected_item, pos, pos, pointed, meta, true); return 0; } @@ -621,6 +621,48 @@ int ModApiClient::l_interact(lua_State *L) return 1; } +StringMap *table_to_stringmap(lua_State *L, int index) +{ + StringMap *m = new StringMap; + + lua_pushvalue(L, index); + lua_pushnil(L); + + while (lua_next(L, -2)) { + lua_pushvalue(L, -2); + std::basic_string<char> key = lua_tostring(L, -1); + std::basic_string<char> value = lua_tostring(L, -2); + (*m)[key] = value; + lua_pop(L, 2); + } + + lua_pop(L, 1); + + return m; +} + +// send_inventory_fields(formname, fields) +// Only works if the inventory form was opened beforehand. +int ModApiClient::l_send_inventory_fields(lua_State *L) +{ + std::string formname = luaL_checkstring(L, 1); + StringMap *fields = table_to_stringmap(L, 2); + + getClient(L)->sendInventoryFields(formname, *fields); + return 0; +} + +// send_nodemeta_fields(position, formname, fields) +int ModApiClient::l_send_nodemeta_fields(lua_State *L) +{ + v3s16 pos = check_v3s16(L, 1); + std::string formname = luaL_checkstring(L, 2); + StringMap *m = table_to_stringmap(L, 3); + + getClient(L)->sendNodemetaFields(pos, formname, *m); + return 0; +} + void ModApiClient::Initialize(lua_State *L, int top) { API_FCT(get_current_modname); @@ -657,4 +699,6 @@ void ModApiClient::Initialize(lua_State *L, int top) API_FCT(get_objects_inside_radius); API_FCT(make_screenshot); API_FCT(interact); + API_FCT(send_inventory_fields); + API_FCT(send_nodemeta_fields); } diff --git a/src/script/lua_api/l_client.h b/src/script/lua_api/l_client.h index 03a42e022..caf21f78e 100644 --- a/src/script/lua_api/l_client.h +++ b/src/script/lua_api/l_client.h @@ -132,6 +132,12 @@ private: // interact(action, pointed_thing) static int l_interact(lua_State *L); + // send_inventory_fields(formname, fields) + static int l_send_inventory_fields(lua_State *L); + + // send_nodemeta_fields(position, formname, fields) + static int l_send_nodemeta_fields(lua_State *L); + public: static void Initialize(lua_State *L, int top); }; |