aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSmallJoker <SmallJoker@users.noreply.github.com>2019-01-06 10:24:44 +0100
committerLoïc Blot <nerzhul@users.noreply.github.com>2019-01-06 10:24:44 +0100
commita122ba0ef4af865d225adbe22a55b8001af04c61 (patch)
tree9e8e6097621396e4bab22e5aa21a70900a502878 /src
parent70bf3439ab9f3cb826d76111552dcc38678fcf3d (diff)
downloadminetest-a122ba0ef4af865d225adbe22a55b8001af04c61.tar.gz
minetest-a122ba0ef4af865d225adbe22a55b8001af04c61.tar.bz2
minetest-a122ba0ef4af865d225adbe22a55b8001af04c61.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/network/serverpackethandler.cpp11
-rw-r--r--src/script/common/c_content.cpp8
-rw-r--r--src/script/lua_api/l_mainmenu.cpp6
-rw-r--r--src/script/lua_api/l_mapgen.cpp3
-rw-r--r--src/script/lua_api/l_object.cpp3
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<aabb3f> &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 &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;