r4435 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Sep 9 09:33:55 EDT 2008
Author: div0
Date: 2008-09-09 09:33:55 -0400 (Tue, 09 Sep 2008)
New Revision: 4435
Modified:
trunk/data/qcsrc/server/portals.qc
trunk/data/qcsrc/server/w_porto.qc
Log:
prevent an exploit to create portals on noimpact
Modified: trunk/data/qcsrc/server/portals.qc
===================================================================
--- trunk/data/qcsrc/server/portals.qc 2008-09-09 12:07:15 UTC (rev 4434)
+++ trunk/data/qcsrc/server/portals.qc 2008-09-09 13:33:55 UTC (rev 4435)
@@ -602,13 +602,6 @@
vector ang;
vector org;
- if(trace_ent.movetype == MOVETYPE_WALK)
- {
- trace_endpos = trace_ent.origin + '0 0 1' * PL_MIN_z;
- trace_plane_normal = '0 0 1';
- dir = -1 * dir; // create telefrag portals the other way round
- }
-
org = trace_endpos;
ang = fixedvectoangles2(trace_plane_normal, dir);
fixedmakevectors(ang);
@@ -633,13 +626,6 @@
vector ang;
vector org;
- if(trace_ent.movetype == MOVETYPE_WALK)
- {
- trace_endpos = trace_ent.origin + '0 0 1' * PL_MIN_z;
- trace_plane_normal = '0 0 1';
- dir = -1 * dir; // create telefrag portals the other way round
- }
-
org = trace_endpos;
ang = fixedvectoangles2(trace_plane_normal, dir);
fixedmakevectors(ang);
Modified: trunk/data/qcsrc/server/w_porto.qc
===================================================================
--- trunk/data/qcsrc/server/w_porto.qc 2008-09-09 12:07:15 UTC (rev 4434)
+++ trunk/data/qcsrc/server/w_porto.qc 2008-09-09 13:33:55 UTC (rev 4435)
@@ -60,10 +60,20 @@
void W_Porto_Touch (void)
{
vector norm;
+ float noreflect;
if(other.classname == "portal")
return; // handled by the portal
+ noreflect = 0;
+ if(trace_ent.movetype == MOVETYPE_WALK)
+ {
+ traceline(trace_ent.origin, trace_ent.origin + '0 0 2' * PL_MIN_z, MOVE_NORMAL, self);
+ if(trace_fraction >= 1)
+ return;
+ noreflect = 1;
+ }
+
norm = trace_plane_normal;
if(self.owner.playerid != self.playerid)
{
@@ -71,13 +81,17 @@
}
else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK)
{
- // just reflect
- self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal);
- self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal));
+ if(!noreflect)
+ {
+ // just reflect
+ self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal);
+ self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal));
+ }
}
else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
{
- W_Porto_Fail(0);
+ if(!noreflect)
+ W_Porto_Fail(0);
}
else if(self.effects & EF_RED)
{
@@ -87,8 +101,11 @@
sound(self, CHAN_PROJECTILE, "misc/invshot.wav", VOL_BASE, ATTN_NORM);
centerprint(self.owner, "^1In^7-portal created.\n");
trace_plane_normal = norm;
- self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal);
- self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal));
+ if(!noreflect)
+ {
+ self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal);
+ self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal));
+ }
}
else
{
More information about the nexuiz-commits
mailing list