Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Плохой ник/чат

Kasper55
сообщение 26.7.2012, 19:48
Сообщение #1
Стаж: 16 лет

Сообщений: 1145
Благодарности: выкл.

Пробывал вырезать из него приставку к чату ct и t но не получается

Скрытый текст
//////////////////////////////////////////////////
// Название: Плохой (Bad) //
// Версия : 3.3 //
// Автор: termitok //
// Источник: 91.206.19.108:27026 //
//////////////////////////////////////////////////
/*
История плагина:
3.3 - Мелие исправления некоторых ошибок

3.2 - Добавлено соответствие символов для уменьшения словаря

3.1 - Добавлены CVARS на короткий и пустой ники, мелкие поправки, измененил функцию изменения ника после захода на сервер;

3.0 - вкорне изменена вся структура плагина, добавлено: цветной чат (поддержка руского чата), котроль чата на рекламу и спам;

2.3 - исправлена ошибка "цикличности", формирование сообщения и проверка на админов и клан вынесены в отдельные функции;

2.2 - решена проблема с ником unnamed, настройки по умолчанию поставил предпочтительные для большинства;

2.1 - исправлена ошибка при настройке bad_block_change 1;

2.0 - начальный вариант.
*/

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>

#define PLUGIN "Bad"
#define VERSION "3.3"
#define AUTHOR "termitok"

#define TASK_PROV 6000
#define TASK_ADVERT 6100
#define TASK_RETRY 6200
#define TASK_RPROV 6300

new Array: bad_advert
new Array: bad_flormat
new Array: bad_forbid
new Array: reason
new Array: antiadvert

new advertCnt, flormatCnt, forbidCnt, antiadvertCnt

new cv_in
new cv_block_change
new cv_retry
new cv_short
new cv_short_add
new cv_short_add2
new cv_ip
new cv_admin_flag
new cv_message
new cv_log

new cv_minspam
new cv_minverify
new cv_alltalk

new g_MaxPlayers

#define LEN_RECORDS 192 //максимальная длина сообщения (лучше не делать больше)
#define CHANGE_COUNT 6 //количетсво проверок, лучше чтобы было RETRY_TIME * CHANGE_COUNT >= round_time
#define RETRY_TIME 10.0 //Время повтора смены ника и проверки на смену после захода на сервер, если ник "плохой"

#define HUD_R 0 //красный цвет HUD сообщения
#define HUD_G 200 //зеленый цвет HUD сообщения
#define HUD_B 200 //синий цвет HUD сообщения

new soot[256]
new rec_spam[33]
new rec_verify[33]
new spam[33][2][LEN_RECORDS]
new spam_ind[33]
new block_chat[33]
new count_change[33]

//для меню
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MEN
U_KEY_8|MENU_KEY_9|MENU_KEY_0

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward(FM_ClientUserInfoChanged, "fwClientUserInfoChanged")

register_dictionary("bad.txt")

register_menu("Restrict Menu", KEYSMENU, "restrict_menu_select")

cv_in = register_cvar("bad_in","1")
cv_block_change = register_cvar("bad_block_change","1")
cv_retry = register_cvar("bad_retry","3")
cv_short = register_cvar("bad_short","4")
cv_short_add = register_cvar("bad_short_add","(short nick)")
cv_short_add2 = register_cvar("bad_short_add2","(censored)")
cv_ip = register_cvar("bad_ip","1")
cv_admin_flag = register_cvar("bad_admin_flag","a")
cv_message = register_cvar("bad_message","2")
cv_log = register_cvar("bad_log","1")

cv_minspam = register_cvar("bad_minspam","5")
cv_minverify = register_cvar("bad_minverify","3")
cv_alltalk = register_cvar("bad_alltalk","2")

register_clcmd("say", "say_say")
register_clcmd("say_team", "say_say_team")

g_MaxPlayers = get_maxplayers()
}

