X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_world.qc;h=71c731a308e830ac59d3d3b323b177edc4444e8e;hb=905ec2fbd2b610eeb2591cdddbf71ce24b7bb3ab;hp=803e4376b3e29b0afee09d8fc88013343764d875;hpb=1c9d0b4994d43c970e3fa02f651b5f5d79765e5b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 803e4376b..71c731a30 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -19,6 +19,7 @@ #include "teamplay.qh" #include "weapons/weaponstats.qh" #include "../common/constants.qh" +#include #include "../common/deathtypes/all.qh" #include "../common/mapinfo.qh" #include "../common/monsters/_mod.qh" @@ -226,9 +227,11 @@ void cvar_changes_init() 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_"); @@ -250,17 +253,22 @@ void cvar_changes_init() // 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"); @@ -271,12 +279,15 @@ void cvar_changes_init() BADCVAR("g_race_laps_limit"); BADCVAR("g_race_qualifying_timelimit"); BADCVAR("g_race_qualifying_timelimit_override"); + 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"); @@ -306,6 +317,8 @@ void cvar_changes_init() 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"); @@ -318,11 +331,14 @@ void cvar_changes_init() BADCVAR("g_freezetag_point_limit"); BADCVAR("g_hats"); 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("g_piggyback"); + BADCVAR("g_playerclip_collisions"); BADCVAR("g_tdm_point_leadlimit"); BADCVAR("g_tdm_point_limit"); BADCVAR("leadlimit_and_fraglimit"); @@ -335,6 +351,7 @@ void cvar_changes_init() BADCVAR("sv_precacheplayermodels"); BADCVAR("sv_stepheight"); BADCVAR("sv_timeout"); + BADCVAR("sv_weapons_modeloverride"); BADPREFIX("crypto_"); BADPREFIX("gameversion_"); BADPREFIX("g_chat_"); @@ -399,6 +416,7 @@ void cvar_changes_init() BADCVAR("g_nexball_goallimit"); BADCVAR("g_norecoil"); BADCVAR("g_physics_clientselect"); + BADCVAR("g_pinata"); BADCVAR("g_powerups"); BADCVAR("g_spawnshieldtime"); BADCVAR("g_start_delay"); @@ -917,7 +935,8 @@ spawnfunc(worldspawn) if(cvar_string("g_mod_config") != cvar_defstring("g_mod_config")) modname = cvar_string("g_mod_config"); // extra mutators that deserve to count as mod - MUTATOR_CALLHOOK(SetModname); + MUTATOR_CALLHOOK(SetModname, modname); + modname = M_ARGV(0, string); // save it for later modname = strzone(modname); @@ -1135,7 +1154,7 @@ float(float exponent) MaplistMethod_Shuffle = // more clever shuffling 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)); @@ -1306,7 +1325,6 @@ When the player presses attack or jump, change to the next level 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); @@ -1446,11 +1464,11 @@ void DumpStats(float final) 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) @@ -1494,9 +1512,6 @@ void FixIntermissionClient(entity e) 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]; @@ -1530,11 +1545,10 @@ only called if a time or frag limit has expired */ 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 @@ -1567,7 +1581,7 @@ void NextLevel() 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(); @@ -1589,7 +1603,7 @@ Exit deathmatch games upon conditions */ 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)) @@ -1841,7 +1855,7 @@ void CheckRules_World() 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(); @@ -2032,7 +2046,9 @@ void Physics_Frame() 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; @@ -2070,6 +2086,8 @@ void EndFrame() 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); @@ -2084,6 +2102,7 @@ void EndFrame() FOREACH_CLIENT(true, { it.typehitsound = false; it.damage_dealt = 0; + it.killsound = false; antilag_record(it, CS(it), altime); }); IL_EACH(g_monsters, true, @@ -2162,7 +2181,7 @@ void RestoreGame() void Shutdown() { - gameover = 2; + game_stopped = 2; if(world_initialized > 0) {