SourceMod [CS:S v34] [ClientMod] Окрашивание чата в зависимости от клиента

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;
}
Чат ClientMod-игрока - cm_colors.jpg, чат обычного клиента - old_colors.jpg
Придётся использовать один файл переводов для обоих клиентов. Мы просто пихнём им разные перевод-фразы:
Плагин:
#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"
    }
}
Для того, чтобы это делать, на игровом сервере должен быть установлен Ядро плагина - [ClientMod] API


Если у вас есть знания конкретно по этой теме, идеи, наработки, желание исправить мои возможные ошибки, пишите сюда, обсудим.
Статья в некотором смысле дилетантская. Я не стал в пяти томах расписывать, что, как и почему. Чего-то я не знаю, что-то посчитал лишним/необязательным. Главное, что есть самая необходимая информация.
 
Последнее редактирование:

vertigo

Участник
Сообщения
32
Реакции
29
Nice Post !!
For those, who wonder how to distinguish between old and clientmod clients: Use function CM_IsClientModUser().
C++:
if(CM_IsClientModUser(client))
{
    MC_PrintToChat(client, "Message");
}
else
{
    C_PrintToChat(client, "Message");
}
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
Nice Post !!
For those, who wonder how to distinguish between old and clientmod clients: Use function CM_IsClientModUser().
C++:
if(CM_IsClientModUser(client))
{
    MC_PrintToChat(client, "Message");
}
else
{
    C_PrintToChat(client, "Message");
}
No no no. MC_PrintToChat and C_PrintToChat themselves determine who is from which client.
 

vertigo

Участник
Сообщения
32
Реакции
29
I see, so we have to use both the functions together to support both clients.
 

Damirovich

Участник
Сообщения
60
Реакции
4
Помогите в переводах не выводиться ник при сбросе счета на КМ
а на ОЛД все норм
 

Вложения

  • Resetscore.sp
    3 КБ · Просмотры: 36
  • resetscore.phrases.txt
    1.4 КБ · Просмотры: 23

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
Помогите в переводах не выводиться ник при сбросе счета на КМ
а на ОЛД все норм
Ни у той, ни у другой фраз нет форматирования в переводах для вывода ника.

Вообще, для себя писал как-то, можешь взять его
 

Вложения

  • [ClientMod] ResetScore.zip
    19.6 КБ · Просмотры: 108

Damirovich

Участник
Сообщения
60
Реакции
4
Ни у той, ни у другой фраз нет форматирования в переводах для вывода ника.

Вообще, для себя писал как-то, можешь взять его
А сможешь обьяснить в чем там подвох?
Ну так примером? Хочу знать
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
А сможешь обьяснить в чем там подвох?
Ну так примером? Хочу знать
Какой подвох? Файл переводов испорчен, либо не дописан. К теме это абсолютно никак не используется, посыл в теме используется правильно.
Сообщения автоматически склеены:

@Damirovich, держи, поправил немножк, а то совсем больно смотреть было
 

Вложения

  • Resetscore.sp
    3 КБ · Просмотры: 44
  • resetscore.phrases.txt
    1.7 КБ · Просмотры: 32
Последнее редактирование:

Damirovich

Участник
Сообщения
60
Реакции
4
Ни у той, ни у другой фраз нет форматирования в переводах для вывода ника.

Вообще, для себя писал как-то, можешь взять его
Cможешь подсказать а как с этим плагином быть?
 

Вложения

  • MostDeadlyPlayer_v1.0.0 (1).sp
    2.1 КБ · Просмотры: 19

Kefir4ik

Участник
Сообщения
113
Реакции
9
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;
}
Чат ClientMod-игрока - Посмотреть вложение 75847, чат обычного клиента - Посмотреть вложение 75846
Придётся использовать один файл переводов для обоих клиентов. Мы просто пихнём им разные перевод-фразы:
Плагин:
#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"
    }
}
Для того, чтобы это делать, на игровом сервере должен быть установлен Ядро плагина - [ClientMod] API


Если у вас есть знания конкретно по этой теме, идеи, наработки, желание исправить мои возможные ошибки, пишите сюда, обсудим.
Статья в некотором смысле дилетантская. Я не стал в пяти томах расписывать, что, как и почему. Чего-то я не знаю, что-то посчитал лишним/необязательным. Главное, что есть самая необходимая информация.
привет подскажи где скачать ?
 

Kefir4ik

Участник
Сообщения
113
Реакции
9
Последнее редактирование:
Сверху Снизу