Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.98 KB | None | 0 0
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <amxmisc>
  5.  
  6. #define PLUGIN "blacklist"
  7. #define VERSION "1.0"
  8. #define AUTHOR "rk"
  9.  
  10. #define PREFIX "AMXX"
  11. #define DEF_TIME 60
  12. #define REMOVE_TASK 89794
  13.  
  14. #define MINUTE 1
  15. #define HOUR 60
  16. #define DAY 1440
  17. #define MONTH 43200
  18. #define YEAR 518400
  19.  
  20. new const szFile[] = "addons/amxmodx/data/blacklist.txt";
  21.  
  22. enum _: EInfo
  23. {
  24. szSID[32],
  25. szLastName[32],
  26. szLastOnline[32],
  27.  
  28. g_iBanTime
  29. }
  30.  
  31. new g_iTime[33], g_iLooking[33];
  32. new Array: g_iArray;
  33.  
  34. public plugin_init()
  35. {
  36. register_plugin(PLUGIN, VERSION, AUTHOR)
  37. register_clcmd("say /blacklist", "cmdBlackList");
  38. register_clcmd("choose_time", "cmdChooseTime");
  39.  
  40. g_iArray = ArrayCreate(EInfo);
  41.  
  42. cmdLoad();
  43.  
  44. new minimal = getMinimal();
  45.  
  46. if(minimal!=-1)
  47. {
  48. new szTemp[EInfo], szP[3];
  49.  
  50. szP[0] = minimal;
  51. ArrayGetArray(g_iArray, minimal, szTemp);
  52.  
  53. set_task(float(szTemp[g_iBanTime] - get_systime()), "cmdRemoveMinimal",REMOVE_TASK, szP, charsmax(szP));
  54. }
  55. }
  56.  
  57. public plugin_end()
  58. {
  59. cmdSave();
  60.  
  61. ArrayDestroy(g_iArray);
  62. }
  63.  
  64. public plugin_natives()
  65. {
  66. register_native("isBanned", "native_isBanned");
  67. }
  68.  
  69. public native_isBanned(params)
  70. {
  71. if(params < 1)
  72. {
  73. return PLUGIN_CONTINUE;
  74. }
  75.  
  76. new id = get_param(1);
  77.  
  78. if(isExists(getSID(id)))
  79. return 1;
  80.  
  81. return 0;
  82. }
  83.  
  84. public client_disconnect(id)
  85. {
  86. new k = isExists(getSID(id));
  87.  
  88. if(k != -1)
  89. {
  90. new szTemp[EInfo];
  91. ArrayGetArray(g_iArray, k, szTemp);
  92.  
  93. formatex(szTemp, charsmax(szTemp), "%s", getName(id));
  94. }
  95.  
  96. }
  97.  
  98. public cmdRemoveMinimal(szParm[])
  99. {
  100. new key = szParm[0], szTemp[EInfo];
  101.  
  102. ArrayGetArray(g_iArray, key, szTemp);
  103.  
  104. new k = isOnline(szTemp[szSID]);
  105.  
  106. if(k==-1)
  107. client_print(0, print_chat, "%s's ban is over", szTemp[szLastName]);
  108. else
  109. client_print(0, print_chat, "%s's ban is over", getName(k));
  110.  
  111. ArrayDeleteItem(g_iArray, key);
  112.  
  113.  
  114. new minimal = getMinimal();
  115. if(minimal!=-1)
  116. {
  117. new szTemp1[EInfo], szP[3];
  118.  
  119. szP[0] = minimal;
  120. ArrayGetArray(g_iArray, minimal, szTemp1);
  121.  
  122. set_task(float(szTemp1[g_iBanTime] - get_systime()), "cmdRemoveMinimal",REMOVE_TASK, szP, charsmax(szP));
  123. }
  124. }
  125.  
  126. public cmdChooseTime(id)
  127. {
  128. static szMessage[32];
  129. read_argv(1, szMessage, charsmax(szMessage));
  130.  
  131. g_iTime[id] = str_to_num(szMessage);
  132.  
  133. cmdAddInfo(id, g_iLooking[id]);
  134.  
  135. return PLUGIN_HANDLED;
  136. }
  137.  
  138. public cmdBlackList(id)
  139. {
  140.  
  141. if( !(get_user_flags(id) & ADMIN_BAN))
  142. {
  143. client_print(id, print_chat, "you have no access to this menu");
  144. return PLUGIN_HANDLED;
  145. }
  146.  
  147. g_iLooking[id] = -1;
  148.  
  149. new szText[256];
  150. formatex(szText, charsmax(szText), "\r[%s]\w Black List - main menu", PREFIX);
  151.  
  152. new menu = menu_create(szText, "cmdBlackListHandler");
  153.  
  154. menu_additem(menu, "\wAdd a person");
  155.  
  156. formatex(szText, charsmax(szText), "\wRemove a person \y[%i]", ArraySize(g_iArray));
  157. menu_additem(menu, szText);
  158.  
  159. menu_display(id, menu);
  160.  
  161. return PLUGIN_HANDLED;
  162. }
  163.  
  164. public cmdBlackListHandler(id, menu, item)
  165. {
  166. menu_destroy(menu);
  167.  
  168. if(item == MENU_EXIT)
  169. {
  170. return PLUGIN_HANDLED;
  171. }
  172.  
  173. switch(item)
  174. {
  175. case 0: cmdAdd(id);
  176. case 1:
  177. {
  178. cmdRemove(id);
  179. }
  180. }
  181.  
  182. return PLUGIN_HANDLED;
  183. }
  184.  
  185. public cmdAdd(id)
  186. {
  187. g_iLooking[id] = -1;
  188.  
  189. new szText[256], players[32], len, szParm[3];
  190. formatex(szText, charsmax(szText), "\r[%s]\w Black List - add menu", PREFIX);
  191.  
  192. new menu = menu_create(szText, "cmdAddHandler");
  193.  
  194. getPlayersID(players, len);
  195.  
  196. if(!len)
  197. {
  198. cmdBlackList(id);
  199. return PLUGIN_HANDLED;
  200. }
  201.  
  202. for(new i=0; i<sizeof(players); i++)
  203. {
  204. if(!is_user_connected(players[i]))
  205. continue;
  206.  
  207. num_to_str(players[i], szParm, charsmax(szParm));
  208.  
  209. formatex(szText, charsmax(szText), "%s", getName(players[i]));
  210. menu_additem(menu, szText, szParm);
  211. }
  212.  
  213. menu_display(id, menu);
  214.  
  215. return PLUGIN_HANDLED;
  216. }
  217.  
  218. public cmdAddHandler(id, menu, item)
  219. {
  220. if(item == MENU_EXIT)
  221. {
  222. menu_destroy(menu);
  223.  
  224. cmdBlackList(id);
  225. return PLUGIN_HANDLED;
  226. }
  227.  
  228. new key = MenuKey(menu, item);
  229. g_iTime[id] = DEF_TIME;
  230.  
  231. if(isExists(getSID(id)) == -1)
  232. cmdAddInfo(id, key);
  233. else
  234. client_print(id, print_chat, "this player is already banned.");
  235.  
  236. return PLUGIN_HANDLED;
  237. }
  238.  
  239. public cmdAddInfo(id, player)
  240. {
  241. g_iLooking[id] = player;
  242.  
  243. new szText[256], szParm[3];
  244. formatex(szText, charsmax(szText), "\r[%s]\w Black List - adding %s", PREFIX, getName(player));
  245.  
  246. new menu = menu_create(szText, "cmdAddInfoHandler");
  247. new cb = menu_makecallback("disabled");
  248.  
  249. formatex(szText, charsmax(szText), "\wName: %s", getName(player));
  250. menu_additem(menu, szText, .callback = cb);
  251.  
  252. formatex(szText, charsmax(szText), "\wTime: %s", GenerateTime(g_iTime[id]));
  253. menu_additem(menu, szText);
  254.  
  255. num_to_str(player, szParm, charsmax(szParm));
  256.  
  257. menu_additem(menu, "\rAdd!", szParm);
  258.  
  259. menu_display(id, menu);
  260. return PLUGIN_HANDLED;
  261. }
  262.  
  263. public cmdAddInfoHandler(id, menu, item)
  264. {
  265. if(item == MENU_EXIT)
  266. {
  267. g_iTime[id] = DEF_TIME;
  268. g_iLooking[id] = -1;
  269.  
  270. cmdAdd(id);
  271. return PLUGIN_HANDLED;
  272. }
  273.  
  274. switch(item)
  275. {
  276. case 1:
  277. {
  278.  
  279. client_cmd(id, "messagemode choose_time");
  280. }
  281.  
  282. case 2:
  283. {
  284. new key = MenuKey(menu, 2);
  285. cmdFinalAdd(id, key, g_iTime[id]);
  286. }
  287. }
  288.  
  289.  
  290. menu_destroy(menu);
  291. return PLUGIN_HANDLED;
  292. }
  293.  
  294. public cmdRemove(id)
  295. {
  296. new szText[256];
  297.  
  298. new size = ArraySize(g_iArray);
  299.  
  300. if(size == 0)
  301. {
  302. cmdBlackList(id);
  303. return PLUGIN_HANDLED;
  304. }
  305.  
  306.  
  307. formatex(szText, charsmax(szText), "\r[%s]\w Black List - remove menu (%i total bans)", PREFIX, size);
  308. new menu = menu_create(szText, "cmdRemoveHandler");
  309.  
  310. for(new i=0; i<size; i++)
  311. {
  312. new szTemp[EInfo];
  313. ArrayGetArray(g_iArray, i, szTemp);
  314.  
  315. formatex(szText, charsmax(szText), "%s", szTemp[szLastName]);
  316.  
  317. new k = isOnline(szTemp[szSID]);
  318.  
  319. if(k != -1)
  320. formatex(szText, charsmax(szText), "%s", getName(k));
  321.  
  322. menu_additem(menu, szText);
  323. }
  324.  
  325. menu_display(id, menu, 0);
  326.  
  327. return PLUGIN_HANDLED;
  328. }
  329.  
  330. public cmdRemoveHandler(id, menu, item)
  331. {
  332. if(item == MENU_EXIT)
  333. {
  334. cmdBlackList(id);
  335. return PLUGIN_HANDLED;
  336. }
  337.  
  338. cmdRemoveInfo(id, item);
  339.  
  340. return PLUGIN_HANDLED;
  341. }
  342.  
  343. public cmdRemoveInfo(id, player)
  344. {
  345. new szTemp[EInfo];
  346. ArrayGetArray(g_iArray, player, szTemp);
  347.  
  348. new szText[256], Name[32], szParm[3];
  349. new k = isOnline(szTemp[szSID]);
  350.  
  351. formatex(Name, charsmax(Name), "%s", szTemp[szLastName]);
  352.  
  353. if(k != -1)
  354. formatex(Name, charsmax(Name), "%s", getName(k));
  355.  
  356. formatex(szText, charsmax(szText), "\r[%s]\w Black List - info %s", PREFIX, Name);
  357.  
  358. new menu = menu_create(szText, "cmdRemoveInfoHandler");
  359. new cb = menu_makecallback("disabled");
  360.  
  361. formatex(szText, charsmax(szText), "\wName: %s", Name);
  362. menu_additem(menu, szText, .callback = cb);
  363.  
  364. if(k == -1)
  365. formatex(szText, charsmax(szText), "\wLast Online: %s", szTemp[szLastOnline]);
  366. else
  367. formatex(szText, charsmax(szText), "\wLast Online: \yONLINE");
  368.  
  369. menu_additem(menu, szText, .callback = cb);
  370.  
  371. new temp = (szTemp[g_iBanTime] - get_systime()) / 60;
  372.  
  373. if(!temp)
  374. temp = 1;
  375.  
  376. formatex(szText, charsmax(szText), "\wExpired Time: %s^n", GenerateTime(temp));
  377. menu_additem(menu, szText, .callback = cb);
  378.  
  379. num_to_str(player, szParm, charsmax(szParm));
  380.  
  381. menu_additem(menu, "\rRemove!", szParm);
  382.  
  383. menu_display(id, menu);
  384. return PLUGIN_HANDLED;
  385. }
  386.  
  387. public cmdRemoveInfoHandler(id, menu, item)
  388. {
  389. if(item == MENU_EXIT)
  390. {
  391. cmdRemove(id);
  392. return PLUGIN_HANDLED;
  393. }
  394.  
  395. if(item == 3)
  396. {
  397. new key = MenuKey(menu, 2);
  398. cmdFinalRemove(id, key, );
  399. }
  400.  
  401. return PLUGIN_HANDLED;
  402. }
  403.  
  404. public cmdFinalAdd(id, player, Time)
  405. {
  406. if(isExists(getSID(player)) != -1)
  407. {
  408. client_print(id, print_chat, "this player is already banned.");
  409. return PLUGIN_HANDLED;
  410. }
  411.  
  412. new szTemp[EInfo];
  413.  
  414. formatex(szTemp[szLastName], 31, "%s", getName(player));
  415. formatex(szTemp[szSID], 31, "%s", getSID(player));
  416. get_time("%m/%d/%Y-%H:%M:%S", szTemp[szLastOnline], charsmax(szTemp[szLastOnline]));
  417.  
  418. szTemp[g_iBanTime] = Time*60 + get_systime();
  419.  
  420. ArrayPushArray(g_iArray, szTemp);
  421.  
  422. client_print(0, print_chat, "%s added %s to blacklist (time: %i)", getName(id), getName(player), Time);
  423.  
  424. remove_task(REMOVE_TASK);
  425.  
  426. new minimal = getMinimal();
  427.  
  428. if(minimal != -1)
  429. {
  430. new szTemp1[EInfo], szP[3];
  431.  
  432. szP[0] = minimal;
  433. ArrayGetArray(g_iArray, minimal, szTemp1);
  434.  
  435. set_task(float(szTemp1[g_iBanTime] - get_systime()), "cmdRemoveMinimal",REMOVE_TASK, szP, charsmax(szP));
  436. }
  437.  
  438.  
  439. g_iTime[id] = DEF_TIME;
  440. g_iLooking[id] = -1;
  441.  
  442. cmdBlackList(id);
  443.  
  444. return PLUGIN_HANDLED;
  445. }
  446.  
  447. public cmdFinalRemove(id, key, S[])
  448. {
  449. if(isExists(szTemp[szSID]) == -1)
  450. {
  451. client_print(id, print_chat, "this player is no longer banned.");
  452. return PLUGIN_HANDLED;
  453. }
  454.  
  455. new szTemp[EInfo];
  456. ArrayGetArray(g_iArray, key, szTemp);
  457.  
  458.  
  459. new k = isOnline(szTemp[szSID]);
  460.  
  461. if(k==-1)
  462. client_print(0, print_chat, "%s removed %s's ban", getName(id), szTemp[szLastName]);
  463. else
  464. client_print(0, print_chat, "%s removed %s's ban", getName(id), getName(k));
  465.  
  466. ArrayDeleteItem(g_iArray, key);
  467.  
  468. cmdBlackList(id);
  469.  
  470. return PLUGIN_HANDLED;
  471. }
  472.  
  473.  
  474. public disabled(id, menu, item)
  475. {
  476. return ITEM_DISABLED;
  477. }
  478.  
  479. public getPlayersID(players[], &l)
  480. {
  481. new p[32], num= 0, temp = 0;
  482. get_players(p, num);
  483.  
  484. for(new i=0; i<num; i++)
  485. {
  486. if(isExists(getSID(p[i])) == -1 && is_user_connected(p[i]))
  487. {
  488. players[temp++] = p[i];
  489. }
  490. }
  491.  
  492. l = temp
  493. }
  494.  
  495. public GenerateTime(t)
  496. {
  497. new szText[256], szTemp[100];
  498.  
  499. new year, month, day, hour, minute;
  500.  
  501. year = t/YEAR;
  502. t-=year*YEAR;
  503.  
  504. month = t/MONTH;
  505. t-=month*MONTH;
  506.  
  507. day = t/DAY;
  508. t-=day*DAY;
  509.  
  510. hour = t/HOUR;
  511. t-=hour*HOUR;
  512.  
  513. minute = t/MINUTE;
  514.  
  515. if(year)
  516. {
  517. formatex(szTemp, charsmax(szTemp), "%i Year%s", year, year>1? "s" : "");
  518. format(szText, charsmax(szText), "%s %s ", szText, szTemp);
  519. }
  520.  
  521. if(month)
  522. {
  523. formatex(szTemp, charsmax(szTemp), "%i Month%s", month, month>1? "s" : "");
  524. format(szText, charsmax(szText), "%s %s ", szText, szTemp);
  525. }
  526.  
  527. if(day)
  528. {
  529. formatex(szTemp, charsmax(szTemp), "%i Day%s", day, day>1? "s" : "");
  530. format(szText, charsmax(szText), "%s %s ", szText, szTemp);
  531. }
  532.  
  533. if(hour)
  534. {
  535. formatex(szTemp, charsmax(szTemp), "%i Hour%s", hour, hour>1? "s" : "");
  536. format(szText, charsmax(szText), "%s %s ", szText, szTemp);
  537. }
  538.  
  539. if(minute)
  540. {
  541. formatex(szTemp, charsmax(szTemp), "%i Minute%s", minute, minute>1? "s" : "");
  542. format(szText, charsmax(szText), "%s %s", szText, szTemp);
  543. }
  544.  
  545. return szText;
  546. }
  547.  
  548. public cmdLoad()
  549. {
  550. new f = fopen(szFile, "rt");
  551.  
  552. new szData[500];
  553.  
  554. while(fgets(f, szData, charsmax(szData)))
  555. {
  556. new szTemp[EInfo], steam[32], name[32], online[32], t[32];
  557.  
  558. parse(szData, steam, 31, name, 31, online,31, t,31);
  559.  
  560. formatex(szTemp[szSID], 31, "%s", steam);
  561. formatex(szTemp[szLastName], 31, "%s", name);
  562. formatex(szTemp[szLastOnline], 31, "%s", online);
  563.  
  564. szTemp[g_iBanTime] = str_to_num(t);
  565.  
  566. ArrayPushArray(g_iArray, szTemp);
  567. }
  568.  
  569. fclose(f);
  570. }
  571.  
  572. public cmdSave()
  573. {
  574. new f = fopen(szFile, "wt");
  575.  
  576. new szData[500];
  577.  
  578. while(ArraySize(g_iArray) > 0)
  579. {
  580. new szTemp[EInfo];
  581. ArrayGetArray(g_iArray, 0 , szTemp);
  582.  
  583. formatex(szData, charsmax(szData), "^"%s^" ^"%s^" ^"%s^" ^"%i^"", szTemp[szSID], szTemp[szLastName], szTemp[szLastOnline], szTemp[g_iBanTime]);
  584.  
  585. fputs(f, szData);
  586.  
  587. ArrayDeleteItem(g_iArray, 0);
  588. }
  589.  
  590. fclose(f);
  591. }
  592.  
  593. public getMinimal()
  594. {
  595. new minimalTime = -1, minimalKey = -1, size = ArraySize(g_iArray);
  596.  
  597. for(new i=0; i<size; i++)
  598. {
  599. new szTemp[EInfo];
  600.  
  601. ArrayGetArray(g_iArray, i, szTemp);
  602.  
  603. if(minimalTime == -1 || szTemp[g_iBanTime] < minimalTime)
  604. {
  605. minimalTime = szTemp[g_iBanTime];
  606. minimalKey = i;
  607. }
  608. }
  609.  
  610. return minimalKey;
  611. }
  612.  
  613. stock MenuKey(menu, item)
  614. {
  615. new szData[10];
  616. new access, callback;
  617.  
  618. menu_item_getinfo(menu, item, access, szData, charsmax(szData), _, _, callback);
  619.  
  620. return str_to_num(szData);
  621. }
  622.  
  623.  
  624. stock isExists(SID[])
  625. {
  626. new size = ArraySize(g_iArray);
  627.  
  628. for(new i=0; i<size; i++)
  629. {
  630. new szTemp[EInfo];
  631.  
  632. ArrayGetArray(g_iArray, i, szTemp);
  633.  
  634. if(equali(szTemp[szSID], SID))
  635. return i;
  636. }
  637.  
  638. return -1;
  639. }
  640.  
  641. stock isOnline(SID[])
  642. {
  643. new players[32], num;
  644. get_players(players, num);
  645.  
  646. for(new i=0; i<num; i++)
  647. {
  648. if(equali(getSID(players[i]), SID))
  649. return players[i];
  650. }
  651.  
  652. return -1;
  653. }
  654.  
  655. stock getName(id)
  656. {
  657. new szName[32];
  658. get_user_name(id, szName, charsmax(szName));
  659.  
  660. return szName;
  661. }
  662.  
  663. stock getSID(id)
  664. {
  665. new szS[32];
  666. get_user_authid(id, szS, charsmax(szS));
  667.  
  668. return szS;
  669. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement