X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_world.qc;h=d365377c023cd70fead893d46013c59e5cda8d97;hb=f052f5390a134c3fc3238367b1aa2e4ac3bfd48e;hp=c3dc5be39f605369ca208c79ec61490d9bdda3cd;hpb=93afc08b09294e6dea4d0c98ce5226fdee9d1c92;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index c3dc5be39..d365377c0 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -336,6 +336,7 @@ void cvar_changes_init() BADCVAR("g_ca_point_limit"); BADCVAR("g_ctf_captimerecord_always"); BADCVAR("g_ctf_flag_glowtrails"); + BADCVAR("g_ctf_dynamiclights"); BADCVAR("g_ctf_flag_pickup_verbosename"); BADCVAR("g_domination_point_leadlimit"); BADCVAR("g_forced_respawn"); @@ -493,6 +494,7 @@ void cvar_changes_init() BADCVAR("g_ca_weaponarena"); BADCVAR("g_freezetag_weaponarena"); BADCVAR("g_lms_weaponarena"); + BADCVAR("g_ctf_stalemate_time"); if(cvar_string("g_mod_balance") == "Testing") { @@ -811,8 +813,6 @@ spawnfunc(worldspawn) if(this.spawnflags & SPAWNFLAG_NO_WAYPOINTS_FOR_ITEMS) bot_waypoints_for_items = 0; - precache(); - WaypointSprite_Init(); GameLogInit(); // prepare everything @@ -1258,7 +1258,7 @@ void Maplist_Init() break; } } - + if (i == Map_Count) { bprint( "Maplist contains no usable maps! Resetting it to default map list.\n" ); @@ -1416,54 +1416,6 @@ void IntermissionThink(entity this) MapVote_Start(); } -/* -============ -FindIntermission - -Returns the entity to view from -============ -*/ -/* -entity FindIntermission() -{ - local entity spot; - local float cyc; - -// look for info_intermission first - spot = find(NULL, classname, "info_intermission"); - if (spot) - { // pick a random one - cyc = random() * 4; - while (cyc > 1) - { - spot = find(spot, classname, "info_intermission"); - if (!spot) - spot = find(spot, classname, "info_intermission"); - cyc = cyc - 1; - } - return spot; - } - -// then look for the start position - spot = find(NULL, classname, "info_player_start"); - if (spot) - return spot; - -// testinfo_player_start is only found in regioned levels - spot = find(NULL, classname, "testplayerstart"); - if (spot) - return spot; - -// then look for the start position - spot = find(NULL, classname, "info_player_deathmatch"); - if (spot) - return spot; - - //objerror ("FindIntermission: no spot"); - return NULL; -} -*/ - /* =============================================================================== @@ -1753,7 +1705,9 @@ void ShuffleMaplist() cvar_set("g_maplist", shufflewords(autocvar_g_maplist)); } -float leaderfrags; +float leaderscore; +float secondscore; +int fragsleft_last; float WinningCondition_Scores(float limit, float leadlimit) { float limitreached; @@ -1789,18 +1743,45 @@ float WinningCondition_Scores(float limit, float leadlimit) if(MUTATOR_CALLHOOK(Scores_CountFragsRemaining)) // these modes always score in increments of 1, thus this makes sense { - if(leaderfrags != WinningConditionHelper_topscore) + if (leaderscore != WinningConditionHelper_topscore || + secondscore != WinningConditionHelper_secondscore) { - leaderfrags = WinningConditionHelper_topscore; + int fragsleft = 0; + + leaderscore = WinningConditionHelper_topscore; + secondscore = WinningConditionHelper_secondscore; if (limit) { - if (leaderfrags == limit - 1) + if (leaderscore == limit - 1) + fragsleft |= BIT(1); + else if (leaderscore == limit - 2) + fragsleft |= BIT(2); + else if (leaderscore == limit - 3) + fragsleft |= BIT(3); + } + if (leadlimit) + { + if (leaderscore == leadlimit + secondscore - 1) + fragsleft |= BIT(1); + else if (leaderscore == leadlimit + secondscore - 2) + fragsleft |= BIT(2); + else if (leaderscore == leadlimit + secondscore - 3) + fragsleft |= BIT(3); + } + + fragsleft = fragsleft & -fragsleft; // lowest significant bit + + if (fragsleft_last != fragsleft) // do not announce same remaining frags multiple times + { + if (fragsleft & BIT(1)) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_1); - else if (leaderfrags == limit - 2) + else if (fragsleft & BIT(2)) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_2); - else if (leaderfrags == limit - 3) + else if (fragsleft & BIT(3)) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_3); + + fragsleft_last = fragsleft; } } } @@ -2108,7 +2089,7 @@ void Physics_Frame() if(autocvar_sv_freezenonclients) return; - FOREACH_ENTITY_FLOAT(pure_data, false, + IL_EACH(g_moveables, true, { if(IS_CLIENT(it) || it.classname == "" || it.move_movetype == MOVETYPE_PUSH || it.move_movetype == MOVETYPE_FAKEPUSH || it.move_movetype == MOVETYPE_PHYSICS) continue; @@ -2134,7 +2115,7 @@ void Physics_Frame() if(autocvar_sv_gameplayfix_delayprojectiles >= 0) return; - FOREACH_ENTITY_FLOAT(move_qcphysics, true, + IL_EACH(g_moveables, it.move_qcphysics, { if(IS_CLIENT(it) || is_pure(it) || it.classname == "" || it.move_movetype == MOVETYPE_NONE) continue;