Solved Levels Rank Top

Coding Help/Re-API Supported
Post Reply
User avatar
Spir0x
Veteran Member
Veteran Member
Tunisia
Posts: 641
Joined: 7 years ago
Location: Tunisia
Contact:

Levels Rank Top

#1

Post by Spir0x » 4 years ago

Levels rank top won't compile on new compiler v1.4 becuz missing <nvault_util.inc>

Code: Select all

#include <zombie_escape>
#include <nvault_util>
#include <ze_levels>

// Constants
new const g_szLevelsVault[] = "Levels"
new const g_szRanksVault[]  = "Ranks"

// Variables
new g_iLevelsVault, g_iRanksVault

// Cvars
new g_pCvarEnableTop, g_pCvarLevelsToShow, g_pCvarEnableRank

public plugin_init()
{
	register_plugin("[ZE] Level Top/Rank", "1.1", "Raheem")
	
	// Commands
	register_clcmd("say /top10", "Cmd_Top")
	register_clcmd("say_team /top10", "Cmd_Top")
	register_clcmd("say /myrank", "Cmd_Rank")
	register_clcmd("say_team /myrank", "Cmd_Rank")
	
	// Cvars
	g_pCvarEnableTop = register_cvar("ze_enable_top_system", "1")
	g_pCvarLevelsToShow = register_cvar("ze_levels_top_number", "10")
	g_pCvarEnableRank = register_cvar("ze_enable_rank_system", "1")
}

