HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /**
  2.  * =============================================================================
  3.  * High Ping Kicker - Lite Edition
  4.  * Ping Ellenőrzés
  5.  *
  6.  * [ SourceMod (C)2004-2007 AlliedModders - LLC. Minden Jog fenntartva. ]
  7.  * =============================================================================
  8.  */
  9.  
  10. #pragma semicolon 1
  11. #include <sourcemod>
  12. #include <sdktools>
  13.  
  14. #define VERSION "1.0.0.1"
  15.  
  16. #define VERSION_FLAGS FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD
  17. #define TIMER_FLAGS TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE
  18. #define UMIN(%1,%2) (%1 < %2 ? %2 : %1)
  19.  
  20. new Handle:g_Cvar_Enabled = INVALID_HANDLE; // HPK Be legyen kapcsolva?
  21. new Handle:g_Cvar_MaxPing = INVALID_HANDLE; // Ping korlát
  22. new Handle:g_Cvar_MaxChecks = INVALID_HANDLE; // Ellenőrzések száma
  23. new Handle:g_Cvar_StartCheck = INVALID_HANDLE; // Ping ellenőrzés kezdése mapváltás után (Másodpercekben)
  24. new Handle:g_Cvar_AdminsImmune = INVALID_HANDLE; // Adminoknak immunisság
  25. new g_FailedChecks[MAXPLAYERS+1]; // Ellenőrzés
  26. new g_Ping[MAXPLAYERS+1];
  27.  
  28. public Plugin:myinfo =
  29. {
  30. name = "High Ping Kicker - Lite Edition",
  31. author = "Liam",
  32. description = "Magas Ping Kicker",
  33. version = VERSION,
  34. url = "http://www.sourcemod.net"
  35. };
  36.  
  37. public OnPluginStart( )
  38. {
  39. LoadTranslations("common.phrases");
  40. CreateConVar("hpk_lite_version", VERSION, "HPK - Lite Verzió Szám", VERSION_FLAGS);
  41. g_Cvar_Enabled = CreateConVar("sm_hpk_enabled", "1", "0 = Ki | 1 = Be -- Be legyen kapcsolva?");
  42. g_Cvar_MaxPing = CreateConVar("sm_maxping", "150", "Max ping korlát");
  43. g_Cvar_MaxChecks = CreateConVar("sm_maxchecks", "10", "Ellenőrzések száma");
  44. g_Cvar_StartCheck = CreateConVar("sm_startcheck", "15.0", "Ping ellenőrzés kezdése mapváltás után (Másodpercekben) ");
  45. g_Cvar_AdminsImmune = CreateConVar("sm_adminsimmune", "1", "0 = Ki | 1 = Be -- Adminokra immunis legyen a ellenőrzés?");
  46.  
  47. AutoExecConfig(true, "hpk_lite");
  48. }
  49.  
  50. public OnMapStart( )
  51. {
  52. new maxclients = GetMaxClients( );
  53.  
  54. if(GetConVarInt(g_Cvar_Enabled) == 1)
  55. {
  56. CreateTimer(GetConVarFloat(g_Cvar_StartCheck), Timer_CheckPing, _, TIMER_FLAGS);
  57. }
  58.  
  59. for(new i = 1; i < maxclients; i++)
  60. {
  61. g_Ping[i] = 0;
  62. g_FailedChecks[i] = 0;
  63. }
  64. }
  65.  
  66. public OnClientPutInServer(client)
  67. {
  68. g_Ping[client] = 0;
  69. g_FailedChecks[client] = 0;
  70. }
  71.  
  72. public Action:Timer_CheckPing(Handle:Timer)
  73. {
  74. if(GetConVarInt(g_Cvar_Enabled) == 0)
  75. return Plugin_Stop;
  76.  
  77. new maxclients = GetMaxClients( );
  78.  
  79. for(new i = 1; i < maxclients; i++)
  80. {
  81. if(!IsClientConnected(i) || !IsClientInGame(i)
  82. || IsFakeClient(i) || IsAdmin(i))
  83. continue;
  84.  
  85. UpdatePingStatus(i);
  86. }
  87. HandleHighPingers( );
  88. return Plugin_Continue;
  89. }
  90.  
  91. UpdatePingStatus(client)
  92. {
  93. decl String:rate[32];
  94. GetClientInfo(client, "cl_cmdrate", rate, sizeof(rate));
  95. new Float:ping = GetClientAvgLatency(client, NetFlow_Outgoing);
  96. new Float:tickRate = GetTickInterval( );
  97. new cmdRate = UMIN(StringToInt(rate), 20);
  98.  
  99. ping -= ((0.5 / cmdRate) + (tickRate * 1.0));
  100. ping -= (tickRate * 0.5);
  101. ping *= 1000.0;
  102.  
  103. g_Ping[client] = RoundToZero(ping);
  104.  
  105. if(g_Ping[client] > GetConVarInt(g_Cvar_MaxPing))
  106. g_FailedChecks[client]++;
  107. else
  108. {
  109. if(g_FailedChecks[client] > 0)
  110. g_FailedChecks[client]--;
  111. }
  112. }
  113.  
  114. HandleHighPingers( )
  115. {
  116. new maxclients = GetMaxClients( );
  117.  
  118. for(new i = 1; i < maxclients; i++)
  119. {
  120. if(!IsClientConnected(i) || !IsClientInGame(i) || IsFakeClient(i))
  121. continue;
  122.  
  123. if(g_FailedChecks[i] >= GetConVarInt(g_Cvar_MaxChecks))
  124. {
  125. KickClient(i, "A Te Pinged tul magas ezert kickelve lettel. (%d) Megengedett: (%d)",
  126. g_Ping[i], GetConVarInt(g_Cvar_MaxPing));
  127. }
  128. }
  129. }
  130.  
  131. bool:IsAdmin(client)
  132. {
  133. if(GetConVarInt(g_Cvar_AdminsImmune) == 0)
  134. return false;
  135.  
  136. new AdminId:admin = GetUserAdmin(client);
  137.  
  138. if(admin == INVALID_ADMIN_ID)
  139. return false;
  140.  
  141. return true;
  142. }