Перейти к содержанию
Опубликовано

Нужен плагин для выделения администратора в чате, что бы когда он писал, показывало что это администратор или чтобы его цвет ника или цвет текста отличался от других.

В оригинале вот так name:hi (цвета подобрал максимально похожими на оригинал как в игре)

Для админа нужно вот так.

Например.
(admin) name:hi

name:hi

name:hi 

name:hi

Цвета выбраны чисто для примера, чтобы поняли о чем речь.

Может кто-то знает такой или использует что-то на подобии такого.

Изменено пользователем Райан
Возможное решение с командным чатом. (смотреть историю редактирования)

Рекомендуемые сообщения

Опубликовано
  • Администраторы

А разве hextags работать не будет? Он же вроде поддерживает все Source игры. И теги настраиваются. И цвета.

chat processor для него нужен обязательно.

Изменено пользователем Ryancoolround
Удалил битые файлы (смотреть историю редактирования)

Опубликовано
  • Автор
В 07.02.2022 в 06:14, Райан сказал:

А разве hextags работать не будет? Он же вроде поддерживает все Source игры. И теги настраиваются. И цвета.

chat processor для него нужен обязательно.

Вы тестировали его на linux сервере?

У меня он не заработал, на windows сервере работает отлично.

Может неправильно был прописан администратор, можете написать пример?

Изменено пользователем Ryancoolround
Удалил битые файлы (смотреть историю редактирования)

Опубликовано
  • Администраторы
36 минут назад, E.V.A сказал:

Может неправильно был прописан администратор, можете написать пример?

Да пример то вот:

"HexTags"
{
   "STEAM_0:0:33212234"
   {
    "ChatTag"	"{red}[LINUX]"
	"ChatColor" "{random}"
   }
}

 

37 минут назад, E.V.A сказал:

Вы тестировали его на linux сервере?

Только верно, на Linux он не сработал (Хотя может просто в L4D2 не сработал), хотя в листе плагинов все нормально и ошибок в логах нет.

Затем у меня не сработал и Simple Chat Colors (Redux) - https://forums.alliedmods.net/showthread.php?t=167814

За цвета я уже молчу.

В общем я сейчас много систем чатов на AM пролистал, везде пишут что в l4d2 не работают они.

Единственное что я не попробовал сейчас это скачать випку от Рико и модули на цветной чат и префикс.

Опубликовано
  • Автор
В 07.02.2022 в 07:24, Райан сказал:

Да пример то вот:

"HexTags"
{
   "STEAM_0:0:33212234"
   {
    "ChatTag"	"{red}[LINUX]"
	"ChatColor" "{random}"
   }
}

 

Только верно, на Linux он не сработал (Хотя может просто в L4D2 не сработал), хотя в листе плагинов все нормально и ошибок в логах нет.

Затем у меня не сработал и Simple Chat Colors (Redux) - https://forums.alliedmods.net/showthread.php?t=167814

За цвета я уже молчу.

В общем я сейчас много систем чатов на AM пролистал, везде пишут что в l4d2 не работают они.

Единственное что я не попробовал сейчас это скачать випку от Рико и модули на цветной чат и префикс.

Тогда всё верно, так и был он прописан.

Проблема именно в linux версии для left 4 dead 2

По пробуйте вилку от рико и модули, напишите о результатах.

Или скиньте мне я проверю.

Блин, жаль что сервера не продают на windows, это бы избавило от кучи проблем, где не купи везде linux, а выделенный нет смысла покупать, это дорого и невыгодно лично для меня.

В 07.02.2022 в 08:19, Райан сказал:

Префиксы и цвета в L4D2 даже в випке отказываются корректно работать.

Вроде как бы и цвет меняется, если следить по чату. Но затем, когда ты отправляешь свой текст... Получаешь дефолт.

Кстати... Вот этот плагин рекламы:

Работает на #include <multicolors> (Я его прикрепил). Может что то получится найти (Приеду поищу). Надо съездить на работу.

Там можно их как-то настроить, просто те кто их настраивал не хотят говорить об этом, а те кто могут это сделать пишут что это типо читерский метод и они не будут его использовать, я сейчас поищу плагин где-то был , там в чате работал и красный цвет и синий.

В 07.02.2022 в 08:19, Райан сказал:

Кстати... Вот этот плагин рекламы:

Работает на #include <multicolors> (Я его прикрепил). Может что то получится найти (Приеду поищу). Надо съездить на работу.

Жду результатов 

Опубликовано
  • Администраторы

Действительно, через multicolors я смог более или менее раскрасить чат.

Я прикрепил его, он нужен, если компилировать плагин. Если использовать готовый, то не нужен.

Осталось прикрепить префикс перед ником. Но это уже хоть что то.

Так же стоит понять какие цвета поддерживаются все же в L4D2, изначально говорили так:

Tags: {default}, {green}, {lightgreen}, {red}, {blue}, {olive}.

Regular colors: default, green (yellow in L4D), olive.
Team colors: lightgreen, red, blue.

Кое как сделал простой плагин. Наверно ошибок полно, ведь я в этом деле полный нуб. Я думал что меня учить будут, а пришлось самому разбираться. ?

В общем, все делается через исходник, поэтому multicolors нужно положить в /addons/sourcemod/scripting для последующих компиляций.

Префикс и цвета настраиваются в исходнике на 44 строке:

CPrintToChatAll("%s{olive}[ADMIN] {green}%s: {olive}%s", Tag, Name, Msg[1]);

Для упоминания: @E.V.A

 

Опубликовано
  • Автор
В 07.02.2022 в 15:40, Райан сказал:

Действительно, через multicolors я смог более или менее раскрасить чат.

Я прикрепил его, он нужен, если компилировать плагин. Если использовать готовый, то не нужен.

Осталось прикрепить префикс перед ником. Но это уже хоть что то.

Так же стоит понять какие цвета поддерживаются все же в L4D2, изначально говорили так:

Tags: {default}, {green}, {lightgreen}, {red}, {blue}, {olive}.

Regular colors: default, green (yellow in L4D), olive.
Team colors: lightgreen, red, blue.

Цвета поддерживает те что вы написали, осталось понять как заставить красный и синий работать в чате.

В 07.02.2022 в 16:35, Райан сказал:

Кое как сделал простой плагин. Наверно ошибок полно, ведь я в этом деле полный нуб. Я думал что меня учить будут, а пришлось самому разбираться. ?

В общем, все делается через исходник, поэтому multicolors нужно положить в /addons/sourcemod/scripting для последующих компиляций.

Префикс и цвета настраиваются в исходнике на 44 строке:

CPrintToChatAll("%s{olive}[ADMIN] {green}%s: {olive}%s", Tag, Name, Msg[1]);

Для упоминания: @E.V.A

Если вот так, тут используется другой файл, это типо плагин рекламы, синий в чате заработал, а вот красный не хочет.

Спойлер
#include <sourcemod>
#include <colors>

//NOTE this is my first plugin at sourcepawn!

ConVar TIME;
Handle FILE = INVALID_HANDLE;
Handle TIMER = INVALID_HANDLE;


public Plugin myinfo = {
 name = "[L4D2] Color",
 author = "X",
 description = "Displays colored publicity chat",
 version = "X",
 url = " ><> "
};

public void OnPluginStart() {
 char PATH[24];
 GetGameFolderName(PATH, sizeof(PATH));
 if (!StrEqual(PATH, "left4dead2", false)) SetFailState("Sorry my plugin was made for L4D2");
 else 

 TIME = CreateConVar("l4d2_color", "120", "How long must wait to display each publicity (default 2 min = 120 seconds)");
 TIME.AddChangeHook(OnCvarChange);
 FILE = CreateKeyValues("publicity");

 char FilePath[256];
 BuildPath(Path_SM, FilePath, sizeof(FilePath), "data/l4d2_publicity.txt");
 FileToKeyValues(FILE, FilePath);

}


public void OnCvarChange(ConVar convar, char[] oldValue, char[] newValue)
{
    if (convar == TIME)
    {
        KillTimer(TIMER);
        TIMER = CreateTimer(1.0 * GetConVarInt(TIME), DisplayPublicity,_, TIMER_REPEAT);
    }
}

public void OnMapStart(){


TIMER = CreateTimer(1.0 * GetConVarInt(TIME), DisplayPublicity,_, TIMER_REPEAT);

}

public void OnMapEnd(){

KillTimer(TIMER);

}


void GoToNextKeyOrStartOver()
{
    if (!KvGotoNextKey(FILE))
    {
        KvRewind(FILE);
        KvGotoFirstSubKey(FILE);
    }
}


public Action DisplayPublicity(Handle timer) {

 char publicity[256];
 KvGetString(FILE, "eva", publicity, sizeof(publicity));
 CPrintToChatAll(publicity);
 GoToNextKeyOrStartOver();
 
}

Изменено пользователем Ryancoolround
Удалил битые файлы (смотреть историю редактирования)

Опубликовано
  • Администраторы

Я вообще сидел и смотрел цвета, потратил где то час. В общем, в этой игре все напутано. Сделал такие комментарии:

