Упрощённый custome-chat colors

pokypka20

Участник
Сообщения
244
Реакции
31
Всё, работает. Но если игрок админ пишет в say_team то префикс не окрашивается что не так?

PHP:
public Action:OnChatMessage(&author, Handle:recipients, String:name[], String:message[])
{
	if(GetUserFlagBits(author) & ADMFLAG_RESERVATION)
    {
        // MAXLENGTH_MESSAGE = maximum characters in a chat message, including name. Subtract the characters in the name, and 5 to account for the colon, spaces, and null terminator
        new MaxMessageLength = MAXLENGTH_MESSAGE - strlen(name) - 5;
        Format(name, MAXLENGTH_NAME, "\x01[\x04VIP\x01] \x03%s", name);//Tag+Name color
        Format(message, MaxMessageLength, "\x04%s", message);
        return Plugin_Changed;
    }
	return Plugin_Continue; 
}

Используется <scp>
PHP:
#define MAXLENGTH_INPUT			128 	// Inclues \0 and is the size of the chat input box.
#define MAXLENGTH_NAME				64		// This is backwords math to get compability.  Sourcemod has it set at 32, but there is room for more.
#define MAXLENGTH_MESSAGE		256		// This is based upon the SDK and the length of the entire message, including tags, name, : etc.

#define CHATFLAGS_INVALID		0
#define CHATFLAGS_ALL				(1<<0)
#define CHATFLAGS_TEAM				(1<<1)
#define CHATFLAGS_SPEC				(1<<2)
#define CHATFLAGS_DEAD				(1<<3)

Как я понял нужно CHATFLAGS_ALL подставить в этот код, но куда?
 

pokypka20

Участник
Сообщения
244
Реакции
31
TolikCorp, Да, нужно каждому классу в моём моде дать префикс. С tab манипулировать нельзя прийдёться через чат давать название классам. + можно без лишних настроек добавить админа и игрокам тег.
 
Последнее редактирование:

pokypka20

Участник
Сообщения
244
Реакции
31
Вопрос, актуален. Подскажите как исправить?

image.png


Что я пытался намутить:
PHP:
	if(GetUserFlagBits(author) & ADMFLAG_RESERVATION)
    {
        // MAXLENGTH_MESSAGE = maximum characters in a chat message, including name. Subtract the characters in the name, and 5 to account for the colon, spaces, and null terminator
        new MaxMessageLength = MAXLENGTH_MESSAGE - strlen(name) - 5;
		if (author, name, MAXLENGTH_NAME)
		{
        Format(name, MAXLENGTH_NAME, "\x01[\x04VIP\x01] \x03%s", name);//Tag+Name color
        Format(message, MaxMessageLength, "\x04%s", message);
		}
		else 
		{
		Format(name, MAXLENGTH_NAME, "\x01[\x04VIP\x01] \x03%s", name);//Tag+Name color
        Format(message, MaxMessageLength, "\x04%s", message);
		}
        return Plugin_Changed;
    }

Как то так видел в custome chat colors, но не получилось.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Вопрос, актуален.
Оффтоп
Я могу тебе написать вариант без
но он мне не нравится, ненадёжный (небезопасный), так сказать. И посылается, кому даже не надо. А для командного чата ещё и цикл каждый раз (может догадался, как делается).
А в твоём - я такого события ещё не видел, не в курсе.
 

pokypka20

Участник
Сообщения
244
Реакции
31
Оффтоп
Я могу тебе написать вариант без

но он мне не нравится, ненадёжный (небезопасный), так сказать. И посылается, кому даже не надо. А для командного чата ещё и цикл каждый раз (может догадался, как делается).
А в твоём - я такого события ещё не видел, не в курсе.

Напиши пожалуйста свой пример без scp. Пытался разбирать custome chat, ничего не получилось.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Для общего чата, не учитывая наблюдателей:
PHP:
public OnPluginStart() AddCommandListener(Say, "say");

public Action:Say(client, String:command[], args)
{
	if (IsClientInGame(client) && GetUserFlagBits(client) & ADMFLAG_RESERVATION)
	{
		new team = GetClientTeam(client);
		if (team > 1)
		{
			decl String:text[192];
			GetCmdArg(1, text, sizeof(text));
			PrintToChatAll("\x01%s[\x04VIP\x01] \x07%06X%N\x01 :  %s", IsPlayerAlive(client) ? "":"*УБИТ* ", team < 3 ? 0xFF4040:0x99CCFF, client, text);
			return Plugin_Handled;
		}
	}
	return Plugin_Continue;
}
 

pokypka20

Участник
Сообщения
244
Реакции
31
Для общего чата, не учитывая наблюдателей:
PHP:
public OnPluginStart() AddCommandListener(Say, "say");

public Action:All(client, String:command[], args)
{
	if (IsClientInGame(client) && GetUserFlagBits(client) & ADMFLAG_RESERVATION)
	{
		new team = GetClientTeam(client);
		if (team > 1)
		{
			decl String:text[192];
			GetCmdArg(1, text, sizeof(text));
			PrintToChatAll("\x01%s[\x04VIP\x01]\x07%06X%N\x01 :  %s", IsPlayerAlive(client) ? "":"*УБИТ* ", team < 3 ? 0xFF4040:0x99CCFF, client, text);
			return Plugin_Handled;
		}
	}
	return Plugin_Continue;
}

Если он своей команде напишет то текст будет дефолтный?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
команде напишет то текст будет дефолтный?
Конечно. Можно добавить AddCommandListener(Say, "say_team");, но такие сообщения будут снова видны всем. Для команды надо дополнительно массив с циклом дописывать, чтобы верно отсылало.
А так, это очень удобное средство окраски и изменения текста игрока. Можно красить обычный текст после ника (только 1 любой цвет), а также сообщение, когда убили (и заменить "*УБИТ*" на своё).
 
Сверху Снизу