SourceMod DB

Материал из wiki.otstrel.ru.

Перейти к: навигация, поиск

Содержание

Формат базы SourceMod

Стандартные таблицы

sm_admins, sm_groups, sm_admins_groups, sm_group_immunity, sm_group_overrides, sm_overrides и sm_config подробно расписаны тут. Основная идея нашей мегасистемы заключается в минимизации изменений стандартных таблиц и стандартных плагинов, чтобы апгрейд до новых версий сорсмода не становился гуманитарной катастрофой.

В таблицу sm_admins некий скрипт загружает всех пользователей vbb, у которых в поле vbb_userfield.field21 находится правильный стим. Тот же скрипт заполняет для этих админов таблицу sm_admins_groups. Скрипт запускается раз в час, при каждом запуске заново проверяется членство в группах и обновляются стимы.

sm_servers

Таблица описывает сервера системы и их группы. За счет ссылки на саму себя через поле parent_id возможна произвольная глубина вложенности групп. Поле server_id, используемое в остальных таблицах, может быть как конкретным сервером, так и группой.

Для группы имеют смысл только поля id, group, parent_id, enabled, name. Возможно в сервисе, управляющем игровыми серверами, будет реализована обработка pending_operation для всех серверов в группе, но вряд ли.

Поле Тип Назначение
id int(10) уникальный номер сервера или группы
group int(1) признак группы 1/0
parent_id int(10) ссылка на родительскую группу, 0 если родителя нет
enabled int(1) признак активности 1/0, если 0, то сервер или группа исключается из обработки как плагинами, так и сервисом управления игровыми серверами
computer_name varchar(255) для игровых серверов, управляемых сервисом - имя (hostname) физического сервера, так может использоваться для обозначения серверов на других площадках, например verygames или dgh
name varchar(255) имя сервера или группы
server_address varchar(64) адрес сервера вида xxx.xxx.xxx.xxx:xxxxx, используется плагином для определения номера сервера
dir varchar(255) для игровых серверов, управляемых сервисом - директория на конкретном физическом сервере, которая будет сделана текущей при запуске сервера, без хвостового слеша и хвостовых пробелов
cmdline varchar(255) для игровых серверов, управляемых сервисом - командная строка для запуска сервера
query_address varchar(255) для игровых серверов, управляемых сервисом - параметры, передаваемые qstat для опроса сервера на предмет их доступности игрокам. формат - тип хост:порт, например a2s 217.199.212.8:27015. если пусто, сервис следит только процессом игрового сервера
autostart int(1) для игровых серверов, управляемых сервисом - запускать ли игровой сервер при старте сервиса 1/0
autostart_timeout int(10) для игровых серверов, управляемых сервисом - пауза перед запуском игрового сервера при autostart 1. используется для поочередного запуска игровых серверов, чтобы избежать ситуации, когда стартуют одновременно десять
priority int(10) для игровых серверов, управляемых сервисом - приоритет процесса игрового сервера. 1 - below normal, 2 - normal (default), 3 - above normal, 4 - high
affinity int(10) для игровых серверов, управляемых сервисом - маска affinity для процесса игрового сервера. по умолчанию 0 - affinity не меняется
query_interval int(10) для игровых серверов, управляемых сервисом - при настроенном query_address частота опроса игрового сервера. три неудачных опроса означают умерший игровой сервер, процесс убивается и сервер перезапускается. при старте сервера ему дается два (или три?) query_interval для запуска. рекомендуемое значение query_interval - продожительность смены карты сервером
pending_operation int(10) для игровых серверов, управляемых сервисом - команда игровому серверу. 2 - старт, 3 - остановка, 4 - перезапуск. сервер перечитывает базу раз в минуту и после прочтения поля сбрасывает его в 0
running int(1) для игровых серверов, управляемых сервисом - активен ли процесс игрового сервера
last_update datetime для игровых серверов, управляемых сервисом - время последнего обновления поля running

sm_server_admins

В настоящее время не используется. Предполагается, что эта таблица позволит создавать в sm_admins индивидуальных админов, не присутствующих в качестве пользователей vbb, и давать им права доступа к конкретным серверами или группам серверов. Пока что это не представляется возможным без радикальной правки стандартного плагина загрузки админов, чего делать крайне не хочется.

sm_server_configs

Хранит текстовые конфиги (autoexec.cfg и config.cfg) серверов и групп серверов.

Поле Тип Назначение
id int(10) pk
server_id int(10) номер сервера или группы
type enum('autoexec', 'config') типа конфига
config mediumtext текст конфига
force int(1) в настоящее время не используется - признак форсирования конфига при наследовании от группы
enabled int(1) признак активности 1/0, если 0, то конфиг исключается из обработки

Наследование конфигов

Окончательный конфиг собирается из всех групп в один, где текст конфига самой верхней группы оказывается в начале результирующего конфига, а текст конфига собственно сервера в конце. Таким образом конфиг группы может содержать общие настройки, подходящие для большинства серверов группы, а конфиг конкретного сервера может уточнять отдельные настойки, специфичные для конкретного сервера.

Поле force меняет логику загрузки следующим образом - результирующий конфиг составляется только из текстов конфигов, имеющих значение флага force равным 1.

Примеры:

group 1 - force 0
group 2 - force 0
server 1 - force 0

результирующий конфиг:
group 1
group 2
server 1
group 1 - force 0
group 2 - force 1
server 1 - force 0

результирующий конфиг:
group 2
group 1 - force 0
group 2 - force 1
server 1 - force 1

результирующий конфиг:
group 2
server 1

sm_server_files

Хранит текстовые файлы серверов и групп серверов.

Поле Тип Назначение
id int(10) pk
server_id int(10) номер сервера или группы
filename varchar(255) имя файла относительно директории мода (cstrike или orangebox\tf)
data mediumtext содержимое файла (только текстовое, бинарные файлы не поддерживаются)
enabled int(1) признак активности 1/0, если 0, то конфиг исключается из обработки
force int(1) в настоящее время не используется - признак форсирования конфига при наследовании от группы
name varchar(255) имя для добавления файла в adminmenu_cfgs.txt (не обязательно)

Наследование файлов

Используется самый нижний файл в цепочке групп. То есть если файл определен для сервера, то будет использоваться именно он, даже если у родительских групп присутствует этот же файл.

Поле force меняет логику загрузки следующим образом - используется файл самого нижнего уровня где флаг force выставлен в 1.

Примеры:

group 1 - force 0
group 2 - force 0
server 1 - force 0

результирующий файл:
server 1
group 1 - force 0
group 2 - force 1
server 1 - force 0

результирующий файл:
group 2
group 1 - force 0
group 2 - force 1
server 1 - force 1

результирующий файл:
server 1

sm_server_groups

Описывает привязку групп SourceMod к конкретным серверам или группам.

Поле Тип Назначение
id int(10) pk
server_id int(10) номер сервера или группы
group_id int(10) номер группы SourceMod из sm_groups
force int(1) в настоящее время не используется - признак запрета наследования групп SourceMod от вышестоящих групп серверов
enabled int(1) признак активности 1/0, если 0, то привязка исключается из обработки

sm_server_overrides

Описывает привязку переопределений групп и команд SourceMod к конкретным серверам или группам.

Поле Тип Назначение
id int(10) pk
server_id int(10) номер сервера или группы
override_id int(10) номер переопределения из sm_overrides
force int(1) в настоящее время не используется - признак запрета наследования переопределений от вышестоящих групп серверов
enabled int(1) признак активности 1/0, если 0, то привязка исключается из обработки

sm_vbb_groups

Описывает соответствие групп vbb группам SourceMod.

Поле Тип Назначение
id int(10) pk
group_id int(10) номер группы SourceMod из sm_groups
vbb_group_id int(10) номер группы vbb из vbb_usergroup
enabled int(1) признак активности 1/0, если 0, то соответствие исключается из обработки

sm_vbb_users

Служебная таблица скрипта синхронизации, не редактируется напрямую.

Личные инструменты