#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Ad Command"
#define VERSION "1.0"
#define AUTHOR "uMk0"
/* Настройки начало */
#define CHECK_FLOOD // Включить/Выключить проверку на флуд (Если нужно отключить закомментируйте)
#if defined CHECK_FLOOD
#define CHAT_TEXT_FLOOD "^3[^4Инфо^3] ^1Прекатите флудить!" //Текст который будет выводится для отправителя команды
#endif
#define NOT_ACCESS_CMD_TEXT_CONSOLE "Нет доступа к комманде: "//Текст в коносли когда команда не доступна по флагу
/* Настройки конец */
enum _:name_cmd{
NAME_CMD[64]
}
enum _:text_cmd{
TEXT_CMD[250]
}
enum _:flags_cmd{
FLAGS_CMD[32]
}
new g_cmdName[64][name_cmd];
new g_cmdText[64][text_cmd];
new g_cmdFlags[64][flags_cmd];
public plugin_init(){
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("ad_cmd_version", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
new configsDir[64], config[64];
get_configsdir(configsDir, charsmax(configsDir));
formatex(config, charsmax(config), "%s/%s", configsDir, "ad_cmd.ini");
if (file_exists(config)){
new linedata[1024], i = 0, file = fopen(config, "rt");
while (file && !feof(file)){
fgets(file, linedata, charsmax(linedata));
replace(linedata, charsmax(linedata), "^n", "");
if (!linedata[0] || linedata[0] == ';') continue;
new tmp_name_cmd[64];
parse(linedata,tmp_name_cmd, charsmax(tmp_name_cmd), g_cmdText[i][TEXT_CMD], charsmax(g_cmdText[][TEXT_CMD]), g_cmdFlags[i][FLAGS_CMD], charsmax(g_cmdFlags[][FLAGS_CMD]));
replace_string(g_cmdText[i][TEXT_CMD], charsmax(g_cmdText[][TEXT_CMD]), "!n", "^1");
replace_string(g_cmdText[i][TEXT_CMD], charsmax(g_cmdText[][TEXT_CMD]), "!t", "^3");
replace_string(g_cmdText[i][TEXT_CMD], charsmax(g_cmdText[][TEXT_CMD]), "!g", "^4");
if(!isCmdAdd(tmp_name_cmd) && !equal(tmp_name_cmd,"")){
register_clcmd(tmp_name_cmd,"sendCmd");
}
g_cmdName[i][NAME_CMD] = tmp_name_cmd;
i++;
}
if(file) fclose(file);
}
}
public sendCmd(id){
#if defined CHECK_FLOOD
//спасибо neygomon за проверку флуда
static Float:fTimeFlood[33], Float:fGameTime, iFloodWarn[33];
if(fTimeFlood[id] > (fGameTime = get_gametime())){
if(++iFloodWarn[id] > 2){
client_print_color(id,print_team_default,"%s",CHAT_TEXT_FLOOD);
fTimeFlood[id] = fGameTime + 3.0;
return;
}
}
else if(iFloodWarn[id]) iFloodWarn[id]--;
fTimeFlood[id] = fGameTime;
#endif
new cmd[64];
read_argv(0, cmd, charsmax(cmd));
for(new i = 0; i < sizeof(g_cmdName); i++){
if(equal(g_cmdName[i][NAME_CMD],cmd)){
if(get_user_flags(id) & read_flags(g_cmdFlags[i][FLAGS_CMD]) || read_flags(g_cmdFlags[i][FLAGS_CMD]) == 0){
client_print_color(0,print_team_default,"%s", g_cmdText[i][TEXT_CMD]);
}else{
client_print(id,print_console,"%s%s",NOT_ACCESS_CMD_TEXT_CONSOLE, g_cmdName[i][NAME_CMD]);
}
}
}
}
isCmdAdd(cmd[]){
for(new i = 0; i < sizeof(g_cmdName); i++){
if(equal(g_cmdName[i][NAME_CMD],cmd)){
return true;
}
}
return false;
}