From fe0b2d02bf07966ce4554578a1efd4b07bbb4734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Thu, 27 Jan 2022 22:22:58 +0100 Subject: [PATCH] Define control(bits) as "unset" for entities (#11995) --- doc/lua_api.txt | 25 ++++++++++++++----------- src/script/lua_api/l_object.cpp | 13 ++++++++----- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index e37567ec3..faaed55e1 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -6716,18 +6716,21 @@ object you are working with still exists. `aux1`, `sneak`, `dig`, `place`, `LMB`, `RMB`, and `zoom`. * The fields `LMB` and `RMB` are equal to `dig` and `place` respectively, and exist only to preserve backwards compatibility. + * Returns an empty table `{}` if the object is not a player. * `get_player_control_bits()`: returns integer with bit packed player pressed - keys. Bits: - * 0 - up - * 1 - down - * 2 - left - * 3 - right - * 4 - jump - * 5 - aux1 - * 6 - sneak - * 7 - dig - * 8 - place - * 9 - zoom + keys. + * Bits: + * 0 - up + * 1 - down + * 2 - left + * 3 - right + * 4 - jump + * 5 - aux1 + * 6 - sneak + * 7 - dig + * 8 - place + * 9 - zoom + * Returns `0` (no bits set) if the object is not a player. * `set_physics_override(override_table)` * `override_table` is a table with the following fields: * `speed`: multiplier to default walking speed value (default: `1`) diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index b177a9f7e..407b48db0 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -1367,11 +1367,12 @@ int ObjectRef::l_get_player_control(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); - if (player == nullptr) - return 0; - const PlayerControl &control = player->getPlayerControl(); lua_newtable(L); + if (player == nullptr) + return 1; + + const PlayerControl &control = player->getPlayerControl(); lua_pushboolean(L, control.direction_keys & (1 << 0)); lua_setfield(L, -2, "up"); lua_pushboolean(L, control.direction_keys & (1 << 1)); @@ -1406,8 +1407,10 @@ int ObjectRef::l_get_player_control_bits(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); RemotePlayer *player = getplayer(ref); - if (player == nullptr) - return 0; + if (player == nullptr) { + lua_pushinteger(L, 0); + return 1; + } const auto &c = player->getPlayerControl();