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

[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] Цветной чат

Сообщение Co6aka » 23 сен 2009, 12:46

Меня давно мучает вопрос. Если мне нужно выводить в сообщении имя игрока и цвет его команды, то есть ли проще способ, чем этот:
взять имя игрока
взять его команду: если команда Т, то вывести сообщение, ник обвести красным
еще если команда КТ, то вывести сообщение, ник обвести синим
еще если спектатор или не зашедший то вывести сообщение, ник обвести белым
??
Аватара пользователя
Co6aka
 
Сообщения: 226
Зарегистрирован: 30 авг 2009, 21:19
Благодарил (а): 54 раз.
Поблагодарили: 114 раз.
Языки программирования: Counter-Strike 1.6

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

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

Co6aka, вполне нормальный алгоритм. Другое дело, когда и при каких условиях тебе нужно выводить сообщение. Если выводить тогда, когда игрок сменил команду, то можно сделать register_event на событие Вы должны зарегистрироваться, чтобы видеть ссылки., к примеру. Там по-мойму передается сообщение захода за команду, там и и ник сразу в качестве аргумента выдается и какая команда (значит получать ник игрока и его команду уже не нужно). Есть и другие способы поймать, через logevent или клиенсткую команду jointeam. В зависимости от того, что тебе нужно.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
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] Цветной чат

Сообщение Co6aka » 23 сен 2009, 17:21

НУ например, самое простое - это в amx_chat при выводе сообщения чтобы писался ник с цветом команды отправителя. Это для начала :) если не получится реализовать самостоятельно, буду обращаться.
Аватара пользователя
Co6aka
 
Сообщения: 226
Зарегистрирован: 30 авг 2009, 21:19
Благодарил (а): 54 раз.
Поблагодарили: 114 раз.
Языки программирования: Counter-Strike 1.6

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

Сообщение DJ_WEST » 24 сен 2009, 07:45

Если для amx_chat, то твоя схема вполне подходит.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
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] Цветной чат

Сообщение rangel » 01 окт 2009, 15:52

очень хорошая вещь, подредактировал amxmisc теперь у меня вот так вот)

просто меняем
Код: Выделить всё
client_print(i, print_chat, "%s", buffer); 
на
Код: Выделить всё
client_print_color(i, Grey, "%s", buffer); 

так же добавляем строчку
Код: Выделить всё
#include <chatcolor>     


а в файлах с языком например admincmd.txt меняем
ADMIN_SLAP_1 = ADMIN: slap %s with %d damage
на
ADMIN_SLAP_1 = ADMIN: slap !g%s !twith !g%d !tdamage

Добавлено спустя 51 секунду:
было бы хорошо если бы можно было !r и !b красный и синий, вообще замечательно)
Аватара пользователя
rangel
 
Сообщения: 140
Зарегистрирован: 28 сен 2009, 18:52
Благодарил (а): 40 раз.
Поблагодарили: 26 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

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

Сообщение DJ_WEST » 01 окт 2009, 23:53

было бы хорошо если бы можно было !r и !b красный и синий, вообще замечательно)

Нельзя одновременно использовать и красный и синий, потому что для отображения цветом красным или синим нужно сменить команду игроку через событие TeamInfo в зависимости от цвета, а потом вернуть в ту команду, в которой он был.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
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] Цветной чат

Сообщение Co6aka » 27 ноя 2009, 14:24

Код: Выделить всё
/* AMX Mod script.
*
* (c) 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 <chatcolor>
#include <cstrike>

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_CFG,"- configures high_ping_kicker plugin")
  register_cvar("amx_hpk_ping","99")
  register_cvar("amx_hpk_check","5")
  register_cvar("amx_hpk_tests","5")
  register_cvar("amx_hpk_delay","40")
 
  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
   
    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 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],ip[32]
  get_user_name(id,name,31)
  get_user_authid(id,authid,31)
  get_user_ip(id,ip,31)
 
  new CsTeams:team = cs_get_user_team(id)
 
  if(team == CS_TEAM_CT)
  {
   client_print_color(0,Blue,"^4[#1 Standart] ^1Player ^3%s ^1kicked. Reason: high ping",name)
  }
 
  else if(team == CS_TEAM_T)
  {
   client_print_color(0,Red,"^4[#1 Standart] ^1Player ^3%s ^1kicked. Reason: high ping",name)
  }
 
  else
  {
   client_print_color(0,Grey,"^4[#1 Standart] ^1Player ^3%s ^1kicked. Reason: high ping",name)
  }
 
  server_cmd("kick #%d ^"high ping. Try again later^"",get_user_userid(id))
  log_amx("Kick: ^"%s (%d)(%s)(%s)^" was kicked due highping (Average Ping ^"%d^")", name,get_user_userid(id),authid,ip,(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   
}




когда игрока кикает, ник очень часто высвечивается белым цветом :shout:
как исправить?
Аватара пользователя
Co6aka
 
Сообщения: 226
Зарегистрирован: 30 авг 2009, 21:19
Благодарил (а): 54 раз.
Поблагодарили: 114 раз.
Языки программирования: Counter-Strike 1.6

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

Сообщение DJ_WEST » 27 ноя 2009, 21:50

когда игрока кикает, ник очень часто высвечивается белым цветом
как исправить?

Вместо cs_get_user_team(id) попробуй использовать get_user_team(id). Только там переменная не CsTeams типа, а обычная.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
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] Цветной чат

Сообщение Slavvkko » 14 дек 2009, 21:53

А можно добавить еще цветов?
Я на какомто сервере видел текст в чате (серверный) салатовым, желтым, розовым цветом...
Аватара пользователя
Slavvkko
 
Сообщения: 168
Зарегистрирован: 03 окт 2009, 17:58
Откуда: UA
Благодарил (а): 20 раз.
Поблагодарили: 57 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

След.

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

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

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