1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.  | /* AMX Mod script
* 
* (c) 2002-2003, DynAstY translated by Adrix, upgraded by Hleb
* This file is provided as is (no warranties).
*  Opis i instalacja na www.cs.bitmar.net 
* Players with immunity won't be checked
*/
 
#include <amxmodx>
 
new HIGHPING_MAX 
new HIGHPING_TIME  
new HIGHPING_TESTS
new HIGHPING_ADMIN
new HIGHPING_PUNISH
 
new iNumTests[33]
 
public plugin_init() {
	register_plugin("High Ping Kicker PL","2.0","Hleb")
	register_cvar("amx_hpk_max", "120")
	register_cvar("amx_hpk_time", "10")
	register_cvar("amx_hpk_tests", "3")
	register_cvar("amx_hpk_admin", "1")
	register_cvar("amx_hpk_punish", "0")
	HIGHPING_MAX = get_cvar_num("amx_hpk_max") // Maksymalny dopuszczalny ping u gracza.
	HIGHPING_TIME = get_cvar_num("amx_hpk_time") // Czas po którym osoba z wysokim pingiem jest wyrzucana.
	HIGHPING_TESTS = get_cvar_num("amx_hpk_tests") // Ilosc sprawdzen zanim cos zrobi.
	HIGHPING_ADMIN = get_cvar_num("amx_hpk_admin") // Czy sprawdzenie pingu dotyczy tez adminow z flagami ADMIN_IMMUNITY czy ADMIN_RESERVATION.
	HIGHPING_PUNISH = get_cvar_num("amx_hpk_punish") // Rodzaj kary za wysoki ping. 0 - kick, 1 - ban 1 min, 2 - ban 5 min.
	if (HIGHPING_TIME > 15) HIGHPING_TIME = 15
	if (HIGHPING_TESTS > 4) HIGHPING_TESTS = 4
	if (HIGHPING_MAX > 200) HIGHPING_MAX = 200
	return PLUGIN_CONTINUE
}
 
public client_disconnect(id) {
	remove_task(id)
	return PLUGIN_CONTINUE
}
 
public client_putinserver(id) {
	iNumTests[id] = 0
	if (!is_user_bot(id)) {
		new param[1]
		param[0] = id
		set_task(30.0, "showWarn", id, param, 1)
	}
	return PLUGIN_CONTINUE
}
 
punishPlayer(id) {
	new name[32]
	get_user_name(id, name, 31)
	new uID = get_user_userid(id)
	new IP[33]
	get_user_ip(id, IP, 32)
	if (HIGHPING_PUNISH == 0)
	{
	server_cmd("kick #%d", uID)
	client_cmd(id, "echo ^"[HPK] Przykro mi, masz zbyt wysoki ping. Sprobuj pozniej...^"; disconnect")
	client_print(0, print_chat, "[HPK] %s zostal rozlaczony za wysoki ping!", name)
	}
	if (HIGHPING_PUNISH == 1)
	{
	server_cmd("banid 1 #%d", IP)
	client_cmd(id, "echo ^"[HPK] Przykro mi, masz zbyt wysoki ping. Sprobuj pozniej...^"; disconnect")
	client_print(0, print_chat, "[HPK] %s zostal zbanowany na 1 minute za wysoki ping!", name)
	}
	if (HIGHPING_PUNISH == 2)
	{
	server_cmd("banid 5 #%d", IP)
	client_cmd(id, "echo ^"[HPK] Przykro mi, masz zbyt wysoki ping. Sprobuj pozniej...^"; disconnect")
	client_print(0, print_chat, "[HPK] %s zostal zbanowany na 5 minut za wysoki ping!", name)
	}
	return PLUGIN_CONTINUE
} 
 
public checkPing(param[]) {
	new id = param[0]
	if (HIGHPING_ADMIN == 1)
	{
		if ((get_user_flags(id) & ADMIN_IMMUNITY) || (get_user_flags(id) & ADMIN_RESERVATION)) 
		{
			remove_task(id)
			client_print(id, print_chat, "[HPK] Sprawdzanie pingu wylaczone, poniewaz masz immunitet...")
			return PLUGIN_CONTINUE
		}
	}
	else
	{
		new p, l
		get_user_ping(id, p, l)
		if (p > HIGHPING_MAX)
			++iNumTests[id]
		else
			if (iNumTests[id] > 0) --iNumTests[id]
		if (iNumTests[id] > HIGHPING_TESTS)
			punishPlayer(id)
	}
	return PLUGIN_CONTINUE
}
 
public showWarn(param[]) {
	client_print(param[0], print_chat, "[HPK] Gracz z pingiem wyzszym niz %dms zostanie wyrzucony!!!", HIGHPING_MAX)
	set_task(float(HIGHPING_TIME), "checkPing", param[0], param, 1, "b")
	return PLUGIN_CONTINUE
} |