Exemple #1
0
void GetMapNamesFromMapCycle(StringList& outMapNameList)
{
    char* mapcfile = (char*)CVAR_GET_STRING( "mapcyclefile" );
    ASSERT( mapcfile != NULL );
    
    char szBuffer[ MAX_RULE_BUFFER ];
    char szMap[ 32 ];
    int length;
    char *pFileList;
    char *aFileList = pFileList = (char*)LOAD_FILE_FOR_ME( mapcfile, &length );
    int hasbuffer;
    mapcycle_item_s *newlist = NULL;
    
    if ( pFileList && length )
    {
        // the first map name in the file becomes the default
        while ( 1 )
        {
            hasbuffer = 0;
            memset( szBuffer, 0, MAX_RULE_BUFFER );
            
            pFileList = COM_Parse( pFileList );
            if ( strlen( com_token ) <= 0 )
                break;
            
            strcpy( szMap, com_token );
            
            // Any more tokens on this line?
            if ( COM_TokenWaiting( pFileList ) )
            {
                pFileList = COM_Parse( pFileList );
                if ( strlen( com_token ) > 0 )
                {
                    hasbuffer = 1;
                    strcpy( szBuffer, com_token );
                }
            }
            
            // Check map
            if ( IS_MAP_VALID( szMap ) )
            {
                outMapNameList.push_back( szMap );
            }
        }
        
        FREE_FILE( aFileList );
    }
}
Exemple #2
0
/*
==============
ReloadMapCycleFile


Parses mapcycle.txt file into mapcycle_t structure
==============
*/
int ReloadMapCycleFile( char *filename, mapcycle_t *cycle )
{
	char szBuffer[ MAX_RULE_BUFFER ];
	char szMap[ 32 ];
	int length;
	char *pFileList;
	char *aFileList = pFileList = (char*)LOAD_FILE_FOR_ME( filename, &length );
	int hasbuffer;
	mapcycle_item_s *item, *newlist = NULL, *next;

	if ( pFileList && length )
	{
		// the first map name in the file becomes the default
		while ( 1 )
		{
			hasbuffer = 0;
			memset( szBuffer, 0, MAX_RULE_BUFFER );

			pFileList = COM_Parse( pFileList );
			if ( strlen( com_token ) <= 0 )
				break;

			strcpy( szMap, com_token );

			// Any more tokens on this line?
			if ( COM_TokenWaiting( pFileList ) )
			{
				pFileList = COM_Parse( pFileList );
				if ( strlen( com_token ) > 0 )
				{
					hasbuffer = 1;
					strcpy( szBuffer, com_token );
				}
			}

			// Check map
			if ( IS_MAP_VALID( szMap ) )
			{
				// Create entry
				char *s;

				item = new mapcycle_item_s;

				strcpy( item->mapname, szMap );

				item->minplayers = 0;
				item->maxplayers = 0;

				memset( item->rulebuffer, 0, MAX_RULE_BUFFER );

				if ( hasbuffer )
				{
					s = g_engfuncs.pfnInfoKeyValue( szBuffer, "minplayers" );
					if ( s && s[0] )
					{
						item->minplayers = atoi( s );
						item->minplayers = max( item->minplayers, 0 );
						item->minplayers = min( item->minplayers, gpGlobals->maxClients );
					}
					s = g_engfuncs.pfnInfoKeyValue( szBuffer, "maxplayers" );
					if ( s && s[0] )
					{
						item->maxplayers = atoi( s );
						item->maxplayers = max( item->maxplayers, 0 );
						item->maxplayers = min( item->maxplayers, gpGlobals->maxClients );
					}

					// Remove keys
					//
					g_engfuncs.pfnInfo_RemoveKey( szBuffer, "minplayers" );
					g_engfuncs.pfnInfo_RemoveKey( szBuffer, "maxplayers" );

					strcpy( item->rulebuffer, szBuffer );
				}

				item->next = cycle->items;
				cycle->items = item;
			}
			else
			{
				ALERT( at_console, "Skipping %s from mapcycle, not a valid map\n", szMap );
			}


		}

		FREE_FILE( aFileList );
	}

	// Fixup circular list pointer
	item = cycle->items;

	// Reverse it to get original order
	while ( item )
	{
		next = item->next;
		item->next = newlist;
		newlist = item;
		item = next;
	}
	cycle->items = newlist;
	item = cycle->items;

	// Didn't parse anything
	if ( !item )
	{
		return 0;
	}

	while ( item->next )
	{
		item = item->next;
	}
	item->next = cycle->items;
	
	cycle->next_item = item->next;

	return 1;
}