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.
|
Guest Message by DevFuse
Wklejka 1so0d7uo7lsxi dodana przez Kawon, 18.10.2013 19:11
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)