diller110
Добрая душа
- Сообщения
- 353
- Реакции
- 278
По просьбе: Есть ли замена HudMsg?
Вступление:
В Source движке есть несколько способов вывода информации на экран, но один из способов CCSUsrMsg_HudMsg, случайно или намеренно сломан в CSGO.
На место данного способа пришел более технологичный вывод важной информации, однако рассчитан он больше на локальное использование, что все равнопочти не мешает использовать на серверах.
Сразу примеры:
Оффтоп
Реализация:
Вы можете скачать только include с функцией, или архив с плагином-примером. (только команда с чтением 11 аргументов, и всё.)
Итак 1 единственная функция для вывода:
11 аргументов, 9 из которых можно опустить, не пугайтесь, функция может выглядеть и так:
Канал для вывода - уникальная строка, позволяющая группировать подобные сообщения, чтобы при появлении подобного сообщения оно заменяло существующее.
Рекомендую для каждого плагина использовать уникальные значения вроде: "hudtest-type1", "hudtest-type2".
Если все каналы(строчки) разные, то сообщения не будут заменяться, вместо этого они будут добавляться вниз, и тут важно не переборщить, сообщения центрируются в уходят вниз
Вот небольшая шпаргалка по выбору этих аргументов:
Если строка не указана напишет "No caption specified", поэтому лучше указать пробел.
2
3
8
9
15
Только через запятую, 3 числа от 0 до 255, если не подходит по формату, выведет белый.
Флаги, заложенные в игру эффекты, их можно совмещать.
Например статичное мерцание будет 0+16=16
Или хардтряска 128+4=132
Оффтоп
Ограничения:
Вступление:
В Source движке есть несколько способов вывода информации на экран, но один из способов CCSUsrMsg_HudMsg, случайно или намеренно сломан в CSGO.
На место данного способа пришел более технологичный вывод важной информации, однако рассчитан он больше на локальное использование, что все равно
Сразу примеры:
Внимание трафик, будет много гифок с примерами
todo: Сделать побольше примеров, например с прикреплением надписи к игроку или энтити. Отображение за стеной, расстояние, эффекты.
Реализация:
Вы можете скачать только include с функцией, или архив с плагином-примером. (только команда с чтением 11 аргументов, и всё.)
Итак 1 единственная функция для вывода:
C-подобный:
PrintHudText(char[] channel, int fromclient, int toclient, char[] message,
int timeout, int icon_type, char[] color, float offset,
float range, int flags, char[] bind, bool offscreen, bool force);
C-подобный:
PrintHudText(_, 0, 0, "Добро пожаловать"); // Выведет всем живым игрокам "Добро пожаловать" по центру
char[] channel = HUDChannel_Plugin1
Канал для вывода - уникальная строка, позволяющая группировать подобные сообщения, чтобы при появлении подобного сообщения оно заменяло существующее.
Рекомендую для каждого плагина использовать уникальные значения вроде: "hudtest-type1", "hudtest-type2".
Если все каналы(строчки) разные, то сообщения не будут заменяться, вместо этого они будут добавляться вниз, и тут важно не переборщить, сообщения центрируются в уходят вниз
ВАЖНО: Каналы не привязаны к одной функции или вашему плагину, они существуют во всей игре. Очень важно, если вы выводите похожую, но разную информацию для множества игроков, выделять для каждого каналы, иначе сообщение покажется только у того, у кого оно отобразится последним.
Например: "pluginname-type01-userid", конечно желательно покороче: "pn-t1-01", "pn-t1-02"...
Отправитель сообщения и получатель, 0 - сервер, 1+ - любая сущность.int fromclient = 0, int toclient = 0
Вот небольшая шпаргалка по выбору этих аргументов:
- Над клиентом для всех: from = client, to = client, range = 0.0 (см. ниже)
- Только клиенту в центре: from = client, to = client, range = 0.01
- Всем: from = 0, to = 0, range = 0.0
Самое простое! Строка с выводимым текстом. Шрифт как видно из скриншотов крупный, поэтому ограничивайтесь 50-70 символами, делите сообщение на строки (см. channel).char[] message = ""
Если строка не указана напишет "No caption specified", поэтому лучше указать пробел.
Тоже просто, время отображения, после окончания сообщение исчезнет, канал освободится. Если указать 0 с тем же каналом, можно стереть существующее сообщение.int timeout = 5

Если указать одно из действительных значение слева от текста отобразится иконка, иначе просто останется промежуток перед сообщением. В ресурсах игры заложено около 20 иконок, почему-то доступно лишь несколько:int icon_type = 4
C-подобный:
HUDIcon_None = 1,
HUDIcon_BlackTip = 2,
HUDIcon_WhiteTip = 3,
HUDIcon_Arm = 8,
HUDIcon_Door = 9,
HUDIcon_Fire = 15,
HUDIcon_Bind = 17
3
8
9

15

17 тип иконок особый. Используя данные из аргумента bind, отображаются иконки соответствующих кнопок, например +use обычно клавиша E, +jump пробел...
Совершенно случайно открыл, что если указывать последовательности биндов через ; то и иконки последовательно будут отображаться, дефолтное значение например отображает последовательность клавиш A-I-R
RGB цвет, прозрачность не поддерживает, только red, green, blue.char[] color = "255,255,255"
Только через запятую, 3 числа от 0 до 255, если не подходит по формату, выведет белый.
C-подобный:
#define HUDColor_White "255,255,255"
#define HUDColor_Black "0,0,0"
#define HUDColor_Red "255,0,0"
#define HUDColor_Green "0,255,0"
#define HUDColor_Blue "0,0,255"
#define HUDColor_Gray "128,128,128"
#define HUDColor_Aircraft "33,156,197"
#define HUDColor_Yellow "221,221,0"
#define HUDColor_DarkRed "187,0,0"
#define HUDColor_DarkGreen "0,128,0"
#define HUDColor_DarkBlue "0,128,255"
#define HUDColor_Purple "127,3,193"
#define HUDColor_Orange "255,27,20"




float offset = 0.0
float range = 0.0
int flags = 1
C-подобный:
enum // HUD Effects
{
HUDEffect_Static = 0, HUDEffect_Usual = 1,
HUDEffect_Faster = 2, HUDEffect_Slower = 3,
HUDEffect_Fastest = 4, HUDEffect_Blink = 8,
HUDEffect_TurboBlink = 16, HUDEffect_AnotherBlink = 32,
HUDEffect_Shake = 64, HUDEffect_TurboShake = 128
};
Например статичное мерцание будет 0+16=16
Или хардтряска 128+4=132
Оффтоп
Не силен в битовых операциях, если знатоки подскажут как организовать совмещение эффектов с помощью битов, будет прекрасно.






(см. icon_type)char[] bind = "+moveleft;show_loadout_toggle;+reload;"
Ограничения:
- Не отображается мертвым или спектаторам
- Не отображается если игрок находится в полёте или прыжке (не на земле)
- Не отображается если у игрока в настройках отключены сообщения инструктора, или квар gameinstructor_enable 0, можно отловить значение и предупредить игрока.
Вложения
Последнее редактирование: