HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2.  
  3. #define ACCESS_LEVEL_IMMUNITY (ADMIN_MENU|ADMIN_LEVEL_H) // Ping kickelő immunitás.
  4. #define MAX_ALLOWED_PING 125 // Max engedélyezett ping.
  5. #define MAX_ALLOWED_LOSS 30 // Max engedélyezett loss.
  6. #define MAX_FLUX 50 // Max eltérés az előző mért ping között.
  7. #define MAX_WARNING_CHECK 3 // Max ellenőrzés.
  8. #define INTERVAL_CHECK 10.0 // Ellenőrzés időköz.
  9. #define CHECK_COUNT MAX_WARNING_CHECK + 3 // Hányszor ellenőrizzen egy játékost.
  10.  
  11. new const PREFIX[] = "PingControl"
  12.  
  13. #define is_immunity(%0) ((get_user_flags(%0) & ACCESS_LEVEL_IMMUNITY) || is_user_bot(%0) || is_user_hltv(%0))
  14.  
  15. #define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
  16. #define set_bit(%1,%2) %1 |= (1 << (%2 & 31))
  17. #define clr_bit(%1,%2) %1 &= ~(1 << (%2 & 31))
  18.  
  19. new g_iWarning[33], g_iCountCheck[33], g_iLastPing[33], g_iBitValid;
  20.  
  21. public plugin_init()
  22. {
  23. register_plugin("Ping Control", "1.31", "neygomon");
  24. set_task(INTERVAL_CHECK, "PingCheck", .flags = "b");
  25. }
  26.  
  27. public client_putinserver(id)
  28. {
  29. if(is_immunity(id)) return;
  30. set_bit(g_iBitValid, id);
  31. g_iWarning[id] = g_iCountCheck[id] = 0;
  32. }
  33.  
  34. public client_disconnect(id)
  35. clr_bit(g_iBitValid, id);
  36.  
  37. public PingCheck()
  38. {
  39. static i, iPing, iLoss, players[32], pcount;
  40. get_players(players, pcount, "ch")
  41.  
  42. for(i=0; i < pcount; i++)
  43. {
  44. if(!get_bit(g_iBitValid, players[i])) continue;
  45. if(++g_iCountCheck[players[i]] < CHECK_COUNT)
  46. {
  47. get_user_ping(players[i], iPing, iLoss)
  48.  
  49. if(iPing >= MAX_ALLOWED_PING || iLoss > MAX_ALLOWED_LOSS || abs(iPing - g_iLastPing[players[i]]) > MAX_FLUX)
  50. {
  51. if(++g_iWarning[players[i]] >= MAX_WARNING_CHECK)
  52. {
  53. static name[32];
  54. get_user_name(players[i], name, charsmax(name));
  55. ChatColor(0, "^4[%s] ^3%s ^1kirúgva a szerverről magas ping miatt!", PREFIX, name);
  56. server_cmd("kick #%d ^"Ki lettel rugva magas ping miatt!^"", get_user_userid(players[i]));
  57. }
  58. }
  59. else if(g_iWarning[players[i]]) g_iWarning[players[i]]--;
  60. g_iLastPing[players[i]] = iPing;
  61. }
  62. }
  63. }
  64.  
  65. stock ChatColor(const id, const szMessage[], any:...) {
  66. static pnum, players[32], szMsg[190], IdMsg;
  67. vformat(szMsg, charsmax(szMsg), szMessage, 3);
  68.  
  69. if(!IdMsg) IdMsg = get_user_msgid("SayText");
  70.  
  71. if(id) {
  72. if(!is_user_connected(id)) return;
  73. players[0] = id;
  74. pnum = 1;
  75. }
  76. else get_players(players, pnum, "ch");
  77.  
  78. for(new i; i < pnum; i++) {
  79. message_begin(MSG_ONE, IdMsg, .player = players[i]);
  80. write_byte(players[i]);
  81. write_string(szMsg);
  82. message_end();
  83. }
  84. }