Physgun Wiki

Как подключить свой модуль

Геймод грузит файлы напрямую через include/AddCSLuaFile в init.lua/cl_init.lua (см. структуру геймода), а не автоматическим сканированием папок.

1. Структура папки

gamemode/ └── mymodule/ ├── sh_mymodule.lua # оба реалма ├── sv_player.lua # только сервер └── cl_hud.lua # только клиент

2. Подключение в init.lua / cl_init.lua

Добавьте вызовы рядом с существующими модулями, порядок важен, если модуль зависит от netvars.lua/config.lua:

-- init.lua AddCSLuaFile('mymodule/sh_mymodule.lua') AddCSLuaFile('mymodule/cl_hud.lua') include('mymodule/sh_mymodule.lua') include('mymodule/sv_player.lua') -- cl_init.lua include('mymodule/sh_mymodule.lua') include('mymodule/cl_hud.lua')

Клиентские и общие файлы нужно явно прописать в обоих файлах: AddCSLuaFile в init.lua, чтобы сервер отправил файл клиенту, и include в cl_init.lua, чтобы клиент его выполнил.

Если не хочется дублировать список в двух файлах, можно подключить модуль через file.AutoInclude — библиотека сама выберет реалм по префиксу имени файла. Так раньше был устроен весь геймод, но сейчас init.lua/cl_init.lua перечисляют файлы напрямую.

3. Методы PLAYER/ENTITY

Геймод кеширует метатаблицы в глобальные PLAYER и ENTITY (sh_init.lua), поэтому новые методы объявляются напрямую:

-- mymodule/sv_player.lua function PLAYER:MyMethod() -- ... end

4. Хуки с дефолтной реализацией

Для блокирующих хуков (On*) регистрируйте дефолт в GM:, как это сделано для дверей и экономики, чтобы поведение работало без сторонних аддонов:

function GM:OnMyModuleAction(ply, ent) return true end