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

[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 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

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

Сообщение Retro-kolt Lincoln » 28 июн 2011, 17:15

DJ_WEST писал(а):В твоем стоке нет цвета синего или красного, там просто цвет команды.

А можешь поделится стоком с цветами, если есть конечно буду очень блогодарен, просто щас очень много разных плагинов для ZP переделываю и перевожу, не хочу лишний инклуд сувать, а вообще кому нужно пользуюсь вот этим.
[pawn]#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;
}
 [/pawn]
Предлагаю услуги гаранта. Написание плагинов на заказ.
Статус:
на заслуженном отдыхе
Отзывы: Нажми
Обратиться ко мне: Нажми

- - - - - - - - - - - - - - - -
Если ваше ЛС было проигнорировано мною, знайте, оно мне не интересно.
Аватара пользователя
Retro-kolt Lincoln
 
Сообщения: 1283
Зарегистрирован: 28 авг 2010, 19:16
Благодарил (а): 321 раз.
Поблагодарили: 581 раз.
Опыт программирования: Больше трех лет
Языки программирования: ╚►Counter-Strike 1.6

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

Сообщение DJ_WEST » 28 июн 2011, 23:13

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

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

Сообщение Retro-kolt Lincoln » 29 июн 2011, 14:41

Спасибо, а не подскажешь какой include может красить сообщение не в исходнике, а в языковом файле? Почему-то мой этого не делает... Или может это я что-то не так делаю...
Предлагаю услуги гаранта. Написание плагинов на заказ.
Статус:
на заслуженном отдыхе
Отзывы: Нажми
Обратиться ко мне: Нажми

- - - - - - - - - - - - - - - -
Если ваше ЛС было проигнорировано мною, знайте, оно мне не интересно.
Аватара пользователя
Retro-kolt Lincoln
 
Сообщения: 1283
Зарегистрирован: 28 авг 2010, 19:16
Благодарил (а): 321 раз.
Поблагодарили: 581 раз.
Опыт программирования: Больше трех лет
Языки программирования: ╚►Counter-Strike 1.6

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

Сообщение PRoSToTeM@ » 29 июн 2011, 14:43

Попробуй в словаре использовать ALT + 001, ALT + 003, ALT + 004
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

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

Сообщение amxmodx » 13 авг 2011, 16:50

:-\
у вас вируч в этой теме =\
захожу avast пишет мол "ээээ тута программа вредоносный >:o "
проверте шаблон
Аватара пользователя
amxmodx
 
Сообщения: 1
Зарегистрирован: 13 авг 2011, 16:40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

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

Сообщение PRoSToTeM@ » 13 авг 2011, 16:57

Retro-kolt Lincoln писал(а):
DJ_WEST писал(а):В твоем стоке нет цвета синего или красного, там просто цвет команды.

