Fix various bugs (Anticheat, Lua helpers) (#8013)
authorSmallJoker <SmallJoker@users.noreply.github.com>
Sun, 6 Jan 2019 09:24:44 +0000 (10:24 +0100)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Sun, 6 Jan 2019 09:24:44 +0000 (10:24 +0100)
* Fix various bugs (Anticheat, Lua helpers)

Anticheat: Use camera position instead of player position for shoot line calculations
Lua helpers: Increase 'i' to not overwrite earlier added table values

* Remove lag compensation

* * 1.5 for larger selection boxes

src/network/serverpackethandler.cpp
src/script/common/c_content.cpp
src/script/lua_api/l_mainmenu.cpp
src/script/lua_api/l_mapgen.cpp
src/script/lua_api/l_object.cpp

index 329b387659685d02a3c6f5de832903c96e6b283c..138cf3edbdd0d690a396bcc86f1437e99ac9b059 100644 (file)
@@ -627,7 +627,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
                // Check for out-of-range interaction
                if (remote->type == InventoryLocation::NODEMETA) {
                        v3f node_pos   = intToFloat(remote->p, BS);
-                       v3f player_pos = player->getPlayerSAO()->getBasePosition();
+                       v3f player_pos = player->getPlayerSAO()->getEyePosition();
                        f32 d = player_pos.getDistanceFrom(node_pos);
                        if (!checkInteractDistance(player, d, "inventory"))
                                return;
@@ -969,8 +969,9 @@ bool Server::checkInteractDistance(RemotePlayer *player, const f32 d, const std:
        else if (max_d < 0)
                max_d = BS * 4.0f;
 
-       // cube diagonal: sqrt(3) = 1.732
-       if (d > max_d * 1.732) {
+       // Cube diagonal * 1.5 for maximal supported node extents:
+       // sqrt(3) * 1.5 ≅ 2.6
+       if (d > max_d + 2.6f * BS) {
                actionstream << "Player " << player->getName()
                                << " tried to access " << what
                                << " from too far: "
@@ -1109,7 +1110,9 @@ void Server::handleCommand_Interact(NetworkPacket* pkt)
 
        if ((action == 0 || action == 2 || action == 3 || action == 4) &&
                        enable_anticheat && !isSingleplayer()) {
-               float d = player_pos.getDistanceFrom(pointed_pos_under);
+               float d = playersao->getEyePosition()
+                       .getDistanceFrom(pointed_pos_under);
+
                if (!checkInteractDistance(player, d, pointed.dump())) {
                        // Re-send block to revert change on client-side
                        RemoteClient *client = getClient(pkt->getPeerId());
index 033549475637bb776871a4a616f9c985ca31380a..7e2f6772f0e0e9561230a4e4905be2bab232c830 100644 (file)
@@ -348,7 +348,7 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
        u16 i = 1;
        for (const std::string &texture : prop->textures) {
                lua_pushlstring(L, texture.c_str(), texture.size());
-               lua_rawseti(L, -2, i);
+               lua_rawseti(L, -2, i++);
        }
        lua_setfield(L, -2, "textures");
 
@@ -356,7 +356,7 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
        i = 1;
        for (const video::SColor &color : prop->colors) {
                push_ARGB8(L, color);
-               lua_rawseti(L, -2, i);
+               lua_rawseti(L, -2, i++);
        }
        lua_setfield(L, -2, "colors");
 
@@ -838,7 +838,7 @@ void push_content_features(lua_State *L, const ContentFeatures &c)
        u16 i = 1;
        for (const std::string &it : c.connects_to) {
                lua_pushlstring(L, it.c_str(), it.size());
-               lua_rawseti(L, -2, i);
+               lua_rawseti(L, -2, i++);
        }
        lua_setfield(L, -2, "connects_to");
 
@@ -961,7 +961,7 @@ void push_box(lua_State *L, const std::vector<aabb3f> &box)
        u8 i = 1;
        for (const aabb3f &it : box) {
                push_aabb3f(L, it);
-               lua_rawseti(L, -2, i);
+               lua_rawseti(L, -2, i++);
        }
 }
 
index f0f56098f9ab1c76780a022a375a992e0faec322..145ff0970c0f119d96ce5dd0a5b32c9406f1e662 100644 (file)
@@ -532,8 +532,7 @@ int ModApiMainMenu::l_get_content_info(lua_State *L)
                int i = 1;
                for (const auto &dep : spec.depends) {
                        lua_pushstring(L, dep.c_str());
-                       lua_rawseti(L, -2, i);
-                       i++;
+                       lua_rawseti(L, -2, i++);
                }
                lua_setfield(L, -2, "depends");
 
@@ -542,8 +541,7 @@ int ModApiMainMenu::l_get_content_info(lua_State *L)
                i = 1;
                for (const auto &dep : spec.optdepends) {
                        lua_pushstring(L, dep.c_str());
-                       lua_rawseti(L, -2, i);
-                       i++;
+                       lua_rawseti(L, -2, i++);
                }
                lua_setfield(L, -2, "optional_depends");
        }
index b8e52bd492e4c297affb4e10ac22f58ce6417025..92ed4377ea5dac20ff496afe31ab017909ef630c 100644 (file)
@@ -1042,8 +1042,7 @@ int ModApiMapgen::l_get_gen_notify(lua_State *L)
        int i = 1;
        for (u32 gen_notify_on_deco_id : emerge->gen_notify_on_deco_ids) {
                lua_pushnumber(L, gen_notify_on_deco_id);
-               lua_rawseti(L, -2, i);
-               i++;
+               lua_rawseti(L, -2, i++);
        }
        return 2;
 }
index f077d42a06166f1147921b784d253bc58b0ec968..e673778e9d711790174703e65adf4e094b3a5565 100644 (file)
@@ -1681,8 +1681,7 @@ int ObjectRef::l_get_sky(lua_State *L)
        s16 i = 1;
        for (const std::string &param : params) {
                lua_pushlstring(L, param.c_str(), param.size());
-               lua_rawseti(L, -2, i);
-               i++;
+               lua_rawseti(L, -2, i++);
        }
        lua_pushboolean(L, clouds);
        return 4;