Иконка ресурса

[GM] Free Vip 1.6.2

Нет прав для скачивания
Сообщения
15
Реакции
0
neow1, на плагин тоже выставил права?
Да, я также установил для плагина значение 777.
22 Авг 2024
neow1
Код:
#include <amxmodx>
#include <amxmisc>
#include <reapi>
#include <free_vip>
//#include <next_client_api> // Recommendation for using NextClientServerApi 1.4.0 or later
//#include <authemu> // Using version 5.2.12.525 or later
#include <nvault>

//#define INFINITE_ROUND // Using for CSDM, GG, DD and more...

#if defined INFINITE_ROUND
#define TASK_INFINITE 7022024
#endif

#define Plugin_Name "[GM] Free Vip"
#define Plugin_Version "1.6.3"
#define Plugin_Author "[GM] NWC"

#define GetCvarDesc(%0) fmt("%l", %0)
#define SettingsDir "/plugins/gm_plugins/free_vip/vips.ini"

#define setarg_int(%0,%1) setarg(%0,0,%1)

#pragma semicolon 1

enum _:PCVAR
{
    cvar_sendChat,
    cvar_showHud,
    cvar_szHud[128],
    cvar_iFreq
}

enum _ePlayersData
{
    pd_szAuthid[MAX_AUTHID_LENGTH],
    pd_bitFlags,
    pd_bitSetFlags,
    pd_bitClientsSetFlags,
    pd_bitTestsSetFlags,
    bool: pd_bSet,
    bool: pd_bHSet,
    bool: pd_bNSet,
    bool: pd_bCSet,
    pd_iEnd,
    pd_iTestEnd,
    pd_iFreq,
    TypeClient: pd_bitAdvClient,
    TypeClient: pd_bitClient,
    bool: pd_bEnd
}

enum
{
    FV_NONE,
    FV_NIGHTS,
    FV_HOLLIDAYS,
    FV_GIFTS,
    FV_TEST,
    FV_CLIENTS,
    FV_STEAM,
    FV_IP,
    FV_NAME
}

enum _aTempData
{
    temp_iStart,
    temp_iEnd,
    temp_bitFlags,
    temp_szArg[MAX_AUTHID_LENGTH + 1]
}

enum _eFreeData
{
    bool: bNight,
    bool: bHolliday,
    bitNightsFlags,
    bitHollidayFlags,
    szIgnorNightsFlags[64],
    szIgnorHollidayFlags[64],
}

enum _eForwards
{
    fwd_StartHolliday,
    fwd_EndHolliday,
    fwd_StartNight,
    fwd_EndNight,
    fwd_SetGifts,
    fwd_RemoveGifts,
    fwd_SetVipTest,
    fwd_RemoveVipTest,
    fwd_SetClients,
    fwd_RemoveClients
}

enum any: TypeClient (<<=1)
{
    Client_None = 0,
    Client_NonSteam = 1,
    Client_Steam,
    Client_GS,
    Client_Next,
    Client_All
}

enum _TrieData
{
    td_iAutoClear,
    td_iLength,
    td_bitFlags,
    td_szIgnor[64]
}

enum _eVipTest
{
    vt_iAutoClear,
    vt_iLength,
    vt_bitFlags,
    vt_szIgnorFlags[64]
}

new g_playersData[MAX_PLAYERS + 1][_ePlayersData],
    g_eFreeVip[_eFreeData],
    g_eVipTest[_eVipTest],
    g_pCvar[PCVAR],
    g_eForwards[_eForwards];

new g_iType, g_iGiftType;
new Array: g_aNightsSettings, Array: g_aHollidaySettings, Array: g_aGifts, Array: g_aClients, Trie: g_tTestsCmds;
new g_syncHud;

new const g_szTestsFile[] = "fv_tests_data";
new g_hTestsVault = INVALID_HANDLE;

#if !defined _authemu_included
new  Trie: g_tGsClients;
#endif

public plugin_init()
{
    register_plugin(Plugin_Name, Plugin_Version, Plugin_Author);
    register_dictionary("gm_free_vip.txt");

    g_syncHud = CreateHudSyncObj();

    g_aNightsSettings   = ArrayCreate(_aTempData);
    g_aHollidaySettings = ArrayCreate(_aTempData);
    g_aGifts            = ArrayCreate(_aTempData);
    g_aClients          = ArrayCreate(_aTempData);
    g_tTestsCmds        = TrieCreate();

    #if !defined _authemu_included
    g_tGsClients = TrieCreate();
    #endif

    RegisterHooks();
    RegisterForwards();
    RegisterCmds();
    CreateCvars();
  
    #if defined INFINITE_ROUND
    if (LoadSettings(0))
        set_task_ex(120.0, "@RoundEnd_Pre", TASK_INFINITE, .flags = SetTask_Repeat);
    #else
    LoadSettings(0);
    #endif
}

public plugin_cfg()
{
    if ((g_hTestsVault = nvault_open(g_szTestsFile)) == INVALID_HANDLE)
    {
        set_fail_state(fmt("FV_CANT_OPEN_NVAULT_FILE", g_szTestsFile));
    }
    else
    {
        if (g_eVipTest[vt_iAutoClear]) nvault_prune(g_hTestsVault, 0, get_systime() - g_eVipTest[vt_iAutoClear]);
    }

  
    #if !defined _authemu_included
    load_gsclient();
    #endif
}

public plugin_end()
{
    if (g_hTestsVault != INVALID_HANDLE) nvault_close(g_hTestsVault);

    #if !defined _authemu_included
    write_gsclient();
    #endif

    #if defined INFINITE_ROUND
    remove_task(TASK_INFINITE);
    #endif
}

public plugin_natives()
{
    register_native("fv_is_holliday", "native_fv_is_holliday");
    register_native("fv_is_nights", "native_fv_is_nights");
    register_native("fv_is_user_gifts", "native_fv_is_user_gifts");
    register_native("fv_get_holliday_flags", "native_fv_get_holliday_flags");
    register_native("fv_get_nights_flags", "native_fv_get_nights_flags");
    register_native("fv_get_gifts_flags", "native_fv_get_gifts_flags");
    register_native("fv_get_ignor_flags_holliday", "native_fv_get_ignor_flags_holliday");
    register_native("fv_get_ignor_flags_nights", "native_fv_get_ignor_flags_nights");
    register_native("fv_get_time_end_gifts", "native_fv_get_time_end_gifts");
    register_native("fv_get_user_flags", "native_fv_get_user_flags");
    register_native("fv_get_viptest_flags", "native_fv_get_viptest_flags");
    register_native("fv_is_user_gsclient", "native_fv_is_user_gsclient");
    register_native("fv_get_ignor_flags_viptest", "native_fv_get_ignor_flags_viptest");
    register_native("fv_is_user_viptest", "native_fv_is_user_viptest");
}

public ReloadSettings(iPlayer, level, cid)
{
    if (!cmd_access(iPlayer, level, cid, 1))
    {
        return PLUGIN_HANDLED;
    }

    ArrayClear(g_aNightsSettings);
    ArrayClear(g_aHollidaySettings);
    ArrayClear(g_aGifts);
    ArrayClear(g_aClients);
    TrieClear(g_tTestsCmds);

    console_print(iPlayer, "reload settings");

    LoadSettings(iPlayer);

    return PLUGIN_CONTINUE;
}

public LoadSettings(iPlayer)
{
    static szFile[PLATFORM_MAX_PATH];

    if (szFile[0] == EOS)
    {
        get_localinfo("amxx_configsdir", szFile, charsmax(szFile));
        strcat(szFile, SettingsDir, PLATFORM_MAX_PATH);
    }

    new INIParser: hParser = INI_CreateParser(),
        bool: iRet = true;
    INI_SetReaders(hParser, "ReadSettings", "ReadSection");

    if (!INI_ParseFile(hParser, szFile))
    {
        set_fail_state("%l %l", "FV_FILE_CANT", file_exists(szFile) ? "FV_READ" : "FV_FIND", szFile);
        iRet = false;
    }

    if (iPlayer) console_print(iPlayer, "reload settings end.^nSize Gift: %i | Size Night: %i | Size Holliday: %i | Size Clients: %i", ArraySize(g_aGifts), ArraySize(g_aNightsSettings), ArraySize(g_aHollidaySettings), ArraySize(g_aClients));
    INI_DestroyParser(hParser);
    return iRet;
}

public client_putinserver(iPlayer)
{
    g_playersData[iPlayer][pd_bitFlags] = get_user_flags(iPlayer);
}


public client_authorized(iPlayer, const szAuthid[])
{
    copy(g_playersData[iPlayer][pd_szAuthid], MAX_AUTHID_LENGTH - 1, szAuthid);

    if (is_user_steam(iPlayer))
    {
        g_playersData[iPlayer][pd_bitClient] |= Client_Steam;
    }
  
    #if defined _authemu_included

    if (is_user_authemu(iPlayer))
    {
        g_playersData[iPlayer][pd_bitClient] |= Client_GS;
    }

    #else

    if (TrieKeyExists(g_tGsClients, szAuthid))
    {
        g_playersData[iPlayer][pd_bitClient] |= Client_GS;
        TrieDeleteKey(g_tGsClients, szAuthid);
    }

    #endif

    if (!g_playersData[iPlayer][pd_bitClient]) g_playersData[iPlayer][pd_bitClient] |= Client_NonSteam;

    new szData[1];

    if (nvault_lookup(g_hTestsVault, szAuthid, szData, 1, g_playersData[iPlayer][pd_iTestEnd]))
    {
        if (g_playersData[iPlayer][pd_iTestEnd] > get_systime())
        {
            if (!UTIL_IsIgnorFlags(get_user_flags(iPlayer), g_eVipTest[vt_szIgnorFlags]))
            {                   
                g_playersData[iPlayer][pd_bitTestsSetFlags] = add_user_flags(iPlayer, g_eVipTest[vt_bitFlags]);
                ExecuteForward(g_eForwards[fwd_SetVipTest], _, iPlayer,  g_playersData[iPlayer][pd_szAuthid], g_playersData[iPlayer][pd_iTestEnd], g_playersData[iPlayer][pd_bitFlags], g_playersData[iPlayer][pd_bitTestsSetFlags]);
            }

        }
    }
}

#if defined _next_client_api_included
public ncl_client_api_ready(iPlayer)
{
    if (ncl_is_using_nextclient(iPlayer) == NCL_USING_VERIFICATED)
        g_playersData[iPlayer][pd_bitClient] |= Client_Next;
}
#endif

public client_disconnected(iPlayer)
{
    arrayset(g_playersData[iPlayer], 0, _ePlayersData);
}

@CBasePlayer_OnSpawnEquip_Post(const iPlayer)
{
    new bitFlags;

    if (g_playersData[iPlayer][pd_iTestEnd] < get_systime() && g_playersData[iPlayer][pd_bitTestsSetFlags])
    {
        remove_user_flags(iPlayer, g_playersData[iPlayer][pd_bitTestsSetFlags]);
        g_playersData[iPlayer][pd_bEnd] = true;
        SendAdvert(iPlayer, FV_TEST);
        ExecuteForward(g_eForwards[fwd_RemoveVipTest], _, iPlayer,  g_playersData[iPlayer][pd_szAuthid], g_playersData[iPlayer][pd_bitFlags], g_playersData[iPlayer][pd_bitSetFlags]);
        g_playersData[iPlayer][pd_bitTestsSetFlags] = 0;
    }

    if (IsGift(iPlayer, g_playersData[iPlayer][pd_bitSetFlags]))
    {
        g_playersData[iPlayer][pd_bSet] = true;

        bitFlags = add_user_flags(iPlayer, g_playersData[iPlayer][pd_bitSetFlags]);
        if (bitFlags) g_playersData[iPlayer][pd_bitSetFlags] = bitFlags;
      
        SendAdvert(iPlayer, FV_GIFTS);
    }
    else
    if (g_playersData[iPlayer][pd_bSet])
    {
        ExecuteForward(g_eForwards[fwd_RemoveGifts], _, iPlayer, g_playersData[iPlayer][pd_szAuthid], g_playersData[iPlayer][pd_bitFlags], g_playersData[iPlayer][pd_bitSetFlags]);
        remove_user_flags(iPlayer, g_playersData[iPlayer][pd_bitSetFlags]);
        g_playersData[iPlayer][pd_bEnd] = true;
        g_playersData[iPlayer][pd_bSet] = false;
        SendAdvert(iPlayer, FV_GIFTS);
    }

    if (IsClients(iPlayer, g_playersData[iPlayer][pd_bitAdvClient], bitFlags))
    {
        g_playersData[iPlayer][pd_bCSet] = true;
      
        bitFlags = add_user_flags(iPlayer, bitFlags);
        if (bitFlags) g_playersData[iPlayer][pd_bitClientsSetFlags] = bitFlags;

        SendAdvert(iPlayer, FV_CLIENTS);

        ExecuteForward(g_eForwards[fwd_SetClients], _, iPlayer, g_playersData[iPlayer][pd_szAuthid], g_playersData[iPlayer][pd_bitFlags], g_playersData[iPlayer][pd_bitClientsSetFlags]);
    }
    else
    if (g_playersData[iPlayer][pd_bCSet])
    {
        g_playersData[iPlayer][pd_bEnd] = true;

        remove_user_flags(iPlayer, g_playersData[iPlayer][pd_bitClientsSetFlags]);
        g_playersData[iPlayer][pd_bCSet] = false;
        ExecuteForward(g_eForwards[fwd_RemoveClients], _, iPlayer, g_playersData[iPlayer][pd_szAuthid], g_playersData[iPlayer][pd_bitFlags], g_playersData[iPlayer][pd_bitClientsSetFlags]);
    
        SendAdvert(iPlayer, FV_CLIENTS);
    }

    if (!g_eFreeVip[bHolliday] && g_playersData[iPlayer][pd_bHSet])
    {
        g_playersData[iPlayer][pd_bEnd] = true;

        SendAdvert(iPlayer, FV_HOLLIDAYS);
        remove_user_flags(iPlayer, g_eFreeVip[bitHollidayFlags]);
        add_user_flags(iPlayer, g_playersData[iPlayer][pd_bitFlags] | g_playersData[iPlayer][pd_bitSetFlags]);

        g_playersData[iPlayer][pd_bHSet] = false;
    }
  

    if (!g_eFreeVip[bNight] && g_playersData[iPlayer][pd_bNSet])
    {
        g_playersData[iPlayer][pd_bEnd] = true;

        SendAdvert(iPlayer, FV_NIGHTS);
        remove_user_flags(iPlayer, g_eFreeVip[bitNightsFlags]);
        add_user_flags(iPlayer, g_playersData[iPlayer][pd_bitFlags] | g_playersData[iPlayer][pd_bitSetFlags]);

        g_playersData[iPlayer][pd_bNSet] = false;
    }


    if (g_eFreeVip[bHolliday] && !g_playersData[iPlayer][pd_bHSet])
    {
        SendAdvert(iPlayer, FV_HOLLIDAYS);
        if (!UTIL_IsIgnorFlags(get_user_flags(iPlayer), g_eFreeVip[szIgnorHollidayFlags]))
        {
            add_user_flags(iPlayer, g_eFreeVip[bitHollidayFlags]);
            g_playersData[iPlayer][pd_bHSet] = true;
        }
    }
    else
    if (g_eFreeVip[bNight] && !g_playersData[iPlayer][pd_bNSet])
    {
        SendAdvert(iPlayer, FV_NIGHTS);
        if (!UTIL_IsIgnorFlags(get_user_flags(iPlayer), g_eFreeVip[szIgnorNightsFlags]))
        {
            add_user_flags(iPlayer, g_eFreeVip[bitNightsFlags]);
            g_playersData[iPlayer][pd_bNSet] = true;
        }
    }

    --g_playersData[iPlayer][pd_iFreq];

    if (g_playersData[iPlayer][pd_iFreq] < 0 && g_pCvar[cvar_iFreq]) g_playersData[iPlayer][pd_iFreq] = g_pCvar[cvar_iFreq];

    return HC_CONTINUE;
}

@RoundEnd_Pre()
{
    if (IsHolliday(g_eFreeVip[bitHollidayFlags], g_eFreeVip[szIgnorHollidayFlags]))
    {
        if (g_eFreeVip[bNight])
        {
            g_eFreeVip[bNight] = false;
            ExecuteForward(g_eForwards[fwd_EndNight], _, g_eFreeVip[bitNightsFlags], g_eFreeVip[szIgnorNightsFlags]);
        }
      
        g_eFreeVip[bHolliday] = true;
    }
    else
    if (IsNight(g_eFreeVip[bitNightsFlags], g_eFreeVip[szIgnorNightsFlags]))
    {
        if (g_eFreeVip[bHolliday])
        {
            g_eFreeVip[bHolliday] = false;
            ExecuteForward(g_eForwards[fwd_EndHolliday], _, g_eFreeVip[bitHollidayFlags], g_eFreeVip[szIgnorHollidayFlags]);
        }

        g_eFreeVip[bNight] = true;
    }
    else
    if (g_eFreeVip[bHolliday] || g_eFreeVip[bNight])
    {
        if (g_eFreeVip[bHolliday])
        {
            ExecuteForward(g_eForwards[fwd_EndHolliday], _, g_eFreeVip[bitHollidayFlags], g_eFreeVip[szIgnorHollidayFlags]);
        }

        if (g_eFreeVip[bNight])
        {
            ExecuteForward(g_eForwards[fwd_EndNight], _, g_eFreeVip[bitNightsFlags], g_eFreeVip[szIgnorNightsFlags]);
        }

        g_eFreeVip[bHolliday] = false;
        g_eFreeVip[bNight] = false;
    }
}

public ReloadAdmins()
{
    new szData[1], TypeClient: bitClient;
  
    for (new iPlayer = 1; iPlayer <= MaxClients; iPlayer++)
    {
        bitClient = g_playersData[iPlayer][pd_bitClient];

        arrayset(g_playersData[iPlayer], 0, _ePlayersData);

        get_user_authid(iPlayer, g_playersData[iPlayer][pd_szAuthid], MAX_AUTHID_LENGTH - 1);
        g_playersData[iPlayer][pd_bitClient] = bitClient;

        if (nvault_lookup(g_hTestsVault, g_playersData[iPlayer][pd_szAuthid], szData, 1, g_playersData[iPlayer][pd_iTestEnd]))
        {
            if (g_playersData[iPlayer][pd_iTestEnd] > get_systime())
            {
                if (!UTIL_IsIgnorFlags(get_user_flags(iPlayer), g_eVipTest[vt_szIgnorFlags]))               
                    g_playersData[iPlayer][pd_bitTestsSetFlags] = add_user_flags(iPlayer, g_eVipTest[vt_bitFlags]);

            }
        }
    }
}

public clcmd_say_handler(iPlayer)
{
    new szTemp[196], szMsg[128];

    read_args(szTemp, charsmax(szTemp));
    remove_quotes(szTemp);

    if (!UTIL_IsDefaultChatCmd(szTemp, charsmax(szTemp))) return PLUGIN_CONTINUE;
  
    if (!TrieKeyExists(g_tTestsCmds, szTemp)) return PLUGIN_CONTINUE;

    if (g_playersData[iPlayer][pd_iTestEnd] && !g_eVipTest[vt_iAutoClear])
    {
        formatex(szMsg, charsmax(szMsg), "%l", "FV_YOU_CANT_USE_VIPTEST");
        format_msg(szMsg, charsmax(szMsg));
        client_print_color(iPlayer, print_team_red, "%l %s", "FV_PREFIX", szMsg);
        return PLUGIN_HANDLED;
    }

    if (UTIL_IsIgnorFlags(get_user_flags(iPlayer), g_eVipTest[vt_szIgnorFlags]))
    {
        formatex(szMsg, charsmax(szMsg), "%l", "FV_YOU_CANT_HAVE_VIPTEST");
        format_msg(szMsg, charsmax(szMsg));
        client_print_color(iPlayer, print_team_red, "%l %s", "FV_PREFIX", szMsg);
        return PLUGIN_HANDLED;
    }
  
    new iTimeStamp = get_systime();
  
    if (g_playersData[iPlayer][pd_iTestEnd] < iTimeStamp)
    {
        if (g_playersData[iPlayer][pd_iTestEnd] + g_eVipTest[vt_iAutoClear] < iTimeStamp)
        {
            g_playersData[iPlayer][pd_iTestEnd] = iTimeStamp + g_eVipTest[vt_iLength];
            SaveUserNVault(iPlayer);
            SendAdvert(iPlayer, FV_TEST);
            g_playersData[iPlayer][pd_bitTestsSetFlags] = add_user_flags(iPlayer, g_eVipTest[vt_bitFlags]);
            ExecuteForward(g_eForwards[fwd_SetVipTest], _, iPlayer, g_playersData[iPlayer][pd_szAuthid], g_playersData[iPlayer][pd_iTestEnd], g_playersData[iPlayer][pd_bitFlags], g_playersData[iPlayer][pd_bitTestsSetFlags]);
            return PLUGIN_HANDLED;
        }
        else
        {
            new szTimeOut[32];
          
            format_time(szTimeOut, charsmax(szTimeOut), "%d.%m.%y %H:%M:%S", g_playersData[iPlayer][pd_iTestEnd] + g_eVipTest[vt_iAutoClear]);
            formatex(szMsg, charsmax(szMsg), "%l", "FV_TIMEOUT_VIP");

            format_msg(szMsg, charsmax(szMsg));
            replace_all(szMsg, charsmax(szMsg), "[timeout]", szTimeOut);
            client_print_color(iPlayer, print_team_red, "%l %s", "FV_PREFIX", szMsg);
            return PLUGIN_HANDLED;
        }
    }
    else
    {
        new szEnd[32];
          
        format_time(szEnd, charsmax(szEnd), "%d.%m.%y %H:%M:%S", g_playersData[iPlayer][pd_iTestEnd]);
        formatex(szMsg, charsmax(szMsg), "%l", "FV_YOU_HAVE_VIPTEST");

        format_msg(szMsg, charsmax(szMsg));
        replace_all(szMsg, charsmax(szMsg), "[endtime]", szEnd); 
        client_print_color(iPlayer, print_team_red, "%l %s", "FV_PREFIX", szMsg);
        return PLUGIN_HANDLED;
    }
}

public bool: ReadSettings(INIParser: hParser, szBuffer[])
{
    if (g_iType == FV_NONE) return true;
  
    new aTempData[_aTempData];

    if (!parse_settings(szBuffer,
        aTempData[temp_iStart],
        aTempData[temp_iEnd],
        aTempData[temp_bitFlags],
        aTempData[temp_szArg]))
    {
        return true;
    }

    if (g_iType == FV_HOLLIDAYS) ArrayPushArray(g_aHollidaySettings, aTempData);
    else
    if (g_iType == FV_NIGHTS) ArrayPushArray(g_aNightsSettings, aTempData);
    else
    if (g_iType == FV_GIFTS) ArrayPushArray(g_aGifts, aTempData);
    else
    if (g_iType == FV_CLIENTS) ArrayPushArray(g_aClients, aTempData);

    return true;
}

public bool: ReadSection(INIParser: hParser, const szSection[])
{
    switch (szSection[0])
    {
        case 'H': {g_iType = FV_HOLLIDAYS;}
        case 'N': {g_iType = FV_NIGHTS;}
        case 'G':
        {
            switch (szSection[10])
            {
                case 'S': {g_iGiftType = FV_STEAM;}
                case 'N': {g_iGiftType = FV_IP;}
                case 'I': {g_iGiftType = FV_NAME;}
                default: {g_iType = FV_NONE; log_amx("%l", "FV_BAD_SECTION", szSection);}
            }

            g_iType = FV_GIFTS;
        }
        case 'T': {g_iType = FV_TEST;}
        case 'C': {g_iType = FV_CLIENTS;}
        default: {g_iType = FV_NONE; log_amx("%l", "FV_BAD_SECTION", szSection);}
    }

    return true;
}

#if !defined _authemu_included
public SetStatusGSClient(const iPlayer)
{
    g_playersData[iPlayer][pd_bitClient] |= Client_GS;
}
#endif

RegisterHooks()
{
    #if !defined _authemu_included
    register_clcmd("gsc_user", "SetStatusGSClient");
    #endif

    #if !defined INFINITE_ROUND
    RegisterHookChain(RG_RoundEnd, "@RoundEnd_Pre", .post = false);
    #endif
    RegisterHookChain(RG_CBasePlayer_OnSpawnEquip, "@CBasePlayer_OnSpawnEquip_Post", .post = true);
}

RegisterForwards()
{
    g_eForwards[fwd_StartHolliday]   = CreateMultiForward("FV_StartHolliday", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_STRING);
    g_eForwards[fwd_EndHolliday]     = CreateMultiForward("FV_EndHolliday", ET_IGNORE, FP_CELL, FP_STRING);
    g_eForwards[fwd_StartNight]      = CreateMultiForward("FV_StartNights", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_STRING);
    g_eForwards[fwd_EndNight]        = CreateMultiForward("FV_EndNights", ET_IGNORE, FP_CELL, FP_STRING);
    g_eForwards[fwd_SetGifts]        = CreateMultiForward("FV_SetGifts", ET_IGNORE, FP_CELL, FP_STRING, FP_CELL, FP_CELL, FP_CELL, FP_CELL);
    g_eForwards[fwd_RemoveGifts]     = CreateMultiForward("FV_RemoveGifts", ET_IGNORE, FP_CELL, FP_STRING, FP_CELL, FP_CELL);
    g_eForwards[fwd_SetVipTest]      = CreateMultiForward("FV_SetVipTest", ET_IGNORE, FP_CELL, FP_STRING, FP_CELL, FP_CELL, FP_CELL);
    g_eForwards[fwd_RemoveVipTest]   = CreateMultiForward("FV_RemoveVipTest", ET_IGNORE, FP_CELL, FP_STRING, FP_CELL, FP_CELL);
    g_eForwards[fwd_SetClients]      = CreateMultiForward("FV_SetClients", ET_IGNORE, FP_CELL, FP_STRING, FP_CELL, FP_CELL);
    g_eForwards[fwd_RemoveClients]   = CreateMultiForward("FV_RemoveClients", ET_IGNORE, FP_CELL, FP_STRING, FP_CELL, FP_CELL);
}

RegisterCmds()
{
    register_concmd("amx_reloadadmins", "ReloadAdmins");
    register_clcmd("say_team", "clcmd_say_handler");
    register_clcmd("say", "clcmd_say_handler");
    register_clcmd("fv_reload_vips", "ReloadSettings", ADMIN_RCON, GetCvarDesc("FV_RELOAD_VIPS"));
}

CreateCvars()
{
    bind_pcvar_num(create_cvar("fv_send_chat", "1",
        .description = GetCvarDesc("FV_CVAR_SEND_CHAT"),
        .has_min = true, .min_val = 0.0,
        .has_max = true, .max_val = 1.0),
        g_pCvar[cvar_sendChat]
    );

    bind_pcvar_num(create_cvar("fv_show_hud", "1",
        .description = GetCvarDesc("FV_CVAR_SHOW_HUD"),
        .has_min = true, .min_val = 0.0,
        .has_max = true, .max_val = 1.0),
        g_pCvar[cvar_showHud]
    );

    bind_pcvar_num(create_cvar("fv_freq_msg", "3",
        .description = GetCvarDesc("FV_CVAR_FREQ_MSG"),
        .has_min = true, .min_val = 0.0),
        g_pCvar[cvar_iFreq]
    );

    bind_pcvar_string(create_cvar("fv_hud_settings", "0 255 0 -1.0 0.75 0 0.0 6.0 0.1 0.2",
        .description = GetCvarDesc("FV_CVAR_HUD_SETTINGS")),
        g_pCvar[cvar_szHud], charsmax(g_pCvar[cvar_szHud])
    );

    create_cvar("fv_version", Plugin_Version, (FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED));

    AutoExecConfig(true, "cvars", "gm_plugins/free_vip");
}

stock bool: IsGift(const iPlayer, &bitFlags)
{
    new iSize = ArraySize(g_aGifts);

    if (!iSize) return false;

    new aTempData[_aTempData];

    new szIp[MAX_IP_LENGTH], szName[MAX_NAME_LENGTH];
    get_user_ip(iPlayer, szIp, charsmax(szIp));
    get_user_name(iPlayer, szName, charsmax(szName));
  
    for (new i; i < iSize; i++)
    {
        ArrayGetArray(g_aGifts, i, aTempData);

        switch (aTempData[temp_szArg][0])
        {
            case 'S': {if (strcmp(aTempData[temp_szArg][1], g_playersData[iPlayer][pd_szAuthid]) != 0) continue;}
            case 'N': {if (strcmp(aTempData[temp_szArg][1], szIp) != 0) continue;}
            case 'I': {if (strcmp(aTempData[temp_szArg][1], szName) != 0) continue;}
        }

        if (UTIL_IsTimeWithin(aTempData[temp_iStart], aTempData[temp_iEnd]))
        {
            if (!g_playersData[iPlayer][pd_bSet])
            {
                ExecuteForward(g_eForwards[fwd_SetGifts], _, iPlayer, g_playersData[iPlayer][pd_szAuthid], aTempData[temp_iStart], aTempData[temp_iEnd], get_user_flags(iPlayer), aTempData[temp_bitFlags]);
                bitFlags = aTempData[temp_bitFlags];
                g_playersData[iPlayer][pd_iEnd] = aTempData[temp_iEnd];
            }

            return true;
        }
    }

    return false;
}

stock bool: IsClients(const iPlayer, &TypeClient: bitType, &bitFlags)
{
    new iSize = ArraySize(g_aClients);

    if (!iSize) return false;

    new aTempData[_aTempData];

    for (new i; i < iSize; i++)
    {
        ArrayGetArray(g_aClients, i, aTempData);
      
        switch (aTempData[temp_iStart])
        {
            case 1:
            {
                if (g_playersData[iPlayer][pd_bitClient] != Client_Steam) continue;
                if (g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer) & ~g_playersData[iPlayer][pd_bitClientsSetFlags], aTempData[temp_szArg])) continue;
                else 
                if (!g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer), aTempData[temp_szArg])) continue;
                  

                bitType = Client_Steam;
                bitFlags = aTempData[temp_bitFlags];
                return true;
            }

            case 2:
            {
                if (g_playersData[iPlayer][pd_bitClient] != Client_GS) continue;
                if (g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer) & ~g_playersData[iPlayer][pd_bitClientsSetFlags], aTempData[temp_szArg])) continue;
                else 
                if (!g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer), aTempData[temp_szArg])) continue;

                bitType = Client_GS;
                bitFlags = aTempData[temp_bitFlags];
                return true;
            }

            case 3:
            {
                if (g_playersData[iPlayer][pd_bitClient] != Client_Next) continue;
                if (g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer) & ~g_playersData[iPlayer][pd_bitClientsSetFlags], aTempData[temp_szArg])) continue;
                else 
                if (!g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer), aTempData[temp_szArg])) continue;
              
                bitType = Client_Next;
                bitFlags = aTempData[temp_bitFlags];
                return true;
            }

            case 4:
            {
                if (g_playersData[iPlayer][pd_bitClient] != (Client_Steam | Client_GS)) continue;
                if (g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer) & ~g_playersData[iPlayer][pd_bitClientsSetFlags], aTempData[temp_szArg])) continue;
                else 
                if (!g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer), aTempData[temp_szArg])) continue;
              
                bitType = (Client_Steam | Client_GS);
                bitFlags = aTempData[temp_bitFlags];
                return true;
            }

            case 5:
            {
                if (g_playersData[iPlayer][pd_bitClient] != (Client_Steam | Client_Next)) continue;
                if (g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer) & ~g_playersData[iPlayer][pd_bitClientsSetFlags], aTempData[temp_szArg])) continue;
                else 
                if (!g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer), aTempData[temp_szArg])) continue;
              
                bitType = (Client_Steam | Client_Next);
                bitFlags = aTempData[temp_bitFlags];
                return true;
            }
          
            case 6:
            {
                if (g_playersData[iPlayer][pd_bitClient] != Client_NonSteam) continue;
                if (g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer) & ~g_playersData[iPlayer][pd_bitClientsSetFlags], aTempData[temp_szArg])) continue;
                else 
                if (!g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer), aTempData[temp_szArg])) continue;
              
                bitType = Client_NonSteam;
                bitFlags = aTempData[temp_bitFlags];
                return true;
            }

            case 7:
            {
                if (g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer) & ~g_playersData[iPlayer][pd_bitClientsSetFlags], aTempData[temp_szArg])) continue;
                else 
                if (!g_playersData[iPlayer][pd_bCSet] && UTIL_IsIgnorFlags(get_user_flags(iPlayer), aTempData[temp_szArg])) continue;

                bitType = Client_All;
                bitFlags = aTempData[temp_bitFlags];
                return true;
            }
        }
    }

    return false;
}

stock bool: IsNight(&bitFlags, szIgnor[])
{
    new aTempData[_aTempData];
    new iWeekDay = UTIL_GetWeekDay();

    ArrayGetArray(g_aNightsSettings, --iWeekDay, aTempData);
  
    if (get_systime() < aTempData[temp_iStart])
    {
        if (!iWeekDay) ArrayGetArray(g_aNightsSettings, 6, aTempData);
        else ArrayGetArray(g_aNightsSettings, --iWeekDay, aTempData);
    }
  
    if (!aTempData[temp_iStart]) return false;

    if (UTIL_IsTimeWithin(aTempData[temp_iStart], aTempData[temp_iEnd]))
    {
        if (!g_eFreeVip[bNight])
        {
            ExecuteForward(g_eForwards[fwd_StartNight], _, aTempData[temp_iStart], aTempData[temp_iEnd], aTempData[temp_bitFlags], aTempData[temp_szArg]);
            bitFlags = aTempData[temp_bitFlags];
            copy(szIgnor, charsmax(aTempData[temp_szArg]), aTempData[temp_szArg]);
        }

        return true;
    }

    return false;
} 

stock bool: IsHolliday(&bitFlags, szIgnor[])
{
    new iSize = ArraySize(g_aHollidaySettings);

    if (!iSize) return false;

    new aTempData[_aTempData];

    for (new i; i < iSize ;i++)
    {
        ArrayGetArray(g_aHollidaySettings, i, aTempData);

        if (!UTIL_IsTimeWithin(aTempData[temp_iStart], aTempData[temp_iEnd])) continue;

        if (!g_eFreeVip[bHolliday])
        {
            ExecuteForward(g_eForwards[fwd_StartHolliday], _, aTempData[temp_iStart], aTempData[temp_iEnd], aTempData[temp_bitFlags], aTempData[temp_szArg]);

            bitFlags = aTempData[temp_bitFlags];
            copy(szIgnor, charsmax(aTempData[temp_szArg]), aTempData[temp_szArg]);
        }

        return true;
    }

    return false;
}

stock bool: SendAdvert(const iPlayer, const iType)
{
    if (iType != FV_TEST && !g_playersData[iPlayer][pd_bEnd])
    {
        if (g_playersData[iPlayer][pd_iFreq]) return false;
        if (g_playersData[iPlayer][pd_iFreq] < 0) return false;
    }

    g_playersData[iPlayer][pd_bEnd] = false;

    new szOther[32], szFlags[32];

    switch (iType)
    {
        case FV_GIFTS:
        {
            get_flags(g_playersData[iPlayer][pd_bitSetFlags], szFlags, charsmax(szFlags));

            if (szFlags[0] == EOS) return false;

            if (g_playersData[iPlayer][pd_bSet])
            {
                SendChat(iPlayer, szFlags, 0);
                ShowHud(iPlayer, szFlags, 0);
            }
            else
            {
                SendChat(iPlayer, szFlags, 1);
                ShowHud(iPlayer, szFlags, 1);
            }
        }

        case FV_HOLLIDAYS:
        {
            if (g_eFreeVip[bHolliday])
            {
                UTIL_GetOtherFlags(iPlayer, g_eFreeVip[bitHollidayFlags], szOther);
                get_flags(g_eFreeVip[bitHollidayFlags], szFlags, charsmax(szFlags));

                if (szOther[0] != EOS && !UTIL_IsIgnorFlags(get_user_flags(iPlayer), g_eFreeVip[szIgnorHollidayFlags]))
                {
                    SendChat(iPlayer, szOther, 2);
                    ShowHud(iPlayer, szOther, 2);
                }
                else
                {
                    SendChat(iPlayer, szFlags, 3);
                    ShowHud(iPlayer, szFlags, 3);
                }
            }
            else
            {
                UTIL_GetOtherFlags(iPlayer, g_eFreeVip[bitHollidayFlags], szOther);
                get_flags(g_eFreeVip[bitHollidayFlags], szFlags, charsmax(szFlags));
              
                if (szOther[0] != EOS && !UTIL_IsIgnorFlags(get_user_flags(iPlayer), g_eFreeVip[szIgnorHollidayFlags]))
                {
                    SendChat(iPlayer, szOther, 4);
                    ShowHud(iPlayer, szOther, 4);
                }
                else
                {
                    SendChat(iPlayer, szFlags, 5);
                    ShowHud(iPlayer, szFlags, 5);
                }
            }
        }

        case FV_NIGHTS:
        {
            if (g_eFreeVip[bNight])
            {
                UTIL_GetOtherFlags(iPlayer, g_eFreeVip[bitNightsFlags], szOther);
                get_flags(g_eFreeVip[bitNightsFlags], szFlags, charsmax(szFlags));

                if (szOther[0] != EOS && !UTIL_IsIgnorFlags(get_user_flags(iPlayer), g_eFreeVip[szIgnorNightsFlags]))
                {
                    SendChat(iPlayer, szOther, 6);
                    ShowHud(iPlayer, szOther, 6);
                }
                else
                {
                    SendChat(iPlayer, szFlags, 7);
                    ShowHud(iPlayer, szFlags, 7);
                }
            }
            else
            {
                UTIL_GetOtherFlags(iPlayer, g_eFreeVip[bitNightsFlags], szOther);
                get_flags(g_eFreeVip[bitNightsFlags], szFlags, charsmax(szFlags));

                if (szOther[0] != EOS && !UTIL_IsIgnorFlags(get_user_flags(iPlayer), g_eFreeVip[szIgnorNightsFlags]))
                {
                    SendChat(iPlayer, szOther, 8);
                    ShowHud(iPlayer, szOther, 8);
                }
                else
                {
                    SendChat(iPlayer, szFlags, 9);
                    ShowHud(iPlayer, szFlags, 9);
                }
            }
        }

        case FV_CLIENTS:
        {
            get_flags(g_playersData[iPlayer][pd_bitClientsSetFlags], szFlags, charsmax(szFlags));

            if (g_playersData[iPlayer][pd_bitAdvClient] == Client_Steam)
            {
                SendChat(iPlayer, szFlags, 10);
                ShowHud(iPlayer, szFlags, 10);
            }
            else
            if (g_playersData[iPlayer][pd_bitAdvClient] == Client_GS)
            {
                SendChat(iPlayer, szFlags, 11);
                ShowHud(iPlayer, szFlags, 11);
            }
            else
            if (g_playersData[iPlayer][pd_bitAdvClient] == Client_Next)
            {
                SendChat(iPlayer, szFlags, 12);
                ShowHud(iPlayer, szFlags, 12);
            }
            else
            if (g_playersData[iPlayer][pd_bitAdvClient] == (Client_Steam | Client_GS))
            {
                SendChat(iPlayer, szFlags, 13);
                ShowHud(iPlayer, szFlags, 13);
            }
            else
            if (g_playersData[iPlayer][pd_bitAdvClient] == (Client_Steam | Client_Next))
            {
                SendChat(iPlayer, szFlags, 14);
                ShowHud(iPlayer, szFlags, 14);
            }
            else
            if (g_playersData[iPlayer][pd_bitAdvClient] == Client_NonSteam)
            {
                SendChat(iPlayer, szFlags, 15);
                ShowHud(iPlayer, szFlags, 15);
            }
            else
            if (g_playersData[iPlayer][pd_bitAdvClient] == Client_All)
            {
                SendChat(iPlayer, szFlags, 16);
                ShowHud(iPlayer, szFlags, 16);
            }
            else
            {
                SendChat(iPlayer, szFlags, 17);
                ShowHud(iPlayer, szFlags, 17);
            }
        }

        case FV_TEST:
        {
            UTIL_GetOtherFlags(iPlayer, g_eVipTest[vt_bitFlags], szOther);
            get_flags(g_playersData[iPlayer][pd_bitTestsSetFlags], szFlags, charsmax(szFlags));

            if (!g_playersData[iPlayer][pd_bitTestsSetFlags])
            {
                SendChat(iPlayer, szOther, 18);
                ShowHud(iPlayer, szOther, 18);
            }
            else
            {
                SendChat(iPlayer, szFlags, 19);
                ShowHud(iPlayer, szFlags, 19);
            }
        }

    }

    return true;
}

stock bool: ShowHud(const iPlayer, const szFlags[], const iMsg)
{
    if (!g_pCvar[cvar_showHud]) return false;

    new szMsg[192], szEnd[24];

    switch (iMsg)
    {
        case 0:
        {
            format_time(szEnd, charsmax(szEnd), "%d.%m.%y %H:%M", g_playersData[iPlayer][pd_iEnd]);
            formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_GIFTS");
        }

        case 1: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_REMOVE_GIFTS");}
    // -------------------------------------------------------------------------------
        case 2: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_HOLLIDAY");}

        case 3: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_NOSET_HOLLIDAY");}

        case 4: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_REMOVE_HOLLIDAY");}

        case 5: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_NOREMOVE_HOLIDAY");}
    // -------------------------------------------------------------------------------
        case 6: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_NIGHTS");}

        case 7: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_NOSET_NIGHTS");}

        case 8: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_REMOVE_NIGHTS");}

        case 9: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_NOREMOVE_NIGHTS");}
    // -------------------------------------------------------------------------------
        case 10: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_STEAM");}

        case 11: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_GSCLIENT");}

        case 12: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_NEXTCLIENT");}

        case 13: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_STEAM_GSCLIENT");}

        case 14: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_STEAM_NEXTCLIENT");}

        case 15: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_NONSTEAM");}

        case 16: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_ALL");}

        case 17: {formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_REMOVE_CLIENTS");}
    // -------------------------------------------------------------------------------
        case 18:
        {
            format_time(szEnd, charsmax(szEnd), "%d.%m.%y %H:%M", g_playersData[iPlayer][pd_iTestEnd]);
            formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_SET_VIPTEST");
        }

        case 19:
        {
            format_time(szEnd, charsmax(szEnd), "%d.%m.%y %H:%M:%S", g_playersData[iPlayer][pd_iTestEnd] + g_eVipTest[vt_iAutoClear]);
            formatex(szMsg, charsmax(szMsg), "%l", "FV_HUD_REMOVE_VIPTEST");
        }
    }

    replace_all(szMsg, charsmax(szMsg), "[flags]", szFlags);
    replace_all(szMsg, charsmax(szMsg), "[endtime]", szEnd);

    new iRed, iGreen, iBlue, Float: x, Float: y, effects, Float: flFxTime, Float: flHoldTime, Float: flFadeInTime, Float: flFadeOut;
    UTIL_ReadHudSettings(g_pCvar[cvar_szHud], iRed, iGreen, iBlue, x, y, effects, flFxTime, flHoldTime, flFadeInTime, flFadeOut);
    set_hudmessage(iRed, iGreen, iBlue, x, y, effects, flFxTime, flHoldTime, flFadeInTime, flFadeOut, -1);
    ShowSyncHudMsg(iPlayer, g_syncHud, szMsg);

    return true;
}

stock bool: SendChat(const iPlayer, const szFlags[], const iMsg)
{
    if (!g_pCvar[cvar_sendChat]) return false;

    new szMsg[192], szEnd[24];

    switch (iMsg)
    {
        case 0:
        {
            formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_GIFTS");
            format_time(szEnd, charsmax(szEnd), "%d.%m.%y %H:%M", g_playersData[iPlayer][pd_iEnd]);
        }

        case 1: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_REMOVE_GIFTS");}
    // -------------------------------------------------------------------------------
        case 2: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_HOLLIDAY");}

        case 3: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_NOSET_HOLLIDAY");}

        case 4: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_REMOVE_HOLLIDAY");}

        case 5: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_NOREMOVE_HOLIDAY");}
    // -------------------------------------------------------------------------------
        case 6: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_NIGHTS");}

        case 7: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_NOSET_NIGHTS");}

        case 8: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_REMOVE_NIGHTS");}

        case 9: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_NOREMOVE_NIGHTS");}
    // -------------------------------------------------------------------------------
        case 10: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_STEAM");}

        case 11: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_GSCLIENT");}

        case 12: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_NEXTCLIENT");}

        case 13: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_STEAM_GSCLIENT");}

        case 14: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_STEAM_NEXTCLIENT");}

        case 15: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_NONSTEAM");}

        case 16: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_ALL");}

        case 17: {formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_REMOVE_CLIENTS");}
        // -------------------------------------------------------------------------------
        case 18:
        {
            format_time(szEnd, charsmax(szEnd), "%d.%m.%y %H:%M", g_playersData[iPlayer][pd_iTestEnd]);
            formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_SET_VIPTEST");
        }

        case 19:
        {
            format_time(szEnd, charsmax(szEnd), "%d.%m.%y %H:%M:%S", g_playersData[iPlayer][pd_iTestEnd] + g_eVipTest[vt_iAutoClear]);
            formatex(szMsg, charsmax(szMsg), "%l", "FV_CHAT_REMOVE_VIPTEST");
        }
    }

    format_msg(szMsg, charsmax(szMsg));
    replace_all(szMsg, charsmax(szMsg), "[flags]", szFlags);
    replace_all(szMsg, charsmax(szMsg), "[endtime]", szEnd);

    client_print_color(iPlayer, print_team_default, "%l %s", "FV_PREFIX", szMsg);

    return true;
}

stock format_msg(szMsg[], const iSize)
{
    replace_all(szMsg, iSize, "!g", "^4");
    replace_all(szMsg, iSize, "!t", "^3");
    replace_all(szMsg, iSize, "!d", "^1");
}

stock bool: parse_settings(const szBuffer[], any:... )
{ 
    enum { arg_one = 1, arg_two, arg_three, arg_four }

    new szStart[24], szEnd[24], szFlags[32], szIgnor[64], szAuthid[MAX_AUTHID_LENGTH + 1];
    new iEnd;
    static iWeekDay;
  
    switch (g_iType)
    {
        case FV_HOLLIDAYS:
        {
            parse(szBuffer, szStart, charsmax(szStart), szEnd, charsmax(szEnd), szFlags, charsmax(szFlags), szIgnor, charsmax(szIgnor));

            if (replace_all(szEnd, charsmax(szEnd), ".", " ") == 2)
                iEnd = parse_time(szEnd, "%d %m %y %H:%M");
            else 
                iEnd = parse_time(szEnd, "%d %m %H:%M");

            if (get_systime() > iEnd) return false;
            if (!szFlags[0]) return false;

            if (replace_all(szEnd, charsmax(szEnd), ".", " ") == 2)
                setarg_int(arg_one, parse_time(szStart, "%d %m %y %H:%M"));
            else
                setarg_int(arg_one, parse_time(szStart, "%d %m %H:%M"));

            setarg_int(arg_two, iEnd);

            for (new iter; ;iter++)
            {
                if (szIgnor[iter] == EOS) break;
                setarg(arg_four, iter, szIgnor[iter]);
            }
        }   

        case FV_NIGHTS:
        {
            parse(szBuffer, szStart, charsmax(szStart), szEnd, charsmax(szEnd), szFlags, charsmax(szFlags), szIgnor, charsmax(szIgnor));
          
            if (++iWeekDay > 7) iWeekDay = 1;
            if (szStart[0] == EOS) return true;

            new iTime, iDay = UTIL_GetWeekDay();

            if ((iDay == 1 && iWeekDay == 7) || (iWeekDay == (iDay - 1)))
                iTime = -86400;
            else
            if (iWeekDay >= iDay)
                iTime = 86400 * (iWeekDay - iDay);
            else
                iTime = 86400 * (7 + iWeekDay - iDay);

            iEnd = parse_time(szEnd, "%H:%M") + iTime;
            new iStart = parse_time(szStart, "%H:%M") + iTime;

            setarg_int(arg_one, iStart);

            if (iEnd < iStart)
                setarg_int(arg_two, iEnd + 86400);
            else
                setarg_int(arg_two, iEnd);

            for (new iter; ;iter++)
            {
                if (szIgnor[iter] == EOS) break;
                setarg(arg_four, iter, szIgnor[iter]);
            }
        }

        case FV_GIFTS:
        {
            parse(szBuffer, szAuthid, charsmax(szAuthid), szStart, charsmax(szStart), szEnd, charsmax(szEnd), szFlags, charsmax(szFlags));
          
            iEnd = parse_time(szEnd, "%d.%m.%y %H:%M");

            if (get_systime() > iEnd) return false;
            if (!szFlags[0]) return false;

            setarg_int(arg_one, parse_time(szStart, "%d.%m.%y %H:%M"));
            setarg_int(arg_two, iEnd);

            switch (g_iGiftType)
            {
                case FV_STEAM: {setarg(arg_four, 0, 'S');}
                case FV_IP: {setarg(arg_four, 0, 'I');}
                case FV_NAME: {setarg(arg_four, 0, 'N');}
            }

            for (new iter = 1; ;iter++)
            {
                if (szAuthid[iter] == EOS) break;
                setarg(arg_four, iter, szAuthid[iter]);
            }
        }

        case FV_TEST:
        {
            new szCmd[128];
            parse(szBuffer, szCmd, charsmax(szCmd), szStart, charsmax(szStart), szEnd, charsmax(szEnd), szFlags, charsmax(szFlags), szIgnor, charsmax(szIgnor));

            if (!szEnd[0] || !szFlags[0] || !szCmd[0]) return false;

            new szRegCmd[16], iPos;
          
            while (iPos != -1)
            {
                iPos = argparse(szCmd, iPos, szRegCmd, charsmax(szRegCmd));

                if (szRegCmd[0]) TrieSetCell(g_tTestsCmds, szRegCmd, 1, false);
            }

            g_eVipTest[vt_iAutoClear]   = str_to_num(szStart) * 60;
            g_eVipTest[vt_iLength]      = str_to_num(szEnd) * 60;
            g_eVipTest[vt_bitFlags]     = read_flags(szFlags);
            copy(g_eVipTest[vt_szIgnorFlags], charsmax(g_eVipTest[vt_szIgnorFlags]), szIgnor);

            return false;
        }

        case FV_CLIENTS:
        {
            parse(szBuffer, szStart, charsmax(szStart), szFlags, charsmax(szFlags), szIgnor, charsmax(szIgnor));

            if (!szFlags[0]) return false;
      
            setarg_int(arg_two, 0);

            switch (szStart[0])
            {
                case 'S', 's':
                {
                    if (szStart[6] == 'N' || szStart[6] == 'n') setarg_int(arg_one, 5);
                    else if (szStart[6] == 'G' || szStart[6] == 'g') setarg_int(arg_one, 4);
                    else setarg_int(arg_one, 1);
                }

                case 'G', 'g':
                {
                    if (szStart[9] == 'S' || szStart[9] == 's') setarg_int(arg_one, 4);
                    else setarg_int(arg_one, 2);
                }

                case 'N', 'n':
                {
                    if (szStart[1] == 'O' || szStart[1] == 'o')  setarg_int(arg_one, 6);
                    else if (szStart[11] == 'S' || szStart[11] == 's') setarg_int(arg_one, 5);
                    else setarg_int(arg_one, 3);
                }

                case 'A', 'a':
                {
                    setarg_int(arg_one, 7);
                }
              
                default: {return false;}
            }

            for (new iter; ;iter++)
            {
                if (szIgnor[iter] == EOS) break;
                setarg(arg_four, iter, szIgnor[iter]);
            }
        }
    }

    setarg_int(arg_three, read_flags(szFlags));

    return true;
}

stock SaveUserNVault(const iPlayer)
{
    if(!is_user_bot(iPlayer) && !is_user_hltv(iPlayer)) nvault_set(g_hTestsVault, g_playersData[iPlayer][pd_szAuthid], "1");
}

#if !defined _authemu_included
stock bool: write_gsclient()
{
    new dir[128];
    get_datadir(dir, charsmax(dir));
    format(dir, charsmax(dir), "%s/%s", dir, "fv_gsclient.ini");
    new file = fopen(dir, "w+t");

    if (!file)
    {
        log_amx(fmt("%l", "FV_GSCLIENT_LIST_NOT_FOUND"));
        return false;
    }


    new szAuthid[MAX_AUTHID_LENGTH];

    for (new iPlayer = 1; iPlayer <= MaxClients; iPlayer++)
    {
        if (!is_user_connected(iPlayer)) continue;
      
        if (g_playersData[iPlayer][pd_bitClient] & Client_GS)
        {
            get_user_authid(iPlayer, szAuthid, charsmax(szAuthid));
            fprintf(file, "^"%s^"^n", szAuthid);
        }
    }

    fclose(file);
    return true;
}

stock bool: load_gsclient()
{
    new dir[128];
    get_datadir(dir, charsmax(dir));
    format(dir, charsmax(dir), "%s/%s", dir, "fv_gsclient.ini");
    new file = fopen(dir, "rt");

    if (!file)
    {
        log_amx(fmt("%l", "FV_GSCLIENT_LIST_NOT_FOUND"));
        return false;
    }

    new szBuffer[256], szAuthid[MAX_AUTHID_LENGTH];

    while (!feof(file))
    {
        fgets(file, szBuffer, charsmax(szBuffer));

        argparse(szBuffer, 0, szAuthid, charsmax(szAuthid));
        remove_quotes(szAuthid);
        TrieSetCell(g_tGsClients, szAuthid, 1, true);
    }

    fclose(file);
    return true;
}
#endif

public bool: native_fv_is_holliday()
{
    return g_eFreeVip[bHolliday];
}

public bool: native_fv_is_nights()
{
    return g_eFreeVip[bNight];
}

public bool: native_fv_is_user_gifts(const iPlayer)
{
    return g_playersData[iPlayer][pd_bSet];
}

public native_fv_get_holliday_flags()
{
    return g_eFreeVip[bitHollidayFlags];
}

public native_fv_get_nights_flags()
{
    return g_eFreeVip[bitNightsFlags];
}

public native_fv_get_gifts_flags(const iPlayer)
{
    return g_playersData[iPlayer][pd_bitSetFlags];
}

public native_fv_get_ignor_flags_holliday(szBuffer[], const iSize)
{
    return copy(szBuffer, iSize, g_eFreeVip[szIgnorHollidayFlags]);
}

public native_fv_get_ignor_flags_nights(szBuffer[], const iSize)
{
    return copy(szBuffer, iSize, g_eFreeVip[szIgnorNightsFlags]);
}

public native_fv_get_time_end_gifts(const iPlayer)
{
    return g_playersData[iPlayer][pd_iEnd];
}

public native_fv_get_user_flags(const iPlayer)
{
    return g_playersData[iPlayer][pd_bitFlags];
}

public native_fv_get_viptest_flags()
{
    return g_eVipTest[vt_bitFlags];
}

public bool: native_fv_is_user_gsclient(const iPlayer)
{
    if (g_playersData[iPlayer][pd_bitClient] & Client_GS) return true;
    return false;
}

public native_fv_get_ignor_flags_viptest(szBuffer[], const iSize)
{
    return copy(szBuffer, iSize, g_eVipTest[vt_szIgnorFlags]);
}

public bool: native_fv_is_user_viptest(const iPlayer)
{
    if (g_playersData[iPlayer][pd_bitTestsSetFlags]) return true;
    return false;
}
Спасибо, это сработало
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу