eyal282

Untitled

Jan 26th, 2013
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.70 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3.  
  4. #define PLUGIN "Admins Manager"
  5. #define VERSION "1.3"
  6. #define AUTHOR "Alka"
  7.  
  8. #define STR_LEN 64
  9.  
  10. #define MENU_ACCESS_FLAG ADMIN_RCON
  11.  
  12. new gConfigsDir[STR_LEN];
  13. new gAdminsFile[STR_LEN];
  14.  
  15. new const gAdminFlags[][] = {
  16.  
  17. "a", "b", "c", "d",
  18. "e", "f", "g", "h",
  19. "i", "j", "k", "l",
  20. "m", "n", "o", "p",
  21. "q", "r", "s", "t",
  22. "u"
  23. };
  24. new const gAdminAccessFlags[][] = {
  25.  
  26. "a", "b", "c", "d", "e"
  27. };
  28. new const gAdminFlagsDetails[][] = {
  29.  
  30. "Immunity",
  31. "Reservation",
  32. "Kick",
  33. "Ban / Unban",
  34. "Slay / Slap",
  35. "Change Map",
  36. "Cvar change",
  37. "Cfg exec",
  38. "Chat messages",
  39. "Vote",
  40. "Server Password",
  41. "Rcon",
  42. "Custom A",
  43. "Custom B",
  44. "Custom C",
  45. "Custom D",
  46. "Custom E",
  47. "Custom F",
  48. "Custom G",
  49. "Custom H",
  50. "Amxx Menu"
  51. };
  52. new const gAdminAccessFlagsDetails[][] = {
  53.  
  54. "Disconnect on invalid password",
  55. "Clan tag",
  56. "For SteamId / WonId",
  57. "For Ip",
  58. "Password is not checked"
  59. };
  60. new gAdminTargetId[33];
  61. new gAdminTargetFlags[33][32];
  62. new gAdminTargetPassword[33][STR_LEN];
  63. new gAdminTargetAccessFlags[33][32];
  64. new gAdminTargetAccount[33][32];
  65. new gAdminTargetDetails[33][4][STR_LEN];
  66. new gAdminSaveMode[33];
  67. new bool:gAccessFromEditMenu[33];
  68.  
  69. public plugin_init() {
  70.  
  71. register_plugin(PLUGIN, VERSION, AUTHOR);
  72.  
  73. register_saycmd("adminsmanager", "cmdAdminsManage", -1, "");
  74.  
  75. register_concmd("amx_adminpassword", "cmdAdminPassword", MENU_ACCESS_FLAG, "<password> - Save / change this password for specified admin.");
  76. register_concmd("amx_adminaccount", "cmdAdminAccount", MENU_ACCESS_FLAG, "<name / ip / steam id> - Save / change this account info for specified admin.");
  77.  
  78. get_configsdir(gConfigsDir, sizeof gConfigsDir - 1);
  79. formatex(gAdminsFile, sizeof gAdminsFile - 1, "%s/users.ini", gConfigsDir);
  80.  
  81. if(!file_exists(gAdminsFile))
  82. set_fail_state("Non-existent file.");
  83. }
  84.  
  85. public cmdAdminsManage(id)
  86. {
  87. static iMenu, iCallBack;
  88. iMenu = menu_create("\yAdmins manager (\wMain Menu\y):", "MainMenuHandler");
  89. iCallBack = menu_makecallback("MainMenuCallBack");
  90.  
  91. menu_additem(iMenu, "\wAdd Admin", "1", 0, iCallBack);
  92. menu_additem(iMenu, "\wRemove Admin", "2", 0, iCallBack);
  93. menu_additem(iMenu, "\wEdit Admin", "3", 0, iCallBack);
  94.  
  95. menu_addblank(iMenu, 0);
  96. menu_display(id, iMenu, 0);
  97. }
  98.  
  99. public MainMenuCallBack(id, menu, item)
  100. return access(id, MENU_ACCESS_FLAG) ? ITEM_ENABLED : ITEM_DISABLED;
  101.  
  102. public MainMenuHandler(id, menu, item)
  103. {
  104. if(item == MENU_EXIT)
  105. return 1;
  106.  
  107. static iAccess, iCallback;
  108. static sData[6];
  109. menu_item_getinfo(menu, item, iAccess, sData, sizeof sData - 1, _, _, iCallback);
  110.  
  111. static iKey;
  112. iKey = str_to_num(sData);
  113.  
  114. switch(iKey)
  115. {
  116. case 1: { cmdAdminAdd(id); }
  117. case 2: { cmdAdminRemove(id); }
  118. case 3: { cmdAdminEdit(id); }
  119. }
  120. return 1;
  121. }
  122.  
  123. public cmdAdminAdd(id)
  124. {
  125. static iMenu;
  126. iMenu = menu_create("\yAdmins manager (\wAdd Admin\y):", "AddMenuHandler");
  127.  
  128. static sPlayers[32], iNum;
  129. get_players(sPlayers, iNum, "ch");
  130.  
  131. for(new i = 0 ; i < iNum ; i++)
  132. {
  133. static sName[32];
  134. get_user_name(sPlayers[i], sName, sizeof sName - 1);
  135.  
  136. menu_additem(iMenu, sName, "", 0, -1);
  137. }
  138. menu_addblank(iMenu, 0);
  139. menu_display(id, iMenu, 0);
  140. }
  141.  
  142. public AddMenuHandler(id, menu, item)
  143. {
  144. if(item == MENU_EXIT)
  145. {
  146. cmdAdminsManage(id);
  147. return 1;
  148. }
  149.  
  150. static iAccess, iCallback;
  151. static sBuffer[32];
  152. menu_item_getinfo(menu, item, iAccess, "", 0, sBuffer, sizeof sBuffer - 1, iCallback);
  153.  
  154. static iTarget;
  155. iTarget = get_user_index(sBuffer);
  156.  
  157. gAdminTargetId[id] = iTarget;
  158.  
  159. cmdAdminAddSubMenu(id);
  160. return 1;
  161. }
  162.  
  163. public cmdAdminAddSubMenu(id)
  164. {
  165. static sTemp[STR_LEN], sName[32];
  166. get_user_name(gAdminTargetId[id], sName, sizeof sName - 1);
  167.  
  168. formatex(sTemp, sizeof sTemp - 1, "\yAdmins manager (\wAdd Admin \r%s\y):", sName);
  169.  
  170. static iMenu;
  171. iMenu = menu_create(sTemp, "AddSubMenuHandler");
  172.  
  173. menu_additem(iMenu, "\wAdd / Remove flags", "1", 0, -1);
  174. menu_additem(iMenu, "\wReset flags", "2", 0, -1);
  175. menu_addblank(iMenu, 0);
  176.  
  177. static sBuffer[STR_LEN];
  178. switch(gAdminSaveMode[id])
  179. {
  180. case 0: { formatex(sBuffer, sizeof sBuffer - 1, "\wSave admin mode: \rIp"); }
  181. case 1: { formatex(sBuffer, sizeof sBuffer - 1, "\wSave admin mode: \rSteam Id"); }
  182. case 2: { formatex(sBuffer, sizeof sBuffer - 1, "\wSave admin mode: \rName + Password"); }
  183. }
  184.  
  185. menu_additem(iMenu, sBuffer, "3", 0, -1);
  186. menu_additem(iMenu, "\wSave admin", "4", 0, -1);
  187. menu_addblank(iMenu, 0);
  188.  
  189. menu_display(id, iMenu, 0);
  190. }
  191.  
  192. public AddSubMenuHandler(id, menu, item)
  193. {
  194. if(item == MENU_EXIT)
  195. {
  196. cmdAdminAdd(id);
  197. return 1;
  198. }
  199.  
  200. static iAccess, iCallback;
  201. static sData[6];
  202. menu_item_getinfo(menu, item, iAccess, sData, sizeof sData - 1, _, _, iCallback);
  203.  
  204. static iKey;
  205. iKey = str_to_num(sData);
  206.  
  207. switch(iKey)
  208. {
  209. case 1: { cmdAdminAddFlags(id); }
  210. case 2: { cmdAdminAddResetFlags(id); }
  211. case 3: { cmdAdminSaveMode(id); }
  212. case 4: { cmdAdminAddSave(id); }
  213. }
  214. return 1;
  215. }
  216.  
  217. public cmdAdminAddFlags(id)
  218. {
  219. static iMenu;
  220. iMenu = menu_create("\yAdmins manager (\wAdd Admin flags):", "AddFlagsMenuHandler");
  221.  
  222. static sTemp[128];
  223.  
  224. for(new i = 0 ; i < sizeof gAdminFlags ; i++)
  225. {
  226. formatex(sTemp, sizeof sTemp - 1, "%s - \y%s", gAdminFlags[i], gAdminFlagsDetails[i]);
  227. menu_additem(iMenu, sTemp, "", 0, -1);
  228. }
  229. menu_addblank(iMenu, 0);
  230. menu_display(id, iMenu, 0);
  231. }
  232.  
  233. public AddFlagsMenuHandler(id, menu, item)
  234. {
  235. if(item == MENU_EXIT)
  236. {
  237. if(gAccessFromEditMenu[id])
  238. {
  239. cmdAdminEditSubMenu(id);
  240. gAccessFromEditMenu[id] = false;
  241.  
  242. return 1;
  243. }
  244. else
  245. {
  246. cmdAdminAddSubMenu(id);
  247. return 1;
  248. }
  249. }
  250.  
  251. static iAccess, iCallback;
  252. static sTemp[32], sBuffer[10];
  253. menu_item_getinfo(menu, item, iAccess, "", 0, sTemp, sizeof sTemp - 1, iCallback);
  254.  
  255. strtok(sTemp, sBuffer, sizeof sBuffer - 1, sTemp, sizeof sTemp - 1, '-', 1);
  256.  
  257. if(containi(gAdminTargetFlags[id], sBuffer) != -1)
  258. replace(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, sBuffer, "");
  259. else
  260. format(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, "%s%s", gAdminTargetFlags[id], sBuffer);
  261.  
  262. set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
  263. show_hudmessage(id, "Add Admin flags : ^"%s^"", gAdminTargetFlags[id]);
  264.  
  265. menu_display(id, menu, 0);
  266. return 1;
  267. }
  268.  
  269. public cmdAdminAddResetFlags(id)
  270. {
  271. formatex(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, "");
  272.  
  273. set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
  274. show_hudmessage(id, "Add Admin flags : Flags reseted");
  275.  
  276. cmdAdminAddSubMenu(id);
  277. return 1;
  278. }
  279.  
  280. public cmdAdminSaveMode(id)
  281. {
  282. static iNum;
  283. iNum++;
  284.  
  285. if(iNum > 2)
  286. iNum = 0;
  287.  
  288. gAdminSaveMode[id] = iNum;
  289.  
  290. if(iNum == 2)
  291. {
  292. set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
  293. show_hudmessage(id, "Add Admin Password: Type on console the new admin password^ncommand: amx_adminpassword");
  294. }
  295. cmdAdminAddSubMenu(id);
  296. return 1;
  297. }
  298.  
  299. public cmdAdminAddSave(id)
  300. {
  301. static iFile;
  302. iFile = fopen(gAdminsFile, "at+");
  303.  
  304. if(!gAdminTargetFlags[id][0])
  305. {
  306. set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
  307. show_hudmessage(id, "You must select some flags before save^nthe admin.");
  308.  
  309. cmdAdminAddSubMenu(id);
  310. return 1;
  311. }
  312. static UserInfo[32];
  313.  
  314. switch(gAdminSaveMode[id])
  315. {
  316. case 0: { get_user_ip(gAdminTargetId[id], UserInfo, sizeof UserInfo - 1, 1); }
  317. case 1: { get_user_authid(gAdminTargetId[id], UserInfo, sizeof UserInfo - 1); }
  318. case 2:
  319. {
  320. if(!gAdminTargetPassword[id][0])
  321. {
  322. set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
  323. show_hudmessage(id, "Type on console the new admin password^ncommand: amx_adminpassword <password>");
  324.  
  325. cmdAdminAddSubMenu(id);
  326. return 1;
  327. }
  328. get_user_name(gAdminTargetId[id], UserInfo, sizeof UserInfo - 1);
  329. }
  330. }
  331.  
  332. static sTemp[128];
  333. new iLine;
  334.  
  335. while(!feof(iFile))
  336. {
  337. fgets(iFile, sTemp, sizeof sTemp - 1);
  338.  
  339. iLine++;
  340.  
  341. if((containi(sTemp, UserInfo) != -1) && sTemp[0] != ';')
  342. {
  343. client_print(id, print_chat, "Sorry but an admin account with this account info already exists!");
  344. return 1;
  345. }
  346. }
  347.  
  348. static sBuffer[128];
  349. switch(gAdminSaveMode[id])
  350. {
  351. case 0: { formatex(sBuffer, sizeof sBuffer - 1, "^n^"%s^" ^"^" ^"%s^" ^"de^"", UserInfo, gAdminTargetFlags[id]); }
  352. case 1: { formatex(sBuffer, sizeof sBuffer - 1, "^n^"%s^" ^"^" ^"%s^" ^"ce^"", UserInfo, gAdminTargetFlags[id]); }
  353. case 2: { formatex(sBuffer, sizeof sBuffer - 1, "^n^"%s^" ^"%s^" ^"%s^" ^"a^"", UserInfo, gAdminTargetPassword[id], gAdminTargetFlags[id]); }
  354. }
  355.  
  356. fprintf(iFile, sBuffer);
  357.  
  358. fclose(iFile);
  359. client_print(id, print_chat, "Successfuly added ^"%s^" to admins list on line %d!", UserInfo, iLine + 1);
  360. server_cmd("amx_reloadadmins");
  361.  
  362. formatex(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, "");
  363. formatex(gAdminTargetPassword[id], sizeof gAdminTargetPassword[] - 1, "");
  364. gAdminTargetId[id] = 0;
  365.  
  366. return 1;
  367. }
  368.  
  369. public cmdAdminPassword(id, level, cid)
  370. {
  371. if(!cmd_access(id, level, cid, 2))
  372. return 1;
  373.  
  374. static sArg[64];
  375. read_argv(1, sArg, sizeof sArg - 1);
  376.  
  377. if(!sArg[0])
  378. return 1;
  379.  
  380. formatex(gAdminTargetPassword[id], sizeof gAdminTargetPassword[] - 1, sArg);
  381.  
  382. console_print(id, "Successfuly saved password : ^"%s^" for specified admin!", gAdminTargetPassword[id]);
  383. return 1;
  384. }
  385.  
  386. public cmdAdminRemove(id)
  387. {
  388. static iMenu;
  389. iMenu = menu_create("\yAdmins manager (\wRemove Admin\y):", "RemoveMenuHandler");
  390.  
  391. static sBuffer[128], sTempItem[128];
  392. static sTemp[4][STR_LEN];
  393.  
  394. static iFileP;
  395. iFileP = fopen(gAdminsFile, "rt");
  396.  
  397. while(!feof(iFileP))
  398. {
  399. fgets(iFileP, sBuffer, sizeof sBuffer - 1);
  400.  
  401. if((strlen(sBuffer) < 3) || sBuffer[0] == ';')
  402. continue;
  403.  
  404. parse(sBuffer, sTemp[0], sizeof sTemp[] - 1, sTemp[1], sizeof sTemp[] - 1, sTemp[2], sizeof sTemp[] - 1, sTemp[3], sizeof sTemp[] - 1);
  405.  
  406. for(new j = 0 ; j < sizeof sTemp ; j++)
  407. {
  408. remove_quotes(sTemp[j]);
  409. }
  410.  
  411. formatex(sTempItem, sizeof sTempItem - 1, "\w%s\r|\w%s\r|\w%s\r|\w%s\r", sTemp[0], sTemp[1], sTemp[2], sTemp[3]);
  412.  
  413. menu_additem(iMenu, sTempItem, "", 0, -1);
  414. }
  415. fclose(iFileP);
  416.  
  417. menu_addblank(iMenu, 0);
  418. menu_display(id, iMenu, 0);
  419. }
  420.  
  421. public RemoveMenuHandler(id, menu, item)
  422. {
  423. if(item == MENU_EXIT)
  424. {
  425. cmdAdminsManage(id);
  426. return 1;
  427. }
  428.  
  429. static iAccess, iCallback;
  430. static sBuffer[128], sTemp[STR_LEN];
  431. menu_item_getinfo(menu, item, iAccess, "", 0, sBuffer, sizeof sBuffer - 1, iCallback);
  432.  
  433. strtok(sBuffer, sTemp, sizeof sTemp - 1, sBuffer, sizeof sBuffer - 1, '|');
  434.  
  435. replace(sTemp, sizeof sTemp - 1, "\w", "");
  436. replace(sTemp, sizeof sTemp - 1, "\r", "");
  437. trim(sTemp);
  438.  
  439. static iFileP;
  440. iFileP = fopen(gAdminsFile, "rt");
  441.  
  442. static sTempAccount[STR_LEN];
  443. new i;
  444.  
  445. while(!feof(iFileP))
  446. {
  447. fgets(iFileP, sBuffer, sizeof sBuffer - 1);
  448.  
  449. i++;
  450.  
  451. if((strlen(sBuffer) < 3) || sBuffer[0] == ';')
  452. continue;
  453.  
  454. parse(sBuffer, sTempAccount, sizeof sTempAccount - 1);
  455.  
  456. remove_quotes(sTempAccount);
  457.  
  458. if(equali(sTempAccount, sTemp))
  459. {
  460. format(sBuffer, sizeof sBuffer - 1, ";%s", sBuffer);
  461. write_file(gAdminsFile, sBuffer, i - 1);
  462. break;
  463. }
  464. }
  465. fclose(iFileP);
  466. client_print(id, print_chat, "Successfuly removed ^"%s^" from admins list!", sTemp);
  467. server_cmd("amx_reloadadmins");
  468.  
  469. return 1;
  470. }
  471.  
  472. public cmdAdminEdit(id)
  473. {
  474. static iMenu;
  475. iMenu = menu_create("\yAdmins manager (\wEdit Admin\y):", "EditMenuHandler");
  476.  
  477. static sBuffer[128], sTempItem[128];
  478. static sTemp[4][STR_LEN];
  479.  
  480. static iFileP;
  481. iFileP = fopen(gAdminsFile, "rt");
  482.  
  483. while(!feof(iFileP))
  484. {
  485. fgets(iFileP, sBuffer, sizeof sBuffer - 1);
  486.  
  487. if((strlen(sBuffer) < 3) || sBuffer[0] == ';')
  488. continue;
  489.  
  490. parse(sBuffer, sTemp[0], sizeof sTemp[] - 1, sTemp[1], sizeof sTemp[] - 1, sTemp[2], sizeof sTemp[] - 1, sTemp[3], sizeof sTemp[] - 1);
  491.  
  492. for(new j = 0 ; j < sizeof sTemp ; j++)
  493. {
  494. remove_quotes(sTemp[j]);
  495. }
  496.  
  497. formatex(sTempItem, sizeof sTempItem - 1, "\w%s\r|\w%s\r|\w%s\r|\w%s\r", sTemp[0], sTemp[1], sTemp[2], sTemp[3]);
  498.  
  499. menu_additem(iMenu, sTempItem, "", 0, -1);
  500. }
  501. fclose(iFileP);
  502.  
  503. menu_addblank(iMenu, 0);
  504. menu_display(id, iMenu, 0);
  505. }
  506.  
  507. public EditMenuHandler(id, menu, item)
  508. {
  509. if(item == MENU_EXIT)
  510. {
  511. cmdAdminsManage(id);
  512.  
  513. for(new j = 0 ; j < sizeof gAdminTargetDetails[] ; j++)
  514. formatex(gAdminTargetDetails[id][j], sizeof gAdminTargetDetails[][] - 1, "");
  515.  
  516. return 1;
  517. }
  518.  
  519. static iAccess, iCallback;
  520. static sBuffer[128];
  521. menu_item_getinfo(menu, item, iAccess, "", 0, sBuffer, sizeof sBuffer - 1, iCallback);
  522.  
  523. str_piece(id, sBuffer, gAdminTargetDetails, sizeof gAdminTargetDetails[], sizeof gAdminTargetDetails[][] - 1, '|');
  524.  
  525. for(new j = 0 ; j < sizeof gAdminTargetDetails[] ; j++)
  526. {
  527. replace(gAdminTargetDetails[id][j], sizeof gAdminTargetDetails[][] - 1, "\w", "");
  528. replace(gAdminTargetDetails[id][j], sizeof gAdminTargetDetails[][] - 1, "\r", "");
  529. trim(gAdminTargetDetails[id][j]);
  530. }
  531. cmdAdminEditSubMenu(id);
  532. return 1;
  533. }
  534.  
  535. public cmdAdminEditSubMenu(id)
  536. {
  537. static iMenu, sTemp[STR_LEN];
  538. formatex(sTemp, sizeof sTemp - 1, "\yAdmins Manager(\wEdit Admin \r%s\y):", gAdminTargetDetails[id][0]);
  539.  
  540. iMenu = menu_create(sTemp, "EditSubMenuHandler");
  541.  
  542. menu_additem(iMenu, "\wEdit account name", "1", 0, -1);
  543. menu_additem(iMenu, "\wEdit password", "2", 0, -1);
  544. menu_additem(iMenu, "\wEdit flags", "3", 0 , -1);
  545. menu_additem(iMenu, "\wEdit access flags", "4", 0, -1);
  546. menu_addblank(iMenu, 0);
  547. menu_additem(iMenu, "\wSave modification", "5", 0, -1);
  548.  
  549. menu_addblank(iMenu, 0);
  550. menu_display(id, iMenu, 0);
  551. }
  552.  
  553. public EditSubMenuHandler(id, menu, item)
  554. {
  555. if(item == MENU_EXIT)
  556. {
  557. cmdAdminEdit(id);
  558. return 1;
  559. }
  560.  
  561. static iAccess, iCallback;
  562. static sData[6];
  563. menu_item_getinfo(menu, item, iAccess, sData, sizeof sData - 1, _, _, iCallback);
  564.  
  565. static iKey;
  566. iKey = str_to_num(sData);
  567.  
  568. switch(iKey)
  569. {
  570. case 1:
  571. {
  572. set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
  573. show_hudmessage(id, "Type on console command: amx_adminaccount for details.");
  574. }
  575. case 2:
  576. {
  577. set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
  578. show_hudmessage(id, "Type on console command: amx_adminpassword for details.");
  579. }
  580. case 3:
  581. {
  582. gAccessFromEditMenu[id] = true;
  583. cmdAdminAddFlags(id);
  584.  
  585. return 1;
  586. }
  587. case 4: { cmdAdminAddAccessFlags(id); return 1; }
  588. case 5: { cmdSaveAdminModification(id); return 1; }
  589. }
  590. menu_display(id, menu, 0);
  591. return 1;
  592. }
  593.  
  594. public cmdAdminAccount(id, level, cid)
  595. {
  596. if(!cmd_access(id, level, cid, 2))
  597. return 1;
  598.  
  599. static sArg[64];
  600. read_argv(1, sArg, sizeof sArg - 1);
  601.  
  602. if(!sArg[0])
  603. return 1;
  604.  
  605. formatex(gAdminTargetAccount[id], sizeof gAdminTargetAccount[] - 1, sArg);
  606.  
  607. console_print(id, "Successfuly saved account : ^"%s^" for specified admin.", gAdminTargetAccount[id]);
  608. return 1;
  609. }
  610.  
  611. public cmdAdminAddAccessFlags(id)
  612. {
  613. static iMenu;
  614. iMenu = menu_create("\yAdmins manager (\wEdit Admin access flags):", "AddAccessFlagsMenuHandler");
  615.  
  616. static sTemp[128];
  617.  
  618. for(new i = 0 ; i < sizeof gAdminAccessFlags ; i++)
  619. {
  620. formatex(sTemp, sizeof sTemp - 1, "%s - \y%s", gAdminAccessFlags[i], gAdminAccessFlagsDetails[i]);
  621. menu_additem(iMenu, sTemp, "", 0, -1);
  622. }
  623. menu_addblank(iMenu, 0);
  624. menu_display(id, iMenu, 0);
  625. }
  626.  
  627. public AddAccessFlagsMenuHandler(id, menu, item)
  628. {
  629. if(item == MENU_EXIT)
  630. {
  631. cmdAdminEditSubMenu(id);
  632. return 1;
  633. }
  634.  
  635. static iAccess, iCallback;
  636. static sTemp[32], sBuffer[10];
  637. menu_item_getinfo(menu, item, iAccess, "", 0, sTemp, sizeof sTemp - 1, iCallback);
  638.  
  639. strtok(sTemp, sBuffer, sizeof sBuffer - 1, sTemp, sizeof sTemp - 1, '-', 1);
  640.  
  641. if(containi(gAdminTargetAccessFlags[id], sBuffer) != -1)
  642. replace(gAdminTargetAccessFlags[id], sizeof gAdminTargetAccessFlags[] - 1, sBuffer, "");
  643. else
  644. format(gAdminTargetAccessFlags[id], sizeof gAdminTargetAccessFlags[] - 1, "%s%s", gAdminTargetAccessFlags[id], sBuffer);
  645.  
  646. set_hudmessage(255, 255, 255, -1.0, 0.8, 0, 1.0, 2.0, 0.2, 0.1, 1);
  647. show_hudmessage(id, "Add Admin access flags : ^"%s^"", gAdminTargetAccessFlags[id]);
  648.  
  649. menu_display(id, menu, 0);
  650. return 1;
  651. }
  652.  
  653. public cmdSaveAdminModification(id)
  654. {
  655. static iFileP;
  656. iFileP = fopen(gAdminsFile, "rt");
  657.  
  658. static sBuffer[128], sTempAccount[4][STR_LEN];
  659. new i;
  660.  
  661. while(!feof(iFileP))
  662. {
  663. fgets(iFileP, sBuffer, sizeof sBuffer - 1);
  664.  
  665. i++;
  666.  
  667. if((strlen(sBuffer) < 3) || sBuffer[0] == ';')
  668. continue;
  669.  
  670. parse(sBuffer, sTempAccount[0], sizeof sTempAccount[] - 1, sTempAccount[1], sizeof sTempAccount[] - 1, sTempAccount[2], sizeof sTempAccount[] - 1, sTempAccount[3], sizeof sTempAccount[] - 1);
  671.  
  672. for(new j = 0 ; j < sizeof sTempAccount ; j++)
  673. {
  674. remove_quotes(sTempAccount[j]);
  675. }
  676.  
  677. if(equali(sTempAccount[0], gAdminTargetDetails[id][0]))
  678. {
  679. formatex(sBuffer, sizeof sBuffer - 1, "^"%s^" ^"%s^" ^"%s%^" ^"%s^"", gAdminTargetAccount[id][0] ? gAdminTargetAccount[id] : sTempAccount[0], gAdminTargetPassword[id][0] ? gAdminTargetPassword[id] : sTempAccount[1], gAdminTargetFlags[id][0] ? gAdminTargetFlags[id] : sTempAccount[2], gAdminTargetAccessFlags[id][0] ? gAdminTargetAccessFlags[id] : sTempAccount[3]);
  680. write_file(gAdminsFile, sBuffer, i - 1);
  681. break;
  682. }
  683. }
  684. fclose(iFileP);
  685. client_print(id, print_chat, "Successfuly edited admin account ^"%s^"!", gAdminTargetDetails[id][0]);
  686. server_cmd("amx_reloadadmins");
  687.  
  688. formatex(gAdminTargetFlags[id], sizeof gAdminTargetFlags[] - 1, "");
  689. formatex(gAdminTargetPassword[id], sizeof gAdminTargetPassword[] - 1, "");
  690. formatex(gAdminTargetAccessFlags[id], sizeof gAdminTargetAccessFlags[] - 1, "");
  691. formatex(gAdminTargetAccount[id], sizeof gAdminTargetAccount[] - 1, "");
  692.  
  693. return 1;
  694. }
  695.  
  696. stock register_saycmd(saycommand[], function[], flags = -1, info[])
  697. {
  698. static sTemp[64];
  699. formatex(sTemp, sizeof sTemp - 1, "say /%s", saycommand);
  700. register_clcmd(sTemp, function, flags, info);
  701. formatex(sTemp, sizeof sTemp - 1, "say .%s", saycommand);
  702. register_clcmd(sTemp, function, flags, info);
  703. formatex(sTemp, sizeof sTemp - 1, "say_team /%s", saycommand);
  704. register_clcmd(sTemp, function, flags, info);
  705. formatex(sTemp, sizeof sTemp - 1, "say_team .%s", saycommand);
  706. register_clcmd(sTemp, function, flags, info);
  707. }
  708.  
  709. stock str_piece(index, const input[], output[][][], outputsize, piecelen, token = '|') //Stock by purple_pixie, edited by me. :D
  710. {
  711. new i = -1, pieces, len = -1;
  712.  
  713. while(input[++i] != 0)
  714. {
  715. if (input[i] != token)
  716. {
  717. if (++len < piecelen)
  718. output[index][pieces][len] = input[i];
  719. }
  720. else
  721. {
  722. output[index][pieces++][++len] = 0;
  723. len = -1;
  724.  
  725. if(pieces == outputsize)
  726. return pieces;
  727. }
  728. }
  729. return pieces + 1;
  730. }
Add Comment
Please, Sign In to add comment