префикс масквича

eac

Заблокированные
Пользователь
Регистрация
8 Апр 2019
Сообщения
18
Симпатии
0
Есть плагин AdminPrefixes 4.1 к нему есть конфиг, в конфиге пример добавления префикса:
; f - Префикс по флагам
; i - Префикс по IP
; s - Префикс по SteamID
; n - Префикс по нику

"n" "H777AX" "!g[Админ]"
======
Его можно редактировать (в колорчат) сам префикс !n[!gАдмин!n]
хотелось бы сделать добавления, то есть каким цветом будет этот игрок писать в чате!
типо: !n[!gАдмин!n]!g: лололол .!n - Желтым, !g - Зеленым, !t - Цвет команды
но не получатся так сделать(((
ПОМОГИТЕ ЛЮДИ ДОБРЫЕ!!!
Код:
#include <amxmodx>
#include <amxmisc>
#include <celltrie>
#include <cstrike>

#define VERSION "4.1"
#define FLAG_LOAD ADMIN_CFG  // доступ к команде перезагрузки префиксов без смены карты - ap_reload_prefixes
#define MAX_PREFIXES 33 // максимальное количество префиксов

new g_listen, g_listen_flag;
new pre_ips_count = 0, pre_names_count = 0, pre_steamids_count, pre_flags_count = 0, temp_cvar[2];
new configs_dir[64], file_prefixes[128], text[128], prefix[32], type[2], key[32], length, line = 0, error[256];
new g_saytxt, g_maxplayers, CsTeams:g_team;
new g_typed[192], g_message[190], g_name[32];
new Trie:pre_ips_collect, Trie:pre_names_collect, Trie:pre_steamids_collect, Trie:client_prefix;
new str_id[16], temp_key[35], temp_prefix[32];
new Array:g_aFlagsCollect

new const say_team_info[2][CsTeams][] =
{
    {"*Наблюдатель* ", "*Умер* ", "*Умер* ", "*Наблюдатель* "},
    {"", "", "", ""}
}

new const sayteam_team_info[2][CsTeams][] =
{
    {"(Наблюдатель) ", "*Умер*(Террорист) ", "*Умер*(Контр-Террорист) ", "(Наблюдатель) "},
    {"(Наблюдатель) ", "(Террорист) ", "(Контр-Террорист) ", "(Наблюдатель) "}
}

new const forbidden_say_symbols[] = {
    "/",
    "!",
    "%",
    "$"
}

new const separator[] = "************************************************"
new const in_prefix[] = "[АдминПрефиксы]" // префикс для сообщений от плагина

public plugin_init()
{
    register_plugin("Admin Prefixes", VERSION, "m0skVi4a ;]")

    g_listen = register_cvar("ap_listen", "1")
    g_listen_flag = register_cvar("ap_listen_flag", "a")

    g_saytxt = get_user_msgid ("SayText")
    g_maxplayers = get_maxplayers()

    register_concmd("ap_reload_prefixes", "LoadPrefixes")
    register_clcmd("say", "HookSay")
    register_clcmd("say_team", "HookSayTeam")

    pre_ips_collect = TrieCreate()
    pre_names_collect = TrieCreate()
    pre_steamids_collect = TrieCreate()
    client_prefix = TrieCreate()
    g_aFlagsCollect = ArrayCreate ( 34 )

    register_dictionary("admin_prefixes.txt")

    get_configsdir(configs_dir, charsmax(configs_dir))
    formatex(file_prefixes, charsmax(file_prefixes), "%s/ap_prefixes.ini", configs_dir)

    LoadPrefixes(0)
}
    
public LoadPrefixes(id)
{
    if(!(get_user_flags(id) & FLAG_LOAD))
    {
        console_print(id, "%L", LANG_SERVER, "PREFIX_PERMISSION", in_prefix)
        return PLUGIN_HANDLED
    }

    TrieClear(pre_ips_collect)
    TrieClear(pre_names_collect)
    TrieClear(pre_steamids_collect)
    ArrayClear ( g_aFlagsCollect )

    line = 0, length = 0, pre_flags_count = 0, pre_ips_count = 0, pre_names_count = 0;

    if(!file_exists(file_prefixes))
    {
        formatex(error, charsmax(error), "%L", LANG_SERVER, "PREFIX_NOT_FOUND", in_prefix, file_prefixes)
        set_fail_state(error)
    }

    server_print(separator)

    new sText[34]
    while(read_file(file_prefixes, line++ , text, charsmax(text), length) && (pre_ips_count + pre_names_count + pre_steamids_count + pre_flags_count) <= MAX_PREFIXES)
    {
        if(!text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
            continue

        parse(text, type, charsmax(type), key, charsmax(key), prefix, charsmax(prefix))
        trim(prefix)

        if(!type[0] || !prefix[0] || !key[0])
            continue

        replace_all(prefix, charsmax(prefix), "!g", "^x04")
        replace_all(prefix, charsmax(prefix), "!t", "^x03")
        replace_all(prefix, charsmax(prefix), "!n", "^x01")

        switch(type[0])
        {
            case 'f':
            {
                pre_flags_count++
                formatex ( sText, charsmax ( sText ), "^"%s^" ^"%s^"", key, prefix )
                ArrayPushString ( g_aFlagsCollect, sText )
                server_print("%L", LANG_SERVER, "PREFIX_LOAD_FLAG", in_prefix, prefix, key[0])
            }
            case 'i':
            {
                pre_ips_count++
                TrieSetString(pre_ips_collect, key, prefix)
                server_print("%L", LANG_SERVER, "PREFIX_LOAD_IP", in_prefix, prefix, key)
            }
            case 's':
            {
                pre_steamids_count++
                TrieSetString(pre_steamids_collect, key, prefix)
                server_print("%L", LANG_SERVER, "PREFIX_LOAD_STEAMID", in_prefix, prefix, key)
            }
            case 'n':
            {
                pre_names_count++
                TrieSetString(pre_names_collect, key, prefix)
                server_print("%L", LANG_SERVER, "PREFIX_LOAD_NAME", in_prefix, prefix, key)
            }
            default:
            {
                continue
            }
        }
    }

    if(pre_flags_count <= 0 && pre_ips_count <= 0 && pre_steamids_count <= 0 && pre_names_count <= 0)
    {
        server_print("%L", LANG_SERVER, "PREFIX_NO", in_prefix)
    }

    get_user_name(id, g_name, charsmax(g_name))
    server_print("%L", LANG_SERVER, "PREFIX_LOADED_BY", in_prefix, g_name)
    console_print(id, "%L", LANG_SERVER, "PREFIX_LOADED", in_prefix)

    server_print(separator)

    for(new i = 1; i <= g_maxplayers; i++)
    {
        num_to_str(i, str_id, charsmax(str_id))
        TrieDeleteKey(client_prefix, str_id)
        PutPrefix(i)
    }

    return PLUGIN_HANDLED
}

public client_putinserver(id)
{
    num_to_str(id, str_id, charsmax(str_id))
    TrieSetString(client_prefix, str_id, "")
    PutPrefix(id)
}

public HookSay(id)
{
    read_args(g_typed, charsmax(g_typed))
    remove_quotes(g_typed)

    trim(g_typed)

    if(equal(g_typed, "") || !is_user_connected(id))
        return PLUGIN_HANDLED_MAIN

    if(check_say_characters(g_typed))
        return PLUGIN_HANDLED_MAIN

    num_to_str(id, str_id, charsmax(str_id))
    TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix))

    get_user_name(id, g_name, charsmax(g_name))

    g_team = cs_get_user_team(id)

    if(temp_prefix[0])
    {
        formatex(g_message, charsmax(g_message), "^1%s^4%s^3 %s :^4 %s", say_team_info[is_user_alive(id)][g_team], temp_prefix, g_name, g_typed)
    }
    else
    {
        formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", say_team_info[is_user_alive(id)][g_team], g_name, g_typed)
    }

    get_pcvar_string(g_listen_flag, temp_cvar, charsmax(temp_cvar))

    for(new i = 1; i <= g_maxplayers; i++)
    {
        if(!is_user_connected(i))
            continue

        if(is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
        {
            send_message(g_message, id, i)
        }
    }

    return PLUGIN_HANDLED_MAIN
}

public HookSayTeam(id)
{
    read_args(g_typed, charsmax(g_typed))
    remove_quotes(g_typed)

    trim(g_typed)

    if(equal(g_typed, "") || !is_user_connected(id))
        return PLUGIN_HANDLED_MAIN

    if(check_say_characters(g_typed))
        return PLUGIN_HANDLED_MAIN

    num_to_str(id, str_id, charsmax(str_id))
    TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix))

    get_user_name(id, g_name, charsmax(g_name))

    g_team = cs_get_user_team(id)

    if(temp_prefix[0])
    {
        formatex(g_message, charsmax(g_message), "^1%s^4%s^3 %s :^4 %s", sayteam_team_info[is_user_alive(id)][g_team], temp_prefix, g_name, g_typed)
    }
    else
    {
        formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", sayteam_team_info[is_user_alive(id)][g_team], g_name, g_typed)
    }

    get_pcvar_string(g_listen_flag, temp_cvar, charsmax(temp_cvar))

    for(new i = 1; i <= g_maxplayers; i++)
    {
        if(!is_user_connected(i))
            continue

        if(get_user_team(id) == get_user_team(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
        {
            if(is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
            {
                send_message(g_message, id, i)
            }
        }
    }

    return PLUGIN_HANDLED_MAIN
}

public client_infochanged(id)
{
    if(!is_user_connected(id))
        return PLUGIN_CONTINUE

    new g_old_name[32];

    get_user_info(id, "name", g_name, charsmax(g_name))
    get_user_name(id, g_old_name, charsmax(g_old_name))

    if(!equal(g_name, g_old_name))
    {
        num_to_str(id, str_id, charsmax(str_id))
        TrieSetString(client_prefix, str_id, "")
        set_task(0.5, "PutPrefix", id)
        return PLUGIN_HANDLED
    }

    return PLUGIN_CONTINUE
}

public PutPrefix(id)
{
    num_to_str(id, str_id, charsmax(str_id))
    TrieSetString(client_prefix, str_id, "")

    get_user_authid(id, temp_key, charsmax(temp_key))

    if(TrieGetString(pre_steamids_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
    {
        TrieSetString(client_prefix, str_id, temp_prefix)
        return
    }

    new sFlags[32]
    get_flags ( get_user_flags ( id ), sFlags, charsmax ( sFlags ) )

    if ( sFlags[0] && sFlags[0] != 'z' )
    {
        new iSize = ArraySize ( g_aFlagsCollect )
        new sBuff[34], sKey[2]
        for ( new i; i < iSize; i++ )
        {
            ArrayGetString ( g_aFlagsCollect, i, sBuff, charsmax ( sBuff ) )
            parse ( sBuff, sKey, 1, temp_prefix, charsmax ( temp_prefix ) )

            if ( contain ( sFlags, sKey ) != -1 )
            {
                TrieSetString ( client_prefix, str_id, temp_prefix )
                return
            }
        }
    }
    
    get_user_ip(id, temp_key, charsmax(temp_key), 1)

    if(TrieGetString(pre_ips_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
    {
        TrieSetString(client_prefix, str_id, temp_prefix)
        return
    }

    get_user_name(id, temp_key, charsmax(temp_key))

    if(TrieGetString(pre_names_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
    {
        TrieSetString(client_prefix, str_id, temp_prefix)
    }
}

send_message(const message[], const id, const i)
{
    message_begin(MSG_ONE, g_saytxt, {0, 0, 0}, i)
    write_byte(id)
    write_string(message)
    message_end()
}

bool:check_say_characters(const check_message[])
{
    for(new i = 0; i < charsmax(forbidden_say_symbols); i++)
    {
        if(check_message[0] == forbidden_say_symbols[i])
        {
            return true
        }
    }
    return false
}

public plugin_end ()
{
    ArrayDestroy ( g_aFlagsCollect )
    TrieDestroy ( pre_ips_collect )
    TrieDestroy ( pre_steamids_collect )
    TrieDestroy ( pre_names_collect )
    TrieDestroy ( client_prefix )
}
 

eac

Заблокированные
Пользователь
Регистрация
8 Апр 2019
Сообщения
18
Симпатии
0
На данный момент игроки с префиксом в чате все пишут зеленым!
хотелось бы каждому определенный цвет игроку выдавать
типо: !n[!gАдмин!n]"тут цвет добавить" !n - в чате желтым будет игрок писать
пример как хотелось бы:
!n[!gАдмин!n]!g
!g[Админ]!n
!n[!gVIP!n]!g
!g[Мисс]!t
===
А в конфиге плагина только префикс можно красить сам !n[!gVIP!n]
 
Сверху Снизу