Paranoiiik
хачю клиентмод
- Сообщения
- 2,047
- Реакции
- 1,490
ClientMod Colors
Мы знаем, что в CS:S v34 для использования в чате доступно совсем крохотное количество цветов. Всего лишь несколько кодов заложено разработчиками для определённых целей.
Из-за этого чат выглядит, мягко говоря, скучно, уныло. Цвета приелись. Всё сильно ограничено.
Библиотека Colors предлагает конкретно для нашей версии CS:S следующие цвета - {default} | {green} | {lightgreen} | {red} | {blue} | {teamcolor}
К тому же, цвета {lightgreen}, {red}, {blue} и/или {teamcolor} нельзя использовать одновременно. Если только вы в одном блоке сообщений не разделяете PrintToChat на несколько.
С приходом нового клиента игры, благодаря его модификации, стало возможным использование других кастомных библиотек с поддержкой hex-кодов.
Например, MoreColors с его многообразием уже подготовленных макросов html-цветов. Прямо, как в CS:S OB / v91+ или, например, Team Fortress 2.
Лично я, когда узнал об этом, сначала сильно обрадовался, а после до меня дошло, что если я покрашу что-то в чате с использованием той же библиотеки MoreColors, игроки, которые продолжают играть со старого оригинального клиента, будут вместо цветов видеть их коды:
(Не "Hello, World!", а "ff3030Hellofba026, ff3030Worldfba026!"; Будет подставлен стандартный цвет - {default}).
Я, конечно, расстроился, но понял, что есть ведь API. Можно определять, кто с какого клиента играет, и подставлять разные библиотеки.
Разработчик модификации клиента специально для таких целей отредактировал библиотеку MultiColors, которая содержит в себе и Colors, и MoreColors.
Рассмотрим на примере, как можно с этим работать:
C-подобный:
#pragma semicolon 1
#pragma newdecls required
#include <clientmod> // Подключим библиотеку ClientMod API для определения клиента игрока
#include <clientmod/multicolors> // Подключим саму библиотеку с цветами
public void OnPluginStart()
{
RegConsoleCmd("clientmod_colors", TestColors);
}
public Action TestColors(int client, int args)
{
// MoreColors. Если команду набрал ClientMod-игрок, он увидит именно это:
MC_PrintToChat(client, "{crimson}crimson {azure}azure {lime}lime {gold}gold {black}black");
// Colors. А если команду набрал игрок со старым клиентом, он увидит это:
C_PrintToChat(client, "{green}green {default}default {red}red");
return Plugin_Handled;
}


Придётся использовать один файл переводов для обоих клиентов. Мы просто пихнём им разные перевод-фразы:
Плагин:
#pragma semicolon 1
#pragma newdecls required
#include <clientmod> // Подключим библиотеку ClientMod API для определения клиента игрока
#include <clientmod/multicolors> // Подключим саму библиотеку с цветами
public void OnPluginStart()
{
LoadTranslations("TestColors.phrases");
RegConsoleCmd("clientmod_colors", TestColors);
}
public Action TestColors(int client, int args)
{
// MoreColors. Если команду набрал ClientMod-игрок, он увидит именно это:
MC_PrintToChat(client, "%t" "ForClientMod");
// Colors. А если команду набрал игрок со старым клиентом, он увидит это:
C_PrintToChat(client, "%t" "ForOld");
return Plugin_Handled;
}
Файл переводов:
"Phrases"
{
"ForClientMod"
{
"ru" "{crimson}crimson {azure}azure {lime}lime {gold}gold {black}black"
"en" "{crimson}crimson {azure}azure {lime}lime {gold}gold {black}black"
}
"ForOld"
{
"ru" "{green}green {default}default {red}red"
"en" "{green}green {default}default {red}red"
}
}
Если у вас есть знания конкретно по этой теме, идеи, наработки, желание исправить мои возможные ошибки, пишите сюда, обсудим.
Статья в некотором смысле дилетантская. Я не стал в пяти томах расписывать, что, как и почему. Чего-то я не знаю, что-то посчитал лишним/необязательным. Главное, что есть самая необходимая информация.
Последнее редактирование: