this.nextthink = time + delta;
e = edict_num(this.cnt + 1);
- if(IS_REAL_CLIENT(e))
+ if(IS_CLIENT(e) && IS_REAL_CLIENT(e))
{
WriteHeader(MSG_BROADCAST, TE_CSQC_PINGPLREPORT);
WriteByte(MSG_BROADCAST, this.cnt);
- WriteShort(MSG_BROADCAST, bound(1, e.ping, 65535));
- WriteByte(MSG_BROADCAST, min(ceil(e.ping_packetloss * 255), 255));
- WriteByte(MSG_BROADCAST, min(ceil(e.ping_movementloss * 255), 255));
+ WriteShort(MSG_BROADCAST, bound(1, CS(e).ping, 65535));
+ WriteByte(MSG_BROADCAST, min(ceil(CS(e).ping_packetloss * 255), 255));
+ WriteByte(MSG_BROADCAST, min(ceil(CS(e).ping_movementloss * 255), 255));
// record latency times for clients throughout the match so we can report it to playerstats
- if(time > (e.latency_time + LATENCY_THINKRATE))
+ if(time > (CS(e).latency_time + LATENCY_THINKRATE))
{
- e.latency_sum += e.ping;
- e.latency_cnt += 1;
- e.latency_time = time;
- //print("sum: ", ftos(e.latency_sum), ", cnt: ", ftos(e.latency_cnt), ", avg: ", ftos(e.latency_sum / e.latency_cnt), ".\n");
+ CS(e).latency_sum += CS(e).ping;
+ CS(e).latency_cnt += 1;
+ CS(e).latency_time = time;
+ //print("sum: ", ftos(CS(e).latency_sum), ", cnt: ", ftos(CS(e).latency_cnt), ", avg: ", ftos(CS(e).latency_sum / CS(e).latency_cnt), ".\n");
}
}
else
BADPREFIX("cvar_check_");
BADCVAR("gamecfg");
BADCVAR("g_configversion");
- BADCVAR("g_maplist_index");
BADCVAR("halflifebsp");
BADCVAR("sv_mapformat_is_quake2");
BADCVAR("sv_mapformat_is_quake3");
BADCVAR("mastervolume");
BADCVAR("volume");
BADCVAR("bgmvolume");
+ BADCVAR("in_pitch_min");
+ BADCVAR("in_pitch_max");
// private
BADCVAR("developer");
BADPREFIX("g_playerstats_");
BADPREFIX("g_voice_flood_");
BADPREFIX("log_file");
+ BADPREFIX("quit_");
BADPREFIX("rcon_");
BADPREFIX("sv_allowdownloads");
BADPREFIX("sv_autodemo");
// these can contain player IDs, so better hide
BADPREFIX("g_forced_team_");
+ BADCVAR("sv_muteban_list");
+ BADCVAR("sv_allow_customplayermodels_idlist");
+ BADCVAR("sv_allow_customplayermodels_speciallist");
// mapinfo
BADCVAR("fraglimit");
BADCVAR("g_race_laps_limit");
BADCVAR("g_race_qualifying_timelimit");
BADCVAR("g_race_qualifying_timelimit_override");
+ BADCVAR("g_runematch");
BADCVAR("g_snafu");
BADCVAR("g_tdm");
BADCVAR("g_tdm_teams");
// does nothing gameplay relevant
BADCVAR("captureleadlimit_override");
+ BADCVAR("condump_stripcolors");
BADCVAR("gameversion");
BADCVAR("g_allow_oldvortexbeam");
BADCVAR("g_balance_kill_delay");
BADCVAR("g_invasion_point_limit");
BADCVAR("g_jump_grunt");
BADCVAR("g_keyhunt_point_leadlimit");
- BADCVAR("g_maplist_selectrandom");
BADCVAR("g_nexball_goalleadlimit");
BADCVAR("g_new_toys_use_pickupsound");
BADCVAR("g_physics_predictall");
BADCVAR("leadlimit_override");
BADCVAR("pausable");
BADCVAR("sv_checkforpacketsduringsleep");
+ BADCVAR("sv_damagetext");
BADCVAR("sv_db_saveasdump");
BADCVAR("sv_intermission_cdtrack");
BADCVAR("sv_minigames");
BADPREFIX("gameversion_");
BADPREFIX("g_chat_");
BADPREFIX("g_ctf_captimerecord_");
- BADPREFIX("g_maplist_votable_");
+ BADPREFIX("g_maplist_");
BADPREFIX("g_mod_");
BADPREFIX("g_respawn_");
BADPREFIX("net_");
+ BADPREFIX("notification_");
BADPREFIX("prvm_");
BADPREFIX("skill_");
BADPREFIX("sv_allow_");
BADCVAR("g_buffs");
BADCVAR("g_ca_teams_override");
BADCVAR("g_ctf_ignore_frags");
+ BADCVAR("g_ctf_leaderboard");
BADCVAR("g_domination_point_limit");
BADCVAR("g_domination_teams_override");
BADCVAR("g_freezetag_teams_override");
BADCVAR("g_keyhunt_teams_override");
BADCVAR("g_lms_lives_override");
BADCVAR("g_maplist");
- BADCVAR("g_maplist_check_waypoints");
- BADCVAR("g_maplist_mostrecent_count");
- BADCVAR("g_maplist_shuffle");
- BADCVAR("g_maplist_votable");
- BADCVAR("g_maplist_votable_abstain");
- BADCVAR("g_maplist_votable_nodetail");
- BADCVAR("g_maplist_votable_suggestions");
BADCVAR("g_maxplayers");
BADCVAR("g_mirrordamage");
BADCVAR("g_nexball_goallimit");
BADCVAR("teamplay_mode");
BADCVAR("timelimit_override");
BADPREFIX("g_warmup_");
+ BADPREFIX("sv_info_");
BADPREFIX("sv_ready_restart_");
// mutators that announce themselves properly to the server browser
{
FixIntermissionClient(this);
- float server_screenshot = (autocvar_sv_autoscreenshot && this.cvar_cl_autoscreenshot);
- float client_screenshot = (this.cvar_cl_autoscreenshot == 2);
+ float server_screenshot = (autocvar_sv_autoscreenshot && CS(this).cvar_cl_autoscreenshot);
+ float client_screenshot = (CS(this).cvar_cl_autoscreenshot == 2);
if( (server_screenshot || client_screenshot)
&& ((this.autoscreenshot > 0) && (time > this.autoscreenshot)) )
if(to_file)
fputs(file, strcat(s, "\n"));
- FOREACH_CLIENT(IS_REAL_CLIENT(it) || (IS_BOT_CLIENT(it) && autocvar_sv_logscores_bots), LAMBDA(
+ FOREACH_CLIENT(IS_REAL_CLIENT(it) || (IS_BOT_CLIENT(it) && autocvar_sv_logscores_bots), {
s = strcat(":player:see-labels:", GetPlayerScoreString(it, 0), ":");
- s = strcat(s, ftos(rint(time - it.jointime)), ":");
+ s = strcat(s, ftos(rint(time - CS(it).jointime)), ":");
if(IS_PLAYER(it) || MUTATOR_CALLHOOK(GetPlayerStatus, it))
s = strcat(s, ftos(it.team), ":");
else
GameLogEcho(strcat(s, ftos(it.playerid), ":", playername(it, false)));
if(to_file)
fputs(file, strcat(s, playername(it, false), "\n"));
- ));
+ });
if(teamplay)
{
{
stuffcmd(e, "\nscr_printspeed 1000000\n");
RandomSelection_Init();
- FOREACH_WORD(autocvar_sv_intermission_cdtrack, true, LAMBDA(
+ FOREACH_WORD(autocvar_sv_intermission_cdtrack, true, {
RandomSelection_AddString(it, 1, 1);
- ));
+ });
if (RandomSelection_chosen_string != "")
{
stuffcmd(e, sprintf("\ncd loop %s\n", RandomSelection_chosen_string));
GameLogClose();
- FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(
+ FOREACH_CLIENT(IS_PLAYER(it), {
FixIntermissionClient(it);
if(it.winning)
bprint(playername(it, false), " ^7wins.\n");
- ));
+ });
target_music_kill();
localcmd("\nsv_hook_gameend\n");
}
-/*
-============
-CheckRules_Player
-
-Exit deathmatch games upon conditions
-============
-*/
-void CheckRules_Player(entity this)
-{
- if (game_stopped) // someone else quit the game already
- return;
-
- if(!IS_DEAD(this))
- this.play_time += frametime;
-
- // fixme: don't check players; instead check spawnfunc_dom_team and spawnfunc_ctf_team entities
- // (div0: and that in CheckRules_World please)
-}
-
float InitiateSuddenDeath()
{
// set the .winning flag for exactly those players with a given field value
void SetWinners(.float field, float value)
{
- FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(it.winning = (it.(field) == value)));
+ FOREACH_CLIENT(IS_PLAYER(it), { it.winning = (it.(field) == value); });
}
// set the .winning flag for those players with a given field value
void AddWinners(.float field, float value)
{
- FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(
+ FOREACH_CLIENT(IS_PLAYER(it), {
if(it.(field) == value)
it.winning = 1;
- ));
+ });
}
// clear the .winning flags
void ClearWinners()
{
- FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(it.winning = 0));
+ FOREACH_CLIENT(IS_PLAYER(it), { it.winning = 0; });
}
void ShuffleMaplist()
team1_score = team2_score = team3_score = team4_score = 0;
- FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), LAMBDA(
+ FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), {
switch(it.team)
{
case NUM_TEAM_1: team1_score = 1; break;
case NUM_TEAM_3: team3_score = 1; break;
case NUM_TEAM_4: team4_score = 1; break;
}
- ));
+ });
IL_EACH(g_spawnpoints, true,
{
float playerswithlaps;
float readyplayers;
totalplayers = playerswithlaps = readyplayers = 0;
- FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(
+ FOREACH_CLIENT(IS_PLAYER(it), {
++totalplayers;
if(PlayerScore_Add(it, SP_RACE_FASTEST, 0))
++playerswithlaps;
if(it.ready)
++readyplayers;
- ));
+ });
// at least 2 of the players have completed a lap: start the RACE
// otherwise, the players should end the qualifying on their own
redirection_nextthink = time + 1;
clients_found = 0;
- FOREACH_CLIENT(IS_REAL_CLIENT(it), LAMBDA(
+ FOREACH_CLIENT(IS_REAL_CLIENT(it), {
// TODO add timer
LOG_INFO("Redirecting: sending connect command to ", it.netname, "\n");
if(redirection_target == "self")
else
stuffcmd(it, strcat("\ndisconnect; defer ", ftos(autocvar_quit_and_redirect_timer), " \"connect ", redirection_target, "\"\n"));
++clients_found;
- ));
+ });
LOG_INFO("Redirecting: ", ftos(clients_found), " clients left.\n");