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

[INC] Цветной чат

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

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

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

[INC] Цветной чат

Сообщение DJ_WEST » 23 сен 2009, 09:40

Автор: ConnorMcLeod

Данные функции могут быть использованы любым плагином. Также поддерживается мультиязычность.

Функция:
Код: Выделить всё
client_print_color(id, iColor=DontChange, const szMsg[], any:...) 


Использование:
В своем .sma исходнике используйте ^4 для отображения текста зеленым цветом, ^1 для отображения текста обычным цветом (который зависит от клиентской настройки con_color) и ^3 для отображения специальным цветом (второй аргумент).
В мультиязычных файлах используйте !g для отображения текста зеленым, !n для отображения текста обычным цветом и !t для отображения специальным цветом (второй аргумент).

Второй аргумент может быть: DontChange (оставить цвет в зависимости от команды игрока), Red (красный), Blue (синий) и Grey (серый).

Например:
Код: Выделить всё
client_print_color(id, Red, "Hello, world!") 

Код: Выделить всё
client_print_color(id, DontChange, "^1Hello, ^4world!") 


[align=center]
color_char.jpg
[/align]
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2206 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: [INC] Цветной чат

Сообщение Gizo » 26 апр 2013, 13:54

Fedcomp, в самом низу плагина наверно про тебя писали..
Аватара пользователя
Gizo
 
Сообщения: 3
Зарегистрирован: 12 июл 2012, 16:03
Откуда: Москва
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6

Re: [INC] Цветной чат

Сообщение axevano » 27 июл 2013, 19:47

Вот у меня такой вопрос. Почему в HUD можно многими цветами писать, а в чат тока 4-5 цветов??
Аватара пользователя
axevano
 
Сообщения: 39
Зарегистрирован: 31 авг 2012, 20:58
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели

Re: [INC] Цветной чат

Сообщение Rejuvenation » 06 окт 2013, 23:38

Всё можно. Отсылай через con_color всем сообщения. Ну и обратно вернуть не забудь.
Аватара пользователя
Rejuvenation
 
Сообщения: 1
Зарегистрирован: 12 янв 2013, 07:28
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: [INC] Цветной чат

Сообщение BloodMoon » 11 окт 2013, 09:49

Rejuvenation, через годик другой че не ответил? :-)
Аватара пользователя
BloodMoon
 
Сообщения: 270
Зарегистрирован: 20 июл 2013, 19:34
Забанен
Благодарил (а): 98 раз.
Поблагодарили: 62 раз.
Опыт программирования: Больше трех лет

Re: [INC] Цветной чат

Сообщение makenzo89 » 25 мар 2014, 15:50

Здраствуйте прошу помочь с этим кодом или показать пример как делается.Я сделал как выц показали но толку 0.Вот исходный код Afk mahager:
:(

Код: Выделить всё
#define PLUGIN     "AFK Manager"
#define AUTHOR     "Leon McVeran"
#define VERSION     "v1.4d"
#define PDATE     "19th May 2010"

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>

#define KICK_IMMUNITY         ADMIN_BAN

#define TASK_AFK_CHECK         142500
#define FREQ_AFK_CHECK         5.0
#define MAX_WARN         3

static const OFFSET_LINUX 5
new const m_iJoiningState 125

new bool:g_bSpec[33]
new 
Float:g_fLastActivity[33]
new 
g_iAFKCheck
new g_iAFKTime[33]
new 
g_iDropBomb
new g_iKickTime
new g_iMaxPlayers
new g_iMinPlayers
new g_iTransferTime
new g_iWarn[33]
new 
g_vOrigin[33][3]

new 
CVAR_afk_drop_bomb
new CVAR_afk_check
new CVAR_afk_transfer_time
new CVAR_afk_kick_time
new CVAR_afk_kick_players

public plugin_init(){
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_dictionary("afk_manager.txt")

    
register_logevent("event_round_end"2"0=World triggered""1=Round_End")
    
register_logevent("event_round_start"2"0=World triggered""1=Round_Start")

    
// Support der alten Menьs
    
register_clcmd("jointeam""cmd_jointeam"// new menu
    
register_menucmd(register_menuid("Team_Select"1), 511"cmd_jointeam"// old menu

    
register_clcmd("joinclass""cmd_joinclass"// new menu
    
register_menucmd(register_menuid("Terrorist_Select"1), 511"cmd_joinclass"// old menu
    
register_menucmd(register_menuid("CT_Select"1), 511"cmd_joinclass"// old menu

    
CVAR_afk_check register_cvar("afk_check""1")
    
CVAR_afk_drop_bomb register_cvar("afk_drop_bomb""2")
    
CVAR_afk_transfer_time register_cvar("afk_transfer_time""9")
    
CVAR_afk_kick_time register_cvar("afk_kick_time""24")
    
CVAR_afk_kick_players register_cvar("afk_kick_players""12")
}

public 
plugin_cfg(){
    
g_iMaxPlayers get_maxplayers()
}

public 
client_connect(id){

    
// Spieler als Spectator entmarkieren
    
g_bSpec[id] = false

    
// Positionen zurьcksetzen
    
g_vOrigin[id] = {000}

    
// Counter zurьcksetzen
    
g_iAFKTime[id] = 0
    g_iWarn
[id] = 0
}

public 
event_round_start(){

    
// AFK Check eingeschaltet
    
g_iAFKCheck get_pcvar_num(CVAR_afk_check)
    if (
g_iAFKCheck){

        
// Spawn-Positionen aktualisieren
        
new iPlayers[32], pNum
        get_players
(iPlayerspNum"a")
        for (new 
0pNump++){
            
get_user_origin(iPlayers[p], g_vOrigin[iPlayers[p]])
        }

        
// Loop anlegen falls nicht vorhanden
        
if (!task_exists(TASK_AFK_CHECK)) set_task(FREQ_AFK_CHECK"func_afk_check"TASK_AFK_CHECK__"b")

        
// Kick und Transferzeiten festlegen
        
if (get_pcvar_num(CVAR_afk_transfer_time) < 6set_pcvar_num(CVAR_afk_transfer_time6)
        if (
get_pcvar_num(CVAR_afk_kick_time) < 6set_pcvar_num(CVAR_afk_kick_time6)
        
g_iDropBomb get_pcvar_num(CVAR_afk_drop_bomb)
        
g_iTransferTime get_pcvar_num(CVAR_afk_transfer_time)
        
g_iKickTime get_pcvar_num(CVAR_afk_kick_time)
        
g_iMinPlayers get_pcvar_num(CVAR_afk_kick_players)
    }

    
// AFK Check ausgeschaltet
    
else{

        
// Loop lцschen falls vorhanden
        
if (task_exists(TASK_AFK_CHECK)) remove_task(TASK_AFK_CHECK)
    }


}

public 
cmd_jointeam(id){

    
// Spieler als Spectator markieren, sonst kann man den Kick umgehen, indem man keiner Klasse joined.
    
g_bSpec[id] = true
}

public 
cmd_joinclass(id){

    
// Spieler als Spectator entmarkieren
    
g_bSpec[id] = false

    
// Positionen zurьcksetzen
    
g_vOrigin[id] = {000}

    
// Counter zurьcksetzen
    
g_iAFKTime[id] = 0
    g_iWarn
[id] = 0
}

public 
event_round_end(){

    
// Check darf nicht durchgefьhrt werden
    
g_iAFKCheck 0
}

public 
func_afk_check(taskid){
    if (
g_iAFKCheck){
        new 
CsTeams:eTeam

        
// Alle Spieler ьberprьfen
        
for (new id 1id <= g_iMaxPlayersid++){

            
// Bots nicht ьberprьfen
            
if (is_user_bot(id)) continue

            
// AFK Funktionen fьr Specs
            
if (is_user_connected(id) && !is_user_hltv(id)){
                
eTeam cs_get_user_team(id)
                if (
eTeam == CS_TEAM_SPECTATOR || eTeam == CS_TEAM_UNASSIGNED || g_bSpec[id]){

                    
// Counter erhцhen
                    
g_iAFKTime[id]++

                    
// Spec-Kick
                    
if (g_iAFKTime[id] >= g_iKickTime MAX_WARN){
                        
func_kick_player(id)
                    }
                }
            }

            
// AFK Funktionen fьr lebende Spieler
            
if (is_user_alive(id)){

                
// Positionen ьberprьfen
                
if (g_iAFKCheck == 1){
                    new 
vOrigin[3]
                    
get_user_origin(idvOrigin)

                    if (
g_vOrigin[id][0] != vOrigin[0] || g_vOrigin[id][1] != vOrigin[1]){
                        
g_vOrigin[id][0] = vOrigin[0]
                        
g_vOrigin[id][1] = vOrigin[1]
                        
g_vOrigin[id][2] = vOrigin[2]
                        
g_iAFKTime[id] = 0
                        g_iWarn
[id] = 0
                    
}
                    else{
                        
g_iAFKTime[id]++
                    }
                }

                
// Letzte Aktivitдt ermitteln
                
else{
                    new 
Float:fLastActivity
                    fLastActivity 
cs_get_user_lastactivity(id)

                    if (
fLastActivity != g_fLastActivity[id]){
                        
g_fLastActivity[id] = fLastActivity
                        g_iAFKTime
[id] = 0
                        g_iWarn
[id] = 0
                    
}
                    else{
                        
g_iAFKTime[id] = floatround((get_gametime() - fLastActivity) / FREQ_AFK_CHECK)
                    }
                }

                
// Bombentransfer
                
if (g_iDropBomb && g_iAFKTime[id] >= 3){
                    if (
g_iDropBomb == 1){
                        if (
pev(idpev_weapons) & (<< CSW_C4)) engclient_cmd(id"drop""weapon_c4")
                    }
                    else{
                        
func_transfer_bomb(id)
                    }
                }

                
// Spec-Switch
                
if (g_iAFKTime[id] >= g_iTransferTime MAX_WARN){
                    
func_transfer_player(id)
                }
            }
        }
    }
}

public 
func_transfer_bomb(id){

    
// Abbrechen wenn der Spieler keine Bombe hat
    
if (!(pev(idpev_weapons) & (<< CSW_C4))) return

    
// Ermittle alle lebenden Terroristen
    
new iPlayers[32], pNum
    get_players
(iPlayerspNum"ae""TERRORIST")

    
// Abbrechen falls weniger als 2 Terroristen leben
    
if (pNum 2) return

    
// Finde den nдchsten Terroristen der nicht AFK ist
    
new vCarrier[3], vRecipient[3], iRecipientiDistanceiMinDistance 999999
    get_user_origin
(idvCarrier)
    for (new 
0pNump++){
        if (
g_iAFKTime[iPlayers[p]] < 2){
            
get_user_origin(iPlayers[p], vRecipient)
            
iDistance get_distance(vCarriervRecipient)
            if (
iDistance iMinDistance){
                
iMinDistance iDistance
                iRecipient 
iPlayers[p]
            }
        }
    }

    
// Abbrechen wenn alle Terroristen AFK sind
    
if (!iRecipient) return

    
// Bombe transferieren
    
engclient_cmd(id"drop""weapon_c4")
    new 
iC4 engfunc(EngFunc_FindEntityByString, -1"classname""weapon_c4")
    if (
pev_valid(iC4)){
        new 
iBackpack pev(iC4pev_owner)
        if (
iBackpack g_iMaxPlayers){
            
set_pev(iBackpackpev_flagspev(iBackpackpev_flags) | FL_ONGROUND)
            
dllfunc(DLLFunc_TouchiBackpackiRecipient)
        }
    }

    
// Nachrichten anzeigen
    
new szRecipient[32], szMsg[128]
    
get_user_name(iRecipientszRecipient31)
    
set_hudmessage(2552550, -1.00.803.06.00.10.2, -1)
    for (new 
0pNump++){
        if (
iPlayers[p] != iRecipient){
            
format(szMsg127"%L"iPlayers[p], "AFK_TRANSFER_BOMB"szRecipient)
            
show_hudmessage(iPlayers[p], "%s"szMsg)
        }
    }
    
format(szMsg127"%L"iRecipient"AFK_GOT_BOMB")
    
show_hudmessage(iRecipientszMsg)
}

public 
func_transfer_player(id){

    
// Warnung anzeigen, wenn nicht schon max-mal verwarnt
    
if (g_iWarn[id] < MAX_WARN){
        
client_print(idprint_chat"[AMXX] %L"LANG_PLAYER"AFK_TRANSFER_WARN"floatround(FREQ_AFK_CHECK) * (MAX_WARN g_iWarn[id]))
        
g_iWarn[id]++
        return
    }

    
// Eigentlich sollte die Bombe schon transferiert worden sein
    
if (pev(idpev_weapons) & (<< CSW_C4)){
        
engclient_cmd(id"drop""weapon_c4")
    }

    
// Spieler tranferieren
    
if (is_user_alive(id)) user_silentkill(id)

    
// Allow players to choose a team more than one time per round (Thanks ConnorMcLeod)
    // I use this method caused of some issue with deathmatch (Player will be respawned as T or CT)
    
set_pdata_int(idm_iJoiningStateget_pdata_int(idm_iJoiningStateOFFSET_LINUX) & ~(1<<8), OFFSET_LINUX)
    
engclient_cmd(id"jointeam""6")
    
set_pdata_int(idm_iJoiningStateget_pdata_int(idm_iJoiningStateOFFSET_LINUX) & ~(1<<8), OFFSET_LINUX)
    
//cs_set_user_team(id, CS_TEAM_SPECTATOR)
    //cs_reset_user_model(id)

    // Positionen zurьcksetzen
    
g_vOrigin[id] = {000}

    
// Counter zurьcksetzen
    
g_iAFKTime[id] = 0
    g_iWarn
[id] = 0

    
// Nachrichten anzeigen
    
new szName[32]
    
get_user_name(idszName31)
    
client_print(0print_chat"[AMXX] %L"LANG_PLAYER"AFK_TRANSFER_PLAYER"szName)
}

public 
func_kick_player(id){

    
// Abbrechen wenn es sich um einen Admin handelt
    
if (get_user_flags(id) & KICK_IMMUNITY) return

    
// Anzahl der  aktuellen Spieler ermitteln
    
new iCurrentPlayers get_playersnum(1)

    
// Sind noch Plдtze frei?
    
if (iCurrentPlayers g_iMinPlayers || !g_iMinPlayers) return

    
// Warnung anzeigen, wenn nicht schon max-mal verwarnt
    
if (g_iWarn[id] < MAX_WARN){
        
client_print(idprint_chat"[AMXX] %L"LANG_PLAYER"AFK_KICK_WARN"floatround(FREQ_AFK_CHECK) * (MAX_WARN g_iWarn[id]))
        
g_iWarn[id]++
        return
    }

    
// Spieler kicken
    
new szMsg[192]
    
format(szMsg191"%L"id"AFK_KICK_REASON")
    
server_cmd("kick #%d ^"%s^""get_user_userid(id), szMsg)

    
// Nachrichten anzeigen
    
new szName[32]
    
get_user_name(idszName31)
    
client_print(0print_chat"[AMXX] %L"LANG_PLAYER"AFK_KICK_PLAYER"szName)
Аватара пользователя
makenzo89
 
Сообщения: 3
Зарегистрирован: 25 ноя 2012, 15:45
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Языки программирования: Counter-Strike 1.6

Re: [INC] Цветной чат

Сообщение __valera__ » 25 мар 2014, 17:25

бан таким надо
Лучший по моему мнению хостинг, регаться по реф. ссылке:) Мне за это бонусы дают =Р

Multi Play

IDEAL VIP v3.0
[spoiler]тема[/spoiler]
Аватара пользователя
__valera__
 
Сообщения: 444
Зарегистрирован: 05 сен 2011, 17:55
Благодарил (а): 205 раз.
Поблагодарили: 75 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: [INC] Цветной чат

Сообщение inter2016 » 10 апр 2016, 18:15

Вот наработки можете использовать в своих плагинах

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
 
#define PLUGIN "Color message in chat"
#define VERSION "1.0"
#define AUTHOR "Admin"
 
 
public plugin_init 
( )
{
    register_plugin ( PLUGIN, VERSION, AUTHOR )
     
    register_clcmd
("say /normal","default_normal")// clients scr_concolor cvar color
    register_clcmd("say /green","default_green")
    register_clcmd("say /teamcolor","default_team_color") // Red, grey, blue
    register_clcmd("say /grey","default_grey")
    register_clcmd("say /red","default_red")
    register_clcmd("say /blue","default_blue")
     
}
public    default_normal(id){
     
    ColorChat
(id,NORMAL,"Color default NORMAL ^1Color1 ^3Color3 ^4Color4")
}
public default_green (id){
     
    ColorChat
(id,GREEN,"Color default GREEN ^1Color1 ^3Color3 ^4Color4")
}
public default_team_color (id){
     
    ColorChat
(id,TEAM_COLOR,"Color default Team Color ^1Color1 ^3Color3 ^4Color4")
}
public default_grey (id){
     
    ColorChat
(id,GREY,"Color default GREY ^1Color1 ^3Color3 ^4Color4")
}
public default_red (id){
     
    ColorChat
(id,RED,"Color default RED ^1Color1 ^3Color3 ^4Color4")
}
public default_blue (id){
     
    ColorChat
(id,BLUE,"Color default BLUE ^1Color1 ^3Color3 ^4Color4")
}

====================================================
Как изменять цвета отдельных слов в сообщении:
^
- Обычный цвет сообщения
^- Цвет по умолчанию что мы установили Color:type
^- Зеленый цвет

Colorchat.inc копировать обязательно!

Код: Выделить всё
/* Fun functions
*
* by Numb
*
* This file is provided as is (no warranties).
*/

#if defined _colorchat_included
  #endinput
#endif
#define _colorchat_included

enum Color
{
    NORMAL = 1, // clients scr_concolor cvar color
    GREEN, // Green Color
    TEAM_COLOR, // Red, grey, blue
    GREY, // grey
    RED, // Red
    BLUE, // Blue
}

new TeamName[][] = 
{
    "",
    "TERRORIST",
    "CT",
    "SPECTATOR"
}

ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
    if( !get_playersnum() ) return;
    
    new message
[256];

    switch(type)
    {
        case NORMAL: // clients scr_concolor cvar color
        {
            message[0] = 0x01;
        }
        case GREEN: // Green
        {
            message[0] = 0x04;
        }
        default: // White, Red, Blue
        {
            message[0] = 0x03;
        }
    }

    vformat(message[1], 251, msg, 4);

    // Make sure message is not longer than 192 character. Will crash the server.
    message[192] = '^0';

    new team, ColorChange, index, MSG_Type;
    
    if
(id)
    {
        MSG_Type = MSG_ONE;
        index = id;
    } else {
        index = FindPlayer();
        MSG_Type = MSG_ALL;
    }
    
    team 
= get_user_team(index);
    ColorChange = ColorSelection(index, MSG_Type, type);

    ShowColorMessage(index, MSG_Type, message);
        
    if
(ColorChange)
    {
        Team_Info(index, MSG_Type, TeamName[team]);
    }
}

ShowColorMessage(id, type, message[])
{
    static bool:saytext_used;
    static get_user_msgid_saytext;
    if(!saytext_used)
    {
        get_user_msgid_saytext = get_user_msgid("SayText");
        saytext_used = true;
    }
    message_begin(type, get_user_msgid_saytext, _, id);
    write_byte(id)        
    write_string
(message);
    message_end();    
}

Team_Info(id, type, team[])
{
    static bool:teaminfo_used;
    static get_user_msgid_teaminfo;
    if(!teaminfo_used)
    {
        get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
        teaminfo_used = true;
    }
    message_begin(type, get_user_msgid_teaminfo, _, id);
    write_byte(id);
    write_string(team);
    message_end();

    return 1;
}

ColorSelection(index, type, Color:Type)
{
    switch(Type)
    {
        case RED:
        {
            return Team_Info(index, type, TeamName[1]);
        }
        case BLUE:
        {
            return Team_Info(index, type, TeamName[2]);
        }
        case GREY:
        {
            return Team_Info(index, type, TeamName[0]);
        }
    }

    return 0;
}

FindPlayer()
{
    new i = -1;

    while(<= get_maxplayers())
    {
        if(is_user_connected(++i))
            return i;
    }

    return -1;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

Еще вопрос :-) можно ли разделить цвета в самом инклуде? ниже в коде есть пример.

Код: Выделить всё

ColorChat
(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
   if( !get_playersnum() ) return;
   
   new message
[256];

   switch(type)
   {
      case NORMAL: // clients scr_concolor cvar color
      {
         message[0] = 0x01;
      }
      case GREEN: // Green
      {
         message[0] = 0x02;
      }
      case RED: // Red
      {
         message[0] = 0x03;
      }
      case BLUE: // Blue
      {
         message[0] = 0x04;
      }
      case GREY: // Grey
      {
         message[0] = 0x05;
      }
      case TEAM_COLOR: // Team_color
      {
         message[0] = 0x06;
      }
   }
 

Но при компиляции выдает ошибку вариант не катит есть мысли?
Да или можно как нибудь подключить к colorchat con_color в чат при отправке текста был в заданом цвете,а сам серверный текст оставался стандартным.
Последний раз редактировалось Subb98 10 апр 2016, 19:12, всего редактировалось 1 раз.
Причина: для кода Pawn используйте [code=php][/code]
Аватара пользователя
inter2016
 
Сообщения: 6
Зарегистрирован: 13 фев 2016, 10:07
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Языки программирования: Counter-Strike 1.6

Re: [INC] Цветной чат

Сообщение askokzz » 12 июл 2021, 21:00

DJ_WEST, Здарова как это исправитьпроблема money_transfer

chatcolor не работает
Аватара пользователя
askokzz
 
Сообщения: 1
Зарегистрирован: 12 июл 2021, 20:52
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Я ничего не знаю

Пред.

Вернуться в Статьи / фрагменты кода

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

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

cron