From a122ba0ef4af865d225adbe22a55b8001af04c61 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 6 Jan 2019 10:24:44 +0100 Subject: [PATCH] Fix various bugs (Anticheat, Lua helpers) (#8013) * 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 | 11 +++++++---- src/script/common/c_content.cpp | 8 ++++---- src/script/lua_api/l_mainmenu.cpp | 6 ++---- src/script/lua_api/l_mapgen.cpp | 3 +-- src/script/lua_api/l_object.cpp | 3 +-- 5 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 329b38765..138cf3edb 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -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()); diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 033549475..7e2f6772f 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -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 &box) u8 i = 1; for (const aabb3f &it : box) { push_aabb3f(L, it); - lua_rawseti(L, -2, i); + lua_rawseti(L, -2, i++); } } diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index f0f56098f..145ff0970 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -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"); } diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index b8e52bd49..92ed4377e 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -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; } diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index f077d42a0..e673778e9 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -1681,8 +1681,7 @@ int ObjectRef::l_get_sky(lua_State *L) s16 i = 1; for (const std::string ¶m : 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;