sortAndLimit( array )
{
    for ( i = 0; i < array.size; i++ )
    {
        for ( j = i + 1; j < array.size; j++ )
        {
            t1 = strTok( array[i], ";" );
            t2 = strTok( array[j], ";" );
            if ( isDefined(t1[1]) && isDefined(t2[1]) )
            {
                if ( int(t2[1]) > int(t1[1]) )
                {
                    temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
    }
    limit = [];
    for( i = 0; i < 10; i++ ) 
    {
        if( isDefined( array[i] ) )
            limit[i] = array[i];
    }
    return limit;
}

updateGlobalRanking()
{
	path = "ne_db/ranking_global.db";
	
	// Captura os dados da memória RAM agora
	pName = self.name;
	mu = 25.0; sigma = 8.33;
	if(isDefined(self.pers["mu"])) mu = self.pers["mu"];
	if(isDefined(self.pers["sigma"])) sigma = self.pers["sigma"];
	
	skill = int( mu - (3 * sigma) );
	if( skill < 0 ) skill = 0;
	
	entry = pName + ";" + skill;

	// Lê o ranking atual
	lines = code\file::readFile( path );
	if( !isDefined(lines) || !isArray(lines) )
		lines = [];

	found = false;
	for( i = 0; i < lines.size; i++ )
	{
		if( !isDefined(lines[i]) || lines[i] == "" ) continue;
		tok = strTok( lines[i], ";" );
		if( isDefined(tok[0]) && tok[0] == pName )
		{
			lines[i] = entry; 
			found = true;
			break;
		}
	}
	
	if( !found )
		lines[ lines.size ] = entry;

	// Ordena
	for ( i = 0; i < lines.size; i++ )
	{
		for ( j = i + 1; j < lines.size; j++ )
		{
			t1 = strTok( lines[i], ";" );
			t2 = strTok( lines[j], ";" );
			if ( int(t2[1]) > int(t1[1]) )
			{
				temp = lines[i];
				lines[i] = lines[j];
				lines[j] = temp;
			}
		}
	}

	// Salva apenas os 10 melhores
	final = [];
	for( i = 0; i < 10; i++ )
	{
		if( isDefined( lines[i] ) )
			final[i] = lines[i];
	}

	code\file::writeToFile( path, final );
}