From 5fd095851bcaf4dfc194ed95cdb6f28faf9acb54 Mon Sep 17 00:00:00 2001 From: Martin Taibr Date: Sat, 24 Dec 2016 04:11:30 +0100 Subject: [PATCH] limit max_shot_distance to 230000 --- qcsrc/server/teamplay.qc | 6 +++++- qcsrc/server/weapons/tracing.qc | 5 +---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 0480eb070..2cab9b8ac 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -52,7 +52,11 @@ void InitGameplayMode() get_mi_min_max(1); world.mins = mi_min; world.maxs = mi_max; - max_shot_distance = vlen(world.maxs - world.mins); + // currently, NetRadiant's limit is 131072 qu for each side + // distance from one corner of a 131072qu cube to the opposite corner is approx. 227023 qu + // set the distance according to map size but don't go over the limit to avoid issues with float precision + // in case somebody makes extremely large maps + max_shot_distance = min(230000, vlen(world.maxs - world.mins)); MapInfo_LoadMapSettings(mapname); serverflags &= ~SERVERFLAG_TEAMPLAY; diff --git a/qcsrc/server/weapons/tracing.qc b/qcsrc/server/weapons/tracing.qc index b85013d9c..fd78c9120 100644 --- a/qcsrc/server/weapons/tracing.qc +++ b/qcsrc/server/weapons/tracing.qc @@ -399,12 +399,9 @@ void fireBullet(entity this, vector start, vector dir, float spread, float max_s start = trace_endpos; entity hit = trace_ent; + // traced up to max_shot_distance and didn't hit anything at all if (trace_fraction == 1.0) - { - // should not happen if max_shot_distance is correctly determined by map size - LOG_WARN("traced up to max_shot_distance and didn't hit anything at all"); break; - } // When hitting sky, stop. if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY) -- 2.39.2