HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include < amxmodx >
  2. #include < engine >
  3.  
  4. // 31 nap
  5. #define VIPTIME 31 * 86400
  6. #define VIPFLAG ADMIN_LEVEL_H
  7.  
  8. new const g_sPrefix[ ] = "VIP Rendszer";
  9.  
  10. new const g_sVipsFile[ ] = "addons/amxmodx/configs/vips.ini";
  11. enum _: eVipInfos { sVipAuthId[ 32 ], iVipTime };
  12.  
  13. new Array: g_daVips, g_iVip[ eVipInfos ], g_iVipsNum, g_iVipCheckEntity;
  14. new g_sAuthId[ 33 ][ 32 ], g_iTime[ 33 ];
  15.  
  16. public plugin_init( )
  17. {
  18. register_plugin( "VIP Rendszer", "1.0", "Demon" );
  19.  
  20. register_clcmd( "say /vipvasarlas", "CmdBuyVip" );
  21. register_clcmd( "say /info", "CmdVipInfo" );
  22.  
  23. CreateVipCheckEntity( );
  24. }
  25.  
  26. public CmdVipInfo( iId )
  27. {
  28. if ( !( get_user_flags( iId ) & VIPFLAG ) )
  29. {
  30. ChatColor( iId, "Te nem vagy VIP tag." );
  31. return;
  32. }
  33.  
  34. static iTime;
  35. iTime = g_iTime[ iId ] - get_systime( );
  36.  
  37. if ( iTime <= 0 ) ChatColor( iId, "VIP tagsagod lejart." );
  38. else ChatColor( iId, "VIP tagsagod lejar: %d ora %02d perc %02d mp mulva.", iTime / 3600, ( iTime / 60 ) % 60, iTime % 60 );
  39. }
  40.  
  41. public CmdBuyVip( iId )
  42. {
  43. if ( get_user_flags( iId ) & VIPFLAG )
  44. {
  45. ChatColor( iId, "Te VIP tag vagy, nem vasarolhatsz ujra VIP tagsagot." );
  46. return;
  47. }
  48.  
  49. g_iVip[ iVipTime ] = get_systime( ) + VIPTIME;
  50. copy( g_iVip[ sVipAuthId ], charsmax( g_sAuthId[ ] ), g_sAuthId[ iId ] );
  51.  
  52. ArrayPushArray( g_daVips, g_iVip );
  53. g_iVipsNum = ArraySize( g_daVips );
  54. g_iTime[ iId ] = g_iVip[ iVipTime ];
  55. set_user_flags( iId, get_user_flags( iId ) | VIPFLAG );
  56.  
  57. ChatColor( iId, "Sikeresen vasaroltal VIP tagsagot." );
  58. }
  59.  
  60. public plugin_precache( )
  61. {
  62. g_daVips = ArrayCreate( eVipInfos );
  63.  
  64. new pFile = fopen( g_sVipsFile, "rt" );
  65.  
  66. if ( pFile )
  67. {
  68. new sLine[ 64 ];
  69.  
  70. new sData[ 2 ][ 32 ];
  71. while ( !feof( pFile ) )
  72. {
  73. fgets( pFile, sLine, charsmax( sLine ) );
  74.  
  75. if ( sLine[ 0 ] == ';' || strlen( sLine ) < 10 ) continue;
  76.  
  77. parse( sLine, sData[ 0 ], 31, sData[ 1 ], 31 );
  78.  
  79. g_iVip[ iVipTime ] = str_to_num( sData[ 1 ] );
  80.  
  81. if ( g_iVip[ iVipTime ] < get_systime( ) ) continue;
  82.  
  83. copy( g_iVip[ sVipAuthId ], charsmax( sData[ ] ), sData[ 0 ] );
  84.  
  85. ArrayPushArray( g_daVips, g_iVip );
  86. }
  87.  
  88. g_iVipsNum = ArraySize( g_daVips );
  89.  
  90. fclose( pFile );
  91. }
  92. else Save( );
  93. }
  94.  
  95. public CreateVipCheckEntity( )
  96. {
  97. g_iVipCheckEntity = create_entity( "info_target" );
  98.  
  99. if ( !is_valid_ent( g_iVipCheckEntity ) ) return;
  100.  
  101. entity_set_string( g_iVipCheckEntity, EV_SZ_classname, "vipcheck_entity" );
  102. entity_set_float( g_iVipCheckEntity, EV_FL_nextthink, get_gametime( ) + 1.0 );
  103.  
  104. register_think( "vipcheck_entity", "FwdThink" );
  105. }
  106.  
  107. public FwdThink( iEntity )
  108. {
  109. if ( iEntity != g_iVipCheckEntity || g_iVipsNum == 0 ) return;
  110.  
  111. static iCurSysTime;
  112.  
  113. iCurSysTime = get_systime( );
  114.  
  115. for ( new i; i < g_iVipsNum; ++i )
  116. {
  117. ArrayGetArray( g_daVips, i, g_iVip );
  118.  
  119. if ( g_iVip[ iVipTime ] < iCurSysTime ){
  120. ArrayDeleteItem( g_daVips, i );
  121. g_iVipsNum = ArraySize( g_daVips );
  122. }
  123. }
  124.  
  125. entity_set_float( g_iVipCheckEntity, EV_FL_nextthink, get_gametime( ) + 5.0 );
  126. }
  127.  
  128. public client_putinserver( iId )
  129. {
  130. if ( is_user_bot( iId ) || is_user_hltv( iId ) ) return;
  131.  
  132. get_user_authid( iId, g_sAuthId[ iId ], charsmax( g_sAuthId[ ] ) );
  133.  
  134. Check( iId );
  135. }
  136.  
  137. public Check( iId )
  138. {
  139. for ( new i; i < g_iVipsNum; ++i )
  140. {
  141. ArrayGetArray( g_daVips, i, g_iVip );
  142.  
  143. if ( equal( g_iVip[ sVipAuthId ], g_sAuthId[ iId ] ) )
  144. {
  145. set_user_flags( iId, get_user_flags( iId ) | ADMIN_LEVEL_H );
  146.  
  147. g_iTime[ iId ] = g_iVip[ iVipTime ];
  148.  
  149. break;
  150. }
  151. }
  152. }
  153.  
  154. public Save( )
  155. {
  156. if ( file_exists( g_sVipsFile ) ) delete_file( g_sVipsFile );
  157.  
  158. new pFile = fopen( g_sVipsFile, "wt" );
  159. if ( pFile )
  160. {
  161. new sLine[ 64 ];
  162.  
  163. for ( new i; i < g_iVipsNum; ++i )
  164. {
  165. ArrayGetArray( g_daVips, i, g_iVip );
  166.  
  167. if(g_iVip[ iVipTime ] < get_systime( ))
  168. continue;
  169.  
  170. formatex( sLine, charsmax( sLine ), "^"%s^" ^"%d^"", g_iVip[ sVipAuthId ], g_iVip[ iVipTime ] );
  171.  
  172. fputs( pFile, sLine);
  173. }
  174.  
  175. fclose( pFile );
  176. }
  177. }
  178.  
  179. public plugin_end( ) { Save( ); }
  180.  
  181. stock ChatColor( iId, const sMessage[ ], any:... )
  182. {
  183. static iPlrNum, iPlayers[ 32 ], sMsg[ 256 ], iIdMsg, iMsgLen = charsmax( sMsg );
  184.  
  185. vformat( sMsg, iMsgLen, sMessage, 3 );
  186. format( sMsg, iMsgLen, "!g[%s]!y %s", g_sPrefix, sMsg );
  187.  
  188. replace_all( sMsg, iMsgLen, "!g", "^4" );
  189. replace_all( sMsg, iMsgLen, "!y", "^1" );
  190. replace_all( sMsg, iMsgLen, "!t", "^3" );
  191.  
  192. if ( !iIdMsg ) iIdMsg = get_user_msgid( "SayText" );
  193.  
  194. if ( iId )
  195. {
  196. iPlayers[ 0 ] = iId;
  197. iPlrNum = 1;
  198. }
  199. else get_players( iPlayers, iPlrNum, "ch" );
  200.  
  201. for ( new i, iPId; i < iPlrNum; ++i )
  202. {
  203. iPId = iPlayers[ i ];
  204.  
  205. if ( !is_user_connected( iPId ) ) continue;
  206.  
  207. message_begin( MSG_ONE, iIdMsg, _, iPId );
  208. write_byte( iPId );
  209. write_string( sMsg );
  210. message_end( );
  211. }
  212. }