Русское сообщество по скриптингу

Chat Manager

Утвержденные плагины для AMX Mod X администратором/модератором форума.

Модератор: Leonidddd

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только работоспособных плагинов для AMX Mod X. Новые плагины нужно выкладывать в разделе "Новые плагины".

Re: Chat Manager

Сообщение Mistrick » 06 авг 2016, 09:11

Dmitry Beast,
1. хз
2. так и работает
3. хз
Не знаю зачем здесь сильная кастомизация.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Chat Manager

Сообщение Dmitry Beast » 07 авг 2016, 05:57

1. думаю всё же надо
2.
"flag" "t" "!d[!gVIP!d] "
"flag" "d" "!d[!gАдмин!d] "
"flag" "dt" "!d[!gАдминVIP!d] "
Даёт всегда приставку VIP
3. думаю всё же надо, на крайняк и сам смогу сделать ;)
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: Chat Manager

Сообщение Mistrick » 07 авг 2016, 11:18

Dmitry Beast, 2. Должен быть обратный порядок.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Chat Manager

Сообщение Dmitry Beast » 08 авг 2016, 07:59

2. всё ок, спасибо! :thumbs_up
3. сделал.

Хотелось бы всё же увидеть список слов, к которым не нужно применять действия от плагина, но не критично. :-)
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: Chat Manager

Сообщение Asim0 » 10 авг 2016, 02:32

странно, поставил, логирование включил, папка логов пустая. :dntknw:

Дополнения( желаемый функционал):
1. Не позволять писать в чат чаще N раз в секунду
2. Почему не сделать нормальные квары?
3. Блочить IP серваков (спам)
4. сделать переключение языка кнопкой TAB непосредственно при вводе сообщения клиентом (возможно?)
5. Дополнить описание: логирование туманно и не ясно как менять язык
Девелопмент зм сервака Freearena-style: нужен скриптер
Я учился у восточного мастера искусству гармоничного расположения иконок на рабочем столе.
Аватара пользователя
Asim0
 
Сообщения: 56
Зарегистрирован: 04 мар 2011, 08:30
Благодарил (а): 8 раз.
Поблагодарили: 2 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: Chat Manager

Сообщение Mistrick » 10 авг 2016, 06:17

Asim0,
1. Другой плагин
2. Отключение функций на прекомпиляции, полностью убирает нетребуемый код из плагина. Нет пустой нагрузки от кода.
3. Другой плагин
4. Мало представляю как это может работать. Для меня транслит чужд, когда есть нативная поддержка в стиме.
5. Видно у вас либо конфликт с другом плагином, либо запрет на запись логов. Какой язык менять?
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Chat Manager

Сообщение Asim0 » 12 авг 2016, 16:48

Mistrick,
1 и 3: посоветуйте оптимизиованные + хорошо совместимые с вашим чатменеджером плагины. Либо встроить в виде отключаемых модулей (why not?)
2. Понял. Это хорошо, спасибо.
4. Отлавливать нажатие tab после Y? у меня много нонстимовцев ожидается.
5. логи включены, и это странно. lon "on" amx_logdetail "3" Что еще может мешать логировать?
5.1 по поводу языка, не написано что меняется translit командами в чат /eng /rus
Девелопмент зм сервака Freearena-style: нужен скриптер
Я учился у восточного мастера искусству гармоничного расположения иконок на рабочем столе.
Аватара пользователя
Asim0
 
Сообщения: 56
Зарегистрирован: 04 мар 2011, 08:30
Благодарил (а): 8 раз.
Поблагодарили: 2 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: Chat Manager

Сообщение Mistrick » 12 авг 2016, 17:09

Asim0,
1. Меня это никогда не заботило, не знаю какие есть варианты.
4. Это так не работает. Через messagemode приходят аргументы и вы никак не отловите нажимал ли игрок в момент написания tab. Патченный клиент или стим-клиент избавляет от нужды в транслите.
5. Вы хоть раскомментировали функцию, чтобы она работала?
#define FUNCTION_LOG_MESSAGES // включение лога сообщений
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Chat Manager

Сообщение Asim0 » 16 авг 2016, 04:56

раскомментировал, естественно.
Плагин анти-спама все прекрасно логирует на моем сервере.
Вы должны зарегистрироваться, чтобы видеть ссылки.
Других плагинов чата нет.
Скорее всего баг?
Девелопмент зм сервака Freearena-style: нужен скриптер
Я учился у восточного мастера искусству гармоничного расположения иконок на рабочем столе.
Аватара пользователя
Asim0
 
Сообщения: 56
Зарегистрирован: 04 мар 2011, 08:30
Благодарил (а): 8 раз.
Поблагодарили: 2 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: Chat Manager

Сообщение Asim0 » 22 авг 2016, 17:14

бамп. ниче не логируется.
сконфигурирован так:
Код: Выделить всё
/**
 * Credits: BlackRose, Ian Cammarata, PRoSToTeM@.
 */
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define PLUGIN "Chat Manager"
#define VERSION "1.0.0"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define ADMIN_FLAG ADMIN_CHAT

//Colors: DEFAULT, TEAM, GREEN
#define PRETEXT_COLOR            DEFAULT
#define PLAYER_CHAT_COLOR        DEFAULT
#define ADMIN_CHAT_COLOR        GREEN
#define PLAYER_NAME_COLOR        TEAM
#define ADMIN_NAME_COLOR        TEAM

#define FUNCTION_ALL_CHAT

#if defined FUNCTION_ALL_CHAT
//Flags: ALIVE_SEE_DEAD, DEAD_SEE_ALIVE, TEAM_SEE_TEAM
#define PLAYER_CHAT_FLAGS (ALIVE_SEE_DEAD|DEAD_SEE_ALIVE)
#define ADMIN_CHAT_FLAGS (ALIVE_SEE_DEAD|DEAD_SEE_ALIVE)
#endif

#define FUNCTION_PLAYER_PREFIX
//#define FUNCTION_ADD_TIME_CODE
#define FUNCTION_LOG_MESSAGES
#define FUNCTION_HIDE_SLASH
#define FUNCTION_TRANSLITE
//#define FUNCTION_AES_TAGS
//#define FUNCTION_BETA_SUPPORT

//#define FUNCTION_ADD_STEAM_PREFIX

#if defined FUNCTION_ADD_STEAM_PREFIX
new const STEAM_PREFIX[] = "^1[^4Steam^1] ";
#endif

#define PREFIX_MAX_LENGHT 32
#define AES_MAX_LENGHT 32

//DONT CHANGE!!!
#define COLOR_BUFFER 6
#define TEXT_LENGHT 128
#define MESSAGE_LENGHT 189

#if defined FUNCTION_AES_TAGS
native aes_get_player_stats(id,data[4]);
native aes_get_level_name(lvlnum,level[],len,idLang 0);
new const 
AES_TAG_FORMAT[] = "^1[^3%s^1] ";
#endif

const ALIVE_SEE_DEAD = (<< 0);
const 
DEAD_SEE_ALIVE = (<< 1);
const 
TEAM_SEE_TEAM = (<< 2);

enum
{
    DEFAULT = 
1,
    
TEAM 3,
    
GREEN 4
};
enum _:FLAG_PREFIX_INFO
{
    
m_Flag,
    
m_Prefix[PREFIX_MAX_LENGHT]
};

new const 
g_TextChannels[][] =
{
    
"#Cstrike_Chat_All",
    
"#Cstrike_Chat_AllDead",
    
"#Cstrike_Chat_T",
    
"#Cstrike_Chat_T_Dead",
    
"#Cstrike_Chat_CT",
    
"#Cstrike_Chat_CT_Dead",
    
"#Cstrike_Chat_Spec",
    
"#Cstrike_Chat_AllSpec"
};

new 
g_SayText;
new 
g_szMessage[MESSAGE_LENGHT];

#if defined FUNCTION_PLAYER_PREFIX
new const FILE_PREFIXES[] = "chatmanager_prefixes.ini";

new 
g_bCustomPrefix[33], g_PlayerPrefix[33][PREFIX_MAX_LENGHT];
new 
Trie:g_tSteamPrefixesg_iTrieSteamSize;
new 
Trie:g_tNamePrefixesg_iTrieNameSize;
new Array:
g_aFlagPrefixesg_iArrayFlagSize;
#endif

#if defined FUNCTION_LOG_MESSAGES
new g_szLogFile[128];
#endif

#if defined FUNCTION_TRANSLITE
new g_bTranslite[33];
#endif

#if defined FUNCTION_ADD_STEAM_PREFIX
new g_bSteamPlayer[33];
#endif

public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR);
    
    
#if defined FUNCTION_PLAYER_PREFIX
    
register_concmd("cm_set_prefix""Command_SetPrefix"ADMIN_RCON"<name or #userid> <prefix>");
    
#endif
    
    #if defined FUNCTION_TRANSLITE
    
register_clcmd("say /rus""Command_LangChange");
    
register_clcmd("say /eng""Command_LangChange");
    
register_concmd("amx_chat_lang""Command_LangChange");
    
#endif
    
    
register_clcmd("say""Command_SayHandler");
    
register_clcmd("say_team""Command_SayHandler");
    
    
register_message((g_SayText get_user_msgid("SayText")), "Message_SayText");
}
public 
plugin_cfg()
{
    
#if defined FUNCTION_LOG_MESSAGES
    
new szDir[] = "addons/amxmodx/logs/chatmanager";
    if(!
dir_exists(szDir))
    {
        
mkdir(szDir);
    }
    new 
szDate[16]; get_time("%Y%m%d"szDatecharsmax(szDate));
    
formatex(g_szLogFilecharsmax(g_szLogFile), "%s/chatlog_%s.html"szDirszDate);
    if(!
file_exists(g_szLogFile))
    {
        
write_file(g_szLogFile"<meta charset=utf-8><title>ChatManager Log</title>");
    }
    
#endif
    
    #if defined FUNCTION_PLAYER_PREFIX
    
LoadPlayersPrefixes();
    
#endif
    
    #if defined FUNCTION_AES_TAGS
    
register_dictionary("aes.txt");
    
#endif
}
#if defined FUNCTION_PLAYER_PREFIX
LoadPlayersPrefixes()
{
    new 
szDir[128]; get_localinfo("amxx_configsdir"szDircharsmax(szDir));
    new 
szFile[128]; formatex(szFilecharsmax(szFile), "%s/%s"szDirFILE_PREFIXES);
    
    if(!
file_exists(szFile))
    {
        
log_amx("Prefixes file doesn't exist!");
        return;
    }
    
    
g_tSteamPrefixes TrieCreate();
    
g_tNamePrefixes TrieCreate();
    
g_aFlagPrefixes ArrayCreate(FLAG_PREFIX_INFO);
    
    new 
file fopen(szFile"rt");
    
    if(
file)
    {
        new 
szText[128], szType[6], szAuth[32], szPrefix[PREFIX_MAX_LENGHT COLOR_BUFFER], eFlagPrefix[FLAG_PREFIX_INFO];
        while(!
feof(file))
        {
            
fgets(fileszTextcharsmax(szText));
            
parse(szTextszTypecharsmax(szType), szAuthcharsmax(szAuth), szPrefixcharsmax(szPrefix));
            
            if(!
szType[0] || szType[0] == ';' || !szAuth[0] || !szPrefix[0]) continue;
            
            
replace_color_tag(szPrefix);
            
            switch(
szType[0])
            {
                case 
's'://steam
                
{
                    
TrieSetString(g_tSteamPrefixesszAuthszPrefix);
                    
g_iTrieSteamSize++;
                }
                case 
'n'://name
                
{
                    
TrieSetString(g_tNamePrefixesszAuthszPrefix);
                    
g_iTrieNameSize++;
                }
                case 
'f'://flag
                
{
                    
eFlagPrefix[m_Flag] = read_flags(szAuth);
                    
copy(eFlagPrefix[m_Prefix], charsmax(eFlagPrefix[m_Prefix]), szPrefix);
                    
ArrayPushArray(g_aFlagPrefixeseFlagPrefix);
                    
g_iArrayFlagSize++;
                }
            }
        }
        
fclose(file);
    }
}
#endif
public client_putinserver(id)
{
    
#if defined FUNCTION_TRANSLITE
    
g_bTranslite[id] = false;
    
#endif
    
    #if defined FUNCTION_PLAYER_PREFIX
    
g_PlayerPrefix[id] = "";
    
g_bCustomPrefix[id] = false;
    
    new 
szSteam[32]; get_user_authid(idszSteamcharsmax(szSteam));
    if(
g_iTrieSteamSize && TrieKeyExists(g_tSteamPrefixesszSteam))
    {
        
g_bCustomPrefix[id] = true;
        
TrieGetString(g_tSteamPrefixesszSteamg_PlayerPrefix[id], charsmax(g_PlayerPrefix[]));
    }
    
#endif
    
    #if defined FUNCTION_ADD_STEAM_PREFIX
    
g_bSteamPlayer[id] = is_user_steam(id);
    
#endif
}
#if defined FUNCTION_PLAYER_PREFIX
public Command_SetPrefix(idlevelcid)
{
    if(!
cmd_access(idlevelcid2)) return PLUGIN_HANDLED;

    new 
szArg[32]; read_argv(1szArgcharsmax(szArg));
    new 
player cmd_target(idszArgCMDTARGET_ALLOW_SELF);
    
    if(!
player) return PLUGIN_HANDLED;
    
    new 
szPrefix[PREFIX_MAX_LENGHT COLOR_BUFFER]; read_argv(2szPrefixcharsmax(szPrefix));
    
replace_color_tag(szPrefix);
    
    
console_print(id"You changed player prefix from %s to %s."g_PlayerPrefix[player], szPrefix);
    
    
copy(g_PlayerPrefix[player], charsmax(g_PlayerPrefix[]), szPrefix);
    
g_bCustomPrefix[player] = true;
    
    return 
PLUGIN_HANDLED;
}
#endif
#if defined FUNCTION_TRANSLITE
public Command_LangChange(id)
{
    
g_bTranslite[id] = !g_bTranslite[id];
    
color_print(id"^1 Язык ввода изменен на ^3%s^1."g_bTranslite[id] ? "rus" "eng");
    return 
PLUGIN_HANDLED;
}
#endif
public Command_SayHandler(id)
{
    if (!
is_user_connected(id)) return PLUGIN_HANDLED;
    
    new 
szMessage[TEXT_LENGHT];
    
    
read_argv(0szMessagecharsmax(szMessage));
    new 
is_team_msg = (szMessage[3] == '_');
    
    
read_args(szMessagecharsmax(szMessage));
    
remove_quotes(szMessage);
    
replace_wrong_simbols(szMessage);
    
trim(szMessage);
    
    if(!
szMessage[0]) return PLUGIN_HANDLED;
    
    
#if defined FUNCTION_HIDE_SLASH
    
if(szMessage[0] == '/') return PLUGIN_HANDLED_MAIN;
    
#endif
    
    
new flags get_user_flags(id);
    
    new 
szName[32]; get_user_name(idszNamecharsmax(szName));
    
    
#if defined FUNCTION_PLAYER_PREFIX
    
if(!g_bCustomPrefix[id])
    {
        if(
g_iTrieNameSize && TrieKeyExists(g_tNamePrefixesszName))
        {
            
TrieGetString(g_tNamePrefixesszNameg_PlayerPrefix[id], charsmax(g_PlayerPrefix[]));
        }
        else if(
g_iArrayFlagSize)
        {
            new 
eFlagPrefix[FLAG_PREFIX_INFO], bFoundPrefix false;
            for(new 
ig_iArrayFlagSizei++)
            {
                
ArrayGetArray(g_aFlagPrefixesieFlagPrefix);
                if(
check_flags(flagseFlagPrefix[m_Flag]))
                {
                    
bFoundPrefix true;
                    
copy(g_PlayerPrefix[id], charsmax(g_PlayerPrefix[]), eFlagPrefix[m_Prefix]);
                    break;
                }
            }
            
            if(!
bFoundPrefix)
            {
                
g_PlayerPrefix[id] = "";
            }
        }
    }
    
#endif
    
    #if defined FUNCTION_TRANSLITE
    
if(g_bTranslite[id])
    {
        if(
szMessage[0] == '/')
        {
            
copy(szMessagecharsmax(szMessage), szMessage[1]);
        }
        else
        {
            new 
szTranslitedText[TEXT_LENGHT];
            
translite_string(szTranslitedTextcharsmax(szTranslitedText), szMessage);
            
copy(szMessagecharsmax(szMessage), szTranslitedText);
        }
    }
    
#endif
    
    
new name_color flags ADMIN_FLAG ADMIN_NAME_COLOR PLAYER_NAME_COLOR;
    new 
chat_color flags ADMIN_FLAG ADMIN_CHAT_COLOR PLAYER_CHAT_COLOR;
    
    new 
time_code[16]; get_time("[%H:%M:%S] "time_codecharsmax(time_code));
    
    new 
is_sender_alive is_user_alive(id);
    new 
CsTeams:sender_team cs_get_user_team(id);
    
    new 
channel get_user_text_channel(is_sender_aliveis_team_msgsender_team);
    
    
FormatMessage(idsender_teamchannelname_colorchat_colortime_codeszMessage);
    
    
#if defined FUNCTION_ALL_CHAT
    
new players[32], players_numget_players(playersplayers_num"ch");
    new 
playeris_player_aliveCsTeams:player_teamplayer_flags;
    
    for(new 
iplayers_numi++)
    {
        
player players[i];
        
        if(
player == id) continue;
        
        
is_player_alive is_user_alive(player);
        
player_team cs_get_user_team(player);
        
player_flags get_user_flags(player) & ADMIN_FLAG ADMIN_CHAT_FLAGS PLAYER_CHAT_FLAGS;
        
        if(
player_flags ALIVE_SEE_DEAD && !is_sender_alive && is_player_alive && (!is_team_msg || is_team_msg && sender_team == player_team//flag ALIVE_SEE_DEAD
        
|| player_flags DEAD_SEE_ALIVE && is_sender_alive && !is_player_alive && (!is_team_msg || is_team_msg && sender_team == player_team//flag DEAD_SEE_ALIVE
        
|| player_flags TEAM_SEE_TEAM && is_team_msg && sender_team != player_team//flag TEAM_SEE_TEAM
        
{
            
emessage_begin(MSG_ONEg_SayText_player);
            
ewrite_byte(id);
            
ewrite_string(g_TextChannels[channel]);
            
ewrite_string("");
            
ewrite_string("");
            
emessage_end();
        }
    }
    
#endif
    
    #if defined FUNCTION_LOG_MESSAGES
    
static const szTeamColor[CsTeams][] = {"gray""red""blue""gray"};
    new 
szLogMessage[256];
    
formatex(szLogMessagecharsmax(szLogMessage), "<br><font color=black>%s %s %s <font color=%s><b>%s</b> </font>:</font><font color=%s> %s </font>"time_codeis_sender_alive "" : (_:sender_team == || _:sender_team == "*DEAD*" "*SPEC*"), is_team_msg "(TEAM)" ""szTeamColor[sender_team], szNamechat_color == GREEN "green" "#FFB41E"szMessage);
    
write_file(g_szLogFileszLogMessage);
    
#endif
    
    
return PLUGIN_CONTINUE;
}
public 
FormatMessage(senderCsTeams:sender_teamchannelname_colorchat_colortime_code[], message[])
{
    static const 
szTeamNames[CsTeams][] = {"(Spectator)""(Terrorist)""(Counter-Terrorist)""(Spectator)"};
    
    new 
szText[MESSAGE_LENGHT], len 1;
    
szText[0] = PRETEXT_COLOR;
    
    if(
channel 2)
    {
        
len += formatex(szText[len], charsmax(szText) - len"%s"channel != "*DEAD*" "*SPEC*");
    }
    
    if(
channel && channel 7)
    {
        
len += formatex(szText[len], charsmax(szText) - len"%s "szTeamNames[sender_team]);
    }
    else if(
channel)
    {
        
len += formatex(szText[len], charsmax(szText) - len" ");
    }
    
    
#if defined FUNCTION_ADD_TIME_CODE
    
len += formatex(szText[len], charsmax(szText) - len"%s"time_code);
    
#endif
    
    #if defined FUNCTION_ADD_STEAM_PREFIX
    
if(g_bSteamPlayer[sender])
    {
        
len += formatex(szText[len], charsmax(szText) - len"%s"STEAM_PREFIX);
    }
    
#endif
    
    #if defined FUNCTION_AES_TAGS
    
new data[4], szAesTag[AES_MAX_LENGHT]; aes_get_player_stats(senderdata); aes_get_level_name(data[1], szAesTagcharsmax(szAesTag));
    
len += formatex(szText[len], charsmax(szText) - lenAES_TAG_FORMATszAesTag);
    
#endif
    
    #if defined FUNCTION_PLAYER_PREFIX
    
len += formatex(szText[len], charsmax(szText) - len"%s"g_PlayerPrefix[sender]);
    
#endif
    
    #if defined FUNCTION_BETA_SUPPORT
    
new name[32]; get_user_name(sendernamecharsmax(name));
    
len += formatex(szText[len], charsmax(szText) - len"%c%s^1 :%c %s"name_colornamechat_colormessage);
    
#else
    
len += formatex(szText[len], charsmax(szText) - len"%c%%s1^1 :%c %s"name_colorchat_colormessage);
    
#endif
    
    
copy(g_szMessagecharsmax(g_szMessage), szText);
}
public 
Message_SayText(msgiddestreceiver)
{
    if(
get_msg_args() != 4) return PLUGIN_CONTINUE;
    
    new 
str2[22]; get_msg_arg_string(2str2charsmax(str2));
    
    new 
channel get_msg_channel(str2);
    
    if(!
channel) return PLUGIN_CONTINUE;
    
    new 
str3[2]; get_msg_arg_string(3str3charsmax(str3));
    
    if(
str3[0]) return PLUGIN_CONTINUE;
    
    
set_msg_arg_string(2g_szMessage);
    
set_msg_arg_string(4"");
    
    return 
PLUGIN_CONTINUE;
}
get_msg_channel(str[])
{
    for(new 
isizeof(g_TextChannels); i++)
    {
        if(
equal(strg_TextChannels[i]))
        {
            return 
1;
        }
    }
    return 
0;
}
stock get_user_text_channel(is_sender_aliveis_team_msgCsTeams:sender_team)
{
    if (
is_team_msg)
    {
        switch(
sender_team)
        {
            case 
CS_TEAM_T:
            {
                return 
is_sender_alive 3;
            }
            case 
CS_TEAM_CT:
            {
                return 
is_sender_alive 5;
            }
            default:
            {
                return 
6;
            }
        }
    }
    return 
is_sender_alive : (sender_team == CS_TEAM_SPECTATOR 1);
}
stock replace_wrong_simbols(string[])
{
    new 
len 0;
    for(new 
istring[i] != EOSi++)
    {
        if(
string[i] == '%' || string[i] == '#' || 0x01 <= string[i] <= 0x04) continue;
        
string[len++] = string[i];
    }
    
string[len] = EOS;
}
#if defined FUNCTION_PLAYER_PREFIX
replace_color_tag(string[])
{
    new 
len 0;
    for (new 
istring[i] != EOSi++)
    {
        if (
string[i] == '!')
        {
            switch (
string[++i])
            {
                case 
'd'string[len++] = 0x01;
                case 
't'string[len++] = 0x03;
                case 
'g'string[len++] = 0x04;
                case 
EOS: break;
                default: 
string[len++] = string[i];
            }
        }
        else
        {
            
string[len++] = string[i];
        }
    }
    
string[len] = EOS;
}
#endif
stock translite_string(string[], sizesource[])
{
    static const 
table[][] =
    {
        
"Э""#"";""%""?""э""("")""*""+""б""-""ю"".""0""1""2""3""4",
        
"5""6""7""8""9""Ж""ж""Б""=""Ю"",""^"", "Ф", "И", "С", "В", "У", "А", "П",
        "
Р", "Ш", "О", "Л", "Д", "Ь", "Т", "Щ", "З", "Й", "К", "Ы", "Е", "Г", "М", "Ц", "Ч", "Н", "Я",
        "
х", "\", "ъ", ":", "_", "ё", "ф", "и", "с", "в", "у", "а", "п", "р", "ш", "о", "л", "д", "ь",
        "
т", "щ", "з", "й", "к", "ы", "е", "г", "м", "ц", "ч", "н", "я", "Х", "/", "Ъ", "Ё"
    };
    
    new len = 0;
    for (new i = 0; source[i] != EOS && len < size; i++)
    {
        new ch = source[i];
        
        if ('"' <= ch <= '
~')
        {
            ch -= '"';
            string[len++] = table[ch][0];
            if (table[ch][1] != EOS)
            {
                string[len++] = table[ch][1];
            }
        }
        else
        {
            string[len++] = ch;
        }
    }
    string[len] = EOS;
    
    return len;
}
stock color_print(id, text[], any:...)
{
    new formated[190]; vformat(formated, charsmax(formated), text, 3);
    message_begin(id ? MSG_ONE : MSG_ALL, g_SayText, _, id);
    write_byte(id);
    write_string(formated);
    message_end();
}
stock check_flags(flags, need_flags)
{
    return ((flags & need_flags) == need_flags) ? 1 : 0;
}
stock is_user_steam(id)
{
    static dp_pointer;
    if(dp_pointer || (dp_pointer = get_cvar_pointer("
dp_r_id_provider")))
    {
        server_cmd("
dp_clientinfo %d", id); server_exec();
        return (get_pcvar_num(dp_pointer) == 2) ? true : false;
    }
    return false;
}
Девелопмент зм сервака Freearena-style: нужен скриптер
Я учился у восточного мастера искусству гармоничного расположения иконок на рабочем столе.
Аватара пользователя
Asim0
 
Сообщения: 56
Зарегистрирован: 04 мар 2011, 08:30
Благодарил (а): 8 раз.
Поблагодарили: 2 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Пред.След.

Вернуться в Утвержденные плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10