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

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

Сообщение nikolkay » 02 май 2010, 21:57

у меня проблема с better High ping kicker:
изменяю цвет а при компилировании выдает ошибку типа не хватает знаков,

а я потом посмотре и заметил: все дело в chatcolor.inc(тоесть его написании в самом плаге
вот что я делал(добавил инклуд и изменил первую строку в чат(об иммунитете)

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

/*   AMX Mod script
   Better High Ping Kicker (c) 2009 by Lev
   This file is provided as is (no warranties).

   URL: Вы должны зарегистрироваться, чтобы видеть ссылки.

   This is mainly a modification of HPK by DynAstY.
   Thanks to all other HPK authors (OLO, DynAstY, shadow, EKS) - your plugins provided the base.

   Features:
      Players with immunity and slot reservations won't be checked.
      At night max ping defined by different CVAR (so usually it will be higher).
      By default keeps min 3 players (bots and hltv are not included) at server if they are not exceed night max ping twice.
      Player is banned for 1 minute, not just simply kicked.

   CVARs (Supplied values are defaults):
      hpk_ping_max 175 ; maximim ping to check for at day time
      hpk_ping_max_night 300 ; maximim ping to check for at night time
      hpk_ping_time 10 ; interval at which ping will be checked
      hpk_ping_tests 5 ; number of violations of maximum ping at which to kick
      hpk_min_players 3 ; don't kick player if there is this count or less players (bots and hltv are not included) at server and player's ping doesn't exceed night ping twice.
      hpk_night_start_hour 3 ; night period start hour (hour included)
      hpk_night_end_hour 9 ; night period end hour (hour excluded)

   How it is different from other HPK plugins:
      using pointers to CVARs;
      code flow is optimized;
      there is night period when ping defined by different CVAR, period also defined by CVARs;
      changes to max pings applies immediately;
      immunity for admins and slot reservations players;
      keeps min players at server (count defined by CVAR) if their ping is not too high (double night max ping);

   ChangeLog:
      v2.4 [2009.03.01]
         Initial release.
      v2.5 [2009.10.02]
         ! Change: bots and hltv are now excluded from players count for comparision with hpk_min_players.
      v2.6 [2009.10.10]
         ! Change: changed from ban ID to ban IP.
*/

#pragma semicolon 1
#pragma ctrlchar '\'

#include <amxmodx>
#include <amxmisc>
#include <chatcolor.inc>


#define AUTHOR "Lev"
#define PLUGIN "Better High Ping Kicker"
#define VERSION "2.6"
#define VERSION_CVAR "bhpk_version"

#define ALWAYS_KICK_MULTIPLIER 2      // Player will be kicked even there is less then or equal min_players if player's ping exceed night max ping by this factor.
#define DELAY_BEFORE_START_TESTING 20.0   // Delay before showing warning and start ping checking. Real testing starts after hpk_ping_time also passed.

const TASK_ID_BASE = 52635;   // random number

const min_hpk_ping_max = 10;
const min_hpk_ping_time = 10;
const min_hpk_ping_tests = 4;

new pcvar_hpk_ping_max;
new pcvar_hpk_ping_max_night;
new pcvar_hpk_ping_time;
new pcvar_hpk_ping_tests;
new pcvar_hpk_min_players;
new pcvar_hpk_night_start_hour;
new pcvar_hpk_night_end_hour;

new ping_violations[33];

public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR);
   register_cvar(VERSION_CVAR, VERSION, FCVAR_SERVER);

   pcvar_hpk_ping_max = register_cvar("hpk_ping_max", "175");
   pcvar_hpk_ping_max_night = register_cvar("hpk_ping_max_night", "300");
   pcvar_hpk_ping_time = register_cvar("hpk_ping_time", "10");
   pcvar_hpk_ping_tests = register_cvar("hpk_ping_tests", "5");
   pcvar_hpk_min_players = register_cvar("hpk_min_players", "3");
   pcvar_hpk_night_start_hour = register_cvar("hpk_night_start_hour", "3");
   pcvar_hpk_night_end_hour = register_cvar("hpk_night_end_hour", "9");
}
   
public client_putinserver(plrid)
{
   ping_violations[plrid] = 0;
   if (!is_user_bot(plrid) && !is_user_hltv(plrid))
      set_task(DELAY_BEFORE_START_TESTING, "showInfo", TASK_ID_BASE + plrid);
   return PLUGIN_CONTINUE;
}

public client_infochanged(plrid)
{
   remove_task(TASK_ID_BASE + plrid);
   if (!is_user_bot(plrid) && !is_user_hltv(plrid))
      set_task(DELAY_BEFORE_START_TESTING, "showInfo", TASK_ID_BASE + plrid);
   return PLUGIN_CONTINUE;
}

public client_disconnect(plrid)
{
   remove_task(TASK_ID_BASE + plrid);
   return PLUGIN_CONTINUE;
}

