Give Flags on Rank

Add-on Give Flags on Rank 1.0

Нет прав для скачивания
C++:
#include <amxmodx>

#pragma semicolon 1

new const szPluginInfo[][] = {"GFonRank", "1.0", "ApXuTekToR"};

#define MAX_AWARDS 512

enum _:DATA {
    FLAGS[32],
    MSG[256]
};
enum _:Cvar {
    Debug_Log,
    Float:Time_Give,
    Check_Night_Mode,
    Name_Award[64],
    Ignor_Flags[16],
    Debug_Logs
}
new g_arrAwardData[MAX_AWARDS][DATA], g_iDataSize = 1, Check_Plugin, g_pCvars[Cvar];
new bool:Use_GameCMS_API;

// ~~~~ Native's ~~~~
native get_user_stats(index, stats[STATSX_MAX_STATS], bodyhits[MAX_BODYHITS]);
native csstats_get_user_stats(id, stats[22]);
native get_user_stats_sql(index, stats[8], bodyhits[8]);
native cmsstats_get_user_stats(id, stats[8],bodyhits[8]);
native cmsapi_set_user_flags(index, const szFlags[], iTime = -1, const szServiceName[] = "", bSilentCheck = false, bAuthorize = true);
// ~~~~ Native's ~~~~

public plugin_natives()
    set_native_filter("native_filter");

public native_filter(const name[], index, trap)
    return trap ? PLUGIN_CONTINUE : PLUGIN_HANDLED;

public plugin_init() {
    register_plugin(szPluginInfo[0], szPluginInfo[1], szPluginInfo[2]);

    register_cvar("GFonRank_Check_Night_Mode",    "0"                );
    register_cvar("GFonRank_Name_Award",        "Флаги за TOP"    );
    register_cvar("GFonRank_Ignor_Flags",        "t"                );
    register_cvar("GFonRank_Debug_Log",            "0"                );
    register_cvar("GFonRank_Time_Give",            "5.0"            );
    register_cvar("GFonRank_Debug_Logs",        "1"                );
}

public plugin_precache() {
    new cfgFilePath[PLATFORM_MAX_PATH];
    new const fileName[64] = "/SevCorp/Give_Flags/GFonRank_Configuration.cfg";
    get_localinfo("amxx_configsdir", cfgFilePath, charsmax(cfgFilePath));
    add(cfgFilePath, charsmax(cfgFilePath), fileName);
    if(file_exists(cfgFilePath)) {
        server_cmd("exec %s", cfgFilePath);
        server_exec();
    } else {
        server_print("[%s] File '%s' not found. Plugin Stoped", szPluginInfo[0], cfgFilePath);
        set_fail_state("[%s] File '%s' not found. Plugin Stoped", szPluginInfo[0], cfgFilePath);
    }

    set_task(1.0, "initCvars");
}

public plugin_cfg() {
    new szPath[MAX_NAME_LENGTH*2];
    get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
    add(szPath, charsmax(szPath), "/SevCorp/Give_Flags/GFonRank_Awards.ini");

    new iFile = fopen(szPath, "rt");
    if(!iFile) {
        new szError[96];
        formatex(szError, charsmax(szError), "File '%s' not found OR incorrect structure!", szPath);
        set_fail_state(szError);
    }

    new szBuffer[MAX_AWARDS];
    while(!feof(iFile)){
        fgets(iFile, szBuffer, charsmax(szBuffer));
        trim(szBuffer);

        if(!szBuffer[0] || szBuffer[0] == ';')
            continue;

        if(parse(szBuffer,
            g_arrAwardData[g_iDataSize][FLAGS],         charsmax(g_arrAwardData[][FLAGS]),
            g_arrAwardData[g_iDataSize][MSG],             charsmax(g_arrAwardData[][MSG])
        ) == 2)    g_iDataSize++;
    }
    fclose(iFile);

    if(is_plugin_loaded("StatsX") != -1) {
        Check_Plugin    = 1;
        if(g_pCvars[Debug_Logs] == 2) plugin_print(false, "[GFonRank] Расчет статистики ведется через стандартный StatsX");
    }
    else if(is_plugin_loaded("CSStatsX SQL") != -1) {
        Check_Plugin    = 2;
        if(g_pCvars[Debug_Logs] == 2) plugin_print(false, "[GFonRank] Расчет статистики ведется через CSStatsX SQL");
    }
    else if(is_plugin_loaded("[183] CsStats MySQL") != -1) {
        Check_Plugin    = 3;
        if(g_pCvars[Debug_Logs] == 2) plugin_print(false, "[GFonRank] Расчет статистики ведется через [183] CsStats MySQL");
    }
    else if(is_plugin_loaded("CMSStats_MySQL") != -1) {
        Check_Plugin    = 4;
        if(g_pCvars[Debug_Logs] == 2) plugin_print(false, "[GFonRank] Расчет статистики ведется через CMSStats_MySQL");
    }
    else plugin_print(true, "[GFonRank] Система статистики не запущена.");

    if(is_plugin_loaded("GameCMS_API") != -1) {
        Use_GameCMS_API = true;
        if(g_pCvars[Debug_Logs] == 2) plugin_print(false, "[GFonRank] Синхронизация с GameCMS API Успешна!");
    } else {
        if(g_pCvars[Debug_Logs] == 2) plugin_print(false, "[GFonRank] GameCMS API не запущена! Флаги выдаются в стандартном режиме!");
    }
}

public initCvars() {
    get_cvar_string("GFonRank_Name_Award",    g_pCvars[Name_Award],    charsmax(g_pCvars[Name_Award]));
    get_cvar_string("GFonRank_Ignor_Flags",    g_pCvars[Ignor_Flags],    charsmax(g_pCvars[Ignor_Flags]));
    g_pCvars[Check_Night_Mode]    = get_cvar_num("GFonRank_Check_Night_Mode");
    g_pCvars[Debug_Log]            = get_cvar_num("GFonRank_Debug_Log");
    g_pCvars[Time_Give]            = get_cvar_float("GFonRank_Time_Give");
    g_pCvars[Debug_Logs]        = get_cvar_num("GFonRank_Debug_Logs");
}

public client_putinserver(id) {
    if(!is_user_connected(id)) {
        return;
    }
    if(g_pCvars[Ignor_Flags]) {
        if(checkAccess(id, g_pCvars[Ignor_Flags]))
            return;
    }

    set_task(g_pCvars[Time_Give], "client_give_awards", id);
}

public client_give_awards(id) {
    if(!is_user_connected(id))
        return;

    if(g_pCvars[Ignor_Flags]) {
        if(checkAccess(id, g_pCvars[Ignor_Flags]))
            return;
    }

    new szName[32];
    get_user_name(id, szName, charsmax(szName));

    new iRank;
    switch(Check_Plugin) {
        case 1: {
            new szStats[8];
            iRank = get_user_stats(id, szStats, szStats);
        }
        case 2: {
            new szStats[8];
            iRank = get_user_stats_sql(id, szStats, szStats);
        }
        case 3: {
            new szStats[22];
            iRank = csstats_get_user_stats(id, szStats);
        }
        case 4: {
            new szStats[8];
            iRank = cmsstats_get_user_stats(id, szStats, szStats);
        }
    }
    if(g_pCvars[Debug_Logs] == 2) plugin_print(false, "[GFonRank] Зашел игрок: | Name: %s | Rank: %d", szName, iRank);

    if(iRank <= g_iDataSize && iRank > 0) {
        new szName[32];
        get_user_name(id, szName, charsmax(szName));

        if(Use_GameCMS_API) {
            cmsapi_set_user_flags(id, g_arrAwardData[iRank][FLAGS], -1, g_pCvars[Name_Award], false, true);
            if(g_pCvars[Debug_Log])
                if(g_pCvars[Debug_Logs] == 1 || g_pCvars[Debug_Logs] == 2)
                    plugin_print(false, "[GFonRank] GameCMS_API ON | User: %s | Flags: %s | Award: %s | Rank: %d", szName, g_arrAwardData[iRank][FLAGS], g_pCvars[Name_Award], iRank);
        } else {
            new g_iAccess;
            g_iAccess = get_user_flags(id);
            set_user_flags(id, g_iAccess | read_flags(g_arrAwardData[iRank][FLAGS]));
            if(g_pCvars[Debug_Log])
                if(g_pCvars[Debug_Logs] == 1 || g_pCvars[Debug_Logs] == 2)
                    plugin_print(false, "[GFonRank] GameCMS API OFF | User: %s | Flags: %s | Rank: %d", szName, g_arrAwardData[iRank][FLAGS], iRank);
        }

        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!n", "^1");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!t", "^3");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!g", "^4");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "%name%", szName);
        client_print_color(id, 0, "%s", g_arrAwardData[iRank][MSG]);
    }
}

checkAccess(id, const flags[]) {
    return (get_user_flags(id) & read_flags(flags));
}

plugin_print(bool:bBlock, const szMessage[], any:...) {
    new szMsg[128];
    vformat(szMsg, charsmax(szMsg), szMessage, 3);
    switch(bBlock) {
        case false:    log_to_file("GFonRank.log", szMsg);
        case true:    set_fail_state(szMsg);
    }
}
Назад
Сверху