#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;
}