public showInfo(taskid)
{
   new plrid = taskid - TASK_ID_BASE;
   if (access(plrid, ADMIN_IMMUNITY) || access(plrid, ADMIN_RESERVATION))
      client_print_color(plrid, DontChange, "^4[BHPK] ^1Ping checking disabled due to ^3immunity...");
   else
   {
      client_print(plrid, print_chat, "[BHPK] Players with ping higher than %dms will be kicked!", get_hpk_ping_max());
      set_task(float(get_hpk_ping_time()), "checkPing", TASK_ID_BASE + plrid, _, _, "b");
   }
   return PLUGIN_CONTINUE;
}

public checkPing(taskid)
{
   new plrid = taskid - TASK_ID_BASE;
   new ping, loss;

   get_user_ping(plrid, ping, loss);

   if (ping > get_hpk_ping_max()) ping_violations[plrid]++;
   else if (ping_violations[plrid] > 0) ping_violations[plrid]--;

   new hpk_ping_tests = get_hpk_ping_tests();
   if (ping_violations[plrid] >= hpk_ping_tests)
   {
      static players[32];
      new playerCount;
      get_players(players, playerCount, "ch");
      // Allow player to stay if there is less or equal than 'min_players' players and player ping is not too high.
      if (playerCount <= get_pcvar_num(pcvar_hpk_min_players) &&
         ping < get_pcvar_num(pcvar_hpk_ping_max_night) * ALWAYS_KICK_MULTIPLIER)
      {
         ping_violations[plrid] = hpk_ping_tests;
         return PLUGIN_CONTINUE;
      }
      kickPlayer(plrid);
   }

   return PLUGIN_CONTINUE;
}

kickPlayer(plrid)
{
   new name[33], ip[15];
   get_user_name(plrid, name, sizeof(name) - 1);
   get_user_ip(plrid, ip, charsmax(ip), 1);

   client_cmd(plrid, "echo \"[BHPK] Sorry but you have high ping, try later...\"; disconnect");
   server_cmd("addip 1 %s", ip);
   client_print(0, print_chat, "[BHPK] %s was disconnected due to high ping!", name);
   return PLUGIN_CONTINUE;
}

get_hpk_ping_max()
{
   new ping_max;
   new hour, minute, second;

   time(hour, minute, second);

   // At night we use different CVAR
   if (hour >= get_pcvar_num(pcvar_hpk_night_start_hour) &&
      hour < get_pcvar_num(pcvar_hpk_night_end_hour))
      ping_max = get_pcvar_num(pcvar_hpk_ping_max_night);
   else
      ping_max = get_pcvar_num(pcvar_hpk_ping_max);
   // Check to be no less then minimum value
   if (ping_max < min_hpk_ping_max) return min_hpk_ping_max;
   return ping_max;
}
get_hpk_ping_time()
{
   new time = get_pcvar_num(pcvar_hpk_ping_time);
   // Check to be no less then minimum value
   if (time < min_hpk_ping_time) return min_hpk_ping_time;
   return time;
}
get_hpk_ping_tests()
{
   new tests = get_pcvar_num(pcvar_hpk_ping_tests);
   // Check to be no less then minimum value
   if (tests < min_hpk_ping_tests) return min_hpk_ping_tests;
   return tests;
}

и ошибка:


Помогите исправить проблему пожалуйста - я в pawn новичек и плохо понимаю)
Аватара пользователя
nikolkay
 
Сообщения: 12
Зарегистрирован: 13 дек 2009, 15:55
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source

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

Сообщение DJ_WEST » 03 май 2010, 00:39

Замени:
[pawn]#pragma semicolon 1 [/pawn]
На:
[pawn]#pragma semicolon 0 [/pawn]
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
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] Цветной чат

Сообщение nikolkay » 03 май 2010, 08:52

получилось, спасибо)
функционал не изменится??)
или этот параметр только для цвета : #pragma semicolon 0
Аватара пользователя
nikolkay
 
Сообщения: 12
Зарегистрирован: 13 дек 2009, 15:55
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source

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

Сообщение DJ_WEST » 03 май 2010, 14:03

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

Сообщение nikolkay » 03 май 2010, 14:31

Спасибо, вы мне очень помогли)
Аватара пользователя
nikolkay
 
Сообщения: 12
Зарегистрирован: 13 дек 2009, 15:55
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source

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

Сообщение Hunter » 07 июн 2010, 12:16

Почему после добавления строк
#include <chatcolor.inc>
и
client_print_color(0, Red, " %s Проголосовал за %d минут", name, g_tls[key -1])
плагин в обще перестал работать хотя всё компилируется, при удалении этих строк всё норм.
Аватара пользователя
Hunter
 
Сообщения: 72
Зарегистрирован: 07 июн 2010, 12:03
Благодарил (а): 5 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

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

Сообщение Fedcomp » 07 июн 2010, 13:04

Потому что ты не написал ошибку
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

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

Сообщение Hunter » 07 июн 2010, 13:20

вот весь плагин, подскажите в чём ошибка
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <chatcolor.inc>

#define PLUGIN   "TimeLimit vote"
#define AUTHOR   "many"
#define VERSION   "0.3"

#define MAX_RESULTS 5


//thnx pr4er for help

new Float:g_timelimit
new menu

new g_voteCount[MAX_RESULTS + 1]
new g_tls[MAX_RESULTS]
new tls[MAX_RESULTS]

public plugin_precache()
{
   precache_sound("misc/your_sound_file_start.wav")
   precache_sound("misc/your_sound_file_end.wav")
}

public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR)
   
   new name[12], string[12]
   new multiplic = 10 // +++++
   
   for(new i=0;i<MAX_RESULTS;i++)
   {
      format(name, sizeof name -1, "amx_tl_%d", i+1)
      
      format(string, sizeof string -1, "%d", multiplic)
      
      tls[i] = register_cvar(name, string)
      
      multiplic += 10
   }
}

public plugin_cfg()
{
   menu = menu_create("\wГолосование за время до смены карты:", "menu_handler")
   
   for(new i=0;i<MAX_RESULTS;i++)
      g_tls[i] = get_pcvar_num(tls[i])
   
   set_task(30.0, "start_vote")
   
   build_menu()
}

build_menu()
{   
   new option[64], temp[12]
   for(new i=0;i<MAX_RESULTS;i++)
   {
      format(option, sizeof option -1, "\w%d минут", g_tls[i])
      format(temp, sizeof temp -1, "%d", i+1)
      
      menu_additem(menu, option, temp, 0)
   }
   
   menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
}

public start_vote(id)
{
   client_cmd(0, "spk misc/your_sound_file_start")
   new players[32], inum, i
   get_players(players, inum, "ch")
   
   for(i=0;i<inum;i++)
      menu_display(players[i], menu, 0)
   
   set_task(15.0, "finish_vote")
   
   for(i=1;i<(MAX_RESULTS+1);i++)
      g_voteCount[i] = 0
   
   return PLUGIN_CONTINUE
}

public menu_handler(id, menu, item)
{
   if( !is_user_connected( id ) )
      return PLUGIN_HANDLED

   if(item == MENU_EXIT)
   {
      menu_cancel(id)
      
      return PLUGIN_HANDLED
   }
   
   new data[6], name[32]
   new access, callback
   
   menu_item_getinfo(menu, item, access, data, 5, "", 0, callback)
   
   new key = str_to_num(data)
   get_user_name(id, name, 31)
   
        client_print_color(0, Red, " %s Проголосовал за %d минут", name, g_tls[key -1])
   
   g_voteCount[key]++

   menu_cancel(id)
   
   return PLUGIN_HANDLED
}

public finish_vote()
{
        client_cmd(0, "spk misc/your_sound_file_end")
   g_timelimit = get_cvar_float("mp_timelimit")
   
   new best = 0, i
   
   for(i=0;i<(MAX_RESULTS+1);i++)
   {
      if(g_voteCount[i] > g_voteCount[best])
         best = i
   }
   
   new votesNum = 0
   for(i=0;i<(MAX_RESULTS+1);i++)
      votesNum += g_voteCount[i]
   
   new iRatio = votesNum ? floatround(get_cvar_float("amx_vote_ratio") * float(votesNum), floatround_ceil) : 1
   new iResult = g_voteCount[best]
   
   if(iResult >= iRatio)
   {
      new new_time = g_tls[best -1]
      
      client_print_color(0, Red, "Результаты голосования: %d минут до следующей карты!", new_time)
      
      set_cvar_num("mp_timelimit", new_time)
   }
   else
   {
      client_print_color(0, Red, "Голосование не состоялось.")
   }
   
   new players[32], inum
   get_players(players, inum, "ch")
   
   for(i=0;i<inum;i++)
      client_cmd(players[i], "slot10")
}

public plugin_end()
{
   set_cvar_float("mp_timelimit", g_timelimit)
}
Аватара пользователя
Hunter
 
Сообщения: 72
Зарегистрирован: 07 июн 2010, 12:03
Благодарил (а): 5 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

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

Сообщение Slavvkko » 07 июн 2010, 16:39

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

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

Сообщение Hunter » 07 июн 2010, 16:46

Всё компилируется только плагин не запускается

Добавлено спустя 4 минуты 18 секунд:
На сколько я понимаю для того чтоб дописать строку " #include <chatcolor.inc> "
в попке " nclude " должен быть файл " chatcolor.inc", почему у меня его нет и где его взять.
Аватара пользователя
Hunter
 
Сообщения: 72
Зарегистрирован: 07 июн 2010, 12:03
Благодарил (а): 5 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Пред.След.

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

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

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