]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mapvoting.qc
Only detach playerstate if observer was a player (potential fix for player state...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mapvoting.qc
index 409674f0a3a8f437cccacd730a06b0eaa9df51cc..7ffe4b934fbfa389bcac17b021855f97411d772c 100644 (file)
@@ -41,10 +41,10 @@ entity mapvote_ent;
  * Returns the gamtype ID from its name, if type_name isn't a real gametype it
  * checks for sv_vote_gametype_(type_name)_type
  */
-float GameTypeVote_Type_FromString(string type_name)
+Gametype GameTypeVote_Type_FromString(string type_name)
 {
-       float type = MapInfo_Type_FromString(type_name);
-       if ( type == 0 )
+       Gametype type = MapInfo_Type_FromString(type_name);
+       if (type == NULL)
                type = MapInfo_Type_FromString(cvar_string(
                        strcat("sv_vote_gametype_",type_name,"_type")));
        return type;
@@ -54,22 +54,22 @@ int GameTypeVote_AvailabilityStatus(string type_name)
 {
        int flag = GTV_FORBIDDEN;
 
-       float type = MapInfo_Type_FromString(type_name);
-       if ( type == 0 )
+       Gametype type = MapInfo_Type_FromString(type_name);
+       if ( type == NULL )
        {
                type = MapInfo_Type_FromString(cvar_string(
                        strcat("sv_vote_gametype_",type_name,"_type")));
                flag |= GTV_CUSTOM;
        }
 
-       if( type == 0 )
+       if( type == NULL )
                return flag;
 
        if ( autocvar_nextmap != "" )
        {
-               if ( !MapInfo_Get_ByName(autocvar_nextmap, false, 0) )
+               if ( !MapInfo_Get_ByName(autocvar_nextmap, false, NULL) )
                        return flag;
-               if (!(MapInfo_Map_supportedGametypes & type))
+               if (!(MapInfo_Map_supportedGametypes & type.m_flags))
                        return flag;
        }
 
@@ -83,7 +83,7 @@ float GameTypeVote_GetMask()
        n = min(MAPVOTE_COUNT, n);
        gametype_mask = 0;
        for(j = 0; j < n; ++j)
-               gametype_mask |= GameTypeVote_Type_FromString(argv(j));
+               gametype_mask |= GameTypeVote_Type_FromString(argv(j)).m_flags;
        return gametype_mask;
 }
 
@@ -92,7 +92,7 @@ string GameTypeVote_MapInfo_FixName(string m)
        if ( autocvar_sv_vote_gametype )
        {
                MapInfo_Enumerate();
-               MapInfo_FilterGametype(GameTypeVote_GetMask(), 0, MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
+               _MapInfo_FilterGametype(GameTypeVote_GetMask(), 0, MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
        }
        return MapInfo_FixName(m);
 }
@@ -120,8 +120,8 @@ void MapVote_UnzoneStrings()
        }
 }
 
-string MapVote_Suggest(string m)
-{SELFPARAM();
+string MapVote_Suggest(entity this, string m)
+{
        float i;
        if(m == "")
                return "That's not how to use this command.";
@@ -156,7 +156,7 @@ string MapVote_Suggest(string m)
                strunzone(mapvote_suggestions[i]);
        mapvote_suggestions[i] = strzone(m);
        if(autocvar_sv_eventlog)
-               GameLogEcho(strcat(":vote:suggested:", m, ":", ftos(self.playerid)));
+               GameLogEcho(strcat(":vote:suggested:", m, ":", ftos(this.playerid)));
        return strcat("Suggestion of ", m, " accepted.");
 }
 
@@ -191,7 +191,7 @@ void MapVote_AddVotable(string nextMap, float isSuggestion)
        }
        if(i >= mapvote_screenshot_dirs_count)
                i = 0; // FIXME maybe network this error case, as that means there is no mapshot on the server?
-       for(o = strstr(pakfile, "/", 0)+1; o > 0; o = strstr(pakfile, "/", 0)+1)
+       for(o = strstrofs(pakfile, "/", 0)+1; o > 0; o = strstrofs(pakfile, "/", 0)+1)
                pakfile = substring(pakfile, o, -1);
 
        mapvote_maps_screenshot_dir[mapvote_count] = i;
@@ -260,9 +260,9 @@ void MapVote_Init()
        MapVote_Spawn();
 }
 
-void MapVote_SendPicture(float id)
-{SELFPARAM();
-       msg_entity = self;
+void MapVote_SendPicture(entity to, int id)
+{
+       msg_entity = to;
        WriteHeader(MSG_ONE, TE_CSQC_PICTURE);
        WriteByte(MSG_ONE, id);
        WritePicture(MSG_ONE, strcat(mapvote_screenshot_dirs[mapvote_maps_screenshot_dir[id]], "/", mapvote_maps[id]), 3072);
@@ -522,7 +522,7 @@ float MapVote_CheckRules_2()
        for(i = 0; i < mapvote_count_real; ++i)
                if ( mapvote_maps_flags[i] & GTV_AVAILABLE )
                {
-                       RandomSelection_Add(world, i, string_null, 1, mapvote_selections[i]);
+                       RandomSelection_Add(NULL, i, string_null, 1, mapvote_selections[i]);
                        if ( gametypevote &&  mapvote_maps[i] == MapInfo_Type_ToString(MapInfo_CurrentGametype()) )
                        {
                                currentVotes = mapvote_selections[i];
@@ -542,7 +542,7 @@ float MapVote_CheckRules_2()
        for(i = 0; i < mapvote_count_real; ++i)
                if(i != firstPlace)
                if ( mapvote_maps_flags[i] & GTV_AVAILABLE )
-                       RandomSelection_Add(world, i, string_null, 1, mapvote_selections[i]);
+                       RandomSelection_Add(NULL, i, string_null, 1, mapvote_selections[i]);
        secondPlace = RandomSelection_chosen_float;
        secondPlaceVotes = RandomSelection_best_priority;
        //dprint("Second place: ", ftos(secondPlace), "\n");
@@ -695,12 +695,12 @@ void MapVote_Think()
        MapVote_Tick();
 }
 
-float GameTypeVote_SetGametype(float type)
+float GameTypeVote_SetGametype(Gametype type)
 {
        if (MapInfo_CurrentGametype() == type)
                return true;
 
-       float tsave = MapInfo_CurrentGametype();
+       Gametype tsave = MapInfo_CurrentGametype();
 
        MapInfo_SwitchGameType(type);
 
@@ -752,7 +752,7 @@ float GameTypeVote_Finished(float pos)
 float GameTypeVote_AddVotable(string nextMode)
 {
        float j;
-       if ( nextMode == "" || GameTypeVote_Type_FromString(nextMode) == 0 )
+       if ( nextMode == "" || GameTypeVote_Type_FromString(nextMode) == NULL )
                return false;
        for(j = 0; j < mapvote_count; ++j)
                if(mapvote_maps[j] == nextMode)