#include amxmodx
#include amxmisc
#include colorchat
new const PLUGIN[] = "Warnings: Lite";
new const AUTHOR[] = "LeeVaillante";
new const UPDATE[] = "22, July(07), 2014";
new const VERSION[] = "1.0";
enum _:cvars_num {
MAX, PUNISH
}
new cvar[cvars_num], warns[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
cvar[MAX] = register_cvar("wl_max", "4")
cvar[PUNISH] = register_cvar("wl_punish", "kick %userid% ^"Нарушение правил сервера^"")
register_concmd("amx_warning", "cmdAddWarnings", ADMIN_BAN, "<#userid or name> <reason>")
register_clcmd("amx_warning_menu", "menuAddWarnings", ADMIN_BAN)
register_clcmd("add_warning", "addWarnPost")
}
public plugin_cfg()
{
new file[128]
get_configsdir(file, charsmax(file))
add(file, charsmax(file), "/warnings/main.cfg")
if(file_exists(file))
{
server_cmd("exec %s", file)
server_print("")
server_print(" ^"%s^" Copyright (c) 2014", PLUGIN)
server_print(" Author: %s", AUTHOR)
server_print(" Version %s build on %s", VERSION, UPDATE)
server_print("")
}
else
{
log_to_error("Configuration File not found!^nPlugin Stopped")
pause("ad")
}
}
public cmdAddWarnings(id, level, cid)
{
if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED
new target[32], reason[64]
read_argv(1, target, 31)
read_argv(2, reason, 63)
new player = cmd_target(id, target, 1)
if(!player) return PLUGIN_HANDLED
new authid[2][32], name[2][32], userid[2]
userid[0] = get_user_userid(id)
userid[1] = get_user_userid(player)
get_user_authid(id, authid[0], 31)
get_user_authid(player, authid[1], 31)
get_user_name(id, name[0], 31)
get_user_name(player, name[1], 31)
warns[player]++
log_to_warnings(name[0], userid[0], authid[0], name[1], userid[1], authid[1], reason)
if(warns[player] >= get_pcvar_num(cvar[MAX])+1)
{
new szPunish[128], szUserID[64], szCmd[128]
get_pcvar_string(cvar[PUNISH], szPunish, charsmax(szPunish))
formatex(szUserID, charsmax(szUserID), "#%d", userid[1])
replace(szPunish, charsmax(szPunish), "%userid%", szUserID)
formatex(szCmd, charsmax(szCmd), "%s", szPunish)
console_print(player, "[WARNING] Вы были наказаны за нарушение правил сервера.")
console_print(player, "[WARNING] Количество предупреждений было превышено.")
server_cmd(szCmd)
console_print(id, "[WARNING] Игрок %s наказан, т.к кол-во предупреждений достигло максимума.", name[1])
}
switch(get_cvar_num("amx_show_activity"))
{
case 0: client_print_color(player, RED, "^1[^4WARNING^1] Вам было выдано предупреждение за ^4%s", reason)
case 1: client_print_color(id, RED, "^1[^4WARNING^1] Игроку ^4%s^1 выдано предупреждение за ^4%s", name[1], reason)
case 2: client_print_color(0, RED, "^1[^4WARNING^1] Админ ^4%s^1 выдал предупреждение ^4%s^1 за ^4%s", name[0], name[1], reason)
}
return PLUGIN_HANDLED
}
stock log_to_error(const message[])
{
new log[256], date[32]
vformat(log, charsmax(log), message, 2)
get_time("error_%Y%m%d.log", date, charsmax(date))
log_to_file(date, "[%s] Displaying debug trace (plugin ^"%s^", version ^"%s^")", PLUGIN, PLUGIN, VERSION)
log_to_file(date, "[%s] %s", PLUGIN, log)
}
stock log_to_warnings(const name[], userid, const authid[], const name2[], userid2, const authid2[], const reason[])
{
new log[256], date[32], FileDir[128], FileName[64]
formatex(FileDir, charsmax(FileDir), "addons/amxmodx/logs/warns")
if(dir_exists(FileDir)) mkdir(FileDir)
vformat(log, charsmax(log), reason, 2)
get_time("warns_%Y%m%d.log", date, charsmax(date))
formatex(FileName, charsmax(FileName), "%s/%s", FileDir, date)
log_to_file(FileName, "%s<%d><%s> выдал предупреждение игроку %s<%d><%s> за ^"%s^"", name, userid, authid, name2, userid2, authid2, reason)
}
public client_disconnect(id)
{
warns[id] = 0
}
public menuAddWarnings(id)
{
new i_Menu = menu_create("\rВыберите игрока:", "menu_handler")
new s_Players[32], i_Num, i_Player
new s_Name[32], s_Player[10], item[128]
get_players(s_Players, i_Num)
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]
get_user_name(i_Player, s_Name, charsmax(s_Name))
num_to_str(i_Player, s_Player, charsmax(s_Player))
formatex(item, charsmax(item), "%s [%d]", s_Name, warns[i_Player])
menu_additem(i_Menu, item, s_Player, 0)
}
menu_display(id, i_Menu, 0)
return PLUGIN_HANDLED
}
public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
// Получаем ID игрока, который был выбран в меню
new i_Player = str_to_num(s_Data)
client_cmd(id, "messagemode ^"add_warning %i^"", i_Player);
client_print_color(id, RED, "^1[^4WARNING^1] Введите причину выдачи предупреждения")
menu_destroy(menu)
return PLUGIN_HANDLED
}
public addWarnPost(id)
{
new target[10], reason[64]
read_argv(1, target, 9)
read_argv(2, reason, 63)
new player = str_to_num(target)
if(!player) return PLUGIN_HANDLED
new authid[2][32], name[2][32], userid[2]
userid[0] = get_user_userid(id)
userid[1] = get_user_userid(player)
get_user_authid(id, authid[0], 31)
get_user_authid(player, authid[1], 31)
get_user_name(id, name[0], 31)
get_user_name(player, name[1], 31)
warns[player]++
log_to_warnings(name[0], userid[0], authid[0], name[1], userid[1], authid[1], reason)
if(warns[player] >= get_pcvar_num(cvar[MAX])+1)
{
new szPunish[128], szUserID[64], szCmd[128]
get_pcvar_string(cvar[PUNISH], szPunish, charsmax(szPunish))
formatex(szUserID, charsmax(szUserID), "#%d", userid[1])
replace(szPunish, charsmax(szPunish), "%userid%", szUserID)
formatex(szCmd, charsmax(szCmd), "%s", szPunish)
console_print(player, "[WARNING] Вы были наказаны за нарушение правил сервера.")
console_print(player, "[WARNING] Количество предупреждений было превышено.")
server_cmd(szCmd)
console_print(id, "[WARNING] Игрок %s наказан, т.к кол-во предупреждений достигло максимума.", name[1])
}
switch(get_cvar_num("amx_show_activity"))
{
case 0: client_print_color(player, RED, "^1[^4WARNING^1] Вам было выдано предупреждение за ^4%s", reason)
case 1: client_print_color(id, RED, "^1[^4WARNING^1] Игроку ^4%s^1 выдано предупреждение за ^4%s", name[1], reason)
case 2: client_print_color(0, RED, "^1[^4WARNING^1] Админ ^4%s^1 выдал предупреждение ^4%s^1 за ^4%s", name[0], name[1], reason)
}
return PLUGIN_HANDLED
}