· 10 years ago · Aug 27, 2016, 06:44 PM
1#include <amxmodx>
2
3#define PLUGIN "Admin Login System"
4#define VERSION "1.2.1"
5#define AUTHOR "kiscigany"
6
7new const PREFIX[] = "SoriEn#"
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
24enum _:admininfo
25{
26 steamidchk[32],
27 passwordchk[32],
28 flagschk[32]
29}
30
31new Array:adminlist
32new data[admininfo];
33new password[33][32], flags[33][32], writepass[33][32], bool:loggedin[33], bool:admins[33];
34
35public 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
47public 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
58public 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
76public 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
85public 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
94public 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", PREFIX)
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
124public 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
174public 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
188public plugin_natives() {
189 register_native("in_admin_system", "native_admins", 1);
190}
191public native_admins(index) {
192 return admins[index];
193}
194
195stock 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
217public 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
225public 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
234public load() {
235 new Query[512];
236 formatex(Query, charsmax(Query), "SELECT * FROM `admin_system`;")
237 SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", Query)
238}
239
240public 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
256public plugin_end() {
257 SQL_FreeHandle(g_SqlTuple)
258 ArrayDestroy(adminlist)
259}
260
261#else
262
263public plugin_cfg() {
264 load()
265}
266
267public 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
298public plugin_end() {
299 ArrayDestroy(adminlist)
300}
301#endif