#include "miscfunctions.qh"
-#include "_all.qh"
#include "antilag.qh"
#include "command/common.qh"
#include "constants.qh"
#include "g_hook.qh"
#include "ipban.qh"
-#include "mutators/mutators_include.qh"
+#include "mutators/all.qh"
#include "t_items.qh"
#include "weapons/accuracy.qh"
#include "weapons/csqcprojectile.qh"
#include "weapons/selection.qh"
#include "../common/command/generic.qh"
#include "../common/constants.qh"
-#include "../common/deathtypes.qh"
+#include "../common/deathtypes/all.qh"
#include "../common/mapinfo.qh"
#include "../common/notifications.qh"
#include "../common/playerstats.qh"
#include "../common/teams.qh"
#include "../common/triggers/subs.qh"
-#include "../common/urllib.qh"
#include "../common/util.qh"
#include "../common/turrets/sv_turrets.qh"
#include "../common/weapons/all.qh"
-#include "../csqcmodellib/sv_model.qh"
-#include "../warpzonelib/anglestransform.qh"
-#include "../warpzonelib/server.qh"
+#include "../common/vehicles/sv_vehicles.qh"
+#include "../common/vehicles/vehicle.qh"
+#include "../common/items/all.qc"
+#include "../lib/csqcmodel/sv_model.qh"
+#include "../lib/warpzone/anglestransform.qh"
+#include "../lib/warpzone/server.qh"
void crosshair_trace(entity pl)
{
{
if (DistributeEvenly_amount)
{
- dprint("DistributeEvenly_Init: UNFINISHED DISTRIBUTION (", ftos(DistributeEvenly_amount), " for ");
- dprint(ftos(DistributeEvenly_totalweight), " left!)\n");
+ LOG_TRACE("DistributeEvenly_Init: UNFINISHED DISTRIBUTION (", ftos(DistributeEvenly_amount), " for ");
+ LOG_TRACE(ftos(DistributeEvenly_totalweight), " left!)\n");
}
if (totalweight == 0)
DistributeEvenly_amount = 0;
}
if (autocvar_sv_eventlog_console)
{
- print(s, "\n");
+ LOG_INFO(s, "\n");
}
}
{
if (i != 0)
{
- dprint("Nearest point (");
- dprint(nearest_entity[0].netname);
- dprint(") is not visible, using a visible one.\n");
+ LOG_TRACE("Nearest point (");
+ LOG_TRACE(nearest_entity[0].netname);
+ LOG_TRACE(") is not visible, using a visible one.\n");
}
return nearest_entity[i];
}
if (num_nearest == 0)
return world;
- dprint("Not seeing any location point, using nearest as fallback.\n");
+ LOG_TRACE("Not seeing any location point, using nearest as fallback.\n");
/* DEBUGGING CODE:
dprint("Candidates were: ");
for(j = 0; j < num_nearest; ++j)
}
string formatmessage(string msg)
-{
+{SELFPARAM();
float p, p1, p2;
float n;
vector cursor;
case "x": replacement = ((cursor_ent.netname == "" || !cursor_ent) ? "nothing" : cursor_ent.netname); break;
case "s": replacement = ftos(vlen(self.velocity - self.velocity_z * '0 0 1')); break;
case "S": replacement = ftos(vlen(self.velocity)); break;
+ case "t": replacement = seconds_tostring(ceil(max(0, autocvar_timelimit * 60 + game_starttime - time))); break;
+ case "T": replacement = seconds_tostring(floor(time - game_starttime)); break;
default:
{
- MUTATOR_CALLHOOK(FormatMessage, escape, replacement);
+ MUTATOR_CALLHOOK(FormatMessage, escape, replacement, msg);
+ escape = format_escape;
+ replacement = format_replacement;
break;
}
}
return msg;
}
-float boolean(float value) { // if value is 0 return false (0), otherwise return true (1)
- return (value == 0) ? false : true;
-}
-
/*
=============
GetCvars
>0: receives a cvar from name=argv(f) value=argv(f+1)
*/
void GetCvars_handleString(string thisname, float f, .string field, string name)
-{
+{SELFPARAM();
if (f < 0)
{
if (self.(field))
stuffcmd(self, strcat("cl_cmd sendcvar ", name, "\n"));
}
void GetCvars_handleString_Fixup(string thisname, float f, .string field, string name, string(string) func)
-{
+{SELFPARAM();
GetCvars_handleString(thisname, f, field, name);
if (f >= 0) // also initialize to the fitting value for "" when sending cvars out
if (thisname == name)
}
}
void GetCvars_handleFloat(string thisname, float f, .float field, string name)
-{
+{SELFPARAM();
if (f < 0)
{
}
stuffcmd(self, strcat("cl_cmd sendcvar ", name, "\n"));
}
void GetCvars_handleFloatOnce(string thisname, float f, .float field, string name)
-{
+{SELFPARAM();
if (f < 0)
{
}
}
}
string W_FixWeaponOrder_ForceComplete_AndBuildImpulseList(string wo)
-{
+{SELFPARAM();
string o;
o = W_FixWeaponOrder_ForceComplete(wo);
if(self.weaponorder_byimpulse)
return o;
}
void GetCvars(float f)
-{
+{SELFPARAM();
string s = string_null;
if (f > 0)
Notification_GetCvars();
+ ReplicateVars(this, s, f);
+
GetCvars_handleFloat(s, f, autoswitch, "cl_autoswitch");
GetCvars_handleFloat(s, f, cvar_cl_autoscreenshot, "cl_autoscreenshot");
GetCvars_handleFloat(s, f, cvar_cl_jetpack_jump, "cl_jetpack_jump");
GetCvars_handleFloat(s, f, cvar_cl_noantilag, "cl_noantilag");
GetCvars_handleFloat(s, f, cvar_cl_voice_directional, "cl_voice_directional");
GetCvars_handleFloat(s, f, cvar_cl_voice_directional_taunt_attenuation, "cl_voice_directional_taunt_attenuation");
- GetCvars_handleFloat(s, f, cvar_cl_accuracy_data_share, "cl_accuracy_data_share");
- GetCvars_handleFloat(s, f, cvar_cl_accuracy_data_receive, "cl_accuracy_data_receive");
-
- self.cvar_cl_accuracy_data_share = boolean(self.cvar_cl_accuracy_data_share);
- self.cvar_cl_accuracy_data_receive = boolean(self.cvar_cl_accuracy_data_receive);
GetCvars_handleFloatOnce(s, f, cvar_cl_gunalign, "cl_gunalign");
GetCvars_handleFloat(s, f, cvar_cl_allow_uid2name, "cl_allow_uid2name");
{
int i = weaponinfo.weapon;
int d = 0;
+ bool allow_mutatorblocked = false;
- if (!i)
+ if(!i)
return 0;
- if (g_lms || g_ca || allguns)
+ bool mutator_returnvalue = MUTATOR_CALLHOOK(WantWeapon, weaponinfo, d, allguns, allow_mutatorblocked);
+ d = ret_float;
+ allguns = want_allguns;
+ allow_mutatorblocked = false;
+
+ if(allguns)
{
if(weaponinfo.spawnflags & WEP_FLAG_NORMAL)
d = true;
else
d = false;
}
- else if (g_cts)
- d = (i == WEP_SHOTGUN.m_id);
- else if (g_nexball)
- d = 0; // weapon is set a few lines later
- else
+ else if(!mutator_returnvalue)
d = !(!weaponinfo.weaponstart);
- if(g_grappling_hook) // if possible, redirect off-hand hook to on-hand hook
- d |= (i == WEP_HOOK.m_id);
- if(!g_cts && (weaponinfo.spawnflags & WEP_FLAG_MUTATORBLOCKED)) // never default mutator blocked guns
+ if(!allow_mutatorblocked && (weaponinfo.spawnflags & WEP_FLAG_MUTATORBLOCKED)) // never default mutator blocked guns
d = 0;
float t = weaponinfo.weaponstartoverride;
g_weaponarena_weapons = '0 0 0';
s = cvar_string("g_weaponarena");
- if (s == "0" || s == "")
- {
- if(g_ca || g_freezetag)
- s = "most";
- }
+
+ MUTATOR_CALLHOOK(SetWeaponArena, s);
+ s = ret_string;
if (s == "0" || s == "")
{
if (e.netname == s)
{
g_weaponarena_weapons |= WepSet_FromWeapon(j);
- g_weaponarena_list = strcat(g_weaponarena_list, e.message, " & ");
+ g_weaponarena_list = strcat(g_weaponarena_list, e.m_name, " & ");
break;
}
}
if (j > WEP_LAST)
{
- print("The weapon mutator list contains an unknown weapon ", s, ". Skipped.\n");
+ LOG_INFO("The weapon mutator list contains an unknown weapon ", s, ". Skipped.\n");
}
}
g_weaponarena_list = strzone(substring(g_weaponarena_list, 0, strlen(g_weaponarena_list) - 3));
MUTATOR_CALLHOOK(SetStartItems);
- if ((start_items & ITEM_Jetpack.m_itemid) || (g_grappling_hook && (start_weapons & WEPSET_HOOK)))
+ if (start_items & ITEM_Jetpack.m_itemid)
{
start_items |= ITEM_JetpackRegen.m_itemid;
start_ammo_fuel = max(start_ammo_fuel, cvar("g_balance_fuel_rotstable"));
for (i = WEP_FIRST; i <= WEP_LAST; ++i)
{
e = get_weaponinfo(i);
- if(precache_weapons & WepSet_FromWeapon(i))
- WEP_ACTION(i, WR_INIT);
+ if(precache_weapons & WepSet_FromWeapon(i)) {
+ Weapon w = get_weaponinfo(i);
+ w.wr_init(w);
+ }
}
start_ammo_shells = max(0, start_ammo_shells);
return true;
}
-#undef sound
-void sound(entity e, float chan, string samp, float vol, float attenu)
-{
- if (!sound_allowed(MSG_BROADCAST, e))
- return;
- sound7(e, chan, samp, vol, attenu, 0, 0);
-}
-
void soundtoat(float _dest, entity e, vector o, float chan, string samp, float vol, float attenu)
{
float entno, idx;
if (entno >= 8192 || chan < 0 || chan > 7)
{
float idx, sflags;
- idx = precache_sound_index("misc/null.wav");
+ idx = precache_sound_index(SND(Null));
sflags = SND_LARGEENTITY;
if (idx >= 256)
sflags |= SND_LARGESOUND;
if (time > e.spamtime)
{
e.spamtime = time;
- sound(e, chan, samp, vol, _atten);
+ _sound(e, chan, samp, vol, _atten);
return true;
}
return false;
if (autocvar_bot_sound_monopoly)
return;
- sound(world, CH_INFO, samp, VOL_BASE, ATTEN_NONE);
+ _sound(world, CH_INFO, samp, VOL_BASE, ATTEN_NONE);
}
void PrecachePlayerSounds(string f);
search_end(globhandle);
}
-void precache()
+void precache_playermodels(string s)
{
+ if(s != "")
+ {
+ int n = tokenize_console(s);
+ precache_playermodel(argv(0));
+
+ for (int i = 1; i < n; ++i)
+ precache_model(argv(i));
+ }
+}
+
+void precache()
+{SELFPARAM();
// gamemode related things
- precache_model ("models/misc/chatbubble.spr");
- precache_model("models/ice/ice.md3");
// Precache all player models if desired
if (autocvar_sv_precacheplayermodels)
if (autocvar_sv_defaultcharacter)
{
- string s;
- s = autocvar_sv_defaultplayermodel_red;
- if (s != "")
- precache_playermodel(s);
- s = autocvar_sv_defaultplayermodel_blue;
- if (s != "")
- precache_playermodel(s);
- s = autocvar_sv_defaultplayermodel_yellow;
- if (s != "")
- precache_playermodel(s);
- s = autocvar_sv_defaultplayermodel_pink;
- if (s != "")
- precache_playermodel(s);
- s = autocvar_sv_defaultplayermodel;
- if (s != "")
- precache_playermodel(s);
+ precache_playermodels(autocvar_sv_defaultplayermodel_red);
+ precache_playermodels(autocvar_sv_defaultplayermodel_blue);
+ precache_playermodels(autocvar_sv_defaultplayermodel_yellow);
+ precache_playermodels(autocvar_sv_defaultplayermodel_pink);
+ precache_playermodels(autocvar_sv_defaultplayermodel);
}
if (g_footsteps)
}
// gore and miscellaneous sounds
- //precache_sound ("misc/h2ohit.wav");
- precache_model ("models/hook.md3");
- precache_sound ("misc/armorimpact.wav");
- precache_sound ("misc/bodyimpact1.wav");
- precache_sound ("misc/bodyimpact2.wav");
- precache_sound ("misc/gib.wav");
- precache_sound ("misc/gib_splat01.wav");
- precache_sound ("misc/gib_splat02.wav");
- precache_sound ("misc/gib_splat03.wav");
- precache_sound ("misc/gib_splat04.wav");
PrecacheGlobalSound((globalsound_fall = "misc/hitground 4"));
PrecacheGlobalSound((globalsound_metalfall = "misc/metalhitground 4"));
- precache_sound ("misc/null.wav");
- precache_sound ("misc/spawn.wav");
- precache_sound ("misc/talk.wav");
- precache_sound ("misc/teleport.wav");
- precache_sound ("misc/poweroff.wav");
- precache_sound ("player/lava.wav");
- precache_sound ("player/slime.wav");
-
- precache_model ("models/sprites/0.spr32");
- precache_model ("models/sprites/1.spr32");
- precache_model ("models/sprites/2.spr32");
- precache_model ("models/sprites/3.spr32");
- precache_model ("models/sprites/4.spr32");
- precache_model ("models/sprites/5.spr32");
- precache_model ("models/sprites/6.spr32");
- precache_model ("models/sprites/7.spr32");
- precache_model ("models/sprites/8.spr32");
- precache_model ("models/sprites/9.spr32");
- precache_model ("models/sprites/10.spr32");
-
- // common weapon precaches
- precache_sound ("weapons/reload.wav"); // until weapons have individual reload sounds, precache the reload sound here
- precache_sound ("weapons/weapon_switch.wav");
- precache_sound ("weapons/weaponpickup.wav");
- precache_sound ("weapons/unavailable.wav");
- precache_sound ("weapons/dryfire.wav");
- if (g_grappling_hook)
- {
- precache_sound ("weapons/hook_fire.wav"); // hook
- precache_sound ("weapons/hook_impact.wav"); // hook
- }
-
- precache_model("models/elaser.mdl");
- precache_model("models/laser.mdl");
- precache_model("models/ebomb.mdl");
#if 0
// Disabled this code because it simply does not work (e.g. ignores bgmvolume, overlaps with "cd loop" controlled tracks).
ambientsound ('0 0 0', self.noise, VOL_BASE, ATTEN_NONE);
}
#endif
-
-#include "precache-for-csqc.inc"
}
}
void objerror(string s)
-{
+{SELFPARAM();
make_safe_for_remove(self);
builtin_objerror(s);
}
if (!e || e.initialize_entity)
{
// make a proxy initializer entity
- entity e_old;
- e_old = e;
- e = spawn();
- e.classname = "initialize_entity";
+ entity e_old = e;
+ e = new(initialize_entity);
e.enemy = e_old;
}
}
}
void InitializeEntitiesRun()
-{
- entity startoflist;
- startoflist = initialize_entity_first;
- initialize_entity_first = world;
+{SELFPARAM();
+ entity startoflist = initialize_entity_first;
+ initialize_entity_first = NULL;
remove = remove_except_protected;
- for (self = startoflist; self; self = self.initialize_entity_next)
+ for (entity e = startoflist; e; e = e.initialize_entity_next)
{
- self.remove_except_protected_forbidden = 1;
+ e.remove_except_protected_forbidden = 1;
}
- for (self = startoflist; self; )
+ for (entity e = startoflist; e; )
{
- entity e;
- var void(void) func;
- e = self.initialize_entity_next;
- func = self.initialize_entity;
- self.initialize_entity_order = 0;
- self.initialize_entity = func_null;
- self.initialize_entity_next = world;
- self.remove_except_protected_forbidden = 0;
- if (self.classname == "initialize_entity")
+ e.remove_except_protected_forbidden = 0;
+ e.initialize_entity_order = 0;
+ entity next = e.initialize_entity_next;
+ e.initialize_entity_next = NULL;
+ var void() func = e.initialize_entity;
+ e.initialize_entity = func_null;
+ if (e.classname == "initialize_entity")
{
- entity e_old;
- e_old = self.enemy;
- builtin_remove(self);
- self = e_old;
+ entity wrappee = e.enemy;
+ builtin_remove(e);
+ e = wrappee;
+ }
+ //dprint("Delayed initialization: ", e.classname, "\n");
+ if (func)
+ {
+ WITH(entity, self, e, func());
}
- //dprint("Delayed initialization: ", self.classname, "\n");
- if(func)
- func();
else
{
- eprint(self);
- backtrace(strcat("Null function in: ", self.classname, "\n"));
+ eprint(e);
+ backtrace(strcat("Null function in: ", e.classname, "\n"));
}
- self = e;
+ e = next;
}
remove = remove_unsafely;
}
-void UncustomizeEntitiesRun()
-{
- entity oldself;
- oldself = self;
- for (self = world; (self = findfloat(self, uncustomizeentityforclient_set, 1)); )
- self.uncustomizeentityforclient();
- self = oldself;
-}
-void SetCustomizer(entity e, float(void) customizer, void(void) uncustomizer)
-{
- e.customizeentityforclient = customizer;
- e.uncustomizeentityforclient = uncustomizer;
- e.uncustomizeentityforclient_set = !!uncustomizer;
-}
-
-void Net_LinkEntity(entity e, bool docull, float dt, bool(entity, int) sendfunc)
-{
- vector mi, ma;
-
- if (e.classname == "")
- e.classname = "net_linked";
-
- if (e.model == "" || self.modelindex == 0)
- {
- mi = e.mins;
- ma = e.maxs;
- setmodel(e, "null");
- setsize(e, mi, ma);
- }
-
- e.SendEntity = sendfunc;
- e.SendFlags = 0xFFFFFF;
-
- if (!docull)
- e.effects |= EF_NODEPTHTEST;
-
- if (dt)
- {
- e.nextthink = time + dt;
- e.think = SUB_Remove;
- }
-}
-
-
.float(entity) isEliminated;
-float EliminatedPlayers_SendEntity(entity to, float sendflags)
+bool EliminatedPlayers_SendEntity(entity this, entity to, float sendflags)
{
float i, f, b;
entity e;
void adaptor_think2touch()
-{
+{SELFPARAM();
entity o;
o = other;
other = world;
}
void adaptor_think2use()
-{
+{SELFPARAM();
entity o, a;
o = other;
a = activator;
}
void adaptor_think2use_hittype_splash() // for timed projectile detonation
-{
+{SELFPARAM();
if(!(self.flags & FL_ONGROUND)) // if onground, we ARE touching something, but HITTYPE_SPLASH is to be networked if the damage causing projectile is not touching ANYTHING
self.projectiledeathtype |= HITTYPE_SPLASH;
adaptor_think2use();
// deferred dropping
void DropToFloor_Handler()
-{
+{SELFPARAM();
builtin_droptofloor();
self.dropped_origin = self.origin;
}
void droptofloor()
-{
+{SELFPARAM();
InitializeEntity(self, DropToFloor_Handler, INITPRIO_DROPTOFLOOR);
}
}
float SUB_NoImpactCheck()
-{
+{SELFPARAM();
// zero hitcontents = this is not the real impact, but either the
// mirror-impact of something hitting the projectile instead of the
// projectile hitting the something, or a touchareagrid one. Neither of
if(trace_dphitcontents == 0)
{
//dprint("A hit happened with zero hit contents... DEBUG THIS, this should never happen for projectiles! Projectile will self-destruct.\n");
- dprintf("A hit from a projectile happened with no hit contents! DEBUG THIS, this should never happen for projectiles! Profectile will self-destruct. (edict: %d, classname: %s, origin: %s)\n", num_for_edict(self), self.classname, vtos(self.origin));
+ LOG_TRACEF("A hit from a projectile happened with no hit contents! DEBUG THIS, this should never happen for projectiles! Profectile will self-destruct. (edict: %d, classname: %s, origin: %s)\n", num_for_edict(self), self.classname, vtos(self.origin));
checkclient();
}
if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
traceline(self.origin - tic, self.origin + tic, MOVE_NORMAL, self);
if (trace_fraction >= 1)
{
- dprint("Odd... did not hit...?\n");
+ LOG_TRACE("Odd... did not hit...?\n");
}
else if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
{
- dprint("Detected and prevented the sky-grapple bug.\n");
+ LOG_TRACE("Detected and prevented the sky-grapple bug.\n");
return 1;
}
}
void W_Crylink_Dequeue(entity e);
float WarpZone_Projectile_Touch_ImpactFilter_Callback()
-{
+{SELFPARAM();
if(SUB_OwnerCheck())
return true;
if(SUB_NoImpactCheck())
}
else
{
- print("Received HTTP request data for an invalid id ", ftos(id), ".\n");
+ LOG_INFO("Received HTTP request data for an invalid id ", ftos(id), ".\n");
}
}
return s;
}
-float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
+float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
{
float m, i;
vector start, org, delta, end, enddown, mstart;
m = e.dphitcontentsmask;
e.dphitcontentsmask = goodcontents | badcontents;
- org = world.mins;
- delta = world.maxs - world.mins;
+ org = boundmin;
+ delta = boundmax - boundmin;
start = end = org;
{
setorigin(e, start);
e.angles = vectoangles(end - start);
- dprint("Needed ", ftos(i + 1), " attempts\n");
+ LOG_TRACE("Needed ", ftos(i + 1), " attempts\n");
return true;
}
else
return false;
}
+float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
+{
+ return MoveToRandomLocationWithinBounds(e, world.mins, world.maxs, goodcontents, badcontents, badsurfaceflags, attempts, maxaboveground, minviewdistance);
+}
+
void write_recordmarker(entity pl, float tstart, float dt)
{
GameLogEcho(strcat(":recordset:", ftos(pl.playerid), ":", ftos(dt)));
" ", ftos(tstart), " ", ftos(dt), "\n"));
}
-vector shotorg_adjustfromclient(vector vecs, float y_is_right, float allowcenter, float algn)
-{
- switch(algn)
- {
- default:
- case 3: // right
- break;
-
- case 4: // left
- vecs.y = -vecs.y;
- break;
-
- case 1:
- if(allowcenter) // 2: allow center handedness
- {
- // center
- vecs.y = 0;
- vecs.z -= 2;
- }
- else
- {
- // right
- }
- break;
-
- case 2:
- if(allowcenter) // 2: allow center handedness
- {
- // center
- vecs.y = 0;
- vecs.z -= 2;
- }
- else
- {
- // left
- vecs.y = -vecs.y;
- }
- break;
- }
- return vecs;
-}
-
-vector shotorg_adjust_values(vector vecs, float y_is_right, float visual, float algn)
-{
- string s;
- vector v;
-
- if (autocvar_g_shootfromeye)
- {
- if (visual)
- {
- if (autocvar_g_shootfromclient) { vecs = shotorg_adjustfromclient(vecs, y_is_right, (autocvar_g_shootfromclient >= 2), algn); }
- else { vecs.y = 0; vecs.z -= 2; }
- }
- else
- {
- vecs.y = 0;
- vecs.z = 0;
- }
- }
- else if (autocvar_g_shootfromcenter)
- {
- vecs.y = 0;
- vecs.z -= 2;
- }
- else if ((s = autocvar_g_shootfromfixedorigin) != "")
- {
- v = stov(s);
- if (y_is_right)
- v.y = -v.y;
- if (v.x != 0)
- vecs.x = v.x;
- vecs.y = v.y;
- vecs.z = v.z;
- }
- else if (autocvar_g_shootfromclient)
- {
- vecs = shotorg_adjustfromclient(vecs, y_is_right, (autocvar_g_shootfromclient >= 2), algn);
- }
- return vecs;
-}
-
-vector shotorg_adjust(vector vecs, float y_is_right, float visual)
-{
- return shotorg_adjust_values(vecs, y_is_right, visual, self.owner.cvar_cl_gunalign);
-}
-
-
void attach_sameorigin(entity e, entity to, string tag)
{
vector org, t_forward, t_left, t_up, e_forward, e_up;
.float scale2;
-float modeleffect_SendEntity(entity to, int sf)
+bool modeleffect_SendEntity(entity this, entity to, int sf)
{
float f;
WriteByte(MSG_ENTITY, ENT_CLIENT_MODELEFFECT);
void modeleffect_spawn(string m, float s, float f, vector o, vector v, vector ang, vector angv, float s0, float s2, float a, float t1, float t2)
{
- entity e;
- float sz;
- e = spawn();
- e.classname = "modeleffect";
- setmodel(e, m);
+ entity e = new(modeleffect);
+ _setmodel(e, m);
e.frame = f;
setorigin(e, o);
e.velocity = v;
e.scale2 = s2 / max6(-e.mins.x, -e.mins.y, -e.mins.z, e.maxs.x, e.maxs.y, e.maxs.z);
else
e.scale2 = -s2;
- sz = max(e.scale, e.scale2);
+ float sz = max(e.scale, e.scale2);
setsize(e, e.mins * sz, e.maxs * sz);
Net_LinkEntity(e, false, 0.1, modeleffect_SendEntity);
}
{
while(iter > 0)
{
- print(ftos(randombit(bits)), "\n");
+ LOG_INFO(ftos(randombit(bits)), "\n");
--iter;
}
}
}
-void defer_think()
-{
- entity oself;
-
- oself = self;
- self = self.owner;
- oself.think = SUB_Remove;
- oself.nextthink = time;
-
- oself.use();
-}
-
-/*
- Execute func() after time + fdelay.
- self when func is executed = self when defer is called
-*/
-void defer(float fdelay, void() func)
-{
- entity e;
-
- e = spawn();
- e.owner = self;
- e.use = func;
- e.think = defer_think;
- e.nextthink = time + fdelay;
-}
-
.string aiment_classname;
.float aiment_deadflag;
void SetMovetypeFollow(entity ent, entity e)
float isPushable(entity e)
{
- if(e.iscreature)
- return true;
if(e.pushable)
return true;
+ if(IS_VEHICLE(e))
+ return false;
+ if(e.iscreature)
+ return true;
switch(e.classname)
{
case "body":