- /*Az eredeti plugint írta: Exolent. Módosította/újraírta: LyleChriss 
- The original plugin was made by Exolent. Modifyed/rewrited by: LyleChriss*/ 
-   
- #include <amxmodx> 
- #include <amxmisc> 
- #include <unixtime> 
-   
- #define TASK_ID_REMOVE 14325 
-   
- new gCaseSensitive 
- #define IsCaseSensitive(%1)   (gCaseSensitive &   (1 << (%1 & 31))) 
- #define SetCaseSensitive(%1)   gCaseSensitive |=  (1 << (%1 & 31)) 
- #define ClearCaseSensitive(%1) gCaseSensitive &= ~(1 << (%1 & 31)) 
-   
- //Admin Adatok [Admin Datas] 
- enum _:AdminData 
- { 
-     Auth[44], 
-     Pass[32], 
-     Access, 
-     Flags, 
-     Expire 
- } 
-   
- new Array:Admins 
- new Trie:AdminIndex 
- new AdminsNum 
-   
- new amx_mode 
- new amx_password_field 
- new amx_default_access 
-   
- new KickCommand[32] 
-   
- new AdminFile[64] 
-   
- public plugin_init() { 
-     register_plugin("Admin Custom", "1.0.3", "LyleChriss") 
-     
-     amx_mode = register_cvar("amx_mode", "1") 
-     amx_password_field = register_cvar("amx_password_field", "_pw") 
-     amx_default_access = register_cvar("amx_default_access", "") 
-     
-     formatex(KickCommand, charsmax(KickCommand), "amxauthcustom%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z')) 
-     register_clcmd(KickCommand, "CmdKick") 
-     register_clcmd("say /lejarat", "CmdLeajarat") 
-     
-     get_localinfo("amxx_configsdir", AdminFile, charsmax(AdminFile)) 
-     format(AdminFile, charsmax(AdminFile), "%s/custom_users.ini", AdminFile) 
-     
-     Admins = ArrayCreate(AdminData) 
-     AdminIndex = TrieCreate() 
-     
-     LoadAdmins() 
-     
-     new hour, minute, second 
-     time(hour, minute, second) 
-     
-     new timeleft = 86400 - (hour*3600) - (minute*60) - second + 5 
-     
-     set_task(float(timeleft), "TaskRefreshAdmins") 
- } 
-   
- public client_connect(id) 
- { 
-     ClearCaseSensitive(id) 
- } 
-   
- public client_authorized(id) 
- { 
-     if(get_pcvar_num(amx_mode)) 
-         checkAdmin(id) 
- } 
-   
- public client_infochanged(id) 
- { 
-     if(is_user_connected(id) && get_pcvar_num(amx_mode)) 
-     { 
-         new oldName[32], newName[32] 
-         get_user_name(id, oldName, charsmax(oldName)) 
-         get_user_info(id, "name", newName, charsmax(newName)) 
-   
-         if(strcmp(oldName, newName, !IsCaseSensitive(id)) == 0) 
-             checkAdmin(id, newName) 
-     } 
- } 
-   
- public CmdLejarat(id) 
- { 
-     new steamID[35], ip[32], name[32], index, admin[AdminData] 
-     new Year, Month, Day, Hour, Minute, Second 
-     get_user_authid(id, steamID, charsmax(steamID)) 
-     get_user_ip(id, ip, charsmax(ip), 1) 
-     get_user_name(id, name, charsmax(name)) 
-     
-     if(TrieKeyExists(AdminIndex, steamID)) 
-     { 
-         TrieGetCell(AdminIndex, steamID, index) 
-         ArrayGetArray(Admins, index, admin) 
-         if(admin[Expire] <= 0) 
-         { 
-             client_print(id, print_chat, "Az adminod lejárt!") 
-         } 
-         else 
-         {   
-             UnixToTime(admin[Expire], Year, Month, Day, Hour, Minute, Second) 
-             
-             client_print(id, print_chat, "Az adminod lejár: %d.%d.%d-án/én.", Year,Month,Day) 
-         } 
-     } 
-     else if(TrieKeyExists(AdminIndex, ip)) 
-     { 
-         TrieGetCell(AdminIndex, ip, index) 
-         ArrayGetArray(Admins, index, admin) 
-         if(admin[Expire] <= 0) 
-         { 
-             client_print(id, print_chat, "Az adminod lejárt!") 
-         } 
-         else 
-         {   
-             UnixToTime(admin[Expire], Year, Month, Day, Hour, Minute, Second) 
-             
-             client_print(id, print_chat, "Az adminod lejár: %d.%d.%d-án/én.", Year,Month,Day) 
-         } 
-     } 
-     else if(TrieKeyExists(AdminIndex, name)) 
-     { 
-         TrieGetCell(AdminIndex, name, index) 
-         ArrayGetArray(Admins, index, admin) 
-         if(admin[Expire] <= 0) 
-         { 
-             client_print(id, print_chat, "Az adminod lejárt!") 
-         } 
-         else 
-         {   
-             UnixToTime(admin[Expire], Year, Month, Day, Hour, Minute, Second) 
-             
-             client_print(id, print_chat, "Az adminod lejár: %d.%d.%d-án/én.", Year,Month,Day) 
-         } 
-     } 
- } 
-   
- public CmdKick(id) { 
-     server_cmd("kick #%d", get_user_userid(id)); 
-   
-     return PLUGIN_HANDLED; 
- } 
-   
- public TaskRefreshAdmins() 
- { 
-     LoadAdmins() 
-     
-     new players[32], pnum 
-     get_players(players, pnum) 
-     
-     for(new i; i<pnum;i++) 
-         checkAdmin(players[i]) 
-         
-     set_task(86400.0, "TaskRefreshAdmins") 
- } 
-   
- public TaskRemoveAuth(auth[]) 
- { 
-     new index 
-     if(!TrieGetCell(AdminIndex, auth, index)) 
-         return; 
-     
-     ArrayDeleteItem(Admins, index) 
-     TrieDeleteKey(AdminIndex, auth) 
-     AdminsNum-- 
-     
-     new admin[AdminData] 
-     while(index < AdminsNum) 
-     { 
-         ArrayGetArray(Admins, index, admin) 
-         TrieSetCell(AdminIndex, admin[Auth], index) 
-     } 
-     
-     new players[32], pnum 
-     get_players(players, pnum) 
-     
-     for(new i; i<pnum;i++) 
-         checkAdmin(players[i]) 
- } 
-   
- checkAdmin(id, name[32]="") 
- { 
-     remove_user_flags(id) 
-     
-     if(!name[0]) 
-         get_user_name(id, name, charsmax(name)) 
-     
-     new steamID[35], ip[32] 
-     get_user_authid(id, steamID, charsmax(steamID)) 
-     get_user_ip(id, ip, charsmax(ip), 1) 
-     
-     new admin[AdminData] 
-     new temp 
-     new bool:found 
-     
-     for(new i = admins_num() -1; i >= 0; i--) 
-     { 
-         admins_lookup(i, AdminProp_Auth, admin[Auth], charsmax(admin[Auth])) 
-         admins_lookup(i, AdminProp_Password, admin[Pass], charsmax(admin[Pass])) 
-         admin[Access] = admins_lookup(i, AdminProp_Access) 
-         admin[Flags] = admins_lookup(i, AdminProp_Flags) 
-         
-         if((found = adminMatch(id, name, steamID, ip, admin))) 
-             break; 
-     } 
-     
-     if(!found) 
-     { 
-         for(new i; i<AdminsNum; i++) 
-         { 
-             ArrayGetArray(Admins, i, admin) 
-             
-             if((found = adminMatch(id, name, steamID, ip, admin))) 
-                 break; 
-         } 
-     } 
-     
-     if(found) 
-     { 
-         if(~admin[Flags] & FLAG_NOPASS) 
-         { 
-             new field[32], password[32] 
-             get_pcvar_string(amx_password_field, field, charsmax(field)) 
-             get_user_info(id, field, password, charsmax(password)) 
-             
-             if(!equal(admin[Pass], password)) 
-             { 
-                 if(admin[Flags] & FLAG_KICK) 
-                     client_cmd(id, "%s", KickCommand) 
-                     
-                 return; 
-             } 
-         } 
-         
-         set_user_flags(id, admin[Access]) 
-     } 
-     else if(get_pcvar_num(amx_mode) == 2) 
-         client_cmd(id, "%s", KickCommand) 
-     else 
-     { 
-         new flags[27] 
-         get_pcvar_string(amx_default_access, flags, charsmax(flags)) 
-         temp = read_flags(flags) 
-   
-         if(!temp) 
-             temp = ADMIN_USER 
-             
-         set_user_flags(id, temp) 
-     } 
- }   
-   
- LoadAdmins() 
- { 
-     if(AdminsNum) 
-     { 
-         ArrayClear(Admins) 
-         TrieClear(AdminIndex) 
-         AdminsNum = 0 
-     } 
-     
-     new data[256] 
-     new admin[AdminData], accessStr[27], flagStr[27], expStr[32], Day, Month, Year, expTime, currentTime = get_systime() 
-     
-     new pFile = fopen(AdminFile, "rt") 
-     
-     if(pFile) 
-     { 
-         while(!feof(pFile)) 
-         { 
-             fgets(pFile, data, charsmax(data)) 
-             
-             trim(data) 
-             
-             if(!data[0] || data[0] == ';' || data[0] == '/' && data[1] == '/') continue; 
-             
-             parse(data, admin[Auth], charsmax(admin[Auth]),  admin[Pass], charsmax(admin[Pass]), accessStr, charsmax(accessStr), flagStr, charsmax(flagStr), expStr, charsmax(expStr)) 
-             
-             admin[Access] = read_flags(accessStr) 
-             admin[Flags] = read_flags(flagStr) 
-             
-             if(expStr[0]) 
-             { 
-                 new day[8], month[8] 
-                 strtok(expStr, day, charsmax(day), expStr, charsmax(expStr), '.') 
-                 strtok(expStr, month, charsmax(month), expStr, charsmax(expStr), '.') 
-                 
-                 Day = str_to_num(day) 
-                 Month = str_to_num(month) 
-                 Year = str_to_num(expStr) 
-                 
-                 expTime = TimeToUnix(Year, Month, Day, 0, 0, 0) 
-                 
-                 expTime -= currentTime 
-                 
-                 if(expTime <= 0) 
-                 { 
-                     format(data, charsmax(data), ";%s ; Lejárt", data) 
-                     
-                     write_file(AdminFile, data, AdminsNum) 
-                 } 
-                 admin[Expire] = expTime 
-                 
-                 set_task(float(expTime), "TaskRemoveAuth", TASK_ID_REMOVE, admin[Auth], sizeof(admin[Auth])) 
-             } 
-             ArrayPushString(Admins, admin) 
-             TrieSetCell(AdminIndex, admin[Auth], AdminsNum) 
-             AdminsNum++ 
-         } 
-         fclose(pFile) 
-     } 
- } 
-   
- bool:adminMatch(id, const name[], const steamID[], const ip[], const admin[AdminData]) 
- { 
-     new temp 
-     new bool:found 
-     
-     if(admin[Flags] & FLAG_AUTHID) 
-     { 
-         if(equal(steamID, admin[Auth])) 
-             found = true 
-     } 
-     else if(admin[Flags] & FLAG_IP) 
-     { 
-         temp = strlen(admin[Auth]) 
-         
-         if(admin[Auth][temp-1] != '.') 
-             temp = 0 
-         
-         if(equal(ip, admin[Auth], temp)) 
-             found=true 
-     } 
-     else if(admin[Flags] & FLAG_TAG) 
-     { 
-         temp = admin[Flags] & FLAG_CASE_SENSITIVE 
-         
-         if(strfind(name, admin[Auth], !temp) >= 0) 
-         { 
-             if(temp) 
-                 SetCaseSensitive(id) 
-   
-             found = true 
-         } 
-     } 
-     else 
-     { 
-         temp = admin[Flags] & FLAG_CASE_SENSITIVE 
-         
-         if(strcmp(name, admin[Auth], !temp) == 0) 
-         { 
-             if(temp) 
-                 SetCaseSensitive(id) 
-   
-             found = true 
-         } 
-     } 
-   
-     return found 
- } 
-   
- public plugin_end() 
- { 
-     ArrayDestroy(Admins) 
-     TrieDestroy(AdminIndex) 
- }