HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <sqlx>
  4.  
  5. new const PLUGIN[] = "AddAdminMenu";
  6. new const VERSION[] = "0.1.0";
  7. new const AUTHOR[] = "Turán*";
  8.  
  9. #pragma semicolon 1 //Mindig ahova lehet tegyél ";" jelet
  10. #define Owner ADMIN_IMMUNITY //Tárolja az immunitás jogot
  11. #define CHAT_ON //Ha nem akarod a chatet használni akkor rakj elé "//" jelet.
  12.  
  13. enum _: Admin_Properties{
  14. eSelectNum,
  15. eName[64],
  16. ePermission[64],
  17. eSetPermission
  18. }
  19. new const Admin_Permissions[][Admin_Properties] ={
  20. //Hozzáadni: hányadik | chatben megjelenő prefix | jogok | adhat-e másnak jogot vagy nem(1 igen, 0 nem)
  21. {0, "Játékos", "z", 0},
  22. {1, "Szerverkezelő", "abcvnmlpoikujzhtgrfedwsayc", 1},
  23. {2, "Tulajdonos", "abcvnmlpoikujzhtgrfedwsayc", 1},
  24. {3, "FőAdmin", "bmcfscdtiue", 0},
  25. {4, "Admin", "bmcfscdtiue", 0}
  26. };
  27.  
  28. new g_sSteamID[64];
  29. new g_iAdminNum[33], g_bChoosed[33];
  30. new Handle:g_SqlTuple;
  31. new g_iMaxplayers;
  32. new g_fPermissionLoadTime;
  33. new g_cPrefix;
  34.  
  35. public plugin_init()
  36. {
  37. register_plugin(PLUGIN, VERSION, AUTHOR);
  38. //|===============[SQL infó && Tábla létrehozás]===============|//
  39. //Kiszolgáló | Felhasználónév | Adatbázis jelszava | Adatbázis neve
  40. g_SqlTuple = SQL_MakeDbTuple("", "", "", "");
  41. p_SQLCreateTable();
  42. //|===============[Parancsok]===============|//
  43. register_clcmd("say /rankadd", "p_CheckUserPermission");
  44. register_concmd("admin_set", "p_AdminSet", _, "<steamid> <Hányadik(jog)>");
  45. //|===============[Chat]===============|//
  46. #if defined CHAT_ON
  47. register_clcmd("say", "sayhook");
  48. register_clcmd("say_team", "sayhook");
  49. #endif
  50. //|===============[Cvarok]===============|//
  51. g_iMaxplayers = get_maxplayers();
  52. g_fPermissionLoadTime = register_cvar("Adminload_time", "0.1");
  53. g_cPrefix = register_cvar("Prefix", "[Szerver] »");
  54. }
  55. public p_CheckUserPermission(id)
  56. {
  57. if(Admin_Permissions[g_iAdminNum[id]][eSetPermission] == 1 || get_user_flags(id) & Owner)
  58. {
  59. p_AdminSetMenu(id);
  60. client_print_color(id, print_team_default, "^4%s ^1Válasszad ki hogy kinek szeretnél jogokat adni, vagy elvenni.", get_server_prefix());
  61. }
  62. else
  63. {
  64. client_print_color(id, print_team_default, "^4%s ^1Nincs ehhez jogod!", get_server_prefix());
  65. return PLUGIN_HANDLED;
  66. }
  67. return PLUGIN_HANDLED;
  68. }
  69. public p_AdminSet(id)
  70. {
  71. if(Admin_Permissions[g_iAdminNum[id]][eSetPermission] == 1 || get_user_flags(id) & Owner)
  72. {
  73. new SteamID[64], sPermissionNumber[16], iPermissionNumber;
  74.  
  75. read_argv(1, SteamID, charsmax(SteamID));
  76. read_argv(2, sPermissionNumber, charsmax(sPermissionNumber));
  77.  
  78. new iTarget = cmd_target(id, SteamID, CMDTARGET_NO_BOTS);
  79.  
  80. iPermissionNumber = str_to_num(sPermissionNumber);
  81.  
  82. if(!iTarget)
  83. return PLUGIN_HANDLED;
  84.  
  85. new sAdminName[64], sTargetName[64], sAdminSteamID[64];
  86.  
  87. get_user_name(id, sAdminName, charsmax(sAdminName));
  88. get_user_authid(id, sAdminSteamID, charsmax(sAdminSteamID));
  89. get_user_name(iTarget, sTargetName, charsmax(sTargetName));
  90.  
  91. if(containi(SteamID, "STEAM_") > -1)
  92. {
  93. if(iPermissionNumber >= sizeof(Admin_Permissions) || strlen(sPermissionNumber) == 0)
  94. {
  95. console_print(id, "*---------------------------------------------------------*");
  96. console_print(id, "Rossz szam!");
  97. console_print(id, "Beirt szam: %d", iPermissionNumber);
  98. console_print(id, "Maximum szam: %d", sizeof(Admin_Permissions) - 1);
  99. console_print(id, "*---------------------------------------------------------*");
  100. return PLUGIN_HANDLED;
  101. }
  102.  
  103. if(g_iAdminNum[iTarget] == iPermissionNumber)
  104. {
  105. console_print(id, "**%s mar rendelkezik ezzel a joggal!**", sTargetName);
  106. return PLUGIN_HANDLED;
  107. }
  108.  
  109. if(is_user_connected(iTarget))
  110. {
  111. new sQuery[512], sData[1], iLen;
  112. sData[0] = id;
  113.  
  114. iLen += formatex(sQuery[iLen], charsmax(sQuery), "UPDATE `AdminSet` SET TargetAdminlevel = ^"%d^", ", iPermissionNumber);
  115. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "TargetName = ^"%s^", ", sTargetName);
  116. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "AdminSteamID = ^"%s^", ", sAdminSteamID);
  117. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "AdminName = ^"%s^" WHERE TargetSteamid = ^"%s^";", sAdminName, SteamID);
  118. SQL_ThreadQuery(g_SqlTuple, "p_SQLUpdateThr", sQuery, sData, 1);
  119.  
  120. if(iPermissionNumber == 0)
  121. client_print_color(0, print_team_default, "^4%s ^3ADMIN: ^4%s^1 elvette^3 %s^1 jogait mostantól csak^3 %s.", get_server_prefix(), sAdminName, sTargetName, Admin_Permissions[iPermissionNumber][eName]);
  122. else
  123. client_print_color(0, print_team_default, "^4%s ^3ADMIN: ^4%s,^3 %s^1(%s)^1 jogot adott^3 %s^1 játékosnak.", get_server_prefix(), sAdminName, Admin_Permissions[iPermissionNumber][eName], Admin_Permissions[iPermissionNumber][ePermission], sTargetName);
  124.  
  125. g_iAdminNum[iTarget] = iPermissionNumber;
  126. }
  127. }
  128. else
  129. {
  130. console_print(id, "**Nem megfelelo formatum!**");
  131. return PLUGIN_HANDLED;
  132. }
  133. }
  134. else
  135. console_print(id, "**Nincs ehhez jogod!**");
  136.  
  137. return PLUGIN_HANDLED;
  138. }
  139. public p_AdminSetMenu(id)
  140. {
  141. new sMenu[128], iRow[7], sName[64], sTitle[128];
  142. formatex(sTitle, charsmax(sTitle), g_bChoosed[id] == 0 ? "Válassz játékost":"Válassz rangot");
  143. formatex(sMenu, charsmax(sMenu), "\r%s \w| \d%s", get_server_prefix(), sTitle);
  144. new iMenu = menu_create(sMenu, "p_AdminSetMenu_h");
  145.  
  146. if(!g_bChoosed[id])
  147. {
  148. for(new i = 0; i < g_iMaxplayers; i++)
  149. {
  150. if(!is_user_connected(i) || is_user_bot(i) || i == id)
  151. continue;
  152.  
  153. get_user_name(i, sName, charsmax(sName));
  154. num_to_str(i, iRow, 7);
  155. formatex(sMenu, charsmax(sMenu), "\w%s", sName);
  156. menu_additem(iMenu, sMenu, iRow);
  157. }
  158. }
  159. else
  160. {
  161. for(new i = 0; i < sizeof(Admin_Permissions); i++)
  162. {
  163. get_user_name(i, sName, charsmax(sName));
  164. num_to_str(i, iRow, 7);
  165. formatex(sMenu, charsmax(sMenu), "\w%s", Admin_Permissions[i][eName]);
  166. menu_additem(iMenu, sMenu, iRow);
  167. }
  168. }
  169.  
  170. menu_setprop(iMenu, MPROP_BACKNAME, "\wVissza");
  171. menu_setprop(iMenu, MPROP_NEXTNAME, "\wKövetkező");
  172. menu_setprop(iMenu, MPROP_EXITNAME, "\wKilépés");
  173.  
  174. menu_setprop(iMenu, MPROP_SHOWPAGE, 0);
  175. menu_display(id, iMenu, 0);
  176. }
  177. public p_AdminSetMenu_h(id, iMenu, iItem)
  178. {
  179. if(iItem == MENU_EXIT)
  180. {
  181. menu_destroy(iMenu);
  182. return PLUGIN_HANDLED;
  183. }
  184.  
  185. new iPlayer, iRankNum;
  186.  
  187. if(!g_bChoosed[id])
  188. {
  189. g_bChoosed[id] = true;
  190. iPlayer = iItem;
  191. p_AdminSetMenu(id);
  192. }
  193. else
  194. {
  195. g_bChoosed[id] = false;
  196. iRankNum = iItem;
  197. p_ChoosedRank(id, iPlayer, iRankNum);
  198. }
  199. menu_destroy(iMenu);
  200. return PLUGIN_HANDLED;
  201. }
  202. public p_ChoosedRank(id, iPlayer, iRankNum)
  203. {
  204. new sAdminName[64], sTargetName[64], sAdminSteamID[64], SteamID[64];
  205.  
  206. get_user_name(id, sAdminName, charsmax(sAdminName));
  207. get_user_authid(id, sAdminSteamID, charsmax(sAdminSteamID));
  208. get_user_authid(iPlayer+1, SteamID, charsmax(SteamID));
  209. get_user_name(iPlayer+1, sTargetName, charsmax(sTargetName));
  210.  
  211. if(g_iAdminNum[iPlayer+1] == iRankNum)
  212. {
  213. client_print_color(id, print_team_default, "^4%s^3 %s^1 már rendelkezik ezzel a joggal!", get_server_prefix(), sTargetName);
  214. p_AdminSetMenu(id);
  215. return PLUGIN_HANDLED;
  216. }
  217.  
  218. new sQuery[512], sData[1], iLen;
  219. sData[0] = id;
  220.  
  221. iLen += formatex(sQuery[iLen], charsmax(sQuery), "UPDATE `AdminSet` SET TargetAdminlevel = ^"%d^", ", iRankNum);
  222. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "TargetName = ^"%s^", ", sTargetName);
  223. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "AdminSteamID = ^"%s^", ", sAdminSteamID);
  224. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "AdminName = ^"%s^" WHERE TargetSteamid = ^"%s^";", sAdminName, SteamID);
  225. SQL_ThreadQuery(g_SqlTuple, "p_SQLUpdateThr", sQuery, sData, 1);
  226.  
  227. if(iRankNum == 0)
  228. client_print_color(0, print_team_default, "^4%s ^3ADMIN: ^4%s^1 elvette^3 %s^1 jogait mostantól csak^3 %s.", get_server_prefix(), sAdminName, sTargetName, Admin_Permissions[iRankNum][eName]);
  229. else
  230. client_print_color(0, print_team_default, "^4%s ^3ADMIN: ^4%s,^3 %s^1(%s)^1 jogot adott^3 %s^1 játékosnak.", get_server_prefix(), sAdminName, Admin_Permissions[iRankNum][eName], Admin_Permissions[iRankNum][ePermission], sTargetName);
  231.  
  232. g_iAdminNum[iPlayer+1] = iRankNum;
  233.  
  234. return PLUGIN_HANDLED;
  235. }
  236. #if defined CHAT_ON
  237. public sayhook(id)
  238. {
  239. new sMessage[192];
  240. read_args(sMessage, charsmax(sMessage));
  241. remove_quotes(sMessage);
  242.  
  243. if(strlen(sMessage) == 0 || sMessage[0] == '/')
  244. return PLUGIN_HANDLED;
  245.  
  246. new sDeath[16], sName[MAX_NAME_LENGTH];
  247. get_user_name(id, sName, charsmax(sName));
  248.  
  249. for(new i = 1; i <= get_maxplayers(); i++)
  250. {
  251. if(is_user_connected(i) && !is_user_bot(i))
  252. {
  253. formatex(sDeath, charsmax(sDeath), is_user_alive(id) ? "":"*Halott*");
  254. client_print_color(i, print_team_default, "%s^4[%s]^3%s^1: %s", sDeath, Admin_Permissions[g_iAdminNum[id]][eName], sName, sMessage);
  255. }
  256. }
  257. return PLUGIN_HANDLED;
  258. }
  259. #endif
  260. public p_SQLCreateTable()
  261. {
  262. new iLen;
  263. static sQuery[512];
  264.  
  265. iLen += formatex(sQuery[iLen], charsmax(sQuery), "CREATE TABLE IF NOT EXISTS `AdminSet` ");
  266. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "( ");
  267. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`TargetSteamid` varchar(64) NOT NULL,");
  268. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`TargetName` varchar(64) NOT NULL, ");
  269. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`TargetAdminlevel` INT(11) NOT NULL,");
  270. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`AdminSteamID` varchar(64) NOT NULL,");
  271. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`AdminName` varchar(64) NOT NULL,");
  272. iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)");
  273.  
  274. SQL_ThreadQuery(g_SqlTuple, "p_SQLCreateTableThr", sQuery);
  275. }
  276. public p_SQLCreateTableThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], sDataSize)
  277. {
  278. if(iFailState == TQUERY_CONNECT_FAILED)
  279. set_fail_state("[HIBA*] NEM TUDTAM CSATLAKOZNI AZ ADATBAZISHOZ!");
  280. else if(iFailState == TQUERY_QUERY_FAILED)
  281. set_fail_state("Query Error");
  282. if(iErrcode)
  283. log_amx("[HIBA*] HIBAT DOBTAM: %s", sError);
  284. }
  285. public p_SQLLoadData(id)
  286. {
  287. static sQuery[512], sData[1];
  288. sData[0] = id;
  289.  
  290. get_user_authid(id, g_sSteamID, charsmax(g_sSteamID));
  291.  
  292. formatex(sQuery, charsmax(sQuery), "SELECT * FROM `AdminSet` WHERE TargetSteamid = ^"%s^";", g_sSteamID);
  293. SQL_ThreadQuery(g_SqlTuple, "p_SQLLoadDataThr", sQuery, sData, 1);
  294. }
  295. public p_SQLLoadDataThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], sDataSize)
  296. {
  297. if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
  298. {
  299. log_amx("%s", sError);
  300. return;
  301. }
  302. else
  303. {
  304. new id = sData[0];
  305. new iRowFound = SQL_NumRows(sQuery);
  306.  
  307. if(iRowFound > 0)
  308. g_iAdminNum[id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "TargetAdminlevel"));
  309. else
  310. {
  311. p_PermissionsAdd(id);
  312. p_SQLSave(id);
  313. }
  314. }
  315. }
  316. public p_SQLSave(id)
  317. {
  318. static sQuery[512];
  319.  
  320. get_user_authid(id, g_sSteamID, charsmax(g_sSteamID));
  321.  
  322. formatex(sQuery, charsmax(sQuery), "INSERT INTO `AdminSet` (`TargetSteamid`) VALUES (^"%s^");", g_sSteamID);
  323. SQL_ThreadQuery(g_SqlTuple, "p_SQLSaveThr", sQuery);
  324. }
  325. public p_SQLSaveThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], sDataSize)
  326. {
  327. if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
  328. {
  329. log_amx("%s", sError);
  330. return;
  331. }
  332. }
  333. public p_SQLUpdateThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], sDataSize)
  334. {
  335. if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
  336. {
  337. log_amx("%s", sError);
  338. return;
  339. }
  340. new id = sData[0];
  341. p_PermissionsAdd(id);
  342. }
  343. get_server_prefix()
  344. {
  345. new sPrefix[64];
  346. get_pcvar_string(g_cPrefix, sPrefix, charsmax(sPrefix));
  347. return sPrefix;
  348. }
  349. public p_PermissionsAdd(id)
  350. {
  351. new iFlag;
  352. iFlag = read_flags(Admin_Permissions[g_iAdminNum[id]][ePermission]);
  353. remove_user_flags(id, iFlag);
  354. set_user_flags(id, iFlag);
  355. }
  356. public client_authorized(id)
  357. {
  358. if(is_user_bot(id))
  359. return PLUGIN_HANDLED;
  360.  
  361. p_SQLLoadData(id);
  362. set_task(get_pcvar_float(g_fPermissionLoadTime), "p_PermissionsAdd", id);
  363. return PLUGIN_HANDLED;
  364. }
  365. public client_disconnect(id)
  366. {
  367. if(is_user_bot(id))
  368. return PLUGIN_HANDLED;
  369.  
  370. g_iAdminNum[id] = 0;
  371. g_bChoosed[id] = false;
  372.  
  373. return PLUGIN_HANDLED;
  374. }