AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   sorting an array (https://forums.alliedmods.net/showthread.php?t=155532)

Nyuszy 04-23-2011 11:04

sorting an array
 
how can i sort an array readed from sqlite with sql vault extended?

Exolent[jNr] 04-24-2011 13:51

Re: sorting an array
 
Show your array that you want sorted and how you want it to be sorted.

Nyuszy 04-24-2011 15:07

Re: sorting an array
 
authid - name
authid - levels
authid - stars

Exolent[jNr] 04-24-2011 22:06

Re: sorting an array
 
I meant your code.

Nyuszy 04-25-2011 05:00

Re: sorting an array
 
Code:
public client_connect(id) {     firstspawn[id] = true     finishlvl[id] = false     switch(get_pcvar_num(cvar_savetype))     {         case 1:         {             get_user_authid(id, key[id], 63)         }         case 2:         {             get_user_ip(id, key[id], 63)         }         case 3:         {             get_user_name(id, key[id], 63)         }     }         if(sqlv_key_exists_ex(vault, key[id], "level"))     {         playerlvl[id] = sqlv_get_num_ex(vault, key[id], "level")         stars[id] = sqlv_get_num_ex(vault, key[id], "stars")         new completetime = sqlv_get_num_ex(vault, key[id], "finish")         if(completetime > mapstart)             finishlvl[id] = true     }     else     {         playerlvl[id] = 1         stars[id] = 0         new name[64]         get_user_name(id, name, 63)         sqlv_set_data_ex(vault, key[id], "name", name)         sqlv_set_num_ex(vault, key[id], "level", playerlvl[id])         sqlv_set_num_ex(vault, key[id], "stars", stars[id])         sqlv_set_num_ex(vault, key[id], "finish", 0)     }         for(new i = 1; i <= 3; i++)     {         completed[id][i] = 0         completelvl[id][i] = false     }     return PLUGIN_CONTINUE }

i want a simple top15, sorted by 15*stars+level

Exolent[jNr] 04-25-2011 18:07

Re: sorting an array
 
PHP Code:

enum _:PlayerData
{
    
Player_Name[32],
    
Player_Key[64],
    
Player_Level,
    
Player_Stars,
    
Player_Points
};

// ----

new Trie:tPlayerDataIndex TrieCreate();
new Array:
aPlayerData ArrayCreate(PlayerData);
new 
iArraySize;

new Array:
aVaultData;
new 
iVaultKeys sqlv_read_all_ex(hVaultaVaultData);

new 
eVaultData[SQLVaultEntryEx];

new 
ePlayerData[PlayerData];
new 
iArrayIndex;

for(new 
0iVaultKeysi++)
{
    
ArrayGetArray(aVaultDataieVaultData);
    
    if(
TrieGetCell(tPlayerDataIndexeVaultData[SQLVEx_Key1], iArrayIndex))
    {
        
ArrayGetArray(aPlayerDataiArrayIndexePlayerData);
    }
    else
    {
        
copy(ePlayerData[Player_Key], charsmax(ePlayerData[Player_Key]), eVaultData[SQLVEx_Key1]);
        
iArrayIndex = -1;
    }
    
    if(
equal(eVaultData[SQLVEx_Key2], "name"))
    {
        
copy(ePlayerData[Player_Name], charsmax(ePlayerData[Player_Name]), eVaultData[SQLVEx_Data]);
    }
    else if(
equal(eVaultData[SQLVEx_Key2], "level"))
    {
        
ePlayerData[Player_Level] = str_to_num(eVaultData[SQLVEx_Data]);
    }
    else if(
equal(eVaultData[SQLVEx_Key2], "stars"))
    {
        
ePlayerData[Player_Stars] = str_to_num(eVaultData[SQLVEx_Data]);
    }
    else
    {
        continue;
    }
    
    if(
iArrayIndex >= 0)
    {
        
ArraySetArray(aPlayerDataiArrayIndexePlayerData);
    }
    else
    {
        
ArrayPushArray(aPlayerDataePlayerData);
        
iArrayIndex iArraySize++;
        
        
TrieSetCell(tPlayerDataIndexePlayerData[Player_Key], iArrayIndex);
    }
}

TrieDestroy(tPlayerDataIndex);

ArrayDestroy(aVaultData);

for(new 
0iArraySizei++)
{
    
ArrayGetArray(aPlayerDataiePlayerData);
    
    
ePlayerData[Player_Points] = (ePlayerData[Player_Stars] * 15) + ePlayerData[Player_Level];
    
    
ArraySetArray(aPlayerDataiePlayerData);
}

ArraySort(aPlayerData"SortTopPlayers");

new 
iTopSize min(iArraySize15);

for(new 
0iTopSizei++)
{
    
ArrayGetArray(aPlayerDataiePlayerData);
    
    
// i + 1 = top position (eg. 0 + 1 = #1)
    // ePlayerData[Player_Name] = name of player
    // ePlayerData[Player_Key] = save key for player
    // ePlayerData[Player_Stars] = stars for player
    // ePlayerData[Player_Level] = level of player
    // ePlayerData[Player_Points] = points used to rank players with equation you provided
}

ArrayDestroy(aPlayerData);

// ----

public SortTopPlayers(Array:aDataiItem1iItem2iData[], iDataSize)
{
    new 
ePlayerData1[PlayerData], ePlayerData2[PlayerData];
    
ArrayGetArray(aPlayerDataiItem1ePlayerData1);
    
ArrayGetArray(aPlayerDataiItem2ePlayerData2);
    
    return 
clamp((ePlayerData2[Player_Points] - ePlayerData1[Player_Points]), -11);



Nyuszy 04-26-2011 11:25

Re: sorting an array
 
thank you very much


All times are GMT -4. The time now is 19:48.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.