[nexuiz-commits] r6230 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Mar 20 08:41:50 EDT 2009


Author: div0
Date: 2009-03-20 08:41:49 -0400 (Fri, 20 Mar 2009)
New Revision: 6230

Modified:
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/cl_player.qc
   trunk/data/qcsrc/server/defs.qh
Log:
prevent bugs with dragging a player while he dies


Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2009-03-20 12:25:06 UTC (rev 6229)
+++ trunk/data/qcsrc/server/cl_client.qc	2009-03-20 12:41:49 UTC (rev 6230)
@@ -2385,11 +2385,9 @@
 .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;
@@ -2408,7 +2406,6 @@
 	dragger.draglocalvector_x = touchpoint * v_forward * tagscale;
 	dragger.draglocalvector_y = touchpoint * v_right * tagscale;
 	dragger.draglocalvector_z = touchpoint * v_up * tagscale;
-	print(vtos(v_forward), "\n");
 
 	dragger.dragspeed = 64;
 }
@@ -2456,6 +2453,13 @@
 		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;
 }
 
@@ -2516,6 +2520,11 @@
 	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)
@@ -2525,7 +2534,7 @@
 		dragger.dragentity = world;
 		return FALSE;
 	}
-	if(!Drag_IsDraggable(dragger.dragentity))
+	if(!Drag_CanDrag(dragger) || !Drag_IsDraggable(dragger.dragentity))
 	{
 		Drag_Finish(dragger);
 		return FALSE;
@@ -2533,6 +2542,16 @@
 	return TRUE;
 }
 
+void Drag_MoveDrag(entity from, entity to)
+{
+	if(from.draggedby)
+	{
+		to.draggedby = from.draggedby;
+		to.draggedby.dragentity = to;
+		from.draggedby = world;
+	}
+}
+
 /*
 =============
 PlayerPostThink
@@ -2580,17 +2599,18 @@
 	}
 
 	if(sv_cheats)
-		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);
-					}
+		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);
+						}
 	
 	if(Drag_IsDragging(self))
 	{

Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc	2009-03-20 12:25:06 UTC (rev 6229)
+++ trunk/data/qcsrc/server/cl_player.qc	2009-03-20 12:41:49 UTC (rev 6230)
@@ -62,6 +62,9 @@
 	setsize(self, oldself.mins, oldself.maxs);
 	self.oldorigin = oldself.origin;
 	self.reset = SUB_Remove;
+
+	Drag_MoveDrag(oldself, self);
+
 	self = oldself;
 }
 

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2009-03-20 12:25:06 UTC (rev 6229)
+++ trunk/data/qcsrc/server/defs.qh	2009-03-20 12:41:49 UTC (rev 6230)
@@ -552,3 +552,5 @@
 .float wasplayer;
 
 float servertime, serverprevtime, serverframetime;
+
+void Drag_MoveDrag(entity from, entity to);



More information about the nexuiz-commits mailing list