Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Wklejka 1so0d7uo7lsxi dodana przez Kawon, 18.10.2013 19:11
Typ:



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.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <hamsandwich>
 
#define PLUGIN "Neo Ban"
#define VERSION "1.0"
#define AUTHOR "Tequila aka Zabijaka"
#define NAME_LEN 64
#define INFO_LEN 6
#define INFO_NAME_LEN 16
#define TASK_CHECK_BAN 100
#define TASK_WRITE_BAN 200
#define IsPlayer(%1) (1<= %1 <= g_iMaxPlayers)
 
 
new gCvarAction;
new gCvarActionConnect;
new gCvarInfo;
new gCvarUrl;
new gCvarReason1;
new gCvarReason2;
 
new gVault;
new const NEXT_BAN_ID[] ="NEXT_BAN_ID";
new Array:gConfigs;
new gMaxConfigs;
new infoName[INFO_NAME_LEN];
new nextBanId = 1;
new gUrl[128];
 
new gPowodyBanow[7][64];
new gPowodyCzasyBanow[7];
new gCzasyBanow[7];
new gIloscPowodow;
new gIloscCzasow;
 
new zbanowany[33];
new banMenuGracz[33];
new banMenuCzas[33];
new banMenuPowod[33][64];
 
new g_iMaxPlayers;
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	g_iMaxPlayers = get_maxplayers();
 
	gCvarInfo =  register_cvar("amx_neoban_info", "cs_num");
	gCvarAction  = register_cvar("amx_neoban_action", "1");
	gCvarActionConnect  = register_cvar("amx_neoban_action_connect", "1");
	gCvarUrl =  register_cvar("amx_neoban_url", "www.");
	RegisterHam(Ham_TakeDamage, "player", "fwd_Ham_TakeDamage");
 
	gVault = nvault_open("NeoBans");
	new banId[16];
	new timestamp;
	if(nvault_lookup(gVault, NEXT_BAN_ID, banId, charsmax(banId), timestamp)){
		nextBanId = str_to_num(banId);
	}
	gConfigs = ArrayCreate(32);
	new cfgDir[128];
	new neoBansConfigFile[128];
	get_configsdir(cfgDir, charsmax(cfgDir));
 
	format(neoBansConfigFile, charsmax(neoBansConfigFile), "%sneobansneo_bans_configs.ini", cfgDir);
	get_configs(neoBansConfigFile);
 
	format(neoBansConfigFile, charsmax(neoBansConfigFile), "%sneobansneo_bans_powody.ini", cfgDir);
	get_powody(neoBansConfigFile);
 
	format(neoBansConfigFile, charsmax(neoBansConfigFile), "%sneobansneo_bans_czasy.ini", cfgDir);
	get_czasy(neoBansConfigFile);
 
	format(neoBansConfigFile, charsmax(neoBansConfigFile), "%sneobansneo_bans.cfg", cfgDir);
	server_cmd("exec %s", neoBansConfigFile);
 
	register_clcmd("amx_neobanmenu", "banNeoMenu", ADMIN_BAN);
	register_clcmd("amx_neoban_powod", "banNeoPowod", ADMIN_BAN);
	register_clcmd("amx_neounbanmenu", "unbanNeoMenu", ADMIN_BAN);
	register_srvcmd("amx_neoban", "banNeoServer");
}
public banNeoServer(){
 
 
}
 
public TakeDamage(id, idinflictor, idattacker, Float:damage, damagebits){
	if(get_pcvar_num(gCvarAction) == 5){
		if(IsPlayer(idattacker)){
			if(zbanowany[idattacker]){
				SetHamParamFloat(4, 0.0);
			}
		}
	}
	return HAM_IGNORED;
}
 
public plugin_cfg() {
 
	get_pcvar_string(gCvarInfo, infoName, INFO_NAME_LEN -1);
	get_pcvar_string(gCvarUrl, gUrl, charsmax(gUrl));
}
 
stock get_powody(const cfgFile[]){
	if(file_exists(cfgFile)){
		new data[32]
		new f = fopen(cfgFile, "rt")
 
		new czas[10];
		new powod[64];
 
		while( !feof(f) && gIloscPowodow<7 ) {
			fgets(f, data, sizeof(data) - 1);
			trim(data);
			if( !data[0] || data[0] == ';' || (data[0] == '/' && data[1] == '/' )) 
				continue;
			split(data, czas, charsmax(czas), powod, charsmax(powod), " ");
			if(is_str_num(czas)){
				gPowodyCzasyBanow[gIloscPowodow] = str_to_num(czas);
				copy(gPowodyBanow[gIloscPowodow], NAME_LEN-1, powod);
				gIloscPowodow++;
			}
		}
		fclose(f) ;
	}
	if(gIloscPowodow==0) {
 
		gPowodyCzasyBanow[gIloscPowodow] = 0;
		copy(gPowodyBanow[gIloscPowodow], NAME_LEN-1, "Czitujesz");
		gIloscPowodow++;
 
		gPowodyCzasyBanow[gIloscPowodow] = 10;
		copy(gPowodyBanow[gIloscPowodow],  NAME_LEN-1, "Lagujesz. Ogarnij Ping.");
		gIloscPowodow++;
 
		gPowodyCzasyBanow[gIloscPowodow] = 30;
		copy(gPowodyBanow[gIloscPowodow],  NAME_LEN-1, "Cele Mapy!");
		gIloscPowodow++;
 
		gPowodyCzasyBanow[gIloscPowodow] = 60;
		copy(gPowodyBanow[gIloscPowodow],  NAME_LEN-1, "Kultura!");
		gIloscPowodow++;
 
		gPowodyCzasyBanow[gIloscPowodow] = 60;
		copy(gPowodyBanow[gIloscPowodow], NAME_LEN-1, "Utrudniasz gre innym!");
		gIloscPowodow++;
 
		gPowodyCzasyBanow[gIloscPowodow] = -2;
		copy(gPowodyBanow[gIloscPowodow],  NAME_LEN-1, "Wlasny powod");
		gIloscPowodow++;
	}
}
 
stock get_czasy(const cfgFile[]){
	if(file_exists(cfgFile)){
		new data[32]
		new f = fopen(cfgFile, "rt")
 
		while( !feof(f) && gIloscCzasow<7 ) {
			fgets(f, data, sizeof(data) - 1);
			trim(data);
			if( !data[0] || data[0] == ';' || (data[0] == '/' && data[1] == '/' )) 
				continue;
			if(is_str_num(data)){
				gCzasyBanow[gIloscCzasow] = str_to_num(data);
				if(gCzasyBanow[gIloscCzasow]  >=0){
					gIloscCzasow++;
				}
			}
		}
		fclose(f) ;
	}
	if(gIloscCzasow==0) {
 
		gCzasyBanow[gIloscCzasow] = 0; //perm
		gIloscCzasow++;
 
		gCzasyBanow[gIloscCzasow] = 10; //10 minut
		gIloscCzasow++;
 
		gCzasyBanow[gIloscCzasow] = 30; //30 minut
		gIloscCzasow++;
 
		gCzasyBanow[gIloscCzasow] = 60; // 1 godzina
		gIloscCzasow++;
 
		gCzasyBanow[gIloscCzasow] = 60 * 24; //1 dzien
		gIloscCzasow++;
 
		gCzasyBanow[gIloscCzasow] = 60 * 24 * 7; // 1 tydzien
		gIloscCzasow++;
	}
}
 
stock get_configs(const cfgFile[]){
	if(file_exists(cfgFile)){
		new data[32]
		new f = fopen(cfgFile, "rt")
 
		while( !feof(f) ) {
			fgets(f, data, sizeof(data) - 1);
			trim(data);
			if( !data[0] || data[0] == ';' || (data[0] == '/' && data[1] == '/' )) 
				continue;
			ArrayPushString(gConfigs, data);
			gMaxConfigs++;
		}
		fclose(f) ;
	}
	if(gMaxConfigs==0){
		ArrayPushString(gConfigs,"mapsde_mp");
		ArrayPushString(gConfigs,"mapsusercfg");
		ArrayPushString(gConfigs,"usercfg");
		ArrayPushString(gConfigs,"config_bak");
		ArrayPushString(gConfigs,"saveconfig_bak");
		ArrayPushString(gConfigs,"hl");
		ArrayPushString(gConfigs,"cs");
		gMaxConfigs = 7;
	}
}
 
public client_putinserver(id){
	if(is_user_connected(id) && !is_user_bot(id) && !is_user_hltv(id)){
		new taskInfo[3];
		taskInfo[0] = id;
		taskInfo[1] = 0;
		set_task(0.01,"read_ban_cfg", id+ TASK_CHECK_BAN, taskInfo, 3);
	}
	zbanowany[id] = 0;
	banMenuCzas[id] = 0;
	banMenuGracz[id] = 0;
	banMenuPowod[id][0] = 0;
}
public client_disconnect(id){
	zbanowany[id] = 0;
}
 
