MVP раунда#
Плагин считает убийства и хедшоты каждого игрока за раунд, а в конце объявляет лучшего крупным HUD и даёт ему денежный бонус.
examples/plugins/round_mvp.py
"""Лучший игрок раунда: убийства и хедшоты за раунд, итог — крупным HUD и бонусом."""
from amxpy import Config, DirectorHud, Plugin, PlayerState, cvar, events
plugin = Plugin("Round MVP", version="1.0.0", author="amxpy")
class Settings(Config, prefix="mvp_"):
bonus: int = cvar(500, "Денежный бонус лучшему игроку", min=0, max=16000)
cfg = plugin.include(Settings())
kills: PlayerState[int] = PlayerState(int)
headshots: PlayerState[int] = PlayerState(int)
banner = DirectorHud(y=0.25, color=(198, 244, 50), hold=5)
@plugin.on(events.RoundStart)
def reset(e: events.RoundStart) -> None:
kills.clear()
headshots.clear()
@plugin.on(events.PlayerKilled, post=True)
def count(e: events.PlayerKilled) -> None:
if e.killer is None or e.killer is e.victim:
return
kills[e.killer] += 1
if e.headshot:
headshots[e.killer] += 1
@plugin.on(events.RoundEnd, post=True)
def announce(e: events.RoundEnd) -> None:
if not kills.items():
return
best, frags = max(kills.items(), key=lambda pair: (pair[1], headshots.get(pair[0], 0)))
best.money = min(best.money + cfg.bonus, 16000)
banner.show_all(f"MVP раунда: {best.name} — {frags} убийств, {headshots.get(best, 0)} в голову")
Как это работает#
PlayerState(int)— счётчики по игрокам: значение по умолчанию 0, записи вышедших игроков удаляются сами.RoundStartобнуляет счётчики,PlayerKilled(post) считает только состоявшиеся убийства,RoundEnd(post) выбирает лучшего: больше убийств, при равенстве — больше хедшотов.DirectorHud— крупный текст всем игрокам; цвет — лаймовый(198, 244, 50).
Что проверяют тесты#
- Alice убивает двоих (одного в голову) — DHUD «MVP раунда: Alice — 2 убийств, 1 в голову», она получает $500, остальные — ничего;
- раунд без убийств ничего не объявляет.