]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/gamemodes/sv_rules.qc
Remove redundant .team initialization in MUTATOR_HOOKFUNCTION(ca, reset_map_players...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / gamemodes / sv_rules.qc
index 6da75b9319cc16e59c5dcbb762ec111e2acb9337..84d89909fe98274f47eb44e51999758f9371dbb6 100644 (file)
@@ -1,5 +1,6 @@
 #include "sv_rules.qh"
 
+#include <server/spawnpoints.qh>
 #include <server/teamplay.qh>
 
 void GameRules_teams(bool value)
@@ -8,6 +9,7 @@ void GameRules_teams(bool value)
         serverflags |= SERVERFLAG_TEAMPLAY;
         teamplay = 1;
         cvar_set("teamplay", "2");  // DP needs this for sending proper getstatus replies.
+        Team_InitTeams();
         GameRules_spawning_teams(true);
     } else {
        serverflags &= ~SERVERFLAG_TEAMPLAY;
@@ -101,3 +103,31 @@ bool GameRules_scoring_is_vip(entity player)
 {
     return player.m_GameRules_scoring_vip;
 }
+
+// Uses client.float_field to accumulate and consume float score and adds score to the player as int (rounded)
+// only when at least one unit of score has been accumulated. It works with negative score too
+// Float scores can't be used as score because they aren't supported by the QC score networking system
+// and online server browsers (e.g. qstat)
+float _GameRules_scoring_add_float2int(entity client, entity sp, float value, .float float_field, float score_factor)
+{
+       client.(float_field) += value;
+       float score_counter = client.(float_field) / score_factor;
+       if (score_counter >= -0.5 && score_counter < 0.5)
+               return 0;
+
+       // NOTE: this code works for subtracting score too
+       int points = floor(score_counter + 0.5);
+       client.(float_field) -= points * score_factor;
+       if (!points)
+               return 0;
+       return PlayerScore_Add(client, sp, points);
+}
+
+float _GameRules_scoring_add(entity client, entity sp, float value)
+{
+    return PlayerScore_Add(client, sp, value);
+}
+float _GameRules_scoring_add_team(entity client, entity sp, int st, float value)
+{
+    return PlayerTeamScore_Add(client, sp, st, value);
+}