Raised This Month: $ Target: $400
 0% 

sorting an array


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Nyuszy
Senior Member
Join Date: Apr 2009
Old 04-23-2011 , 11:04   sorting an array
Reply With Quote #1

how can i sort an array readed from sqlite with sql vault extended?
Nyuszy is offline
Exolent[jNr]
Veteran Member
Join Date: Feb 2007
Location: Tennessee
Old 04-24-2011 , 13:51   Re: sorting an array
Reply With Quote #2

Show your array that you want sorted and how you want it to be sorted.
__________________
No private work or selling mods.
Quote:
Originally Posted by xPaw View Post
I love you exolent!
Exolent[jNr] is offline
Nyuszy
Senior Member
Join Date: Apr 2009
Old 04-24-2011 , 15:07   Re: sorting an array
Reply With Quote #3

authid - name
authid - levels
authid - stars
Nyuszy is offline
Exolent[jNr]
Veteran Member
Join Date: Feb 2007
Location: Tennessee
Old 04-24-2011 , 22:06   Re: sorting an array
Reply With Quote #4

I meant your code.
__________________
No private work or selling mods.
Quote:
Originally Posted by xPaw View Post
I love you exolent!
Exolent[jNr] is offline
Nyuszy
Senior Member
Join Date: Apr 2009
Old 04-25-2011 , 05:00   Re: sorting an array
Reply With Quote #5

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
Nyuszy is offline
Exolent[jNr]
Veteran Member
Join Date: Feb 2007
Location: Tennessee
Old 04-25-2011 , 18:07   Re: sorting an array
Reply With Quote #6

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);

__________________
No private work or selling mods.
Quote:
Originally Posted by xPaw View Post
I love you exolent!
Exolent[jNr] is offline
Nyuszy
Senior Member
Join Date: Apr 2009
Old 04-26-2011 , 11:25   Re: sorting an array
Reply With Quote #7

thank you very much
Nyuszy is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


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


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