Настройки и 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.
// 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: