X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fsandbox.qc;h=28017401af9033b3bf5d24f813f7870699d041de;hp=8c94ed3aafb9cdfc30188a5542cf6b3d240de5ab;hb=a86fa5a48ac75276db3da34fd3721678517c62fa;hpb=2b12c377c733222e225acab55481af8509e27982 diff --git a/qcsrc/server/mutators/sandbox.qc b/qcsrc/server/mutators/sandbox.qc index 8c94ed3aaf..28017401af 100644 --- a/qcsrc/server/mutators/sandbox.qc +++ b/qcsrc/server/mutators/sandbox.qc @@ -107,14 +107,19 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerPreThink) // if the player is close enough to their own object and facing it, they can grab it if(autocvar_sv_cheats) - return FALSE; // cheats already allow dragging all objects + return FALSE; // cheat dragging is used instead + float grab; crosshair_trace_plusvisibletriggers(self); - float candrag; + // grab is TRUE if the object can be picked up. While an object is being carried, the Drag() function + // must execute for it either way, otherwise it would cause bugs if it went out of the player's trace. + // This also makes sure that an object can only pe picked up if in range, but does not get dropped if it goes + // out of range while slinging it around. + if(trace_ent.classname == "object" && trace_ent.realowner == self && vlen(trace_ent.origin - self.origin) <= autocvar_g_sandbox_editor_distance_edit) - candrag = TRUE; // object can be picked up - if(Drag(trace_ent, candrag)) // execute dragging + grab = TRUE; // object can be picked up + if(Drag(trace_ent, grab)) // execute dragging if(autocvar_g_sandbox_info) print(strcat(self.netname, " grabbed an object at origin ", vtos(trace_ent.origin), "\n"));