Настройка своего гейммода в Garry's Mod
Гейммод уже стоит, сервер запускается, но хочется не дефолт, а свою версию: другие стартовые деньги, своя работа в DarkRP, поправленный таймер раунда в TTT. Проблема в том, что большинство гайдов из интернета советуют лезть прямо в файлы гейммода и менять там что попало — а после следующего обновления коллекции всё откатывается назад, или того хуже, сервер вообще перестаёт стартовать. Разберём, как настраивать гейммод правильно: где реально лежат параметры, почему их не стоит трогать в исходниках напрямую и как проверить изменения, не сломав сервер игрокам посреди вечера.
Содержание
Структура файлов гейммода: init.lua, cl_init.lua, shared.lua
Любой гейммод Garry's Mod, будь то встроенный sandbox или скачанный DarkRP, держится на трёх базовых файлах в папке gamemode/:
init.lua— стартовая точка серверной части. Отсюда черезAddCSLuaFile()подгружаются клиентские файлы, здесь регистрируются серверные хуки, экономика, спавн-поинты.cl_init.lua— стартовая точка клиента. HUD, меню, отрисовка — всё, что видит игрок локально, живёт тут и в файлах, которые отсюда подключены.shared.lua— код, который одинаково работает и на сервере, и на клиенте: обычно тут регистрация самого гейммода черезGM.Name,GM.Author, базовые переменные конфига.
У крупных гейммодов вроде DarkRP или TTT это не три файла, а целые деревья папок: gamemode/modules/, gamemode/libs/, отдельные подпапки под экономику, работы, HUD. Но принцип разделения тот же — серверная логика (деньги, права, спавн) отдельно от клиентской (отрисовка, меню), и всё это подключается через init.lua/cl_init.lua как точки входа. Если открываешь гейммод впервые, начни именно с этих трёх файлов — они дадут карту того, куда смотреть дальше.
Важный нюанс: если статьи про сам DarkRP, TTT или Sandbox как таковые тебе нужны отдельно — это уже другая тема, здесь речь именно про правку уже работающего гейммода под себя, а не про то, как гейммоды устроены изнутри целиком.
Где искать настраиваемые параметры
Ключевое правило, которое экономит часы дебага: готовые гейммоды почти никогда не рассчитаны на правку файлов в самой папке гейммода напрямую. Причина простая — если гейммод обновляется через Steam Workshop коллекцию или git pull с GitHub, все твои правки в gamemode/ затрутся при следующем обновлении без предупреждения.
Поэтому у серьёзных гейммодов есть отдельный слой конфигурации:
- DarkRP — конфиг зарплат, работ, стартовых денег и лимитов вынесен из ядра гейммода и должен переопределяться через отдельный addon-конфиг, который живёт вне папки самого DarkRP — обычно в
garrysmod/addons/darkrpmodification/lua/darkrp_config/(имя папки-модификации может быть любым, важен путьlua/darkrp_config/внутри неё). Там два файла-переопределения:settings.luaдля общих настроек экономики иjobs.luaдля списка работ и их зарплат. - TTT — большая часть настроек (время раунда, шанс traitor, хаст-режим) управляется не Lua-конфигом, а обычными ConVar-ами вроде
ttt_roundtime_minutesилиttt_traitor_pct, которые прописываются прямо вserver.cfgчерез+execили командой в консоли — Lua тут трогать почти не нужно. - Sandbox — самый минималистичный гейммод, у него по сути нет отдельного конфиг-слоя, потому что настраивать особо нечего: тонкая кастомизация делается через отдельные аддоны (например, инструменты спавна, ограничители пропов), а не правку самого sandbox.
Так что первый шаг перед любой правкой — понять, к какому типу относится твой гейммод: конфиг-файл, ConVar-ы или отдельный аддон-модификатор. Смотри .gitignore и README на GitHub-странице гейммода — авторы уважающих себя проектов почти всегда явно пишут, где переопределять настройки.
Поднять сервер Garry's Mod за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверПрактика: меняем стартовые деньги в DarkRP
Создаём (если ещё нет) папку-модификацию рядом с остальными аддонами:
mkdir -p garrysmod/addons/darkrpmodification/lua/darkrp_config
nano garrysmod/addons/darkrpmodification/lua/darkrp_config/settings.lua
Внутри файла переопределяем нужные переменные — они переопределяют значения по умолчанию из ядра DarkRP, а не редактируют их:
GM.Config.startingmoney = 500 -- было 300 по умолчанию
GM.Config.maxmoney = 5000000
GM.Config.money = "$" -- символ валюты в HUD
Важно: обращение идёт через GM.Config, а не GAMEMODE.Config — в актуальных версиях DarkRP (на конец августа 2026 в большинстве актуальных форков) используется именно GM, но в старых форках можно встретить GAMEMODE — если правка не подхватывается, попробуй оба варианта или свериcь с README конкретного форка DarkRP, который у тебя стоит.
После сохранения файла гейммод сам подхватит его при следующем старте — никаких дополнительных require или include прописывать не нужно, DarkRP сканирует папку darkrp_config автоматически при загрузке.
Практика: добавляем зарплату и свою работу
Зарплаты по работам и сам список работ живут в jobs.lua той же папки-модификации:
nano garrysmod/addons/darkrpmodification/lua/darkrp_config/jobs.lua
Пример правки зарплаты у существующей работы (меняем salary у мэра):
TEAM_MAYOR = DarkRP.createJob("Мэр", {
color = Color(0, 0, 255, 255),
model = {"models/player/Group01/male_07.mdl"},
description = [[Управляй городом, издавай законы.]],
weapons = {},
command = "mayor",
max = 1,
salary = 120, -- было, скажем, 75
admin = 0,
vote = true,
hasLicense = false,
category = "Городские",
})
Если такая работа с этим именем уже зарегистрирована в базовом jobs.lua ядра DarkRP, твоя версия из аддон-модификации переопределит её — DarkRP грузит файлы модификаций после ядра гейммода. Если хочешь не менять, а добавить новую работу — просто копируешь такой же блок DarkRP.createJob() с новым именем переменной (например, TEAM_TAXIST) и уникальным command, чтобы не было конфликта с уже существующими работами.
Для TTT аналогичная по духу правка — это не Lua-файл, а строка в server.cfg:
ttt_starting_credits 2
ttt_roundtime_minutes 8
Бэкап перед правками — обязательный шаг, а не формальность
Прежде чем открывать любой конфиг на боевом сервере, сделай копию файлов, которые собираешься менять. Это не паранойя — это единственная страховка, если правка окажется синтаксически битой (лишняя скобка в Lua ломает загрузку всего файла целиком, а иногда и всего гейммода) или логически неверной (выставил зарплату отрицательной и экономика встала).
Минимальный вариант — просто скопировать файл рядом:
cp garrysmod/addons/darkrpmodification/lua/darkrp_config/jobs.lua \
garrysmod/addons/darkrpmodification/lua/darkrp_config/jobs.lua.bak
Более надёжный вариант — держать всю папку с конфигами под git, даже локально без удалённого репозитория:
cd garrysmod/addons/darkrpmodification
git init
git add .
git commit -m "before editing salaries"
Тогда откат одной командой (git checkout -- .) вместо ручного восстановления по памяти. Если правишь конфиг прямо через FTP/SFTP на арендованном сервере — то же самое: скачай текущую версию файла к себе на диск перед тем, как что-то менять там же онлайн через встроенный редактор панели. Пять секунд на копию экономят вечер разбора, почему сервер не встаёт после рестарта.
Применяем изменения: перезапуск сервера
Lua-конфиги DarkRP и большинства других гейммодов не подхватываются на лету — сервер должен быть перезапущен (полный рестарт процесса, а не просто смена карты через changelevel), чтобы заново прогрузить файлы гейммода с нуля. Исключение — некоторые ConVar-настройки TTT, которые можно менять прямо в консоли сервера без рестарта, но и там часть флагов применяется только к следующему раунду или карте.
Если сервер запущен через systemd-юнит:
sudo systemctl restart gmod.service
Если вручную через start.sh — останови процесс (Ctrl+C в консоли или kill по PID) и запусти заново. После рестарта первым делом проверь консоль сервера на ошибки Lua — если в конфиге опечатка (пропущенная запятая между полями DarkRP.createJob, незакрытая скобка), сервер обычно не падает целиком, но пишет в лог что-то вроде [ERROR] darkrp_config/jobs.lua:14: unexpected symbol и откатывается к дефолтным значениям для сломанного куска. Прочитал ошибку — сразу видно строку, где искать проблему.
Проверить, что изменения реально применились, проще всего зайдя на сервер самому: если менял стартовые деньги — создай тестовый аккаунт или зайди под своим и глянь баланс при первом заходе (для чистой проверки лучше на тестовом сервере или временно очистив данные конкретного SteamID через консоль, если тестируешь на боевом).
Если сервер только разворачиваешь и процесс установки самого GMod ещё не пройден — сначала разберись с базовой установкой: как поднять сервер Garry's Mod, а уже потом возвращайся к настройке гейммода под себя.
Поднять сервер Garry's Mod за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Почему изменения в jobs.lua не применились после рестарта?
Чаще всего это синтаксическая ошибка в файле — проверь консоль сервера на Lua-ошибки при старте, обычно там прямо указана строка. Также проверь, что файл лежит именно в папке-модификации (darkrp_config), а не в ядре DarkRP — правки в ядре может затереть обновление.
Можно ли редактировать ядро гейммода напрямую, если не планирую его обновлять?
Технически можно, но не стоит привыкать к этому — даже если сейчас не планируешь обновлять коллекцию через Workshop, случайный app_update или переустановка аддона сотрут правки. Аддон-модификация с переопределениями — это буквально пять минут настройки один раз, но полностью исключает эту проблему.
Как понять, GM.Config или GAMEMODE.Config использовать в моей версии DarkRP?
Открой любой файл ядра DarkRP (например, gamemode/config/config.lua) и посмотри, как объявлены переменные — обычно там GM.Config.xxx = yyy в актуальных версиях, но если форк старый, встречается GAMEMODE.Config. Правка в конфиг-модификации должна совпадать по стилю с ядром.
Есть ли способ проверить конфиг на ошибки, не перезапуская боевой сервер?
Да — держи локальный тестовый сервер (можно даже на своей машине через srcds_run или в отдельном контейнере) с той же версией гейммода, проверяй правки там, и только рабочий вариант переноси на прод. Это особенно полезно для правок jobs.lua с несколькими работами сразу — одна опечатка ломает весь файл.
Что делать, если гейммод вообще не написал в README, где менять настройки?
Смотри исходники на GitHub гейммода — ищи по ключевым словам Config, ConVar, CreateConVar в коде, обычно быстро становится видно, через что гейммод ожидает получать настройки. Если гейммод совсем маленький и самописный без явного конфиг-слоя, тогда правка ядра — единственный вариант, но тогда стоит держать fork на GitHub у себя, чтобы обновления мержились, а не затирались.