From: Mircea Kitsune Date: Sun, 6 Nov 2011 11:45:51 +0000 (+0200) Subject: Move non-cheat grabbing back into cheatfrae, so all code is in one place. Also remove... X-Git-Tag: xonotic-v0.6.0~35^2~18^2~15 X-Git-Url: http://de.git.xonotic.org/?a=commitdiff_plain;h=3ee2789202fff017f74852b4e58b7eca5025a71a;p=xonotic%2Fxonotic-data.pk3dir.git Move non-cheat grabbing back into cheatfrae, so all code is in one place. Also remove the sandbox dragging code --- diff --git a/qcsrc/server/cheats.qc b/qcsrc/server/cheats.qc index ece6fa6cd..9d5da0d41 100644 --- a/qcsrc/server/cheats.qc +++ b/qcsrc/server/cheats.qc @@ -692,18 +692,51 @@ float CheatFrame() switch(0) { default: - if(self.BUTTON_DRAG && !autocvar_g_grab) - { - // consider dragging a cheat only if g_grab is disabled - IS_CHEAT(0, 0, CHRAME_DRAG); - } if(autocvar_sv_cheats) { - // only use cheat dragging if cheats are enabled + // use cheat dragging if cheats are enabled + IS_CHEAT(0, 0, CHRAME_DRAG); crosshair_trace_plusvisibletriggers(self); - if(Drag(trace_ent, TRUE) && !autocvar_g_grab) + if(Drag(trace_ent, TRUE)) DID_CHEAT(); } + else if(autocvar_g_grab) + { + // drag 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. + + float drag; + makevectors(self.v_angle); + WarpZone_TraceLine(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * autocvar_g_sandbox_editor_distance_edit, MOVE_NORMAL, self); + switch(trace_ent.grab) + { + case 0: // can't grab + break; + case 1: // owner can grab + if(trace_ent.owner == self || trace_ent.realowner == self) + drag = TRUE; + break; + case 2: // owner and team mates can grab + if(trace_ent.owner == self || trace_ent.realowner == self) + drag = TRUE; + if(!IsDifferentTeam(trace_ent.owner, self) || !IsDifferentTeam(trace_ent.realowner, self)) + drag = TRUE; + break; + case 3: // anyone can grab + drag = TRUE; + break; + default: + break; + } + Drag(trace_ent, drag); // execute dragging + } + else if(self.BUTTON_DRAG) + { + // consider dragging a cheat if g_grab is disabled + IS_CHEAT(0, 0, CHRAME_DRAG); + } break; } @@ -841,6 +874,8 @@ void Drag_Finish(entity dragger) float Drag_IsDraggable(entity draggee) { // TODO add more checks for bad stuff here + if(draggee == world) + return FALSE; if(draggee.classname == "func_bobbing") return FALSE; if(draggee.classname == "door") // FIXME find out why these must be excluded, or work around the problem (trying to drag these causes like 4 fps) diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 1881fcb3a..7445c6b38 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -2792,43 +2792,6 @@ void PlayerPreThink (void) PrintWelcomeMessage(); - // if the player is close enough to a dragable entity, they can grab it - if(autocvar_g_grab && !autocvar_sv_cheats) // cheat dragging is used instead - { - // drag 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. - - float drag; - makevectors(self.v_angle); - WarpZone_TraceLine(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * autocvar_g_sandbox_editor_distance_edit, MOVE_NORMAL, self); - if(trace_ent != world) - { - switch(trace_ent.grab) - { - case 0: // can't grab - break; - case 1: // owner can grab - if(trace_ent.owner == self || trace_ent.realowner == self) - drag = TRUE; - break; - case 2: // owner and team mates can grab - if(trace_ent.owner == self || trace_ent.realowner == self) - drag = TRUE; - if(!IsDifferentTeam(trace_ent.owner, self) || !IsDifferentTeam(trace_ent.realowner, self)) - drag = TRUE; - break; - case 3: // anyone can grab - drag = TRUE; - break; - default: - break; - } - } - Drag(trace_ent, drag); // execute dragging - } - if(self.classname == "player") { // if(self.netname == "Wazat") // bprint(self.classname, "\n"); diff --git a/qcsrc/server/mutators/sandbox.qc b/qcsrc/server/mutators/sandbox.qc index 73436eb3f..2c4b27034 100644 --- a/qcsrc/server/mutators/sandbox.qc +++ b/qcsrc/server/mutators/sandbox.qc @@ -716,31 +716,6 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerCommand) return FALSE; } -MUTATOR_HOOKFUNCTION(sandbox_PlayerPreThink) -{ - // if the player is close enough to their object, they can drag it - - if(autocvar_sv_cheats) - return FALSE; // cheat dragging is used instead - - // 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. - - entity e; - float grab; - - e = sandbox_ObjectEdit_Get(TRUE); - if(e != world && vlen(e.origin - self.origin) <= autocvar_g_sandbox_editor_distance_edit) - grab = TRUE; - - if(Drag(e, grab)) // execute dragging - return TRUE; - - return FALSE; -} - float autosave_time; MUTATOR_HOOKFUNCTION(sandbox_StartFrame) { @@ -759,7 +734,6 @@ MUTATOR_DEFINITION(sandbox) { MUTATOR_HOOK(SV_ParseClientCommand, sandbox_PlayerCommand, CBC_ORDER_ANY); MUTATOR_HOOK(SV_StartFrame, sandbox_StartFrame, CBC_ORDER_ANY); - MUTATOR_HOOK(PlayerPreThink, sandbox_PlayerPreThink, CBC_ORDER_ANY); MUTATOR_ONADD {