public read_ban_cfg(taskInfo[]){
	new id = taskInfo[0];
 
	if(!is_user_connected(id))
		return;
	client_cmd(id, "clear");
	new banId = check_ban(id);
	if(banId > 0) {
		process_ban(id, banId, true);
	} else {
		if(taskInfo[1] < gMaxConfigs) {
			new cfg[32];
			ArrayGetString(gConfigs, taskInfo[1], cfg, charsmax(cfg));
			taskInfo[1] = taskInfo[1] + 1;
			client_cmd(id, "exec %s.cfg", cfg);
			set_task(0.01, "read_ban_cfg", id + TASK_CHECK_BAN, taskInfo, 3);
		} else {
			client_cmd(id, "exec config.cfg");
		}
	}
}
 
public check_ban(id) {
	if(!is_user_connected(id))
		return -1;
 
	new info[INFO_LEN]
	get_user_info(id, infoName, info, INFO_LEN -1);
	if(info[0] != 0 && is_str_num(info)) {
		new banTimeStr[64];
		new timestamp;
		if(nvault_lookup(gVault, info, banTimeStr, INFO_LEN -1, timestamp)){
			new czasInt = str_to_num(banTimeStr) * 60;
			if(czasInt == 0  || (timestamp + czasInt > get_systime())){
				return str_to_num(info);
			} else {
				unban_id(str_to_num(info));
			}
		}
	}
	return 0;
}
 
stock unban_id(banId){
	new info[32];
	num_to_str(banId, info, charsmax(info));
	nvault_remove(gVault, info); //czas bana
 
	new infoTmp[64];
	formatex(infoTmp, 63, "%s_a", info); //admin banujacy
	nvault_remove(gVault, infoTmp);
 
	infoTmp[0] =0;
	formatex(infoTmp, 63, "%s_r", info); // powod bana
	nvault_remove(gVault, infoTmp);
 
	infoTmp[0] =0;
	formatex(infoTmp, 63, "%s_n", info); // nick zbanowanego
	nvault_remove(gVault, infoTmp);
}
 
stock process_ban(id, banId, bool:onConnect){
	client_cmd(id, "setinfo ^"%s^" ^"%d^"",infoName, banId);
	zbanowany[id] = 1;
	new taskInfo[5];
	taskInfo[0] = id;
	taskInfo[1] = banId;
	taskInfo[2] =( onConnect ? 1 : 2);
	taskInfo[3] = 0;	
	set_task(0.01, "write_ban_cfg", id + TASK_WRITE_BAN, taskInfo, 5);
}
 
 
public delayed_kick(taskInfo[]){
	new id = taskInfo[0];	
 
	if(!is_user_connected(id))
		return;
	new action;
	if(taskInfo[2] == 1)
		action = get_pcvar_num(gCvarActionConnect);
	else
		action = get_pcvar_num(gCvarAction);
 
	switch(action) {
		case 1:{
			server_cmd("kick #%d %s",get_user_userid(id), "Masz bana. Sprawdz konsole.");
			//client_cmd(id, "disconnect");
		}
		case 2:{
			server_cmd("kick #%d",get_user_userid(id));
			//client_cmd(id, "disconnect");
		}
 
		case 3: {
			client_cmd(id, "exit");
		}
		case 5: {
			new reason[128];
			if(taskInfo[2] == 1)
				get_pcvar_string(gCvarReason1, reason, charsmax(reason));
			else
				get_pcvar_string(gCvarReason2, reason, charsmax(reason));
 
			server_cmd("kick #%d %s",get_user_userid(id), reason);
		}
 
	}
}
 
public print_info(taskInfo[]){
 
	new id = taskInfo[0];	
 
	if(!is_user_connected(id))
		return;
	new banId = taskInfo[1];
	new admin[32];
	new name[32];
	new powod[64];
	new czas[32];
	new czasInt;
	new info[64];
	new timestamp;
	new action;
	if(taskInfo[2] == 1)
		action = get_pcvar_num(gCvarActionConnect);
	else
		action = get_pcvar_num(gCvarAction);
	if (action == 1) {
		num_to_str(banId, info, charsmax(info));
		nvault_lookup(gVault, info, czas, charsmax(czas), timestamp); //czas bana
		czasInt = str_to_num(czas);
		getCzasStr(czasInt, czas, charsmax(czas));
 
		formatex(info, 63, "%d_a", banId); //admin banujacy
		nvault_get(gVault, info, admin, charsmax(admin));
 
		formatex(info, 63, "%d_n", banId)