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

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

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

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

Colorchat и его использование

, подскажите)
Статус пользователя freeone
сообщение 24.10.2012, 15:55
Сообщение #1
Стаж: 13 лет

Сообщений: 140
Благодарностей: 13
Полезность: 78

как мне сделать что бы отображалось цветное сообщение в чате?
к примеру плагин high_ping_kicker
нужно вот эту строку сделать в цвете:
hpk
public showWarn(param[])
client_print( param[0] ,print_chat,"* Players with ping higher than %d will be kicked!", get_cvar_num( "amx_hpk_ping" ) )

что нужно вписывать?)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   Цитировать сообщение
Статус пользователя Morgan_812
сообщение 24.10.2012, 16:48
Сообщение #2
Стаж: 16 лет

Сообщений: 6
Благодарностей: 1
Полезность: 0

ColorChat( param[0] ,TEAM_COLOR,"* Players with ping higher than %d will be kicked!", get_cvar_num( "amx_hpk_ping" ) )
так вроде
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя freeone
сообщение 24.10.2012, 17:13
Сообщение #3
Стаж: 13 лет

Сообщений: 140
Благодарностей: 13
Полезность: 78

не,ошибку выдает при компиляции
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MaZzai
сообщение 24.10.2012, 23:45
Сообщение #4


Стаж: 17 лет

Сообщений: 2659
Благодарностей: 1411
Полезность: 1024

Цитата(freeone @ 24.10.2012, 16:55) *
как мне сделать что бы отображалось цветное сообщение в чате?
к примеру плагин high_ping_kicker
нужно вот эту строку сделать в цвете:
hpk
public showWarn(param[])
client_print( param[0] ,print_chat,"* Players with ping higher than %d will be kicked!", get_cvar_num( "amx_hpk_ping" ) )

что нужно вписывать?)


#include colorchat

ColorChat (0,GREEN, "^x04* Players with ping higher than %d will be kicked!", get_cvar_num( "amx_hpk_ping" ) )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя freeone
сообщение 25.10.2012, 14:30
Сообщение #5
Стаж: 13 лет

Сообщений: 140
Благодарностей: 13
Полезность: 78

Цитата(MaZzai @ 24.10.2012, 23:45) *
#include colorchat

ColorChat (0,GREEN, "^x04* Players with ping higher than %d will be kicked!", get_cvar_num( "amx_hpk_ping" ) )

сообщение не выводит...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MaZzai
сообщение 25.10.2012, 16:33
Сообщение #6


Стаж: 17 лет

Сообщений: 2659
Благодарностей: 1411
Полезность: 1024

Цитата(freeone @ 25.10.2012, 15:30) *
сообщение не выводит...

жаль
у меня вывело
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя freeone
сообщение 25.10.2012, 18:00
Сообщение #7
Стаж: 13 лет

Сообщений: 140
Благодарностей: 13
Полезность: 78

вот исходник:
hpk
/* AMX Mod script.
*
* © 2002-2003, OLO
* modified by shadow
* This file is provided as is (no warranties).
*
* Players with immunity won't be checked
*/

#include <amxmodx>
#include <amxmisc>
#include <colorchat>

new g_Ping[33]
new g_Samples[33]

public plugin_init()
{
register_plugin("High Ping Kicker (Steam)","0.16.2","OLO/shadow")
register_concmd("amx_hpk","cmdHpk",ADMIN_KICK,"- configures high_ping_kicker plugin")
register_cvar("amx_hpk_ping","150")
register_cvar("amx_hpk_check","5")
register_cvar("amx_hpk_tests","2")
register_cvar("amx_hpk_delay","5")

if ( get_cvar_num( "amx_hpk_check" ) < 5 ) set_cvar_num( "amx_hpk_check" , 5 )
if ( get_cvar_num( "amx_hpk_tests" ) < 3 ) set_cvar_num( "amx_hpk_tests" , 3 )
}

public client_disconnect(id)
remove_task( id )

public client_putinserver(id)
{
g_Ping[id] = 0
g_Samples[id] = 0

if ( !is_user_bot(id) )
{
new param[1]
param[0] = id
set_task( 10.0 , "showWarn" , id , param , 1 )

if (get_cvar_num("amx_hpk_tests") != 0) {
set_task( float(get_cvar_num("amx_hpk_delay")), "taskSetting", id, param , 1)
}
else {
set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , id , param , 1 , "b" )
}

}
}

public showWarn(param[])
ColorChat (0,GREEN, "^x04* Players with ping higher than %d will be kicked!", get_cvar_num( "amx_hpk_ping" ) )

public taskSetting(param[]) {
new name[32]
get_user_name(param[0],name,31)
set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , param[0] , param , 1 , "b" )
}

kickPlayer( id )
{
new name[32],authid[32]
get_user_name(id,name,31)
get_user_authid(id,authid,31)
client_print(0,print_chat,"** Player %s disconnected due to high ping",name)
server_cmd("kick #%d ^"Sorry but you have too high ping, try later...^"",get_user_userid(id))
log_amx("Highpingkick: ^"%s<%d><%s>^" was kicked due highping (Average Ping ^"%d^")", name,get_user_userid(id),authid,(g_Ping[id] / g_Samples[id]))
}

public checkPing(param[])
{
new id = param[ 0 ]

if ( get_user_flags(id) & ADMIN_IMMUNITY ) return

new p, l

get_user_ping( id , p , l )

g_Ping[ id ] += p
++g_Samples[ id ]

if ( (g_Samples[ id ] > get_cvar_num( "amx_hpk_tests" )) && (g_Ping[id] / g_Samples[id] > get_cvar_num( "amx_hpk_ping" )) )
kickPlayer(id)
}


public cmdHpk(id,level,cid){
if (!cmd_access(id,level,cid,1))
return PLUGIN_HANDLED

new ping[5]
new check_arr[5]
new tests_arr[5]
new delay_arr[5]
read_argv(1,ping,4)
read_argv(2,check_arr,4)
read_argv(3,tests_arr,4)
read_argv(4,delay_arr,4)

new check = str_to_num(check_arr)
new tests = str_to_num(tests_arr)
new delay = str_to_num(delay_arr)


if ( check < 5 ) check = 5
if ( tests < 3 ) tests = 3


if (read_argc() > 1){
set_cvar_string("amx_hpk_ping",ping)
}
if (read_argc() > 2) {
set_cvar_num("amx_hpk_check",check)
}
if (read_argc() > 3) {
set_cvar_num("amx_hpk_tests",tests)
}
if (read_argc() > 4) {
set_cvar_num("amx_hpk_delay",delay)
}

console_print(id,"Syntax: amx_hpk <ping to get kicked> <checks before kicks> <time between checks> <delay before first check in sec.>")
console_print(id,"Current High_Ping_Kicker Settings:")
console_print(id,"Maxping: %d Time between checks: %d Checkcount: %d Delay: %d",get_cvar_num("amx_hpk_ping"),get_cvar_num("amx_hpk_check"),get_cvar_num("amx_hpk_tests"),get_cvar_num("amx_hpk_delay"))
return PLUGIN_HANDLED
}



вот инклуд:
colorchat
#if defined COLORCHAT_INC
#endinput
#endif
#define COLORCHAT_INC

#pragma reqlib colorchat

/* ColorChat Support */
#define NORMAL DontChange
#define GREEN DontChange
#define TEAM_COLOR DontChange
#define RED Red
#define BLUE Blue
#define GREY Grey
#define ColorChat client_print_color
/* ColorChat Support */

enum _:Colors {
DontChange, // use receiver team color
Red,
Blue,
Grey
}

native client_print_color(id, color=DontChange, const fmt[], any:...);

native client_print_color2(id, sender, const fmt[], any:...); // set team color according to sender index

// It is not required to use this, you can directly put in a UTF-8 WITHOUT BOM file, 1 3 and 4,
// for this, use npp and hit Alt + corresponding key (1 2 or 4), you should respectively see  (SOH)  (ETX) and  (EOT).
// if you still want to use !n !g and !t, use this stock and enjoy the compiled plugin increased size :)
stock register_dictionary_colored(const filename[])
{
if( !register_dictionary(filename) )
{
return 0;
}

new szFileName[256];
get_localinfo("amxx_datadir", szFileName, charsmax(szFileName));
format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename);
new fp = fopen(szFileName, "rt");
if( !fp )
{
log_amx("Failed to open %s", szFileName);
return 0;
}

