X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_world.qc;h=bf033e4d6801531fd003a22fe7116efd2b67736d;hb=b3a4b144384dbdd7f9ef01d98b7c3fcd83c5e547;hp=9888fa5d52a34ba00365003f32f4134c235542c4;hpb=d499d939ae90734c284c85058612aebbd0e5f273;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 9888fa5d5..1ba0a54eb 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -101,15 +101,13 @@ void fteqcc_testbugs() * players. Also plays reminder sounds. */ void timeoutHandler_Think() { - local string timeStr; local entity plr; if (timeoutStatus == 1) { if (remainingLeadTime > 0) { //centerprint the information to every player - timeStr = getTimeoutText(0); FOR_EACH_REALCLIENT(plr) { if(plr.classname == "player") { - centerprint_atprio(plr, CENTERPRIO_SPAM, timeStr); + Send_CSQC_Centerprint_Generic(plr, CPID_TIMEOUT_COUNTDOWN, "Timeout begins in %d seconds!", 1, remainingLeadTime); } } remainingLeadTime -= 1; @@ -133,10 +131,9 @@ void timeoutHandler_Think() { } else if (timeoutStatus == 2) { if (remainingTimeoutTime > 0) { - timeStr = getTimeoutText(0); FOR_EACH_REALCLIENT(plr) { if(plr.classname == "player") { - centerprint_atprio(plr, CENTERPRIO_SPAM, timeStr); + Send_CSQC_Centerprint_Generic(plr, CPID_TIMEOUT_COUNTDOWN, "Timeout ends in %d seconds!", 1, remainingTimeoutTime); } } if(remainingTimeoutTime == autocvar_sv_timeout_resumetime) { //play a warning sound when only seconds are left @@ -156,7 +153,7 @@ void timeoutHandler_Think() { //get rid of the countdown message FOR_EACH_REALCLIENT(plr) { if(plr.classname == "player") { - centerprint_atprio(plr, CENTERPRIO_SPAM, ""); + Send_CSQC_Centerprint_Generic_Expire(plr, CPID_TIMEOUT_COUNTDOWN); } } remove(self); @@ -167,7 +164,7 @@ void timeoutHandler_Think() { else if (timeoutStatus == 0) { //if a player called the resumegame command (which set timeoutStatus to 0 already) FOR_EACH_REALCLIENT(plr) { if(plr.classname == "player") { - centerprint_atprio(plr, CENTERPRIO_SPAM, ""); + Send_CSQC_Centerprint_Generic_Expire(plr, CPID_TIMEOUT_COUNTDOWN); } } remove(self); @@ -237,6 +234,10 @@ void cvar_changes_init() #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 BADCVAR(p) if(k == p) 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 + // internal BADPREFIX("csqc_"); BADPREFIX("cvar_check_"); @@ -289,10 +290,12 @@ void cvar_changes_init() BADCVAR("sv_vote_master_password"); BADCVAR("sys_colortranslation"); BADCVAR("sys_specialcharactertranslation"); + BADCVAR("timeformat"); BADCVAR("timestamps"); BADPREFIX("developer_"); BADPREFIX("g_ban_"); BADPREFIX("g_chat_flood_"); + BADPREFIX("g_playerstats_"); BADPREFIX("g_voice_flood_"); BADPREFIX("rcon_"); BADPREFIX("settemp_"); @@ -305,10 +308,7 @@ void cvar_changes_init() BADPREFIX("sv_weaponstats_"); // these can contain player IDs, so better hide - BADCVAR("g_forced_team_red"); - BADCVAR("g_forced_team_blue"); - BADCVAR("g_forced_team_yellow"); - BADCVAR("g_forced_team_pink"); + BADPREFIX("g_forced_team_"); // mapinfo BADCVAR("fraglimit"); @@ -416,6 +416,7 @@ void cvar_changes_init() BADCVAR("g_ctf_ignore_frags"); BADCVAR("g_ctf_win_mode"); BADCVAR("g_domination_point_limit"); + BADCVAR("g_friendlyfire"); BADCVAR("g_fullbrightitems"); BADCVAR("g_fullbrightplayers"); BADCVAR("g_keyhunt_point_limit"); @@ -429,10 +430,13 @@ void cvar_changes_init() BADCVAR("g_maplist_votable_abstain"); BADCVAR("g_maplist_votable_nodetail"); BADCVAR("g_maplist_votable_suggestions"); + BADCVAR("g_maxplayers"); BADCVAR("g_minstagib"); + BADCVAR("g_mirrordamage"); BADCVAR("g_nexball_goallimit"); BADCVAR("g_runematch_point_limit"); BADCVAR("g_start_delay"); + BADCVAR("g_warmup"); BADCVAR("g_weapon_stay"); BADPRESUFFIX("g_", "_weapon_stay"); BADCVAR("hostname"); BADCVAR("log_file"); @@ -464,10 +468,10 @@ void cvar_changes_init() BADCVAR("sv_vote_master_commands"); BADCVAR("sv_vote_master_password"); BADCVAR("sv_vote_simple_majority_factor"); + BADCVAR("sys_ticrate"); + BADCVAR("teamplay_mode"); BADCVAR("timelimit_override"); - BADCVAR("g_warmup"); BADPREFIX("g_warmup_"); - BADCVAR("teamplay_mode"); if(autocvar_g_minstagib) { @@ -710,8 +714,7 @@ void spawnfunc_worldspawn (void) GameLogInit(); // prepare everything if(autocvar_sv_eventlog) { - s = strcat(ftos(autocvar_sv_eventlog_files_counter), "."); - s = strcat(s, ftos(random())); + s = sprintf("%d.%s.%06d", ftos(autocvar_sv_eventlog_files_counter), strftime(FALSE, "%s"), floor(random() * 1000000)); matchid = strzone(s); GameLogEcho(strcat(":gamestart:", GetGametype(), "_", GetMapname(), ":", s)); @@ -821,10 +824,15 @@ void spawnfunc_worldspawn (void) addstat(STAT_WEAPON_CLIPLOAD, AS_INT, clip_load); addstat(STAT_WEAPON_CLIPSIZE, AS_INT, clip_size); addstat(STAT_LAST_PICKUP, AS_FLOAT, last_pickup); + addstat(STAT_HIT_TIME, AS_FLOAT, hit_time); + addstat(STAT_TYPEHIT_TIME, AS_FLOAT, typehit_time); + addstat(STAT_LAYED_MINES, AS_INT, minelayer_mines); addstat(STAT_NEX_CHARGE, AS_FLOAT, nex_charge); addstat(STAT_NEX_CHARGEPOOL, AS_FLOAT, nex_chargepool_ammo); + addstat(STAT_HAGAR_LOAD, AS_INT, hagar_load); + if(g_ca || g_freezetag) { addstat(STAT_REDALIVE, AS_INT, redalive_stat); @@ -909,8 +917,12 @@ void spawnfunc_worldspawn (void) // fill sv_curl_serverpackages from .serverpackage files if(autocvar_sv_curl_serverpackages_auto) { - fd = search_begin("*.serverpackage", TRUE, FALSE); s = ""; + n = tokenize_console(cvar_string("sv_curl_serverpackages")); + for(i = 0; i < n; ++i) + if(substring(argv(i), -14, -1) != ".serverpackage") + s = strcat(s, " ", argv(i)); + fd = search_begin("*.serverpackage", TRUE, FALSE); if(fd >= 0) { j = search_getsize(fd); @@ -932,19 +944,6 @@ void spawnfunc_light (void) remove(self); } -float TryFile( string pFilename ) -{ - local float lHandle; - dprint("TryFile(\"", pFilename, "\")\n"); - lHandle = fopen( pFilename, FILE_READ ); - if( lHandle != -1 ) { - fclose( lHandle ); - return TRUE; - } else { - return FALSE; - } -}; - string GetGametype() { return GametypeNameFromType(game); @@ -988,14 +987,12 @@ float MapHasRightSize(string map) if(autocvar_g_maplist_check_waypoints) { dprint("checkwp "); dprint(map); - fh = fopen(strcat("maps/", map, ".waypoints"), FILE_READ); - if(fh < 0) + if(!fexists(strcat("maps/", map, ".waypoints"))) { dprint(": no waypoints\n"); return FALSE; } dprint(": has waypoints\n"); - fclose(fh); } // open map size restriction file @@ -1195,7 +1192,7 @@ void Maplist_Init() if(Map_Count == 0) { bprint( "Maplist is empty! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); + cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); if(autocvar_g_maplist_shuffle) ShuffleMaplist(); localcmd("\nmenu_cmd sync\n"); @@ -1315,7 +1312,7 @@ void GotoNextMap() if(allowReset) { bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); + cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); if(autocvar_g_maplist_shuffle) ShuffleMaplist(); localcmd("\nmenu_cmd sync\n"); @@ -1429,7 +1426,6 @@ void DumpStats(float final) float to_eventlog; float to_file; float i; - entity e; to_console = autocvar_sv_logscores_console; to_eventlog = autocvar_sv_eventlog; @@ -1492,7 +1488,7 @@ void DumpStats(float final) } } - if(teams_matter) + if(teamplay) { s = strcat(":labels:teamscores:", GetTeamScoreString(0, 0)); if(to_console) @@ -1531,8 +1527,6 @@ void FixIntermissionClient(entity e) string s; if(!e.autoscreenshot) // initial call { - e.angles = e.v_angle; - e.angles_x = -e.angles_x; 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) @@ -1555,11 +1549,6 @@ void FixIntermissionClient(entity e) WriteByte(MSG_ONE, SVC_INTERMISSION); } } - - //e.velocity = '0 0 0'; - //e.fixangle = TRUE; - - // TODO halt weapon animation } @@ -1598,6 +1587,7 @@ void NextLevel() FOR_EACH_CLIENT(e) PlayerStats_AddGlobalInfo(e); PlayerStats_Shutdown(); + WeaponStats_Shutdown(); if(autocvar_sv_eventlog) GameLogEcho(":gameover"); @@ -1938,7 +1928,7 @@ float WinningCondition_Scores(float limit, float leadlimit) // TODO make everything use THIS winning condition (except LMS) WinningConditionHelper(); - if(teams_matter) + if(teamplay) { team1_score = TeamScore_GetCompareValue(COLOR_TEAM1); team2_score = TeamScore_GetCompareValue(COLOR_TEAM2); @@ -2308,7 +2298,6 @@ string mapvote_maps_pakfile[MAPVOTE_COUNT]; float mapvote_maps_suggested[MAPVOTE_COUNT]; string mapvote_suggestions[MAPVOTE_COUNT]; float mapvote_suggestion_ptr; -float mapvote_maxlen; float mapvote_voters; float mapvote_votes[MAPVOTE_COUNT]; float mapvote_run; @@ -2370,8 +2359,10 @@ void MapVote_AddVotable(string nextMap, float isSuggestion) for(j = 0; j < mapvote_count; ++j) if(mapvote_maps[j] == nextMap) return; - if(strlen(nextMap) > mapvote_maxlen) - mapvote_maxlen = strlen(nextMap); + // suggestions might be no longer valid/allowed after gametype switch! + if(isSuggestion) + if(!MapInfo_CheckMap(nextMap)) + return; mapvote_maps[mapvote_count] = strzone(nextMap); mapvote_maps_suggested[mapvote_count] = isSuggestion; @@ -2433,7 +2424,7 @@ void MapVote_Init() if(mapvote_count == 0) { bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); + cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); if(autocvar_g_maplist_shuffle) ShuffleMaplist(); localcmd("\nmenu_cmd sync\n"); @@ -2836,16 +2827,16 @@ void EndFrame() if(self.classname == "spectator") { if(self.enemy.typehitsound) - play2(self, "misc/typehit.wav"); - else if(self.enemy.hitsound && self.cvar_cl_hitsound) - play2(self, "misc/hit.wav"); + self.typehit_time = time; + else if(self.enemy.hitsound) + self.hit_time = time; } else { if(self.typehitsound) - play2(self, "misc/typehit.wav"); - else if(self.hitsound && self.cvar_cl_hitsound) - play2(self, "misc/hit.wav"); + self.typehit_time = time; + else if(self.hitsound) + self.hit_time = time; } } altime = time + frametime * (1 + autocvar_g_antilag_nudge);