]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mapvoting.qc
Merge remote-tracking branch 'origin/master' into terencehill/listbox_item_highlight
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mapvoting.qc
index a85415ff82d8d01de352da9488da4939b8f7e554..cf5df9da36a3c3fe91dfb1e5fd0bdce1aa40ae21 100644 (file)
@@ -1,9 +1,20 @@
-float GameTypeVote_AvailabilityStatus(string gtname) 
-{ 
+#include "mapvoting.qh"
+#include "_all.qh"
+
+#include "g_world.qh"
+#include "command/cmd.qh"
+#include "command/getreplies.qh"
+#include "../common/constants.qh"
+#include "../common/mapinfo.qh"
+#include "../common/playerstats.qh"
+#include "../common/util.qh"
+
+float GameTypeVote_AvailabilityStatus(string gtname)
+{
        float type = MapInfo_Type_FromString(gtname);
        if( type == 0 )
                return GTV_FORBIDDEN;
-       
+
        if ( autocvar_nextmap != "" )
        {
                if ( !MapInfo_Get_ByName(autocvar_nextmap, false, 0) )
@@ -11,7 +22,7 @@ float GameTypeVote_AvailabilityStatus(string gtname)
                if (!(MapInfo_Map_supportedGametypes & type))
                        return GTV_FORBIDDEN;
        }
-       
+
        return GTV_AVAILABLE;
 }
 
@@ -220,7 +231,7 @@ void MapVote_WriteMask()
                for(i = 0, power = 1; i < mapvote_count; ++i, power *= 2)
                        if(mapvote_maps_availability[i] == GTV_AVAILABLE )
                                mask |= power;
-                       
+
                if(mapvote_count < 8)
                        WriteByte(MSG_ENTITY, mask);
                else if (mapvote_count < 16)
@@ -235,7 +246,7 @@ void MapVote_WriteMask()
        }
 }
 
-float MapVote_SendEntity(entity to, float sf)
+float MapVote_SendEntity(entity to, int sf)
 {
        float i;
 
@@ -255,7 +266,7 @@ float MapVote_SendEntity(entity to, float sf)
                WriteByte(MSG_ENTITY, mapvote_abstain);
                WriteByte(MSG_ENTITY, mapvote_detail);
                WriteCoord(MSG_ENTITY, mapvote_timeout);
-               
+
                if ( gametypevote )
                {
                        // gametype vote
@@ -377,11 +388,11 @@ float MapVote_Finished(float mappos)
                }
                return false;
        }
-       
+
        Map_Goto_SetStr(mapvote_maps[mappos]);
        Map_Goto(0);
        alreadychangedlevel = true;
-       
+
        return true;
 }
 
@@ -389,7 +400,7 @@ void MapVote_CheckRules_1()
 {
        float i;
 
-       for(i = 0; i < mapvote_count; ++i) 
+       for(i = 0; i < mapvote_count; ++i)
                if( mapvote_maps_availability[i] == GTV_AVAILABLE )
                {
                        //dprint("Map ", ftos(i), ": "); dprint(mapvote_maps[i], "\n");
@@ -427,7 +438,7 @@ float MapVote_CheckRules_2()
        RandomSelection_Init();
        currentPlace = 0;
        currentVotes = -1;
-       for(i = 0; i < mapvote_count_real; ++i) 
+       for(i = 0; i < mapvote_count_real; ++i)
                if ( mapvote_maps_availability[i] == GTV_AVAILABLE )
                {
                        RandomSelection_Add(world, i, string_null, 1, mapvote_selections[i]);
@@ -442,7 +453,7 @@ float MapVote_CheckRules_2()
                firstPlace = currentPlace;
        else
                firstPlace = RandomSelection_chosen_float;
-       
+
        //dprint("First place: ", ftos(firstPlace), "\n");
        //dprint("First place votes: ", ftos(firstPlaceVotes), "\n");
 
@@ -598,7 +609,7 @@ void MapVote_Think()
                        GotoNextMap(0);
                        return;
                }
-               
+
                if(autocvar_sv_vote_gametype) { GameTypeVote_Start(); }
                else if(autocvar_nextmap == "") { MapVote_Init(); }
        }
@@ -610,7 +621,7 @@ float GameTypeVote_SetGametype(float type)
 {
        if (MapInfo_CurrentGametype() == type)
                return true;
-               
+
        float tsave = MapInfo_CurrentGametype();
 
        MapInfo_SwitchGameType(type);
@@ -646,17 +657,17 @@ float GameTypeVote_Finished(float pos)
 {
        if(!gametypevote || gametypevote_finished)
                return false;
-       
+
        if ( !GameTypeVote_SetGametype(MapInfo_Type_FromString(mapvote_maps[pos])) )
        {
                dprint("Selected gametype is not supported by any map");
        }
-       
+
        localcmd("sv_vote_gametype_hook_all\n");
        localcmd("sv_vote_gametype_hook_", mapvote_maps[pos], "\n");
-       
+
        gametypevote_finished = true;
-       
+
        return true;
 }
 
@@ -668,7 +679,7 @@ float GameTypeVote_AddVotable(string nextMode)
        for(j = 0; j < mapvote_count; ++j)
                if(mapvote_maps[j] == nextMode)
                        return false;
-       
+
        mapvote_maps[mapvote_count] = strzone(nextMode);
        mapvote_maps_suggested[mapvote_count] = false;
 
@@ -677,9 +688,9 @@ float GameTypeVote_AddVotable(string nextMode)
        mapvote_maps_availability[mapvote_count] = GameTypeVote_AvailabilityStatus(nextMode);
 
        mapvote_count += 1;
-       
+
        return true;
-       
+
 }
 
 float GameTypeVote_Start()
@@ -687,15 +698,15 @@ float GameTypeVote_Start()
        float j;
        MapVote_ClearAllVotes();
        MapVote_UnzoneStrings();
-       
+
        mapvote_count = 0;
        mapvote_timeout = time + autocvar_sv_vote_gametype_timeout;
        mapvote_abstain = 0;
        mapvote_detail = !autocvar_g_maplist_votable_nodetail;
-       
+
        float n = tokenizebyseparator(autocvar_sv_vote_gametype_options, " ");
        n = min(MAPVOTE_COUNT, n);
-       
+
        float really_available, which_available;
        really_available = 0;
        which_available = -1;
@@ -710,9 +721,9 @@ float GameTypeVote_Start()
        }
 
        mapvote_count_real = mapvote_count;
-       
+
        gametypevote = 1;
-       
+
        if ( really_available == 0 )
        {
                if ( mapvote_count > 0 )
@@ -728,14 +739,14 @@ float GameTypeVote_Start()
                MapVote_Finished(which_available);
                return false;
        }
-       
+
        mapvote_count_real = mapvote_count;
 
        mapvote_keeptwotime = time + autocvar_sv_vote_gametype_keeptwotime;
        if(mapvote_count_real < 3 || mapvote_keeptwotime <= time)
                mapvote_keeptwotime = 0;
-       
+
        MapVote_Spawn();
-       
+
        return true;
 }