new szBuffer[512], szLang[3], szKey[64], szTranslation[256], TransKey:iKey;

while( !feof(fp) )
{
fgets(fp, szBuffer, charsmax(szBuffer));
trim(szBuffer);

if( szBuffer[0] == '[' )
{
strtok(szBuffer[1], szLang, charsmax(szLang), szBuffer, 1, ']');
}
else if( szBuffer[0] )
{
strbreak(szBuffer, szKey, charsmax(szKey), szTranslation, charsmax(szTranslation));
iKey = GetLangTransKey(szKey);
if( iKey != TransKey_Bad )
{
while( replace(szTranslation, charsmax(szTranslation), "!g", "^4") ){}
while( replace(szTranslation, charsmax(szTranslation), "!t", "^3") ){}
while( replace(szTranslation, charsmax(szTranslation), "!n", "^1") ){}
AddTranslation(szLang, iKey, szTranslation[2]);
}
}
}

fclose(fp);
return 1;
}


чего не хватает ему?

Отредактировал: MaZzai, - 25.10.2012, 18:13
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MaZzai
сообщение 25.10.2012, 18:13
Сообщение #8


Стаж: 17 лет

Сообщений: 2659
Благодарностей: 1411
Полезность: 1024

после КолорЧат убери пробел
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 25.10.2012, 18:13
Сообщение #9
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(freeone @ 25.10.2012, 20:00) *
чего не хватает ему?

Ты используешь НЕ ТОТ inc-файл (от 'fake native' версии). 'Правильный' inc от того же автора. В inc-файле есть баг, когда используется вывод всем (id=0) и ML; автор исправлять не будет sad.gif

Если в плагине не требуется вывод красного/синего/серого цвета одновременно для всех игроков, достаточно использовать существенно более простые конструкции. Один из вариантов приложил, использование:
Код
ColorPrint( id, szMessage, any:... )

Например:
Код
ColorPrint( 0, "LOL" )
ColorPrint( id, "%s %d", szMsg, iCount )
ColorPrint( id, "%L", id, "LOL" )
ColorPrint( 0, "%L", LANG_SERVER, "LOL" )


Отредактировал: Safety1st, - 25.10.2012, 18:19
Прикрепленные файлы:
Прикрепленный файл  colorprint.inc.zip ( 1,06 килобайт ) Кол-во скачиваний: 24
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя freeone
сообщение 25.10.2012, 18:16
Сообщение #10
Стаж: 13 лет

Сообщений: 140
Благодарностей: 13
Полезность: 78

я уже тоже понял,и взял из armyranks)
а как мне сделать обратно строку серым цветом?вот:
ColorChat (0,GREY, "Игроки с пингом ^4%d и выше будут кикнуты!", get_cvar_num( "amx_hpk_ping" ) )
и выше будут кикнуты! вот это нужно в серый))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 25.10.2012, 18:21
Сообщение #11
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Вот так
Код
ColorChat (param[],GREY, "Игроки с пингом ^4%d^3 и выше будут кикнуты!", get_cvar_num( "amx_hpk_ping" ) )

Никаких нулей, это ошибка. И для возврата на основной цвет нужно ещё раз метку ставить)
А вообще плагин очень стар и по современным меркам код неоптимизированный.

Отредактировал: Safety1st, - 25.10.2012, 18:25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя freeone
сообщение 25.10.2012, 18:26
Сообщение #12
Стаж: 13 лет

Сообщений: 140
Благодарностей: 13
Полезность: 78

что то не подумал сначала))думал будет красный или синий))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя freeone
сообщение 25.10.2012, 18:42
Сообщение #13
Стаж: 13 лет

Сообщений: 140
Благодарностей: 13
Полезность: 78

а можно ли сделать так что бы пинг при заходе в чат писало?
типа Игроки с пингом выше Х будут кикнуты! (Ваш пинг: Х)
Код
server_cmd("kick #%d ^"Извините ваш пинг слишком высок...^"",get_user_userid(id))
log_amx("Highpingkick: ^"%s<%d><%s>^" was kicked due highping (Average Ping ^"%d^")", name,get_user_userid(id),authid,(g_Ping[id] / g_Samples[id]))

(Average Ping ^"%d^") пишется в лог с каким пингом был кикнут игрок

Отредактировал: freeone, - 25.10.2012, 19:34
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя freeone
сообщение 25.10.2012, 19:30
Сообщение #14
Стаж: 13 лет

Сообщений: 140
Благодарностей: 13
Полезность: 78

!
Предупреждение:
Не нужно так быстро UPать тему. Пока устно.


Отредактировал: MaZzai, - 25.10.2012, 22:50
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Hnt
сообщение 4.11.2012, 3:54
Сообщение #15


Стаж: 18 лет

Сообщений: 810
Благодарностей: 198
Полезность: 494

Ребят подскажите - имею на руках плагин AdminPrefixes
Не могу понять как вернуть обычный Не цветной чат. Может кто взглянуть на код. Спасибо!

Прикрепленное изображение


Скрытый текст
Код
#include <amxmodx>
#include <amxmisc>
#include <nvault>

#define FLAG_LOAD ADMIN_CFG
#define MAX_PREFIXES 33
#define MAX_BAD_PREFIXES 100

new g_bad_prefix, g_listen, g_listen_flag, g_custom_current, g_custom_current_flag, g_custom_others, g_custom_others_flag, g_say_characters, g_prefix_characters;
new pre_ips_count = 0, pre_names_count = 0, pre_flags_count = 0, bad_prefix_count = 0, i, temp_cvar[2];
new configs_dir[64], file[128], text[128], prefix[32], type[2], acc_type[32], length, line = 0, error[256];
new g_saytxt, g_maxplayers, g_nvault, g_team;
new g_typed[192], g_message[192], g_name[32], typed_prefix[33];
new pre_ips_collect[MAX_PREFIXES][33], ips_collect[MAX_PREFIXES][32], pre_names_collect[MAX_PREFIXES][33], names_collect[MAX_PREFIXES][33], pre_flags_collect[MAX_PREFIXES][33], flags_collect[MAX_PREFIXES][2], bad_prefixes_collect[MAX_BAD_PREFIXES][33], client_prefix[33][33];

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

new const forbidden_prefixes_symbols[] = {
    "/",
    "\",
    "%",
    "$",
    ".",
    ":",
    "?",
    "!",
    "@",
    "#",
    "%"
}

new const separator[] = "************************************************"
new const in_prefix[] = "[AdminPrefixes]"

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

    g_bad_prefix = register_cvar("ap_bad_prefixes", "1")
    g_listen = register_cvar("ap_listen", "1")
    g_listen_flag = register_cvar("ap_listen_flag", "a")
    g_custom_current = register_cvar("ap_custom_current", "1")
    g_custom_current_flag = register_cvar("ap_custom_current_flag", "b")
    g_custom_others = register_cvar("ap_custom_others", "1")
    g_custom_others_flag = register_cvar("ap_custom_others_flag", "c")
    g_say_characters = register_cvar("ap_say_characters", "1")
    g_prefix_characters = register_cvar("ap_prefix_characters", "1")

    g_saytxt = get_user_msgid ("SayText")
    g_maxplayers = get_maxplayers()
    g_nvault = nvault_open("CustomAdminPrefixes")

    register_concmd("ap_reload_prefixes", "LoadPrefixes")
    register_concmd("ap_reload_badprefixes", "LoadBadPrefixes")
    register_concmd("ap_put", "SetPrefix")
    register_concmd("ap_put_player", "SetPlayerPrefix")
    register_clcmd("say", "HookSay")
    register_clcmd("say_team", "HookSayTeam")

    register_dictionary("admin_prefixes.txt")

    get_configsdir(configs_dir, charsmax(configs_dir))

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

    line = 0, pre_flags_count = 0, pre_ips_count = 0, pre_names_count = 0;
    formatex(file, charsmax(file), "%s/ap_prefixes.ini", configs_dir)

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

    server_print(separator)

    while(read_file(file, line++ , text, charsmax(text), length) && pre_flags_count <= MAX_PREFIXES)
    {
        if(!text[0] || text[0] == '^n' || text[0] == ';')
            continue

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

        if(!type[0] || !prefix[0] || !acc_type[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 'i':
            {
                pre_ips_count++
                pre_ips_collect[pre_ips_count] = prefix
                ips_collect[pre_ips_count] = acc_type
                server_print("%L", LANG_SERVER, "PREFIX_LOAD_IP", in_prefix, prefix, acc_type)
            }
            case 'n':
            {
                pre_names_count++
                pre_names_collect[pre_names_count] = prefix
                names_collect[pre_names_count] = acc_type
                server_print("%L", LANG_SERVER, "PREFIX_LOAD_NAME", in_prefix, prefix, acc_type)
            }
            case 'f':
            {
                pre_flags_count++
                pre_flags_collect[pre_flags_count] = prefix
                flags_collect[pre_flags_count][0] = acc_type[0]
                server_print("%L", LANG_SERVER, "PREFIX_LOAD_FLAG", in_prefix, prefix, acc_type[0])
            }
            default:
            {
                continue
            }
        }
    }

    if(pre_flags_count <= 0 && pre_ips_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++)
    {
        client_prefix[id] = ""
        CheckNvaultPrefix(i)
    }

    return PLUGIN_HANDLED
}

