Источник: JustServer.Ru
В этой статье мы рассмотрим использование HUD и DHUD сообщений.
Для начала рассмотрим аргументы функции set_hudmessage:
- Код: Выделить всё
red - Количество красного цвета;
green - Количество зелёного цвета;
blue - Количество синего цвета;
x - Координата X, идёт слева направо, 0.0 слева, 1.0 справа, -1.0 по центру;
y - Координата Y, идёт сверху вниз, 0.0 сверху, 1.0 снизу, -1.0 по центру;
effects - Эффект сообщения:
0 - Появление -> Простой -> Пропадание (Затухание),
1 - (Появление -> Простой -> Пропадание (Затухание)) + Мигание,
2 - Печатание букв -> Простой -> Пропадание (Затухание);
fxtime - Время отставания блеска от печатания букв во 2-ом эффекте ("Скользящий блеск");
holdtime - Время простоя сообщения;
fadeintime - Время появления сообщения, во 2-ом эффекте скорость печатания (1 буква в % секунд);
fadeouttime - Время пропадания сообщения (Затухание);
channel - канал сообщения, при -1 ищет следующий канал (Существует ограничение в 4 канала, т.е. не может быть больше 4 сообщений одновременно.
Аргументы set_dhudmessage ничем не отличаются от set_hudmessage, кроме последнего аргумента:
- Код: Выделить всё
reliable - При false может не дойти до игрока, но не будет вызывать лаги у игрока как при true.
Также у HUD сообщений существует SyncHud это замена каналов, рассмотрим функции SyncHud'a:
- Код: Выделить всё
CreateHudSyncObj() - Создаёт SyncHud;
ShowSyncHudMsg(target, syncObj, const fmt[], any:...) - Показывает HUD сообщение (SyncHud) использовать вместо show_hudmessage, аргументы:
target - Игрок, 0 всем,
syncObj - ID SyncHud'а,
fmt - Сообщение, дальше аргументы к сообщению;
ClearSyncHud(target, syncObj) - Удаляет все сообщения вызванные syncObj'ом, аргументы:
target - Игрок, 0 всем,
syncObj - ID SyncHud'а;
Теперь мы рассмотрим как побороть накладывание сообщений в DHUD сообщениях.
Для этого нужно отослать 8 пустых сообщений или 7, 6 в зависимости от количества отсылаемых сообщений (9 минус количество отсылаемых)
- Код: Выделить всё
for (new iDHUD = 0; iDHUD < 7; iDHUD++)
show_dhudmessage(pId /*Или 0 если всем*/, "");
Чтобы очистить все сообщения посылаем 8 пустых DHUD сообщений
- Код: Выделить всё
for (new iDHUD = 0; iDHUD < 8; iDHUD++)
show_dhudmessage(pId /*Или 0 если всем*/, "");
Можно получить такую функцию:
- Код: Выделить всё
stock ClearDHUDMessages(pId, iClear = 8)
for (new iDHUD = 0; iDHUD < iClear; iDHUD++)
show_dhudmessage(pId, "");
Примечания:
fxtime не работает в DHUD сообщениях.
Нельзя одновременно показать больше 8 DHUD сообщений.
Примеры использования:
С использованием обычных каналов в HUD сообщениях.
- Код: Выделить всё
#include <amxmodx>
public plugin_init()
register_clcmd("say /test", "ClCmdTest");
public ClCmdTest(pId)
{
set_hudmessage(0, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, -1);
show_hudmessage(pId, "Вы отослали игроку сообщение :D");
}
С использованием SyncHud.
- Код: Выделить всё
#include <amxmodx>
new g_syncHudMessage;
public plugin_init()
{
register_clcmd("say /test", "ClCmdTest");
register_clcmd("say /clear", "ClCmdClear");
g_syncHudMessage = CreateHudSyncObj();
}
public ClCmdTest(pId)
{
set_hudmessage(0, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, -1);
ShowSyncHudMsg(pId, g_syncHudMessage, "Вы отослали игроку сообщение :D");
}
public ClCmdClear(pId)
ClearSyncHud(pId, g_syncHudMessage);
С использованием DHUD сообщения.
- Код: Выделить всё
#include <amxmodx>
#include <dhudmessage>
public plugin_init()
register_clcmd("say /test", "ClCmdTest");
public ClCmdTest(pId)
{
set_dhudmessage(0, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false);
show_dhudmessage(pId, "Вы отослали игроку сообщение :D");
}
C использованием очистки DHUD сообщения и "Анти-накладки".
- Код: Выделить всё
#include <amxmodx>
#include <dhudmessage>
public plugin_init()
{
register_clcmd("say /test", "ClCmdTest");
register_clcmd("say /clear", "ClCmdClear");
}
public ClCmdTest(pId)
{
ClearDHUDMessages(pId);
set_dhudmessage(0, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false);
show_dhudmessage(pId, "Вы отослали игроку сообщение :D");
}
public ClCmdClear(pId)
ClearDHUDMessages(pId);
stock ClearDHUDMessages(pId, iClear = 8)
for (new iDHUD = 0; iDHUD < iClear; iDHUD++)
show_dhudmessage(pId, "");