public Cmd_Top(id)
{
	if (get_pcvar_num(g_pCvarEnableTop) == 0)
		return
	
	// Open the two vaults using UTIL functions
	new iLevelsVault = nvault_util_open(g_szLevelsVault)
	new iRanksVault = nvault_util_open(g_szRanksVault)
	
	// Open Vaults
	g_iLevelsVault = nvault_open(g_szLevelsVault)
	g_iRanksVault = nvault_open(g_szRanksVault)
	
	// Max elements in Levels.vault and Rank.vault (They are same)
	new iTotal = nvault_util_count(iLevelsVault)
	
	new szKeyLevelSteam[32],	// To hold SteamID from Levels.vault
	szDataLevel[64],			// To hold Levels, XP, MaxXP from Levels.vault
	szKeyRankSteam[32],			// To hold SteamID from Ranks.vault
	szDataRank[64]				// To hold Names from Ranks.vault
	
	new Array:g_szMaxXP			// Dynamic Array to hold all MaxXP (szData) from Levels.vault
	
	// Useless Variables
	new szVal[64], iTimeStamp
	
	// Create Our Arrays with proper lengths [As we don't know iTotal Length so we use Dynamic]
	g_szMaxXP = ArrayCreate(70)
	
	// Tries
	new Trie:g_Level_MaxXP,
	Trie:g_XP_MaxXP, 
	Trie:g_SteamID_MaxXP,
	Trie:g_Name_SteamID
	
	g_Level_MaxXP = TrieCreate()
	g_XP_MaxXP = TrieCreate()
	g_SteamID_MaxXP = TrieCreate()
	g_Name_SteamID = TrieCreate()
	
	// Some integer counters to be used down
	new i, iPos1 = 0, iPos2 = 0
	
	// Format motd Header
	new szMotd[1501], iLen
	
	iLen = formatex(szMotd, charsmax(szMotd), "<body bgcolor=#000000><font color=#CBA50B><h3><pre>")
	iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen, "%-3s %-32s %-11s %s^n", "#", "Name", "# Level", "# XP")
	
	// Loop through all elements in our Levels.vault and Rank.vault
	for(i = 0; i < iTotal; i++)
	{
		// Get SteamID from Levels.vault and save to szKey
		iPos1 = nvault_util_read(iLevelsVault, iPos1, szKeyLevelSteam, charsmax(szKeyLevelSteam), szVal, charsmax(szVal), iTimeStamp)
		
		// Get Levels, XP for every SteamID from Levels.vault and save to szData
		nvault_lookup(g_iLevelsVault, szKeyLevelSteam, szDataLevel, charsmax(szDataLevel), iTimeStamp)
		
		// Get SteamID from Ranks.vault and save to szKeyRank
		iPos2 = nvault_util_read(iRanksVault, iPos2, szKeyRankSteam, charsmax(szKeyRankSteam), szVal, charsmax(szVal), iTimeStamp)
		
		// Get Name from Ranks.vault and save to szDataRank
		nvault_lookup(g_iRanksVault, szKeyRankSteam, szDataRank, charsmax(szDataRank), iTimeStamp)
		
		// Spliting szData to Level and XP and Save them
		new szLevel[32], szXP[32], szMaxXP[70]
		parse(szDataLevel, szLevel, charsmax(szLevel), szXP, charsmax(szXP), szMaxXP, charsmax(szMaxXP))
		
		// Add XP+MAXXP+SteamID to be unique for every player
		formatex(szMaxXP, charsmax(szMaxXP), "%i %s", str_to_num(szMaxXP) + str_to_num(szXP), szKeyRankSteam)
		
		// Save MAX-XP As Key, Level as Key Value
		TrieSetCell(g_Level_MaxXP, szMaxXP, str_to_num(szLevel))
		
		// Save MAX-XP As Key, XP as Key Value
		TrieSetCell(g_XP_MaxXP, szMaxXP, str_to_num(szXP))
		
		// Save MAX-XP As Key, SteamID as Value
		TrieSetString(g_SteamID_MaxXP, szMaxXP, szKeyLevelSteam)
		
		// Save SteamID As Key, Name as Value
		TrieSetString(g_Name_SteamID, szKeyRankSteam, szDataRank)
		
		// Save our MaxXP to Dynamic Array
		ArrayPushString(g_szMaxXP, szMaxXP)
	}
	
	// Rank Max-XP + SteamID
	ArraySortEx(g_szMaxXP, "TopSorting")
	
	// Get Top Players Data
	for (i = 0; i < get_pcvar_num(g_pCvarLevelsToShow); i++)
	{
		// MaxXP+SteamID As Key
		new szMaxXP[70]
		
		ArrayGetString(g_szMaxXP, i, szMaxXP, charsmax(szMaxXP))
		
		// Get Level
		new Level; TrieGetCell(g_Level_MaxXP, szMaxXP, Level)
		
		// Get XP
		new XP; TrieGetCell(g_XP_MaxXP, szMaxXP, XP)
		
		// Get SteamID
		new szSteamID[36]; TrieGetString(g_SteamID_MaxXP, szMaxXP, szSteamID, charsmax(szSteamID))
		
		// Get Name
		new szName[32]; TrieGetString(g_Name_SteamID, szSteamID, szName, charsmax(szName))

		for (new j = 0; j < charsmax(szName); j++)
		{
			if (is_char_mb(szName[j]) > 0 || szName[j] == '<' || szName[j] == '>')
			{
				szName[j] = ' '
			}
		}
		
		// Format Player
		iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen, "%-3d %-32s %-11d %d^n", i + 1, szName, Level, XP)
	}
	
	// Format end of motd
	iLen += formatex(szMotd[iLen], charsmax(szMotd) - iLen, "</body></font></h3></pre>")
	
	// Finally Show motd to the player
	show_motd(id, szMotd, "Levels Rank")
	
	// Free our memory
	ArrayDestroy(g_szMaxXP)
	TrieDestroy(g_Level_MaxXP)
	TrieDestroy(g_XP_MaxXP)
	TrieDestroy(g_SteamID_MaxXP)
	TrieDestroy(g_Name_SteamID)
	
	// Closing UTIL Vaults
	nvault_util_close(iLevelsVault)
	nvault_util_close(iRanksVault)
	
	// Close Vaults
	nvault_close(g_iLevelsVault)
	nvault_close(g_iRanksVault)
}