// Примеры цветов 
// {red} - Как ни странно синий
// {darkred} {lightgreen} {lime} {lightred} {grey} {yellow} {orange} {bluegrey} {lightblue} {darkblue} {grey2} {orchid} {lightred2} - НЕ РАБОТАЮТ
// {green} {blue} - Оливковый
// {olive} - Зеленый
// {purple} - Светло зеленый

Скриншоты следующие:

В 07.02.2022 в 19:47, E.V.A сказал:

а вот красный не хочет.

По поводу красного... Может поможет:

Цитата
  • Для правильной работы красного и синего цветов в каждой команде должен быть хотя бы один игрок. В противном случае эти теги будут заменены на зеленый.

Оказывается я про это написал когда делал перевод оригинального поста на русский язык, здесь.

Опубликовано
  • Автор
В 08.02.2022 в 00:03, Райан сказал:

Я вообще сидел и смотрел цвета, потратил где то час. В общем, в этой игре все напутано. Сделал такие комментарии:

// Примеры цветов 
// {red} - Как ни странно синий
// {darkred} {lightgreen} {lime} {lightred} {grey} {yellow} {orange} {bluegrey} {lightblue} {darkblue} {grey2} {orchid} {lightred2} - НЕ РАБОТАЮТ
// {green} {blue} - Оливковый
// {olive} - Зеленый
// {purple} - Светло зеленый

Скриншоты следующие:

С тем файлом(colors.ini) что был от меня отправлен вам ранее, цвет чата работает.

В 08.02.2022 в 00:37, Райан сказал:

По поводу красного... Может поможет:

Оказывается я про это написал когда делал перевод оригинального поста на русский язык, здесь.

Как то его можно настроить, на сервер в режиме кампании было что-то типо информации о убитых.

В 07.02.2022 в 16:35, Райан сказал:

Кое как сделал простой плагин. Наверно ошибок полно, ведь я в этом деле полный нуб. Я думал что меня учить будут, а пришлось самому разбираться. ?

В общем, все делается через исходник, поэтому multicolors нужно положить в /addons/sourcemod/scripting для последующих компиляций.

Префикс и цвета настраиваются в исходнике на 44 строке:

CPrintToChatAll("%s{olive}[ADMIN] {green}%s: {olive}%s", Tag, Name, Msg[1]);

Для упоминания: @E.V.A

Эхх плагин глючно работает, админ то одного цвета то стандартного, чтобы это проверить нужен хотя бы еще один человек в игре

Нашел оригинал от автора, там всё работает отлично, проблема в префиксе админ.

Если писать команде своей а не в общий чат, то цвет не работает.
Кто знает решение? 

Опубликовано
  • Администраторы
В 07.02.2022 в 16:35, Райан сказал:
CPrintToChatAll("%s{olive}[ADMIN] {green}%s: {olive}%s", Tag, Name, Msg[1]);

