HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2.  
  3. #define PLUGIN "Admin Login System"
  4. #define VERSION "1.2.1"
  5. #define AUTHOR "mforce"
  6.  
  7. new const PREFIX[] = "AdminSystem"
  8.  
  9. // HA SQL-t szeretnél használni, vedd ki a # elől a //-t és írd be az adatokat lentebb. (alapból fájlba ment)
  10. //#define SQL
  11.  
  12. #if defined SQL
  13. #include <sqlx>
  14. new Handle:g_SqlTuple;
  15.  
  16. new const SQL_INFO[][] = {
  17. "127.0.0.1", // HOST
  18. "USERNAME", // USERNAME
  19. "PASSWORD", // PASSWORD
  20. "DATABASE" // DATABASE
  21. }
  22. #endif
  23.  
  24. enum _:admininfo
  25. {
  26. steamidchk[32],
  27. passwordchk[32],
  28. flagschk[32]
  29. }
  30.  
  31. new Array:adminlist
  32. new data[admininfo];
  33. new password[33][32], flags[33][32], writepass[33][32], bool:loggedin[33], bool:admins[33];
  34.  
  35. public plugin_init() {
  36. register_plugin(PLUGIN, VERSION, AUTHOR)
  37.  
  38. register_clcmd("say /login", "admin_menu")
  39. register_clcmd("say /admintoltes", "loadadmins")
  40. register_clcmd("JELSZO", "Jelszo")
  41. register_cvar("admin_login_system", AUTHOR, FCVAR_SERVER | FCVAR_SPONLY);
  42. set_task(60.0, "admincheck", .flags = "b");
  43.  
  44. adminlist = ArrayCreate(admininfo)
  45. }
  46.  
  47. public admincheck() {
  48. new players[32], num;
  49. get_players(players, num, "ch")
  50. for(new i = 0; i < num; i++) {
  51. new tempid = players[i]
  52. if(admins[tempid] && !loggedin[tempid]) {
  53. ChatColor(tempid, "^4[%s]^1 Az admin bejelentkezéshez írd be: ^3/login", PREFIX)
  54. }
  55. }
  56. }
  57.  
  58. public client_putinserver(id) {
  59. if(!is_user_bot(id) && !is_user_hltv(id)) {
  60. new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
  61. if(containi(steamid, "_ID_LAN") != -1) return;
  62.  
  63. for(new i = 0; i < ArraySize(adminlist); i++) {
  64. ArrayGetArray(adminlist, i, data)
  65.  
  66. if(equal(steamid, data[steamidchk])) {
  67. copy(password[id], charsmax(password[]), data[passwordchk])
  68. copy(flags[id], charsmax(flags[]), data[flagschk])
  69. admins[id] = true;
  70. set_task(10.0, "admin_menu", id);
  71. }
  72. }
  73. }
  74. }
  75.  
  76. public loadadmins(id) {
  77. if(get_user_flags(id) & ADMIN_RCON) {
  78. ArrayClear(adminlist)
  79. ChatColor(id, "^4[%s]^1 Adminok újra betöltve.", PREFIX)
  80. load()
  81. }
  82. else ChatColor(id, "^4[%s]^1 Nincs jogod a parancs használatához.", PREFIX)
  83. }
  84.  
  85. public client_disconnect(id) {
  86. loggedin[id] = false;
  87. admins[id] = false;
  88. copy(password[id], charsmax(password), "")
  89. copy(writepass[id], charsmax(writepass), "")
  90. copy(flags[id], charsmax(flags), "")
  91. if(task_exists(id)) remove_task(id);
  92. }
  93.  
  94. public admin_menu(id) {
  95. if(!admins[id]) {
  96. ChatColor(id, "^4[%s]^1 Nincs jogod az admin belépéshez, mert nem szerepelsz adatbázisban.", PREFIX)
  97. return PLUGIN_HANDLED;
  98. }
  99.  
  100. new temp[128];
  101. formatex(temp, charsmax(temp), "\r[\y%s\r] \wAdmin Login System ^nby \y%s", PREFIX, AUTHOR)
  102. new menu = menu_create(temp, "admin_menu_h" )
  103. if(!loggedin[id]) {
  104. new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
  105. formatex(temp, charsmax(temp), "\rSteamID: \d%s", steamid)
  106. menu_additem(menu,temp, "0",0)
  107. formatex(temp, charsmax(temp), "\rJelszó: \d%s^n", writepass[id])
  108. menu_additem(menu,temp, "1",0)
  109. }
  110. else {
  111. menu_additem(menu,"\r[\wStátusz\r]: \yBejelentkezve","0",0)
  112. formatex(temp, charsmax(temp), "\rJogok:\d %s^n", flags[id])
  113. menu_additem(menu,temp, "1",0)
  114. }
  115. formatex(temp, charsmax(temp), "%s", loggedin[id] ? "Kijelentkezés":"Bejelentkezés")
  116. menu_additem(menu, temp, "2",0)
  117.  
  118. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  119. menu_setprop(menu, MPROP_EXITNAME, "Kilépés");
  120. menu_display(id, menu, 0)
  121. return PLUGIN_HANDLED;
  122. }
  123.  
  124. public admin_menu_h(id, menu, item) {
  125. if(item == MENU_EXIT) {
  126. menu_destroy(menu);
  127. return PLUGIN_HANDLED;
  128. }
  129. new command[6], name[64], access, callback;
  130. menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
  131.  
  132. switch(item)
  133. {
  134. case 0: {
  135. admin_menu(id)
  136. }
  137. case 1: {
  138. if(!loggedin[id]) {
  139. client_cmd(id, "messagemode JELSZO")
  140. }
  141. else admin_menu(id)
  142. }
  143. case 2: {
  144. if(!loggedin[id]) {
  145. if(strlen(password[id]) >= 6 && equal(writepass[id], password[id]) && !equal(flags[id],"")) {
  146. ChatColor(id, "^4[%s]^1 Sikeresen beléptél! Admin információk: ^3/login", PREFIX)
  147. remove_user_flags(id, read_flags("z"));
  148. set_user_flags(id, read_flags(flags[id]));
  149. loggedin[id] = true;
  150. }
  151. else if(strlen(writepass[id]) == 0) {
  152. ChatColor(id, "^4[%s]^1 Be kell írnod a jelszót!", PREFIX)
  153. admin_menu(id)
  154. }
  155. else {
  156. ChatColor(id, "^4[%s]^1 Hibás jelszó, próbáld újra!", PREFIX)
  157. admin_menu(id)
  158. }
  159. copy(writepass[id], charsmax(writepass[]), "");
  160. }
  161. else {
  162. loggedin[id] = false;
  163. remove_user_flags(id, read_flags(flags[id]));
  164. set_user_flags(id, read_flags("z"));
  165. ChatColor(id, "^4[%s]^1 Sikeresen kiléptél! A belépéshez: ^3/login", PREFIX)
  166. }
  167. }
  168. }
  169.  
  170. menu_destroy(menu);
  171. return PLUGIN_HANDLED;
  172. }
  173.  
  174. public Jelszo(id) {
  175. new adat[32]
  176. read_args(adat, charsmax(adat))
  177. remove_quotes(adat)
  178. if(strlen(adat) < 6) {
  179. ChatColor(id, "^4[%s]^1 A jelszavadnak legalább 6 karakternek kell lennie!", PREFIX)
  180. copy(writepass[id], charsmax(writepass[]), "");
  181. }
  182. else {
  183. copy(writepass[id], charsmax(writepass[]), adat)
  184. }
  185. admin_menu(id)
  186. }
  187.  
  188. public plugin_natives() {
  189. register_native("in_admin_system", "native_admins", 1);
  190. }
  191. public native_admins(index) {
  192. return admins[index];
  193. }
  194.  
  195. stock ChatColor(const id, const szMessage[], any:...) {
  196. static pnum, players[32], szMsg[190], IdMsg;
  197. vformat(szMsg, charsmax(szMsg), szMessage, 3);
  198.  
  199. if(!IdMsg) IdMsg = get_user_msgid("SayText");
  200.  
  201. if(id) {
  202. if(!is_user_connected(id)) return;
  203. players[0] = id;
  204. pnum = 1;
  205. }
  206. else get_players(players, pnum, "ch");
  207.  
  208. for(new i; i < pnum; i++) {
  209. message_begin(MSG_ONE, IdMsg, .player = players[i]);
  210. write_byte(players[i]);
  211. write_string(szMsg);
  212. message_end();
  213. }
  214. }
  215.  
  216. #if defined SQL
  217. public plugin_cfg() {
  218. new Query[512];
  219. g_SqlTuple = SQL_MakeDbTuple(SQL_INFO[0],SQL_INFO[1],SQL_INFO[2],SQL_INFO[3])
  220. formatex(Query, charsmax(Query), "CREATE TABLE IF NOT EXISTS admin_system (`steamid` varchar(32) NOT NULL,`password` varchar(32) NOT NULL,`flags` varchar(32) NOT NULL,`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)")
  221. SQL_ThreadQuery(g_SqlTuple,"createTableThread", Query)
  222. load()
  223. }
  224.  
  225. public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) {
  226. if(FailState == TQUERY_CONNECT_FAILED)
  227. set_fail_state("Nem tudtam csatlakozni az adatbazishoz.");
  228. else if(FailState == TQUERY_QUERY_FAILED)
  229. set_fail_state("Query Error");
  230. if(Errcode)
  231. log_amx("Hibat dobtam: %s",Error);
  232. }
  233.  
  234. public load() {
  235. new Query[512];
  236. formatex(Query, charsmax(Query), "SELECT * FROM `admin_system`;")
  237. SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", Query)
  238. }
  239.  
  240. public QuerySelectData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) {
  241. if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED) {
  242. log_amx("%s", Error)
  243. return
  244. }
  245. else {
  246. while(SQL_MoreResults(Query)) {
  247. SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "steamid"), data[steamidchk], charsmax(data[steamidchk]));
  248. SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "password"), data[passwordchk], charsmax(data[passwordchk]));
  249. SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "flags"), data[flagschk], charsmax(data[flagschk]));
  250. ArrayPushArray(adminlist, data)
  251. SQL_NextRow(Query)
  252. }
  253. }
  254. }
  255.  
  256. public plugin_end() {
  257. SQL_FreeHandle(g_SqlTuple)
  258. ArrayDestroy(adminlist)
  259. }
  260.  
  261. #else
  262.  
  263. public plugin_cfg() {
  264. load()
  265. }
  266.  
  267. public load() {
  268. new sBuffer[256], sFile[64], pFile;
  269. new sData[3][32]
  270.  
  271. get_localinfo("amxx_configsdir", sFile, charsmax(sFile));
  272. format(sFile, charsmax(sFile), "%s/admin_system.ini", sFile);
  273.  
  274. pFile = fopen(sFile, "rt");
  275.  
  276. if(pFile)
  277. {
  278. while(!feof(pFile))
  279. {
  280. fgets(pFile, sBuffer, charsmax(sBuffer));
  281. trim(sBuffer);
  282. if(sBuffer[0] == ';') continue;
  283.  
  284. parse(sBuffer, sData[0], 31, sData[1], 31, sData[2], 31);
  285.  
  286. copy(data[steamidchk], charsmax(data[steamidchk]), sData[0])
  287. copy(data[passwordchk], charsmax(data[passwordchk]), sData[1])
  288. copy(data[flagschk], charsmax(data[flagschk]), sData[2])
  289. ArrayPushArray(adminlist, data)
  290. }
  291.  
  292. fclose(pFile);
  293. }
  294. else
  295. write_file(sFile, ";^"STEAM_0:0:12345678^" ^"jelszo582^" ^"abcdefghijklmnopqrstu^"");
  296. }
  297.  
  298. public plugin_end() {
  299. ArrayDestroy(adminlist)
  300. }
  301. #endif