public Cmd_Rank(id)
{
	if (get_pcvar_num(g_pCvarEnableRank) == 0)
		return
	
	// Open Levels vault via UTIL function
	new iLevelsVault = nvault_util_open(g_szLevelsVault)
	
	// Open Vault
	g_iLevelsVault = nvault_open(g_szLevelsVault)
	
	// Max elements in Levels.vault and Rank.vault (They are same)
	new iTotal = nvault_util_count(iLevelsVault)
	
	new szKey[32],	// To hold SteamID from Levels.vault
	szData[64]		// To hold Levels, XP from Levels.vault
	
	new Array:iMaxXP	// Dynamic Array to hold all MaxXP (szData) from Levels.vault
	
	// Useless Variables
	new szVal[64], iTimeStamp
	
	// Create Our Arrays with proper lengths [As we don't iTotal Length so we use Dynamic]
	iMaxXP = ArrayCreate(1)
	
	// Some integer counters to be used down
	new i, iPos = 0
	
	// Loop through all elements in our Levels.vault and Rank.vault
	for(i = 0; i < iTotal; i++)
	{
		// Get SteamID from Levels.vault and save to szKey
		iPos = nvault_util_read(iLevelsVault, iPos, szKey, charsmax(szKey), szVal, charsmax(szVal), iTimeStamp)
		
		// Get Levels, XP for every SteamID from Levels.vault and save to szData
		nvault_lookup(g_iLevelsVault, szKey, szData, charsmax(szData), iTimeStamp)

		// Spliting szData to Level and XP and Save them
		new szLevel[32], szXP[32], szMaxXP[32]
		parse(szData, szLevel, 31, szXP, 31, szMaxXP, 31)

		// Save our MaxXP to Dynamic Array
		ArrayPushCell(iMaxXP, str_to_num(szMaxXP) + str_to_num(szXP))
	}
	
	// Rank Max-XP
	ArraySortEx(iMaxXP, "RankSorting")
	
	// Get Player rank
	new iIndex = 0;
	
	for (i = 0; i < ArraySize(iMaxXP); i++)
	{
		if (ArrayGetCell(iMaxXP, i) == (ze_get_user_max_xp(id) + ze_get_user_xp(id)))
		{
			iIndex = i
			break;
		}
	}
	
	ze_colored_print(id, "!tYour rank is !g%i !tof !g%i!y.", iIndex + 1, iTotal - 1)
	
	// Free our memory
	ArrayDestroy(iMaxXP)
	
	// Closing UTIL Vault
	nvault_util_close(iLevelsVault)
	
	// Close Vaults
	nvault_close(g_iLevelsVault)
}

public TopSorting(Array:g_szMaxXP, szItem1[], szItem2[])
{
	// 2D arrays to hold max-xp and steam id for both item1 and item2
	new szMaxXP[2][32], szSteamID[2][36]
	
	// Split item1 to Max-XP and SteamID, same for item 2
	parse(szItem1, szMaxXP[0], 31, szSteamID[0], 36)
	parse(szItem2, szMaxXP[1], 31, szSteamID[1], 36)
	
	// Start ranking
	if (str_to_num(szMaxXP[0]) > str_to_num(szMaxXP[1]))
	{
		return -1
	}
	else if (str_to_num(szMaxXP[0]) < str_to_num(szMaxXP[1]))
	{
		return 1
	}
	
	return 0
}

public RankSorting(Array:iMaxXP, iItem1, iItem2)
{
	if (iItem1 > iItem2)
	{
		return -1
	}
	else if (iItem1 < iItem2)
	{
		return 1
	}
	
	return 0
}

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#2

Post by Raheem » 4 years ago

Here it's: Here is as code:
    1. /* 
    2.     nVault Utility
    3.          v0.3
    4.        by bugsy
    5. */
    6.  
    7. #if defined _nvault_util_included
    8.     #endinput
    9. #endif
    10. #define _nvault_util_included
    11.  
    12. #if !defined _nvault_included
    13.     #include <nvault>
    14. #endif
    15.  
    16. #if !defined _amxmisc_included
    17.     #include <amxmisc>
    18. #endif
    19.  
    20. #define _NVAULTUTIL_MAX_KEY_LEN 255
    21. #define _NVAULTUTIL_MAX_VAL_LEN 512
    22. #define _NVAULTUTIL_BUFFER_SIZE 128
    23.  
    24. #define _NVAULTUTIL_OFFSET_ENTRYCOUNT   6
    25. #define _NVAULTUTIL_OFFSET_DATASTART    10
    26.  
    27. #define _nvault_util_minsize(%1,%2) ((%1<%2)?%1:%2)
    28.  
    29. //********************************************************************************************
    30. //   Increase this value if your plugin throws the below error:
    31. //   "Array size too large, you must increase NVAULTUTIL_MAXARRAYSIZE in nvault_util.inc"  
    32.  
    33. const _NVAULTUTIL_MAXARRAYSIZE = 500;
    34. //********************************************************************************************
    35.  
    36. const _NVAULTUTIL_BUFFERSIZE = ( ( _NVAULTUTIL_MAXARRAYSIZE * 5 ) + 1);
    37. const _NVAULTUTIL_BYTEMAP = 0b11110000;
    38. const _NVAULTUTIL_NULLBYTE = 0b10101010;
    39.  
    40. stock nvault_util_open( const szVault[] )
    41. {
    42.     new szFile[ 64 ];
    43.    
    44.     formatex( szFile[ get_datadir( szFile , charsmax( szFile ) ) ] , charsmax( szFile ) , "/vault/%s.vault" , szVault );
    45.    
    46.     return fopen( szFile , "rb" );
    47. }
    48.  
    49. stock nvault_util_close( iVaultHandle )
    50. {
    51.     fclose( iVaultHandle );
    52. }
    53.  
    54. stock nvault_util_count( iVaultHandle )
    55. {
    56.     new DataBuffer[ 1 ];
    57.  
    58.     fseek( iVaultHandle , _NVAULTUTIL_OFFSET_ENTRYCOUNT , SEEK_SET );
    59.     fread_raw( iVaultHandle , DataBuffer , 1 , BLOCK_INT );
    60.    
    61.     return DataBuffer[ 0 ];
    62. }
    63.  
    64. stock nvault_util_read( iVaultHandle , iOffset , szKey[] , iKeySize , szVal[] , iValSize , &iTimeStamp=0 )
    65. {
    66.     static iKeyLen , iValLen , DataBuffer[ _NVAULTUTIL_BUFFER_SIZE ];
    67.    
    68.     fseek( iVaultHandle , iOffset ? iOffset : _NVAULTUTIL_OFFSET_DATASTART , SEEK_SET );
    69.    
    70.     fread_raw( iVaultHandle , DataBuffer , 1 , BLOCK_INT );
    71.     iTimeStamp = DataBuffer[ 0 ];
    72.    
    73.     fread_raw( iVaultHandle , DataBuffer , 1 , BLOCK_BYTE );
    74.     iKeyLen = DataBuffer[ 0 ] & 0xFF;
    75.    
    76.     fread_raw( iVaultHandle , DataBuffer , 1 , BLOCK_SHORT );
    77.     iValLen = DataBuffer[ 0 ] & 0xFFFF;
    78.    
    79.     fread_raw( iVaultHandle , DataBuffer , iKeyLen , BLOCK_CHAR );
    80.     _nvault_util_read_string( szKey , _nvault_util_minsize( iKeySize , iKeyLen ) , DataBuffer , sizeof( DataBuffer ) );
    81.    
    82.     fread_raw( iVaultHandle , DataBuffer , iValLen , BLOCK_CHAR );
    83.     _nvault_util_read_string( szVal , _nvault_util_minsize( iValSize , iValLen ) , DataBuffer , sizeof( DataBuffer ) );
    84.                      
    85.     return ftell( iVaultHandle );
    86. }
    87.  
    88. stock nvault_util_readall( iVaultHandle , const szForwardFunc[] , Data[] = {0} , iSize=0 )
    89. {
    90.     new iFwdHandle = CreateMultiForward( szForwardFunc , ET_IGNORE , FP_CELL , FP_CELL , FP_STRING , FP_STRING , FP_CELL , FP_STRING , FP_CELL );
    91.    
    92.     if ( iFwdHandle <= 0 )
    93.         set_fail_state( "nvault_util_readall() failed to create forward" );
    94.        
    95.     new iRet , iPos , iNumEntries = nvault_util_count( iVaultHandle );
    96.     new szKey[ _NVAULTUTIL_MAX_KEY_LEN ] , szValue[ _NVAULTUTIL_MAX_VAL_LEN ] , iTimeStamp;
    97.  
    98.     for ( new iCurrent = 1 ; iCurrent <= iNumEntries ; iCurrent++ )
    99.     {
    100.         iPos = nvault_util_read( iVaultHandle , iPos , szKey , charsmax( szKey ) , szValue , charsmax( szValue ) , iTimeStamp );
    101.        
    102.         ExecuteForward( iFwdHandle , iRet , iCurrent , iNumEntries , szKey , szValue , iTimeStamp , Data , iSize );
    103.     }
    104.    
    105.     return iRet;
    106. }
    107.  
    108. stock nvault_util_pos( iVaultHandle )
    109. {
    110.     return ftell( iVaultHandle );
    111. }
    112.  
    113. stock nvault_set_array( vault , const key[] , const any:array[] , size )
    114. {
    115.     new iArrayPos , iOutputPos , iValue[ 1 ] , szString[ _NVAULTUTIL_BUFFERSIZE ];
    116.    
    117.     if ( size > _NVAULTUTIL_MAXARRAYSIZE )
    118.         set_fail_state( "[nVault Utility] Array size too large, you must increase NVAULTUTIL_MAXARRAYSIZE in nvault_util.inc." );
    119.    
    120.     while ( ( iArrayPos < size ) && ( iOutputPos < charsmax( szString ) ) )
    121.     {
    122.         iValue[ 0 ] = array[ iArrayPos++ ];
    123.        
    124.         if ( !( cellmin <= iValue[ 0 ] <= cellmax ) )
    125.             set_fail_state( "[nVault Utility] Value exceeds valid long value range." );
    126.  
    127.         szString[ iOutputPos++ ] = _nvault_util_byte_map( iValue );
    128.  
    129.         for ( new i = 0 ; i < 4 ; i++ )
    130.             szString[ iOutputPos++ ] = !iValue{ i } ? _NVAULTUTIL_NULLBYTE : iValue{ i };
    131.     }
    132.    
    133.     szString[ iOutputPos ] = EOS;
    134.    
    135.     return nvault_set( vault , key , szString );
    136. }
    137.  
    138. stock nvault_get_array( vault , const key[] , any:array[] , size , &timestamp=0 )
    139. {
    140.     new iStringPos , iArrayPos , iValue[ 1 ] , bmByteMap , szString[ _NVAULTUTIL_BUFFERSIZE ];
    141.    
    142.     if ( size > _NVAULTUTIL_MAXARRAYSIZE )
    143.         set_fail_state( "[nVault Utility] Array size too large, you must increase NVAULTUTIL_MAXARRAYSIZE in nvault_util.inc." );
    144.        
    145.     //nvault_get( vault , key , szString , charsmax( szString ) );
    146.     nvault_lookup( vault , key , szString , charsmax( szString ) , timestamp );
    147.    
    148.     while ( szString[ iStringPos ] && ( iStringPos < charsmax( szString ) ) && ( iArrayPos < size ) )
    149.     {
    150.         bmByteMap = szString[ iStringPos++ ];
    151.        
    152.         for ( new i = 0 ; i < 4 ; i++ )
    153.         {
    154.             iValue{ i } = bmByteMap & ( 1 << i ) ? szString[ iStringPos ] : 0;
    155.             iStringPos++;
    156.         }
    157.    
    158.         array[ iArrayPos++ ] = iValue[ 0 ];
    159.     }
    160.    
    161.     return iArrayPos;
    162. }
    163.  
    164. stock nvault_util_read_array( iVaultHandle , iOffset , szKey[] , iKeySize , iArray[] , iArraySize , &iItemsRead=0 , &iTimeStamp=0 )
    165. {
    166.     static iKeyLen , iValLen , DataBuffer[ _NVAULTUTIL_BUFFER_SIZE ];
    167.     new iStringPos , iArrayPos , iValue[ 1 ] , bmByteMap , szString[ _NVAULTUTIL_BUFFERSIZE ];
    168.    
    169.     fseek( iVaultHandle , iOffset ? iOffset : _NVAULTUTIL_OFFSET_DATASTART , SEEK_SET );
    170.    
    171.     fread_raw( iVaultHandle , DataBuffer , 1 , BLOCK_INT );
    172.     iTimeStamp = DataBuffer[ 0 ];
    173.    
    174.     fread_raw( iVaultHandle , DataBuffer , 1 , BLOCK_BYTE );
    175.     iKeyLen = DataBuffer[ 0 ] & 0xFF;
    176.    
    177.     fread_raw( iVaultHandle , DataBuffer , 1 , BLOCK_SHORT );
    178.     iValLen = DataBuffer[ 0 ] & 0xFFFF;
    179.    
    180.     fread_raw( iVaultHandle , DataBuffer , iKeyLen , BLOCK_CHAR );
    181.     _nvault_util_read_string( szKey , _nvault_util_minsize( iKeySize , iKeyLen ) , DataBuffer , sizeof( DataBuffer ) );
    182.    
    183.     fread_raw( iVaultHandle , DataBuffer , iValLen , BLOCK_CHAR );
    184.     _nvault_util_read_string( szString , _nvault_util_minsize( charsmax( szString ) , iValLen ) , DataBuffer , sizeof( DataBuffer ) );
    185.    
    186.     while ( szString[ iStringPos ] && ( iStringPos < charsmax( szString ) ) && ( iArrayPos < iArraySize ) )
    187.     {
    188.         bmByteMap = szString[ iStringPos++ ];
    189.        
    190.         for ( new i = 0 ; i < 4 ; i++ )
    191.         {
    192.             iValue{ i } = bmByteMap & ( 1 << i ) ? szString[ iStringPos ] : 0;
    193.             iStringPos++;
    194.         }
    195.    
    196.         iArray[ iArrayPos++ ] = iValue[ 0 ];
    197.     }
    198.    
    199.     iItemsRead = iArrayPos;
    200.    
    201.     return ftell( iVaultHandle );
    202. }
    203.  
    204. stock nvault_util_readall_array( iVaultHandle , const szForwardFunc[] , Data[]={0} , iSize=0 )
    205. {
    206.     new iFwdHandle = CreateMultiForward( szForwardFunc , ET_IGNORE , FP_CELL , FP_CELL , FP_STRING , FP_ARRAY , FP_CELL , FP_CELL , FP_STRING , FP_CELL );
    207.    
    208.     if ( iFwdHandle <= 0 )
    209.         set_fail_state( "nvault_util_readall() failed to create forward" );
    210.        
    211.     new iRet , iPos , iNumEntries = nvault_util_count( iVaultHandle );
    212.     new szKey[ _NVAULTUTIL_MAX_KEY_LEN ] , iArray[ _NVAULTUTIL_MAXARRAYSIZE ] , iTimeStamp , iArrayHandle , iItemsRead;
    213.  
    214.     for ( new iCurrent = 1 ; iCurrent <= iNumEntries ; iCurrent++ )
    215.     {
    216.         iPos = nvault_util_read_array( iVaultHandle , iPos , szKey , charsmax( szKey ) , iArray , sizeof( iArray ) , iItemsRead , iTimeStamp );
    217.        
    218.         iArrayHandle = PrepareArray( iArray , _NVAULTUTIL_MAXARRAYSIZE , 0 );
    219.         ExecuteForward( iFwdHandle , iRet , iCurrent , iNumEntries , szKey , iArrayHandle , iItemsRead , iTimeStamp , Data , iSize );
    220.     }
    221.    
    222.     return iRet;
    223. }
    224.  
    225. stock _nvault_util_byte_map( iValue[ 1 ] )
    226. {
    227.     new iOut[ 1 ] = { _NVAULTUTIL_BYTEMAP };
    228.  
    229.     for ( new i = 0 ; i < 4 ; i++)
    230.         iOut[ 0 ] |= !iValue{ i } ? 0 : ( 1 << i );
    231.  
    232.     return iOut[ 0 ];
    233. }
    234.  
    235. stock _nvault_util_read_string( szDestString[] , iMaxLen , const SourceData[] , iSourceSize )
    236. {  
    237.     new iDestPos = -1;
    238.     new iBytePos = 4;
    239.     new iOffset = 1;
    240.     new iSourceMax = ( iSourceSize * 4 );
    241.    
    242.     while ( ( ++iDestPos < iMaxLen ) && ( iBytePos < iSourceMax ) )
    243.     {
    244.         szDestString[ iDestPos ] = SourceData{ iBytePos - iOffset++ };
    245.  
    246.         if ( iDestPos && ( ( iDestPos % 4 ) == 3 ) )
    247.         {
    248.             iBytePos += 4;
    249.             iOffset = 1;
    250.         }
    251.     }
    252.    
    253.     szDestString[ iDestPos ] = EOS;
    254. }
    255. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
    256. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
    257. */
He who fails to plan is planning to fail

User avatar
Spir0x
Veteran Member
Veteran Member
Tunisia
Posts: 641
Joined: 7 years ago
Location: Tunisia
Contact:

#3

Post by Spir0x » 4 years ago

Done and solved bro !

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 4 guests