X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_world.qc;h=9df213c1b8b3748ef74551d84b60239865dab0d3;hb=fb839150d0cd4c4937d183b723b6cc1ed250c66a;hp=f873ea7c6b00331ed188b2bf1bf3f030f165fc4f;hpb=1f5d48dd87aaf7d479958202f3960de01ac877d2;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index f873ea7c6..9df213c1b 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -512,6 +512,8 @@ void spawnfunc_worldspawn (void) InitGameplayMode(); readlevelcvars(); GrappleHookInit(); + ElectroInit(); + LaserInit(); player_count = 0; bot_waypoints_for_items = cvar("g_waypoints_for_items"); @@ -699,7 +701,22 @@ void spawnfunc_worldspawn (void) CheatInit(); - localcmd("\n_sv_hook_gamestart ", GetGametype(), ";"); + localcmd("\n_sv_hook_gamestart ", GetGametype(), "\n"); + + // fill sv_curl_serverpackages from .serverpackage files + if(cvar("sv_curl_serverpackages_auto")) + { + fd = search_begin("*.serverpackage", TRUE, FALSE); + s = ""; + if(fd >= 0) + { + j = search_getsize(fd); + for(i = 0; i < j; ++i) + s = strcat(s, " ", search_getfilename(fd, i)); + search_end(fd); + } + cvar_set("sv_curl_serverpackages", substring(s, 1, -1)); + } world_initialized = 1; } @@ -1427,7 +1444,7 @@ void NextLevel() if(cvar("g_campaign")) CampaignPreIntermission(); - localcmd("\nsv_hook_gameend;"); + localcmd("\nsv_hook_gameend\n"); } /* @@ -1740,6 +1757,8 @@ void ShuffleMaplist() float leaderfrags; float WinningCondition_Scores(float limit, float leadlimit) { + float limitreached; + // TODO make everything use THIS winning condition (except LMS) WinningConditionHelper(); @@ -1784,13 +1803,22 @@ float WinningCondition_Scores(float limit, float leadlimit) } } + limitreached = FALSE; + if(limit) + if(WinningConditionHelper_topscore >= limit) + limitreached = TRUE; + if(leadlimit) + { + float leadlimitreached; + leadlimitreached = (WinningConditionHelper_topscore - WinningConditionHelper_secondscore >= leadlimit); + if(cvar("leadlimit_and_fraglimit")) + limitreached = (limitreached && leadlimitreached); + else + limitreached = (limitreached || leadlimitreached); + } + return GetWinningCode( - WinningConditionHelper_topscore && - ( - (limit && (WinningConditionHelper_topscore >= limit)) - || - (leadlimit && (WinningConditionHelper_topscore - WinningConditionHelper_secondscore >= leadlimit)) - ), + WinningConditionHelper_topscore && limitreached, WinningConditionHelper_equality ); }