#include "teamplay.qh"
#include "weapons/weaponstats.qh"
#include "../common/constants.qh"
+#include <common/net_linked.qh>
#include "../common/deathtypes/all.qh"
#include "../common/mapinfo.qh"
#include "../common/monsters/_mod.qh"
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");
BADCVAR("sys_specialcharactertranslation");
BADCVAR("timeformat");
BADCVAR("timestamps");
+ BADCVAR("g_require_stats");
BADPREFIX("developer_");
BADPREFIX("g_ban_");
BADPREFIX("g_banned_list");
+ BADPREFIX("g_require_stats_");
BADPREFIX("g_chat_flood_");
BADPREFIX("g_ghost_items");
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");
// mapinfo
BADCVAR("fraglimit");
+ BADCVAR("g_arena");
BADCVAR("g_assault");
BADCVAR("g_ca");
BADCVAR("g_ca_teams");
+ BADCVAR("g_conquest");
BADCVAR("g_ctf");
BADCVAR("g_cts");
+ BADCVAR("g_dotc");
BADCVAR("g_dm");
BADCVAR("g_domination");
BADCVAR("g_domination_default_teams");
BADCVAR("g_freezetag");
BADCVAR("g_freezetag_teams");
BADCVAR("g_invasion_teams");
+ BADCVAR("g_jailbreak");
+ BADCVAR("g_jailbreak_teams");
BADCVAR("g_keepaway");
BADCVAR("g_keyhunt");
BADCVAR("g_keyhunt_teams");
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");
+ BADCVAR("g_vip");
BADCVAR("leadlimit");
BADCVAR("nextmap");
BADCVAR("teamplay");
BADCVAR("timelimit");
+ BADCVAR("g_mapinfo_ignore_warnings");
// long
BADCVAR("hostname");
// does nothing gameplay relevant
BADCVAR("captureleadlimit_override");
+ BADCVAR("condump_stripcolors");
BADCVAR("gameversion");
BADCVAR("g_allow_oldvortexbeam");
BADCVAR("g_balance_kill_delay");
+ BADCVAR("g_buffs_pickup_anyway");
+ BADCVAR("g_buffs_randomize");
BADCVAR("g_campcheck_distance");
BADCVAR("g_ca_point_leadlimit");
BADCVAR("g_ca_point_limit");
BADCVAR("g_freezetag_point_limit");
BADCVAR("g_hats");
BADCVAR("g_invasion_point_limit");
+ BADCVAR("g_jump_grunt");
BADCVAR("g_keyhunt_point_leadlimit");
BADCVAR("g_nexball_goalleadlimit");
BADCVAR("g_new_toys_use_pickupsound");
BADCVAR("g_physics_predictall");
BADCVAR("g_piggyback");
+ BADCVAR("g_playerclip_collisions");
BADCVAR("g_tdm_point_leadlimit");
BADCVAR("g_tdm_point_limit");
BADCVAR("leadlimit_and_fraglimit");
BADCVAR("leadlimit_override");
BADCVAR("pausable");
BADCVAR("sv_checkforpacketsduringsleep");
+ BADCVAR("sv_damagetext");
+ BADCVAR("sv_db_saveasdump");
BADCVAR("sv_intermission_cdtrack");
BADCVAR("sv_minigames");
BADCVAR("sv_namechangetimer");
BADCVAR("sv_precacheplayermodels");
BADCVAR("sv_stepheight");
BADCVAR("sv_timeout");
+ BADCVAR("sv_weapons_modeloverride");
BADPREFIX("crypto_");
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("g_norecoil");
BADCVAR("g_physics_clientselect");
+ BADCVAR("g_pinata");
BADCVAR("g_powerups");
BADCVAR("g_spawnshieldtime");
BADCVAR("g_start_delay");
string newlist;
// now reinsert this at another position
- insertpos = pow(random(), 1 / exponent); // ]0, 1]
+ insertpos = (random() ** (1 / exponent)); // ]0, 1]
insertpos = insertpos * (Map_Count - 1); // ]0, Map_Count - 1]
insertpos = ceil(insertpos) + 1; // {2, 3, 4, ..., Map_Count}
LOG_TRACE("SHUFFLE: insert pos = ", ftos(insertpos));
void IntermissionThink(entity this)
{
FixIntermissionClient(this);
- CSQCMODEL_AUTOUPDATE(this); // PlayerPostThink returns before calling this during intermission, so run it here
float server_screenshot = (autocvar_sv_autoscreenshot && this.cvar_cl_autoscreenshot);
float client_screenshot = (this.cvar_cl_autoscreenshot == 2);
s = strcat(s, "spectator:");
if(to_console)
- LOG_INFO(s, it.netname, "\n");
+ LOG_INFO(s, playername(it, false), "\n");
if(to_eventlog)
- GameLogEcho(strcat(s, ftos(it.playerid), ":", it.netname));
+ GameLogEcho(strcat(s, ftos(it.playerid), ":", playername(it, false)));
if(to_file)
- fputs(file, strcat(s, it.netname, "\n"));
+ fputs(file, strcat(s, playername(it, false), "\n"));
));
if(teamplay)
e.autoscreenshot = time + 0.8; // used for autoscreenshot
e.health = -2342;
// first intermission phase; voting phase has positive health (used to decide whether to send SVC_FINALE or not)
- e.solid = SOLID_NOT;
- set_movetype(e, MOVETYPE_NONE);
- e.takedamage = DAMAGE_NO;
for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
.entity weaponentity = weaponentities[slot];
*/
void NextLevel()
{
- gameover = true;
+ game_stopped = true;
+ intermission_running = 1; // game over
- intermission_running = 1;
-
-// enforce a wait time before allowing changelevel
+ // enforce a wait time before allowing changelevel
if(player_count > 0)
intermission_exittime = time + autocvar_sv_mapchange_delay;
else
FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(
FixIntermissionClient(it);
if(it.winning)
- bprint(it.netname, " ^7wins.\n");
+ bprint(playername(it, false), " ^7wins.\n");
));
target_music_kill();
*/
void CheckRules_Player(entity this)
{
- if (gameover) // someone else quit the game already
+ if (game_stopped) // someone else quit the game already
return;
if(!IS_DEAD(this))
SetDefaultAlpha();
- if (gameover) // someone else quit the game already
+ if (intermission_running) // someone else quit the game already
{
if(player_count == 0) // Nobody there? Then let's go to the next map
MapVote_Start();
if(IS_CLIENT(it) || it.classname == "" || it.move_movetype == MOVETYPE_PUSH || it.move_movetype == MOVETYPE_FAKEPUSH || it.move_movetype == MOVETYPE_PHYSICS)
continue;
- set_movetype(it, it.move_movetype);
+ //set_movetype(it, it.move_movetype);
+ // inline the set_movetype function, since this is called a lot
+ it.movetype = (it.move_qcphysics) ? MOVETYPE_NONE : it.move_movetype;
if(it.move_movetype == MOVETYPE_NONE)
continue;
entity e = IS_SPEC(it) ? it.enemy : it;
if (e.typehitsound) {
it.typehit_time = time;
+ } else if (e.killsound) {
+ it.kill_time = time;
} else if (e.damage_dealt) {
it.hit_time = time;
it.damage_dealt_total += ceil(e.damage_dealt);
FOREACH_CLIENT(true, {
it.typehitsound = false;
it.damage_dealt = 0;
+ it.killsound = false;
antilag_record(it, CS(it), altime);
});
IL_EACH(g_monsters, true,
{
antilag_record(it, it, altime);
});
- FOREACH_CLIENT(PS(it), {
- PlayerState s = PS(it);
- s.ps_push(s, it);
- });
systems_update();
IL_ENDFRAME();
}
void Shutdown()
{
- gameover = 2;
+ game_stopped = 2;
if(world_initialized > 0)
{