[nexuiz-commits] r8552 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Jan 25 12:04:16 EST 2010
Author: div0
Date: 2010-01-25 12:04:09 -0500 (Mon, 25 Jan 2010)
New Revision: 8552
Modified:
trunk/data/qcsrc/server/cheats.qc
trunk/data/qcsrc/server/cheats.qh
trunk/data/qcsrc/server/cl_client.qc
Log:
move box dragging to cheats.qc too
Modified: trunk/data/qcsrc/server/cheats.qc
===================================================================
--- trunk/data/qcsrc/server/cheats.qc 2010-01-25 17:03:53 UTC (rev 8551)
+++ trunk/data/qcsrc/server/cheats.qc 2010-01-25 17:04:09 UTC (rev 8552)
@@ -12,7 +12,9 @@
#define CHIMPULSE_TELEPORT 143
#define CHIMPULSE_R00T 148
-float CheatsAllowed(float i, float argc) // the cheat gets passed as argument for possible future ACL checking
+#define CHRAME_DRAG 1
+
+float CheatsAllowed(float i, float argc, float fr) // the cheat gets passed as argument for possible future ACL checking
{
if(i == CHIMPULSE_CLONE_MOVING || i == CHIMPULSE_CLONE_STANDING)
if(self.lip < sv_clones)
@@ -28,7 +30,7 @@
float CheatImpulse(float i)
{
- if not(CheatsAllowed(i, 0))
+ if not(CheatsAllowed(i, 0, 0))
return 0;
switch(i)
{
@@ -208,7 +210,7 @@
float CheatCommand(float argc)
{
- if not(CheatsAllowed(0, argc))
+ if not(CheatsAllowed(0, argc, 0))
return 0;
string cmd;
cmd = argv(0);
@@ -526,3 +528,251 @@
}
return 0;
}
+
+void Drag_Begin(entity dragger, entity draggee, vector touchpoint);
+void Drag_Finish(entity dragger);
+float Drag_IsDraggable(entity draggee);
+float Drag_MayChangeAngles(entity draggee);
+void Drag_MoveForward(entity dragger);
+void Drag_SetSpeed(entity dragger, float s);
+void Drag_MoveBackward(entity dragger);
+void Drag_Update(entity dragger);
+float Drag_CanDrag(entity dragger);
+float Drag_IsDragging(entity dragger);
+void Drag_MoveDrag(entity from, entity to);
+.entity dragentity;
+
+float CheatFrame()
+{
+ float cheating;
+ cheating = 0;
+
+ if(CheatsAllowed(0, 0, CHRAME_DRAG))
+ if(Drag_CanDrag(self))
+ if(self.BUTTON_DRAG)
+ if(!self.dragentity)
+ if(self.cursor_trace_ent)
+ if(Drag_IsDraggable(self.cursor_trace_ent))
+ {
+ if(self.cursor_trace_ent.draggedby)
+ Drag_Finish(self.cursor_trace_ent.draggedby);
+ if(self.cursor_trace_ent.tag_entity)
+ detach_sameorigin(self.cursor_trace_ent);
+ Drag_Begin(self, self.cursor_trace_ent, self.cursor_trace_endpos);
+ ++cheating;
+ }
+ if(Drag_IsDragging(self))
+ {
+ if(self.BUTTON_DRAG)
+ {
+ if(self.impulse == 10 || self.impulse == 15 || self.impulse == 18)
+ {
+ Drag_MoveForward(self);
+ self.impulse = 0;
+ }
+ else if(self.impulse == 12 || self.impulse == 16 || self.impulse == 19)
+ {
+ Drag_MoveBackward(self);
+ self.impulse = 0;
+ }
+ else if(self.impulse >= 1 && self.impulse <= 9)
+ {
+ Drag_SetSpeed(self, self.impulse - 1);
+ }
+ else if(self.impulse == 14)
+ {
+ Drag_SetSpeed(self, 9);
+ }
+
+ if(frametime)
+ Drag_Update(self);
+ }
+ else
+ {
+ Drag_Finish(self);
+ }
+ }
+
+ return cheating;
+}
+
+
+
+
+
+// ENTITY DRAGGING
+
+// on dragger:
+.float draggravity;
+.float dragspeed; // speed of mouse wheel action
+.float dragdistance; // distance of dragentity's draglocalvector from view_ofs
+.vector draglocalvector; // local attachment vector of the dragentity
+.float draglocalangle;
+// on draggee:
+.entity draggedby;
+.float dragmovetype;
+void Drag_Begin(entity dragger, entity draggee, vector touchpoint)
+{
+ float tagscale;
+
+ draggee.dragmovetype = draggee.movetype;
+ draggee.draggravity = draggee.gravity;
+ draggee.movetype = MOVETYPE_WALK;
+ draggee.gravity = 0.00001;
+ draggee.flags &~= FL_ONGROUND;
+ draggee.draggedby = dragger;
+
+ dragger.dragentity = draggee;
+
+ dragger.dragdistance = vlen(touchpoint - dragger.origin - dragger.view_ofs);
+ dragger.draglocalangle = draggee.angles_y - dragger.v_angle_y;
+ touchpoint = touchpoint - gettaginfo(draggee, 0);
+ tagscale = pow(vlen(v_forward), -2);
+ dragger.draglocalvector_x = touchpoint * v_forward * tagscale;
+ dragger.draglocalvector_y = touchpoint * v_right * tagscale;
+ dragger.draglocalvector_z = touchpoint * v_up * tagscale;
+
+ dragger.dragspeed = 64;
+}
+
+void Drag_Finish(entity dragger)
+{
+ entity draggee;
+ draggee = dragger.dragentity;
+ if(dragger)
+ dragger.dragentity = world;
+ draggee.draggedby = world;
+ draggee.movetype = draggee.dragmovetype;
+ draggee.gravity = draggee.draggravity;
+
+ switch(draggee.movetype)
+ {
+ case MOVETYPE_TOSS:
+ case MOVETYPE_WALK:
+ case MOVETYPE_STEP:
+ case MOVETYPE_FLYMISSILE:
+ case MOVETYPE_BOUNCE:
+ case MOVETYPE_BOUNCEMISSILE:
+ case MOVETYPE_PHYSICS:
+ break;
+ default:
+ draggee.velocity = '0 0 0';
+ break;
+ }
+
+ if((draggee.flags & FL_ITEM) && (vlen(draggee.velocity) < 32))
+ {
+ draggee.velocity = '0 0 0';
+ draggee.flags |= FL_ONGROUND; // floating items are FUN
+ }
+}
+
+float Drag_IsDraggable(entity draggee)
+{
+ // TODO add more checks for bad stuff here
+ 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)
+ return FALSE;
+ if(draggee.classname == "plat")
+ return FALSE;
+ if(draggee.classname == "func_button")
+ return FALSE;
+ if(draggee.model == "")
+ return FALSE;
+ if(draggee.classname == "spectator")
+ return FALSE;
+ if(draggee.classname == "observer")
+ return FALSE;
+ if(draggee.classname == "exteriorweaponentity")
+ return FALSE;
+
+ return TRUE;
+}
+
+float Drag_MayChangeAngles(entity draggee)
+{
+ // TODO add more checks for bad stuff here
+ if(substring(draggee.model, 0, 1) == "*")
+ return FALSE;
+ return TRUE;
+}
+
+void Drag_MoveForward(entity dragger)
+{
+ dragger.dragdistance += dragger.dragspeed;
+}
+
+void Drag_SetSpeed(entity dragger, float s)
+{
+ dragger.dragspeed = pow(2, s);
+}
+
+void Drag_MoveBackward(entity dragger)
+{
+ dragger.dragdistance = max(0, dragger.dragdistance - dragger.dragspeed);
+}
+
+void Drag_Update(entity dragger)
+{
+ vector curorigin, neworigin, goodvelocity;
+ float f;
+ entity draggee;
+
+ draggee = dragger.dragentity;
+ draggee.flags &~= FL_ONGROUND;
+
+ curorigin = gettaginfo(draggee, 0);
+ curorigin = curorigin + v_forward * dragger.draglocalvector_x + v_right * dragger.draglocalvector_y + v_up * dragger.draglocalvector_z;
+ makevectors(dragger.v_angle);
+ neworigin = dragger.origin + dragger.view_ofs + v_forward * dragger.dragdistance;
+ goodvelocity = (neworigin - curorigin) * (1 / frametime);
+
+ while(draggee.angles_y - dragger.v_angle_y - dragger.draglocalangle > 180)
+ dragger.draglocalangle += 360;
+ while(draggee.angles_y - dragger.v_angle_y - dragger.draglocalangle <= -180)
+ dragger.draglocalangle -= 360;
+
+ f = min(frametime * 10, 1);
+ draggee.velocity = draggee.velocity * (1 - f) + goodvelocity * f;
+
+ if(Drag_MayChangeAngles(draggee))
+ draggee.angles_y = draggee.angles_y * (1 - f) + (dragger.v_angle_y + dragger.draglocalangle) * f;
+
+ draggee.ltime = max(servertime + serverframetime, draggee.ltime); // fixes func_train breakage
+
+ te_lightning1(dragger, dragger.origin + dragger.view_ofs, curorigin);
+}
+
+float Drag_CanDrag(entity dragger)
+{
+ return (dragger.deadflag == DEAD_NO) || (dragger.classname == "player");
+}
+
+float Drag_IsDragging(entity dragger)
+{
+ if(!dragger.dragentity)
+ return FALSE;
+ if(wasfreed(dragger.dragentity) || dragger.dragentity.draggedby != dragger)
+ {
+ dragger.dragentity = world;
+ return FALSE;
+ }
+ if(!Drag_CanDrag(dragger) || !Drag_IsDraggable(dragger.dragentity))
+ {
+ Drag_Finish(dragger);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void Drag_MoveDrag(entity from, entity to)
+{
+ if(from.draggedby)
+ {
+ to.draggedby = from.draggedby;
+ to.draggedby.dragentity = to;
+ from.draggedby = world;
+ }
+}
+
Modified: trunk/data/qcsrc/server/cheats.qh
===================================================================
--- trunk/data/qcsrc/server/cheats.qh 2010-01-25 17:03:53 UTC (rev 8551)
+++ trunk/data/qcsrc/server/cheats.qh 2010-01-25 17:04:09 UTC (rev 8552)
@@ -1,2 +1,3 @@
float CheatImpulse(float i);
float CheatCommand(float argc);
+float CheatFrame();
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2010-01-25 17:03:53 UTC (rev 8551)
+++ trunk/data/qcsrc/server/cl_client.qc 2010-01-25 17:04:09 UTC (rev 8552)
@@ -2727,181 +2727,6 @@
target_voicescript_next(self);
}
-// on dragger:
-.entity dragentity;
-.float draggravity;
-.float dragspeed; // speed of mouse wheel action
-.float dragdistance; // distance of dragentity's draglocalvector from view_ofs
-.vector draglocalvector; // local attachment vector of the dragentity
-.float draglocalangle;
-// on draggee:
-.entity draggedby;
-.float dragmovetype;
-void Drag_Begin(entity dragger, entity draggee, vector touchpoint)
-{
- float tagscale;
-
- draggee.dragmovetype = draggee.movetype;
- draggee.draggravity = draggee.gravity;
- draggee.movetype = MOVETYPE_WALK;
- draggee.gravity = 0.00001;
- draggee.flags &~= FL_ONGROUND;
- draggee.draggedby = dragger;
-
- dragger.dragentity = draggee;
-
- dragger.dragdistance = vlen(touchpoint - dragger.origin - dragger.view_ofs);
- dragger.draglocalangle = draggee.angles_y - dragger.v_angle_y;
- touchpoint = touchpoint - gettaginfo(draggee, 0);
- tagscale = pow(vlen(v_forward), -2);
- dragger.draglocalvector_x = touchpoint * v_forward * tagscale;
- dragger.draglocalvector_y = touchpoint * v_right * tagscale;
- dragger.draglocalvector_z = touchpoint * v_up * tagscale;
-
- dragger.dragspeed = 64;
-}
-
-void Drag_Finish(entity dragger)
-{
- entity draggee;
- draggee = dragger.dragentity;
- if(dragger)
- dragger.dragentity = world;
- draggee.draggedby = world;
- draggee.movetype = draggee.dragmovetype;
- draggee.gravity = draggee.draggravity;
-
- switch(draggee.movetype)
- {
- case MOVETYPE_TOSS:
- case MOVETYPE_WALK:
- case MOVETYPE_STEP:
- case MOVETYPE_FLYMISSILE:
- case MOVETYPE_BOUNCE:
- case MOVETYPE_BOUNCEMISSILE:
- case MOVETYPE_PHYSICS:
- break;
- default:
- draggee.velocity = '0 0 0';
- break;
- }
-
- if((draggee.flags & FL_ITEM) && (vlen(draggee.velocity) < 32))
- {
- draggee.velocity = '0 0 0';
- draggee.flags |= FL_ONGROUND; // floating items are FUN
- }
-}
-
-float Drag_IsDraggable(entity draggee)
-{
- // TODO add more checks for bad stuff here
- 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)
- return FALSE;
- if(draggee.classname == "plat")
- return FALSE;
- if(draggee.classname == "func_button")
- return FALSE;
- if(draggee.model == "")
- return FALSE;
- if(draggee.classname == "spectator")
- return FALSE;
- if(draggee.classname == "observer")
- return FALSE;
- if(draggee.classname == "exteriorweaponentity")
- return FALSE;
-
- return TRUE;
-}
-
-float Drag_MayChangeAngles(entity draggee)
-{
- // TODO add more checks for bad stuff here
- if(substring(draggee.model, 0, 1) == "*")
- return FALSE;
- return TRUE;
-}
-
-void Drag_MoveForward(entity dragger)
-{
- dragger.dragdistance += dragger.dragspeed;
-}
-
-void Drag_SetSpeed(entity dragger, float s)
-{
- dragger.dragspeed = pow(2, s);
-}
-
-void Drag_MoveBackward(entity dragger)
-{
- dragger.dragdistance = max(0, dragger.dragdistance - dragger.dragspeed);
-}
-
-void Drag_Update(entity dragger)
-{
- vector curorigin, neworigin, goodvelocity;
- float f;
- entity draggee;
-
- draggee = dragger.dragentity;
- draggee.flags &~= FL_ONGROUND;
-
- curorigin = gettaginfo(draggee, 0);
- curorigin = curorigin + v_forward * dragger.draglocalvector_x + v_right * dragger.draglocalvector_y + v_up * dragger.draglocalvector_z;
- makevectors(dragger.v_angle);
- neworigin = dragger.origin + dragger.view_ofs + v_forward * dragger.dragdistance;
- goodvelocity = (neworigin - curorigin) * (1 / frametime);
-
- while(draggee.angles_y - dragger.v_angle_y - dragger.draglocalangle > 180)
- dragger.draglocalangle += 360;
- while(draggee.angles_y - dragger.v_angle_y - dragger.draglocalangle <= -180)
- dragger.draglocalangle -= 360;
-
- f = min(frametime * 10, 1);
- draggee.velocity = draggee.velocity * (1 - f) + goodvelocity * f;
-
- if(Drag_MayChangeAngles(draggee))
- draggee.angles_y = draggee.angles_y * (1 - f) + (dragger.v_angle_y + dragger.draglocalangle) * f;
-
- draggee.ltime = max(servertime + serverframetime, draggee.ltime); // fixes func_train breakage
-
- te_lightning1(dragger, dragger.origin + dragger.view_ofs, curorigin);
-}
-
-float Drag_CanDrag(entity dragger)
-{
- return (dragger.deadflag == DEAD_NO) || (dragger.classname == "player");
-}
-
-float Drag_IsDragging(entity dragger)
-{
- if(!dragger.dragentity)
- return FALSE;
- if(wasfreed(dragger.dragentity) || dragger.dragentity.draggedby != dragger)
- {
- dragger.dragentity = world;
- return FALSE;
- }
- if(!Drag_CanDrag(dragger) || !Drag_IsDraggable(dragger.dragentity))
- {
- Drag_Finish(dragger);
- return FALSE;
- }
- return TRUE;
-}
-
-void Drag_MoveDrag(entity from, entity to)
-{
- if(from.draggedby)
- {
- to.draggedby = from.draggedby;
- to.draggedby.dragentity = to;
- from.draggedby = world;
- }
-}
-
float isInvisibleString(string s)
{
float i, n, c;
@@ -2991,52 +2816,8 @@
return;
#endif
- if(sv_cheats || self.maycheat)
- if(Drag_CanDrag(self))
- if(self.BUTTON_DRAG)
- if(!self.dragentity)
- if(self.cursor_trace_ent)
- if(Drag_IsDraggable(self.cursor_trace_ent))
- {
- if(self.cursor_trace_ent.draggedby)
- Drag_Finish(self.cursor_trace_ent.draggedby);
- if(self.cursor_trace_ent.tag_entity)
- detach_sameorigin(self.cursor_trace_ent);
- Drag_Begin(self, self.cursor_trace_ent, self.cursor_trace_endpos);
- }
+ CheatFrame();
- if(Drag_IsDragging(self))
- {
- if(self.BUTTON_DRAG)
- {
- if(self.impulse == 10 || self.impulse == 15 || self.impulse == 18)
- {
- Drag_MoveForward(self);
- self.impulse = 0;
- }
- else if(self.impulse == 12 || self.impulse == 16 || self.impulse == 19)
- {
- Drag_MoveBackward(self);
- self.impulse = 0;
- }
- else if(self.impulse >= 1 && self.impulse <= 9)
- {
- Drag_SetSpeed(self, self.impulse - 1);
- }
- else if(self.impulse == 14)
- {
- Drag_SetSpeed(self, 9);
- }
-
- if(frametime)
- Drag_Update(self);
- }
- else
- {
- Drag_Finish(self);
- }
- }
-
if(self.classname == "player") {
CheckRules_Player();
UpdateChatBubble();
More information about the nexuiz-commits
mailing list