А можешь поделится стоком с цветами, если есть конечно буду очень блогодарен, просто щас очень много разных плагинов для ZP переделываю и перевожу, не хочу лишний инклуд сувать, а вообще кому нужно пользуюсь вот этим.
[pawn]
  1. #if defined _colorchat_included

  2.   #endinput

  3. #endif

  4. #define _colorchat_included

  5.  

  6. enum Color

  7. {

  8.     NORMAL = 1// clients scr_concolor cvar color

  9.     GREEN, // Green Color

  10.     TEAM_COLOR, // Red, grey, blue

  11.     GREY, // grey

  12.     RED, // Red

  13.     BLUE, // Blue

  14. }

  15.  

  16. new TeamName[][] = 

  17. {

  18.     "",

  19.     "TERRORIST",

  20.     "CT",

  21.     "SPECTATOR"

  22. }

  23.  

  24. ColorChat(id, Color:type, const msg[]{Float,Sql,Result,_}:...)

  25. {

  26.     if( !get_playersnum() ) return;

  27.     

  28.     new message[256];

  29.  

  30.     switch(type)

  31.     {

  32.         case NORMAL: // clients scr_concolor cvar color

  33.         {

  34.             message[0] = 0x01;

  35.         }

  36.         case GREEN: // Green

  37.         {

  38.             message[0] = 0x04;

  39.         }

  40.         default: // White, Red, Blue

  41.         {

  42.             message[0] = 0x03;

  43.         }

  44.     }

  45.  

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

  47.  

  48.     // Make sure message is not longer than 192 character. Will crash the server.

  49.     message[192] = '^0';

  50.  

  51.     new team, ColorChange, index, MSG_Type;

  52.     

  53.     if(id)

  54.     {

  55.         MSG_Type = MSG_ONE;

  56.         index = id;

  57.     } else {

  58.         index = FindPlayer();

  59.         MSG_Type = MSG_ALL;

  60.     }

  61.     

  62.     team = get_user_team(index);

  63.     ColorChange = ColorSelection(index, MSG_Type, type);

  64.  

  65.     ShowColorMessage(index, MSG_Type, message);

  66.         

  67.     if(ColorChange)

  68.     {

  69.         Team_Info(index, MSG_Type, TeamName[team]);

  70.     }

  71. }

  72.  

  73. ShowColorMessage(id, type, message[])

  74. {

  75.     static bool:saytext_used;

  76.     static get_user_msgid_saytext;

  77.     if(!saytext_used)

  78.     {

  79.         get_user_msgid_saytext = get_user_msgid("SayText");

  80.         saytext_used = true;

  81.     }

  82.     message_begin(type, get_user_msgid_saytext, _, id);

  83.     write_byte(id)        

  84.     write_string(message);

  85.     message_end();    

  86. }

  87.  

  88. Team_Info(id, type, team[])

  89. {

  90.     static bool:teaminfo_used;

  91.     static get_user_msgid_teaminfo;

  92.     if(!teaminfo_used)

  93.     {

  94.         get_user_msgid_teaminfo = get_user_msgid("TeamInfo");

  95.         teaminfo_used = true;

  96.     }

  97.     message_begin(type, get_user_msgid_teaminfo, _, id);

  98.     write_byte(id);

  99.     write_string(team);

  100.     message_end();

  101.  

  102.     return 1;

  103. }

  104.  

  105. ColorSelection(index, type, Color:Type)

  106. {

  107.     switch(Type)

  108.     {

  109.         case RED:

  110.         {

  111.             return Team_Info(index, type, TeamName[1]);

  112.         }

  113.         case BLUE:

  114.         {

  115.             return Team_Info(index, type, TeamName[2]);

  116.         }

  117.         case GREY:

  118.         {

  119.             return Team_Info(index, type, TeamName[0]);

  120.         }

  121.     }

  122.  

  123.     return 0;

  124. }

  125.  

  126. FindPlayer()

  127. {

  128.     new i = -1;

  129.  

  130.     while(<= get_maxplayers())

  131.     {

  132.         if(is_user_connected(++i))

  133.             return i;

  134.     }

  135.  

  136.     return -1;

  137. } 
[/pawn]

В этом стоке нету поддержки ML если указывать 0 на месте игрока.
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

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

Сообщение axI. » 29 янв 2012, 01:38

Код: Выделить всё
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <colorchat>

#define PLUGIN "Fake Votekick/Voteban"
#define VERSION "1.0"
#define AUTHOR "BorJomi"

new bool:start_vote,votes,punishment,vote_mode

public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR)
   register_clcmd( "say /votekick","votekick", ADMIN_ALL)
   register_clcmd( "say /voteban","voteban", ADMIN_ALL)
   register_clcmd( "say votekick","votekick", ADMIN_ALL)
   register_clcmd( "say voteban","voteban", ADMIN_ALL)
   
   punishment = register_cvar("fakevote_punishment","1")
   
   register_menucmd(register_menuid("fakemenu"),          1023, "fakekey");
}
public votekick(id)
{
   fake_vote(id,1)
}
public voteban(id)
{
   fake_vote(id,2)
}
public fake_vote(id,mode)
{
   if(!start_vote)
   {
      start_vote=true
      votes=0
      vote_mode=mode
      
      new vote_name[33]
      get_user_name(id,vote_name,32)
      
      new iPlayers[32],iNum
      get_players(iPlayers,iNum,"ch")
      
      for(new i=0;i<iNum;i++)
      {
         new ids=iPlayers[i]
         show_menu_players(ids,vote_name)
      }
      
      new task_data[2]
      task_data[0] = iNum   
      task_data[1] = id
      
      set_task(10.0,"end_vote",_,task_data,2)
   }
   else
   {
      switch(mode)
      {
         case 1:
            client_print_color(id, DontChange, "[^4VoteKick^1] Wait! Another Vote in Progress")
         case 2:
            client_print_color(id, DontChange, "[^4VoteBan^1] Wait! Another Vote in Progress")
      }
   }
}
public end_vote(args[])
{
   new inum = args[0]
   new start_id = args[1]
   new vote_percent=(votes*100)/inum
   
   new vote_name[33]
   get_user_name(start_id,vote_name,32)
      
   if(vote_percent>50)
   {
      new tmp_str[128]
      
      if(get_pcvar_num(punishment) && vote_mode==1)
      {
         formatex(tmp_str,sizeof tmp_str - 1,"Hey %s, other Players decided to kick you:D",vote_name)
         kick_function(start_id,tmp_str)
      }
      else if(get_pcvar_num(punishment) && vote_mode==2)
      {
         formatex(tmp_str,sizeof tmp_str - 1,"Hey %s, other Players decided to ban you. But we just kick you:D",vote_name)
         kick_function(start_id,tmp_str)
      }
      
      switch(vote_mode)
      {
         case 1:
         {
            client_print_color(id, DontChange,"[^4VoteKick^1] Vote finished! Other Players^3(%d%%)^1 decided to ^4kick %s",vote_percent,vote_name)
         
            if(!get_pcvar_num(punishment))
               client_print_color(id, DontChange,"[^4VoteKick^1] But it's fake vote:D")
         }
         case 2:
         {
            client_print_color(id, DontChange,"[^4VoteBan^1] Vote finished! Other Players^3(%d%%)^1 decided to ban ^4%s",vote_percent,vote_name)
            
            if(!get_pcvar_num(punishment))
               client_print_color(id, DontChange,"[^4VoteBan^1] But it's fake vote:D")
            else
               client_print_color(id, DontChange,"[^4VoteBan^1] But it's fake vote. So we Just kick him:D")
         }
      }
   }
   else
   {
      switch(vote_mode)
      {
         case 1:
            client_print_color(id, DontChange,"[^4VoteKick^1] Vote finished! Lucky  ^3%s,^1 other Players^4(%d%%)^1 doesn't want kick him!",vote_name,100-vote_percent)
         case 2:
         {
            client_print_color(id, DontChange,"[^4VoteBan^1] Vote finished! Lucky  ^3%s,^1 other Players^4(%d%%)^1 doesn't want ban him!",vote_name,100-vote_percent)
         }
      }   
   }
   
   start_vote=false
   votes=0
   vote_mode=0
}
public kick_function(id,szReason[])
{
   emessage_begin(MSG_ONE,SVC_DISCONNECT,_,id)
   ewrite_string(szReason)
   emessage_end()
}
public show_menu_players(id,vote_name[])
{
   
   new MenuBody[1024], len, keys;
   
   switch(vote_mode)
   {
      case 1:
      {
         len = format(MenuBody, 1023, "\dVoteKick Menu^n^n");
         len += format(MenuBody[len], 1023-len, "\wHey people \y%s\w wants to kick yourself. \rKick\w him?",vote_name);
      }
      case 2:
      {
         len = format(MenuBody, 1023, "\dVoteBan Menu^n^n");
         len += format(MenuBody[len], 1023-len, "\wHey people \y%s\w wants to ban yourself. \rBan\w him?",vote_name);
      }
   }
   
   len += format(MenuBody[len], 1023-len, "^n\r1. \wYes");
   keys |= (1<<0);
   len += format(MenuBody[len], 1023-len, "^n\r2. \wNo");
   keys |= (1<<1);
   
   len += format(MenuBody[len], 1023-len, "^n^n\r0. \wExit");
   keys |= (1<<9);
   
   show_menu(id, keys, MenuBody, -1, "fakemenu");

   return PLUGIN_CONTINUE;
}
public fakekey(id, key)
{
   new name[33]
   get_user_name(id,name,32)
   
   switch((key+1))
   {
      case 1:
      {
         if(start_vote)
         {
            votes++
            switch(vote_mode)
            {
               case 1:
                  client_print_color(id, DontChange,"[^4VoteKick^1] ^3%s^1 vote for Yes",name)
               case 2:
                  client_print_color(id, DontChange,"[^4VoteBan^1] ^3%s^1 vote for Yes",name)
            }
         }
      }
      case 2:
      {
         if(start_vote)
         {
            switch(vote_mode)
            {
               case 1:
                  client_print_color(id, DontChange,"[^4VoteKick^1] ^3%s^1 vote for No",name)
               case 2:
                  client_print_color(id, DontChange,"[^4VoteBan^1] ^3%s^1vote for No",name)
            }
         }
      }
   }
   return PLUGIN_HANDLED;
}

Поправите? ;)
Аватара пользователя
axI.
 
Сообщения: 9
Зарегистрирован: 05 ноя 2011, 15:13
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

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

Сообщение Retro-kolt Lincoln » 29 янв 2012, 13:36

axI. Эмм тут вроде не форум телепатов или экстрасенсов...
Не вижу лога ошибки...
Предлагаю услуги гаранта. Написание плагинов на заказ.
Статус:
на заслуженном отдыхе
Отзывы: Нажми
Обратиться ко мне: Нажми

- - - - - - - - - - - - - - - -
Если ваше ЛС было проигнорировано мною, знайте, оно мне не интересно.
Аватара пользователя
Retro-kolt Lincoln
 
Сообщения: 1283
Зарегистрирован: 28 авг 2010, 19:16
Благодарил (а): 321 раз.
Поблагодарили: 581 раз.
Опыт программирования: Больше трех лет
Языки программирования: ╚►Counter-Strike 1.6

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

Сообщение axI. » 29 янв 2012, 19:29

Как бы не знал, что нужны логи. Спасибо creator_52, помог.
Аватара пользователя
axI.
 
Сообщения: 9
Зарегистрирован: 05 ноя 2011, 15:13
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

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

Сообщение Forser » 14 фев 2012, 21:14

[pawn]
  1. #include <amxmodx>

  2. #include <amxmisc>

  3. #include <cstrike>

  4. #include <fun>

  5. #include <chatcolor.inc>

  6.  

  7.  

  8. #define adtime   600.0

  9.  

  10. new pcvar_Advertise

  11. new pcvar_Display

  12.  

  13. public plugin_init()

  14. {

  15.         register_plugin("Reset Score", "1.0", "Silenttt")

  16.        

  17.         register_clcmd("say /rs", "reset_score")

  18.         register_clcmd("say /resetscore", "reset_score")

  19.         register_clcmd("say /restartscore", "reset_score")

  20.  

  21.         pcvar_Advertise = register_cvar("sv_rsadvertise", "0")

  22.  

  23.         pcvar_Display = register_cvar("sv_rsdisplay", "0")

  24.        

  25.         if(get_cvar_num("sv_rsadvertise") == 1)

  26.         {

  27.                 set_task(adtime, "advertise", _, _, _, "b")

  28.         }

  29. }

  30.  

  31. public reset_score(id)

  32. {

  33.         cs_set_user_deaths(id, 0)

  34.         set_user_frags(id, 0)

  35.         cs_set_user_deaths(id, 0)

  36.         set_user_frags(id, 0)

  37.        

  38.         if(get_pcvar_num(pcvar_Display) == 1)

  39.         {

  40.                 new name[33]

  41.                 get_user_name(id, name, 32)

  42.                 client_print_color(0, DontChange, "^4%s ^3обнулил свой счёт", name)

  43.         }

  44.         else

  45.         {

  46.                 client_print_color(0, DontChange, "^3Ваш счёт успешно обнулён")

  47.         }

  48. }

  49.  

  50. public advertise()

  51. {

  52.         set_hudmessage(255, 0, 0, -1.0, 0.20, 0, 0.2, 12.0)

  53.         show_hudmessage(0, "Напишите в чате /resetscore или /rs для обнуления вашего счёта")

  54. }

  55.  

  56. public client_putinserver(id)

  57. {

  58.         if(get_pcvar_num(pcvar_Advertise) == 1)

  59.         {

  60.                 set_task(10.0, "connectmessage", id, _, _, "a", 1)

  61.         }

  62. }

  63.  

  64. public connectmessage(id)

  65. {

  66.         if(is_user_connected(id))

  67.         {

  68.         client_print_color(0, DontChange, "^4Напишите в чате /resetscore или /rs для обнуления вашего счёта")

  69.         }

  70. }

  71.  
[/pawn]

При компиляции ошибок нет, а вот сам плагин в игре не работает при написании в чат /rs
Поправьте код!
Аватара пользователя
Forser
 
Сообщения: 1
Зарегистрирован: 14 фев 2012, 21:07
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6

Пред.След.

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

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

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

cron