X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclientiface.cpp;h=cc52d1fbc57e61d82f96caeb44083c76a83ccfdc;hb=49509d2f746b7a8d50e685cfd0e0b391676b9466;hp=3a6caf8004ece7754b8ea09364fbc9c232e80e4e;hpb=6036f865cba44fd26374a3a649370f51d5d4ff6c;p=minetest.git diff --git a/src/clientiface.cpp b/src/clientiface.cpp index 3a6caf800..cc52d1fbc 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -192,17 +192,24 @@ void RemoteClient::GetNextBlocks ( */ s32 new_nearest_unsent_d = -1; - // get view range and camera fov from the client + // Get view range and camera fov (radians) from the client s16 wanted_range = sao->getWantedRange() + 1; float camera_fov = sao->getFov(); - const s16 full_d_max = std::min(adjustDist(m_max_send_distance, camera_fov), wanted_range); - const s16 d_opt = std::min(adjustDist(m_block_optimize_distance, camera_fov), wanted_range); + // Distrust client-sent FOV and get server-set player object property + // zoom FOV (degrees) as a check to avoid hacked clients using FOV to load + // distant world. + float prop_zoom_fov = sao->getZoomFOV() * core::DEGTORAD; + + const s16 full_d_max = std::min(adjustDist(m_max_send_distance, prop_zoom_fov), + wanted_range); + const s16 d_opt = std::min(adjustDist(m_block_optimize_distance, prop_zoom_fov), + wanted_range); const s16 d_blocks_in_sight = full_d_max * BS * MAP_BLOCKSIZE; - //infostream << "Fov from client " << camera_fov << " full_d_max " << full_d_max << std::endl; s16 d_max = full_d_max; - s16 d_max_gen = std::min(adjustDist(m_max_gen_distance, camera_fov), wanted_range); + s16 d_max_gen = std::min(adjustDist(m_max_gen_distance, prop_zoom_fov), + wanted_range); // Don't loop very much at a time, adjust with distance, // do more work per RTT with greater distances.