CMS Reset Score

Плагин АМХХ CMS Reset Score 1.1

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

new const szPluginInfo[][] = {"CMS Reset Score", "1.0", "ApXuTekToR"};

#if !defined MAX_NAME_LENGTH
#define MAX_NAME_LENGTH 32
#endif

new const LogFile[] = "CMS_RS.log"

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_0;

enum E_CVARS {
    CHAT_PREFIX[16],
    COST_RS_SKILL,
Float:DEFAULT_SKILL,
    COST_RS_STATS,
    PLAY_SOUND,
    LOG_MODE,
}
new Cvar[E_CVARS];

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

    register_clcmd("resetscore", "RS_OpenMenu");
    register_clcmd("say /rs",         "RS_OpenMenu");
    register_clcmd("say_team /rs",     "RS_OpenMenu");
    register_clcmd("say /resetskill", "RS_ResetSkill");
    register_clcmd("say /resetstats", "RS_ResetStats");

    register_menu( "RS Menu", keys,     "RSMenu_Handler" );

    register_cvar("CMS_RS_Chat_Prefix",    "ResetScore"    );
    register_cvar("CMS_RS_Cost_Skill",    "50"            );
    register_cvar("CMS_RS_Deff_Skill",    "0.0"            );
    register_cvar("CMS_RS_Cost_Stats",    "100"            );
    register_cvar("CMS_RS_Play_Sound",    "1"                );
    register_cvar("CMS_RS_Log_Mode",    "1"                );

    new cfgFilePath[PLATFORM_MAX_PATH];
    new const fileName[64] = "/cmsstats/CMS_Reset_Score.cfg";
    get_localinfo("amxx_configsdir", cfgFilePath, charsmax(cfgFilePath));
    add(cfgFilePath, charsmax(cfgFilePath), fileName);
    if(file_exists(cfgFilePath)) {
        server_cmd("exec %s", cfgFilePath);
        server_exec();
        initCvars();
    } else {
        server_print("[%s v%s] [Error] [Config file not found (%s)] [Plugin stopped]", szPluginInfo[0], szPluginInfo[1], cfgFilePath);
        set_fail_state("[Config file not found (%s)]", cfgFilePath);
    }

    register_dictionary("CMS_Reset_Score.txt");
}

public plugin_cfg() {
    if(is_plugin_loaded("CMSStats_MySQL") == INVALID_PLUGIN_ID || is_plugin_loaded("CMSStats_MySQL") == INVALID_PLUGIN_ID) {
        log_amx("WARNING: CMSStats_MySQL or CMSStats_Ranks isn't loaded! Plugin Stopped.");
        server_print("WARNING: CMSStats_MySQL or CMSStats_Ranks isn't loaded! Plugin Stopped.");
        set_fail_state("WARNING: CMSStats_MySQL or CMSStats_Ranks isn't loaded! Plugin Stopped.");
        return;
    }
}

initCvars() {
    get_cvar_string("CMS_RS_Chat_Prefix",    Cvar[CHAT_PREFIX],    charsmax(Cvar[CHAT_PREFIX]));
    Cvar[COST_RS_SKILL]    = get_cvar_num("CMS_RS_Cost_Skill"    );
    Cvar[COST_RS_STATS]    = get_cvar_num("CMS_RS_Cost_Stats"    );
    Cvar[DEFAULT_SKILL]    = get_cvar_float("CMS_RS_Deff_Skill");
    Cvar[PLAY_SOUND]    = get_cvar_num("CMS_RS_Play_Sound"    );
    Cvar[LOG_MODE]        = get_cvar_num("CMS_RS_Log_Mode"    );
}

public RS_OpenMenu(id) {
    if(!is_user_connected(id))
        return PLUGIN_HANDLED;

    static szMenu[512], iLen;
    iLen = 0;
    iLen    =     formatex(szMenu, charsmax( szMenu ),  "%L^n%L^n^n", LANG_PLAYER, "MENU_NAME", LANG_PLAYER, "MENU_NAME_2", cmsranks_get_user_anew(id));
    iLen    +=    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \R\y0^n", LANG_PLAYER, "MENU_RESET_SCORE");
    keys |= (1<<1);
    if(get_user_coins(id) < Cvar[COST_RS_SKILL]) {
        iLen    +=    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \R\y%d^n", LANG_PLAYER, "MENU_RESET_SKILL_NO", Cvar[COST_RS_SKILL]);
    } else {
        iLen    +=    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \R\y%d^n", LANG_PLAYER, "MENU_RESET_SKILL", Cvar[COST_RS_SKILL]);
        keys |= (1<<2);
    }
    if(get_user_coins(id) < Cvar[COST_RS_STATS]) {
        iLen    +=    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \R\y%d^n", LANG_PLAYER, "MENU_RESET_STATS_NO", Cvar[COST_RS_STATS]);
    } else {
        iLen    +=    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L \R\y%d^n", LANG_PLAYER, "MENU_RESET_STATS", Cvar[COST_RS_STATS]);
        keys |= (1<<3);
    }

    iLen    +=    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n%L", LANG_PLAYER, "MEMU_EXIT");
    keys |= MENU_KEY_0;

    show_menu(id, keys, szMenu, -1, "RS Menu");
    return PLUGIN_HANDLED;
}

public RSMenu_Handler(id, iKey) {
    if(!is_user_connected(id))
        return PLUGIN_HANDLED;

    switch(iKey) {
        case 0: {
            set_entvar(id, var_frags, 0.0);
            set_member(id, m_iDeaths, 0);
            message_begin(MSG_ALL, 85);
            write_byte(id);
            write_short(0); write_short(0); write_short(0); write_short(0);
            message_end();
            if(Cvar[LOG_MODE]) log_to_file(LogFile, "Пользователь %n сбросил счет", id);
            if(Cvar[PLAY_SOUND]) rg_send_audio(id, "/sound/events/tutor_msg.wav", PITCH_NORM);
            client_print_color(id, 0, "%L", LANG_PLAYER, "RESET_SCORE", Cvar[CHAT_PREFIX]);
        }
        case 1: {
            if(!Cvar[COST_RS_SKILL])
                return PLUGIN_HANDLED;

            if(cmsranks_get_user_anew(id) < Cvar[COST_RS_SKILL]) {
                if(Cvar[PLAY_SOUND]) rg_send_audio(id, "/sound/events/friend_died.wav", PITCH_NORM);
                client_print_color(id, 0, "%L", LANG_PLAYER, "NOT_ENOUGH_COINS", Cvar[CHAT_PREFIX]);
                if(Cvar[LOG_MODE]) log_to_file(LogFile, "Неудачная попытка сброса Skill пользователем %n. Стоимость: %d", id, Cvar[COST_RS_SKILL]);
                return PLUGIN_HANDLED;
            }
            RS_ResetSkill(id);
        }
        case 2: {
            if(!Cvar[COST_RS_STATS])
                return PLUGIN_HANDLED;

            if(cmsranks_get_user_anew(id) < Cvar[COST_RS_STATS]) {
                if(Cvar[PLAY_SOUND]) rg_send_audio(id, "/sound/events/friend_died.wav", PITCH_NORM);
                client_print_color(id, 0, "%L", LANG_PLAYER, "NOT_ENOUGH_COINS", Cvar[CHAT_PREFIX]);
                if(Cvar[LOG_MODE]) log_to_file(LogFile, "Неудачная попытка сброса Всей статистики пользователем %n. Стоимость: %d", id, Cvar[COST_RS_STATS]);
                return PLUGIN_HANDLED;
            }
            RS_ResetStats(id);
        }
    }
    return PLUGIN_HANDLED;
}

public RS_ResetSkill(id) {
    if(!is_user_connected(id) || !Cvar[COST_RS_SKILL]) {
        if(Cvar[LOG_MODE]) log_to_file(LogFile, "Инициирована попытка сброса Skillа игроком %n. Попытка неудачна: игрок не подключен!", id);
        return PLUGIN_HANDLED;
    }

    if(cmsranks_get_user_anew(id) < Cvar[COST_RS_SKILL]) {
        if(Cvar[PLAY_SOUND]) rg_send_audio(id, "/sound/events/friend_died.wav", PITCH_NORM);
        client_print_color(id, 0, "%L", LANG_PLAYER, "NOT_ENOUGH_COINS", Cvar[CHAT_PREFIX]);
        if(Cvar[LOG_MODE]) log_to_file(LogFile, "Неудачная попытка сброса Skill пользователем %n. Стоимость: %d", id, Cvar[COST_RS_SKILL]);
        return PLUGIN_HANDLED;
    }

    new Float:szUserSkilldo, Float:szUserSkillpost;
    szUserSkilldo = cmsstats_get_user_skill(id);
    if(Cvar[LOG_MODE]) log_to_file(LogFile, "Skill игрока %n равен: %.2f", id, szUserSkilldo);

    new iName[MAX_NAME_LENGTH];
    get_user_name(id, iName, charsmax(iName));

    cmsstats_set_user_value(id, SkillVal, Cvar[DEFAULT_SKILL]);
    if(Cvar[LOG_MODE]) log_to_file(LogFile, "Skill игрока %n сброшен на: %.2f", id, Cvar[DEFAULT_SKILL]);
    cmsranks_add_user_anew(id, -Cvar[COST_RS_SKILL]);

    szUserSkillpost = cmsstats_get_user_skill(id);
    if(Cvar[LOG_MODE]) log_to_file(LogFile, "Skill игрока %n равен: %.2f", id, szUserSkillpost);

    client_print_color(id, 0, "%L", LANG_PLAYER, "RESET_SKILL", Cvar[CHAT_PREFIX]);
    if(Cvar[LOG_MODE])
    log_to_file(LogFile, "[%s] Игрок [ %s ] Успешно сбросил свой Skill за [ %d ] Бонусов", szPluginInfo[0], iName, Cvar[COST_RS_SKILL]);

    return PLUGIN_HANDLED_MAIN;
}

public RS_ResetStats(id) {
    if(!is_user_connected(id) || !Cvar[COST_RS_STATS]) {
        if(Cvar[LOG_MODE]) log_to_file(LogFile, "Инициирована попытка сброса Всей Статистики игроком %n. Попытка неудачна: игрок не подключен!", id);
        return PLUGIN_HANDLED;
    }

    if(cmsranks_get_user_anew(id) < Cvar[COST_RS_STATS]) {
        if(Cvar[PLAY_SOUND]) rg_send_audio(id, "/sound/events/friend_died.wav", PITCH_NORM);
        client_print_color(id, 0, "%L", LANG_PLAYER, "NOT_ENOUGH_COINS", Cvar[CHAT_PREFIX]);
        if(Cvar[LOG_MODE]) log_to_file(LogFile, "Неудачная попытка сброса Всей Статистики пользователем %n. Стоимость: %d", id, Cvar[COST_RS_STATS]);
        return PLUGIN_HANDLED;
    }

    new iName[MAX_NAME_LENGTH], szSteamID[32];
    get_user_authid(id, szSteamID, charsmax(szSteamID));
    get_user_name(id, iName, charsmax(iName));

    cmsstats_reset_user_stats(szSteamID);
    cmsranks_add_user_anew(id, -Cvar[COST_RS_STATS]);

    client_print_color(id, 0, "%L", LANG_PLAYER, "RESET_STATS", Cvar[CHAT_PREFIX]);
    if(Cvar[LOG_MODE])
    log_to_file(LogFile, "[%s] Игрок [ %s ] сбросил всю свою статистику за [ %d ] Бонусов", szPluginInfo[0], iName, Cvar[COST_RS_STATS]);

    return PLUGIN_HANDLED_MAIN;
}
Назад
Сверху