public LoadBadPrefixes(id)
{
    if(!get_pcvar_num(g_bad_prefix))
    {
        console_print(id, "%L", LANG_SERVER, "BADP_OFF", in_prefix)
        return PLUGIN_HANDLED
    }

    if(!(get_user_flags(id) & FLAG_LOAD))
    {
        console_print(id, "%L", LANG_SERVER, "BADP_PERMISSION", in_prefix)
        return PLUGIN_HANDLED
    }

    line = 0, bad_prefix_count = 0;

    formatex(file, charsmax(file), "%s/ap_bad_prefixes.ini", configs_dir)

    if(!file_exists(file))
    {
        console_print(id, "%L", LANG_SERVER, "BADP_NOT_FOUND", in_prefix, file)
        return PLUGIN_HANDLED        
    }


    server_print(separator)

    while(read_file(file, line++ , text, charsmax(text), length) && bad_prefix_count <= MAX_BAD_PREFIXES)
    {
        if(!text[0] || text[0] == '^n' || text[0] == ';')
            continue

        parse(text, prefix, charsmax(prefix))

        if(!prefix[0])
            continue

        bad_prefix_count++
        bad_prefixes_collect[bad_prefix_count] = prefix
        server_print("%L", LANG_SERVER, "BADP_LOAD", in_prefix, prefix)
    }

    if(bad_prefix_count <= 0)
    {
        server_print("%L", LANG_SERVER, "BADP_LOAD", in_prefix)
    }

    get_user_name(id, g_name, charsmax(g_name))
    server_print("%L", LANG_SERVER, "BADP_LOADED_BY", in_prefix, g_name)
    console_print(id, "%L", LANG_SERVER, "BADP_LOADED", in_prefix)
    
    server_print(separator)

    for(new i = 1; i <= g_maxplayers; i++)
    {
        CheckNvaultPrefix(i)
    }

    return PLUGIN_HANDLED
}

