Квары
Квар — именованная настройка сервера: mp_freezetime, sv_gravity или
собственная настройка плагина. Объект Cvar читает и пишет один квар:
const freezeTime = new Cvar("mp_freezetime");
const speed = new Cvar("myplugin_speed", "250"); // создастся со значением "250", если такого квара на сервере нет
speed.addEventListener("change", (event) => {
console.log(`${event.cvar.name}: ${event.oldValue} -> ${event.value}`);
});
function startWarmup() {
freezeTime.number = 0;
console.log(`скорость ${speed.number}, текст "${speed.value}", включён: ${speed.boolean}`);
}
Как value у поля ввода, квар внутри — текст, и читать и писать его можно
тремя способами:
| Свойство | Читает | Пишет |
|---|---|---|
value | текст: "250" | текст |
number | число: 250 | число; целое пишется без дробной части ("5", а не "5.000000") |
boolean | true для всего, кроме 0 | true как 1, false как 0 |
Второй аргумент new Cvar — значение по умолчанию. Если на сервере нет квара
с таким именем, он создаётся с этим значением — так плагин добавляет свои
настройки. Без значения по умолчанию отсутствующий квар так и остаётся
отсутствующим: exists равно false, чтение даёт "", 0 и false, а
запись ничего не делает.
Создавайте Cvar один раз, в начале файла, и пользуйтесь им оттуда. Cvar,
созданный в начале файла, находит свой квар, когда сервер загрузит все
плагины, поэтому к моменту, когда ваш код его читает, квары игры и других
плагинов уже на месте.
Как узнать об изменении
addEventListener("change", listener) вызывает обработчик при каждом
изменении — из консоли, через amx_cvar, из другого плагина или из этого — с
event.cvar, event.oldValue и event.value (оба — текст).
removeEventListener("change", listener) с той же функцией его снимает.
Плагин, который читает настройки один раз, может делать это в событии
"configsExecuted", когда сервер уже выполнил свои конфиги
(Плагин):
const reward = new Cvar("myplugin_reward", "300");
let rewardMoney = 0;
server.addEventListener("configsExecuted", () => {
rewardMoney = reward.number;
});
Для настроек сложнее пары чисел — списков, вложенных разделов, значений под каждую карту — чаще удобнее файл конфига (Конфиги).
Флаги
Часть данных игры — набор флагов «включено/выключено»: какие кнопки держит игрок, какие части HUD скрыты, стоит ли сущность на земле. В плагине такой набор — массив имён:
Сообщения
Сервер говорит каждому клиенту, что рисовать и играть, сообщениями: строка чата, значок HUD, часы раунда, сообщение об убийстве. Плагин слышит сообщение до того, как оно ушло, читает его, меняет или останавливает: