/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <nvault>

#define PLUGIN "Gelismis Otomatik Yetki Sistemi"
#define VERSION "1.1"
#define AUTHOR "akcaliberkk"

#define PLUGINPREFIX "^3[^1WA^3]"
#define TASKID 5699
#define PRUNE 3             // X g�n girmeyen hesaplar� sil. Default: 10

new const file[] = "addons/amxmodx/configs/users.ini";

new 
pAdminolEnabled, pSlotolEnabled, pSlotFlags, 
pAdminFlags, pSlotolSure, pAdminolSure,
pAdminTag, pSlotTag, 

iVault, 

iTimer[33],
MessageMode[33];

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    pSlotolEnabled = register_cvar("slotol_aktif","1")
    pSlotolSure = register_cvar("slotol_sure","0")
    pSlotFlags = register_cvar("slotol_yetkiler","b")
    pSlotTag = register_cvar("slotol_tag","WA | ")
    
    pAdminolEnabled = register_cvar("adminol_aktif","1")
    pAdminolSure = register_cvar("adminol_sure","120")
    pAdminFlags = register_cvar("adminol_yetkiler","bc")
    pAdminTag = register_cvar("adminol_tag","WA | ")
    
    register_clcmd("say /slotol","cmdSlotol")
    register_clcmd("say /adminol","cmdAdminol")
//    register_clcmd("say /bilgilerim","cmdYetkiler")
    register_clcmd("say /yetkilerim","cmdYetkiler")
    register_clcmd("Sifrenizi Girin","ListenPassword")
    
    if(!file_exists(file)) {
        set_fail_state("OTOMATIK YETKI SISTEMI: Users.ini dosyasi bulunamadi !")
    }
    
//	set_task(350.0,"Tanitim",TASKID,_,_,"b")
    
    nvault_prune(iVault, 0, (get_systime() - (PRUNE*86400)) )
}
public plugin_cfg() {
    iVault = nvault_open("atestadminol2")
    if(iVault == INVALID_HANDLE) {
        set_fail_state("OTOMATIK YETKI SISTEMI: Online surelerin kaydedilecegi onlinesureler.vault dosyasi acilirken hata olustu !")
    }
}
public plugin_end() {
    nvault_close(iVault)
}

public client_putinserver(id) {
    
    new authid[48], szData[32], iTimeStamp;
    
    get_user_authid(id, authid, charsmax(authid))
    
    if(!nvault_lookup(iVault, authid, szData, charsmax(authid), iTimeStamp)) nvault_set(iVault, authid, "0")
    
    iTimer[id] = get_systime();
}
public client_disconnected(id) {
    
    new szData[32], authid[48];
    
    get_user_authid(id, authid, charsmax(authid))
    formatex(szData, charsmax(authid), "%d", (nvault_get(iVault,authid) + (get_systime() - iTimer[id])/60) ) 
    
    nvault_set(iVault, authid, szData)
}
public client_infochanged(id) {
    new oldauthid[48], newauthid[48];
    get_user_info(id, "name", newauthid, charsmax(newauthid))
    get_user_authid(id, oldauthid, charsmax(oldauthid))
    if(!equal(oldauthid,newauthid)) {
        new szData[32], iTimeStamp;
        formatex(szData, 31, "%d", (nvault_get(iVault,oldauthid) + (get_systime() - iTimer[id])/60) ) 
    
        nvault_set(iVault, oldauthid, szData)
        
        if(!nvault_lookup(iVault, newauthid, szData, 31, iTimeStamp)) nvault_set(iVault, newauthid, "0")
    
        iTimer[id] = get_systime();
    }
}
public cmdSlotol(id) {
    if(!get_pcvar_num(pSlotolEnabled)) return PLUGIN_CONTINUE
    
    if(get_user_flags(id) & ADMIN_RESERVATION) {
        ColorChat(id, "%s ^4Zaten yetkiniz var. Bu sistemden sadece normal oyuncular yararlanabilir^1.",PLUGINPREFIX)
        ColorChat(id, "%s ^4Yetkilerinizi gormek icin ^3/yetkilerim ^4yazin^1.",PLUGINPREFIX)
        return PLUGIN_HANDLED
    }
    
    new authid[48];
    get_user_authid(id, authid, charsmax(authid))

    if(nvault_get(iVault, fmt("%s-Kayitli", authid))) {
        ColorChat(id, "%s ^4Slot olma isteginiz reddedildi^1!!^3 %s ^4idsinde zaten bir slot var^1.",PLUGINPREFIX, authid)
        return PLUGIN_HANDLED
    }
    
    new iOnlineTime = nvault_get(iVault, authid) + ((get_systime() - iTimer[id])/60);
    
    if(iOnlineTime < get_pcvar_num(pSlotolSure)) {
        ColorChat(id, "%s ^4Malesef sunucuda yeterince kalmadiginiz icin slot olamiyorsunuz^1.",PLUGINPREFIX)
        ColorChat(id, "%s ^4Suana kadar aktif oldugunuz sure:^3 %d dk. ^4Slot olabilmek icin^3 %d dk ^4daha sunucuda kalmaniz gerek^1.",\
        PLUGINPREFIX, iOnlineTime, get_pcvar_num(pSlotolSure) - iOnlineTime)
        return PLUGIN_HANDLED
    }
    
    ColorChat(id, "%s ^4Slot olma isteginiz kabul edildi. Lutfen sifrenizi belirleyin.^1.",PLUGINPREFIX)
    ColorChat(id, "%s ^4Slot olma isteginiz kabul edildi. Lutfen sifrenizi belirleyin.^1.",PLUGINPREFIX)
    
    MessageMode[id] = 1;
    SteamIdYetki(id);
    return PLUGIN_HANDLED
}

public cmdAdminol(id) {
    if(!get_pcvar_num(pAdminolEnabled)) return PLUGIN_CONTINUE
    
    if(get_user_flags(id) & ADMIN_RESERVATION) {
        ColorChat(id, "%s ^4Zaten yetkiniz var. Bu sistemden sadece normal oyuncular yararlanabilir^1.",PLUGINPREFIX)
        ColorChat(id, "%s ^4Yetkilerinizi gormek icin ^3/yetkilerim ^4yazin^1.",PLUGINPREFIX)
        return PLUGIN_HANDLED
    }
    
    new name[32], authid[48];
    get_user_authid(id, authid, charsmax(authid))
    get_user_name(id, name, 31)
    new check[32],szAdminTag[32], szData[32], iTimeStamp;
    get_pcvar_string(pAdminTag,szAdminTag,31)
    formatex(check, 31, "%s%s [N-A]",szAdminTag,name)
    if(nvault_lookup(iVault,check, szData, 31, iTimeStamp)) {
        ColorChat(id, "%s ^4Admin olma isteginiz reddedildi^1!!^3 %s ^4adinda zaten bir admin var^1.",PLUGINPREFIX, check)
        return PLUGIN_HANDLED
    }
    
    new iOnlineTime = nvault_get(iVault, authid) + ((get_systime() - iTimer[id])/60);
    
    if(iOnlineTime < get_pcvar_num(pAdminolSure)) {
        ColorChat(id, "%s ^4Malesef sunucuda yeterince kalmadiginiz icin admin olamiyorsunuz^1.",PLUGINPREFIX)
        ColorChat(id, "%s ^4Suana kadar aktif oldugunuz sure:^3 %d dk. ^4Admin olabilmek icin^3 %d dk ^4daha sunucuda kalmaniz gerek^1.",\
        PLUGINPREFIX, iOnlineTime, get_pcvar_num(pAdminolSure) - iOnlineTime)
        return PLUGIN_HANDLED
    }
    
    ColorChat(id, "%s ^4Admin olma isteginiz kabul edildi^1. Lutfen sifrenizi belirleyin^1..",PLUGINPREFIX)
    ColorChat(id, "%s ^4Admin olma isteginiz kabul edildi^1. Lutfen sifrenizi belirleyin^1..",PLUGINPREFIX)
    
    MessageMode[id] = 2;
    SteamIdYetki(id);
    return PLUGIN_HANDLED
}

public SteamIdYetki(id) {
    if(!MessageMode[id]) {
        console_print(id, "Erisim reddedildi !")
        return PLUGIN_HANDLED
    }

    new flags[32], tag[32];
    get_pcvar_string( (MessageMode[id] == 2 ? pAdminFlags : pSlotFlags), flags,31)
    get_pcvar_string( (MessageMode[id] == 2 ? pAdminTag : pSlotTag), tag,31)
    
    new name[32], newname[32];
    get_user_name(id, name, 31)

    if(MessageMode[id] == 2)
    {
        formatex(newname, 31, "%s%s [N-A]",tag, name)
    }
    else
    {
        formatex(newname, 31, "%s%s [S-A]",tag, name)
    }

    console_cmd(id, "name ^"%s^"",newname)
    
    yetkilendir(id, flags)

    new authid[48];
    get_user_authid(id, authid, charsmax(authid));
    nvault_set(iVault, fmt("%s-Kayitli", authid), "1");
    
    ColorChat(id, "%s ^4Tebrikler. Basariyla %s oldunuz. Hesap ismi: ^4%s",PLUGINPREFIX, ( MessageMode[id] == 2 ? "Normal Admin" : "Slot Admin" ), newname) 
    ColorChat(id, "%s ^4Tebrikler. Basariyla %s oldunuz. Hesap ismi: ^4%s",PLUGINPREFIX, ( MessageMode[id] == 2 ? "Normal Admin" : "Slot Admin" ), newname)  
    
    iTimer[id] = get_systime();
    nvault_set(iVault, name, "0")
    
    MessageMode[id] = 0;
    return PLUGIN_HANDLED
}
public cmdYetkiler(id) {
    new flags[32],name[32];
    get_user_name(id,name,31)
    get_flags(get_user_flags(id), flags, 31)
    ColorChat(id, "^4 Isim: ^3%s ^4Yetkileriniz: ^3%s",name, flags)
}
public guncelle() {
    server_cmd("amx_reloadadmins")
}
yetkilendir(id, const flags[]) {
    new Currenttime[9],CurrentDay[16]

    new authid[48];
    get_user_authid(id, authid, charsmax(authid));
    
    get_time("%H:%M",Currenttime,8)
    get_time("%d/%m/%Y",CurrentDay,15)

    // "STEAM_0:0:123456" "" "abcdefghijklmnopqrstuv" "ce"

    new szLine[128];
    formatex(szLine, charsmax(szLine), "^"%s^" ^"^" ^"%s^" ^"ce^" // Tarih: %s - %s^n", authid, flags, CurrentDay, Currenttime)
    write_file(file, szLine)
    set_task(1.5,"guncelle")
}

stock ColorChat(const id, const string[], {Float, Sql, Resul,_}:...) { 
    new msg[191], players[32], count = 1; 
    
    static len; 
    len = formatex(msg, charsmax(msg), "^x01" ); 
    vformat(msg[len], charsmax(msg) - len, string, 3); 
    
    if(id)players[0] = id; 
    else get_players(players,count,"ch"); 
    
    for (new i = 0; i < count; i++){ 
        
        if(is_user_connected(players[i])){ 
            
            message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"),_, players[i]); 
            write_byte(players[i]); 
            write_string(msg); 
            message_end(); 
        } 
    } 
    return; 
}
