Работа с HUD сообщениями

Сообщения
2,288
Реакции
1,740
Помог
31 раз(а)
Источник: amxxmodx.ru

Что бы вывести игроку HUD сообщение, необходимо 2 функции set_hudmessage и show_hudmessage.
Hud Сообщения не только на много красивее обычного чата или сообщения по центру экрана, но и имеют ряд преимуществ.
Их можно расположить в любой части экрана, задать любой цвет или эффект появления на экране.

Инфо из amxmodx.inc:
Код:
/**
  • Sets format for hudmessage.
  • Note - as of AMX Mod X 1.61, setting the channel to -1
  • will automatically choose the next available HUD channel for a player.
*/
native set_hudmessage(red=200, green=100, blue=0, Float:x=-1.0, Float:y=0.35, effects=0, Float:fxtime=6.0, Float:holdtime=12.0, Float:fadeintime=0.1, Float:fadeouttime=0.2,channel=4);

/* Displays HUD message to given player. */
native show_hudmessage(index,const message[],any:...);


Синтаксис:
Код:
set_hudmessage ( red=255, green=144, blue=0, Float:x=-0.44, Float:y=0.35, effects=0, Float:fxtime=6.0, Float:holdtime=12.0, Float:fadeintime=0.1, Float:fadeouttime=0.2, channel=4 )


red=255 - от 0 до 255 интенсивность красного цвета
green=144 - от 0 до 255 интенсивность зеленого цвета
blue=0 - от 0 до 255 интенсивность голубого цвета
Float:x=0.44 - Координата X, идёт слева направо, 0.0 слева, 1.0 справа, -1.0 по центру
Float:y=0.35 - Координата Y, идёт сверху вниз, 0.0 сверху, 1.0 снизу, -1.0 по центру

Для более быстрого подбора позиции и цвета HUD используйте генератор HUD сообщений от fantom

effects=0
- Эффекты сообщения:
0 - Без эффектов​
1 - Мерцание​
2 - Печатает буквы по очереди​


Float:fxtime=6.0 - Сколько времени будет сохраняться блеск во втором эффекте
Float:holdtime=12.0 - Сколько времени сообщение будет на экране
Float:fadeintime=0.1 - Как быстро будет печататься текст ( во втором эффекте - 1 буква в процент секунд)
Float:fadeouttime=0.2 - За какое время сообщение уйдет с экрана ( плавное исчезновение )
channel=4 - Канал сообщения ( всего каналов 4 ) если поставить -1 - то будет искать следующий свободный канал.

Код:
show_hudmessage ( index, message[], ... )


1. index - id игрока кому показывать сообщение, если поставить 0 - будет показано всем одновременно
2. message[] - само сообщение в виде массива или текст заключенный в скобках с подстановкой массивов в третьем параметре.
3. ... - Для массивов.

Пример:
Код:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Hud Message"
#define VERSION "1.0"
#define AUTHOR "Admin"


public plugin_init ( )
{
register_plugin ( PLUGIN, VERSION, AUTHOR )

register_clcmd("say /hudred","hud_message_red")
register_clcmd("say /hudgreen","hud_message_green")
register_clcmd("say /hudblue","hud_message_blue")
register_clcmd("say /hudeffzero","hud_message_eff_zero")
register_clcmd("say /hudeffone","hud_message_eff_one")
register_clcmd("say /hudefftwo","hud_message_eff_two")

}
public hud_message_red(id){
//красный hud
set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 10.0)
show_hudmessage(id, "You red hudmessage")
}
public hud_message_green(id){
//зеленый hud
set_hudmessage(0, 255, 0, -1.0, -1.0, 0, 6.0, 10.0)
show_hudmessage(id, "You green hudmessage")
}
public hud_message_blue(id){
//голубой hud
set_hudmessage(0, 0, 255, -1.0, -1.0, 0, 6.0, 10.0)
show_hudmessage(id, "You blue hudmessage")
}
public hud_message_eff_zero(id){
//без эффектов hud
set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 10.0)
show_hudmessage(id, "You effect 1 hudmessage")
}
public hud_message_eff_one(id){
//с эффектом 1 hud
set_hudmessage(255, 0, 0, -1.0, -1.0, 1, 6.0, 10.0)
show_hudmessage(id, "You effect 1 hudmessage")
}
public hud_message_eff_two(id){
//с эффектом 2 hud
set_hudmessage(255, 0, 0, -1.0, -1.0, 2, 6.0, 10.0)
show_hudmessage(id, "You effect 1 hudmessage")
}


Описание:
Есть шесть команд, вызывающие 6 разных HUD сообщений:
  1. say /hudgreen - Будет показано зеленое сообщение
  2. say /hudred - Красное сообщение
  3. say /hudblue - Голубое
  4. say /hudeffzero - С эффектом 0 ( без эффектов, такое же как красное)
  5. say /hudeffone - С эффектом мерцания(мигания)
  6. say /hudefftwo - С эффектом печатающегося текста
set_hudmessage - устанавливает параметры сообщения, его цвет, эффекты и тому подобное.
show_hudmessage - Выводит само сообщение.

show_hudmessage - может иметь еще и такую запись:
Код:

new name[33];
get_user_name(id, name, charsmax(name));
show_hudmessage(id, "You NickName is :%s", name);


Тут мы в свое сообщение вставляем имя игрока из массива name

Или такую:
Код:
show_hudmessage(id,massage)


А тут мы заранее в массив massage занесли данные, и по этому у нас нет ни кавычек ли запятых, так как все сообщение уже сформировано.
 
Последнее редактирование:
Сообщения
119
Реакции
53
Помог
4 раз(а)
Pokemoshka, существует ли эффект бегущей строки по области как в mp3 плеере? :blush2:
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Minni,
Код:
new name[33]

->
Код:
new name[32]
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
w0w, это размер массива на никнейм. Некоторые вообще пишут 64 :D
 
Сообщения
52
Реакции
34
Не могу разобраться с координатами по иксу. Нужно чтоб hud-сообщения в несколько строк через ^n выравнивались по правому краю.
Пробовал подобрать тут https://dev-cs.ru/hud/index.html , нужная позиция сообщения имела значение X = -0.17
Попробовал на практике в плагине, положение оно приняло правильное, но выравнивание строк по правому краю не происходит.
Потом попробовал значение X = 1.0 и больше, но сообщение просто прижалось вплотную к правому краю.
Вопрос: Можно ли как-то выравнивать сообщение по правому краю, если да, то как?
 
Последнее редактирование:
Сообщения
2,288
Реакции
1,740
Помог
31 раз(а)
Vincent, выравнивание идет по левому краю только. Хотя попробуйте с проблемами поиграться, только не уверен что прокатит
 
Сообщения
94
Реакции
64
Помог
5 раз(а)
вот пример скрина выравнивания текста по правому краю, значение по х = 1.0, по у = 0.27 и 10 пробелов после каждой строки текста)
 

Вложения

Сообщения
775
Реакции
293
Помог
11 раз(а)
5 разных цветов, это 5 разных худов надо делать, а на сколько я помню каналов у худов всего 4, значит строки будут заменяться. Потому в одном цвете это оптимальный вариант.
 
Сообщения
702
Реакции
54
Вопрос по тебе худ сообщений. У меня есть худ сообщение, которое начинается переносить на другую строку, хотя я этого не просил. Если ли размеры у худ сообщения и как их указать?
Код:
set_hudmessage(255, 255, 255, 0.01, 0.92, 0, 6.0, 1.0, 0.1, 0.2, -1)
ShowSyncHudMsg(id,sync2, "Здоровье: %i | Кредиты: %i | Класс: Обычный зомби",get_user_health(id),user_credits[id])
p.s. Название класса уже переносит. Если без названия, остановиться на "класс..." и дальше не идти, то влазит.
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
ThePhoenix, Никак тут не получится привязаться ни к каким размерам, т.к. как минимум, нужно разрешение клиента учитывать, которое ты не получишь.
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
У меня есть худ сообщение, которое начинается переносить на другую строку, хотя я этого не просил.
Режется оно тут https://github.com/alliedmodders/amxmodx/blob/master/amxmodx/util.cpp#L167
Зачем это сделано не понятно, можешь отправить сам мессагу.

Если ли размеры у худ сообщения и как их указать?
Нет.
 
Сообщения
702
Реакции
54
у holdtime есть значение бесконечности? Чтобы не делать обновление через таск тот же, а чтобы сообщение висело всегда?
 
Сообщения
1,293
Реакции
2,294
Помог
57 раз(а)
ThePhoenix, ну можно задать 999999.0, наверно. Правда не во всех ситуациях это выход. Если ты в спектрах висишь - по идее это покатит. А если играешь, там ResetHUD при респавне всё равно сообщение перебьёт.
 
Сообщения
510
Реакции
111
Помог
16 раз(а)
Почему иногда в плагинах не указывается channel ? какое значение тогда используется если не указать? Или если ShowSyncHudMsg то не надо?
 
Сообщения
3,583
Реакции
1,572
Помог
138 раз(а)
Сообщения
169
Реакции
462
Помог
2 раз(а)
ну можно задать 999999.0, наверно
Да, можно. Только не слишком большое число иначе худ будет исчезать сразу. 9999.0 хватит.
там ResetHUD при респавне всё равно сообщение перебьёт.
Да. Причем ResetHUD шлется не только при спавне. Можно хукнуть ResetHUD (через register_event) и отправлять его повторно, только с небольшой задержкой через таск. Но есть и другая проблема: максимально клиент умеет отображать 4 худ сообщения одновременно (или 5 ?). То есть худ может исчезнуть что бы отобразился другой. Но это не критично, если не нужно чтоб худ прям висел всегда. Он появится снова при следующем ResetHUD.

Почему иногда в плагинах не указывается channel ? какое значение тогда используется если не указать? Или если ShowSyncHudMsg то не надо?
Канал (channel) в первую очередь нужен для того, что бы HUD сообщения не накладывались друг на друга. В ShowSyncHudMsg этот вопрос как раз таки решается и указывать канал вручную не нужно.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу