Перейти к содержанию

Меню и HUD#

Демонстрация интерфейса: меню магазина со страницами, обычный HUD, DHUD и голосование.

examples/plugins/ui_demo.py
"""Меню, HUD и DHUD: /menu, /hud, /dhud, /vote."""

from amxpy import DirectorHud, Hud, Menu, Player, Plugin, server

plugin = Plugin("UI demo", version="1.0.0", author="amxpy")

info = Hud(y=0.25, color=(0, 200, 255), hold=4.0)
banner = DirectorHud(y=0.3, color=(255, 140, 0), hold=4.0)
maps = ["de_dust2", "de_inferno", "de_nuke"]

shop = Menu("Магазин")


@shop.item("Аптечка !y(+25 HP)", enabled=lambda p: p.alive)
def medkit(player: Player) -> None:
    player.health = min(player.health + 25, 100)
    player.print("!gАптечка использована")


@shop.item("Броня !y(100)", enabled=lambda p: p.alive and p.armor < 100)
def armor(player: Player) -> None:
    player.armor = 100
    player.print("!gБроня выдана")


@shop.item(lambda p: f"Ваш ник: !y{p.name}")
def whoami(player: Player) -> None:
    player.print(f"Вы — !t{player.name}")


for n in range(1, 8):  # ещё пункты, чтобы появилась вторая страница
    shop.add(f"Пункт {n}", lambda p, n=n: p.print(f"Выбран пункт !g{n}"))


@plugin.command("/menu", help="Меню со страницами")
def open_menu(player: Player) -> None:
    shop.show(player)


@plugin.command("/hud", help="Обычный HUD")
def show_hud(player: Player) -> None:
    info.show(player, f"Привет, {player.name}!\nЭто обычный HUD")


@plugin.command("/dhud", help="DHUD для всех")
def show_dhud(player: Player) -> None:
    banner.show_all(f"{player.name} вызвал DHUD")


@plugin.command("/vote", help="Голосование через Menu.ask")
async def vote(player: Player) -> None:
    choice = await Menu.ask(player, "Какая карта лучше?", maps, timeout=15)
    if choice is None:
        player.print("!tГолосование отменено")
    else:
        server.print(f"!g{player.name}!y выбрал !t{maps[choice]}")

Команды#

Команда Что показывает
/menu меню «Магазин» со страницами: пункты с условиями enabled, текст-функция, пункты через add
/hud обычный HUD игроку
/dhud DHUD всем
/vote вопрос через await Menu.ask(...) с тайм-аутом

Подробнее — Меню, HUD и чат.