Advertisement
iXdoctor

Untitled

Apr 22nd, 2015
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.94 KB | None | 0 0
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include < amxmodx >
  4. #include < dhudmessage >
  5. #include < engine >
  6. #include < fakemeta >
  7. #include < amxmisc >
  8. #include < hamsandwich >
  9.  
  10. #define MAX_SIZE    127
  11.  
  12. enum _: Data_Trie
  13. {
  14.     Trie: g_TrieName,
  15.     Trie: g_TrieScore,
  16.     Trie: g_TrieLaps,
  17.     Trie: g_TrieScore_Length
  18. }
  19.  
  20. new sBuffer[ 128 ], szProfile[ 128 ], szMap[ 64 ];
  21. new Trie: TrieData[ Data_Trie ], Array: g_iDeathrun;
  22. new Timer_Running[ 33 ], Float: Timer[ 33 ];
  23.  
  24. native freeze_end();
  25. native vote_end();
  26.  
  27. public plugin_init()
  28. {
  29.     register_plugin( "Deathrun Top System", "1.0", "xDoctor" );
  30.     RegisterHam( Ham_Spawn, "player", "CBase_PlayerSpawn_Post" );
  31.     register_forward(FM_Touch, "fwd_Touch")
  32.  
  33.     g_iDeathrun = ArrayCreate( MAX_SIZE, 1 );
  34.    
  35.     TrieData[ g_TrieName ] = TrieCreate();
  36.     TrieData[ g_TrieScore ] = TrieCreate();
  37.     TrieData[ g_TrieLaps ] = TrieCreate();
  38.     TrieData[ g_TrieScore_Length ] = TrieCreate();
  39.    
  40.     get_mapname( szMap, charsmax( szMap ) );
  41.  
  42.     LoadDeathrunTop();
  43.     ArraySort( g_iDeathrun, "SortTop_Place" );
  44.    
  45.     set_task( 5.0, "Sort_TopRankings", _,_,_, "b" );
  46.     set_task( 1.0, "TimerTask", 2000, "", 0, "ab" );
  47.    
  48.     register_clcmd( "say /top", "CmdPro_Tops" );
  49.  
  50.    
  51. }
  52.  
  53. public Sort_TopRankings()
  54. {
  55.     ArraySort( g_iDeathrun, "SortTop_Place" );
  56.     SaveDeathrunTop();
  57. }
  58.  
  59. public CBase_PlayerSpawn_Post( index )
  60. {
  61.     if( !vote_end() )
  62.         set_task( float( freeze_end() ), "ActivateTimer", index );
  63.     else
  64.     {
  65.         Timer_Running[ index ] = true;
  66.         Timer[ index ] = get_gametime();
  67.         ColorChat( index, "Timer started.. #No waiting." );
  68.     }
  69. }
  70.  
  71. public TimerTask()
  72. {
  73.     new g_iAlive[ 32 ], g_iDead[ 32 ], alivePlayer, deadPlayer;
  74.     new minutes, seconds;
  75.    
  76.     get_players( g_iAlive, alivePlayer, "ach" );
  77.     get_players( g_iDead, deadPlayer, "bch" );
  78.    
  79.     for( new i = 0; i < alivePlayer; i++ )
  80.     {
  81.         if( Timer_Running[ g_iAlive[ i ] ] )
  82.         {
  83.             new Float: Time = get_gametime() - Timer[ g_iAlive[ i ] ];
  84.            
  85.             minutes = floatround( Time, floatround_floor ) / 60
  86.             seconds = floatround( Time- ( 60 * minutes ), floatround_floor )
  87.             set_hudmessage( 0, 255, 255, -1.0, 0.85, 0, 0.0, 1.0, 2.0, 1.0 )   
  88.             show_hudmessage( g_iAlive[ i ], "Time: %02d:%02d", minutes, seconds );
  89.         }
  90.     }
  91.    
  92.     for( new i = 0; i < deadPlayer; i++ )
  93.     {
  94.         new specmode = pev( g_iDead[ i ], pev_iuser1 );
  95.        
  96.         if( specmode == 2 || specmode == 4 )
  97.         {
  98.             new target = pev( g_iDead[ i ], pev_iuser2 );
  99.             if( target != g_iDead[ i ] )
  100.             {
  101.                 if( Timer_Running[ g_iAlive[ i ] ] )
  102.                 {
  103.                     new Float: Time = get_gametime() - Timer[ g_iAlive[ i ] ];
  104.        
  105.                     minutes = floatround( Time, floatround_floor ) / 60
  106.                     seconds = floatround( Time - ( 60 * minutes ), floatround_floor )
  107.        
  108.                     set_hudmessage( 0, 255, 255, -1.0, 0.10, 4, 0.0, 1.0, 0.0, 0.1 )
  109.                     show_hudmessage( g_iDead[ i ], "Player %s, Timer: %02d:%02d", GetUserName( target ), minutes, seconds );
  110.                 }
  111.             }
  112.         }
  113.     }
  114. }
  115.  
  116. public fwd_Touch( ent, id )
  117. {
  118.     new szEntClass_Name[ 32 ], szEntClass_Id[ 32 ], Score[ 32 ];
  119.     pev( ent, pev_targetname, szEntClass_Name, charsmax( szEntClass_Name ) )
  120.     pev( id, pev_targetname, szEntClass_Id, charsmax( szEntClass_Id ) )
  121.    
  122.     if( equal( szEntClass_Name, "aaa" ) || equal( szEntClass_Id, "aaa" ) )
  123.     {
  124.         //if( Timer_Running[ id ] )
  125.         {
  126.             new minutes, seconds, ms;
  127.             new Float: Time = get_gametime() - Timer[ id ];
  128.  
  129.             minutes = floatround( Time, floatround_floor ) / 60;
  130.             seconds = floatround( Time - ( 60 * minutes ), floatround_floor )
  131.             ms = floatround( ( Time  - ( minutes * 60.0 + seconds ) ) * 100.0, floatround_floor )
  132.            
  133.             formatex( Score, sizeof Score-1, "%02d:%02d:%02d", minutes, seconds, ms );
  134.             ColorChat( 0, "'^3%s^1' have ^4finished^1 the run in ^3%s^1 after ^3%s^1.", GetUserName( id ), szMap, Score );
  135.            
  136.             new bool: Found, FoundId;
  137.             Found = false;
  138.            
  139.             new SteamID2[ 32 ], PlayerID[ 32] ;
  140.             get_user_authid( id, PlayerID, charsmax( PlayerID ) );
  141.                
  142.             for( new i = 0; i < ArraySize( g_iDeathrun ); i++ )
  143.             {
  144.                 ArrayGetString( g_iDeathrun, i, SteamID2, sizeof SteamID2-1 );
  145.                
  146.                 if( equal( SteamID2, PlayerID ) )
  147.                 {
  148.                     Found = true;
  149.                     FoundId = i;
  150.                 }
  151.             }
  152.            
  153.             if( Found )
  154.             {
  155.                 new Name[ 32 ], SteamID[ 32 ], Laps, TimeLength;
  156.                    
  157.                 formatex( Name, charsmax( Name ), "%s", GetUserName( id ) );
  158.                 formatex( SteamID, charsmax( SteamID ), "%s", szAuth( id ) );
  159.                
  160.                 for( new i = 0; i < ArraySize( g_iDeathrun ); i++ )
  161.                 {
  162.                     ArrayGetString( g_iDeathrun, i, SteamID, sizeof SteamID-1 );
  163.                    
  164.                     if( equal( SteamID, PlayerID ) )
  165.                     {
  166.                         TrieGetCell( TrieData[ g_TrieLaps ], SteamID, Laps );
  167.                            
  168.                         TrieSetString( TrieData[ g_TrieName ], SteamID, Name );
  169.                         TrieSetCell( TrieData[ g_TrieLaps ], SteamID, Laps+1 );
  170.                         TrieGetCell( TrieData[ g_TrieScore_Length ], SteamID, TimeLength );
  171.        
  172.                         ColorChat( id, "finish : %.2f, before: %.2f", Time, TimeLength );
  173.                         if( TimeLength > Time )
  174.                         {
  175.                             TrieSetString( TrieData[ g_TrieScore ], SteamID, Score );
  176.                             TrieSetCell( TrieData[ g_TrieScore_Length ], SteamID, Time );
  177.                             break;
  178.                         }
  179.                     }
  180.                 }
  181.                
  182.                 SaveDeathrunTop();
  183.                 Sort_TopRankings();
  184.             }
  185.             else
  186.             {
  187.                 new Name[ 32 ], SteamID[ 32 ], Rank;
  188.                
  189.                 formatex( SteamID, charsmax( SteamID ), "%s", szAuth( id ) );
  190.                 formatex( Name, charsmax( Name ), "%s", GetUserName( id ) );
  191.                
  192.                 ArrayPushString( g_iDeathrun, SteamID );
  193.                 TrieSetString( TrieData[ g_TrieName ], SteamID, Name );
  194.                 TrieSetString( TrieData[ g_TrieScore ], SteamID, Score );
  195.                 TrieSetCell( TrieData[ g_TrieScore_Length ], SteamID, Time );
  196.                 TrieSetCell( TrieData[ g_TrieLaps ], SteamID, 1 );
  197.                
  198.                 SaveDeathrunTop();
  199.                 Sort_TopRankings();
  200.                
  201.                 new SteamID2[ 32 ], PlayerID[ 32 ];
  202.                 get_user_authid( id, PlayerID, charsmax( PlayerID ) );
  203.                    
  204.                 for( new i = 0; i < ArraySize( g_iDeathrun ); i++ )
  205.                 {
  206.                     ArrayGetString( g_iDeathrun, i, SteamID2, sizeof SteamID2-1 );
  207.                
  208.                     if( equal( SteamID2, PlayerID ) )
  209.                     {
  210.                         ColorChat( 0, "Found !" );
  211.                         Rank = i;
  212.                     }
  213.                 }
  214.                    
  215.                 ColorChat( 0, "Player '^3%s^1' is now rank ^3#%i^1 out of ^3#%i^1.", GetUserName( id ), Rank, ArraySize( g_iDeathrun ) );
  216.             }  
  217.         }
  218.        
  219.         SaveDeathrunTop();
  220.         Sort_TopRankings();
  221.        
  222.         Timer[ id ] = get_gametime() - 10.0;
  223.         set_pev(ent, pev_solid, SOLID_NOT)
  224.         set_task( 0.5, "Remove_NOT", ent );
  225.        
  226.         return 1;
  227.     }
  228.     return 0;
  229. }
  230.  
  231. public Remove_NOT( ent )
  232.     set_pev(ent, pev_solid, SOLID_BBOX)
  233.    
  234. public SortTop_Place( Array: g_iArray, Position, OtherPosition )
  235. {
  236.     new SteamID[ 35 ], SteamID2[ 35 ];
  237.     new Length_Player, Length_OtherPlayer;
  238.    
  239.     ArrayGetString( g_iArray, Position, SteamID, sizeof SteamID-1 );
  240.     ArrayGetString( g_iArray, OtherPosition, SteamID2, sizeof SteamID2-1 );
  241.    
  242.     TrieGetCell( TrieData[ g_TrieScore_Length ], SteamID, Length_Player );
  243.     TrieGetCell( TrieData[ g_TrieScore_Length ], SteamID2, Length_OtherPlayer );
  244.    
  245.     if( Length_Player > Length_OtherPlayer )
  246.         return 1;
  247.    
  248.     if( Length_Player < Length_OtherPlayer )
  249.         return -1;
  250.    
  251.     return 0;
  252. }
  253.  
  254. public LoadDeathrunTop()
  255. {
  256.     formatex( szProfile, charsmax( szProfile ), "addons/amxmodx/data/deathrun_top/top_%s.ini", szMap );
  257.     new f = fopen( szProfile, "r" );
  258.    
  259.     if( !f )    return;
  260.    
  261.     new szData[ 555 ], TopRank_Name[ 32 ], TopRank_Score[ 32 ];
  262.     new SteamID[ 32 ], TopRank_Length[ 16 ], TopRank_Laps[ 16 ];
  263.    
  264.     while( !feof( f ) )
  265.     {
  266.         fgets( f, szData, charsmax( szData ) );
  267.                
  268.         if( !strlen( szData ) )
  269.             continue;
  270.        
  271.         replace_all( szData, charsmax( szData ), "#", " " );
  272.         parse( szData, SteamID, 31, TopRank_Name, 31, TopRank_Score, 31, TopRank_Length, 15, TopRank_Laps, 15 );
  273.        
  274.         ArrayPushString( g_iDeathrun, SteamID );
  275.         TrieSetString( TrieData[ g_TrieName ], SteamID, TopRank_Name );
  276.         TrieSetString( TrieData[ g_TrieScore ], SteamID, TopRank_Score );
  277.         TrieSetCell( TrieData[ g_TrieScore_Length ], SteamID, str_to_float( TopRank_Length ) );
  278.         TrieSetCell( TrieData[ g_TrieLaps ], SteamID, str_to_num( TopRank_Laps ) );
  279.     }  
  280.    
  281.     fclose( f );
  282. }
  283.  
  284. public SaveDeathrunTop()
  285. {
  286.     formatex( szProfile, charsmax( szProfile ), "addons/amxmodx/data/deathrun_top/top_%s.ini", szMap );
  287.    
  288.     new f = fopen( szProfile, "w+" );
  289.    
  290.     if( !f ) return;
  291.    
  292.     new SteamID[ 32 ], TopRank_Name[ 32 ];
  293.     new TopRank_Score[ 32 ], TopRank_Length, TopRank_Laps;
  294.    
  295.     for( new i = 0; i < ArraySize( g_iDeathrun ); i++ )
  296.     {
  297.         ArrayGetString( g_iDeathrun, i, SteamID, sizeof SteamID-1 );
  298.         TrieGetString( TrieData[ g_TrieName ], SteamID, TopRank_Name, sizeof TopRank_Name-1 );
  299.         TrieGetString( TrieData[ g_TrieScore ], SteamID, TopRank_Score, sizeof TopRank_Score-1 );
  300.         TrieGetCell( TrieData[ g_TrieScore_Length ], SteamID, TopRank_Length );
  301.         TrieGetCell( TrieData[ g_TrieLaps ], SteamID, TopRank_Laps );
  302.        
  303.         formatex( sBuffer, charsmax( sBuffer ), "^"%s^" ^"%s^" ^"%s^" ^"%.2f^" %i^n", SteamID, TopRank_Name, TopRank_Score, TopRank_Length, TopRank_Laps );
  304.         fprintf( f, sBuffer );
  305.     }
  306.    
  307.     //ColorChat( 0, "Save to file: %s", sBuffer );
  308.     fclose( f );
  309. }
  310.  
  311. public CmdPro_Tops( index )
  312. {
  313.     if( ArraySize( g_iDeathrun ) <= 0 )
  314.         return ColorChat( index, "Sorry no records have been found in ^3%s^1.", szMap );
  315.        
  316.     new motd[ 2048 ], len;
  317.    
  318.     len = formatex( motd[ len ], charsmax( motd ) - len, "<meta charset=UTF-8> <style> body { background:#242424; margin:20px; font-family:Tahoma }  th { background:#2F3034; color:#BDB670; text-align:left; } table { padding:4px; background:#4A4945 font-size:10px; color:#FFF; } h2,h3 { color:#D2D1CF } #c{ background:#3B3C37 } img { height:12px; background:#99CC00; margin:0 3px; } #r { height:12px; background:#999900 } #clr { background:none; color:#FFF; font-size:20px } </style>" );
  319.     len += formatex( motd[ len ], charsmax( motd ) - len, "<body><h2> Top 10 Player's <h2><table width=100%% border=5 align=center cellpadding=2 cellspacing=0>" );
  320.     len += formatex( motd[ len ], charsmax( motd ) - len, "<tr><th>#<th style=^"width: 250px^">Player<th style=^"width: 250px^">Score<th style=^"width: 125px^">Laps</tr>" );
  321.    
  322.     for( new i = 0; i < min( 10, ArraySize( g_iDeathrun ) ); i++ )
  323.     {
  324.         new SteamID[ 32 ], Name[ 32 ], Score[ 32 ], Laps;
  325.        
  326.         ArrayGetString( g_iDeathrun, i, SteamID, sizeof SteamID-1 );
  327.         TrieGetString( TrieData[ g_TrieName ], SteamID, Name, sizeof Name-1 );
  328.         TrieGetString( TrieData[ g_TrieScore ], SteamID, Score, sizeof Score-1 );
  329.         TrieGetCell( TrieData[ g_TrieLaps ], SteamID, Laps );
  330.        
  331.         if( i > ArraySize( g_iDeathrun ) )
  332.             len += formatex( motd[ len ], charsmax( motd ) - len, "<tr bgcolor=%s style=^"color:%s^"><td>%d<td>%s<td>%s<td>%s</tr>", !( i % 2 ) ? "#242424" : "#282828", "#FFFFFF", i+1, "Unknown Name", "00:00:00", "0" );
  333.         else
  334.             len += formatex( motd[ len ], charsmax( motd ) - len, "<tr bgcolor=%s style=^"color:#FFFFFF^"><td>%d<td>%s<td>%s<td>%i</tr>", !( i % 2 ) ? "#242424" : "#282828", i+1, Name, Score, Laps );
  335.     }
  336.    
  337.     show_motd( index, motd, "Top Map Players MOTD by xDoctor." );
  338.     return 1;
  339. }
  340.  
  341. stock GetUserName( const Index )
  342. {
  343.     new szName[ 32 ];
  344.    
  345.     get_user_name( Index, szName, charsmax( szName ) );
  346.    
  347.     return szName;
  348. }
  349.  
  350. stock ColorChat(const id, const string[], {Float, Sql, Resul,_}:...)
  351. {
  352.     new msg[191], players[32], count = 1
  353.     static len
  354.     len = formatex(msg, charsmax(msg), "^1[ ^3#Flag-IL Top ^1] " )
  355.     vformat(msg[len], charsmax(msg) - len, string, 3)
  356.     if(id)    players[0] = id
  357.     else    get_players(players,count,"ch")
  358.    
  359.     for (new i = 0; i < count; i++)
  360.     {
  361.         if(is_user_connected(players[i]))
  362.         {
  363.             message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"),_, players[i])
  364.             write_byte(players[i])
  365.             write_string(msg)
  366.             message_end()
  367.         }
  368.     }
  369.    
  370.     return 1;
  371. }
  372.  
  373. stock frozen_account( index )
  374. {
  375.     new iFlags = pev( index, pev_flags );
  376.     return iFlags & FL_FROZEN ? 1 : 0;
  377. }
  378.  
  379. stock set_user_freeze( const index, const freeze )
  380. {
  381.     new iFlags = pev( index, pev_flags );
  382.     set_pev( index, pev_flags, freeze ? iFlags | FL_FROZEN : iFlags & ~FL_FROZEN );
  383.      
  384.     return freeze;
  385. }
  386.  
  387. stock szAuth( const index )
  388. {
  389.     static Auth[ 35 ];
  390.    
  391.     get_user_authid( index, Auth, charsmax( Auth ) );
  392.    
  393.     return Auth;
  394. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement