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

Настройки и cvar'ы#

Настройки плагина — класс-наследник Config. Каждое поле — cvar: тип берётся из аннотации, а значение читается с сервера в момент обращения.

from amxpy import Config, Plugin, cvar

plugin = Plugin("VIP")


class Settings(Config, prefix="vip_"):
    hp_bonus: int = cvar(25, "Доп. HP на спавне", min=0, max=155)
    damage_mult: float = cvar(1.1, "Множитель урона VIP", min=1)
    enabled: bool = cvar(True, "Включить плагин")
    tag: str = cvar("[VIP]", "Тег в чате")
    api_key: str = cvar("", "Ключ API", protected=True)


cfg = plugin.include(Settings())

player.health += cfg.hp_bonus        # int — редактор знает тип
cfg.enabled = False                  # присваивание меняет cvar на сервере

На сервере появятся vip_hp_bonus, vip_damage_mult и остальные: prefix + имя поля. Имя целиком задаёт cvar(..., name="sv_vip_hp").

Файл конфига#

При первой загрузке amxpy создаёт addons/amxpy/configs/<плагин>.cfg со значениями по умолчанию и описаниями и выполняет его. Дальше файл ваш: amxpy его не перезаписывает и выполняет при каждой загрузке плагина. Тот же файл кладёт в dist/configs/ команда amxpy build.

addons/amxpy/configs/vip.cfg
// VIP: cvars (generated by amxpy)

// Доп. HP на спавне
// range: 0..155
vip_hp_bonus "25"

Параметры cvar#

Параметр
default значение по умолчанию — литерал: компилятор читает его из исходника
description комментарий в .cfg
min, max границы для чисел
protected скрыть значение (FCVAR_PROTECTED) — для паролей и ключей
flags флаги FCVAR_* движка
name полное имя вместо prefix + имя поля

Тип поля — bool, int, float или str; ошибки в объявлениях компилятор показывает кодами AMX404–AMX406.

Реакция на изменение#

@cfg.on_change("hp_bonus")
def changed(old: int, new: int) -> None:
    plugin.log.info("hp_bonus: %s → %s", old, new)

Обработчик получает старое и новое значение, когда cvar поменяли — из консоли, rcon или кодом.

Тексты и списки#

cvar хранит одно значение. Для текстов рекламы, списков карт и других данных, которые владелец сервера правит руками, есть файлы настроек — plugin.config_file(...).

Чужие cvar'ы#

Любой cvar сервера читается и меняется через server:

freeze = server.cvar("mp_freezetime")    # строка или None, если такого нет
server.set_cvar("mp_freezetime", 3)