Artem_Krasavchik
Пользователь
- Регистрация
- 27 Апр 2021
- Сообщения
- 12
- Симпатии
- 0
Неверный раздел
Здравствуйте, помогите решить проблему пожалуйста, как заставить плагин обрабатывать префиксы.
Он то показывает их то не хочет, даже не могу понять в чем дело, просто без причины убираются то снова появляются...
Он то показывает их то не хочет, даже не могу понять в чем дело, просто без причины убираются то снова появляются...
C#:
#include amxmodx
#include <csstats>
#define is_user_admin(%0) (get_user_flags(%0) > 0 && ~get_user_flags(%0) & ADMIN_USER)
#define TAGS // Теги в чате Гл. Админ | Админ | VIP [ По умолчанию включен ]
#if defined TAGS
#define LT_PREFIXES // Свои префиксы. Файл addons/amxmodx/configs/UM/TranslitChat.ini [ По умолчанию выключен ]
#endif
#define TOP_RANK 10
#define TOP_PREFIX "^1[^4TOP Игрок^1]"
#define DEF_RUS // Русский язык по умолчанию [ По умолчанию английский ]
//#define GL_ADMIN ADMIN_RCON // Флаг доступа для тега "Гл. Админ" в чате
//#define ADMIN ADMIN_BAN // Флаг доступа для тега "Админ" в чате
//#define VIP ADMIN_LEVEL_H // Флаг доступа для тега "VIP" в чате
#define ANTIFLOOD // Замена стандартного плагина antiflood.amxx [ По умолчанию выключен ]
#define AD_TIME 0.75 // Время между сообщениями, когда сработает антифлуд система
#define ADMIN_ALLCHAT // Показывать весь чат админам [ По умолчанию включен ]
//#define DEFAULT_CS_CHAT // Cтандартный чат кс [ По умолчанию выключен ]
//Живые общаются только с живыми, мертвые с мертвыми. Админ видит весь чат если ADMIN_ALLCHAT
new const g_chConvert[94 * 2 char] =
{
0x2100D0AD, 0x2300D0B6, 0x25003F00, 0xD18D2800, 0x29002A00, 0x2B00D0B1, 0x2D00D18E, 0x2E003000,
0x31003200, 0x33003400, 0x35003600, 0x37003800, 0x3900D096, 0xD0B6D091, 0x3D00D0AE, 0x2C002200,
0xD0A4D098, 0xD0A1D092, 0xD0A3D090, 0xD09FD0A0, 0xD0A8D09E, 0xD09BD094, 0xD0ACD0A2, 0xD0A9D097,
0xD099D09A, 0xD0ABD095, 0xD093D09C, 0xD0A6D0A7, 0xD09DD0AF, 0xD1855C00, 0xD18A3A00, 0x5F00D191,
0xD184D0B8, 0xD181D0B2, 0xD183D0B0, 0xD0BFD180, 0xD188D0BE, 0xD0BBD0B4, 0xD18CD182, 0xD189D0B7,
0xD0B9D0BA, 0xD18BD0B5, 0xD0B3D0BC, 0xD186D187, 0xD0BDD18F, 0xD0A52F00, 0xD0AAD081
};
new bool:g_bUseRus[33];
enum _:DATA
{
TYPE[2],
AUTH[32],
PREFIX[64]
};
new Array:g_aData, g_PlayerData[DATA];
new g_szPrefix[33][64];
public plugin_init()
{
#define VERSION "2.8"
register_plugin("[UM] Lite Translit", VERSION, "neygomon");
register_cvar("lt_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
register_clcmd("say /rus", "LangCtrlRus");
register_clcmd("say /eng", "LangCtrlEng");
register_clcmd("say", "HandlerSay");
register_clcmd("say_team", "HandlerSayTeam");
}
public plugin_cfg()
{
g_aData = ArrayCreate(DATA);
new buff[256], fp = fopen("addons/amxmodx/configs/UM/TranslitChat.ini", "rt");
if(!fp) return set_fail_state("File ^"addons/amxmodx/configs/UM/TranslitChat.ini^" not found");
while(!feof(fp))
{
fgets(fp, buff, charsmax(buff));
if(buff[0] && buff[0] != ';' && parse(buff, g_PlayerData[TYPE], 1, g_PlayerData[AUTH], 31, g_PlayerData[PREFIX], 63))
{
ArrayPushArray(g_aData, g_PlayerData);
}
}
return fclose(fp);
}
public client_putinserver(id)
{
SearchClient(id);
#if defined DEF_RUS
g_bUseRus[id] = true;
#else
g_bUseRus[id] = false;
#endif
}
public HandlerSay(id) return FormatMsg(id, false);
public HandlerSayTeam(id) return FormatMsg(id, true);
public LangCtrlRus(id)
{
if(g_bUseRus[id]) client_print_color(id, print_team_grey, "^1[^4UM^1] *** Русский язык УЖЕ включен! ***");
else
{
client_print_color(id, print_team_grey, "^1[^4UM^1] *** Русский язык активирован! ***");
g_bUseRus[id] = true;
client_cmd(id, "spk buttons/blip1.wav");
}
}
public LangCtrlEng(id)
{
if(!g_bUseRus[id])
client_print_color(id, print_team_grey, "^1[^4UM^1] *** Английский язык УЖЕ включен! ***");
else
{
client_print_color(id, print_team_grey, "^1[^4UM^1] *** Английский язык активирован! ***");
g_bUseRus[id] = false;
client_cmd(id, "spk buttons/blip1");
}
}
FormatMsg(id, bool:IsTeam)
{
#define MAX_BYTES 180
static sMessage[MAX_BYTES], sConvertStr[charsmax(sMessage) * 2 + 1];
read_args(sMessage, charsmax(sMessage));
remove_quotes(sMessage);
if(sMessage[0] == EOS || sMessage[0] == '/')
return PLUGIN_HANDLED_MAIN;
#if defined ANTIFLOOD
static Float:fTimeFlood[33], Float:fGameTime, iFloodWarn[33];
if(fTimeFlood[id] > (fGameTime = get_gametime()))
{
if(++iFloodWarn[id] > 2)
{
client_print_color(id, print_team_grey, "^1[^4UM^1] *** Прекратите флудить! ***");
fTimeFlood[id] = fGameTime + AD_TIME + 3.0;
return PLUGIN_HANDLED;
}
}
else if(iFloodWarn[id]) iFloodWarn[id]--;
fTimeFlood[id] = fGameTime + AD_TIME;
#endif
static iLen, sTags[MAX_BYTES], idTeam, sTeam[16];
idTeam = get_user_team(id);
switch(idTeam) {
case 1: iLen = formatex(sTags, charsmax(sTags), "%s%s ", is_user_alive(id) ? "^1" : "^1*^3Мертвый^1* ", IsTeam ? "^1[^3Терроры^1]" : "");
case 2: iLen = formatex(sTags, charsmax(sTags), "%s%s ", is_user_alive(id) ? "^1" : "^1*^3Мертвый^1* ", IsTeam ? "^1[^3Спецназ^1]" : "");
default: iLen = formatex(sTags, charsmax(sTags), "^1*^3Наблюдатель^1* ");
}
#if defined TAGS
#if defined LT_PREFIXES
if(g_szPrefix[id][0])
{
replace_all(g_szPrefix[id], charsmax(g_szPrefix[]), "!n", "^1");
replace_all(g_szPrefix[id], charsmax(g_szPrefix[]), "!t", "^3");
replace_all(g_szPrefix[id], charsmax(g_szPrefix[]), "!g", "^4");
iLen += formatex(sTags[iLen], charsmax(sTags) - iLen, "^4%s^1 ", g_szPrefix[id]);
}
#if defined TOP_RANK
new st[8]
new rank = get_user_stats(id,st,st)
// проверяем на ТОП
if(rank > TOP_RANK){ // игрок не топ игрок
// записываем данные в кеш
return PLUGIN_CONTINUE
}else // игрок ТОП, сбрасываем указатель
iLen += formatex (sTags[iLen], charsmax(sTags) - iLen, "%s ", TOP_PREFIX);
#endif
#endif
iLen += formatex(sTags[iLen], charsmax(sTags) - iLen, "^3%%s1^1: %%s2");
#endif
if(g_bUseRus[id])
{
new nLen;
for(new n; sMessage[n] != EOS; n++)
{
if('!' <= sMessage[n] <= '~')
{
sConvertStr[nLen++] = g_chConvert{(sMessage[n] - '!') * 2};
if(g_chConvert{(sMessage[n] - '!') * 2 + 1} != EOS)
sConvertStr[nLen++] = g_chConvert{(sMessage[n] - '!') * 2 + 1};
}
else sConvertStr[nLen++] = sMessage[n];
}
sConvertStr[nLen] = EOS;
}
else sConvertStr = sMessage;
static iByteLimit; iByteLimit = MAX_BYTES;
while(iLen + strlen(sConvertStr) > MAX_BYTES) sConvertStr[iByteLimit -= 10] = 0;
static players[32], pcount; get_players(players, pcount, "c");
switch(IsTeam)
{
case true:
{
for(new i; i < pcount; i++)
{
#if defined ADMIN_ALLCHAT
if(is_user_admin(players[i]) || (is_user_alive(id) == is_user_alive(players[i]) && idTeam == get_user_team(players[i])))
#else
if(is_user_alive(id) == is_user_alive(players[i]) && idTeam == get_user_team(players[i]))
#endif
PrintChat(players[i], id, sTags, sConvertStr);
}
}
case false:
{
for(new i; i < pcount; i++)
#if defined DEFAULT_CS_CHAT
#if defined ADMIN_ALLCHAT
if(is_user_admin(players[i]) || is_user_alive(id) == is_user_alive(players[i]))
#else
if(is_user_alive(id) == is_user_alive(players[i]))
#endif
PrintChat(players[i], id, sTags, sConvertStr);
#else
PrintChat(players[i], id, sTags, sConvertStr);
#endif
}
}
static sAuthId[25], sName[32];
get_user_name(id, sName, charsmax(sName));
get_user_authid(id, sAuthId, charsmax(sAuthId));
log_message("^"%s<%d><%s><%s>^" %s ^"%s^"", sName, get_user_userid(id), sAuthId, sTeam, IsTeam ? "say_team" : "say" , sConvertStr);
return PLUGIN_HANDLED;
}
PrintChat(iReceiver, iSender, const sTags[], const sMessage[])
{
message_begin(MSG_ONE, 76, .player=iReceiver);
write_byte(iSender);
write_string(sTags);
write_string("");
write_string(sMessage);
message_end();
}
stock SearchClient(id)
{
if(!is_user_connected(id)) return g_szPrefix[id][0] = 0;
for(new i; i < ArraySize(g_aData); i++)
{
ArrayGetArray(g_aData, i, g_PlayerData);
switch(g_PlayerData[TYPE])
{
case 'f': if(is_user_flags(id, g_PlayerData[AUTH]))
{
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), g_PlayerData[PREFIX]);
}
case 'i':
{
static szIP[16]; get_user_ip(id, szIP, 15, 1);
if(equal(g_PlayerData[AUTH], szIP))
{
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), g_PlayerData[PREFIX]);
}
}
case 's':
{
static szAuthid[25]; get_user_authid(id, szAuthid, 24);
if(equal(g_PlayerData[AUTH], szAuthid))
{
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), g_PlayerData[PREFIX]);
}
}
}
}
return g_szPrefix[id][0] = 0;
}
bool:is_user_flags(id, gt_flags[])
{
new str_flags[32], flags = get_user_flags(id);
get_flags(flags, str_flags, 31);
if(contain(str_flags, gt_flags) == -1)
return false;
return true;
}