Структура геймода
Геймод живёт в gamemodes/darkrp/, общие библиотеки: в lua/autorun/ (они загружаются раньше геймода и доступны везде, включая другие геймоды).
Точки входа
init.lua (сервер) и cl_init.lua (клиент) устроены одинаково: вызывают хук RolePlay.Loading, подключают sh_init.lua и после загрузки вызывают RolePlay.Loaded. На эти два хука могут подписываться внешние аддоны.
sh_init.lua задаёт метаданные геймода (GM.Name, GM.Version), кеширует метатаблицы в глобальные PLAYER и ENTITY и перечисляет все модули через file.AutoInclude:
Порядок загрузки
Порядок в sh_init.lua имеет значение:
- netvars.lua, config.lua. База, сетевые переменные и конфиг, от них зависят все модули.
- sv_entities.lua, sv_player.lua. Хуки геймода и дефолтные реализации блокирующих
On*-хуков. - economy/. Деньги (двери при покупке списывают деньги через
PLAYER:AddMoney). - doors/. Система дверей.
- building/. Лимиты, спавн пропов, APS.
Реалмы по имени файла
file.AutoInclude сам решает, где выполнять файл, по префиксу имени: sv_*: только сервер, cl_*: только клиент (с автоматическим AddCSLuaFile), остальные (sh_* и без префикса): оба реалма.
