Поиск по форуму
Введите запрос, чтобы найти нужную тему быстрее.
DayZ mapgrouppos.xml и mapgroupproto.xml: здания, лутпозиции и как убрать спавн с карты
# DayZ mapgrouppos.xml и mapgroupproto.xml: здания, лутпозиции и как убрать спавн с карты Эти два файла часто вспоминают, когда нужно глубже залезть в карту и понять, почему лут появляется именно в этих зданиях. Пути обычно такие: ```text mpmissions/dayzOffline.chernarusplus/mapgrouppos.xml mpmissions/dayzOffline.chernarusplus/mapgroupproto.xml ``` ## mapgrouppos.xml Этот файл описывает размещение групп объектов на карте. Проще говоря, где стоят здания/группы, к которым экономика может привязать лут. ## mapgroupproto.xml Этот файл описывает сами группы и позиции лута внутри них. Если грубо: - `mapgrouppos.xml` говорит “где находится объект”; - `mapgroupproto.xml` говорит “какие лутпозиции есть у объекта”. ## Почему это важно Если вы добавляете кастомные здания, экономика не всегда сама понимает, где внутри них должен появляться лут. Для нормального спавна нужны корректные группы и позиции. ## Кастомные объекты Для кастомных построек обычно делают так: 1. Ставят объект на карту. 2. Добавляют или обновляют позиции в `mapgrouppos.xml`. 3. Проверяют группу в `mapgroupproto.xml`. 4. Настраивают категории/usage через экономику. 5. Тестируют спавн в игре. ## Как убрать вообще весь спавн лута с карты Для RP/AOD-серверов это частая задача. Если лут должен выдаваться только через администрацию, роли, склады, квесты или трейдеров, обычный спавн нужно выключать системно. Не надо начинать с удаления `mapgrouppos.xml`. Это грубо и может дать побочные эффекты. Нормальный порядок: 1. В `types.xml` поставить `nominal 0` и `min 0` для предметов, которые не должны спавниться. 2. В `events.xml` выключить события, которые создают лут: вертолеты, машины, контейнеры, военные события. 3. В `cfgspawnabletypes.xml` убрать содержимое контейнеров и лишние attachments. 4. Проверить модовые economy-файлы, если они подключены через `cfgeconomycore.xml`. 5. Только если нужно полностью убрать лутпозиции зданий, работать с `mapgroupproto.xml`. ## Жесткий вариант Если задача именно “на карте не должно спавниться вообще ничего”, можно очистить или отключить лутовые группы в `mapgroupproto.xml`, но делать это нужно только с бэкапом. Почему осторожно: - после ошибки экономика может начать ругаться; - модовые здания могут вести себя странно; - обновления карты могут вернуть позиции; - потом сложно понять, что именно было удалено. ## Практичный RP-вариант Я бы делал так: - обычный лут выключен через `types.xml`; - события с лутом выключены; - нужные предметы выдаются через трейдера, склады, админов или квесты; - mapgroup-файлы не трогаются без необходимости. Так сервер проще обслуживать. Если потом захотите вернуть часть лута, не придется собирать карту заново. ## Проверка После отключения спавна: 1. Очистите storage/economy только если понимаете последствия. 2. Перезапустите сервер. 3. Подождите цикл экономики. 4. Проверьте города, военные зоны, промку, дома. 5. Проверьте события отдельно. Если на RP-сервере появился случайный автомат в доме, почти всегда это не “магия”, а забытый `types.xml`, `events.xml` или модовый economy-файл.
Enfusion Hub — менеджер серверов DayZ для Windows
# Enfusion Hub — менеджер серверов DayZ для Windows **Enfusion Hub** — бесплатная программа для установки, настройки и управления выделенными серверами DayZ через удобную локальную веб-панель. Программа самостоятельно устанавливает SteamCMD и DayZ Dedicated Server, помогает подключать моды Steam Workshop, управлять несколькими серверами, игроками и банами, настраивать автоматические перезапуски и следить за журналом работы. ## Скачать [**Скачать Enfusion Hub 1.0.5 для Windows**](/uploads/guides/enfusionhub-manager/EnfusionHub-1.0.5.zip) В архив входят: - `EnfusionHub.exe` — программа; - `EnfusionHub.exe.config` — обязательная конфигурация поддержки длинных путей Windows. Не удаляйте и не переименовывайте `.config`. Для работы необходимы Windows x64, интернет, права администратора и свободное место для DayZ-сервера и модификаций. ## Что умеет программа - автоматически устанавливать SteamCMD и DayZ Dedicated Server; - создавать и обслуживать несколько экземпляров сервера; - запускать, останавливать и восстанавливать сервер после сбоя; - редактировать основные параметры и полный `serverDZ.cfg`; - искать, устанавливать и обновлять моды Steam Workshop; - подключать клиентские и серверные модификации; - копировать ключи `.bikey`; - проверять обновления сервера и включённых модов; - настраивать автоматические перезапуски и предупреждения; - подключаться к BattlEye RCon; - показывать игроков онлайн, кикать и блокировать их; - вести список банов и найденных в логах игроков; - показывать диагностический журнал в отдельной прокручиваемой панели; - работать с русским и английским интерфейсом.  ## Установка и первый запуск ### 1. Создайте отдельную папку Например: ```text C:\EnfusionHub ``` Желательно использовать короткий путь без кириллицы и специальных символов. Не устанавливайте программу в `C:\Windows` или `C:\Program Files`. ### 2. Распакуйте архив В папке должны находиться оба файла: ```text EnfusionHub.exe EnfusionHub.exe.config ``` При первом запуске автоматически появятся рабочие каталоги: ```text manager — настройки и журналы server — файлы серверов DayZ tools — SteamCMD ``` ### 3. Запустите программу Запустите `EnfusionHub.exe` двойным щелчком и подтвердите запрос контроля учётных записей Windows. Права администратора нужны для управления процессами и настройки правил брандмауэра. Не закрывайте главное консольное окно во время работы: оно является серверной частью панели управления. ### 4. Авторизуйтесь в SteamCMD При первом входе откроется отдельное окно SteamCMD. Если Steam запросит пароль или Steam Guard, введите данные именно в этом окне и дождитесь успешной авторизации. После успешного входа SteamCMD сохраняет зашифрованную сессию и использует `cached credentials`. Обычные проверки сервера и модов не должны запрашивать код повторно. Steam Guard понадобится снова только при отзыве сессии, смене пароля, переносе программы на другой компьютер или удалении `tools\steamcmd\config\config.vdf`. ### 5. Откройте веб-панель После установки и проверки DayZ Dedicated Server браузер откроется автоматически: ```text http://127.0.0.1:8765/ ``` Если вкладка не появилась, откройте этот адрес вручную. Панель доступна локально на компьютере, где работает Enfusion Hub. ## Создание и управление серверами На странице **«Серверы»** можно создать новый экземпляр, открыть его настройки, запустить, остановить или удалить сервер. Каждый сервер получает отдельный каталог и собственную конфигурацию. Перед удалением обязательно сохраните нужные файлы миссии, профили и данные persistence. ## Настройка сервера В разделе **«Сервер»** доступны: - имя и описание; - пароль для игроков и администратора; - максимальное число игроков; - whitelist и проверка подписей; - голосовой чат, вид от третьего лица и прицел; - время сервера и его ускорение; - параметры очереди входа; - миссия и Instance ID; - игровой порт и число CPU-ядер; - диапазон UDP-портов брандмауэра; - дополнительные аргументы запуска. После изменения параметров нажмите **«Сохранить»**.  Опытные пользователи могут раскрыть редактор исходного `serverDZ.cfg` и изменить параметры вручную. Перед этим рекомендуется сохранить резервную копию: синтаксическая ошибка в конфигурации может помешать запуску сервера. ## Установка и настройка модов Откройте раздел **«Моды»**, введите название модификации или числовой Workshop ID и нажмите **«Поиск»**. При установке Enfusion Hub: 1. загружает мод через SteamCMD; 2. копирует файлы в каталог выбранного сервера; 3. переносит найденные `.bikey` в папку `keys`; 4. добавляет мод в список запуска; 5. учитывает его при автоматической проверке обновлений. Поддерживаются обычные клиентские моды через `-mod`, серверные моды через `-serverMod`, а также локальные каталоги `@Clientmod` и `@Servermod`. После изменения порядка или состояния модификаций нажмите **«Сохранить список модов»**.  ## Игроки, RCon и баны В разделе **«Игроки»** настройте BattlEye RCon: - IP: обычно `127.0.0.1`; - порт: должен совпадать с настройкой BattlEye; - пароль: должен совпадать с `RConPassword`; - включите переключатель RCon и сохраните настройки. После подключения можно просматривать игроков онлайн, кикать и блокировать их, создавать ручные баны по BE GUID, DayZ UID или IP и снимать активные блокировки.  Никому не передавайте RCon-пароль и не используйте простой пароль на публичном сервере. ## Автоматические перезапуски В разделе **«Авторестарты»** включите расписание и укажите время по одному значению на строку в формате `HH:mm`: ```text 00:00 06:00 12:00 18:00 ``` Отдельно задаётся количество минут предупреждения перед перезапуском. Используется локальное время Windows.  ## Порты и доступ из интернета Основной порт DayZ обычно `2302/UDP`. Сервер также использует соседние UDP-порты. Если сервер не отображается у игроков: 1. проверьте правила брандмауэра Windows; 2. настройте проброс UDP-портов на роутере; 3. убедитесь, что провайдер выдаёт публичный IP; 4. проверьте, не занят ли порт другим экземпляром сервера. ## Журналы и диагностика Диагностические файлы находятся в: ```text manager\logs ``` Основные журналы: - `launcher-YYYYMMDD-HHMMSS.log` — запуск программы и SteamCMD; - `manager-YYYYMMDD.log` — веб-панель, серверные процессы и фоновые операции; - `auto-update-*.log` — автоматические проверки обновлений. Кнопка **«Очистить»** в веб-интерфейсе очищает текущий буфер отображения, но не удаляет диагностические файлы с диска. ## Безопасность Данные Steam сохраняются в `manager\steam-auth.json`. Пароль защищён Windows DPAPI и привязан к текущей учётной записи Windows. Не публикуйте и не передавайте другим людям: - папку `manager`; - `steam-auth.json`; - пароль RCon; - приватные конфигурации и журналы сервера. Для администрирования рекомендуется использовать отдельную Steam-учётную запись с необходимым доступом к Workshop. ## Если что-то не работает **SteamCMD выглядит зависшим** — проверьте его отдельное окно: оно может ожидать пароль или Steam Guard либо проверять несколько гигабайт файлов. **Панель не открылась** — вручную перейдите на `http://127.0.0.1:8765/` и убедитесь, что консоль Enfusion Hub не закрыта. **Сервер не запускается** — проверьте `manager\logs`, синтаксис `serverDZ.cfg`, выбранную миссию, список модов и занятость портов. **Моды не обновляются** — проверьте сохранённую Steam-сессию, Workshop ID, интернет, свободное место и последние `auto-update-*.log`. --- Enfusion Hub распространяется бесплатно. Сообщения об ошибках и предложения по развитию программы можно оставлять в этой теме.
DayZ script.log: как читать ошибки и не паниковать из-за каждой строки
# DayZ script.log: как читать ошибки и не паниковать из-за каждой строки Когда сервер не запускается, лагает после старта или какой-то мод ведет себя странно, первым делом почти все лезут в `script.log`. И вот тут начинается боль: строк много, половина красная, везде какие-то `FIX-ME`, `Missing`, `NULL pointer`, названия модов, обфусцированные папки и ощущение, что сервер сейчас развалится. На деле не каждая страшная строка в `script.log` является причиной проблемы. В этом гайде разберем, на что смотреть в первую очередь, что можно временно пропустить и как читать лог по-человечески. ## Где лежит script.log Обычно он лежит в папке профилей сервера: ```text profiles/script_год-месяц-день_час-минута-секунда.log ``` Пример: ```text profiles/script_2026-07-27_13-59-38.log ``` Если у вас в параметрах запуска указано `-profiles=profiles`, значит лог будет внутри этой папки. Если путь другой, ищите там. ## Сначала смотрим, сервер вообще дошел до миссии или нет В нормальном запуске ближе к концу лога можно увидеть что-то вроде: ```text [MissionServer] OnInit - Server [MissionServer] OnMissionStart - Server [MissionServer] OnMissionLoaded - Server ``` Если `OnMissionLoaded` есть, сервер хотя бы дошел до загрузки миссии. Это не значит, что все идеально, но это уже не ситуация “сервер умер на первой секунде”. Если лог обрывается до загрузки мира, тогда ищем последнюю ошибку перед обрывом. Обычно причина рядом. ## Самые важные строки В первую очередь ищем: ```text SCRIPT (E) Virtual Machine Exception Reason: Stack trace: NULL pointer to instance Cannot open file Can't compile Unknown type Undefined function Bad type ``` Вот это уже не декоративный шум. Особенно если после ошибки сервер крашится, не пускает игроков или ломается конкретная система. ## Как читать Virtual Machine Exception Пример из живого лога: ```text SCRIPT (E): Virtual Machine Exception Reason: NULL pointer to instance Class: 'StashSearchManager' Function: 'ReadStashSearchConfig' Stack trace: StashSearchServer/Scripts/4_World/stashsearchserver/plugins/pluginbase/stashmanager.c:70 Function ReadStashSearchConfig ``` Читаем не сверху вниз, а по смыслу: `Reason` - что случилось. `Class` - в каком классе. `Function` - какая функция упала. `Stack trace` - путь, где это произошло. В этом примере проблема не в ванильном DayZ и не в карте. Ошибка идет от мода `StashSearchServer`, функция читает конфиг тайников и ловит `NULL pointer`. Человеческий перевод: мод ожидал получить какие-то данные из конфига, но получил пустоту. Часто это бывает из-за пустого JSON, неправильной структуры файла, отсутствующего поля, битого конфига или несовместимой версии мода и его настроек. ## NULL pointer - это важно ```text Reason: NULL pointer to instance ``` Это значит, что скрипт пытается обратиться к объекту, которого нет. Например: - конфиг не загрузился; - нужный массив пустой; - файл есть, но внутри неверная структура; - мод ждет объект, который не был создан; - порядок модов или зависимостей неправильный; - старая конфигурация осталась после обновления мода. Если `NULL pointer` повторяется несколько раз в одном и том же моде, это уже кандидат номер один на проверку. В моем примере `StashSearchServer` ругается сразу на несколько функций: ```text ReadStashSearchConfig ReadStashGiftConfig ReadTypedStashConfig ReadStashSkillConfig GetTotalSkillSearches ``` Значит, я бы первым делом проверял именно конфиги `StashSearchServer`: созданы ли они, не пустые ли, подходят ли под текущую версию мода, не слетели ли после обновления. ## Явная ошибка настройки Еще один пример: ```text [VPPAdminTools] Error parsing credentials.txt! Please input a valid password, with no // at the start of the line! ``` Вот это очень понятная ошибка. `VPPAdminTools` не смог прочитать `credentials.txt`. Что проверить: - файл `credentials.txt` существует; - пароль указан без `//` в начале строки; - нет лишних комментариев в строке с паролем; - файл лежит там, где его ждет VPP; - после изменения сервер был перезапущен. Такую ошибку не надо философски трактовать. Лог прямо сказал, что ему не нравится. ## Ошибки доступа к папкам Пример: ```text [RD_Admin] Radiation directory is empty or DayZ Server have not access to this [RD_Admin] Resist directory is empty or DayZ Server have not access to this ``` Тут два варианта: 1. папка реально пустая; 2. серверный процесс не может прочитать эту папку. Проверяем путь, наличие файлов и права доступа. Особенно если сервер запущен не от того пользователя, под которым вы редактировали файлы. Если мод дальше пишет, что часть конфигов загрузилась, значит проблема может быть не смертельная, но игнорировать ее полностью я бы не стал. Такие вещи потом всплывают странным поведением зон, радиации, резистов и прочей логики. ## Что можно не чинить сразу В DayZ-модах очень часто встречаются предупреждения: ```text FIX-ME: Overriding function but not marked as override FIX-ME: Method argument can't be strong reference Possible variable name conflict No need to use Cast for up-casting Missing ';' at the end of line ``` Звучит страшно, но не всегда является причиной падения сервера. Если сервер запускается, игроки заходят, нужная механика работает, а эти предупреждения идут от известных Workshop-модов, то сначала лучше не лезть в них руками. Часто это особенности старого кода мода, обфускации или предупреждения компилятора, которые автор мода давно тащит за собой. Но есть оговорка: если после обновления DayZ или мода таких предупреждений стало больше, а механика сломалась, тогда уже смотрим внимательнее. ## Что нельзя пропускать Я бы не пропускал: - `SCRIPT (E)`; - `Virtual Machine Exception`; - `NULL pointer to instance`; - ошибки чтения JSON/XML; - ошибки конкретного конфига; - `Cannot open file`; - `Can't compile`; - ошибки в вашем `init.c`; - ошибки в моде, который отвечает за ключевую механику сервера; - повторяющуюся ошибку на каждом входе игрока. Повторяющаяся ошибка хуже одиночной. Одиночная могла вылезти при инициализации и не мешать. А вот если она сыпется постоянно, сервер будет страдать. ## Как понять, какой мод виноват Смотрите на путь в stack trace. Пример: ```text StashSearchServer/Scripts/4_World/... ``` Почти наверняка разбираемся с `StashSearchServer`. Другой пример: ```text CodeLock/scripts/4_world/... ``` Смотрим CodeLock. Еще пример: ```text $CurrentDir:mpmissions/DayZ.dz_map/init.c:98 ``` Вот это уже ваша миссия и ваш `init.c`. Если ошибка приходит сюда, надо смотреть строку рядом с указанной. ## Как я обычно разбираю лог Мой порядок такой: 1. Открываю самый свежий `script_*.log`. 2. Иду в конец файла и смотрю, дошел ли сервер до `OnMissionLoaded`. 3. Ищу `SCRIPT (E)` и `Virtual Machine Exception`. 4. Смотрю `Reason`, потом `Class`, потом первый путь в `Stack trace`. 5. Если ошибка из мода, проверяю конфиги этого мода и его зависимости. 6. Если ошибка из `init.c`, открываю указанную строку и последние правки. 7. Если ошибка повторяется при входе игрока, чиню ее в первую очередь. 8. Только потом смотрю предупреждения `SCRIPT (W)`. ## Что делать после исправления После правки не надо смотреть старый лог и ждать, что он сам исправится. Делайте так: 1. Остановить сервер. 2. Переименовать старый `script.log` или просто запомнить время. 3. Запустить сервер заново. 4. Открыть новый `script_*.log`. 5. Проверить, исчезла ли конкретная ошибка. Если ошибка исчезла, но появились новые ниже по логу, это нормально. Иногда сервер просто не доходил до следующей проблемы, пока вы не починили первую. ## По конкретному примеру Если брать лог с ошибками: ```text StashSearchManager ReadStashSearchConfig ReadStashGiftConfig ReadTypedStashConfig ReadStashSkillConfig GetTotalSkillSearches ``` Я бы начал с `StashSearchServer`: - проверить папку конфигов мода в профилях; - удалить временно сгенерированные конфиги только если есть бэкап; - сверить конфиги с актуальной версией мода; - проверить, не обновился ли мод без обновления серверной части; - проверить порядок зависимостей; - посмотреть, не требует ли мод обязательные поля, которых нет в старом JSON. Параллельно стоит поправить `VPPAdminTools credentials.txt`, потому что там ошибка явная и простая. ## Итог `script.log` не надо читать как список всего, что срочно сломано. Его надо читать как след. Главное правило простое: сначала ошибки `SCRIPT (E)` и stack trace, потом конкретные конфиги модов, потом ваш `init.c`, и только после этого предупреждения. Большая часть `FIX-ME` в модовом сервере может жить месяцами, а один `NULL pointer` в нужном месте будет ломать механику каждый рестарт. И да, перед любой правкой конфига делайте бэкап. Это скучно ровно до первого вечера, когда он спасает сервер.
DayZ cfgeconomycore.xml: подключение модовой экономики
# DayZ cfgeconomycore.xml: подключение модовой экономики `cfgeconomycore.xml` говорит серверу, какие economy-файлы использовать. Через него подключают стандартные `types.xml`, события, spawnabletypes и отдельные файлы модов. Путь: ```text mpmissions/dayzOffline.chernarusplus/cfgeconomycore.xml ``` ## Пример стандартного блока ```xml <ce folder="db"> <file name="types.xml" type="types" /> <file name="events.xml" type="events" /> <file name="spawnabletypes.xml" type="spawnabletypes" /> </ce> ``` ## Подключение отдельной папки ```xml <ce folder="custom"> <file name="types_custom.xml" type="types" /> <file name="events_custom.xml" type="events" /> </ce> ``` Так удобнее держать свои изменения отдельно от стандартных файлов. ## Зачем выносить моды отдельно Потому что потом проще обновляться. Если вы все запихнули в один огромный `types.xml`, через месяц уже непонятно, где ваниль, где мод, где ваша правка, а где случайно скопированная строка. ## Для RP/AOD без обычного лута Это очень важный файл. Вы можете выключить ванильный лут в основном `types.xml`, но мод может подключать свой economy-файл через `cfgeconomycore.xml`. И тогда на карте снова появятся вещи. Проверяйте все подключенные папки: - `db`; - `custom`; - папки модов; - economy-паки от сборок; - файлы, которые добавлялись “временно”. ## Как отключить модовый лут Варианты: 1. Убрать подключение файла из `cfgeconomycore.xml`. 2. В самом модовом `types` поставить `nominal 0` и `min 0`. 3. Оставить только нужные предметы. Я обычно предпочитаю второй вариант: файл остается на месте, но лут явно выключен. ## Частая ошибка После установки мода забывают подключить его `types.xml`, а потом предметы есть в админке, но не появляются на карте. И обратная ситуация: хотели убрать лут, но забыли, что модовый файл все еще подключен. ## Итог `cfgeconomycore.xml` - это список источников экономики. Если вы не знаете, что в нем подключено, вы не контролируете экономику сервера.
DayZ cfgrandompresets.xml: случайные наборы предметов
# DayZ cfgrandompresets.xml: случайные наборы предметов `cfgrandompresets.xml` используется для случайных наборов. Его часто связывают с `cfgspawnabletypes.xml`, чтобы контейнеры, аптечки, магазины или другие предметы появлялись с разным содержимым. ## Зачем он нужен Без пресетов все быстро становится одинаковым. С пресетами можно сделать: - разные аптечки; - случайное содержимое ящиков; - разные наборы еды; - наборы инструментов; - вариации стартового/ивентового лута. ## Пример идеи пресета ```xml <cargo chance="0.70" name="starter_food"> <item name="Apple" chance="0.50" /> <item name="Pear" chance="0.30" /> <item name="SodaCan_Cola" chance="0.20" /> </cargo> ``` Структура может отличаться в зависимости от файла и версии, поэтому смотрите существующие записи вашей миссии и повторяйте их стиль. ## Как использовать В `cfgspawnabletypes.xml` можно сослаться на пресет: ```xml <type name="DryBag_Red"> <cargo preset="starter_food" /> </type> ``` ## Для RP-сервера На RP/AOD такие пресеты удобно использовать не для обычного спавна, а для контролируемых сценариев: - стартовый набор новичка; - полицейский склад; - медицинская поставка; - гуманитарный груз; - квестовый контейнер. То есть не “все на карте случайно”, а “админ или система создала ящик, а внутри логичный набор”. ## Баланс Не делайте пресеты слишком жирными. Если каждый ящик дает полный комплект, экономика быстро перестает иметь смысл. ## Частые ошибки - неверное имя пресета; - неверное имя предмета; - шанс больше `1.0`; - пресет есть, но нигде не используется; - предмет из мода не подключен в types. `cfgrandompresets.xml` - хороший инструмент, когда хочется разнообразия, но без хаоса.
DayZ BEServer_x64.cfg и RCon: подключение админки без дыр в безопасности
# DayZ BEServer_x64.cfg и RCon: подключение админки без дыр в безопасности RCon нужен, чтобы внешняя админка или мониторинг могли общаться с сервером: смотреть игроков, отправлять команды, получать статус. Файл обычно лежит в профиле BattlEye: ```text profiles/BattlEye/BEServer_x64.cfg ``` ## Пример ```cfg RConPassword your-very-strong-password RConPort 2305 ``` ## RConPassword Пароль должен быть уникальным. Не используйте: - пароль от сайта; - пароль от почты; - пароль администратора Windows; - старый пароль из гайда; - короткие слова. ## RConPort Порт, на котором BattlEye принимает RCon-подключения. Важно открыть порт в firewall только если это действительно нужно. Еще лучше ограничить доступ по IP, если админка стоит на конкретном сервере. ## Безопасность Минимум: - длинный пароль; - отдельный пароль только для RCon; - закрытый firewall; - доступ только с нужных IP; - не публиковать конфиг; - не отправлять пароль в Discord без необходимости. ## Если админка не подключается Проверьте: 1. Сервер запущен. 2. BattlEye включен. 3. Файл лежит в правильной папке профиля. 4. Порт открыт. 5. Пароль совпадает. 6. Админка использует правильный IP и порт. 7. Нет второго старого `BEServer_x64.cfg` в другой папке. ## Частая ошибка На сервере несколько профилей, а вы редактируете не тот `BEServer_x64.cfg`. В итоге в файле все красиво, но игра использует другой конфиг. ## Для RP/AOD На RP-сервере RCon особенно полезен: - контроль онлайна; - быстрый кик проблемных игроков; - интеграция с сайтом; - мониторинг статуса; - автоматизация некоторых действий. Но RCon - это административный доступ. Относитесь к нему как к ключу от серверной, а не как к обычной настройке.
DayZ serverDZ.cfg: базовая настройка сервера
# DayZ serverDZ.cfg: базовая настройка сервера `serverDZ.cfg` - главный конфиг самого сервера. Не миссии, не лута, а именно серверных правил: название, пароль, слоты, вид от третьего лица, логи, BattlEye и прочее. ## Что обычно находится в serverDZ.cfg ```cfg hostname = "My DayZ Server"; password = ""; passwordAdmin = "strong-admin-password"; maxPlayers = 60; verifySignatures = 2; forceSameBuild = 1; disableVoN = 0; vonCodecQuality = 20; disable3rdPerson = 0; disableCrosshair = 1; serverTime = "SystemTime"; serverTimeAcceleration = 4; serverNightTimeAcceleration = 8; loginQueueConcurrentPlayers = 5; loginQueueMaxPlayers = 500; instanceId = 1; storageAutoFix = 1; ``` ## hostname Название сервера в списке. Не делайте название на 200 символов. Игроки все равно читают первые слова. ## password Пароль для входа на сервер. Если сервер публичный, оставляйте пустым. ## passwordAdmin Админ-пароль. Его нельзя делать простым. Не используйте пароль от сайта, почты или RCON. ## maxPlayers Количество слотов. Не ставьте 100 просто потому что хочется. Если железо и моды не вывозят, сервер будет страдать. ## verifySignatures Проверка подписей модов. Обычно: ```cfg verifySignatures = 2; ``` Отключать это на публичном сервере плохая идея. ## disable3rdPerson `0` - третье лицо включено. `1` - третье лицо отключено. ## serverTimeAcceleration Ускорение времени днем. ## serverNightTimeAcceleration Ускорение ночи. Часто ночь делают быстрее, чтобы игроки не сидели по домам полчаса. ## storageAutoFix Может помочь при некоторых проблемах storage, но не воспринимайте это как замену бэкапам. ## Для RP-сервера RP-серверу обычно важны: - понятное название; - whitelist или пароль на этапе тестов; - стабильное время; - нормальный VoN; - строгие подписи модов; - понятные правила входа. ## Частая ошибка Меняют конфиг, но сервер запускается с другим файлом. Всегда проверяйте параметры запуска и путь к `serverDZ.cfg`. ## Совет Храните рядом копию рабочего конфига. Когда сервер внезапно перестал отображаться или пускать игроков, проще сравнить два файла, чем вспоминать, что вы меняли ночью.
DayZ types.xml: экономика лута без лишней магии
# DayZ types.xml: экономика лута без лишней магии Если коротко: `types.xml` отвечает за то, какие предметы появляются на карте, сколько их должно быть и по каким правилам сервер их пересоздает. Это один из тех файлов, который все трогают, но не все понимают. А потом начинается классика: еды нет, автоматов слишком много, гвозди пропали, палатки не появляются, а в логах тишина. ## Где лежит файл ```text mpmissions/dayzOffline.chernarusplus/db/types.xml ``` На других картах путь будет такой же, но папка миссии может называться иначе. ## Пример записи предмета ```xml <type name="NailBox"> <nominal>70</nominal> <lifetime>14400</lifetime> <restock>0</restock> <min>35</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="tools"/> <usage name="Industrial"/> </type> ``` ## nominal Сколько предметов экономика хочет держать на карте. Если `nominal` стоит `70`, это не значит, что игрок прямо сейчас найдет 70 коробок гвоздей. Это цель экономики, а не гарантия. ## min Минимальное количество. Когда предметов становится меньше этого значения, экономика начинает пытаться восполнить спавн. ## lifetime Сколько предмет живет в мире, если его никто не трогает. Пример: ```xml <lifetime>14400</lifetime> ``` Это 4 часа. ## restock Задержка перед повторным спавном. Часто оставляют `0`, но на редких предметах можно делать задержку. ## quantmin и quantmax Количество внутри предмета. Например, сколько воды в бутылке или сколько процентов еды. ```xml <quantmin>20</quantmin> <quantmax>80</quantmax> ``` Если предмет не имеет количества, ставят `-1`. ## flags Вот тут многие ломают баланс. `count_in_map="1"` - считать предметы, лежащие на карте. `count_in_player="1"` - считать предметы у игроков. `count_in_cargo="1"` - считать предметы внутри контейнеров, машин, ящиков. `count_in_hoarder="1"` - считать предметы в хранилищах. `crafted="1"` - предмет крафтовый. `deloot="1"` - динамический/ивентовый лут. Если поставить счет в игроках и хранилищах, редкий предмет может перестать появляться, потому что сервер видит: “он уже есть у людей”. ## category, usage, value `category` - тип предмета: оружие, одежда, еда, инструменты. `usage` - где предмет может появляться: Industrial, Military, Farm, Town и так далее. `value` - дополнительная зона ценности, если карта использует такие зоны. ## Нужно ли настраивать types.xml на RP/AOD-сервере без спавна лута? Да, но не всегда так, как на обычном survival-сервере. Если у вас RP-сервер, где лут не должен спавниться на карте, а все выдается через админов, трейдеров, квесты, склады или экономику проекта, то `types.xml` все равно лучше привести в порядок. Почему: - некоторые предметы могут продолжать появляться через стандартную экономику; - модовые предметы могут иметь свои типы; - события могут подтягивать предметы из экономики; - после обновления мода лут может внезапно вернуться; - проще контролировать сервер, когда все явно отключено. ## Как отключать спавн предмета Самый грубый вариант: ```xml <nominal>0</nominal> <min>0</min> ``` Так предмет не должен появляться через обычную экономику. ## Как сделать почти весь лут выключенным Для RP/AOD-подхода обычно делают так: 1. Оставляют нужные технические предметы. 2. Отключают весь обычный survival-лут через `nominal 0` и `min 0`. 3. Лут выдают через трейдера, админов, квесты, кастомные контейнеры или события. 4. Проверяют, не спавнят ли предметы моды отдельно. ## Важный момент Не удаляйте все записи из `types.xml` без понимания. Лучше отключать через значения. Удаленный тип потом сложнее вернуть, а некоторые моды ожидают, что запись существует. ## Мой совет Для обычного сервера `types.xml` - это баланс. Для RP-сервера без лута `types.xml` - это выключатель хаоса. Если вы хотите, чтобы экономика была под контролем, не оставляйте этот файл “как-нибудь потом”. Потом обычно начинается самое интересное.
DayZ cfggameplay.json: полный разбор настроек
# DayZ cfggameplay.json: полный разбор настроек `cfggameplay.json` - файл настроек геймплея миссии. Он лежит рядом с `init.c`: ```text mpmissions/dayzOffline.chernarusplus/cfggameplay.json ``` Чтобы сервер использовал этот файл, в параметрах запуска обычно должен быть включен gameplay config. ## Что можно настраивать В зависимости от версии DayZ файл может содержать разные секции, но чаще всего встречаются: - `GeneralData`; - `PlayerData`; - `WorldsData`; - `BaseBuildingData`; - `UIData`; - `MapData`; - `VehicleData`. ## GeneralData Общие параметры поведения сервера и мира. Примеры того, что здесь может встречаться: - включение/отключение некоторых систем; - настройки взаимодействия с миром; - глобальные параметры симуляции. ## PlayerData Настройки игрока: - выносливость; - вес; - повреждения; - поведение камеры; - ограничения действий. Если делаете казуальный PvE-сервер, параметры игрока можно сделать мягче. Если хардкор - наоборот. ## WorldsData Настройки карты и мира. Сюда могут относиться параметры окружения, объектов и поведения мира. ## BaseBuildingData Настройки строительства: - ограничения постройки; - столкновения; - размещение объектов; - правила демонтажа. Для PvE обычно дают больше свободы. Для PvP лучше держать строгие ограничения, иначе игроки быстро найдут способы строить нечестные базы. ## UIData Настройки интерфейса. Например, элементы HUD, подсказки, маркеры и отображение информации. ## MapData Настройки карты: - доступность карты; - отображение позиции игрока; - маркеры; - навигационные элементы. Пример логики: - хардкор: позицию игрока не показывать; - PvE: можно показать позицию и маркеры; - RP: зависит от концепции сервера. ## VehicleData Параметры транспорта, если они доступны в вашей версии файла. ## Как редактировать безопасно 1. Сделайте копию `cfggameplay.json`. 2. Меняйте один блок за раз. 3. Проверяйте JSON на валидность. 4. Перезапускайте сервер. 5. Проверяйте `script.log` и поведение в игре. ## Частые ошибки - лишняя запятая в JSON; - неправильный тип значения: строка вместо числа; - параметр из другой версии DayZ; - включили настройку, но забыли параметр запуска сервера; - скопировали чужой файл целиком и потеряли настройки своей карты. ## Пример подхода Не пытайтесь сразу сделать “идеальный” `cfggameplay.json`. Лучше идти блоками: 1. Сначала карта и UI. 2. Потом строительство. 3. Потом параметры игрока. 4. Потом транспорт и дополнительные механики. Так проще понять, какая настройка реально изменила поведение сервера.
DayZ init.c: случайная стартовая экипировка
# DayZ init.c: случайная стартовая экипировка Случайная стартовая экипировка делает начало игры живее. Игроки не появляются одинаковыми клонами, а получают один из нескольких наборов. ## Базовый пример ```c override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { player.RemoveAllItems(); int roll = Math.RandomIntInclusive(1, 3); if (roll == 1) GiveMedicStart(player); else if (roll == 2) GiveHunterStart(player); else GiveCivilianStart(player); } ``` ## Набор медика ```c void GiveMedicStart(PlayerBase player) { player.GetInventory().CreateInInventory("ParamedicJacket_Blue"); player.GetInventory().CreateInInventory("ParamedicPants_Blue"); player.GetInventory().CreateInInventory("AthleticShoes_Black"); player.GetInventory().CreateInInventory("BandageDressing"); player.GetInventory().CreateInInventory("BandageDressing"); player.GetInventory().CreateInInventory("Apple"); } ``` ## Набор охотника ```c void GiveHunterStart(PlayerBase player) { player.GetInventory().CreateInInventory("HuntingJacket_Brown"); player.GetInventory().CreateInInventory("HunterPants_Brown"); player.GetInventory().CreateInInventory("HikingBootsLow_Beige"); player.GetInventory().CreateInInventory("HuntingKnife"); player.GetInventory().CreateInInventory("Compass"); } ``` ## Гражданский набор ```c void GiveCivilianStart(PlayerBase player) { player.GetInventory().CreateInInventory("Hoodie_Black"); player.GetInventory().CreateInInventory("Jeans_Blue"); player.GetInventory().CreateInInventory("AthleticShoes_Grey"); player.GetInventory().CreateInInventory("KitchenKnife"); player.GetInventory().CreateInInventory("SodaCan_Cola"); } ``` ## Предмет с количеством ```c ItemBase water = ItemBase.Cast(player.GetInventory().CreateInInventory("WaterBottle")); if (water) water.SetQuantity(500); ``` ## Предмет с состоянием ```c ItemBase knife = ItemBase.Cast(player.GetInventory().CreateInInventory("KitchenKnife")); if (knife) knife.SetHealth("", "", 80); ``` ## Баланс Не выдавайте слишком сильный стартовый лут. Хороший стартовый набор должен помочь игроку начать, но не заменить поиск ресурсов. Оптимальный старт: - 1 комплект простой одежды; - 1 еда или напиток; - 1 бинт; - простой нож или инструмент; - иногда карта/компас. ## Частая ошибка Если предмет не помещается в одежду, он может не появиться. Сначала выдавайте одежду и рюкзак, потом предметы.
DayZ events.xml: события, вертолеты, машины и динамический спавн
# DayZ events.xml: события, вертолеты, машины и динамический спавн `events.xml` управляет событиями на карте. Это не только вертолеты. Через события работают машины, зараженные, животные, dynamic events, полиция, военные места и много чего еще. Файл лежит тут: ```text mpmissions/dayzOffline.chernarusplus/db/events.xml ``` ## Пример события ```xml <event name="StaticHeliCrash"> <nominal>3</nominal> <min>1</min> <max>3</max> <lifetime>2500</lifetime> <restock>0</restock> <saferadius>1000</saferadius> <distanceradius>1000</distanceradius> <cleanupradius>1000</cleanupradius> <flags deletable="1" init_random="0" remove_damaged="1"/> <position>fixed</position> <limit>child</limit> <active>1</active> <children> <child lootmax="10" lootmin="5" max="3" min="1" type="Wreck_Mi8_Crashed"/> </children> </event> ``` ## nominal, min, max `nominal` - сколько событий сервер хочет держать. `min` - ниже какого числа надо пытаться восстановить событие. `max` - максимум активных событий. ## lifetime Сколько событие живет, прежде чем будет удалено. ## saferadius Радиус безопасности. Событие не должно появляться слишком близко к игрокам. ## distanceradius Минимальная дистанция между событиями одного типа. ## cleanupradius Радиус очистки вокруг события после его завершения. ## active `1` - событие включено. `0` - событие выключено. Для RP-серверов это удобно: можно полностью отключить вертолеты, полицейские аварии или лишние динамические объекты. ## position `fixed` - событие использует заданные позиции из файлов карты. `player` - событие может зависеть от игроков. `custom` и другие варианты зависят от типа события и карты. ## children Дочерние объекты события. Например, какой именно вертолет или машина появится. ## Как отключить событие Самый понятный способ: ```xml <active>0</active> ``` Можно еще поставить: ```xml <nominal>0</nominal> <min>0</min> <max>0</max> ``` ## Для RP/AOD без свободного лута Если на сервере не должно быть случайных халявных источников лута, проверьте события особенно внимательно. Отключайте или переделывайте: - вертолетные крушения; - полицейские машины; - военные события; - события с контейнерами; - события модов, которые создают предметы. Иначе можно отключить лут в `types.xml`, но игроки все равно будут находить вещи через события. ## Частая ошибка Меняют `types.xml`, но забывают `events.xml`. Потом спрашивают: “откуда на карте оружие, если я его выключил?” Ответ часто именно здесь. ## Как проверять После правки: 1. Перезапустите сервер. 2. Посмотрите логи economy. 3. Подождите цикл спавна. 4. Проверьте места событий в игре или через админ-инструменты. События - это отдельная жизнь сервера. Если вы делаете серьезный проект, их нельзя оставлять на автопилоте.
DayZ init.c: полное описание основных функций
# DayZ init.c: полное описание основных функций `init.c` - это главный скрипт миссии, который выполняется сервером при запуске и при создании персонажей. Именно здесь чаще всего делают стартовый лут, кастомный спавн и серверную инициализацию. ## main() Функция `main()` вызывается при запуске миссии. Типичный пример: ```c void main() { Hive ce = CreateHive(); if (ce) ce.InitOffline(); } ``` `CreateHive()` создает economy-систему, а `InitOffline()` запускает экономику миссии. Без этого лут, события и часть серверной экономики могут работать неправильно. ## CreateCustomMission() Эта функция возвращает класс миссии. ```c Mission CreateCustomMission(string path) { return new CustomMission(); } ``` Если вы создаете свой класс `CustomMission`, сервер должен вернуть именно его. ## class CustomMission: MissionServer Класс, где обычно переопределяют серверную логику. ```c class CustomMission: MissionServer { override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) { Entity playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE"); Class.CastTo(m_player, playerEnt); GetGame().SelectPlayer(identity, m_player); return m_player; } override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { player.RemoveAllItems(); player.GetInventory().CreateInInventory("TShirt_Black"); player.GetInventory().CreateInInventory("Jeans_Black"); player.GetInventory().CreateInInventory("AthleticShoes_Black"); } } ``` ## CreateCharacter() Отвечает за создание персонажа. Здесь можно изменить позицию спавна, направление, тип персонажа и дополнительные параметры. Самое важное: - `identity` - игрок; - `pos` - позиция спавна; - `characterName` - модель персонажа; - `GetGame().CreatePlayer(...)` создает персонажа; - `GetGame().SelectPlayer(...)` привязывает игрока к созданному персонажу. ## StartingEquipSetup() Вызывается при выдаче стартового снаряжения. Здесь обычно делают: - удаление стандартных вещей; - выдачу одежды; - выдачу еды, ножа, карты, бинтов; - рандомные наборы; - разные наборы для разных сценариев. ## GetGame().CreateObject() Создает объект в мире. ```c Object obj = GetGame().CreateObject("Apple", "7500 0 7500", false, true); ``` Для предметов в инвентаре лучше использовать `CreateInInventory()`. ## GetInventory().CreateInInventory() Создает предмет внутри инвентаря игрока или другого предмета. ```c ItemBase knife = ItemBase.Cast(player.GetInventory().CreateInInventory("KitchenKnife")); ``` ## EntityAI и ItemBase `EntityAI` - базовый тип для игровых объектов с инвентарем. `ItemBase` удобен для предметов, у которых можно менять количество, здоровье и другие параметры. Пример: ```c ItemBase apple = ItemBase.Cast(player.GetInventory().CreateInInventory("Apple")); if (apple) apple.SetQuantity(100); ``` ## Ошибки, которые часто ломают init.c - лишняя или пропущенная фигурная скобка; - неправильное имя класса предмета; - попытка положить большой предмет в маленькую одежду; - копирование кода из разных гайдов без объединения классов; - несколько `CreateCustomMission()` в одном файле. ## Совет После каждого изменения `init.c` проверяйте `script.log`. Если сервер не стартует после правки, почти всегда причина видна там: строка, класс, ошибка компиляции или неверный тип.