#include "g_subs.qh"
+#include <server/defs.qh>
+#include <server/miscfunctions.qh>
#include "antilag.qh"
#include "command/common.qh"
#include "../common/state.qh"
#include "../lib/warpzone/common.qh"
-#include "../common/triggers/subs.qh"
+#include "../common/mapobjects/subs.qh"
-spawnfunc(info_null)
-{
- remove(self);
- // if anything breaks, tell the mapper to fix his map! info_null is meant to remove itself immediately.
-}
/*
==================
source.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
if (lag)
- {
- // take players back into the past
- FOREACH_CLIENT(IS_PLAYER(it) && it != forent, antilag_takeback(it, CS(it), time - lag));
- FOREACH_ENTITY_FLAGS(flags, FL_MONSTER, {
- if(it != forent)
- antilag_takeback(it, it, time - lag);
- });
- }
+ antilag_takeback_all(forent, lag);
// do the trace
if(wz)
// restore players to current positions
if (lag)
- {
- FOREACH_CLIENT(IS_PLAYER(it) && it != forent, antilag_restore(it, CS(it)));
- FOREACH_ENTITY_FLAGS(flags, FL_MONSTER, {
- if (it != forent)
- antilag_restore(it, it);
- });
- }
+ antilag_restore_all(forent);
// restore shooter solid type
if(source)
}
void traceline_antilag (entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
{
- if (autocvar_g_antilag != 2 || source.cvar_cl_noantilag)
+ bool noantilag = ((IS_CLIENT(source)) ? CS(source).cvar_cl_noantilag : false);
+ if (autocvar_g_antilag != 2 || noantilag)
lag = 0;
traceline_antilag_force(source, v1, v2, nomonst, forent, lag);
}
void tracebox_antilag (entity source, vector v1, vector mi, vector ma, vector v2, float nomonst, entity forent, float lag)
{
- if (autocvar_g_antilag != 2 || source.cvar_cl_noantilag)
+ bool noantilag = ((IS_CLIENT(source)) ? CS(source).cvar_cl_noantilag : false);
+ if (autocvar_g_antilag != 2 || noantilag)
lag = 0;
tracebox_antilag_force_wz(source, v1, mi, ma, v2, nomonst, forent, lag, false);
}
}
void WarpZone_traceline_antilag (entity source, vector v1, vector v2, float nomonst, entity forent, float lag)
{
- if (autocvar_g_antilag != 2 || source.cvar_cl_noantilag)
+ bool noantilag = ((IS_CLIENT(source)) ? CS(source).cvar_cl_noantilag : false);
+ if (autocvar_g_antilag != 2 || noantilag)
lag = 0;
WarpZone_traceline_antilag_force(source, v1, v2, nomonst, forent, lag);
}
void WarpZone_tracebox_antilag (entity source, vector v1, vector mi, vector ma, vector v2, float nomonst, entity forent, float lag)
{
- if (autocvar_g_antilag != 2 || source.cvar_cl_noantilag)
+ bool noantilag = ((IS_CLIENT(source)) ? CS(source).cvar_cl_noantilag : false);
+ if (autocvar_g_antilag != 2 || noantilag)
lag = 0;
tracebox_antilag_force_wz(source, v1, mi, ma, v2, nomonst, forent, lag, true);
}
if(c == 50)
{
- LOG_TRACE("HOLY SHIT! When tracing from ", vtos(v1), " to ", vtos(v2), "\n");
- LOG_TRACE(" Nudging gets us nowhere at ", vtos(pos), "\n");
- LOG_TRACE(" trace_endpos is ", vtos(trace_endpos), "\n");
- LOG_TRACE(" trace distance is ", ftos(vlen(pos - trace_endpos)), "\n");
+ LOG_TRACE("HOLY SHIT! When tracing from ", vtos(v1), " to ", vtos(v2));
+ LOG_TRACE(" Nudging gets us nowhere at ", vtos(pos));
+ LOG_TRACE(" trace_endpos is ", vtos(trace_endpos));
+ LOG_TRACE(" trace distance is ", ftos(vlen(pos - trace_endpos)));
}
stopentity = trace_ent;
*/
vector findbetterlocation (vector org, float mindist)
{
- vector loc;
- vector vec;
- float c, h;
-
- vec = mindist * '1 0 0';
- c = 0;
+ vector vec = mindist * '1 0 0';
+ int c = 0;
while (c < 6)
{
- traceline (org, org + vec, true, world);
+ traceline (org, org + vec, true, NULL);
vec = vec * -1;
if (trace_fraction < 1)
{
- loc = trace_endpos;
- traceline (loc, loc + vec, true, world);
+ vector loc = trace_endpos;
+ traceline (loc, loc + vec, true, NULL);
if (trace_fraction >= 1)
org = loc + vec;
}
if (c & 1)
{
- h = vec.y;
+ float h = vec.y;
vec.y = vec.x;
vec.x = vec.z;
vec.z = h;
return org;
}
-float LOD_customize()
-{SELFPARAM();
+bool LOD_customize(entity this, entity client)
+{
if(autocvar_loddebug)
{
int d = autocvar_loddebug;
}
// TODO csqc network this so it only gets sent once
- vector near_point = NearestPointOnBox(this, other.origin);
- if(vdist(near_point - other.origin, <, this.loddistance1))
+ vector near_point = NearestPointOnBox(this, client.origin);
+ if(vdist(near_point - client.origin, <, this.loddistance1))
this.modelindex = this.lodmodelindex0;
- else if(!this.lodmodelindex2 || vdist(near_point - other.origin, <, this.loddistance2))
+ else if(!this.lodmodelindex2 || vdist(near_point - client.origin, <, this.loddistance2))
this.modelindex = this.lodmodelindex1;
else
this.modelindex = this.lodmodelindex2;
return true;
}
-void LOD_uncustomize()
-{SELFPARAM();
+void LOD_uncustomize(entity this)
+{
this.modelindex = this.lodmodelindex0;
}
if(this.lodtarget1 != "")
{
- e = find(world, targetname, this.lodtarget1);
+ e = find(NULL, targetname, this.lodtarget1);
if(e)
{
this.lodmodel1 = e.model;
- remove(e);
+ delete(e);
}
}
if(this.lodtarget2 != "")
{
- e = find(world, targetname, this.lodtarget2);
+ e = find(NULL, targetname, this.lodtarget2);
if(e)
{
this.lodmodel2 = e.model;
- remove(e);
+ delete(e);
}
}
}
if(this.lodmodelindex1)
- if (!this.SendEntity)
+ if (!getSendEntity(this))
SetCustomizer(this, LOD_customize, LOD_uncustomize);
}
-
-void ApplyMinMaxScaleAngles(entity e)
-{SELFPARAM();
- if(e.angles.x != 0 || e.angles.z != 0 || self.avelocity.x != 0 || self.avelocity.z != 0) // "weird" rotation
- {
- e.maxs = '1 1 1' * vlen(
- '1 0 0' * max(-e.mins.x, e.maxs.x) +
- '0 1 0' * max(-e.mins.y, e.maxs.y) +
- '0 0 1' * max(-e.mins.z, e.maxs.z)
- );
- e.mins = -e.maxs;
- }
- else if(e.angles.y != 0 || self.avelocity.y != 0) // yaw only is a bit better
- {
- e.maxs_x = vlen(
- '1 0 0' * max(-e.mins.x, e.maxs.x) +
- '0 1 0' * max(-e.mins.y, e.maxs.y)
- );
- e.maxs_y = e.maxs.x;
- e.mins_x = -e.maxs.x;
- e.mins_y = -e.maxs.x;
- }
- if(e.scale)
- setsize(e, e.mins * e.scale, e.maxs * e.scale);
- else
- setsize(e, e.mins, e.maxs);
-}
-
-void SetBrushEntityModel()
-{SELFPARAM();
- if(self.model != "")
- {
- precache_model(self.model);
- if(self.mins != '0 0 0' || self.maxs != '0 0 0')
- {
- vector mi = self.mins;
- vector ma = self.maxs;
- _setmodel(self, self.model); // no precision needed
- setsize(self, mi, ma);
- }
- else
- _setmodel(self, self.model); // no precision needed
- InitializeEntity(self, LODmodel_attach, INITPRIO_FINDTARGET);
- }
- setorigin(self, self.origin);
- ApplyMinMaxScaleAngles(self);
-}
-
-void SetBrushEntityModelNoLOD()
-{SELFPARAM();
- if(self.model != "")
- {
- precache_model(self.model);
- if(self.mins != '0 0 0' || self.maxs != '0 0 0')
- {
- vector mi = self.mins;
- vector ma = self.maxs;
- _setmodel(self, self.model); // no precision needed
- setsize(self, mi, ma);
- }
- else
- _setmodel(self, self.model); // no precision needed
- }
- setorigin(self, self.origin);
- ApplyMinMaxScaleAngles(self);
-}
-
-/*
-================
-InitTrigger
-================
-*/
-
-void SetMovedir(entity this)
-{
- if(this.movedir != '0 0 0')
- this.movedir = normalize(this.movedir);
- else
- {
- makevectors(this.angles);
- this.movedir = v_forward;
- }
-
- this.angles = '0 0 0';
-}
-
-void InitTrigger()
-{SELFPARAM();
-// trigger angles are used for one-way touches. An angle of 0 is assumed
-// to mean no restrictions, so use a yaw of 360 instead.
- SetMovedir(self);
- self.solid = SOLID_TRIGGER;
- SetBrushEntityModel();
- self.movetype = MOVETYPE_NONE;
- self.modelindex = 0;
- self.model = "";
-}
-
-void InitSolidBSPTrigger()
-{SELFPARAM();
-// trigger angles are used for one-way touches. An angle of 0 is assumed
-// to mean no restrictions, so use a yaw of 360 instead.
- SetMovedir(self);
- self.solid = SOLID_BSP;
- SetBrushEntityModel();
- self.movetype = MOVETYPE_NONE; // why was this PUSH? -div0
-// self.modelindex = 0;
- self.model = "";
-}
-
-float InitMovingBrushTrigger()
-{SELFPARAM();
-// trigger angles are used for one-way touches. An angle of 0 is assumed
-// to mean no restrictions, so use a yaw of 360 instead.
- self.solid = SOLID_BSP;
- SetBrushEntityModel();
- self.movetype = MOVETYPE_PUSH;
- if(self.modelindex == 0)
- {
- objerror("InitMovingBrushTrigger: no brushes found!");
- return 0;
- }
- return 1;
-}