]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mapvoting.qc
fix sv_vote_gametype_default_current to match description
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mapvoting.qc
index a8e2b4cecf08161f0af704d78478613fdbed47a9..acac831d76a181940782c1b074d7b5e0ef0b3d61 100644 (file)
@@ -1,5 +1,7 @@
 #include "mapvoting.qh"
 
+#include <server/defs.qh>
+#include <server/miscfunctions.qh>
 #include "g_world.qh"
 #include "command/cmd.qh"
 #include "command/getreplies.qh"
@@ -7,6 +9,7 @@
 #include <common/net_linked.qh>
 #include "../common/mapinfo.qh"
 #include "../common/playerstats.qh"
+#include <common/state.qh>
 #include "../common/util.qh"
 
 
 float mapvote_nextthink;
 float mapvote_keeptwotime;
 float mapvote_timeout;
-const float MAPVOTE_SCREENSHOT_DIRS_COUNT = 4;
+const int MAPVOTE_SCREENSHOT_DIRS_COUNT = 4;
 string mapvote_screenshot_dirs[MAPVOTE_SCREENSHOT_DIRS_COUNT];
-float mapvote_screenshot_dirs_count;
+int mapvote_screenshot_dirs_count;
 
-float mapvote_count;
-float mapvote_count_real;
+int mapvote_count;
+int mapvote_count_real;
 string mapvote_maps[MAPVOTE_COUNT];
-float mapvote_maps_screenshot_dir[MAPVOTE_COUNT];
+int mapvote_maps_screenshot_dir[MAPVOTE_COUNT];
 string mapvote_maps_pakfile[MAPVOTE_COUNT];
-float mapvote_maps_suggested[MAPVOTE_COUNT];
+bool mapvote_maps_suggested[MAPVOTE_COUNT];
 string mapvote_suggestions[MAPVOTE_COUNT];
-float mapvote_suggestion_ptr;
-float mapvote_voters;
-float mapvote_selections[MAPVOTE_COUNT];
-float mapvote_maps_flags[MAPVOTE_COUNT];
-float mapvote_run;
-float mapvote_detail;
-float mapvote_abstain;
-.float mapvote;
+int mapvote_suggestion_ptr;
+int mapvote_voters;
+int mapvote_selections[MAPVOTE_COUNT];
+int mapvote_maps_flags[MAPVOTE_COUNT];
+bool mapvote_run;
+bool mapvote_detail;
+bool mapvote_abstain;
+.int mapvote;
 
 entity mapvote_ent;
 
@@ -76,9 +79,9 @@ int GameTypeVote_AvailabilityStatus(string type_name)
        return flag | GTV_AVAILABLE;
 }
 
-float GameTypeVote_GetMask()
+int GameTypeVote_GetMask()
 {
-       float n, j, gametype_mask;
+       int n, j, gametype_mask;
        n = tokenizebyseparator(autocvar_sv_vote_gametype_options, " ");
        n = min(MAPVOTE_COUNT, n);
        gametype_mask = 0;
@@ -99,30 +102,21 @@ string GameTypeVote_MapInfo_FixName(string m)
 
 void MapVote_ClearAllVotes()
 {
-       FOREACH_CLIENT(true, LAMBDA(it.mapvote = 0));
+       FOREACH_CLIENT(true, { it.mapvote = 0; });
 }
 
 void MapVote_UnzoneStrings()
 {
-       float j;
-       for(j = 0; j < mapvote_count; ++j)
+       for(int j = 0; j < mapvote_count; ++j)
        {
-               if ( mapvote_maps[j] )
-               {
-                       strunzone(mapvote_maps[j]);
-                       mapvote_maps[j] = string_null;
-               }
-               if ( mapvote_maps_pakfile[j] )
-               {
-                       strunzone(mapvote_maps_pakfile[j]);
-                       mapvote_maps_pakfile[j] = string_null;
-               }
+               strfree(mapvote_maps[j]);
+               strfree(mapvote_maps_pakfile[j]);
        }
 }
 
 string MapVote_Suggest(entity this, string m)
 {
-       float i;
+       int i;
        if(m == "")
                return "That's not how to use this command.";
        if(!autocvar_g_maplist_votable_suggestions)
@@ -160,9 +154,9 @@ string MapVote_Suggest(entity this, string m)
        return strcat("Suggestion of ", m, " accepted.");
 }
 
-void MapVote_AddVotable(string nextMap, float isSuggestion)
+void MapVote_AddVotable(string nextMap, bool isSuggestion)
 {
-       float j, i, o;
+       int j, i, o;
        string pakfile, mapfile;
 
        if(nextMap == "")
@@ -203,15 +197,15 @@ void MapVote_AddVotable(string nextMap, float isSuggestion)
 
 void MapVote_Init()
 {
-       float i;
-       float nmax, smax;
+       int i;
+       int nmax, smax;
 
        MapVote_ClearAllVotes();
        MapVote_UnzoneStrings();
 
        mapvote_count = 0;
        mapvote_detail = !autocvar_g_maplist_votable_nodetail;
-       mapvote_abstain = autocvar_g_maplist_votable_abstain;
+       mapvote_abstain = boolean(autocvar_g_maplist_votable_abstain);
 
        if(mapvote_abstain)
                nmax = min(MAPVOTE_COUNT - 1, autocvar_g_maplist_votable);
@@ -247,7 +241,7 @@ void MapVote_Init()
 
        mapvote_count_real = mapvote_count;
        if(mapvote_abstain)
-               MapVote_AddVotable("don't care", 0);
+               MapVote_AddVotable("don't care", false);
 
        //dprint("mapvote count is ", ftos(mapvote_count), "\n");
 
@@ -343,7 +337,7 @@ void GameTypeVote_SendOption(int i)
 
 bool MapVote_SendEntity(entity this, entity to, int sf)
 {
-       float i;
+       int i;
 
        if(sf & 1)
                sf &= ~2; // if we send 1, we don't need to also send 2
@@ -423,14 +417,14 @@ void MapVote_TouchVotes(entity voter)
        mapvote_ent.SendFlags |= 4;
 }
 
-float MapVote_Finished(float mappos)
+bool MapVote_Finished(int mappos)
 {
        if(alreadychangedlevel)
                return false;
 
        string result;
-       float i;
-       float didntvote;
+       int i;
+       int didntvote;
 
        if(autocvar_sv_eventlog)
        {
@@ -454,7 +448,7 @@ float MapVote_Finished(float mappos)
                        GameLogEcho(strcat(":vote:suggestion_accepted:", mapvote_maps[mappos]));
        }
 
-       FOREACH_CLIENT(IS_REAL_CLIENT(it), LAMBDA(FixClientCvars(it)));
+       FOREACH_CLIENT(IS_REAL_CLIENT(it), { FixClientCvars(it); });
 
        if(gametypevote)
        {
@@ -502,12 +496,12 @@ void MapVote_CheckRules_1()
        });
 }
 
-float MapVote_CheckRules_2()
+bool MapVote_CheckRules_2()
 {
-       float i;
-       float firstPlace, secondPlace, currentPlace;
-       float firstPlaceVotes, secondPlaceVotes, currentVotes;
-       float mapvote_voters_real;
+       int i;
+       int firstPlace, secondPlace, currentPlace;
+       int firstPlaceVotes, secondPlaceVotes, currentVotes;
+       int mapvote_voters_real;
        string result;
 
        if(mapvote_count_real == 1)
@@ -531,7 +525,7 @@ float MapVote_CheckRules_2()
                        }
                }
        firstPlaceVotes = RandomSelection_best_priority;
-       if ( autocvar_sv_vote_gametype_default_current && currentVotes == firstPlaceVotes )
+       if ( autocvar_sv_vote_gametype_default_current && firstPlaceVotes == 0 )
                firstPlace = currentPlace;
        else
                firstPlace = RandomSelection_chosen_float;
@@ -558,14 +552,13 @@ float MapVote_CheckRules_2()
        if(mapvote_keeptwotime)
                if(time > mapvote_keeptwotime || (mapvote_voters_real - firstPlaceVotes - secondPlaceVotes) < secondPlaceVotes)
                {
-                       float didntvote;
                        MapVote_TouchMask();
                        mapvote_keeptwotime = 0;
                        result = strcat(":vote:keeptwo:", mapvote_maps[firstPlace]);
                        result = strcat(result, ":", ftos(firstPlaceVotes));
                        result = strcat(result, ":", mapvote_maps[secondPlace]);
                        result = strcat(result, ":", ftos(secondPlaceVotes), "::");
-                       didntvote = mapvote_voters;
+                       int didntvote = mapvote_voters;
                        for(i = 0; i < mapvote_count; ++i)
                        {
                                didntvote -= mapvote_selections[i];
@@ -590,19 +583,18 @@ float MapVote_CheckRules_2()
 
 void MapVote_Tick()
 {
-       float totalvotes;
 
        MapVote_CheckRules_1(); // count
        if(MapVote_CheckRules_2()) // decide
                return;
 
-       totalvotes = 0;
-       FOREACH_CLIENT(IS_REAL_CLIENT(it), LAMBDA(
+       int totalvotes = 0;
+       FOREACH_CLIENT(IS_REAL_CLIENT(it), {
                // hide scoreboard again
-               if(it.health != 2342)
+               if(GetResource(it, RES_HEALTH) != 2342)
                {
-                       it.health = 2342;
-                       it.impulse = 0;
+                       SetResourceExplicit(it, RES_HEALTH, 2342);
+                       CS(it).impulse = 0;
 
                        msg_entity = it;
                        WriteByte(MSG_ONE, SVC_FINALE);
@@ -613,17 +605,17 @@ void MapVote_Tick()
                if ( !(mapvote_maps_flags[it.mapvote-1] & GTV_AVAILABLE) )
                        it.mapvote = 0;
                // use impulses as new vote
-               if(it.impulse >= 1 && it.impulse <= mapvote_count)
-                       if( mapvote_maps_flags[it.impulse - 1] & GTV_AVAILABLE )
+               if(CS(it).impulse >= 1 && CS(it).impulse <= mapvote_count)
+                       if( mapvote_maps_flags[CS(it).impulse - 1] & GTV_AVAILABLE )
                        {
-                               it.mapvote = it.impulse;
+                               it.mapvote = CS(it).impulse;
                                MapVote_TouchVotes(it);
                        }
-               it.impulse = 0;
+               CS(it).impulse = 0;
 
                if(it.mapvote)
                        ++totalvotes;
-       ));
+       });
 
        MapVote_CheckRules_1(); // just count
 }
@@ -693,7 +685,7 @@ void MapVote_Think()
        MapVote_Tick();
 }
 
-float GameTypeVote_SetGametype(Gametype type)
+bool GameTypeVote_SetGametype(Gametype type)
 {
        if (MapInfo_CurrentGametype() == type)
                return true;
@@ -728,8 +720,8 @@ float GameTypeVote_SetGametype(Gametype type)
        return true;
 }
 
-float gametypevote_finished;
-float GameTypeVote_Finished(float pos)
+bool gametypevote_finished;
+bool GameTypeVote_Finished(int pos)
 {
        if(!gametypevote || gametypevote_finished)
                return false;
@@ -747,12 +739,12 @@ float GameTypeVote_Finished(float pos)
        return true;
 }
 
-float GameTypeVote_AddVotable(string nextMode)
+bool GameTypeVote_AddVotable(string nextMode)
 {
-       float j;
        if ( nextMode == "" || GameTypeVote_Type_FromString(nextMode) == NULL )
                return false;
-       for(j = 0; j < mapvote_count; ++j)
+
+       for(int j = 0; j < mapvote_count; ++j)
                if(mapvote_maps[j] == nextMode)
                        return false;
 
@@ -769,24 +761,23 @@ float GameTypeVote_AddVotable(string nextMode)
 
 }
 
-float GameTypeVote_Start()
+bool GameTypeVote_Start()
 {
-       float j;
        MapVote_ClearAllVotes();
        MapVote_UnzoneStrings();
 
        mapvote_count = 0;
        mapvote_timeout = time + autocvar_sv_vote_gametype_timeout;
-       mapvote_abstain = 0;
+       mapvote_abstain = false;
        mapvote_detail = !autocvar_g_maplist_votable_nodetail;
 
-       float n = tokenizebyseparator(autocvar_sv_vote_gametype_options, " ");
+       int n = tokenizebyseparator(autocvar_sv_vote_gametype_options, " ");
        n = min(MAPVOTE_COUNT, n);
 
-       float really_available, which_available;
+       int really_available, which_available;
        really_available = 0;
        which_available = -1;
-       for(j = 0; j < n; ++j)
+       for(int j = 0; j < n; ++j)
        {
                if ( GameTypeVote_AddVotable(argv(j)) )
                if ( mapvote_maps_flags[j] & GTV_AVAILABLE )