X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fworld.qc;h=977f235715a90a90064d4a8f332f3dbd36595af1;hb=d7e0a1d59f86db1ee3018030badefe4508f84f33;hp=cfaec58e38cd5dc17413cfa28b1d5d497d5c2d34;hpb=4acf073c7dc79dfe676b695165066b7a78b545d8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/world.qc b/qcsrc/server/world.qc index cfaec58e3..977f23571 100644 --- a/qcsrc/server/world.qc +++ b/qcsrc/server/world.qc @@ -166,10 +166,14 @@ void cvar_changes_init() { k = bufstr_get(h, i); -#define BADPREFIX(p) if(substring(k, 0, strlen(p)) == p) continue -#define BADPRESUFFIX(p,s) if(substring(k, 0, strlen(p)) == p && substring(k, -strlen(s), -1) == s) continue +#define BADPREFIX_COND(p) (substring(k, 0, strlen(p)) == p) +#define BADSUFFIX_COND(s) (substring(k, -strlen(s), -1) == s) + +#define BADPREFIX(p) if(BADPREFIX_COND(p)) continue +#define BADPRESUFFIX(p, s) if(BADPREFIX_COND(p) && BADSUFFIX_COND(s)) continue #define BADCVAR(p) if(k == p) continue #define BADVALUE(p, val) if (k == p && v == val) continue +#define BADPRESUFFIXVALUE(p, s, val) if(BADPREFIX_COND(p) && BADSUFFIX_COND(s) && v == val) continue // general excludes and namespaces for server admin used cvars BADPREFIX("help_"); // PN's server has this listed as changed, let's not rat him out for THAT @@ -232,6 +236,10 @@ void cvar_changes_init() BADCVAR("timeformat"); BADCVAR("timestamps"); BADCVAR("g_require_stats"); + BADCVAR("g_chatban_list"); + BADCVAR("g_playban_list"); + BADCVAR("g_playban_minigames"); + BADCVAR("g_voteban_list"); BADPREFIX("developer_"); BADPREFIX("g_ban_"); BADPREFIX("g_banned_list"); @@ -255,8 +263,6 @@ void cvar_changes_init() // these can contain player IDs, so better hide BADPREFIX("g_forced_team_"); - BADCVAR("sv_muteban_list"); - BADCVAR("sv_voteban_list"); BADCVAR("sv_allow_customplayermodels_idlist"); BADCVAR("sv_allow_customplayermodels_speciallist"); @@ -285,6 +291,7 @@ void cvar_changes_init() BADCVAR("g_keyhunt"); BADCVAR("g_keyhunt_teams"); BADCVAR("g_lms"); + BADCVAR("g_mayhem"); BADCVAR("g_nexball"); BADCVAR("g_onslaught"); BADCVAR("g_race"); @@ -299,6 +306,12 @@ void cvar_changes_init() BADCVAR("g_tdm"); BADCVAR("g_tdm_on_dm_maps"); BADCVAR("g_tdm_teams"); + BADCVAR("g_tka"); + BADCVAR("g_tka_on_ka_maps"); + BADCVAR("g_tka_on_tdm_maps"); + BADCVAR("g_tka_teams"); + BADCVAR("g_tmayhem"); + BADCVAR("g_tmayhem_teams"); BADCVAR("g_vip"); BADCVAR("leadlimit"); BADCVAR("nextmap"); @@ -376,10 +389,15 @@ void cvar_changes_init() BADCVAR("g_spawn_alloweffects"); BADCVAR("g_tdm_point_leadlimit"); BADCVAR("g_tdm_point_limit"); + BADCVAR("g_mayhem_point_limit"); + BADCVAR("g_mayhem_point_leadlimit"); + BADCVAR("g_tmayhem_point_limit"); + BADCVAR("g_tmayhem_point_leadlimit"); BADCVAR("leadlimit_and_fraglimit"); BADCVAR("leadlimit_override"); BADCVAR("pausable"); BADCVAR("sv_announcer"); + BADCVAR("sv_autopause"); BADCVAR("sv_checkforpacketsduringsleep"); BADCVAR("sv_damagetext"); BADCVAR("sv_db_saveasdump"); @@ -396,7 +414,6 @@ void cvar_changes_init() BADCVAR("w_prop_interval"); BADPREFIX("chat_"); BADPREFIX("crypto_"); - BADPREFIX("gameversion"); BADPREFIX("g_chat_"); BADPREFIX("g_ctf_captimerecord_"); BADPREFIX("g_hats_"); @@ -440,6 +457,7 @@ void cvar_changes_init() BADCVAR("g_ban_sync_uri"); BADCVAR("g_buffs"); BADCVAR("g_ca_teams_override"); + BADCVAR("g_ca_prevent_stalemate"); BADCVAR("g_ctf_fullbrightflags"); BADCVAR("g_ctf_ignore_frags"); BADCVAR("g_ctf_leaderboard"); @@ -453,6 +471,7 @@ void cvar_changes_init() BADCVAR("g_keyhunt_point_limit"); BADCVAR("g_keyhunt_teams_override"); BADCVAR("g_lms_lives_override"); + BADCVAR("g_mayhem_powerups"); BADCVAR("g_maplist"); BADCVAR("g_maxplayers"); BADCVAR("g_mirrordamage"); @@ -469,6 +488,8 @@ void cvar_changes_init() BADCVAR("g_start_delay"); BADCVAR("g_superspectate"); BADCVAR("g_tdm_teams_override"); + BADCVAR("g_tmayhem_teams_override"); + BADCVAR("g_tmayhem_powerups"); BADCVAR("g_weapon_stay"); BADPRESUFFIX("g_", "_weapon_stay"); BADCVAR("hostname"); BADCVAR("log_file"); @@ -512,6 +533,9 @@ void cvar_changes_init() BADPREFIX("sv_info_"); BADPREFIX("sv_ready_restart_"); + BADPRESUFFIXVALUE("g_", "_weaponarena", "most"); + BADPRESUFFIXVALUE("g_", "_weaponarena", "most_available"); + // mutators that announce themselves properly to the server browser BADCVAR("g_instagib"); BADCVAR("g_new_toys"); @@ -523,6 +547,7 @@ void cvar_changes_init() #undef BADPREFIX #undef BADCVAR #undef BADVALUE +#undef BADPRESUFFIXVALUE if(pureadding) { @@ -660,15 +685,14 @@ void GameplayMode_DelayedInit(entity this) int u = AVAILABLE_TEAMS - d; map_minplayers += (u < d && u + map_minplayers <= m) ? u : -d; } - warmup_limit = -1; } else - map_minplayers = 0; // don't display a minimum if it's not used + map_minplayers = 0; // don't display a minimum if it's not used (g_maxplayers < 0 && g_warmup >= 0) } void InitGameplayMode() { - VoteReset(); + VoteReset(false); // find out good world mins/maxs bounds, either the static bounds found by looking for solid, or the mapinfo specified bounds get_mi_min_max(1); @@ -735,8 +759,7 @@ spawnfunc(worldspawn) { if (!server_is_dedicated) { - // force unloading of server pk3 files when starting a listen server - // localcmd("\nfs_rescan\n"); // FIXME: does more harm than good, has unintended side effects. What we really want is to unload temporary pk3s only + // DP unloads dlcache pk3s before starting a listen server since https://gitlab.com/xonotic/darkplaces/-/merge_requests/134 // restore csqc_progname too string expect = "csprogs.dat"; wantrestart = cvar_string("csqc_progname") != expect; @@ -865,9 +888,6 @@ spawnfunc(worldspawn) GameRules_limit_fallbacks(); - if(warmup_limit == 0) - warmup_limit = autocvar_timelimit * 60; - player_count = 0; bot_waypoints_for_items = autocvar_g_waypoints_for_items; if(bot_waypoints_for_items == 1) @@ -1038,6 +1058,10 @@ spawnfunc(worldspawn) WinningConditionHelper(this); // set worldstatus + if (autocvar_sv_autopause && server_is_dedicated && !wantrestart) + // INITPRIO_LAST is to soon: bots either didn't join yet or didn't leave yet, see: bot_fixcount() + defer(this, 5, Pause_TryPause_Dedicated); + world_initialized = 1; __spawnfunc_spawn_all(); } @@ -1318,7 +1342,7 @@ void NextLevel() //pos = FindIntermission (); - VoteReset(); + VoteReset(true); DumpStats(true); @@ -2106,11 +2130,21 @@ void readlevelcvars() sv_ready_restart_after_countdown = cvar("sv_ready_restart_after_countdown"); - warmup_stage = cvar("g_warmup"); - warmup_limit = cvar("g_warmup_limit"); - if(cvar("g_campaign")) warmup_stage = 0; // no warmup during campaign + else + { + warmup_stage = autocvar_g_warmup; + if (warmup_stage < 0 || warmup_stage > 1) + warmup_limit = -1; // don't start until there's enough players + else if (warmup_stage == 1) + { + // this code is duplicated in ReadyCount() + warmup_limit = cvar("g_warmup_limit"); + if(warmup_limit == 0) + warmup_limit = autocvar_timelimit * 60; + } + } g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon"); g_pickup_respawntime_superweapon = cvar("g_pickup_respawntime_superweapon");