Raised This Month: $ Target: $400
 0% 

sorting an array


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
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
 



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