А попробуй добавить еще один массив подобный, но в нем вместо CPrintToChatAll указать CPrintToChatTeam (Не уверен что сработает, но блин такие строки нашел?

void CPrintToChat(int client, const char[] message, any ...)
void CPrintToChatAll(const char[] message, any ...)
void CPrintToChatEx(int client, int author, const char[] message, any ...)
void CPrintToChatAllEx(int author, const char[] message, any ...)
void CPrintToChatTeam(int team, const char[] message, any ...)
void CPrintToChatTeamEx(int team, int author, const char[] message, any ...)
void CPrintToChatAdmins(int flags, const char[] message, any ...)

 

Опубликовано
  • Автор
18 минут назад, Райан сказал:

А попробуй добавить еще один массив подобный, но в нем вместо CPrintToChatAll указать CPrintToChatTeam (Не уверен что сработает, но блин такие строки нашел?

void CPrintToChat(int client, const char[] message, any ...)
void CPrintToChatAll(const char[] message, any ...)
void CPrintToChatEx(int client, int author, const char[] message, any ...)
void CPrintToChatAllEx(int author, const char[] message, any ...)
void CPrintToChatTeam(int team, const char[] message, any ...)
void CPrintToChatTeamEx(int team, int author, const char[] message, any ...)
void CPrintToChatAdmins(int flags, const char[] message, any ...)

 

С цветом проблема решена, теперь проблема в том что когда пишешь команде, сообщение идёт в общий чат.

Опубликовано
  • Администраторы
В 10.02.2022 в 08:48, Райан сказал:

но в нем вместо CPrintToChatAll указать CPrintToChatTeam (Не уверен что сработает, но блин такие строки нашел?

Прав был в том, что не уверен. Это не сработало.

А вот так не пойдет? Я просто добавил такой массив:

RegConsoleCmd("say_team", SayTeamHook);

--

public Action:SayTeamHook(client, Args)
{
	new AdminId:AdminID = GetUserAdmin(client);
	if (AdminID == INVALID_ADMIN_ID)
		return Plugin_Continue;
	
	decl String:Name[MAX_NAME_LENGTH];
	decl String:Msg[256];
	GetClientName(client, Name, sizeof(Name));
	GetCmdArgString(Msg, sizeof(Msg));
	Msg[strlen(Msg)-1] = '\0';
	CPrintToChatAll("%s{olive}[ADMIN] {green}%s: {olive}%s", Tag, Name, Msg[1]);
	
	return Plugin_Handled;
} 

Короче все то же самое, но дублируется в Say_team.

Изменено пользователем Ryancoolround
Удалил битые файлы (смотреть историю редактирования)

Опубликовано
  • Автор
В 10.02.2022 в 11:39, Райан сказал:

Прав был в том, что не уверен. Это не сработало.

А вот так не пойдет? Я просто добавил такой массив:

RegConsoleCmd("say_team", SayTeamHook);

--

public Action:SayTeamHook(client, Args)
{
	new AdminId:AdminID = GetUserAdmin(client);
	if (AdminID == INVALID_ADMIN_ID)
		return Plugin_Continue;
	
	decl String:Name[MAX_NAME_LENGTH];
	decl String:Msg[256];
	GetClientName(client, Name, sizeof(Name));
	GetCmdArgString(Msg, sizeof(Msg));
	Msg[strlen(Msg)-1] = '\0';
	CPrintToChatAll("%s{olive}[ADMIN] {green}%s: {olive}%s", Tag, Name, Msg[1]);
	
	return Plugin_Handled;
} 

Короче все то же самое, но дублируется в Say_team.

Буду тестировать, я уже несколько раз его по новой писал, устал уже.

В 10.02.2022 в 11:39, Райан сказал:

CPrintToChatTeam

Самое интересное что в цветах этот пункт есть, но почему-то при комплектации плагина выдаёт ошибку error 035: argument type mismatch (argument 1)

Это тоже не работает, цвета работают но все также командный чат не работает.

  • 2 года спустя...
Опубликовано
  • Администраторы

Кажется, мы приближаемся к решению проблемы. Давайте попробуем еще один подход. Я обратил внимание, что при использовании команды say_team сообщение всё равно попадает в общий чат. Возможно, это связано с тем, что плагин не может определить командный чат для отправки сообщения.

Для решения этой проблемы давайте попробуем использовать другой метод. Мы можем напрямую отправлять сообщения в командный чат с помощью функции CPrintToChatTeam, как я уже упоминал ранее. Однако, нам нужно будет правильно определить команду, чтобы сообщение отправлялось именно в командный чат.

Давайте попробуем следующий подход:

public Action:SayTeamHook(client, Args)
{
    new AdminId:AdminID = GetUserAdmin(client);
    if (AdminID == INVALID_ADMIN_ID)
        return Plugin_Continue;
    
    decl String:Name[MAX_NAME_LENGTH];
    decl String:Msg[256];
    GetClientName(client, Name, sizeof(Name));
    GetCmdArgString(Msg, sizeof(Msg));
    Msg[strlen(Msg)-1] = '\0';

    if (GetClientTeam(client) == 2) // Проверяем, находится ли игрок в команде зараженных
    {
        CPrintToChatTeam(2, "%s{olive}[ADMIN] {green}%s: {olive}%s", Tag, Name, Msg[1]); // Отправляем сообщение в командный чат зараженных
    }
    else if (GetClientTeam(client) == 3) // Проверяем, находится ли игрок в команде выживших
    {
        CPrintToChatTeam(3, "%s{olive}[ADMIN] {green}%s: {olive}%s", Tag, Name, Msg[1]); // Отправляем сообщение в командный чат выживших
    }
    else
    {
        CPrintToChatAll("%s{olive}[ADMIN] {green}%s: {olive}%s", Tag, Name, Msg[1]); // Если игрок не в команде, отправляем сообщение в общий чат
    }
    
    return Plugin_Handled;
}

Этот код будет проверять, в какой команде находится игрок, и отправлять сообщение в соответствующий командный чат. Если игрок не находится в команде, то сообщение будет отправлено в общий чат.

Попробуй этот код и дай мне знать, как он работает. Если возникнут какие-либо проблемы, мы можем продолжить искать решение.

Для публикации сообщений создайте учётную запись или авторизуйтесь

Похожий контент

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу