RE:NODE

Руководства11 мин чтения

Сервер Garry's Mod DarkRP: установка, профессии и админка

Как настроить сервер DarkRP: установка режима, darkrpmodification, свои профессии, админка ULX или SAM, база данных и настройки, которые важны.

0 прочтений

DarkRP - это игровой режим Garry's Mod, а значит, установка сводится к двум папкам и параметру запуска: сам режим лежит в garrysmod/gamemodes/darkrp/, а аддон darkrpmodification хранит все ваши изменения. Всё остальное - профессии, поставки, зарплаты, кто кого может банить - это Lua, который вы правите в аддоне и никогда в самом режиме. Сервер, соблюдающий это единственное правило, переживает обновления DarkRP. Сервер, где правят режим напрямую, теряет все свои настройки при первом же обновлении, и именно так большинство людей это правило и узнаёт.

Что нужно DarkRP до начала#

DarkRP работает на стандартном выделенном сервере Garry's Mod, устанавливаемом через SteamCMD как приложение 4020 с анонимным входом. Базовая установка разобрана в руководстве по настройке сервера Garry's Mod; здесь предполагается, что у вас уже есть сервер, который запускается в sandbox и принимает подключения.

Две вещи, которые нужны DarkRP и не нужны sandbox:

  • Контент Counter-Strike: Source. Классические карты DarkRP - rp_downtown_v4c_v2 и большинство её потомков - используют текстуры и модели из CS:S. Без них ваш город превращается в фиолетово-чёрную шахматную доску. На выделенном сервере вы устанавливаете контент выделенного сервера CS:S через SteamCMD (приложение 232330) и указываете его Garry's Mod в garrysmod/cfg/mount.cfg.
  • Тариф с местом под аддоны. Сам DarkRP невелик. Коллекция из мастерской - нет. Типичный публичный сервер DarkRP несёт несколько гигабайт аддонов ещё до первой собственной профессии.
garrysmod/cfg/mount.cfg
"mountcfg"{    "cstrike"   "/home/container/cstrike/cstrike"}

Путь ведёт к папке, содержащей собственные каталоги контента cstrike. Если ошибиться, при запуске никто не пожалуется; вы узнаете об этом, когда загрузите карту.

ИгроковRAMПримечания
До 16, короткий список аддонов2 ГБКомфортно для частного сервера
24-32, обычный DarkRP3-4 ГБОбычный публичный сервер
40-64, большая коллекция6 ГБТеперь предел - список аддонов

Один жёсткий предел, который надо знать до любой покупки: выделенный сервер Garry's Mod по умолчанию - 32-битный процесс, и 32-битный процесс падает где-то около 3 ГБ резидентной памяти, что бы ни разрешал тариф. Для Garry's Mod есть и ветка x86-64, снимающая этот потолок. Если ваш сервер падает при одном и том же числе игроков без всякой ошибки, первым подозреваемым должно быть адресное пространство памяти, а не тариф.

Установка DarkRP и darkrpmodification#

И DarkRP, и его аддон изменений публикует FPtje на GitHub. Скачайте текущий релиз каждого или клонируйте их.

  1. Распакуйте DarkRP в garrysmod/gamemodes/darkrp/. Имя папки должно быть ровно darkrp, в нижнем регистре, и в ней должны лежать darkrp.txt и папка gamemode/. Архив с GitHub распаковывается как DarkRP-master, поэтому переименуйте её.
  2. Распакуйте аддон изменений в garrysmod/addons/darkrpmodification/. То же правило: переименуйте из darkrpmodification-master.
  3. Запустите сервер с +gamemode darkrp и картой DarkRP.
  4. Следите за консолью весь первый запуск. Ошибки Lua при загрузке - единственное предупреждение о том, что что-то не установилось.
bash
$ ./srcds_run -game garrysmod -console -port 27015 \    +gamemode darkrp +map rp_downtown_v4c_v2 +maxplayers 40

В панели те же значения - поля на вкладке Startup, а не команда, которую вы вводите, но значения те же. Добавьте также sv_defaultgamemode "darkrp" в garrysmod/cfg/server.cfg, чтобы смена карты не возвращала вас молча в sandbox.

Пишите всё в нижнем регистре. Garry's Mod в Linux различает регистр, и аддон в папке MyAddon с материалами в Materials/ даёт пропавшие текстуры, которые прекрасно работают на тестовом сервере с Windows. Это самая частая единичная причина ситуации «дома работало».

Структура, которую вы реально будете править:

code
garrysmod/addons/darkrpmodification/lua/    darkrp_config/        settings.lua           # every DarkRP setting        disabled_defaults.lua  # switch off built-in jobs, entities, modules        mysql.lua              # database connection    darkrp_customthings/        jobs.lua        entities.lua        shipments.lua        food.lua        ammo.lua        doorgroups.lua        agendas.lua        categories.lua

В gamemodes/darkrp/ не нужно трогать ничего и никогда. Если какое-то руководство советует править там файл, оно устарело примерно на десять лет.

Настройки#

darkrp_config/settings.lua приходит со всеми настройками уже на месте, у каждой есть комментарий с объяснением и значением по умолчанию. Значения вы меняете на месте; ключи, которых нет в файле, не добавляют.

darkrp_config/settings.lua
GM.Config.startingmoney = 500GM.Config.normalsalary  = 45GM.Config.propertytax   = falseGM.Config.adminsents    = trueGM.Config.voiceradius   = true

Четыре решения, которые формируют сервер сильнее всех остальных:

  • Стартовые деньги и зарплата вместе задают темп экономики. Высокая зарплата при дешёвых поставках означает, что через час у всех есть всё, а ролевая игра скатывается в deathmatch. Проще начать скупо и поднимать, чем наоборот, потому что отобрать деньги у тех, у кого они уже есть, нельзя.
  • Налог на имущество взимает с игроков плату за принадлежащие им двери с каждой зарплаты. Он мешает горстке игроков завладеть всей картой и уйти в неактив. И он же отпугивает новичков, если они вообще не могут позволить себе дом.
  • Сущности, создаваемые только админами (adminsents), не пускают к обычным игрокам пропы и SENT из sandbox. На ролевом сервере оставьте включённым.
  • Радиус голоса делает голосовой чат локальным, а не глобальным, и это единственное изменение, благодаря которому сервер ощущается как ролевая игра, а не как лобби.

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

Профессии#

Профессии живут в darkrp_customthings/jobs.lua и создаются одним вызовом функции. Вот весь API:

jobs.lua
TEAM_MECHANIC = DarkRP.createJob("Mechanic", {    color = Color(50, 100, 180, 255),    model = {        "models/player/gasmask.mdl",        "models/player/riot.mdl",    },    description = [[Repair vehicles. Charge too much for it.]],    weapons = {"weapon_physgun"},    command = "mechanic",    max = 3,    salary = 60,    admin = 0,    vote = false,    hasLicense = false,    candemote = true,    category = "Citizens",})

Поля, которые важны и в которых регулярно ошибаются:

  • command - то, что вводят игроки, то есть здесь /mechanic. Оно должно быть уникальным среди всех профессий.
  • max - сколько игроков могут занимать профессию. 0 - без ограничений. Десятичное число меньше 1 читается как доля от текущего числа игроков, так что max = 0.1 означает десять процентов сервера - для полиции это гораздо лучше фиксированного числа на сервере, где онлайн колеблется.
  • admin - 0 для всех, 1 для админов, 2 для суперадминов.
  • TEAM_MECHANIC - глобальная переменная. Если у двух профессий одно имя, одна молча заменяет другую.
  • category должна совпадать с категорией, созданной через DarkRP.createCategory, иначе профессия не появится в меню F4, хотя загрузилась без замечаний.

Для профессий, ограниченных донорами или штатным рангом, у DarkRP есть customCheck:

lua
customCheck = function(ply)    return CLIENT or table.HasValue({"superadmin", "vip"}, ply:GetUserGroup())end,CustomCheckFailMsg = "This job is for VIP members.",

Соседи этого файла работают так же. DarkRP.createEntity добавляет покупаемую сущность вроде принтера, DarkRP.createShipment добавляет поставку оружия со списком allowed профессий, которые могут её покупать, DarkRP.createFood добавляет предмет, восстанавливающий здоровье, а DarkRP.createDoorGroup позволяет пометить двери на карте как доступные для владения только определённым профессиям. Встроенные профессии и сущности, которые вам не нужны, убираются в disabled_defaults.lua, а не удаляются из режима.

Админка: FAdmin, ULX и SAM#

DarkRP поставляется со своей админ-модификацией FAdmin. Для небольшого частного сервера её достаточно, и она знает понятия DarkRP вроде профессий и дверей. Она же - причина, по которой большинство установок ULX ведут себя на DarkRP странно: две админ-модификации, дерущиеся за одни и те же команды, - именно то развлечение, каким оно звучит. Если ставите другую, сначала отключите FAdmin:

darkrp_config/disabled_defaults.lua
DarkRP.disabledDefaults["modules"]["fadmin"] = true

ULX вместе с ULib - бесплатный стандарт. Установите оба аддона, перезапустите, а затем создайте первого суперадмина из консоли сервера - не из игры, потому что пока ни у кого нет прав:

code
ulx adduser "YourName" superadminulx addgroup vip userulx groupallow vip ulx kick

ULX хранит группы в garrysmod/data/ulib/groups.txt, а пользователей в garrysmod/data/ulib/users.txt. Оба файла текстовые, оба стоит включить в резервные копии, и оба проще поправить вручную, чем через меню, когда вы заперли себя снаружи. Всё остальное открывает ulx menu - XGUI в игре.

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

Что бы вы ни выбрали, держите список суперадминов коротким. Суперадмин в любой админ-модификации GMod может выполнять на вашем сервере произвольный Lua, а это то же самое, что иметь пароль от вашей панели. Доступ к панели - отдельный вопрос с лучшим ответом: субпользователи и минимальные привилегии позволяют модератору пользоваться консолью, не имея возможности удалить сервер или увидеть ваши счета.

База данных#

DarkRP хранит деньги, принадлежащие двери и ещё кое-что через MySQLite, который по умолчанию использует SQLite: один файл garrysmod/sv.db. Для одного сервера этого вполне достаточно. Он быстрый, не требует настройки, и у него ровно один вид отказа - сам файл. Включайте его в резервные копии вместе со всем остальным.

Настоящая база нужна, когда серверов несколько и вы хотите общие деньги, когда вы хотите запрашивать или исправлять данные, не останавливая сервер, или когда вы ставите аддон, которому MySQL нужен в любом случае. Подключение задаётся в darkrp_config/mysql.lua:

darkrp_config/mysql.lua
DarkRP.registerDatabaseConfig{    EnableMySQL      = true,    Host             = "db.example.net",    Username         = "s7_user",    Password         = "generated-password",    Database_name    = "s7_gmod",    Database_port    = 3306,    Preferred_module = "mysqloo",    MultiStatements  = false,}

Для этого нужен бинарный модуль mysqloo в garrysmod/lua/bin/, причём файл должен соответствовать платформе и архитектуре сервера. Garry's Mod даёт им расширение .dll даже в Linux, что всех удивляет: gmsv_mysqloo_linux.dll для 32-битного сервера и gmsv_mysqloo_linux64.dll для ветки x86-64. Неверный файл не загружается вовсе, а DarkRP молча откатывается на прежнее, так что если деньги продолжают сбрасываться после перехода на MySQL, причина в этом файле.

Каждый игровой тариф RE:NODE включает один слот базы данных, создаваемый из панели, с сгенерированными хостом, пользователем и паролем и кнопкой Open in phpMyAdmin, которая входит по одноразовому токену. Это покрывает учётные данные выше, и вам ничего не нужно администрировать.

Как сохранить сервер за собой#

DarkRP атакуют чаще любого другого режима Garry's Mod, потому что вокруг него существует целая кустарная индустрия эксплойт-меню. Три настройки и одна привычка справляются с большей частью.

garrysmod/cfg/server.cfg
hostname "Northside RP"rcon_password ""sv_password ""sv_lan 0sv_allowcslua 0sv_allowupload 0sv_allowdownload 1sbox_godmode 0sbox_noclip 0

sv_allowcslua 0 - самая важная. Она не даёт клиентам выполнять собственный клиентский Lua, а на этом механизме работает большинство бесплатных «эксплойт-меню DarkRP», которые люди скачивают. sv_allowupload 0 не позволяет клиентам загружать файлы на ваш сервер. Пустой rcon_password отключает RCON, который вам не нужен, потому что у вас есть консоль панели, - обоснование в статье безопасная работа с RCON.

Привычка - не ставить украденные платные аддоны. Утёкший скрипт - самый надёжный способ получить бэкдор на сервере Garry's Mod, а человек, выложивший его на форуме, не его автор. Как проверить то, что у вас уже стоит, описано в статье как держать сервер с модами чистым.

Производительность и устранение неполадок#

Профессии не появились. Ошибка Lua в jobs.lua. Читайте консоль с начала запуска, а не с конца.

Фиолетово-чёрные текстуры или знаки ERROR. Не хватает контента. Текстуры - из CS:S или из пакета материалов карты; модели ERROR - это аддон, который клиент не скачал. Загрузки клиентов - отдельная система, описанная в статье аддоны из мастерской и FastDL.

Деньги сбрасываются при каждом перезапуске. База не пишет. Либо sv.db недоступен для записи, либо включён MySQL, а модуль mysqloo отсутствует или не подходит.

Всё сломалось после обновления DarkRP. Что-то правили внутри gamemodes/darkrp/. Переустановите режим начисто, а изменение перенесите в darkrpmodification.

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

Стабильное падение при одном и том же числе игроков. Память, и, вероятно, дело в описанном выше 32-битном потолке, а не о лимите тарифа.

Повышение -tickrate стоит процессорного времени прямо пропорционально числу игроков и даёт меньше, чем ожидают, в режиме, где в основном стоят и разговаривают: честный разбор - в статье что на самом деле означает тикрейт. Лучше потратьте процессор на список аддонов.

На RE:NODE тариф Garry's Mod идёт с одним выделенным портом, который покрывает игровой порт и порт запросов 27015; если нужен SourceTV, добавьте ещё один на вкладке Network. Консоль не фильтруется, и именно там о себе заявляет сломанный аддон, файловый менеджер правит jobs.lua в браузере с подсветкой синтаксиса, а слоты резервных копий входят в каждый тариф - ими стоит пользоваться перед каждым изменением аддонов, потому что копия, которую никто не восстанавливал, - это гипотеза.

FAQ#

Нужен ли Counter-Strike: Source для сервера DarkRP?

Для обычных карт - да. rp_downtown_v4c_v2 и большинство классических RP-карт используют текстуры CS:S. Установите контент выделенного сервера CS:S через SteamCMD и смонтируйте его в cfg/mount.cfg либо выберите карту, которая поставляется со всем своим контентом.

Куда добавлять свои профессии?

В addons/darkrpmodification/lua/darkrp_customthings/jobs.lua через DarkRP.createJob. Никогда не внутрь gamemodes/darkrp/. Аддон изменений существует именно для того, чтобы обновления DarkRP не затирали вашу работу.

Что выбрать, ULX или SAM?

ULX бесплатен, хорошо документирован и подходит большинству серверов. SAM платный, хранит ранги в MySQL и легче в игре. В любом случае сначала отключите встроенный FAdmin от DarkRP, иначе они начнут спорить за одни и те же команды.

Сколько RAM нужно серверу DarkRP?

Два гигабайта для частного сервера с коротким списком аддонов, три-четыре для обычного публичного на 32 игрока. Выше этого ограничением обычно становится список аддонов, а 32-битный бинарный файл сервера всё равно остановит вас где-то около 3 ГБ.

Можно ли менять профессии без перезапуска?

Ненадёжно. Профессии регистрируются при загрузке режима, поэтому честный способ применить правки - смена карты или перезапуск. Привыкните собирать изменения конфигурации пакетом и перезапускаться один раз.

Почему у зашедших игроков не показываются аддоны сервера?

Потому что монтирование аддона на сервере и указание клиентам его скачать - две разные системы. Сервер запускает то, что лежит в addons/; клиенты получают только то, что им велят взять коллекция мастерской или resource.AddWorkshop.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000