float CSQCModel_Send(entity to, float sf)
{
// some nice flags for CSQCMODEL_IF
- float isplayer = (self.flags & FL_CLIENT);
+ float isplayer = (IS_CLIENT(self));
float islocalplayer = (self == to);
float isnolocalplayer = (isplayer && (self != to));
void CSQCModel_CheckUpdate()
{
// some nice flags for CSQCMODEL_IF
- float isplayer = (self.flags & FL_CLIENT);
+ float isplayer = (IS_CLIENT(self));
float islocalplayer = isplayer; // we set BOTH to 1 here as we need the sendflags
float isnolocalplayer = isplayer; // we set BOTH to 1 here as we need the sendflags
WriteByte(MSG_ENTITY, ENT_CLIENT_ACCURACY);
a = self.owner;
- if(a.classname == "spectator")
+ if(IS_SPEC(a))
a = a.enemy;
a = a.accuracy;
w = pow(2, mod(w, 24));
a.SendFlags |= w;
FOR_EACH_CLIENT(a)
- if(a.classname == "spectator")
+ if(IS_SPEC(a))
if(a.enemy == e)
a.SendFlags |= w;
}
float accuracy_isgooddamage(entity attacker, entity targ)
{
if(!inWarmupStage)
- if(targ.flags & FL_CLIENT)
+ if(IS_CLIENT(targ))
if(targ.deadflag == DEAD_NO)
if(IsDifferentTeam(attacker, targ))
return TRUE;
race_ReadyRestart();
for(self = world; (self = nextent(self)); )
- if(clienttype(self) == CLIENTTYPE_NOTACLIENT)
+ if(IS_NOT_A_CLIENT(self))
{
if(self.reset)
{
// Waypoints and assault start come LAST
for(self = world; (self = nextent(self)); )
- if(clienttype(self) == CLIENTTYPE_NOTACLIENT)
+ if(IS_NOT_A_CLIENT(self))
{
if(self.reset2)
{
// on spawnpoint entities which have to be reset first --blub
if(dorespawn)
FOR_EACH_CLIENT(self) {
- if(self.flags & FL_CLIENT) // reset all players
+ if(IS_CLIENT(self)) // reset all players
{
if(g_arena)
{
}
else if(g_freezetag)
{
- if(self.classname == "player")
+ if(IS_PLAYER(self))
PutClientInServer();
}
else
if (restart_mapalreadyrestarted || (time < game_starttime))
{
//NEW: changed behaviour so that it prevents that previous spectators/observers suddenly spawn as players
- if (self.classname == "player") {
+ if (IS_PLAYER(self)) {
//PlayerScore_Clear(self);
if(g_lms)
PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives());
kh_Controller_SetThink_NoMsg(autocvar_g_balance_keyhunt_delay_round+(game_starttime - time), kh_StartRound);
if(g_arena)
- if(champion && champion.classname == "player" && player_count > 1)
+ if(champion && IS_PLAYER(champion) && player_count > 1)
UpdateFrags(champion, +1);
self = oldself;
if (g_arena) {
FOR_EACH_CLIENT(e)
{
- if(e.spawned && e.classname == "player")
+ if(e.spawned && IS_PLAYER(e))
e.player_blocked = 1;
}
}
entity ent;
for(ent = world; (ent = nextent(ent)); )
{
- if(clienttype(ent) == CLIENTTYPE_NOTACLIENT)
+ if(IS_NOT_A_CLIENT(ent))
{
if(ent.team_saved == COLOR_TEAM1)
ent.team_saved = COLOR_TEAM2;
return FALSE;
}
else if(bot_ignore_bots)
- if(clienttype(e) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(e))
return FALSE;
if (!e.takedamage)
prio = 1;
FOR_EACH_CLIENT(p)
{
- if(clienttype(p) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(p))
if(s == p.cleanname)
{
prio = 0;
i = 0;
FOR_EACH_CLIENT(p)
{
- if(clienttype(p) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(p))
if(p.cleanname == name)
++i;
}
{
player_count = player_count + 1;
e.nextplayer = e.chain;
- if (clienttype(e) == CLIENTTYPE_BOT)
+ if (IS_BOT_CLIENT(e))
{
if (prevbot)
prevbot.nextbot = e;
void bot_clientdisconnect()
{
- if (clienttype(self) != CLIENTTYPE_BOT)
+ if not(IS_BOT_CLIENT(self))
return;
bot_clearqueue(self);
if(self.cleanname)
void bot_clientconnect()
{
- if (clienttype(self) != CLIENTTYPE_BOT)
+ if not(IS_BOT_CLIENT(self))
return;
self.bot_preferredcolors = self.clientcolors;
self.bot_nextthink = time - random();
bestplayer = -1;
FOR_EACH_PLAYER(head)
{
- if(clienttype(head) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(head))
bestplayer = max(bestplayer, head.totalfrags - head.totalfrags_lastcheck);
else
bestbot = max(bestbot, head.totalfrags - head.totalfrags_lastcheck);
FOR_EACH_REALCLIENT(head)
{
- if(head.classname == "player" || g_lms || g_arena || g_ca)
+ if(IS_PLAYER(head) || g_lms || g_arena || g_ca)
++activerealplayers;
++realplayers;
}
}
else
{
- if(self.bot_aimtarg.classname=="player")
+ if(IS_PLAYER(self.bot_aimtarg))
bot_aimdir(self.bot_aimtarg.origin + self.bot_aimtarg.view_ofs - self.origin - self.view_ofs , -1);
}
}
if(self.aistatus & AI_STATUS_ATTACKING)
return;
- if(self.goalcurrent.classname == "player")
+ if(IS_PLAYER(self.goalcurrent))
return;
maxspeed = autocvar_sv_maxspeed;
}
// Don't chase players while using a jump pad
- if(self.goalcurrent.classname=="player" || self.goalstack01.classname=="player")
+ if(IS_PLAYER(self.goalcurrent) || IS_PLAYER(self.goalstack01))
return;
}
}
dodge = dodge * bound(0,0.5+(skill+self.bot_dodgeskill)*0.1,1);
evadelava = evadelava * bound(1,3-(skill+self.bot_dodgeskill),3); //Noobs fear lava a lot and take more distance from it
traceline(self.origin, ( ( self.enemy.absmin + self.enemy.absmax ) * 0.5 ), TRUE, world);
- if(trace_ent.classname == "player")
+ if(IS_PLAYER(trace_ent))
dir = dir * bound(0,(skill+self.bot_dodgeskill)/7,1);
dir = normalize(dir + dodge + evadeobstacle + evadelava);
if ( player.team == self.team )
{
- if ( clienttype(player) != CLIENTTYPE_REAL || discard )
+ if ( !IS_REAL_CLIENT(player) || discard )
continue;
if( d > friend_distance)
// HACK: remove players/bots as goals, they can lead a bot to unexpected places (cliffs, lava, etc)
// TODO: rate waypoints near the targetted player at that moment, instead of the player itself
- if(self.goalcurrent.classname=="player")
+ if(IS_PLAYER(self.goalcurrent))
navigation_poproute();
// aid for detecting jump pads better (distance based check fails sometimes)
void debugnode(vector node)
{
- if not(self.classname=="player")
+ if not(IS_PLAYER(self))
return;
if(debuglastnode=='0 0 0')
bot = findchainflags(flags, FL_CLIENT);
while (bot)
{
- if(clienttype(bot) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(bot))
if(bot.netname==name)
return bot;
bot = findchainflags(flags, FL_CLIENT);
while (bot)
{
- if(clienttype(bot) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(bot))
{
if(++c==number)
return bot;
head = findchain(classname, "player");
while(head)
{
- if(clienttype(head) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(head))
{
if(head.winning)
won = won + 1;
// dead people cannot cheat
if(self.deadflag != DEAD_NO)
return 0;
- if(gamestart_sv_cheats < 2 && self.classname != "player")
+ if(gamestart_sv_cheats < 2 && !IS_PLAYER(self))
return 0;
// sv_clones
return FALSE;
// if(draggee.model == "")
// return FALSE;
- if(draggee.classname == "spectator")
+ if(IS_SPEC(draggee))
return FALSE;
- if(draggee.classname == "observer")
+ if(IS_OBSERVER(draggee))
return FALSE;
if(draggee.classname == "exteriorweaponentity")
return FALSE;
float Drag_CanDrag(entity dragger)
{
- return (dragger.deadflag == DEAD_NO) || (dragger.classname == "player");
+ return (dragger.deadflag == DEAD_NO) || (IS_PLAYER(dragger));
}
float Drag_IsDragging(entity dragger)
}
void AnnounceTo(entity e, string snd) {
- if (clienttype(e) == CLIENTTYPE_REAL)
+ if (IS_REAL_CLIENT(e))
{
msg_entity = e;
WriteByte(MSG_ONE, SVC_TEMPENTITY);
entity e;
e = to;
- if(to.classname == "spectator")
+ if(IS_SPEC(to))
e = to.enemy;
sf = 0;
FOR_EACH_REALCLIENT(e2)
{
if(e2 != e)
- if(e2.classname == "spectator")
+ if(IS_SPEC(e2))
if(e2.enemy == e)
e2.clientdata.SendFlags = 1;
}
if(spot.target == "")
return '-1 0 0';
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
{
if(spot.restriction == 1)
return '-1 0 0';
error("No spawnpoints for observers?!?\n");
RemoveGrapplingHook(self); // Wazat's Grappling Hook
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
{
msg_entity = self;
WriteByte(MSG_ONE, SVC_SETVIEW);
void PutClientInServer (void)
{
- if(clienttype(self) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(self))
{
self.classname = "player";
if(g_ca)
self.caplayer = 1;
}
- else if(clienttype(self) == CLIENTTYPE_REAL)
+ else if(IS_REAL_CLIENT(self))
{
msg_entity = self;
WriteByte(MSG_ONE, SVC_SETVIEW);
if(gameover)
self.classname = "observer";
- if(self.classname == "player" && (!g_ca || (g_ca && allowed_to_spawn))) {
+ if(IS_PLAYER(self) && (!g_ca || (g_ca && allowed_to_spawn))) {
entity spot, oldself;
float j;
self.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_SOLID;
if(autocvar_g_playerclip_collisions)
self.dphitcontentsmask |= DPCONTENTS_PLAYERCLIP;
- if(clienttype(self) == CLIENTTYPE_BOT && autocvar_g_botclip_collisions)
+ if(IS_BOT_CLIENT(self) && autocvar_g_botclip_collisions)
self.dphitcontentsmask |= DPCONTENTS_BOTCLIP;
self.frags = FRAGS_PLAYER;
if(INDEPENDENT_PLAYERS)
if (autocvar_g_spawnsound)
soundat(world, self.origin, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM);
- } else if(self.classname == "observer") {
+ } else if(IS_OBSERVER(self)) {
PutObserverInServer ();
}
}
{
if(self.cnt <= 10)
setmodel(self, strcat("models/sprites/", ftos(self.cnt), ".spr32"));
- if(clienttype(self.owner) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self.owner))
{
if(self.cnt <= 10)
AnnounceTo(self.owner, strcat(ftos(self.cnt), ""));
self.clientkill_nexttime = time + killtime + autocvar_g_balance_kill_antispam;
}
- if(killtime <= 0 || self.classname != "player" || self.deadflag != DEAD_NO)
+ if(killtime <= 0 || !IS_PLAYER(self) || self.deadflag != DEAD_NO)
{
ClientKill_Now();
}
if(targetteam == 0) // just die
{
self.killindicator.colormod = '0 0 0';
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
if(self.killindicator.cnt > 0)
Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "^1Suicide in %d seconds", 1, self.killindicator.cnt);
}
else if(targetteam == -1) // auto
{
self.killindicator.colormod = '0 1 0';
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
if(self.killindicator.cnt > 0)
Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "Changing team in %d seconds", 1, self.killindicator.cnt);
}
else if(targetteam == -2) // spectate
{
self.killindicator.colormod = '0.5 0.5 0.5';
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
if(self.killindicator.cnt > 0)
Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "Spectating in %d seconds", 1, self.killindicator.cnt);
}
else
{
self.killindicator.colormod = TeamColor(targetteam);
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
if(self.killindicator.cnt > 0)
Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, strcat("Changing to ", ColoredTeamName(targetteam), " in %d seconds"), 1, self.killindicator.cnt);
}
if (gameover)
return;
- if((g_arena || g_ca) && ((champion && champion.classname == "player" && player_count > 1) || player_count == 1)) // don't allow a kill in this case either
+ if((g_arena || g_ca) && ((champion && IS_PLAYER(champion) && player_count > 1) || player_count == 1)) // don't allow a kill in this case either
{
// do nothing
}
{
float t;
- if(self.flags & FL_CLIENT)
+ if(IS_CLIENT(self))
{
print("Warning: ClientConnect, but already connected!\n");
return;
// identify the right forced team
if(autocvar_g_campaign)
{
- if(clienttype(self) == CLIENTTYPE_REAL) // only players, not bots
+ if(IS_REAL_CLIENT(self)) // only players, not bots
{
switch(autocvar_g_campaign_forceteam)
{
PlayerStats_AddEvent(sprintf("kills-%d", self.playerid));
- if(clienttype(self) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(self))
PlayerStats_AddPlayer(self);
if(autocvar_sv_eventlog)
- GameLogEcho(strcat(":join:", ftos(self.playerid), ":", ftos(num_for_edict(self)), ":", ((clienttype(self) == CLIENTTYPE_REAL) ? self.netaddress : "bot"), ":", self.netname));
+ GameLogEcho(strcat(":join:", ftos(self.playerid), ":", ftos(num_for_edict(self)), ":", ((IS_REAL_CLIENT(self)) ? self.netaddress : "bot"), ":", self.netname));
LogTeamchange(self.playerid, self.team, 1);
bprint("^4", self.netname, "^4 connected");
- if(self.classname != "observer" && (g_domination || g_ctf))
+ if(!IS_OBSERVER(self) && (g_domination || g_ctf))
bprint(" and joined the ", ColoredTeamName(self.team));
bprint("\n");
self.jointime = time;
self.allowed_timeouts = autocvar_sv_timeout_number;
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
{
if(autocvar_g_bugrigs || WEPSET_EQ_AW(g_weaponarena_weapons, WEP_TUBA))
stuffcmd(self, "cl_cmd settemp chase_active 1\n");
self.model_randomizer = random();
- if(clienttype(self) != CLIENTTYPE_REAL)
+ if not(IS_REAL_CLIENT(self))
return;
sv_notice_join();
if(self.vehicle)
vehicles_exit(VHEF_RELESE);
- if not(self.flags & FL_CLIENT)
+ if not(IS_CLIENT(self))
{
print("Warning: ClientDisconnect without ClientConnect\n");
return;
void play_countdown(float finished, string samp)
{
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
if(floor(finished - time - frametime) != floor(finished - time))
if(finished - time < 6)
sound (self, CH_INFO, samp, VOL_BASE, ATTN_NORM);
if (self == self.enemy)
return 0;
- if(self.enemy.classname != "player")
+ if not(IS_PLAYER(self.enemy))
return 0;
SpectateCopy(self.enemy);
if (other)
self.enemy = other;
- if(self.enemy.classname == "player") {
+ if(IS_PLAYER(self.enemy)) {
/*if(self.enemy.vehicle)
{
PutClientInServer();
- if(self.classname == "player")
+ if(IS_PLAYER(self))
bprint ("^4", self.netname, "^4 is playing now\n");
if(!autocvar_g_campaign)
* g_maxplayers_spectator_blocktime seconds
*/
void checkSpectatorBlock() {
- if(self.classname == "spectator" || self.classname == "observer") {
+ if(IS_SPEC(self) || IS_OBSERVER(self)) {
if( time > (self.spectatortime + autocvar_g_maxplayers_spectator_blocktime) ) {
sprint(self, "^7You were kicked from the server because you are spectator and spectators aren't allowed at the moment.\n");
dropclient(self);
{
if (self.motd_actived_time == 0) { // is there already a message showing?
if (autocvar_g_campaign) {
- if ((self.classname == "player" && self.BUTTON_INFO) || (self.classname != "player")) {
+ if ((IS_PLAYER(self) && self.BUTTON_INFO) || (!IS_PLAYER(self))) {
self.motd_actived_time = time;
Send_CSQC_Centerprint_Generic(self, CPID_MOTD, campaign_message, -1, 0);
}
if (autocvar_g_campaign) {
if (self.BUTTON_INFO)
self.motd_actived_time = time;
- else if ((time - self.motd_actived_time > 2) && self.classname == "player") { // hide it some seconds after BUTTON_INFO has been released
+ else if ((time - self.motd_actived_time > 2) && IS_PLAYER(self)) { // hide it some seconds after BUTTON_INFO has been released
self.motd_actived_time = 0;
Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD);
}
void PlayerUseKey()
{
- if(self.classname != "player")
+ if not(IS_PLAYER(self))
return;
if(self.vehicle)
PrintWelcomeMessage();
- if(self.classname == "player") {
+ if(IS_PLAYER(self)) {
// if(self.netname == "Wazat")
// bprint(self.classname, "\n");
if(g_touchexplode)
if(time > self.touchexplode_time)
- if(self.classname == "player")
+ if(IS_PLAYER(self))
if(self.deadflag == DEAD_NO)
if not(IS_INDEPENDENT_PLAYER(self))
FOR_EACH_PLAYER(other) if(self != other)
if (intermission_running)
IntermissionThink (); // otherwise a button could be missed between
return;
- } else if(self.classname == "observer") {
+ } else if(IS_OBSERVER(self)) {
ObserverThink();
- } else if(self.classname == "spectator") {
+ } else if(IS_SPEC(self)) {
SpectatorThink();
}
float oldspectatee_status;
oldspectatee_status = self.spectatee_status;
- if(self.classname == "spectator")
+ if(IS_SPEC(self))
self.spectatee_status = num_for_edict(self.enemy);
- else if(self.classname == "observer")
+ else if(IS_OBSERVER(self))
self.spectatee_status = num_for_edict(self);
else
self.spectatee_status = 0;
//CheckPlayerJump();
- if(self.classname == "player") {
+ if(IS_PLAYER(self)) {
CheckRules_Player();
UpdateChatBubble();
if (self.impulse)
self.punchvector = '0 0 0';
}
- if (clienttype(self) == CLIENTTYPE_BOT)
+ if (IS_BOT_CLIENT(self))
{
if(playerdemo_read())
return;
self.items &~= IT_USING_JETPACK;
- if(self.classname == "player")
+ if(IS_PLAYER(self))
{
if(self.race_penalty)
if(time > self.race_penalty)
if(self.conveyor.state)
self.velocity -= self.conveyor.movedir;
- if(self.classname != "player")
+ if not(IS_PLAYER(self))
{
maxspd_mod = autocvar_sv_spectator_speed_multiplier;
if(!self.spectatorspeed)
}
if(self.flags & FL_ONGROUND)
- if(self.classname == "player") // no fall sounds for observers thank you very much
+ if(IS_PLAYER(self)) // no fall sounds for observers thank you very much
if(self.wasFlying)
{
self.wasFlying = 0;
if(IsFlying(self))
self.wasFlying = 1;
- if(self.classname == "player")
+ if(IS_PLAYER(self))
CheckPlayerJump();
if (self.flags & FL_WATERJUMP )
self.teleport_time = 0;
}
}
- else if (g_bugrigs && self.classname == "player")
+ else if (g_bugrigs && IS_PLAYER(self))
{
RaceCarPhysics();
}
}
}
- if((g_cts || g_race) && self.classname != "observer") {
+ if((g_cts || g_race) && !IS_OBSERVER(self)) {
if(vlen(self.velocity - self.velocity_z * '0 0 1') > speedaward_speed) {
speedaward_speed = vlen(self.velocity - self.velocity_z * '0 0 1');
speedaward_holder = self.netname;
//self.pushltime = 0;
self.istypefrag = 0;
}
- else if(attacker.classname == "player")
+ else if(IS_PLAYER(attacker))
{
self.pusher = attacker;
self.pushltime = time + autocvar_g_maxpushtime;
self.dmg_take = self.dmg_take + take;//max(take - 10, 0);
self.dmg_inflictor = inflictor;
- if(g_ca && self != attacker && attacker.classname == "player")
+ if(g_ca && self != attacker && IS_PLAYER(attacker))
PlayerScore_Add(attacker, SP_SCORE, (damage - excess) * autocvar_g_ca_damage2score_multiplier);
float abot, vbot, awep;
- abot = (clienttype(attacker) == CLIENTTYPE_BOT);
- vbot = (clienttype(self) == CLIENTTYPE_BOT);
+ abot = (IS_BOT_CLIENT(attacker));
+ vbot = (IS_BOT_CLIENT(self));
valid_damage_for_weaponstats = 0;
awep = 0;
- if(vbot || clienttype(self) == CLIENTTYPE_REAL)
- if(abot || clienttype(attacker) == CLIENTTYPE_REAL)
+ if(vbot || IS_REAL_CLIENT(self))
+ if(abot || IS_REAL_CLIENT(attacker))
if(attacker && self != attacker)
if(IsDifferentTeam(self, attacker))
{
Portal_ClearAllLater(self);
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
{
stuffcmd(self, "-zoom\n");
self.fixangle = TRUE;
msgin = formatmessage(msgin);
- if(source.classname != "player")
+ if not(IS_PLAYER(source))
colorstr = "^0"; // black for spectators
else if(teamplay)
colorstr = Team_ColorCode(source.team);
}
if(!privatesay)
- if(source.classname != "player")
+ if not(IS_PLAYER(source))
{
if not(intermission_running)
if(teamsay || (autocvar_g_chat_nospectators == 1) || (autocvar_g_chat_nospectators == 2 && !(inWarmupStage || gameover)))
{
sprint(source, sourcemsgstr);
//print(msgstr); // send to server console too
- FOR_EACH_REALCLIENT(head) if(head.classname != "player")
+ FOR_EACH_REALCLIENT(head) if not(IS_PLAYER(head))
if(head != source)
sprint(head, msgstr);
}
if(self.pusher)
{
msg_entity = self;
- if(clienttype(msg_entity) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(msg_entity))
soundto(MSG_ONE, self, chan, sample, VOL_BASE, ATTN_NONE);
}
break;
}
break;
case VOICETYPE_TAUNT:
- if(self.classname == "player")
+ if(IS_PLAYER(self))
if(self.deadflag == DEAD_NO)
animdecide_setaction(self, ANIMACTION_TAUNT, TRUE);
if(!sv_taunt)
if(self.pusher)
{
msg_entity = self.pusher;
- if(clienttype(msg_entity) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(msg_entity))
{
if(msg_entity.cvar_cl_voice_directional == 1)
soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_MIN);
if(self.pusher)
{
msg_entity = self.pusher;
- if(clienttype(msg_entity) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(msg_entity))
{
if(msg_entity.cvar_cl_voice_directional == 1)
soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_MIN);
soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_NONE);
}
msg_entity = self;
- if(clienttype(msg_entity) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(msg_entity))
soundto(MSG_ONE, self, chan, sample, VOL_BASE, ATTN_NONE);
}
break;
}
break;
case VOICETYPE_TAUNT:
- if(self.classname == "player")
+ if(IS_PLAYER(self))
if(self.deadflag == DEAD_NO)
animdecide_setaction(self, ANIMACTION_TAUNT, TRUE);
if(!sv_taunt)
lag = ANTILAG_LATENCY(player);
if(lag < 0.001)
lag = 0;
- if(clienttype(player) != CLIENTTYPE_REAL)
+ if not(IS_REAL_CLIENT(player))
lag = 0; // only antilag for clients
org = player.origin + player.view_ofs;
traceline_antilag_force(player, org, org + screenforward * MAX_SHOT_DISTANCE, MOVE_NORMAL, player, lag);
- if(trace_ent.flags & FL_CLIENT)
+ if(IS_CLIENT(trace_ent))
{
antilag_takeback(trace_ent, time - lag);
hitplot = W_HitPlotNormalizedUntransform(org, trace_ent, screenforward, screenright, screenup, trace_endpos);
if (!trace_ent.takedamage)
{
traceline_antilag_force (ent, w_shotorg, w_shotorg + w_shotdir * range, MOVE_NORMAL, ent, ANTILAG_LATENCY(ent));
- if (trace_ent.takedamage && trace_ent.classname == "player")
+ if (trace_ent.takedamage && IS_PLAYER(trace_ent))
{
entity e;
e = trace_ent;
if (ent.cursor_trace_ent) // client was aiming at someone
if (ent.cursor_trace_ent != ent) // just to make sure
if (ent.cursor_trace_ent.takedamage) // and that person is killable
- if (ent.cursor_trace_ent.classname == "player") // and actually a player
+ if (IS_PLAYER(ent.cursor_trace_ent)) // and actually a player
{
// verify that the shot would miss without antilag
// (avoids an issue where guns would always shoot at their origin)
float CL_Weaponentity_CustomizeEntityForClient()
{
self.viewmodelforclient = self.owner;
- if(other.classname == "spectator")
+ if(IS_SPEC(other))
if(other.enemy == self.owner)
self.viewmodelforclient = other;
return TRUE;
if (!f)
{
if (complain)
- if(clienttype(cl) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(cl))
{
play2(cl, "weapons/unavailable.wav");
sprint(cl, strcat("You don't have any ammo for the ^2", W_Name(wpn), "\n"));
if(!self.(self.current_ammo) && self.reload_ammo_min)
if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
{
- if(clienttype(self) == CLIENTTYPE_REAL && self.reload_complain < time)
+ if(IS_REAL_CLIENT(self) && self.reload_complain < time)
{
play2(self, "weapons/unavailable.wav");
sprint(self, strcat("You don't have enough ammo to reload the ^2", W_Name(self.weapon), "\n"));
{
if(argv(1) != "")
{
- if(self.flags & FL_CLIENT)
+ if(IS_CLIENT(self))
{
self.version = ((argv(1) == "$gameversion") ? 1 : stof(argv(1)));
{
case CMD_REQUEST_COMMAND:
{
- if(self.flags & FL_CLIENT)
+ if(IS_CLIENT(self))
{
- if(self.classname != "player" && !lockteams && !g_arena)
+ if(!IS_PLAYER(self) && !lockteams && !g_arena)
{
if(nJoinAllowed(self))
{
{
case CMD_REQUEST_COMMAND:
{
- if(self.flags & FL_CLIENT)
+ if(IS_CLIENT(self))
{
if(inWarmupStage || autocvar_sv_ready_restart || g_race_qualifying == 2)
{
{
if(argv(1) != "")
{
- if(self.flags & FL_CLIENT)
+ if(IS_CLIENT(self))
{
if(teamplay)
if not(self.team_forced > 0)
{
case CMD_REQUEST_COMMAND:
{
- if(self.flags & FL_CLIENT)
+ if(IS_CLIENT(self))
{
if(g_arena) { return; }
if(g_lms)
}
}
- if(self.classname == "player" && autocvar_sv_spectate == 1)
+ if(IS_PLAYER(self) && autocvar_sv_spectate == 1)
ClientKill_TeamChange(-2); // observe
// in CA, allow a dead player to move to spectators (without that, caplayer!=0 will be moved back to the player list)
// note: if arena game mode is ever done properly, this needs to be removed.
- if(g_ca && self.caplayer && (self.classname == "spectator" || self.classname == "observer"))
+ if(g_ca && self.caplayer && (IS_SPEC(self) || IS_OBSERVER(self)))
{
sprint(self, "WARNING: you will spectate in the next round.\n");
self.caplayer = 0;
// verify that the client provided is acceptable for use
float VerifyClientEntity(entity client, float must_be_real, float must_be_bots)
{
- if not(client.flags & FL_CLIENT)
+ if not(IS_CLIENT(client))
return CLIENT_DOESNT_EXIST;
- else if(must_be_real && (clienttype(client) != CLIENTTYPE_REAL))
+ else if(must_be_real && !IS_REAL_CLIENT(client))
return CLIENT_NOT_REAL;
- else if(must_be_bots && (clienttype(client) != CLIENTTYPE_BOT))
+ else if(must_be_bots && !IS_BOT_CLIENT(client))
return CLIENT_NOT_BOT;
return CLIENT_ACCEPTABLE;
else if(inWarmupStage && !g_warmup_allow_timeout) { print_to(caller, "^7Error: You can not call a timeout in warmup-stage."); }
else if(time < game_starttime) { print_to(caller, "^7Error: You can not call a timeout while the map is being restarted."); }
else if(caller && (caller.allowed_timeouts < 1)) { print_to(caller, "^7Error: You already used all your timeout calls for this map."); }
- else if(caller && (caller.classname != "player")) { print_to(caller, "^7Error: You must be a player to call a timeout."); }
+ else if(caller && !IS_PLAYER(caller)) { print_to(caller, "^7Error: You must be a player to call a timeout."); }
else if((autocvar_timelimit) && (last_possible_timeout < time - game_starttime)) { print_to(caller, "^7Error: It is too late to call a timeout now!"); }
else // everything should be okay, proceed with starting the timeout
total_listed_players = 0;
FOR_EACH_CLIENT(tmp_player)
{
- is_bot = (clienttype(tmp_player) == CLIENTTYPE_BOT);
+ is_bot = (IS_BOT_CLIENT(tmp_player));
if(is_bot)
{
// Where are we putting this player?
if(destination == "spec" || destination == "spectator")
{
- if(client.classname != "spectator" && client.classname != "observer")
+ if(!IS_SPEC(client) && !IS_OBSERVER(client))
{
self = client;
PutObserverInServer();
}
else
{
- if(client.classname != "spectator" && client.classname != "observer")
+ if(!IS_SPEC(client) && !IS_OBSERVER(client))
{
if(teamplay)
{
entity plr;
FOR_EACH_CLIENT(plr) //give every spectator <g_maxplayers_spectator_blocktime> seconds time to become a player
{
- if(plr.classname == "spectator" || plr.classname == "observer")
+ if(IS_SPEC(plr) || IS_OBSERVER(plr))
{
plr.spectatortime = time;
sprint(plr, strcat("^7You have to become a player within the next ", ftos(autocvar_g_maxplayers_spectator_blocktime), " seconds, otherwise you will be kicked, because spectators aren't allowed at this time!\n"));
for(i = 1; i <= maxclients; i += 8)
{
for(f = 0, e = edict_num(i), b = 1; b < 256; b *= 2, e = nextent(e))
- if(clienttype(e) != CLIENTTYPE_REAL || e.ready)
+ if(!IS_REAL_CLIENT(e) || e.ready)
f |= b;
WriteByte(MSG_ENTITY, f);
}
|| ((autocvar_sv_vote_nospectators == 1) && (inWarmupStage || gameover))
|| (autocvar_sv_vote_nospectators == 0));
- float vote_player_count = 0, is_player, notvoters = 0;
+ float vote_player_count = 0, notvoters = 0;
float vote_real_player_count = 0, vote_real_accept_count = 0;
float vote_real_reject_count = 0, vote_real_abstain_count = 0;
float vote_needed_of_voted, final_needed_votes;
// add up all the votes from each connected client
FOR_EACH_REALCLIENT(tmp_player)
{
- is_player = (tmp_player.classname == "player");
-
++vote_player_count;
- if(is_player) { ++vote_real_player_count; }
+ if(IS_PLAYER(tmp_player)) { ++vote_real_player_count; }
switch(tmp_player.vote_selection)
{
- case VOTE_SELECT_REJECT: { ++vote_reject_count; { if(is_player) ++vote_real_reject_count; } break; }
- case VOTE_SELECT_ACCEPT: { ++vote_accept_count; { if(is_player) ++vote_real_reject_count; } break; }
- case VOTE_SELECT_ABSTAIN: { ++vote_abstain_count; { if(is_player) ++vote_real_abstain_count; } break; }
+ case VOTE_SELECT_REJECT: { ++vote_reject_count; { if(IS_PLAYER(tmp_player)) ++vote_real_reject_count; } break; }
+ case VOTE_SELECT_ACCEPT: { ++vote_accept_count; { if(IS_PLAYER(tmp_player)) ++vote_real_reject_count; } break; }
+ case VOTE_SELECT_ABSTAIN: { ++vote_abstain_count; { if(IS_PLAYER(tmp_player)) ++vote_real_abstain_count; } break; }
default: break;
}
}
if not(autocvar_sv_vote_call || !caller) { print_to(caller, "^1Vote calling is not allowed."); }
else if(!autocvar_sv_vote_gamestart && time < game_starttime) { print_to(caller, "^1Vote calling is not allowed before the match has started."); }
else if(vote_called) { print_to(caller, "^1There is already a vote called."); }
- else if(!spectators_allowed && (caller && (caller.classname != "player"))) { print_to(caller, "^1Only players can call a vote."); }
+ else if(!spectators_allowed && (caller && !IS_PLAYER(caller))) { print_to(caller, "^1Only players can call a vote."); }
else if(timeout_status) { print_to(caller, "^1You can not call a vote while a timeout is active."); }
else if(caller && (time < caller.vote_waittime)) { print_to(caller, strcat("^1You have to wait ^2", ftos(ceil(caller.vote_waittime - time)), "^1 seconds before you can again call a vote.")); }
else if not(VoteCommand_checknasty(vote_command)) { print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); }
if not(autocvar_sv_vote_master_callable) { print_to(caller, "^1Vote to become vote master is not allowed."); }
else if(vote_called) { print_to(caller, "^1There is already a vote called."); }
- else if(!spectators_allowed && (caller && (caller.classname != "player"))) { print_to(caller, "^1Only players can call a vote."); }
+ else if(!spectators_allowed && (caller && !IS_PLAYER(caller))) { print_to(caller, "^1Only players can call a vote."); }
else if(timeout_status) { print_to(caller, "^1You can not call a vote while a timeout is active."); }
else // everything went okay, continue with creating vote
o = self.owner;
if(o.deadflag != DEAD_NO)
return FALSE;
- if(o.classname != "player")
+ if not(IS_PLAYER(o))
return FALSE;
if(other == o)
return FALSE;
- if((other.classname == "player") || other.caplayer)
+ if((IS_PLAYER(other)) || other.caplayer)
if(!teamplay || o.team != other.team)
if not (radar_showennemies)
return FALSE;
// ping display
if(autocvar_sv_fraginfo_ping)
- ping_output = ((clienttype(player) == CLIENTTYPE_BOT) ? "^2Bot" : strcat("Ping ", ((player.ping >= 150) ? "^1" : "^2"), ftos(rint(player.ping)), "ms"));
+ ping_output = ((IS_BOT_CLIENT(player)) ? "^2Bot" : strcat("Ping ", ((player.ping >= 150) ? "^1" : "^2"), ftos(rint(player.ping)), "ms"));
// handicap display
if(autocvar_sv_fraginfo_handicap)
// Function is used to send a generic centerprint whose content CSQC gets to decide (gentle version or not in the below cases)
void Send_CSQC_KillCenterprint(entity e, string s1, string s2, float msg, float type)
{
- if (clienttype(e) == CLIENTTYPE_REAL)
+ if (IS_REAL_CLIENT(e))
{
msg_entity = e;
WRITESPECTATABLE_MSG_ONE({
string s, a, msg;
float type;
- if (targ.classname == "player")
+ if (IS_PLAYER(targ))
{
s = targ.netname;
a = attacker.netname;
Send_KillNotification(s, msg, "", deathtype, MSG_SUICIDE);
}
- else if (attacker.classname == "player")
+ else if (IS_PLAYER(attacker))
{
if(!IsDifferentTeam(attacker, targ))
{
damage_attacker = attacker;
attacker_save = attacker;
- if(targ.classname == "player")
+ if(IS_PLAYER(targ))
if(targ.hook)
if(targ.hook.aiment)
if(targ.hook.aiment == attacker)
// special rule: gravity bomb does not hit team mates (other than for disconnecting the hook)
if(DEATH_ISWEAPON(deathtype, WEP_HOOK) || DEATH_ISWEAPON(deathtype, WEP_TUBA))
{
- if(targ.classname == "player")
+ if(IS_PLAYER(targ))
if not(IsDifferentTeam(targ, attacker))
{
self = oldself;
}
else
{
- /*
- skill based bot damage? gtfo. (tZork)
- if (targ.classname == "player")
- if (attacker.classname == "player")
- if (!targ.isbot)
- if (attacker.isbot)
- damage = damage * bound(0.1, (skill + 5) * 0.1, 1);
- */
-
// nullify damage if teamplay is on
if(deathtype != DEATH_TELEFRAG)
- if(attacker.classname == "player")
+ if(IS_PLAYER(attacker))
{
- if(targ.classname == "player" && targ != attacker && (IS_INDEPENDENT_PLAYER(attacker) || IS_INDEPENDENT_PLAYER(targ)))
+ if(IS_PLAYER(targ) && targ != attacker && (IS_INDEPENDENT_PLAYER(attacker) || IS_INDEPENDENT_PLAYER(targ)))
{
damage = 0;
force = '0 0 0';
damage = 0;
else if(autocvar_teamplay_mode == 4)
{
- if(targ.classname == "player" && targ.deadflag == DEAD_NO)
+ if(IS_PLAYER(targ) && targ.deadflag == DEAD_NO)
{
attacker.dmg_team = attacker.dmg_team + damage;
complainteamdamage = attacker.dmg_team - autocvar_g_teamdamage_threshold;
}
}
- if(targ.classname == "player")
- if(attacker.classname == "player")
+ if(IS_PLAYER(targ))
+ if(IS_PLAYER(attacker))
if(attacker != targ)
{
targ.lms_traveled_distance = autocvar_g_lms_campcheck_distance;
attacker.lms_traveled_distance = autocvar_g_lms_campcheck_distance;
}
- if(targ.classname == "player")
+ if(IS_PLAYER(targ))
if (g_minstagib)
{
if ((deathtype == DEATH_FALL) ||
complainteamdamage = 0;
if (targ != attacker)
{
- if ((targ.health >= 1) && (targ.classname == "player"))
+ if ((targ.health >= 1) && (IS_PLAYER(targ)))
centerprint(attacker, "Secondary fire inflicts no damage!");
force = '0 0 0';
// keep mirrorforce
else
victim = targ;
- if(victim.classname == "player" || victim.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
+ if(IS_PLAYER(victim) || victim.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
{
if(IsDifferentTeam(victim, attacker))
{
if not(DEATH_ISSPECIAL(deathtype))
{
- if(targ.classname == "player") // don't do this for vehicles
+ if(IS_PLAYER(targ)) // don't do this for vehicles
if(!g_minstagib)
if(IsFlying(victim))
yoda = 1;
// apply push
if (self.damageforcescale)
if (vlen(force))
- if (self.classname != "player" || time >= self.spawnshieldtime || g_midair)
+ if (!IS_PLAYER(self) || time >= self.spawnshieldtime || g_midair)
{
vector farce = damage_explosion_calcpush(self.damageforcescale * force, self.velocity, autocvar_g_balance_damagepush_speedfactor);
if(self.movetype == MOVETYPE_PHYSICS)
self.event_damage (inflictor, attacker, damage, deathtype, hitloc, force);
self = oldself;
- if(targ.classname == "player" && attacker.classname == "player" && attacker != targ && attacker.health > 2)
+ if(IS_PLAYER(targ) && IS_PLAYER(attacker) && attacker != targ && attacker.health > 2)
{
if(g_runematch)
{
if(autocvar_g_throughfloor_debug)
print(sprintf(" steps=%f", total));
- if (targ.classname == "player")
+ if (IS_PLAYER(targ))
total = ceil(bound(autocvar_g_throughfloor_min_steps_player, total, autocvar_g_throughfloor_max_steps_player));
else
total = ceil(bound(autocvar_g_throughfloor_min_steps_other, total, autocvar_g_throughfloor_max_steps_other));
float dps;
float maxtime, mintime, maxdamage, mindamage, maxdps, mindps, totaldamage, totaltime;
- if(e.classname == "player")
+ if(IS_PLAYER(e))
{
if(e.deadflag)
return -1;
return;
for(t = 0, o = e.owner; o.owner && t < 16; o = o.owner, ++t);
- if(clienttype(o) == CLIENTTYPE_NOTACLIENT)
+ if(IS_NOT_A_CLIENT(o))
o = e.fire_owner;
// water and slime stop fire
if not(IS_INDEPENDENT_PLAYER(e))
FOR_EACH_PLAYER(other) if(e != other)
{
- if(other.classname == "player")
+ if(IS_PLAYER(other))
if(other.deadflag == DEAD_NO)
if not(IS_INDEPENDENT_PLAYER(other))
if(boxesoverlap(e.absmin, e.absmax, other.absmin, other.absmax))
*/
void SUB_VanishOrRemove (entity ent)
{
- if (ent.flags & FL_CLIENT)
+ if (IS_CLIENT(ent))
{
// vanish
ent.alpha = -1;
*/
void SUB_SetFade (entity ent, float when, float fadetime)
{
- //if (ent.flags & FL_CLIENT) // && ent.deadflag != DEAD_NO)
- // return;
- //ent.alpha = 1;
ent.fade_rate = 1/fadetime;
ent.think = SUB_SetFade_Think;
ent.nextthink = when;
// check whether antilagged traces are enabled
if (lag < 0.001)
lag = 0;
- if (clienttype(forent) != CLIENTTYPE_REAL)
+ if not(IS_REAL_CLIENT(forent))
lag = 0; // only antilag for clients
// change shooter to SOLID_BBOX so the shot can hit corpses
//
// print the message
//
- if (activator.classname == "player" && self.message != "")
+ if (IS_PLAYER(activator) && self.message != "")
{
- if(clienttype(activator) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(activator))
{
centerprint (activator, self.message);
if (self.noise == "")
if (self.classname == "trigger_secret")
{
- if (self.enemy.classname != "player")
+ if not(IS_PLAYER(self.enemy))
return;
found_secrets = found_secrets + 1;
WriteByte (MSG_ALL, SVC_FOUNDSECRET);
if (self.count != 0)
{
- if (activator.classname == "player"
+ if (IS_PLAYER(activator)
&& (self.spawnflags & SPAWNFLAG_NOMESSAGE) == 0)
{
if (self.count >= 4)
return;
}
- if (activator.classname == "player"
+ if (IS_PLAYER(activator)
&& (self.spawnflags & SPAWNFLAG_NOMESSAGE) == 0)
centerprint(activator, "Sequence completed!");
self.enemy = activator;
void trigger_hurt_use()
{
- if(activator.classname == "player")
+ if(IS_PLAYER(activator))
self.enemy = activator;
else
self.enemy = world; // let's just destroy it, if taking over is too much work
entity own;
own = self.enemy;
- if(own.classname != "player")
+ if not(IS_PLAYER(own))
{
own = self;
self.enemy = world; // I still hate you all
void target_speaker_use_off();
void target_speaker_use_activator()
{
- if(clienttype(activator) != CLIENTTYPE_REAL)
+ if not(IS_REAL_CLIENT(activator))
return;
string snd;
if(substring(self.noise, 0, 1) == "*")
return;
if(vs.message == "")
return;
- if(pl.classname != "player")
+ if not(IS_PLAYER(pl))
return;
if(gameover)
return;
magicear_matched = FALSE;
- dotrigger = ((source.classname == "player") && (source.deadflag == DEAD_NO) && ((ear.radius == 0) || (vlen(source.origin - ear.origin) <= ear.radius)));
+ dotrigger = ((IS_PLAYER(source)) && (source.deadflag == DEAD_NO) && ((ear.radius == 0) || (vlen(source.origin - ear.origin) <= ear.radius)));
domatch = ((ear.spawnflags & 32) || dotrigger);
if not(domatch)
self.nextthink = time + delta;
e = edict_num(self.cnt + 1);
- if(clienttype(e) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(e))
{
WriteByte(MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte(MSG_BROADCAST, TE_CSQC_PINGPLREPORT);
&& ((self.autoscreenshot > 0) && (time > self.autoscreenshot)) )
{
self.autoscreenshot = -1;
- if(clienttype(self) == CLIENTTYPE_REAL) { stuffcmd(self, sprintf("\nscreenshot screenshots/autoscreenshot/%s-%s.jpg; echo \"^5A screenshot has been taken at request of the server.\"", GetMapname(), strftime(FALSE, "%s"))); }
+ if(IS_REAL_CLIENT(self)) { stuffcmd(self, sprintf("\nscreenshot screenshots/autoscreenshot/%s-%s.jpg; echo \"^5A screenshot has been taken at request of the server.\"", GetMapname(), strftime(FALSE, "%s"))); }
return;
}
FOR_EACH_CLIENT(other)
{
- if ((clienttype(other) == CLIENTTYPE_REAL) || (clienttype(other) == CLIENTTYPE_BOT && autocvar_sv_logscores_bots))
+ if ((IS_REAL_CLIENT(other)) || (IS_BOT_CLIENT(other) && autocvar_sv_logscores_bots))
{
s = strcat(":player:see-labels:", GetPlayerScoreString(other, 0), ":");
s = strcat(s, ftos(rint(time - other.jointime)), ":");
- if(other.classname == "player" || g_arena || g_ca || g_lms)
+ if(IS_PLAYER(other) || g_arena || g_ca || g_lms)
s = strcat(s, ftos(other.team), ":");
else
s = strcat(s, "spectator:");
if (e.weaponentity.weaponentity)
e.weaponentity.weaponentity.effects = EF_NODRAW;
}
- if(clienttype(e) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(e))
{
stuffcmd(e, "\nscr_printspeed 1000000\n");
s = autocvar_sv_intermission_cdtrack;
{
other.health = 2342;
other.impulse = 0;
- if(clienttype(other) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(other))
{
msg_entity = other;
WriteByte(MSG_ONE, SVC_FINALE);
float altime;
FOR_EACH_REALCLIENT(self)
{
- if(self.classname == "spectator")
+ if(IS_SPEC(self))
{
if(self.enemy.typehitsound)
self.typehit_time = time;
* Key touch handler.
*/
void item_key_touch(void) {
- if (other.classname != "player")
+ if not(IS_PLAYER(other))
return;
// player already picked up this key
started_delay = FALSE;
// only player may trigger the lock
- if (other.classname != "player")
+ if not(IS_PLAYER(other))
return;
string STR_SPECTATOR = "spectator";
string STR_OBSERVER = "observer";
-#if 0
-#define FOR_EACH_CLIENT(v) for(v = world; (v = findflags(v, flags, FL_CLIENT)) != world; )
-#define FOR_EACH_REALCLIENT(v) FOR_EACH_CLIENT(v) if(clienttype(v) == CLIENTTYPE_REAL)
-#define FOR_EACH_PLAYER(v) for(v = world; (v = find(v, classname, STR_PLAYER)) != world; )
-#define FOR_EACH_REALPLAYER(v) FOR_EACH_PLAYER(v) if(clienttype(v) == CLIENTTYPE_REAL)
-#else
+#define IS_PLAYER(v) (v.classname == STR_PLAYER)
+#define IS_SPEC(v) (v.classname == STR_SPECTATOR)
+#define IS_OBSERVER(v) (v.classname == STR_OBSERVER)
+#define IS_CLIENT(v) (v.flags & FL_CLIENT)
+#define IS_BOT_CLIENT(v) (clienttype(v) == CLIENTTYPE_BOT)
+#define IS_REAL_CLIENT(v) (clienttype(v) == CLIENTTYPE_REAL)
+#define IS_NOT_A_CLIENT(v) (clienttype(v) == CLIENTTYPE_NOTACLIENT)
+
#define FOR_EACH_CLIENTSLOT(v) for(v = world; (v = nextent(v)) && (num_for_edict(v) <= maxclients); )
-#define FOR_EACH_CLIENT(v) FOR_EACH_CLIENTSLOT(v) if(v.flags & FL_CLIENT)
-#define FOR_EACH_REALCLIENT(v) FOR_EACH_CLIENT(v) if(clienttype(v) == CLIENTTYPE_REAL)
-#define FOR_EACH_PLAYER(v) FOR_EACH_CLIENT(v) if(v.classname == STR_PLAYER)
-#define FOR_EACH_SPEC(v) FOR_EACH_CLIENT(v) if(v.classname != STR_PLAYER)
-#define FOR_EACH_REALPLAYER(v) FOR_EACH_REALCLIENT(v) if(v.classname == STR_PLAYER)
-#endif
+#define FOR_EACH_CLIENT(v) FOR_EACH_CLIENTSLOT(v) if(IS_CLIENT(v))
+#define FOR_EACH_REALCLIENT(v) FOR_EACH_CLIENT(v) if(IS_REAL_CLIENT(v))
+
+#define FOR_EACH_PLAYER(v) FOR_EACH_CLIENT(v) if(IS_PLAYER(v))
+#define FOR_EACH_SPEC(v) FOR_EACH_CLIENT(v) if not(IS_PLAYER(v)) // Samual: shouldn't this be IS_SPEC(v)? and rather create a separate macro to include observers too
+#define FOR_EACH_REALPLAYER(v) FOR_EACH_REALCLIENT(v) if(IS_PLAYER(v))
-#define CENTER_OR_VIEWOFS(ent) (ent.origin + ((ent.classname == STR_PLAYER) ? ent.view_ofs : ((ent.mins + ent.maxs) * 0.5)))
+#define CENTER_OR_VIEWOFS(ent) (ent.origin + (IS_PLAYER(ent) ? ent.view_ofs : ((ent.mins + ent.maxs) * 0.5)))
// copies a string to a tempstring (so one can strunzone it)
string strcat1(string s) = #115; // FRIK_FILE
// TODO replace by MSG_ALL (would show it to spectators too, though)?
entity head;
FOR_EACH_PLAYER(head)
- if (clienttype(head) == CLIENTTYPE_REAL)
+ if (IS_REAL_CLIENT(head))
centerprint(head, s);
}
string playername(entity p)
{
string t;
- if (teamplay && !intermission_running && p.classname == "player")
+ if (teamplay && !intermission_running && IS_PLAYER(p))
{
t = Team_ColorCode(p.team);
return strcat(t, strdecolorize(p.netname));
return TRUE;
// sounds by players can be removed
if (autocvar_bot_sound_monopoly)
- if (clienttype(e) == CLIENTTYPE_REAL)
+ if (IS_REAL_CLIENT(e))
return FALSE;
// anything else may pass
return TRUE;
}
// sorry, but using \ in macros breaks line numbers
-#define WRITESPECTATABLE_MSG_ONE_VARNAME(varname,statement) entity varname; varname = msg_entity; FOR_EACH_REALCLIENT(msg_entity) if(msg_entity == varname || (msg_entity.classname == STR_SPECTATOR && msg_entity.enemy == varname)) statement msg_entity = varname
+#define WRITESPECTATABLE_MSG_ONE_VARNAME(varname,statement) entity varname; varname = msg_entity; FOR_EACH_REALCLIENT(msg_entity) if(msg_entity == varname || (IS_SPEC(msg_entity) && msg_entity.enemy == varname)) statement msg_entity = varname
#define WRITESPECTATABLE_MSG_ONE(statement) WRITESPECTATABLE_MSG_ONE_VARNAME(oldmsg_entity, statement)
#define WRITESPECTATABLE(msg,statement) if(msg == MSG_ONE) { WRITESPECTATABLE_MSG_ONE(statement); } else statement float WRITESPECTATABLE_workaround = 0
void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration, float countdown_num)
{
- if ((clienttype(e) == CLIENTTYPE_REAL) && (e.flags & FL_CLIENT))
+ if (IS_REAL_CLIENT(e) && IS_CLIENT(e))
{
msg_entity = e;
WRITESPECTATABLE_MSG_ONE({
else
return; // do nothing
}
- else if(toucher.classname != "player") // The flag just touched an object, most likely the world
+ else if not(IS_PLAYER(toucher)) // The flag just touched an object, most likely the world
{
if(time > self.wait) // if we haven't in a while, play a sound/effect
{
case FLAG_PASSING:
{
- if((toucher.classname == "player") && (toucher.deadflag == DEAD_NO) && (toucher != self.pass_sender))
+ if((IS_PLAYER(toucher)) && (toucher.deadflag == DEAD_NO) && (toucher != self.pass_sender))
{
if(IsDifferentTeam(toucher, self.pass_sender))
ctf_Handle_Return(self, toucher);
void ctf_Reset()
{
if(self.owner)
- if(self.owner.classname == "player")
+ if(IS_PLAYER(self.owner))
ctf_Handle_Throw(self.owner, world, DROP_RESET);
ctf_RespawnFlag(self);
MUTATOR_HOOKFUNCTION(ctf_PlayerDies)
{
- if((frag_attacker != frag_target) && (frag_attacker.classname == "player") && (frag_target.flagcarried))
+ if((frag_attacker != frag_target) && (IS_PLAYER(frag_target)) && (frag_target.flagcarried))
{
PlayerTeamScore_AddScore(frag_attacker, autocvar_g_ctf_score_kill);
PlayerScore_Add(frag_attacker, SP_CTF_FCKILLS, 1);
while(head) // find the closest acceptable target to pass to
{
- if(head.classname == "player" && head.deadflag == DEAD_NO)
+ if(IS_PLAYER(head) && head.deadflag == DEAD_NO)
if(head != player && !IsDifferentTeam(head, player))
if(!head.speedrunning && !head.vehicle)
{
{
if(autocvar_g_ctf_pass_request && !player.flagcarried && head.flagcarried)
{
- if(clienttype(head) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(head))
{
centerprint(player, strcat("Requesting ", head.netname, " to pass you the ", head.flagcarried.netname));
ctf_Handle_Throw(head, player, DROP_PASS);
void dompointtouch()
{
entity head;
- if (other.classname != "player")
+ if not(IS_PLAYER(other))
return;
if (other.health < 1)
return;
// counted as "suicide" already
PlayerScore_Add(self, SP_SCORE, -1);
}
- else if(attacker.classname == "player")
+ else if(IS_PLAYER(attacker))
{
// got frozen by an enemy
// counted as "kill" and "death" already
if(frag_attacker == frag_target || frag_attacker == world)
{
- if(frag_target.classname == STR_PLAYER)
+ if(IS_PLAYER(frag_target))
centerprint(frag_target, "^1You froze yourself.\n");
bprint("^7", frag_target.netname, "^1 froze himself.\n");
}
else
{
- if(frag_target.classname == STR_PLAYER)
+ if(IS_PLAYER(frag_target))
centerprint(frag_target, strcat("^1You were frozen by ^7", frag_attacker.netname, ".\n"));
- if(frag_attacker.classname == STR_PLAYER)
+ if(IS_PLAYER(frag_attacker))
centerprint(frag_attacker, strcat("^2You froze ^7", frag_target.netname, ".\n"));
bprint("^7", frag_target.netname, "^1 was frozen by ^7", frag_attacker.netname, ".\n");
}
float ka_ballcarrier_waypointsprite_visible_for_player(entity e) // runs on waypoints which are attached to ballcarriers, updates once per frame
{
if(e.ballcarried)
- if(other.classname == "spectator")
+ if(IS_SPEC(other))
return FALSE; // we don't want spectators of the ballcarrier to see the attached waypoint on the top of their screen
// TODO: Make the ballcarrier lack a waypointsprite whenever they have the invisibility powerup
return;
}
if(other.deadflag != DEAD_NO) { return; }
- if(other.classname != "player")
+ if not(IS_PLAYER(other))
{ // The ball just touched an object, most likely the world
pointparticles(particleeffectnum("kaball_sparks"), self.origin, '0 0 0', 1);
sound(self, CH_TRIGGER, "keepaway/touch.wav", VOL_BASE, ATTN_NORM);
void ka_Reset() // used to clear the ballcarrier whenever the match switches from warmup to normal
{
- if((self.owner) && (self.owner.classname == "player"))
+ if((self.owner) && (IS_PLAYER(self.owner)))
ka_DropEvent(self.owner);
ka_RespawnBall();
MUTATOR_HOOKFUNCTION(ka_Scoring)
{
- if((frag_attacker != frag_target) && (frag_attacker.classname == "player"))
+ if((frag_attacker != frag_target) && (IS_PLAYER(frag_attacker)))
{
if(frag_target.ballcarried) { // add to amount of times killing carrier
PlayerScore_Add(frag_attacker, SP_KEEPAWAY_CARRIERKILLS, 1);
float kh_KeyCarrier_waypointsprite_visible_for_player(entity e) // runs all the time
{
- if(e.classname != "player" || self.team != e.team)
+ if(!IS_PLAYER(e) || self.team != e.team)
if(!kh_tracking_enabled)
return FALSE;
//dprint(s, "\n");
FOR_EACH_PLAYER(e)
- if(clienttype(e) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(e))
Send_CSQC_Centerprint_Generic(e, CPID_KH_MSG, s, self.kh_cp_duration, 0);
}
self.cnt -= 1;
if(vlen(force) <= 0)
return;
if(time > self.pushltime)
- if(attacker.classname == "player")
+ if(IS_PLAYER(attacker))
self.team = attacker.team;
}
// maybe start a shorter countdown?
}
- if(other.classname != "player")
+ if not(IS_PLAYER(other))
return;
if(other.deadflag != DEAD_NO)
return;
attacker = world;
if(lostkey.pusher)
if(lostkey.pusher.team != teem)
- if(lostkey.pusher.classname == "player")
+ if(IS_PLAYER(lostkey.pusher))
attacker = lostkey.pusher;
players = keys = 0;
entity player;
FOR_EACH_PLAYER(player)
- if(clienttype(player) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(player))
Send_CSQC_Centerprint_Generic_Expire(player, CPID_KH_MSG);
kh_tracking_enabled = TRUE;
}
FOR_EACH_PLAYER(player)
- if(clienttype(player) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(player))
Send_CSQC_Centerprint_Generic_Expire(player, CPID_KH_MSG);
for(i = 0; i < kh_teams; ++i)
{
if(self == other)
kh_Key_DropAll(self, TRUE);
- else if(other.classname == "player")
+ else if(IS_PLAYER(other))
kh_Key_DropAll(self, FALSE);
else
kh_Key_DropAll(self, TRUE);
self.nextthink = time + autocvar_g_nexball_delay_idle;
return;
}
- if(other.classname != "player")
+ if not(IS_PLAYER(other))
return;
if(other.health < 1)
return;
football_touch();
return;
}
- if(!self.cnt && other.classname == "player" && (other != self.nb_dropper || time > self.nb_droptime + autocvar_g_nexball_delay_collect))
+ if(!self.cnt && IS_PLAYER(other) && (other != self.nb_dropper || time > self.nb_droptime + autocvar_g_nexball_delay_collect))
{
if(other.health <= 0)
return;
else
otherteam = 0;
- if((isclient = ball.pusher.flags & FL_CLIENT))
+ if((isclient = IS_CLIENT(ball.pusher)))
pname = ball.pusher.netname;
else
pname = "Someone (?)";
PROJECTILE_TOUCH;
if(attacker.team != other.team || autocvar_g_nexball_basketball_teamsteal)
- if((ball = other.ballcarried) && (attacker.classname == "player"))
+ if((ball = other.ballcarried) && (IS_PLAYER(attacker)))
{
other.velocity = other.velocity + normalize(self.velocity) * other.damageforcescale * autocvar_g_balance_nexball_secondary_force;
other.flags &~= FL_ONGROUND;
//tracebox(self.origin + self.view_ofs, '-2 -2 -2', '2 2 2', self.origin + self.view_ofs + v_forward * autocvar_g_nexball_safepass_maxdist);
crosshair_trace(self);
if( trace_ent &&
- trace_ent.flags & FL_CLIENT &&
+ IS_CLIENT(trace_ent) &&
trace_ent.deadflag == DEAD_NO &&
trace_ent.team == self.team &&
vlen(trace_ent.origin - self.origin) <= autocvar_g_nexball_safepass_maxdist )
{
// this is protected by a shield, so ignore the damage
if (time > self.pain_finished)
- if (attacker.classname == "player")
+ if (IS_PLAYER(attacker))
{
play2(attacker, "onslaught/damageblockedbyshield.wav");
self.pain_finished = time + 1;
{
// this is protected by a shield, so ignore the damage
if (time > self.pain_finished)
- if (attacker.classname == "player")
+ if (IS_PLAYER(attacker))
{
play2(attacker, "onslaught/damageblockedbyshield.wav");
self.pain_finished = time + 1;
return;
}
- if (attacker.classname == "player")
+ if (IS_PLAYER(attacker))
{
nag = FALSE;
if(self.team == COLOR_TEAM1)
{
entity e;
float a;
- if (other.classname != "player")
+ if not(IS_PLAYER(other))
return;
a = onslaught_controlpoint_attackable(self, other.team);
if(a != 2 && a != 4)
{
if(!intermission_running)
if(self.deadflag == DEAD_NO)
- if(self.classname == "player")
+ if(IS_PLAYER(self))
NIX_GiveCurrentWeapon();
return 0;
}
(self.autospec_flags& ASF_FLAG_GRAB && _item.classname == "item_flag_team"))
{
- if((self.enemy != other) || self.classname == "observer")
+ if((self.enemy != other) || IS_OBSERVER(self))
{
- if(self.autospec_flags & ASF_OBSERVER_ONLY && self.classname != "observer")
+ if(self.autospec_flags & ASF_OBSERVER_ONLY && !IS_OBSERVER(self))
{
if(self.superspec_flags & SSF_VERBOSE)
superspec_msg("", "", self, sprintf("^8Ignored that %s^8 grabbed %s^8 since the observer_only option is ON\n", other.netname, _item.netname), 2);
if(MUTATOR_RETURNVALUE) // command was already handled?
return FALSE;
- if(self.classname == "player")
+ if(IS_PLAYER(self))
return FALSE;
if(cmd_name == "superspec_itemfilter")
s = string_null;
if(e.crypto_idfp != "" && e.cvar_cl_allow_uidtracking == 1)
s = e.crypto_idfp;
- else if(clienttype(e) == CLIENTTYPE_BOT)
+ else if(IS_BOT_CLIENT(e))
s = sprintf("bot#%g#%s", skill, e.cleanname);
if((s == "") || find(world, playerstats_id, s)) // already have one of the ID - next one can't be tracked then!
{
- if(clienttype(e) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(e))
s = sprintf("bot#%d", e.playerid);
else
s = sprintf("player#%d", e.playerid);
db_put(playerstats_db, sprintf("%s:_playerid", p.playerstats_id), ftos(p.playerid));
- if(p.cvar_cl_allow_uid2name == 1 || clienttype(p) == CLIENTTYPE_BOT)
+ if(p.cvar_cl_allow_uid2name == 1 || IS_BOT_CLIENT(p))
db_put(playerstats_db, sprintf("%s:_netname", p.playerstats_id), p.netname);
if(teamplay)
PlayerStats_Accuracy(p);
- if(clienttype(p) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(p))
{
if(p.latency_cnt)
{
//print(vtos(to), "\n");
// ang_x stuff works around weird quake angles
- if(player.classname == "player")
+ if(IS_PLAYER(player))
ang = Portal_ApplyTransformToPlayerAngle(transform, player.v_angle);
else
ang = AnglesTransform_ApplyToAngles(transform, player.angles);
if(self.solid != SOLID_TRIGGER)
return; // possibly engine bug
- if(other.classname == "player")
+ if(IS_PLAYER(other))
return; // handled by think
#endif
return;
}
if(other != self.aiment)
- if(other.classname == "player")
+ if(IS_PLAYER(other))
if(IS_INDEPENDENT_PLAYER(other) || IS_INDEPENDENT_PLAYER(self.aiment))
return; // cannot go through someone else's portal
if(other.aiment != self.aiment)
- if(other.aiment.classname == "player")
+ if(IS_PLAYER(other.aiment))
if(IS_INDEPENDENT_PLAYER(other.aiment) || IS_INDEPENDENT_PLAYER(self.aiment))
return; // cannot go through someone else's portal
fixedmakevectors(self.mangle);
float Portal_Customize()
{
- if(other.classname == "spectator")
+ if(IS_SPEC(other))
other = other.enemy;
if(other == self.aiment)
{
/*
* Trigger targets
*/
- if not((self.spawnflags & 2) && (other.classname == "player"))
+ if not((self.spawnflags & 2) && (IS_PLAYER(other)))
{
activator = other;
oldmsg = self.message;
self.message = oldmsg;
}
- if(other.classname != "player")
+ if not(IS_PLAYER(other))
return;
/*
vector ang = '0 0 0';
entity rune;
- if(self.owner.classname != "player" || time < game_starttime)
+ if(!IS_PLAYER(self.owner) || time < game_starttime)
{
rune_respawn();
return;
return;
}
- if(other.classname != "player" || other.health < 1)
+ if(!IS_PLAYER(other) || other.health < 1)
return;
if(self.wait > time)
return; // "notouch" time isn't finished
if(!rune)
return;
- if(rune.owner.classname == "player")
+ if(IS_PLAYER(rune.owner))
{
UpdateFrags(rune.owner, autocvar_g_runematch_pointamt);
}
if(fullstatus)
{
s = GetPlayerScoreString(p, 1);
- if(clienttype(p) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(p))
s = strcat(s, ":human");
else
s = strcat(s, ":bot");
- if(p.classname != "player" && !g_arena && !g_ca && !g_lms)
+ if(!IS_PLAYER(p) && !g_arena && !g_ca && !g_lms)
s = strcat(s, ":spectator");
}
else
{
- if(p.classname == "player" || g_arena || g_ca || g_lms)
+ if(IS_PLAYER(p) || g_arena || g_ca || g_lms)
s = GetPlayerScoreString(p, 2);
else
s = "-666";
t = 0;
FOR_EACH_CLIENT(p)
- if(p.classname != "player")
+ if not(IS_PLAYER(p))
{
if not(t)
Score_NicePrint_Spectators(to);
*/
void trigger_secret_touch() {
// only a player can trigger this
- if (other.classname != "player")
+ if not(IS_PLAYER(other))
return;
// update secrets found counter
c_seen = 0;
FOR_EACH_CLIENT(cl)
{
- if(clienttype(cl) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(cl))
++c_seeing;
- if(cl.classname == "player")
+ if(IS_PLAYER(cl))
++c_seen;
}
print("CEFC calls per second: ", ftos(c_seeing * (c_seen - 1) / t), "; ");
_switchweapon = TRUE;
// play some cool sounds ;)
- if (clienttype(player) == CLIENTTYPE_REAL)
+ if (IS_REAL_CLIENT(player))
{
if(player.health <= 5)
AnnounceTo(player, "lastsecond");
}
}
- if (other.classname != "player")
+ if not(IS_PLAYER(other))
return;
if (other.deadflag)
return;
return;
}
- if(activator.classname != "player")
+ if not(IS_PLAYER(activator))
return;
if(activator.deadflag != DEAD_NO)
return;
other.flags &~= FL_ONGROUND;
- if (other.classname == "player")
+ if (IS_PLAYER(other))
{
// reset tracking of oldvelocity for impact damage (sudden velocity changes)
other.oldvelocity = other.velocity;
sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
self.pushltime = time + 0.2;
}
- float ct;
- ct = clienttype(other);
- if( ct == CLIENTTYPE_REAL || ct == CLIENTTYPE_BOT)
+ if(IS_REAL_CLIENT(other) || IS_BOT_CLIENT(other))
{
float i;
float found;
other.jumppadcount = other.jumppadcount + 1;
}
- if(ct == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(other))
{
if(self.message)
centerprint(other, self.message);
void button_use()
{
-// if (activator.classname != "player")
-// {
-// dprint(activator.classname);
-// dprint(" triggered a button\n");
-// }
-
if not (self.active == ACTIVE_ACTIVE)
return;
void button_touch()
{
-// if (activator.classname != "player")
-// {
-// dprint(activator.classname);
-// dprint(" touched a button\n");
-// }
if (!other)
return;
if not(other.iscreature)
self.health = self.health - damage;
if (self.health <= 0)
{
- // if (activator.classname != "player")
- // {
- // dprint(activator.classname);
- // dprint(" killed a button\n");
- // }
self.enemy = damage_attacker;
button_fire ();
}
// this door require a key
// only a player can have a key
- if (other.classname != "player")
+ if not(IS_PLAYER(other))
return FALSE;
if (item_keys_usekey(door, other)) {
*/
void door_touch()
{
- if(other.classname != "player")
+ if not(IS_PLAYER(other))
return;
if (self.owner.attack_finished_single > time)
return;
if (!(self.owner.dmg) && (self.owner.message != ""))
{
- if (other.flags & FL_CLIENT)
+ if (IS_CLIENT(other))
centerprint (other, self.owner.message);
play2(other, "misc/talk.wav");
}
if (self.message)
{
- if (other.flags & FL_CLIENT)
+ if (IS_CLIENT(other))
centerprint (other, self.message);
play2(other, "misc/talk.wav");
}
for(e = world; (e = findentity(e, conveyor, self)); )
{
- if(e.flags & FL_CLIENT) // doing it via velocity has quite some advantages
+ if(IS_CLIENT(e)) // doing it via velocity has quite some advantages
continue; // done in SV_PlayerPhysics
setorigin(e, e.origin + self.movedir * sys_frametime);
{
// If whatever thats touching the swamp is not a player
// or if its a dead player, just dont care abt it.
- if((other.classname != "player")||(other.deadflag != DEAD_NO))
+ if(!IS_PLAYER(other) || other.deadflag != DEAD_NO)
return;
EXACTTRIGGER_TOUCH;
float check_tdeath(entity player, vector org, vector telefragmin, vector telefragmax)
{
- if (player.classname == "player" && player.health >= 1)
+ if (IS_PLAYER(player) && player.health >= 1)
{
TDEATHLOOP(org)
{
if not(teamplay && autocvar_g_telefrags_teamplay && head.team == player.team)
- if(head.classname == "player")
+ if(IS_PLAYER(head))
if(head.health >= 1)
return 1;
}
{
TDEATHLOOP(player.origin)
{
- if (player.classname == "player" && player.health >= 1)
+ if (IS_PLAYER(player) && player.health >= 1)
{
if not(teamplay && autocvar_g_telefrags_teamplay && head.team == player.team)
{
- if(head.classname == "player")
+ if(IS_PLAYER(head))
if(head.health >= 1)
++tdeath_hit;
Damage (head, teleporter, telefragger, 10000, DEATH_TELEFRAG, head.origin, '0 0 0');
UpdateCSQCProjectileAfterTeleport(player);
- if(player.classname == "player")
+ if(IS_PLAYER(player))
{
if(tflags & TELEPORT_FLAG_TDEATH)
if(player.takedamage && player.deadflag == DEAD_NO && !g_race && !g_cts && (autocvar_g_telefrags || (tflags & TELEPORT_FLAG_FORCE_TDEATH)))
EXACTTRIGGER_TOUCH;
- if(other.classname == "player")
+ if(IS_PLAYER(other))
RemoveGrapplingHook(other);
entity e;
print("A non-projectile got through a warpzone and its owner cleared. It's a ", pl.classname, ".\n");
pl.owner = world;
}
- if(pl.classname == "player")
+ if(IS_PLAYER(pl))
{
// reset tracking of oldvelocity for impact damage (sudden velocity changes)
pl.oldvelocity = pl.velocity;
if(autocvar_bot_vs_human > 0)
{
// bots are all blue
- if(clienttype(for_whom) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(for_whom))
c1 = c3 = c4 = -1;
else
c2 = -1;
else
{
// bots are all red
- if(clienttype(for_whom) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(for_whom))
c2 = c3 = c4 = -1;
else
c1 = -1;
FOR_EACH_CLIENT(head)
{
float t;
- if(head.classname == "player")
+ if(IS_PLAYER(head))
t = head.team;
else if(head.team_forced > 0)
t = head.team_forced; // reserve the spot
if(head != ignore)// && head.netname != "")
{
value = PlayerValue(head);
- if(clienttype(head) == CLIENTTYPE_BOT)
+ if(IS_BOT_CLIENT(head))
bvalue = value;
else
bvalue = 0;
if(ta == tb)
return TRUE;
- if(clienttype(e) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(e))
{
if(bots_would_leave)
{
if(totalteams <= 1)
{
- if(autocvar_g_campaign && pl && clienttype(pl) == CLIENTTYPE_REAL)
+ if(autocvar_g_campaign && pl && IS_REAL_CLIENT(pl))
return 1; // special case for campaign and player joining
else if(g_domination)
error("Too few teams available for domination\n");
// bprint("allow change teams from ", ftos(steam), " to ", ftos(dteam), "\n");
- if(self.classname == "player" && steam != dteam)
+ if(IS_PLAYER(self) && steam != dteam)
{
// reduce frags during a team change
TeamchangeFrags(self);
SetPlayerTeam(self, dteam, steam, FALSE);
- if(self.classname == "player" && steam != dteam)
+ if(IS_PLAYER(self) && steam != dteam)
{
// kill player when changing teams
if(self.deadflag == DEAD_NO)
if (self.team == attacker.team)
{
// This does not happen anymore. Re-enable if you fix that.
- if(clienttype(attacker) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(attacker))
sprint(attacker, "\{1}Turret tells you: I'm on your team!\n");
if(autocvar_g_friendlyfire)
return -6;
// player
- if (e_target.flags & FL_CLIENT)
+ if (IS_CLIENT(e_target))
{
if not (validate_flags & TFL_TARGETSELECT_PLAYERS)
return -7;
if ((_turret.target_select_missilebias > 0) && (_target.flags & FL_PROJECTILE))
m_score = 1;
- if ((_turret.target_select_playerbias > 0) && (_target.flags & FL_CLIENT))
+ if ((_turret.target_select_playerbias > 0) && IS_CLIENT(_target))
p_score = 1;
d_score = max(d_score, 0);
return 0;
// player
- if (e_target.flags & FL_CLIENT)
+ if (IS_CLIENT(e_target))
{
if (self.owner.target_select_playerbias < 0)
return 0;
void bumb_gunner_exit(float _exitflag)
{
-
-
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
{
msg_entity = self;
WriteByte(MSG_ONE, SVC_SETVIEWPORT);
float vehicles_valid_pilot()
{
- if(other.classname != "player")
+ if not(IS_PLAYER(other))
return FALSE;
if(other.deadflag != DEAD_NO)
if(other.vehicle != world)
return FALSE;
- if(clienttype(other) != CLIENTTYPE_REAL)
+ if not(IS_REAL_CLIENT(other))
if(!autocvar_g_vehicles_allow_bots)
return FALSE;
if(autocvar_g_vehicle_bumblebee_healgun_hps)
trace_ent.vehicle_health = min(trace_ent.vehicle_health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, trace_ent.tur_health);
}
- else if(trace_ent.flags & FL_CLIENT)
+ else if(IS_CLIENT(trace_ent))
{
if(trace_ent.health <= autocvar_g_vehicle_bumblebee_healgun_hmax && autocvar_g_vehicle_bumblebee_healgun_hps)
trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, autocvar_g_vehicle_bumblebee_healgun_hmax);
void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, float axh_id)
{
- if (clienttype(own) != CLIENTTYPE_REAL)
+ if not(IS_REAL_CLIENT(own))
return;
entity axh;
**/
void CSQCVehicleSetup(entity own, float vehicle_id)
{
- if (clienttype(own) != CLIENTTYPE_REAL)
+ if not(IS_REAL_CLIENT(own))
return;
msg_entity = own;
// Better way of determening whats crushable needed! (fl_crushable?)
float vehicles_crushable(entity e)
{
- if(e.classname == "player")
+ if(IS_PLAYER(e))
return TRUE;
- if(e.classname == "monster_zombie")
- return TRUE;
+ if(e.flags & FL_MONSTER)
+ return TRUE; // more bitflags for everyone!
return FALSE;
}
return;
}
- if(other.classname != "player")
+ if not(IS_PLAYER(other))
return;
if(other.deadflag != DEAD_NO)
{
// Remove this when bots know how to use vehicles
- if (clienttype(other) == CLIENTTYPE_BOT)
+ if (IS_BOT_CLIENT(other))
if (autocvar_g_vehicles_allow_bots)
dprint("Bot enters vehicle\n"); // This is where we need to disconnect (some, all?) normal bot AI and hand over to vehicle's _aiframe()
else
self.team = self.owner.team;
self.flags -= FL_NOTARGET;
- if (clienttype(other) == CLIENTTYPE_REAL)
+ if (IS_REAL_CLIENT(other))
{
msg_entity = other;
WriteByte (MSG_ONE, SVC_SETVIEWPORT);
}
vehicles_exit_running = TRUE;
- if(self.flags & FL_CLIENT)
+ if(IS_CLIENT(self))
{
_vehicle = self.vehicle;
if (_player)
{
- if (clienttype(_player) == CLIENTTYPE_REAL)
+ if (IS_REAL_CLIENT(_player))
{
msg_entity = _player;
WriteByte (MSG_ONE, SVC_SETVIEWPORT);
self = e;
if not(g_minstagib)
- if (other.classname == "player")
+ if (IS_PLAYER(other))
{
sprint (other, "You got the ^2");
sprint (other, name);
// Find all non-hit players the beam passed close by
if(deathtype == WEP_MINSTANEX || deathtype == WEP_NEX)
{
- FOR_EACH_REALCLIENT(msg_entity) if(msg_entity != self) if(!msg_entity.railgunhit) if not(msg_entity.classname == "spectator" && msg_entity.enemy == self) // we use realclient, so spectators can hear the whoosh too
+ FOR_EACH_REALCLIENT(msg_entity) if(msg_entity != self) if(!msg_entity.railgunhit) if not(IS_SPEC(msg_entity) && msg_entity.enemy == self) // we use realclient, so spectators can hear the whoosh too
{
// nearest point on the beam
beampos = start + dir * bound(0, (msg_entity.origin - start) * dir, length);
lag = ANTILAG_LATENCY(self);
if(lag < 0.001)
lag = 0;
- if(clienttype(self) != CLIENTTYPE_REAL)
+ if not(IS_REAL_CLIENT(self))
lag = 0;
if(autocvar_g_antilag == 0 || self.cvar_cl_noantilag)
lag = 0; // only do hitscan, but no antilag
self.takedamage = DAMAGE_NO;
self.event_damage = func_null;
- if((attacker.flags & FL_CLIENT) && !autocvar_g_projectiles_keep_owner)
+ if(IS_CLIENT(attacker) && !autocvar_g_projectiles_keep_owner)
{
self.owner = attacker;
self.realowner = attacker;
void W_Plasma_Explode (void)
{
if(other.takedamage == DAMAGE_AIM)
- if(other.classname == "player")
+ if(IS_PLAYER(other))
if(IsDifferentTeam(self.realowner, other))
if(other.deadflag == DEAD_NO)
if(IsFlying(other))
// 2. bfg effect
// NOTE: this cannot be made warpzone aware by design. So, better intentionally ignore warpzones here.
for(e = findradius(self.origin, autocvar_g_balance_fireball_primary_bfgradius); e; e = e.chain)
- if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(e.classname != "player" || !self.realowner || IsDifferentTeam(e, self))
+ if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(!IS_PLAYER(e) || !self.realowner || IsDifferentTeam(e, self))
{
// can we see fireball?
traceline(e.origin + e.view_ofs, self.origin, MOVE_NORMAL, e);
RandomSelection_Init();
for(e = WarpZone_FindRadius(self.origin, dist, TRUE); e; e = e.chain)
- if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(e.classname != "player" || !self.realowner || IsDifferentTeam(e, self))
+ if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(!IS_PLAYER(e) || !self.realowner || IsDifferentTeam(e, self))
{
p = e.origin;
p_x += e.mins_x + random() * (e.maxs_x - e.mins_x);
void W_Grenade_Explode (void)
{
if(other.takedamage == DAMAGE_AIM)
- if(other.classname == "player")
+ if(IS_PLAYER(other))
if(IsDifferentTeam(self.realowner, other))
if(other.deadflag == DEAD_NO)
if(IsFlying(other))
void W_Grenade_Explode2 (void)
{
if(other.takedamage == DAMAGE_AIM)
- if(other.classname == "player")
+ if(IS_PLAYER(other))
if(IsDifferentTeam(self.realowner, other))
if(other.deadflag == DEAD_NO)
if(IsFlying(other))
void W_Mine_Explode ()
{
if(other.takedamage == DAMAGE_AIM)
- if(other.classname == "player")
+ if(IS_PLAYER(other))
if(IsDifferentTeam(self.realowner, other))
if(other.deadflag == DEAD_NO)
if(IsFlying(other))
// a player's mines shall explode if he disconnects or dies
// TODO: Do this on team change too -- Samual: But isn't a player killed when they switch teams?
- if(self.realowner.classname != "player" || self.realowner.deadflag != DEAD_NO)
+ if(!IS_PLAYER(self.realowner) || self.realowner.deadflag != DEAD_NO)
{
other = world;
self.projectiledeathtype |= HITTYPE_BOUNCE;
head = findradius(self.origin, autocvar_g_balance_minelayer_proximityradius);
while(head)
{
- if(head.classname == "player" && head.deadflag == DEAD_NO)
+ if(IS_PLAYER(head) && head.deadflag == DEAD_NO)
if(head != self.realowner && IsDifferentTeam(head, self.realowner)) // don't trigger for team mates
if(!self.mine_time)
{
PROJECTILE_TOUCH;
- if(other && other.classname == "player" && other.deadflag == DEAD_NO)
+ if(other && IS_PLAYER(other) && other.deadflag == DEAD_NO)
{
// hit a player
// don't stick
//As the distance gets larger, a correct detonation gets near imposible
//Bots are assumed to use the mine spawnfunc_light to see if the mine gets near a player
if(v_forward * normalize(mine.origin - self.enemy.origin)< 0.1)
- if(self.enemy.classname == "player")
+ if(IS_PLAYER(self.enemy))
if(desirabledamage >= 0.1*coredamage)
if(random()/distance*300 > frametime*bound(0,(10-skill)*0.2,1))
self.BUTTON_ATCK2 = TRUE;
W_Rocket_Unregister();
if(other.takedamage == DAMAGE_AIM)
- if(other.classname == "player")
+ if(IS_PLAYER(other))
if(IsDifferentTeam(self.realowner, other))
if(other.deadflag == DEAD_NO)
if(IsFlying(other))
//As the distance gets larger, a correct detonation gets near imposible
//Bots are assumed to use the rocket spawnfunc_light to see if the rocket gets near a player
if(v_forward * normalize(missile.origin - self.enemy.origin)< 0.1)
- if(self.enemy.classname == "player")
+ if(IS_PLAYER(self.enemy))
if(desirabledamage >= 0.1*coredamage)
if(random()/distance*300 > frametime*bound(0,(10-skill)*0.2,1))
self.BUTTON_ATCK2 = TRUE;
//te_lightning2(world, targpos, self.realowner.origin + self.realowner.view_ofs + v_forward * 5 - v_up * 5);
//te_customflash(targpos, 40, 2, '1 1 1');
- is_player = (trace_ent.classname == "player" || trace_ent.classname == "body");
+ is_player = (IS_PLAYER(trace_ent) || trace_ent.classname == "body");
if((trace_fraction < 1) // if trace is good, apply the damage and remove self
&& (trace_ent.takedamage == DAMAGE_AIM)
{
if(self.team != e.team)
return FALSE;
- if(e.classname != "player")
+ if not(IS_PLAYER(e))
return FALSE;
}
entity WaypointSprite_getviewentity(entity e)
{
- if(e.classname == "spectator")
+ if(IS_SPEC(e))
e = e.enemy;
/* TODO idea (check this breaks nothing)
else if(e.classname == "observer")
// as a GENERAL rule:
// if you have the invisibility powerup, sprites ALWAYS are restricted to your team
// but only apply this to real players, not to spectators
- if(g_minstagib && (self.owner.flags & FL_CLIENT) && (self.owner.items & IT_STRENGTH) && (e == other))
+ if(g_minstagib && IS_CLIENT(self.owner) && (self.owner.items & IT_STRENGTH) && (e == other))
{
if(!WaypointSprite_isteammate(self.owner, e))
return FALSE;
BITXOR_ASSIGN(player.effects, EF_TELEPORT_BIT);
- if(player.classname == "player")
+ if(IS_PLAYER(player))
BITCLR_ASSIGN(player.flags, FL_ONGROUND);
WarpZone_PostTeleportPlayer_Callback(player);
o10 = o1 = WarpZone_TransformOrigin(wz, o0);
v1 = WarpZone_TransformVelocity(wz, v0);
- if(clienttype(player) != CLIENTTYPE_NOTACLIENT)
+ if not(IS_NOT_A_CLIENT(player))
a1 = WarpZone_TransformVAngles(wz, player.v_angle);
else
a1 = WarpZone_TransformAngles(wz, a0);
player.warpzone_teleport_finishtime += sys_frametime - dt;
#ifndef WARPZONE_USE_FIXANGLE
- if(player.classname == "player")
+ if(IS_PLAYER(player))
{
// instead of fixangle, send the transform to the client for smoother operation
player.fixangle = FALSE;
// 96*frametime
float d;
d = 24 + max(vlen(other.mins), vlen(other.maxs));
- if(clienttype(other) == CLIENTTYPE_NOTACLIENT)
+ if(IS_NOT_A_CLIENT(other))
f = -d / bound(frametime * d * 1, frametime * vlen(other.velocity), d);
else
f = -1;
{
if(warpzone_warpzones_exist) { WarpZone_StoreProjectileData(e); }
- float f = clienttype(e);
- if(f == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(e))
{
if(e.solid == SOLID_NOT) // not spectating?
if(e.movetype == MOVETYPE_NOCLIP || e.movetype == MOVETYPE_FLY || e.movetype == MOVETYPE_FLY_WORLDONLY) // not spectating? (this is to catch observers)
}
}
- if(f == CLIENTTYPE_NOTACLIENT)
+ if(IS_NOT_A_CLIENT(e))
{
if(warpzone_warpzones_exist)
for(; (e = nextent(e)); )
float visible_to_some_client(entity ent)
{
entity e;
- for(e = nextent(world); clienttype(e) != CLIENTTYPE_NOTACLIENT; e = nextent(e))
- if(e.classname == "player" && clienttype(e) == CLIENTTYPE_REAL)
+ for(e = nextent(world); !IS_NOT_A_CLIENT(e); e = nextent(e))
+ if(IS_PLAYER(e) && IS_REAL_CLIENT(e))
if(checkpvs(e.origin + e.view_ofs, ent))
return 1;
return 0;
void WarpZone_PlayerPhysics_FixVAngle(void)
{
#ifndef WARPZONE_DONT_FIX_VANGLE
- if(clienttype(self) == CLIENTTYPE_REAL)
+ if(IS_REAL_CLIENT(self))
if(self.v_angle_z <= 360) // if not already adjusted
if(time - self.ping * 0.001 < self.warpzone_teleport_time)
{