From a122ba0ef4af865d225adbe22a55b8001af04c61 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 6 Jan 2019 10:24:44 +0100 Subject: 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 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/network') 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()); -- cgit v1.2.3