Всё, работает. Но если игрок админ пишет в 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 подставить в этот код, но куда?
TolikCorp, Да, нужно каждому классу в моём моде дать префикс. С tab манипулировать нельзя прийдёться через чат давать название классам. + можно без лишних настроек добавить админа и игрокам тег.
Вопрос, актуален. Подскажите как исправить? Что я пытался намутить: 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, но не получилось.
Оффтоп Прям в точку. Вернее, в запятую. Я могу тебе написать вариант без но он мне не нравится, ненадёжный (небезопасный), так сказать. И посылается, кому даже не надо. А для командного чата ещё и цикл каждый раз (может догадался, как делается). А в твоём - я такого события ещё не видел, не в курсе.
Для общего чата, не учитывая наблюдателей: Спойлер 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;}
Конечно. Можно добавить AddCommandListener(Say, "say_team");, но такие сообщения будут снова видны всем. Для команды надо дополнительно массив с циклом дописывать, чтобы верно отсылало. А так, это очень удобное средство окраски и изменения текста игрока. Можно красить обычный текст после ника (только 1 любой цвет), а также сообщение, когда убили (и заменить "*УБИТ*" на своё).