//считывает запрет из файла bad.ini и заносит их в массив
public plugin_cfg()
{
server_cmd("exec addons/amxmodx/configs/bad/bad.cfg")
server_exec()

//задание массивов и переменных
reason = ArrayCreate(32)
bad_advert = ArrayCreate(32)
bad_flormat = ArrayCreate(32)
bad_forbid = ArrayCreate(32)
antiadvert = ArrayCreate(32)

ArrayPushString(reason,"")
ArrayPushString(reason,"SHORT_NICK")
ArrayPushString(reason,"RETRY_SYMBOLS")
ArrayPushString(reason,"BAD_IP")
ArrayPushString(reason,"BAD_ADVERT")
ArrayPushString(reason,"BAD_FLORMAT")
ArrayPushString(reason,"BAD_FORBID")

//считывает данные о запретах и натсройках
new file
file = fopen("addons/amxmodx/configs/bad/BAD.ini", "rt")

if (file)
{
new buffer[64], pr
while(!feof(file))
{
buffer[0] = '^0'
fgets(file, buffer, charsmax(buffer))
buffer[strlen(buffer)-1] = '^0'

if (buffer[0] && containi(buffer, "//") < 0 && buffer[0] != ';')
{
if ( buffer[0] == '[' && (buffer[1] == 'B' || buffer[1] == 'C' || buffer[1] == 'A') )
{
if ( containi(buffer, "_AD") > 0 ) pr = 4;
if ( containi(buffer, "FLO") > 0 ) pr = 5;
if ( containi(buffer, "FOR") > 0 ) pr = 6;
if ( containi(buffer, "ANT") > 0 ) pr = 7;
}
else
{
switch (pr)
{
case 4:
{
ArrayPushString(bad_advert, buffer)
advertCnt++
}
case 5:
{
ArrayPushString(bad_flormat, buffer)
flormatCnt++
}
case 6:
{
ArrayPushString(bad_forbid, buffer)
forbidCnt++
}
case 7:
{
ArrayPushString(antiadvert, buffer)
antiadvertCnt++
}
}
}
}
}
}
fclose(file)

//инициируем соответствие символов
//(а) #64 - @, #65 - A, #97 - a = 1
soot[64] = 1; soot[65] = 1; soot[97] = 1;
//(б) #54 - 6, #98 - b = 2
soot[54] = 2; soot[98] = 2;
//(в) #66 - B,#119 - w, #87 - W, #118 - v, #86 - V, = 3
soot[66] = 3; soot[119] = 3; soot[87] = 3; soot[118] = 3; soot[86] = 3;
//(г) #71 - G, #103 - g = 4
soot[71] = 4; soot[103] = 4;
//(д) #68 - D, #100 - d = 5
soot[68] = 5; soot[100] = 5;
//(е) #69 - E, #101 - e = 6
soot[69] = 6; soot[101] = 6;
//(ж) #74 - J, #106 - j = 7
soot[74] = 7; soot[106] = 7;
//(з) #51 - 3, #90 - Z, #122 - z = 8
soot[51] = 8; soot[90] = 8; soot[122] = 8;
//(и) #73 - I, #105 - i, #117 - u, #85 - U = 9 -> ?
soot[73] = 9; soot[105] = 9; soot[117] = 9; soot[85] = 9;
//(к) #75 - K, #107 - k, #81 - Q, #113 - q = 10
soot[75] = 10; soot[107] = 10; soot[113] = 10;
//(л) #76 - L, #108 - l = 11
soot[76] = 11; soot[108] = 11;
//(м) #77 - M, #109 - m = 12
soot[77] = 12; soot[109] = 12;
//(н) #72 - H, #78 - N, #110 - n = 13
soot[72] = 13; soot[78] = 13; soot[110] = 13;
//(о) #48 - 0, #79 - O, #111 - o = 14
soot[48] = 14; soot[79] = 14; soot[111] = 14;
//(п,р) #80 - P, #112 - p, #82 - R, #114 - r = 15 -> ?
soot[80] = 15; soot[112] = 15; soot[82] = 15; soot[114] = 15;
//(с) #67 - C, #99 - c, #83 - S, #115 - s = 16
soot[67] = 16; soot[99] = 16; soot[82] = 16; soot[115] = 16;
//(т) #84 - T, #116 - t = 17
soot[84] = 17; soot[115] = 17;
//(у) #89 - Y, #121 - y = 18 -> ?
soot[89] = 18; soot[121] = 18;
//(ф) #70 - F, #102 - f = 19
soot[70] = 19; soot[102] = 19;
//(х) #104 - h, #88 - X, #120 - x = 20
soot[104] = 20; soot[88] = 20; soot[120] = 20;
}

public say_say(id)
{
if (is_user_bot(id)) return PLUGIN_HANDLED;
if (!is_user_connected(id)) return PLUGIN_HANDLED;

new check[LEN_RECORDS]
read_args(check, LEN_RECORDS-1)
block_say(id, 1, check)

return PLUGIN_HANDLED
}

public say_say_team(id)
{
if (is_user_bot(id)) return PLUGIN_HANDLED;
if (!is_user_connected(id)) return PLUGIN_HANDLED;

new check[LEN_RECORDS]
read_args(check, LEN_RECORDS-1)
block_say(id, 2, check)

return PLUGIN_HANDLED
}

//обработка сообщений в чате
block_say(id, st, check[])
{
check[0] = ' '; check[strlen(check) - 1] = '^0';

//отбрасывает пробелы в начале и в конце строки
trim(check)

new lenb = strlen(check)
if( !lenb ) //игнорим пустое сообщение
return PLUGIN_HANDLED;

//проверки на спам и рекламу в чате
new bad[LEN_RECORDS]
if (!is_admin(id))
{
//проверка на спам
if (equal( spam[id][0], check ) || equal( spam[id][1], check ))
{
rec_spam[id]++
if (rec_spam[id] > 2)
{
formatex(bad, charsmax(bad), " ^x04%L", id, "DONT_SPAM")
mess_begin(id, 0, bad)
}
}
else
{
spam_ind[id] = (spam_ind[id] ? 0 : 1)
rec_spam[id] = 0
copy( spam[id][spam_ind[id]], LEN_RECORDS-1, check )
}

switch ( nick_check(20, 2, 1, (lenb - 1 < 5 ? 0 : 4), 1, 0, 0, 0, check) )//проверка на рекламу
{
case 3,4:
{
rec_verify[id] ++
formatex(bad, charsmax(bad), " ^x04%L", id, "DONT_ADVERT")
mess_begin(id, 0, bad)
}
case 2:
{
formatex(bad, charsmax(bad), " ^x04%L", id, "DONT_MUSOR")
mess_begin(id, 0, bad)
}
}

//вызов меню ичистки конфига, для наказания игрока
if( (rec_verify[id] > get_pcvar_num(cv_minverify) || rec_spam[id] > get_pcvar_num(cv_minspam)) && !task_exists( id + TASK_ADVERT) )
{
set_task( 0.2, "show_restrict_menu", id + TASK_ADVERT, _, _, "b")
block_chat[id] = 1
}
}

//вывод цветных сообщений в чат
if (strlen(check) > 0 )
{
if(block_chat[id])
{
formatex(bad, charsmax(bad), " ^x04%L", id, "DONT_CHAT")
mess_begin(id, 0, bad)
}
else
mess_begin(id, st, check);
}

return PLUGIN_HANDLED
}

//показываем меню наказания при нарушениях
public show_restrict_menu(id)
{
id -= TASK_ADVERT

if( !is_user_connected( id ) ) return PLUGIN_HANDLED;

static menu[256]
new len

len += formatex(menu[len], charsmax(menu) - len, "%L", id, "RESTRICT_TITLE")
len += formatex(menu[len], charsmax(menu) - len, "^n^n\y1. \w%L", id, "RESTRICT_CLEAR")
len += formatex(menu[len], charsmax(menu) - len, "^n\y2. \w%L", id, "RESTRICT_QUIT");

show_menu(id, KEYSMENU, menu, -1, "Restrict Menu")

return PLUGIN_HANDLED
}

//функция исполнения меню
public restrict_menu_select(id, key)
{
switch( key )
{
case 0:
{
new bind[32]
for( new i = 0; i < antiadvertCnt; i++ )
{
ArrayGetString(antiadvert, i, bind, charsmax(bind))
client_cmd(id, "%s", bind)
}

clear_param(id, 0)

new name[32], authid[44], ip[35]
get_user_ip(id, ip, charsmax(ip), 1)
get_user_name(id, name, charsmax(name))
get_user_authid(id, authid, charsmax( authid ))
log_to_file("addons/amxmodx/logs/bad.log","CLEAR CONFIG: %s <%s><%s>", name, ip, authid)
}
case 1: client_cmd( id, ";disConnect" );
}

return PLUGIN_HANDLED
}

public client_disconnect(id)
clear_param(id, 1);

//очистка параметров и задач
clear_param(id, pr)
{
block_chat[id] = 0
rec_verify[id] = 0
if ( pr ) rec_spam[id] = 0;
count_change[id] = 0

if(task_exists(id + TASK_PROV))
remove_task(id + TASK_PROV);
if(task_exists(id + TASK_RETRY))
remove_task(id + TASK_RETRY);
if(task_exists(id + TASK_ADVERT))
remove_task(id + TASK_ADVERT);
if(task_exists(id + TASK_RPROV))
remove_task(id + TASK_RPROV);
}

//проверка ника при заходе на сервер
public client_connect(id)
{
clear_param(id, 1)
if (!is_user_bot(id)) set_task(2.0, "client_in", id + TASK_PROV);
}

public client_in(id)
{
id -= TASK_PROV

if (is_user_bot(id)) return;

if(is_admin(id)) return; //если это админ игнорим

new in = get_pcvar_num(cv_in)
if (!in) return; //0 - пустить игрока на сервер in=0

new name[32], check[32]
get_user_name(id, name, charsmax(name))
copy( check, 31, name )

new k
switch (in)
{
case 1: //1 - кикнуть игрока
{
k = nick_check(1, 0, get_pcvar_num(cv_ip), get_pcvar_num(cv_retry), 1, 1, 1, 1, check)
if (k) create_message_log(id, 4, k, name, check);
}
case 2: //2 - убрать из ника запрещенные части
{
if ( nick_check(1, 0, get_pcvar_num(cv_ip), get_pcvar_num(cv_retry), 1, 1, 1, 1, check) )
set_task(RETRY_TIME, "task_retry_prov", id + TASK_RETRY, _, _, "a", CHANGE_COUNT);
}
}
return
}

//цикл проверок ника после захода в игру
public task_retry_prov(id)
{
id -= TASK_RETRY

if ( !is_user_connected(id) )
{
clear_param(id, 1);
return
}

count_change[id]++

new name[35], check[32]
get_user_name(id, check, charsmax(check))
copy(name, 31, check)

new k = nick_check(32, 1, get_pcvar_num(cv_ip), get_pcvar_num(cv_retry), 1, 1, 1, 1, check)

//если попытки изменения "плохого" ника закончились или человек с плохим ником зашел в спектры - удаляем его с сервера

if (!k )
task_exists(id + TASK_RETRY);
else if ( k && (count_change[id] == CHANGE_COUNT || cs_get_user_team(id) == CS_TEAM_SPECTATOR) )
{
create_message_log(id, 4, k, "", "")
task_exists(id + TASK_RETRY)
}
else if (k && is_user_alive(id))
{
//добавляем символы если ник короткий
static text[32]
new sh = get_pcvar_num(cv_short)
if (sh && strlen(check) <= sh)
{
get_pcvar_string(cv_short_add, text, charsmax(text))
formatex(check, charsmax(check), "%s%s", check, text)
}
else if ( !sh && !check[0] )
{
get_pcvar_string(cv_short_add2, text, charsmax(text))
formatex(check, charsmax(check), "%s",text)
}

name[33] = id
name[34] = k
set_task(1.0, "task_prov", id + TASK_RPROV, name, 35)
client_cmd(id, "setinfo name ^"%s^"", check)
}

return
}

//проверка ника после попытки его изменения, т.к. ник может и не сменится и меняется не сразу
public task_prov(name[35])
{
new id = name[33]
new k = name[34]

new check[32]
get_user_name(id, check, charsmax(check))

if ( !nick_check(1, 0, get_pcvar_num(cv_ip), get_pcvar_num(cv_retry), 1, 1, 1, 1, check) )
{
create_message_log(id, 2, k, name, check)
task_exists(id + TASK_RETRY)
}
}

//проверка изменения ника во время игрового процесса
public fwClientUserInfoChanged(id, buffer)
{
if (!is_user_connected(id) || is_user_bot(id))
return FMRES_IGNORED;

if (is_admin(id)) //если это админ игнорим
return FMRES_IGNORED;

static block_change
block_change = get_pcvar_num(cv_block_change)

if (!block_change) //не делать проверку во время игры
return FMRES_IGNORED;

new name[32], check[32]
get_user_name(id, name, charsmax(name))

engfunc(EngFunc_InfoKeyValue, buffer, "name", check, charsmax(check))

if (!strcmp(name, check)) //сравниваем строки
return FMRES_IGNORED;

new k
switch (block_change)
{
case 1: //просто болкировать изменение ника, если он содержит запрещенную часть
{
k = nick_check(1, 0, get_pcvar_num(cv_ip), get_pcvar_num(cv_retry), 1, 1, 1, 1, check)
if (k) copy(check, 31, name);
}
case 2: //убарать из ника запрещенные части
{
copy(name, 31, check)
k = nick_check(32, 1, get_pcvar_num(cv_ip), get_pcvar_num(cv_retry), 1, 1, 1, 1, check);
}
case 3: //блокировать любое изменение ника (без лога)
{
copy(check, 31, name)
if ( !task_exists(id + TASK_RPROV) ) k = 1;
}
}

//удаляем повторные проверки если ник сменился
if ( (block_change == 2 || (block_change == 1 && !k)) && task_exists(id + TASK_RETRY) && !task_exists(id + TASK_RPROV) )
remove_task(id + TASK_RETRY);

if (k)
{
if ( block_change < 3 )
{
//добавляем символы если ник короткий
static text[32]
new sh = get_pcvar_num(cv_short)
if (sh && strlen(check) <= sh)
{
get_pcvar_string(cv_short_add, text, charsmax(text))
formatex(check, charsmax(check), "%s%s", check, text)
}
else if ( !sh && !check[0] )
{
get_pcvar_string(cv_short_add2, text, charsmax(text))
formatex(check, charsmax(check), "%s",text)
}
}

create_message_log(id, block_change, k, name, check)

engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", check, charsmax(check))

return FMRES_SUPERCEDE
}

return FMRES_IGNORED
}

//проверки на разрешения админа
is_admin(id)
{
static flag[2]
get_pcvar_string(cv_admin_flag, flag, charsmax(flag))
if (has_flag(id, flag)) return 1;
return 0
}

//запуск всех проверок
//rr - повторять функции
nick_check(rr, delbad, p_ip, p_retry, p_advert, p_flormat, p_forbid, p_kols, check[])
{
//не делать проверку на ip адрес, если мало символов
if (strlen(check) < 9) p_ip = 0;

new i, pr, k
while(i++ <= rr )
{
if( !k && pr ) k = pr;

if (p_ip)
if ( prov_ip(delbad, check) ) { pr = 3; continue; }
else p_ip = 0;

if (p_advert)
if ( prov_badadvert(delbad, check) ) { pr = 4; continue; }
else p_advert = 0;

if (p_flormat)
if ( prov_badflormat(delbad, check) ) { pr = 5; continue; }
else p_flormat = 0;

if (p_forbid)
if ( prov_badforbid(delbad, check) ) { pr = 6; continue; }
else p_forbid = 0;

if (p_retry)
if ( prov_retry(delbad, p_retry, check) ) { pr = 2; continue;}
else p_retry = 0;

if (p_kols)
if ( get_pcvar_num(cv_short) && strlen(check) <= get_pcvar_num(cv_short) ) pr = 1;

break;
}

if ( !k && pr ) return pr;

return k
}

//проверка на наличие IP адреса
prov_ip(delbad, check[])
{
new sim, kc, kt, i, nach, kon
new lenb = strlen(check)

for (i = 0; i < lenb; i++)
{
sim = check[i] - 48
if (sim >= 0 && sim < 10)
{
kc++
if (!nach) nach = i;
else kon = i;
}
else if ((sim == -2 || sim == -4) && kc > 0)
{
kc = 0; kt++;
}
}
if (kt > 2)
{
if (delbad) del_bad(nach, kon, check);
return 1
}
return 0
}

//проверка на повторение символов (retry количетсво повторений)
prov_retry(delbad, retry, check[])
{
new pr

//если delbad больше 1 удаляет повторяющиеся символы все сразу а не по одному
if (delbad > 1) delbad = retry;
//

new lenb = strlen(check) - 1

for (new i = 0; i < lenb; i++)
{
if (check[i] == check[i+1] ) pr++;
else pr = 0;

if (pr == retry)
{
if (delbad) del_bad(i - delbad + 1, delbad, check)
return 1
}
}
return 0
}

//проверка на ADVERT - рекламу
prov_badadvert(delbad, check[])
{
new badadvert[32], kp
for (new i = 0; i < advertCnt; i++)
{
ArrayGetString(bad_advert, i, badadvert, charsmax(badadvert))
kp = find_str2(check, badadvert)
if (kp >= 0)
{
if (delbad) del_bad(kp, strlen(badadvert), check)
return 1
}
}
return 0
}

//проверка на FLORMAT - мат
prov_badflormat(delbad, check[])
{
new badfm[32], kp
for (new i = 0; i < flormatCnt; i++)
{
ArrayGetString(bad_flormat, i, badfm, charsmax(badfm))
kp = find_str(check, badfm)
if (kp != -1)
{
if (delbad) del_bad(kp, strlen(badfm), check);
return 1
}
}
return 0
}

//проверка на FORBID - запрещеное
prov_badforbid(delbad, check[])
{
new badfb[32], kp
for (new i = 0; i < forbidCnt; i++)
{
ArrayGetString(bad_forbid, i, badfb, charsmax(badfb))
kp = find_str(check, badfb)
if (kp != -1)
{
if (delbad) del_bad(kp, strlen(badfb), check)
return 1
}
}
return 0
}

//убирает указанную часть
del_bad(left, lenbad, check[])
{
new lenb = strlen(check) - left - lenbad

if ( lenb <= 0 )
{
check[0] = '^0'
return
}

for (new i = 0; i < lenb; i++)
{
check[i + left] = check[i + left + lenbad]
}
check[lenb + left] = '^0'

return
}

//находит в строке другую строку и возвращает номер позиции если найдено
find_str(check[], bad[])
{
new i, j, lenc, lenb
lenc = strlen(check)
lenb = strlen(bad)

for (i = 0; i < lenc; i++)
{
if ( i < 256 )
{
for (j = 0; j < lenb; j++)
{
if (j < 256 && soot[check[i+j]] != soot[bad[j]])
break;
}
if (j == lenb) return i;
}
}
return -1
}

find_str2(check[], bad[])
{
new i, j, lenc, lenb
lenc = strlen(check)
lenb = strlen(bad)

for (i = 0; i < lenc; i++)
{
if ( i < 256 )
{
for (j = 0; j < lenb; j++)
{
if (j < 256 && check[i+j] != bad[j])
break;
}
if (j == lenb) return i;
}
}
return -1
}

//формирует сообщение и лог
create_message_log(id, mess, k, name[], check[])
{
static bad[LEN_RECORDS], text[32]
ArrayGetString(reason, k, text, charsmax(text))

switch ( mess )
{
case 1:
{
formatex(bad, charsmax(bad), " ^x01%L ^x04%L", id, "CHANGE_NICK_1", id, text)
}
case 2:
{
static name1[40], name2[40]
formatex(name1, charsmax(name1), "^x03%s^x01", name)
formatex(name2, charsmax(name2), "^x03%s^x01", check)
formatex(bad, charsmax(bad), " %L ^x04%L", id , "CHANGE_NICK_2", name1, name2, id, text)
}
case 3:
{
formatex(bad, charsmax(bad), " ^x04%L", id , "CHANGE_NICK_3")
}
case 4:
{
formatex(bad, charsmax(bad), "%L %L", id, text, id , "CHANGE_NICK")
server_cmd("kick #%d %s", get_user_userid(id), bad)
}
}

new message = get_pcvar_num(cv_message)

if ( mess != 4 && message != 2)
mess_begin(id, 0, bad);

replace_all(bad, charsmax(bad), "^x01", "")
replace_all(bad, charsmax(bad), "^x03", "")
replace_all(bad, charsmax(bad), "^x04", "")

if ( mess != 4 && message > 1 )
{
set_hudmessage(HUD_R, HUD_G, HUD_B, -1.0, -1.0, 0, 0.0, 4.0, 0.0, 0.0, -1)
show_hudmessage(id, "%s", bad)
}

if ( mess != 3 && get_pcvar_num(cv_log) )
{
new authid[35], ip[35], nick[32]
get_user_authid(id, authid, charsmax(authid))
get_user_name(id, nick, charsmax(nick))
get_user_ip(id, ip, charsmax(ip), 1)

if ( mess == 2 )
log_to_file("addons/amxmodx/logs/bad.log","<%s><%s> %s", ip, authid, bad);
else
log_to_file("addons/amxmodx/logs/bad.log","%s <%s><%s> %s ", nick, ip, authid, bad);
}
}

//выводит сообщения на экран
mess_begin(id, who, check[])
{
switch( who )
{
case 0:
{
check[0] = 0x01
message_begin(MSG_ONE, get_user_msgid("SayText"), _, id)
write_byte(id)
write_string(check)
message_end()
}
default:
{
static bad[LEN_RECORDS], name[32], alive[16]

if (is_user_alive(id)) alive[0] = '^0';
else formatex(alive, charsmax(alive), "%L ", id, "TAG_DEATH");

get_user_name(id, name, charsmax(name))
switch (cs_get_user_team(id))
{
case CS_TEAM_T: formatex(bad, charsmax(bad), " %s(^x03%L^x01) ^x03%s^x01: %s", alive, id, "TAG_T", name, check)
case CS_TEAM_CT: formatex(bad, charsmax(bad), " %s(^x03%L^x01) ^x03%s^x01: %s", alive, id, "TAG_CT", name, check)
default: formatex(bad, charsmax(bad), " (%L) ^x03%s^x01: %s", id, "TAG_SPEC", name, check)
}
bad[0] = 0x01

new at = get_pcvar_num(cv_alltalk), bool:ar = !(get_user_flags(id) & ADMIN_BAN)
for( new i = 1; i <= g_MaxPlayers; i++)
{
if (!is_user_connected(i))
continue;

if ( at != 1 || (at == 2 && ar ) )
{
if ( (who == 2 && cs_get_user_team(id) != cs_get_user_team(i)) ||
is_user_alive(id) != is_user_alive(i) )
continue;
}

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, i)
write_byte(id)
write_string(bad)
message_end()
}

}
}
}


кажется вот эти строки отвечают за это

Код
case CS_TEAM_T: formatex(bad, charsmax(bad), " %s(^x03%L^x01) ^x03%s^x01: %s", alive, id, "TAG_T", name, check)
                                case CS_TEAM_CT: formatex(bad, charsmax(bad), " %s(^x03%L^x01) ^x03%s^x01: %s", alive, id, "TAG_CT", name, check)
                                default: formatex(bad, charsmax(bad), " (%L) ^x03%s^x01: %s", id, "TAG_SPEC", name, check)


Как же убрать , подскажите

Отредактировал: Kasper55, - 26.7.2012, 19:50
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Kasper55
сообщение 26.7.2012, 23:59
Сообщение #2
Стаж: 16 лет

Сообщений: 1145
Благодарности: выкл.

Если вырезать вот это
"TAG_T"
"TAG_CT"
"TAG_SPEC"

то приставка убирается но в логах появляются ошибки

Код
L 07/27/2012 - 01:59:27: String formatted incorrectly - parameter 8 (total 7)
L 07/27/2012 - 01:59:27: [AMXX] Displaying debug trace (plugin "bad.amxx")
L 07/27/2012 - 01:59:27: [AMXX] Run time error 25: parameter error
L 07/27/2012 - 01:59:27: [AMXX]    [0] bad.sma::mess_begin (line 880)
L 07/27/2012 - 01:59:27: [AMXX]    [1] bad.sma::block_say (line 320)
L 07/27/2012 - 01:59:27: [AMXX]    [2] bad.sma::say_say (line 238)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: