Меню, HUD, сообщения#
Руководство: Меню, HUD и чат.
Menu
#
Menu(
title: str | Callable[[Player], str],
*,
per_page: int = 7,
exit: bool = True,
timeout: float | None = None,
)
Меню со страницами: клавиши 1–7 — пункты, 8/9 — листать, 0 — выход.
Теги цвета в текстах: !y жёлтый, !w белый, !r красный,
!d серый, !R — выравнивание к правому краю.
Параметры#
title— заголовок (строка или функция от игрока).per_page— пунктов на странице, 1–7.exit— показывать «0. Выход».timeout— секунд до автозакрытия (None— висит до выбора).
Пример#
shop = Menu("Магазин")
@shop.item("Броня !y($1000)", enabled=lambda p: p.money >= 1000)
def armor(player: Player) -> None:
player.money -= 1000
player.armor = 100
shop.show(player)
item
#
item(
title: str | Callable[[Player], str],
*,
visible: Callable[[Player], bool] | None = None,
enabled: Callable[[Player], bool] | None = None,
data: Any = None,
) -> ItemDecorator
add
#
add(
title: str | Callable[[Player], str],
callback: Callable[[Player], Any] | None = None,
*,
visible: Callable[[Player], bool] | None = None,
enabled: Callable[[Player], bool] | None = None,
data: Any = None,
) -> MenuItem
Добавить пункт без декоратора; возвращает MenuItem.
Пример#
show
#
Показать меню игроку (page — с нуля); старое меню закроется.
choose
#
MenuItem
#
MenuItem(
title: str | Callable[[Player], str],
callback: Callable[[Player], Any] | None = None,
visible: Callable[[Player], bool] | None = None,
enabled: Callable[[Player], bool] | None = None,
data: Any = None,
)
Пункт меню: текст (или функция от игрока), обработчик, видимость, доступность, данные.
Hud
#
Hud(
*,
x: float = -1.0,
y: float = 0.35,
color: Sequence[int] = (255, 255, 255),
effect: int = 0,
fade_in: float = 0.1,
fade_out: float = 0.2,
hold: float = 3.0,
fx_time: float = 0.0,
color2: Sequence[int] = (255, 255, 255),
channel: int | None = None,
)
Обычный HUD-текст (TE_TEXTMESSAGE): до 479 байт, 4 канала.
Сообщения одного канала заменяют друг друга; без channel каждый
Hud берёт следующий из 1–4.
Параметры#
x— позиция по горизонтали 0–1;-1— по центру.y— позиция по вертикали 0–1;-1— по центру.color— цвет(r, g, b)или(r, g, b, a).effect— 0 — появление, 1 — мерцание, 2 — печать по буквам.fade_in— секунд появления.fade_out— секунд исчезновения.hold— секунд на экране.fx_time— время эффекта 2 на букву.color2— цвет подсветки для эффекта 2.channel— канал 1–4 (None— следующий свободный по кругу).
Пример#
clear
#
Стереть сообщение этого канала у игрока (или у всех).
DirectorHud
#
DirectorHud(
*,
x: float = -1.0,
y: float = 0.35,
color: Sequence[int] = (255, 255, 255),
effect: int = 0,
fade_in: float = 0.1,
fade_out: float = 0.2,
hold: float = 3.0,
fx_time: float = 0.0,
)
Крупный HUD (director message, «DHUD»): до 127 байт, на экране до 8 сообщений.
Параметры#
x— позиция по горизонтали 0–1;-1— по центру.y— позиция по вертикали 0–1;-1— по центру.color— цвет(r, g, b).effect— 0 — появление, 1 — мерцание, 2 — печать по буквам.fade_in— секунд появления.fade_out— секунд исчезновения.hold— секунд на экране.fx_time— время эффекта 2 на букву.
Пример#
Message
#
User-сообщение клиенту по имени ("ScreenFade") или служебное по номеру.
Сообщение собирается целиком и уходит одним вызовом send
(или при выходе из with) — незакрытого message_begin не бывает.
Параметры#
kind— имя user-сообщения или номер SVC_*.to— игрок;None— всем.reliable— гарантированная доставка (MSG_ONE/MSG_ALL).
Пример#
with Message("ScreenFade", to=player) as m:
m.short(4096).short(4096).short(0)
m.byte(255).byte(0).byte(0).byte(100)