public client_putinserver(id)
{
    client_prefix[id] = ""
    CheckNvaultPrefix(id)
}

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

    if(equal(g_typed, "") || !is_user_connected(id))
        return PLUGIN_HANDLED_MAIN
        
    if((client_prefix[id][0] && get_pcvar_num(g_say_characters) == 1) || (!client_prefix[id][0] && get_pcvar_num(g_say_characters) == 2) || get_pcvar_num(g_say_characters) == 3)
    {
        if(check_say_characters(g_typed))
            return PLUGIN_HANDLED_MAIN
    }

    get_user_name(id, g_name, charsmax(g_name))

    g_team = get_user_team(id)

    new const team_info[2][][] = {
        {"*SPEC* ", "*DEAD* ", "*DEAD* ", "*SPEC* "},
        {"", "", "", ""}
    }

    if(client_prefix[id][0])
    {
        formatex(g_message, charsmax(g_message), "^1%s^4%s^3 %s :^4 %s", team_info[is_user_alive(id)][g_team], client_prefix[id], g_name, g_typed)
    }
    else
    {
        formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", 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)

    if(equal(g_typed, "") || !is_user_connected(id))
        return PLUGIN_HANDLED_MAIN
        
    if((client_prefix[id][0] && get_pcvar_num(g_say_characters) == 1) || (!client_prefix[id][0] && get_pcvar_num(g_say_characters) == 2) || get_pcvar_num(g_say_characters) == 3)
    {
        if(check_say_characters(g_typed))
            return PLUGIN_HANDLED_MAIN
    }

    get_user_name(id, g_name, charsmax(g_name))

    g_team = get_user_team(id)
    
    new const team_info[2][][] = {
        {"(Spectator) ", "*DEAD*(Terrorist) ", "*DEAD*(Counter-Terrorist) ", "(Spectator) "},
        {"(Spectator) ", "(Terrorist) ", "(Counter-Terrorist) ", "(Spectator) "}
    }

    if(client_prefix[id][0])
    {
        formatex(g_message, charsmax(g_message), "^1%s^4%s^3 %s :^4 %s", team_info[is_user_alive(id)][g_team], client_prefix[id], g_name, g_typed)
    }
    else
    {
        formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", 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 SetPrefix(id)
{
    if(!get_pcvar_num(g_custom_current) || !get_pcvar_string(g_custom_current_flag, temp_cvar, charsmax(temp_cvar)))
    {
        console_print(id, "%L", LANG_SERVER, "CUSTOM_OFF", in_prefix)
        return PLUGIN_HANDLED
    }

    if(!(get_user_flags(id) & read_flags(temp_cvar)))
    {
        console_print(id, "%L", LANG_SERVER, "CUSTOM_PERMISSION", in_prefix)
        return PLUGIN_HANDLED
    }

    read_args(typed_prefix, charsmax(typed_prefix))
    remove_quotes(typed_prefix)
    trim(typed_prefix)

    if(get_pcvar_num(g_bad_prefix) && is_bad_prefix(typed_prefix))
    {
        console_print(id, "%L", LANG_SERVER, "CUSTOM_FORBIDDEN", in_prefix, typed_prefix)
        return PLUGIN_HANDLED
    }

    if(get_pcvar_num(g_prefix_characters) && check_prefix_characters(typed_prefix))
    {
        console_print(id, "%L", LANG_SERVER, "CUSTOM_SYMBOL", in_prefix, typed_prefix, forbidden_prefixes_symbols[i])
        return PLUGIN_HANDLED
    }

    get_user_name(id, g_name, charsmax(g_name))

    if(equal(typed_prefix, ""))
    {
        nvault_remove(g_nvault, g_name)
        console_print(id, "%L", LANG_SERVER, "CUSTOM_REMOVE", in_prefix)
        server_print("%L", LANG_SERVER, "CUSTOM_REMOVE_INFO", in_prefix, g_name)
        PutPrefix(id)

        return PLUGIN_HANDLED
    }

    nvault_set(g_nvault, g_name, typed_prefix)

    client_prefix[id] = typed_prefix
    
    console_print(id, "%L", LANG_SERVER, "CUSTOM_CHANGE", in_prefix, typed_prefix)
    server_print("%L", LANG_SERVER, "CUSTOM_CHANGE_INFO", in_prefix, g_name, typed_prefix)

    return PLUGIN_HANDLED
}

public SetPlayerPrefix(id)
{
    if(!get_pcvar_num(g_custom_current) || !get_pcvar_string(g_custom_current_flag, temp_cvar, charsmax(temp_cvar)) || !get_pcvar_num(g_custom_others) || !get_pcvar_string(g_custom_others_flag, temp_cvar, charsmax(temp_cvar)))
    {
        console_print(id, "%L", LANG_SERVER, "CO_OFF", in_prefix)
        return PLUGIN_HANDLED
    }

    if(!(get_user_flags(id) & read_flags(temp_cvar)))
    {
        console_print(id, "%L", LANG_SERVER, "CO_FORBIDDEN", in_prefix)
        return PLUGIN_HANDLED
    }

    new name_tag[64], typed_name[32];

    read_args(name_tag, charsmax(name_tag))
    remove_quotes(name_tag)
    parse(name_tag, typed_name, charsmax(typed_name), typed_prefix, charsmax(typed_prefix))
    trim(typed_prefix)

    if(get_pcvar_num(g_bad_prefix) && is_bad_prefix(typed_prefix))
    {
        console_print(id, "%L", LANG_SERVER, "CUSTOM_FORBIDDEN", in_prefix, typed_prefix)
        return PLUGIN_HANDLED
    }

    if(get_pcvar_num(g_prefix_characters) && check_prefix_characters(typed_prefix))
    {
        console_print(id, "%L", LANG_SERVER, "CUSTOM_SYMBOL", in_prefix, typed_prefix, forbidden_prefixes_symbols[i])
        return PLUGIN_HANDLED
    }

    get_user_name(id, g_name, charsmax(g_name))

    new target = cmd_target(id, typed_name, 1)

    if(!target)
        return PLUGIN_HANDLED

    if(equal(typed_prefix, ""))
    {
        nvault_remove(g_nvault, typed_name)
        console_print(id, "%L", LANG_SERVER, "CO_REMOVE", in_prefix, typed_name)
        server_print("%L", LANG_SERVER, "CO_REMOVE_INFO", in_prefix, g_name, typed_name)
        PutPrefix(target)

        return PLUGIN_HANDLED
    }

    nvault_set(g_nvault, typed_name, typed_prefix)

    client_prefix[id] = typed_prefix
    
    console_print(id, "%L", LANG_SERVER, "CO_CHANGE", in_prefix, typed_name, typed_prefix)
    server_print("%L", LANG_SERVER, "CO_CHANGE_INFO", in_prefix, g_name, typed_name, typed_prefix)

    return PLUGIN_HANDLED
}

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))
    {
        client_prefix[id] = ""
        set_task(0.5, "CheckNvaultPrefix", id)
        return PLUGIN_HANDLED
    }

    return PLUGIN_CONTINUE
}

public CheckNvaultPrefix(const id)
{
    new nvault_prefix[33];
    get_user_name(id, g_name, charsmax(g_name))
    get_pcvar_string(g_custom_current_flag, temp_cvar, charsmax(temp_cvar))

    new data = nvault_get(g_nvault, g_name, nvault_prefix, charsmax(nvault_prefix))

    if(data && get_pcvar_num(g_custom_current) && get_user_flags(id) & read_flags(temp_cvar))
    {
        if((get_pcvar_num(g_bad_prefix) && is_bad_prefix(nvault_prefix)) || (get_pcvar_num(g_prefix_characters) && check_prefix_characters(nvault_prefix)))
        {
            PutPrefix(id)
            return PLUGIN_HANDLED
        }
        client_prefix[id] = nvault_prefix
        return PLUGIN_HANDLED
    }
    else
    {
        PutPrefix(id)
        return PLUGIN_HANDLED
    }
    return PLUGIN_HANDLED
}

stock PutPrefix(const id)
{
    new temp_ip[16];

    get_user_ip(id, temp_ip, charsmax(temp_ip), 1)

    for(new i = 0; i <= pre_ips_count; i++)
    {
        if(equal(temp_ip, ips_collect[i]))
        {
            client_prefix[id] = pre_ips_collect[i]
            
            return PLUGIN_HANDLED
        }
    }

    get_user_name(id, g_name, charsmax(g_name))

    for(new i = 0; i <= pre_names_count; i++)
    {
        if(equal(g_name, names_collect[i]))
        {
            client_prefix[id] = pre_names_collect[i]

            return PLUGIN_HANDLED
        }
    }

    for(new i = 0; i <= pre_flags_count; i++)
    {
        if(get_user_flags(id) & read_flags(flags_collect[i]))
        {
            client_prefix[id] = pre_flags_collect[i]
            
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED
}

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

bool:check_prefix_characters(const check_prefix[])
{
    for(i = 0; i < charsmax(forbidden_prefixes_symbols); i++)
    {
        if(containi(check_prefix, forbidden_prefixes_symbols[i]) != -1)
        {
            return true
        }
    }
    return false
}

bool:is_bad_prefix(const check_prefix[])
{
    for(new i = 0; i <= bad_prefix_count; i++)
    {            
        if(equali(check_prefix, bad_prefixes_collect[i]))
        {
            return true
        }
    }
    return false
}


Создал новую тему для помощи!

Отредактировал: Hnt, - 6.11.2012, 2:12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: