Translit Chat проблемы с префиксами

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

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский
Не тот раздел, мало информации, какие плагины стоят, на каком месте стоит lite translit. Тему создайте в нужном разделе, раздел скриптинг не для таких вопросов
 

Artem_Krasavchik

Пользователь
Регистрация
27 Апр 2021
Сообщения
12
Симпатии
0
Не тот раздел, мало информации, какие плагины стоят, на каком месте стоит lite translit. Тему создайте в нужном разделе, раздел скриптинг не для таких вопросов
Хорошо, а куда нужно переместите пожалуйста, и это на последнем месте как написано в рекомаендациях.
 
Сверху Снизу