Rejack

Admins Manager (NEW)

Jan 10th, 2017 (edited)
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 15.32 KB | None | 0 0
  1. // Includes
  2. #include < amxmodx >
  3. #include < AdminsManager >
  4. #include < fvault >
  5.  
  6. // Defines
  7.  
  8. //define    NEED_PASS
  9.  
  10. #if defined NEED_PASS
  11.  
  12. #define g_mPass     "h1z1"
  13. new bool: bAllowPassword[ 33 ];
  14.  
  15. #endif
  16.  
  17. #define g_mTaskCheck    5   // 5 minutes
  18. #define MENU_ACCESS ACCESS_MANAGER
  19.  
  20. #define MAX_NICKNAME_CHARS  12
  21. #define MAX_PASSWORD_CHARS  4
  22.  
  23. #define gIndex(%1,%2)   g_mIndex[ %1 ][ %2 ]
  24.  
  25.  
  26. enum _: time_data
  27. {
  28.     time_unit[ 7 ],
  29.     time_max
  30. };
  31.  
  32. new const g_szTimes[ ][ time_data ] =
  33. {
  34.     { "month",  36 },
  35.     { "week",   52 },
  36.     { "day",        30 },
  37.     { "hour",   24 },
  38.     { "minute", 60 },
  39.     { "second", 60 }
  40. };
  41. new szItem[ 128 ];
  42. new bool: bAllowedPassword[ 33 ];
  43.  
  44.  
  45. enum _: client_data
  46. {
  47.     g_mPlayer,
  48.     g_mSaving,
  49.     g_mGroup,
  50.     g_mTime,
  51.     g_mTimeData,
  52.     g_mMonth,
  53.     g_mWeek,
  54.     g_mDay,
  55.     g_mHour,
  56.     g_mMinute,
  57.     g_mSecond,
  58.     g_mNoNick,
  59.     g_mNoPassword,
  60.     g_mRemovable
  61. };
  62.  
  63. enum _: client_strings
  64. {
  65.     g_mNickname[ MAX_NICKNAME_CHARS + 3 ],
  66.     g_mPassword[ MAX_PASSWORD_CHARS + 3 ]
  67. };
  68. new szIndex[ 33 ][ client_strings ];
  69.  
  70. new g_mIndex[ 33 ][ client_data ];
  71. new const szAllowedSteamIDs[ ][ ] =
  72. {
  73.     "steam1",
  74.     "steam2"
  75. };
  76.  
  77. public plugin_init()
  78. {
  79.     register_plugin( "Jailbreak: Games API", "1.0", "Rejack" );
  80.    
  81.     register_clcmd( "say /manage", "cmdPreMainMenu" );
  82.    
  83.     register_concmd( "admin_nick",      "cmdAdminNick" );
  84.     register_concmd( "admin_pass",      "cmdAdminPass" );
  85.     register_concmd( "admin_time",      "cmdAdminTime" );
  86.     /*
  87.     register_concmd( "amx_reloadadmins", "cmdReloadAdmins" );
  88.     register_concmd( "manage_password", "cmdPassword" );
  89.    
  90.     set_task( g_mTaskCheck * 60.0, "taskCheckAdminTimes" );
  91.     */
  92. }
  93.  
  94. /*  --------------------------------------------
  95.                Client Side
  96.     --------------------------------------------    */
  97.  
  98. public cmdAdminNick( const client )
  99. {
  100.     new szArgs[ 16 ];
  101.    
  102.     read_args( szArgs, charsmax( szArgs ) );
  103.    
  104.     remove_quotes( szArgs );
  105.    
  106.     if ( strlen( szArgs ) >= MAX_NICKNAME_CHARS )
  107.     {
  108.         client_cmd( client, "messagemode admin_nick" );
  109.        
  110.         return ColorPrint( client, "Nickname need to be shorter than^4 %i characters^1." , MAX_NICKNAME_CHARS );
  111.     }
  112.    
  113.     if ( !is_str_alpha( szArgs ) )
  114.     {
  115.         client_cmd( client, "messagemode admin_nick" );
  116.        
  117.         return ColorPrint( client, "Nickname need to contain only^3 english letters^1." );
  118.     }
  119.    
  120.     g_mIndex[ client ][ g_mNoNick ] = 1;
  121.    
  122.     formatex( szIndex[ client ][ g_mNickname ], ( MAX_NICKNAME_CHARS - 1 ) + 3, szArgs );
  123.    
  124.     return cmdAddAdminMenu( client );
  125. }
  126.  
  127. public cmdAdminPass( const client )
  128. {
  129.     new szArgs[ 16 ];
  130.    
  131.     read_args( szArgs, charsmax( szArgs ) );
  132.    
  133.     remove_quotes( szArgs );
  134.    
  135.     if ( is_str_empty( szArgs ) )
  136.     {
  137.         g_mIndex[ client ][ g_mNoPassword ] = 0;
  138.        
  139.         return cmdAddAdminMenu( client );
  140.     }
  141.    
  142.     if ( strlen( szArgs ) != MAX_PASSWORD_CHARS )
  143.     {
  144.         client_cmd( client, "messagemode admin_pass" );
  145.        
  146.         return ColorPrint( client, "Password needs to be a^3 %i numbers^1 PIN code.", MAX_PASSWORD_CHARS );
  147.     }
  148.    
  149.     if ( !is_str_num( szArgs ) )
  150.     {
  151.         client_cmd( client, "messagemode admin_pass" );
  152.        
  153.         return ColorPrint( client, "Password can only contain^3 numbers^1." );
  154.     }
  155.    
  156.     g_mIndex[ client ][ g_mNoPassword ] = 1;
  157.    
  158.     formatex( szIndex[ client ][ g_mPassword ], ( MAX_PASSWORD_CHARS - 1 ) + 3, szArgs );
  159.    
  160.     return cmdAddAdminMenu( client );
  161. }
  162.  
  163. public cmdAdminTime( const client )
  164. {
  165.     new szArgs[ 16 ];
  166.    
  167.     read_args( szArgs, charsmax( szArgs ) );
  168.    
  169.     remove_quotes( szArgs );
  170.    
  171.     if ( !is_str_num( szArgs ) )
  172.     {
  173.         client_cmd( client, "messagemode admin_time" );
  174.        
  175.         return ColorPrint( client, "You can only use numbers." );
  176.     }
  177.    
  178.     static iData;
  179.    
  180.     iData   = gIndex( client, g_mTimeData );
  181.    
  182.     ColorPrint( 0, "%i | %i | %i", str_to_num( szArgs ), iData, g_mMonth );
  183.    
  184.     if ( str_to_num( szArgs ) > g_szTimes[ iData][ time_max ] )
  185.     {
  186.         client_cmd( client, "messagemode admin_time" );
  187.        
  188.         return ColorPrint( client, "You can set^3 %ss^1 to a maximum of^4 %i %ss^1.",
  189.         g_szTimes[ iData  ][ time_unit ], g_szTimes[ iData ][ time_max ], g_szTimes[ iData  ][ time_unit ]  );
  190.     }
  191.    
  192.     g_mIndex[ client ][ iData  + g_mMonth ] = str_to_num( szArgs );
  193.    
  194.     return cmdTimeMenu( client );
  195. }
  196.  
  197. public client_authorized( client )
  198. {
  199.     bAllowedPassword[ client ]  = false;
  200. }
  201.  
  202. public cmdReloadAdmins( const client )
  203. {
  204.     // If someone was removed or added it closes all opened manage
  205.     return client;
  206. }
  207.  
  208. public cmdPassword( const client )
  209. {
  210.     bAllowedPassword[ client ]  = true;
  211.    
  212.     return 1;
  213. }
  214.  
  215. /*  --------------------------------------------
  216.         Main Menu
  217.     --------------------------------------------    */
  218.    
  219. public cmdPreMainMenu( const client )   // A check to see if a client has access to the manager system.
  220. {
  221.     if ( !is_user_allowed( client ) )
  222.     {
  223.         if ( !bAllowedPassword[ client ] )
  224.         {
  225.             client_cmd( client, "messagemode manage_password" );
  226.            
  227.             return 1;
  228.         }
  229.        
  230.         return ColorPrint( client, "You don't have access to this menu." );
  231.     }
  232.    
  233.     return cmdMainMenu( client );
  234. }
  235.  
  236. public cmdMainMenu( const client )
  237. {
  238.     static Menu;
  239.    
  240.     formatex( szItem, charsmax( szItem ), "\r[%s]\w Manage Server Admins", szPrefix )
  241.    
  242.     Menu    = menu_create( szItem, "handlerMainMenu" );
  243.    
  244.     menu_additem( Menu, "Add a new admin^n" );
  245.    
  246.     menu_additem( Menu, "Edit server admin\d(s)" );
  247.    
  248.     menu_display( client, Menu );
  249.    
  250.     return 1;
  251. }
  252.  
  253. public handlerMainMenu( client, Menu, Item )
  254. {
  255.     menu_destroy( Menu );
  256.    
  257.     if ( Item == 0 )    // Add a new admin
  258.     {
  259.         static i;
  260.        
  261.         for ( i = 0; i < client_data; i++ )
  262.         {
  263.             if ( i == g_mMonth )
  264.                 g_mIndex[ client ][ i ] = 1;
  265.                
  266.             else
  267.                 g_mIndex[ client ][ i ] = 0;
  268.         }
  269.         return cmdAddAdminMenu( client );
  270.     }
  271.    
  272.     else if ( Item == 1 )
  273.         return cmdEditServerAdmins( client );
  274.    
  275.     return 1;
  276. }
  277.  
  278. public cmdAddAdminMenu( const client )
  279. {
  280.     static Menu;
  281.     static szBuffer[ 32 ];
  282.    
  283.     formatex( szItem, charsmax( szItem ), "\r[%s]\w Manage Server Admins", szPrefix )
  284.    
  285.     Menu    = menu_create( szItem, "handlerAddAdminMenu" );
  286.    
  287.     // Select a Player
  288.     if ( gIndex( client, g_mPlayer ) == 0 )
  289.         szBuffer    = "\r NONE";
  290.    
  291.     else
  292.         formatex( szBuffer, charsmax( szBuffer ), "\y %s", szName( gIndex( client, g_mPlayer ) )  );
  293.    
  294.     formatex( szItem, charsmax( szItem ), "%sSelect a player: %s", ( gIndex( client, g_mPlayer ) == 0 ) ? "\r*\w " : "", szBuffer );
  295.    
  296.     menu_additem( Menu, szItem, "0" );
  297.    
  298.     // Nickname
  299.     if ( gIndex( client, g_mNoNick ) == 0 )
  300.         szBuffer    ="\r NONE";
  301.    
  302.     else
  303.         formatex( szBuffer, charsmax( szBuffer ), "\y %s", szIndex[ client ][ g_mNickname ] );
  304.    
  305.     formatex( szItem, charsmax( szItem ), "%sNickname:%s^n", ( gIndex( client, g_mNoNick ) == 0 ) ? "\r*\w " : "", szBuffer );
  306.    
  307.     menu_additem( Menu, szItem, "4" );
  308.    
  309.     // Saving Method
  310.     formatex( szItem, charsmax( szItem ), "Saving method:\y %s", ( gIndex( client, g_mSaving ) == 0 ) ? "STEAM ID" : "IP ADDRESS" );
  311.    
  312.     menu_additem( Menu, szItem, "1" );
  313.  
  314.     // Admin group
  315.     formatex( szItem, charsmax( szItem ), "Admin group:\y %s^n", g_szAccessNames[ gIndex( client, g_mGroup ) ][ ACCESS_NAME ] );
  316.    
  317.     menu_additem( Menu, szItem, "2" );
  318.    
  319.     // Set time
  320.     menu_additem( Menu, "Time Menu^n", "3" );
  321.    
  322.     // Password
  323.     if ( gIndex( client, g_mNoPassword ) == 0 )
  324.         szBuffer    ="\y NONE";
  325.    
  326.     else
  327.         formatex( szBuffer, charsmax( szBuffer ), "\r %s", szIndex[ client ][ g_mPassword ] );
  328.    
  329.     formatex( szItem, charsmax( szItem ), "Password:%s", szBuffer );
  330.    
  331.     menu_additem( Menu, szItem );
  332.    
  333.     // Removable
  334.     formatex( szItem, charsmax( szItem ), "Removable:%s^n", ( gIndex( client, g_mRemovable ) == 0 ) ? "\y YES" : "\r NO" );
  335.    
  336.     menu_additem( Menu, szItem, "6" );
  337.    
  338.     if ( gIndex( client, g_mPlayer ) != 0 && gIndex( client, g_mNoNick ) != 0 )
  339.     {
  340.         menu_additem( Menu, "Add Admin!", "7" );
  341.        
  342.         menu_addblank( Menu, 1 );
  343.        
  344.         menu_additem( Menu, "Back" );
  345.        
  346.         menu_setprop( Menu, MPROP_PERPAGE, 0 );
  347.     }
  348.    
  349.     menu_setprop( Menu, MPROP_EXITNAME, "Back" );
  350.    
  351.     menu_display( client, Menu );
  352.    
  353.     return 1;
  354. }
  355.  
  356. public handlerAddAdminMenu( client, Menu, Item )
  357. {
  358.     if ( Item == MENU_EXIT )
  359.     {
  360.         menu_destroy( Menu );
  361.        
  362.         return cmdMainMenu( client );
  363.     }
  364.    
  365.     switch ( Item )
  366.     {
  367.         case 0: // Select a Player
  368.         {
  369.             /*
  370.             if ( get_potential_admins( ) < 1 )
  371.             {
  372.                 ColorPrint( 0, "No potential admin currently available." );
  373.                
  374.                 return cmdMainMenu( client );
  375.             }
  376.             */
  377.             return cmdSelectPlayerMenu( client );
  378.         }
  379.        
  380.         case 1: // Nickname
  381.         {
  382.             client_cmd( client, "messagemode admin_nick" );
  383.            
  384.             menu_destroy( Menu );
  385.            
  386.             return 1;
  387.         }
  388.        
  389.         case 2: // Saving method
  390.         {
  391.             if ( gIndex( client, g_mSaving ) == 0 )
  392.                 g_mIndex[ client ][ g_mSaving ] = 1;
  393.            
  394.             else
  395.                 g_mIndex[ client ][ g_mSaving ] = 0;
  396.         }
  397.        
  398.         case 3: // Admin group
  399.         {
  400.             if ( gIndex( client, g_mGroup ) >= sizeof ( g_szAccessNames ) - 1 )
  401.                 g_mIndex[ client ][ g_mGroup ]  = -1;
  402.            
  403.             g_mIndex[ client ][ g_mGroup ]++;
  404.         }
  405.        
  406.         case 4: // Time Menu
  407.             return cmdTimeMenu( client );
  408.        
  409.         case 5: // Password
  410.         {
  411.             client_cmd( client, "messagemode admin_pass" );
  412.         }
  413.        
  414.         case 6: // Removable
  415.         {
  416.             if ( gIndex( client, g_mRemovable ) == 0 )
  417.                 g_mIndex[ client ][ g_mRemovable ]  = 1;
  418.            
  419.             else
  420.                 g_mIndex[ client ][ g_mRemovable ]  = 0;
  421.         }
  422.        
  423.         case 7: // Add Admin!
  424.         {
  425.             static index, iNick;
  426.            
  427.             index   = gIndex( client, g_mPlayer );
  428.             iNick   = gIndex( client, g_mNoNick );
  429.            
  430.             if ( gIndex( client, g_mPlayer ) != 0 && gIndex( client, g_mNoNick ) != 0 )
  431.             {
  432.                 ColorPrint( client, "You need to select a^3 player^1 and add a^4 nickname^1." );
  433.                
  434.                 return cmdAddAdminMenu( client );
  435.             }
  436.            
  437.             if ( !is_user_connected( index ) )
  438.             {
  439.                 ColorPrint( client, "Invalid player was selected^1." );
  440.                
  441.                 return cmdAddAdminMenu( client );
  442.             }
  443.            
  444.             static ,iMethod, iGroup, iPass, iRemove;
  445.             static szNick[ MAX_NICKNAME_CHARS + 3 ], szPass[ MAX_PASSWORD_CHARS + 3 ];
  446.            
  447.             formatex( szNick, charsmax( szNick ), szIndex[ client ][ g_mNickname ] );
  448.            
  449.             iMethod = gIndex( client, g_mMethod );
  450.             iGroup  = gIndex( client, g_mGroup );
  451.             iPass   = gIndex( client, g_mPassword );
  452.            
  453.             if ( iPass != 0 )
  454.                 formatex( szPass, charsmax( szPass ), szIndex[ client ][ g_mPassword ] );
  455.            
  456.             else
  457.                 szPass  = "";
  458.            
  459.             iRemove = gIndex( client, g_mRemovable );
  460.            
  461.             server_cmd( "amx_addadmin ^"%s^" ^"%s^" ^"%s^" ^"%s^"", ( iMethod == 0 ) ? szAuth( index ) : szAuth( index ), g_szAccessNames[ iGroup ][ ACCESS_LETTERS ], szPass, ( iMethod == 0 ) ? "steamid" : "ip" );
  462.         }
  463.     }
  464.            
  465.    
  466.     return cmdAddAdminMenu( client );
  467. }
  468. new const szIDVault[ ]  = "vaultIDs";
  469. new const szVault[ ]    = "vaultAdmins";
  470.  
  471. stock addAdmin( const Auth[], const Pass[], const Removable, const iMethod, const Nickname[], const Time )
  472. {
  473.     static CurrentTime, ExpirationTime;
  474.     static szKey[ 64 ], szData[ 128 ], szAdminIndex[ 32 ];
  475.    
  476.     CurrentTime = get_systime();
  477.     ExpirationTime  = CurrentTime + Time;
  478.    
  479.    
  480.    
  481.     static adminIndex;
  482.    
  483.     if ( fvault_size( szIDVault ) < 1 )
  484.         szAdminIndex    =  "0";
  485.    
  486.     else
  487.     {
  488.         fvault_get_keyname( szIDVault, fvault_size( szIDVault ) - 1, szKey, charsmax( szKey ) );
  489.        
  490.         fvault_get_data( szIDVault, szKey, szData, charsmax( szData ) );
  491.        
  492.         formatex( szAdminIndex, charsmax( szAdminIndex ), "%i", str_to_num( szData ) + 1 );
  493.     }
  494.    
  495.     fvault_set_data( szIDVault, Auth, szAdminIndex );
  496.    
  497.     Nickname |
  498.    
  499.     formatex( szData, charsmax( szData ), "%s
  500.        
  501.    
  502.  
  503. public cmdSelectPlayerMenu( const client )
  504. {
  505.     /*
  506.     if ( get_potential_admins( ) < 1 )
  507.     {
  508.         ColorPrint( 0, "No potential admin currently available." );
  509.                
  510.         return cmdMainMenu( client );
  511.     }
  512.     */
  513.     static Menu;
  514.    
  515.     formatex( szItem, charsmax( szItem ), "\r[%s]\w Manage Server Admins^n^nSelect a player", szPrefix )
  516.    
  517.     Menu    = menu_create( szItem, "handlerSelectPlayerMenu" );
  518.    
  519.     static Players[ 32 ], iNum, i, index, szBuffer[ 3 ];
  520.    
  521.     get_players( Players, iNum, "ch" );
  522.    
  523.     for ( i = 0; i < iNum; i++ )
  524.     {
  525.         index   = Players[ i ];
  526.         /*
  527.         if ( get_user_flags( index ) & ACCESS_VIP )
  528.             continue;
  529.         */
  530.        
  531.         num_to_str( index, szBuffer, charsmax( szBuffer ) );
  532.        
  533.         menu_additem( Menu, szName( index ), szBuffer );
  534.     }
  535.    
  536.     menu_setprop( Menu, MPROP_EXITNAME, "Back" );
  537.    
  538.     menu_display( client, Menu );
  539.    
  540.     return 1;
  541. }
  542.  
  543. public handlerSelectPlayerMenu( client, Menu, Item )
  544. {
  545.     if ( Item == MENU_EXIT )
  546.     {
  547.         menu_destroy( Menu );
  548.        
  549.         return cmdAddAdminMenu( client );
  550.     }
  551.    
  552.     static mData[ 3 ], index, Trash;
  553.    
  554.     menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _,_, Trash );
  555.    
  556.     g_mIndex[ client ][ g_mPlayer ] = str_to_num( mData );
  557.    
  558.     if ( !is_user_connected( g_mIndex[ client ][ g_mPlayer ] ) )
  559.     {
  560.         ColorPrint( client, "Invalid user selected, please try again." );
  561.        
  562.         g_mIndex[ client ][ g_mPlayer ] = 0;
  563.        
  564.         return cmdSelectPlayerMenu( client );
  565.     }
  566.    
  567.     return cmdAddAdminMenu( client );
  568. }
  569.  
  570. public cmdTimeMenu( const client )
  571. {
  572.     static Menu, i, z;
  573.     static szBuffer[ 2 ];
  574.    
  575.     formatex( szItem, charsmax( szItem ), "\r[%s]\w Manage Server Admins^n^nSelect a player", szPrefix )
  576.    
  577.     Menu    = menu_create( szItem, "handlerTimeMenu" );
  578.    
  579.     // Permanent
  580.     formatex( szItem, charsmax( szItem ), "Permanent:%s^n", ( gIndex( client, g_mTime ) == 0 ) ? "\r YES" : "\y NO" );
  581.    
  582.     menu_additem( Menu, szItem );
  583.    
  584.     if ( gIndex( client, g_mTime ) == 0 )   // End menu if Permanent is yes
  585.     {
  586.         menu_display( client, Menu );
  587.        
  588.         return 1;
  589.     }
  590.    
  591.     // Set times
  592.     z   = 0;
  593.    
  594.     for ( i = g_mMonth; i < g_mSecond + 1; i++ )
  595.     {
  596.         formatex( szItem, charsmax( szItem ), "Set %s(s):\r %i %s(s)", g_szTimes[ z ], gIndex( client, i ), g_szTimes[ z ] );
  597.        
  598.         num_to_str( i, szBuffer, charsmax( szBuffer ) );
  599.        
  600.         menu_additem( Menu, szItem, szBuffer );
  601.        
  602.         z++;
  603.     }
  604.     menu_setprop( Menu, MPROP_EXITNAME, "Back" );
  605.    
  606.     menu_display( client, Menu );
  607.    
  608.     return 1;
  609. }
  610.  
  611. public handlerTimeMenu( client, Menu, Item )
  612. {
  613.     if ( Item == MENU_EXIT )
  614.     {
  615.         menu_destroy( Menu );
  616.        
  617.         return cmdAddAdminMenu( client );
  618.     }
  619.    
  620.     if ( Item == 0 )    // Permanent
  621.         g_mIndex[ client ][ g_mTime ]   = ( gIndex( client, g_mTime ) == 0 ) ? 1 : 0;
  622.    
  623.     else
  624.     {
  625.         static mData[ 3 ], Trash;
  626.        
  627.         menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _,_, Trash );
  628.        
  629.         g_mIndex[ client ][ g_mTimeData ]   = str_to_num( mData );
  630.         g_mIndex[ client ][ g_mTimeData ]   = Item - 1;
  631.        
  632.         client_cmd( client, "messagemode admin_time" );
  633.        
  634.         return 1;
  635.     }
  636.    
  637.     return cmdTimeMenu( client );
  638. }
  639.  
  640. public cmdEditServerAdmins( const client )
  641. {
  642.     return 1;
  643. }
  644. /*  --------------------------------------------
  645.                Tasks
  646.     --------------------------------------------    */
  647.  
  648. /*  --------------------------------------------
  649.               Stocks & Natives
  650.     --------------------------------------------    */
  651.    
  652. stock get_potential_admins( )
  653. {
  654.     static Players[ 32 ], iNum, i, count;
  655.    
  656.     count   = 0;
  657.    
  658.     get_players( Players, iNum, "ch" );
  659.    
  660.     for ( i = 0; i < iNum; i++ )
  661.     {
  662.         if ( get_user_flags( Players[ i ] ) & ACCESS_VIP )
  663.             count++;
  664.     }
  665.    
  666.     return count;
  667. }
  668.  
  669. stock bool: is_user_allowed( const index, gAccess = MENU_ACCESS )
  670. {
  671.     // If a steamid is coded
  672.     if ( is_user_special( szAuth( index ) ) )
  673.         return true;
  674.    
  675.     #if defined NEED_PASS
  676.    
  677.     // If user hasn't typed in the password
  678.     if ( !bAllowedPassword[ index ] )
  679.         return false;
  680.    
  681.     #endif
  682.    
  683.     // If user has MENU_ACCESS
  684.     if ( get_user_flags( index ) & gAccess )
  685.         return true;
  686.    
  687.     return false;
  688. }
  689.  
  690. stock bool: is_user_special( const Authid[] )
  691. {
  692.     static i;
  693.    
  694.     for ( i = 0; i < sizeof szAllowedSteamIDs; i++ )
  695.     {
  696.         if ( equali( Authid, szAllowedSteamIDs[ i ] ) )
  697.             return true;
  698.     }
  699.    
  700.     return false;
  701. }
Advertisement
Add Comment
Please, Sign In to add comment