Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a theme in the appropriate section
    No need to write everything in the chat!
  • Sell or buy?

    Use the services of a guarantor
    We will make your transaction safe
  • Don't want a BAN?

    Please read our rules
    Don't disturb the order
  • Visit the market

    There you can sell or buy
    Everything related to game servers
123new

Авторестартер для сервера

Recommended Posts

Господа, ну я сильно удивлен, что такие вещи, как авторестарт сервера многим даются сложно для понимания. Ведь все довольно легко, да и способов море в сети.

Опишу в теме парочку своих способов.

 

Способ I:

1. Создаем в папке с сервером игры файл с именем 'AutoRestartScript.bat' и заполняем его следующими данными:

@echo off
cd /d %~dp0
::CODE FILE UTF-8 + Russian OEM 866
::: Здесь указываем имя серверного exe (обязательно, он проверяется на запущенность)
set PROC_SERVER=DayZServer_x64.exe
::: Здесь указываем параметры запуска сервера для запуска сервера с exe напрямую
set PROC_SERVER_PARAMS=-port=2302 -config=Instance_1\server.cfg -cfg=Instance_1\basic.cfg -profiles=Instance_1 -user=Instance_1 -name=Server -nologs -adminlog -freezecheck -noFilePatching
::: Здесь указываем путь до папки с сервером
set Patch_server=C:\servers\DayZServer_063
::: Здесь указываем имя файла, в который будут писаться логи рестарта
set LOGFILE=log_restarter_server.txt
::: Здесь указываем время между проверками на запущенность процесса сервера (в секундах)
set TIME_CHECK=60

::: Указываем 1 если хотим запускать сервер в режиме запуска через SmartSteamEmu
set Start_server_with_smartsteamemu=1
::: Указываем путь до папки с SmartSteamLoader
set NAME_DIR_smartsteamemu=C:\servers\DayZServer_063\SmartSteamEmu
::: Указываем имя запускаемого файла SmartSteamLoader
set NAME_LOADER_smartsteamemu=SmartSteamLoader_x64.exe
::: Указываем путь и имя конфиг-файла SmartSteamLoader
set NAME_CONFIG_smartsteamemu=C:\servers\DayZServer_063\SmartSteamEmu\Test_config.ini

::: Указываем 1 если хотим контролировать BEC на запущенность (чтобы вкл. параметры ниже указать 1)
set Use_BEC_AutoRestarter=1
::: Здесь указываем имя BEC exe
set PROC_BEC=Bec_063.exe
::: Здесь указываем параметры запуска BEC
set PROC_BEC_PARAMS=--dsc -f config.cfg
::: Здесь указываем путь до папки с BEC
set Patch_bec=C:\servers\DayZServer_063\Instance_1\bec

::: ДАЛЕЕ НИЧЕГО НЕ ТРОГАЕМ!!!
setlocal EnableDelayedExpansion
echo.
echo.  AutoRestart Script started!
echo.
:check
COLOR 0C
timeout /t 10 /nobreak > nul
set FLAG=0
set PROC_SERVER_START_EXE=%PROC_SERVER%
set PROC_SERVER_START_Patch=%Patch_server%
for /f %%i in ('tasklist /FI "IMAGENAME eq %PROC_SERVER%" /FI "STATUS eq RUNNING"') do (
	set /a FLAG += 1
)
if %Start_server_with_smartsteamemu% == 1 (
	set PROC_SERVER_START_Patch=%NAME_DIR_smartsteamemu%
	set PROC_SERVER_START_EXE=%NAME_LOADER_smartsteamemu%
	set PROC_SERVER_PARAMS=%NAME_CONFIG_smartsteamemu%
  )
if %FLAG% == 1 (
  TIMEOUT /T %TIME_CHECK% /NOBREAK > nul
  cd "%Patch_server%"
  start "" "%PROC_SERVER_START_Patch%\%PROC_SERVER_START_EXE%" %PROC_SERVER_PARAMS%> nul^
    && (set MSG=[%date% %time%] %PROC_SERVER% restarted
        echo !MSG!
        echo !MSG! >> %LOGFILE%
        timeout /t %TIME_CHECK% /nobreak > nul)^
    || (set MSG=[%date% %time%] Error restarting PROC_SERVERess
        echo !MSG!
        echo !MSG! >> %LOGFILE%)
)

if (%Use_BEC_AutoRestarter% != 1) goto :check
set FLAG_BEC=0
for /f %%i in ('tasklist /FI "IMAGENAME eq %PROC_BEC%" /FI "STATUS eq RUNNING"') do (
	set /a FLAG_BEC += 1
)
if %FLAG_BEC% == 1 (
  TIMEOUT /T %TIME_CHECK% /NOBREAK > nul
  cd "%Patch_bec%"
  start "" "%Patch_bec%\%PROC_BEC%" %PROC_BEC_PARAMS%> nul^
    && (set MSG=[%date% %time%] %PROC_BEC% restarted
        echo !MSG!
        echo !MSG! >> %LOGFILE%
        timeout /t %TIME_CHECK% /nobreak > nul)^
    || (set MSG=[%date% %time%] Error restarting PROC_BECess
        echo !MSG!
        echo !MSG! >> %LOGFILE%)
)
goto :check
exit

Кому лень создавать, вот готовый:

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.



2. Заменяем и правим параметры в файле на свои, в данном случае это параметры запуска сервера, местонахождение сервера на компьютере и т.п., пояснения есть, как видим.
Крайне не рекоммендую в названиях файлах и расположениях сервера указывать пробелы, bat-файлы их не любят!

Если вы используете 'SmartSteamEmu', можно активировать опцию запуска сервера через него.
Также в батничке есть контролер 'BEC' на случай и его падений (произвольного выключения)

3. Сохраняем, запускаем, и спустя время, обозначенное в параметре:

set TIME_CHECK=60

сервер у вас запустится, если он отсутствует в процессах windows (при условии, если не напортачили в параметрах).

 

Способ II:

1. Создаем в папке с сервером игры файл с именем 'AutoRestartScript.bat' и заполняем его следующими данными:

@echo off
cd /d %~dp0
::CODE FILE UTF-8 + Russian OEM 866
::: Здесь указываем имя серверного exe (обязательно, он проверяется на запущенность)
set PROC_SERVER=DayZServer_x64.exe
::: Здесь указываем параметры запуска сервера для запуска сервера с exe напрямую
set PROC_SERVER_PARAMS=-port=2302 -config=Instance_1\server.cfg -cfg=Instance_1\basic.cfg -profiles=Instance_1 -user=Instance_1 -name=Server -nologs -adminlog -freezecheck -noFilePatching
::: Здесь указываем путь до папки с сервером
set Patch_server=C:\servers\DayZServer_063
::: Здесь указываем имя файла, в который будут писаться логи рестарта
set LOGFILE=log_restarter_server.txt
::: Здесь указываем время между проверками на запущенность процесса сервера (в секундах)
set TIME_CHECK=60

::: Указываем 1 если хотим запускать сервер через свой batch-файл, 0 если хотим запускать сервер напрямую с exe-файла сервера с параметрами выше
set USE_BATCH_FILE__FOR_START_SERVER=1
::: Указываем путь до папки с SmartSteamLoader
set BATCH_FILE_START_SERVER=C:\servers\DayZServer_063\Start_server_game.bat


::: ДАЛЕЕ НИЧЕГО НЕ ТРОГАЕМ!!!
setlocal EnableDelayedExpansion
echo.
echo.  AutoRestart Script started!
echo.
:check
COLOR 0C
timeout /t 10 /nobreak > nul
set FLAG=0
set PROC_SERVER_START_Patch=%Patch_server%\%PROC_SERVER%
set PROC_SERVER_START_PARAMS=%PROC_SERVER_PARAMS%
for /f %%i in ('tasklist /FI "IMAGENAME eq %PROC_SERVER%" /FI "STATUS eq RUNNING"') do (
	set /a FLAG += 1
)
if %USE_BATCH_FILE__FOR_START_SERVER% == 1 (
	set PROC_SERVER_START_Patch=%BATCH_FILE_START_SERVER%
	set PROC_SERVER_START_PARAMS=
  )
if %FLAG% == 1 (
  TIMEOUT /T %TIME_CHECK% /NOBREAK > nul
  cd "%Patch_server%"
  start "" "%PROC_SERVER_START_Patch%" %PROC_SERVER_START_PARAMS%> nul^
    && (set MSG=[%date% %time%] %PROC_SERVER% restarted
        echo !MSG!
        echo !MSG! >> %LOGFILE%
        timeout /t %TIME_CHECK% /nobreak > nul)^
    || (set MSG=[%date% %time%] Error restarting PROC_SERVERess
        echo !MSG!
        echo !MSG! >> %LOGFILE%)
)

goto :check
exit

Кому лень создавать, вот готовый:

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

2.Заменяем и правим параметры в файле на свои, в данном случае это параметры запуска сервера, местонахождение сервера на компьютере и т.п., пояснения также есть, как видим.
Крайне не рекоммендую в названиях файлах и расположениях сервера указывать пробелы, bat-файлы их не любят!

Если вы используете BEC, Whitelister, еще что-либо, запускаете сервер игры не напрямую, а через loader crack (как в smartsteamemu), или вовсе хотите делать при рестарте что-то свое, можно запускать сервер не с exe-файла сервера, а с указанного bat-файла. (примеры файлов: 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

)

3. Сохраняем, запускаем, и спустя время, обозначенное в параметре:

set TIME_CHECK=60

сервер у вас запустится, если он отсутствует в процессах windows (при условии, если не напортачили в параметрах).

 

Способ III:

1. Создаем, если отсутствует, простенький батничек, который будет запускать сервер ваш со всем необходимым. Если имеется такой, переходим далее. Примеры есть в п. 3 ниже!

2. Скачиваем и запускаем простенькую программку:

https://yadi.sk/d/k1Jk3sByqzczAQ

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

3. Запускаем программку и добавляем новое правило нажатием Add, настраиваем:

 

 


5baa352bd5005_.png.9c6ebaedca813ef0ddc5adb84c6a3224.png

На картинке поясняю:

1 - указываем либо из запущенный процесс сервера, либо сам файл сервера, который будет на запущенность проверяться
2 - галочка, обозначающая 'выполнять рестарт сервера в случае, если сервер не отвечает на запросы windows (подзавис временно, либо совсем)'
3 - галочка, обозначающая 'выполнять рестарт сервера в случае, если сервер не запущен или программа выключена'
4 - галочка, обозначающая 'добавить дополнительное время ожидания между проверками сервера на запущенность' (само время в настройках программы указывается)
5 - Принудительно выключать сервер, если он не отвечает на запросы windows (состояние краша программы, либо программа подзависла) (отключайте галку, поскольку при запуске сервера игр bohemia interactive постоянно находятся в таком состоянии пока запускаются)

 


6 - Указываем сам bat-файл, запускающий наш сервер (создавали в п. 1)(примеры файлов 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

)

7 - Указываем папку с вашим сервером
Настройки на скриншоте рабочие для сервера DayZ 0.63

4. Сохраняем настройки кнопкой OK

5. Ставим галочку, если не стоит в списке рядом с созданным нами заданием
6. Готово, сервер сам перезапустится, спустя время в секундах, обозначенное в настройках прграммы + время в правиле, созданном нами.

 

Указанные выше способы далеко не единственные, и пойдут наверняка не только для сервера DayZ 0.63, но и для остальных игр и версий издателя Bohemia Interactive, а может и вовсе для других серверов и программ, но я надеюсь, что данная тема будет для вас полезна и поможет внести понимание того как и что работает!

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites

Сообщения по шедулеру из BEC`a не пашут на серверах? Не проверял просто. Если нет, то надо сообщения с предупреждением о рестарте намутить и будет вообще супер :smile:

Share this post


Link to post
Share on other sites

DrTauren пашут, нормально все. А вот ники bec проверять не хочет, к сожалению, почему-то у меня))

Авторестартер в сочитании с коммандой #shotdown даст необходимый полноценный рестарт

Также его можно совместить с планировщиком задач windows и каким-нибудь taskkill

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites

123new А рестартер в BEC не пашет? Если шедулер работает, то по сути можно одним BECом обойтись

Share this post


Link to post
Share on other sites

DrTauren ну у меня лично не пахал, может что не так настраивал.
Да и задолбали с вопросами о том как авторестарт наладить в последнее время, так что лишним не будет, думаю

Share this post


Link to post
Share on other sites

Ребят подскажите кому не сложно, это просто батники перезапуска сервера после краша и зависания, или что то типа шедулера который через определенное время перезапускает сервер?? Например каждые 4 часа. Скажу сразу я не владею языком программирования но и не совсем деревянный. Было как то я держал свой сервер арма 2 мод dayz и есть небольшое понимание скрипта. 

Share this post


Link to post
Share on other sites

Zambezi батники перезапуска после краша, время самих рестартов и как рестартить вы решаете сами.

Share this post


Link to post
Share on other sites
6 минут назад, 123new сказал:

Zambezi батники перезапуска после краша, время самих рестартов и как рестартить вы решаете сами.

Угу, ну тогда тему нужно было по другому называть, а именно " Перезапуск сервера после краша ", ну или как то так. Не могли бы вы мне подсказать что нужно прописать в моем бат файле что бы происходил рестарт сервера именно через определенный промежуток времени. Или я что то не правильно понял и в этих примерах есть такие строчки?

Edited by Zambezi (see edit history)

Share this post


Link to post
Share on other sites

Если есть, то ткните меня лицом прям в них)  Так как по данным примерам я, что то не заметил где и какие параметры отвечают за автоматический рестарт по истечению определенного времени.

 

Share this post


Link to post
Share on other sites
1 час назад, Zambezi сказал:

Угу, ну тогда тему нужно было по другому называть, а именно " Перезапуск сервера после краша ", ну или как то так. Не могли бы вы мне подсказать что нужно прописать в моем бат файле что бы происходил рестарт сервера именно через определенный промежуток времени. Или я что то не правильно понял и в этих примерах есть такие строчки?

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

Share this post


Link to post
Share on other sites

123new Думаю что нужны, так как если сервер стоит на хостинге то я не думаю что там есть возможность в планировщике задач Windows создать новую задачу ( может я конечно ошибаюсь особо ими не пользовался ) так как все свои проекты держу у себя на своей машине, если вас не затруднит напишите пожалуйста такой скрип я буду очень благодарен да и не я один) А если вы еще туда и предупреждения запилите, которые отправляются всем игрокам на сервер как это было в моде dayz то ему и цены вообще не будет. Например просто у меня motd[] прописанный в конфиге сервера не работает, почему я не понимаю.

Edited by Zambezi (see edit history)

Share this post


Link to post
Share on other sites

Zambezi вообще, если хостинг нормальный, с полным rdp-доступом, то такая возможность всегда есть. Если без такого доступа, то я даже в теории не представляю как вы bat-файл запускать собрались.
Написать могу, но есть ли смысл в этом. Вы BEC, например, пользовались? Там как раз и рестарты и все названное вами можно сделать. Помимо BEC есть еще аналоги, например, у товарища Ультимы, с похожим функционалом. Не изучали хотя бы назхванный софт?

Share this post


Link to post
Share on other sites

123new Изучал и более того пользовался им но это было давно, более 4 лет тому назад. Но если вы могли заметить я написал что по какой то причине у меня не выходит подключиться к моему серверу через Dart, RCon и тому подобный софт.
Постоянно пишет " Failed to connect. Please make sure that you properly set a password in beserver.cfg and the server is running. "
И пожалуй сразу отвечу на ваши вопросы, в момент попытки подключения сервер запущен, IP белый, порт(ы) открыты, пароль в настройках бека установлен (в обоих конфигах все одинаково) 
У меня скоро возникнет когнитивный диссонанс головного мозга, из за этого. 
Если вы в силах мне помочь с подключением и настройкой, помогите. Если по какой либо причине вы не можете, то я настаивать не буду.

Share this post


Link to post
Share on other sites

Zambezi в силах помочь с BEC более чем, но в идеале нам бы с вами связаться по discord для этого. Посредством чата я тоже могу, но будет в разы дольше, и скрины потребуются, дабы разобраться как сервер настроен и какие папки у вас где.

Сам пользуюсь battleye на своем сервере и проблем не наблюдаю с этим.

Share this post


Link to post
Share on other sites

Zambezi Создай два файла в папке с инстансом\БЕ

BEServer.cfg

BEServer_x64.cfg

И в оба файла вставь:

RConPassword RConPass
RConPort 2315
RConIP 0.0.0.0
RestrictRCon 1
MaxPing 350

 

 

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites

123new По discord-у можем связаться. Но к сожалению могу только завтра так как глубокая ночь, могу и по чату. Если вы готовы уделить мне время, то буду при много благодарен. По поводу инстанса... Дело в том что сервер я устанавливал через стим, и данной папки как то не наблюдается. НО! Качал тут батники разные, смотрел что да как и мануальчики читал знаю что она создается батником ( если не ошибаюсь ).

Edited by Zambezi (see edit history)

Share this post


Link to post
Share on other sites

Zambezi помогу, пиши в личку нужные данные, завтра займемся. Сейчас сам не могу, другие дела

Share this post


Link to post
Share on other sites

Ребят, как заставить работать bec? Вроде все настроил - не видит он моего сервака... Пишет, что ждет запуска сервера и вырубается через 30 сек, по таймеру. DaRT видит сервер нормально... И еще - не нашел где RCON пароль вбивать в начстройках BEC. Он ему точно не нужен? Версия BEC - видимо ,последняя, с оф сайта.

Share this post


Link to post
Share on other sites

scrdefft rcon-пароль бек читает сам с BEServer.cfg из пути, который указывается в настройках бек по строку BEPatch
Соответственно сервер x64 версии и работает на конфиге BEServer_x64.cfg
Как понимаете, чтобы BEC работал конфиги должны быть идентичны.
Ну и + смотреть надо что за версия BEC у вас, в последних версиях BEC не захочет работать без добавления в его параметрах запуска параметра строки '--dsc'

А вообще такого рода вопросы лучше задавать либо отдельной темой в разделе помощи по игре, либо в темах с BEC, поскольку в текущей теме это в прямом смысле оффтоп.

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites

Я правильно понимаю, что Instance_1 это папка?
Если так, то что если у меня нет этой папки, как в общем и basic.cfg, во всяком случае поиск в директории с сервером не дал положительного результата 

Share this post


Link to post
Share on other sites

XpeHoboyKa верно все понимаете. Если папки этой у вас нет, значит сервер вы ставили не по гайду, указанному на сайте в разделе игры. Переименуйте на свои пути все, не так то и сложно это.

Share this post


Link to post
Share on other sites

123new ну да, сервер я ставил не совсем по гайду, я просто в батнике запуска сервера написал "-insatnceid=1".
-name=Server это имя сервера? 
-user= тоже не понимаю, что это.
И basic.cfg, если у меня его нет, то получается и путь указывать не нужно до него?

Share this post


Link to post
Share on other sites

XpeHoboyKa -name= - да -user= - указание на папку с конфигами сервера. Если нету, создастся. basic.cfg аналогично -user= работает.
Это стандартные комманды армы, на wiki по арме можно почитать это, работает также.

Share this post


Link to post
Share on other sites

А этот способ работает с официальной сборкой из стим? Просто хочется перезапуск, с обнулением лута)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By 123new
      И так, ребятки, вот вам небольшая 'полезняшка' от меня, и совершенно бесплатно!
       
      Описание:
      Скрипт, добавляющий админу сервера возможность указывать для каждого игрока индивидуальный скин спавна, его персональную точку спавна и один из имеющихся на сервере стартовых наборов с лутом, которые можно составить самим. Если указано несколько точек спавна и/или наборов лута, то будет выбран один из предложенных вариантов рандомно. Также, любой из названных параметров можно отключить в скрипте и сделать его стандартным, как он есть поумолчанию на сервере. Дополнительно - есть возможность назначить  свой набор стартового лута для всех игроков на сервере не из списка скрипта!
       
      Нам понадобится:
      1. Сервер DayZ 1.0, сделанный по одному из гайдов:
      2. Notepad++
      3. Немножечко трезвого ума и понимания того, что мы делаем, и как прописывается лут на новом языке enfusion
       
      Установка:
      Перед установкой: Обратите внимание, что имя 'стандартной' миссии сервера при загрузки со Steam называется: 'dayzOffline.chernarusplus'. На хостингах имя этой папки может отличаться. Если это так, то вам в информации ниже необходимо заменить 'dayzOffline.chernarusplus' на имя вашей  папки миссии сервера, иначе вы не сможете запустить сервер игры!
      1. По пути:
      {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\ создать папку 'CustomSpawnPlayerConfig' и поместить в созданную нами папку 3 файла
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
       Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      или создать их самим со следующим содержанием:
      Script.c
      /* Описание: Скрипт выдачи индивидуального стартового лута, скина игрока и точек спавна Автор: 123new Установка: 1. По пути: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\ создать папку 'CustomSpawnPlayerConfig' и поместить в нее 3 файла скрипта: Script.c Sets.c init_mod.c 2. В файле: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c в самом верху файла добавить: #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c" 3. В папке, обозначенной параметром запуска сервера '-profile=', поместить файл с именем CustomSpawnPlayerConfig.txt и заполнить его данными по следующему формату: UID|Skin_player|sets_numbers|points_spawns где UID - это steam64id от профиля игрока в steam Skin_player - точный id скина игрока (можно указать 0 для отключения опции) sets_numbers - номер сета со стартовым лутом (можно указать несколько через ';', указать один всего, либо указать 0 для отключения опции) points_spawns - координаты спавна игрока на карте в формате 'x y z' (можно указать несколько через ';', указать всего одну точку, либо указать 0 для отключения опции) Пример: 76561198141889254|SurvivorM_Oliver|1|12955.091797 16.115206 7993.588379 76561198141889256|SurvivorM_Oliver|1;2|14791.965820 76.481781 14041.661133;12029.079102 196.356125 7274.689941 76561198141889253|SurvivorM_Oliver|0|0 4. В файле Sets.c в папке: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\ настроить стартовый лут для ваших игроков и написать собственные сеты ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше) Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет! P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!! Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c */ class CustomSpawnPlayerConfig { private string Location_Directory_config = "$profile:"; // Расположение папки с конфигом скрипта private string Location_filename_config = "CustomSpawnPlayerConfig.txt"; // имя файла с конфигом скрипта private string default_log_block_name = "[CustomSpawnPlayerConfig] "; // Стандартный блок скрипта для идентификации с script.log private string disable_read_parameter = "0"; // Стандартное значение (без кавычек) для обозначения в файле конфига скрипта неиспользование параметра private string block_split_parameters_config = "|"; // Символ, обозначающий разделение параметров при чтении файла конфига private string block_split_multi_parameters_config = ";"; // Символ, обозначающий перечисление в одной ячейке параметра нескольких параметров при чтении файла конфига private bool enabled_loading_custom_spawnpoints = true; // Параметр, включающий и отключающий возможность использования приватной точки спавна для каждого игрока. В случае отключения кастомная точка спавна будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! private bool enabled_loading_custom_sets = true; // Параметр, включающий и отключающий возможность использования приватного сета для каждого игроков. В случае отключения выдача сетов будет отключена для всех поумолчанию, вне зависимости от данных в конфиге, будет выдаваться только сет для всех игроков! private bool enabled_loading_custom_skins = true; // Параметр, включающий и отключающий возможность использования индивидуального стартового скина игрока для каждого игрока. В случае отключения эта возможность будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! // ------------------------------------------------------------ // ---------------- NEXT CODE DON'T EDIT ----------------- // ------------------------------------------------------------ ref map<string, ref array<vector>> players_spawnpoints = new map<string, ref array<vector> >; ref map<string, ref array<int>> players_sets = new map<string, ref array<int> >; ref map<string, string> players_skins = new map<string, string>; private bool enabled_loaded_successfull_config = false; string Log_CustomSpawnPlayerConfig_GetDateTime() { private int year, month, day, hour, minute, second; GetYearMonthDay(year, month, day); GetHourMinuteSecond(hour, minute, second); string returned_message = "[" + day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2) + " - " + hour.ToStringLen(2) + "." + minute.ToStringLen(2) + "." + second.ToStringLen(2) + "] "; return returned_message; } bool Check_coords_disable(vector coord) { private bool ret_zn = false; private float pos_x = coord[0]; private float pos_y = coord[1]; private float pos_z = coord[2]; if ((pos_x == 0.0) & (pos_y == 0.0) & (pos_z == 0.0)) { ret_zn = true; } return ret_zn; } vector Set_Read_coords_disable() { return Vector(0.0, 0.0, 0.0); } void CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig initialize start!"); Read_Update_Config(); } void ~CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig work end, class closed!"); } void Read_Update_Config() { private string name_block_work = "[ReadAndUpdateSettings] "; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + " Started Reading config!"); private array<string> readed_lines_config = ReadFileConfig(); private bool check_normal_read = AnaliseFileConfig(readed_lines_config); if (check_normal_read) { LoadFileConfig(readed_lines_config); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config readed successfull!"); enabled_loaded_successfull_config = true; } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config read failed, work script disabled for players!"); enabled_loaded_successfull_config = false; } } array<string> ReadFileConfig() { private string name_block_work = "[ReadFileConfig] "; private array<string> readed_lines_config = new array<string>; readed_lines_config.Clear(); if (FileExist ( (Location_Directory_config + Location_filename_config) ) ) { private string line_content; FileHandle file = OpenFile((Location_Directory_config + Location_filename_config), FileMode.READ); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Open file config: " + (Location_Directory_config + Location_filename_config)); if (file != 0) { while ( FGets( file, line_content ) > 0 ) { readed_lines_config.Insert( line_content); } CloseFile(file); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T OPEN FILE CONFIG : " + (Location_Directory_config + Location_filename_config)); } //readed_lines_config.Debug(); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T FOUND FILE CONFIG OR DIRECTORY: " + (Location_Directory_config + Location_filename_config)); } return readed_lines_config; } bool AnaliseFileConfig(array<string> readed_lines_config) { private bool return_zn = true; private string name_block_work = "[AnaliseFileConfig] "; if (readed_lines_config.Count() > 0) { foreach (string line : readed_lines_config) { if (line.Contains(block_split_parameters_config)) { private array<string> splited_line = new array<string>; line.Split( block_split_parameters_config, splited_line ); if (splited_line.Count() == 4) { private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); if ((UID_player == "") || (default_skin_player == "") || (sets_numbers_player == "") || (points_spawn_player == "")) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Lines in Readed file is not correct, please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file is have incorrect count parameters with a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file can't have a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Config file is empty, fix your config script!"); return_zn = false; } return return_zn; } void LoadFileConfig(array<string> readed_lines_config) { private string name_block_work = "[LoadFileConfig] "; players_spawnpoints.Clear(); players_sets.Clear(); players_skins.Clear(); foreach (string line : readed_lines_config) { private array<string> splited_line = new array<string>; splited_line.Clear(); line.Split( block_split_parameters_config, splited_line ); private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); private array<vector> temp_players_spawnpoints = new array<vector>; temp_players_spawnpoints.Clear(); array<int> temp_players_sets = new array<int>; temp_players_sets.Clear(); array<string> temp_players_spawnpoints_string = new array<string>; temp_players_spawnpoints_string.Clear(); array<string> temp_players_sets_string = new array<string>; temp_players_sets_string.Clear(); if (points_spawn_player.Contains(block_split_multi_parameters_config)) { points_spawn_player.Split( block_split_multi_parameters_config, temp_players_spawnpoints_string ); } else { temp_players_spawnpoints_string.Insert(points_spawn_player); } foreach (string line_spawnpoint : temp_players_spawnpoints_string) { if (line_spawnpoint == disable_read_parameter) { temp_players_spawnpoints.Insert(Set_Read_coords_disable()); } else { temp_players_spawnpoints.Insert(line_spawnpoint.ToVector()); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_spawnpoints.Count().ToString() + " spawnpoints."); if (sets_numbers_player.Contains(block_split_multi_parameters_config)) { sets_numbers_player.Split( block_split_multi_parameters_config, temp_players_sets_string ); } else { temp_players_sets_string.Insert(sets_numbers_player); } foreach (string line_set : temp_players_sets_string) { if (line_set == disable_read_parameter) { temp_players_sets.Insert(0); } else { temp_players_sets.Insert(line_set.ToInt()); } } if (default_skin_player == disable_read_parameter) { default_skin_player = "0"; } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_sets.Count().ToString() + " sets."); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Detected for " + UID_player + " skin " + default_skin_player); players_spawnpoints.Insert(UID_player,temp_players_spawnpoints); players_sets.Insert(UID_player,temp_players_sets); players_skins.Insert(UID_player,default_skin_player); } } vector Load_And_Check_Spawnpoints(PlayerIdentity identity, vector pos_default) { private string name_block_work = "[Load_And_Check_Spawnpoints] "; private vector retun_pos = pos_default; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_spawnpoints) { if ((players_spawnpoints.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_spawnpoints.Contains(UID_P)) { private array<vector> readed_lines_config = new array<vector>; readed_lines_config = players_spawnpoints.Get(UID_P); private vector retun_pos_check = readed_lines_config.GetRandomElement(); if (Check_coords_disable(retun_pos_check)) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private spawn point. Will be used default spawn point!"); } else { retun_pos = retun_pos_check; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private spawn point: " + retun_pos.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private spawnpoint for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private spawnpoints is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal spawnpoints from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn point: " + retun_pos.ToString()); return retun_pos; } string Load_And_Check_SpawnSkin_Player(PlayerIdentity identity, string characterName) { private string name_block_work = "[SelectStartSkinPlayer] "; private string retun_skin = characterName; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_skins) { if (players_skins.Count() > 0) { if (players_skins.Contains(UID_P)) { private string readed_skin = players_skins.Get(UID_P); if (readed_skin == "0") { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private skin setting, will be used default setting game!"); } else { retun_skin = readed_skin; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private skin setting: " + retun_skin); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private skin setting for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private skin setting is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal skin player settings from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used skin: " + retun_skin); return retun_skin; } void Load_And_Check_StartLoadout(PlayerBase player) { private string name_block_work = "[SelectStartSetPlayer] "; private int use_set_id = -1; private PlayerIdentity identity = player.GetIdentity(); if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_sets) { if ((players_sets.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_sets.Contains(UID_P)) { private array<int> readed_lines_config = new array<int>; readed_lines_config.Clear(); readed_lines_config = players_sets.Get(UID_P); private int chek_use_set_id = readed_lines_config.GetRandomElement(); if (chek_use_set_id == 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private set numbers. Will be used default set player! "); } else { use_set_id = chek_use_set_id; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private set number is: " + use_set_id.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private sets for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private sets is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal loadout sets player settings from config file script! Will be used default loadout!"); } if (use_set_id >= 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn set with number is: " + use_set_id.ToString()); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn default start set without number. "); } StartSetsPlayers.StartSetsPlayer(player, use_set_id); } } private array<EntityAI> GetItemListinobject(PlayerBase player,EntityAI item, bool check_player) { array<EntityAI> EntityAI_list_items = new array<EntityAI>; EntityAI_list_items.Clear(); int attIdx = 0; int attCount = 0; EntityAI item_in_object; if ((player) && (check_player)) { attCount = player.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { item_in_object = player.GetInventory().GetAttachmentFromIndex(attIdx); if ( item_in_object.IsItemBase() ) { EntityAI_list_items.Insert(item_in_object); } } } if ((item) && !check_player) { attCount = item.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { item_in_object = item.GetInventory().GetAttachmentFromIndex(attIdx); if ( item_in_object.IsItemBase() ) { EntityAI_list_items.Insert(item_in_object); } } } return EntityAI_list_items; } void RemoveAllItems (PlayerBase player) { private array<EntityAI> ItemListPlayer = new array<EntityAI>; private array<EntityAI> ItemsForDelete = new array<EntityAI>; private EntityAI itemInHands_player = player.GetHumanInventory().GetEntityInHands(); if (itemInHands_player != NULL) { if (player.CanDropEntity(itemInHands_player) && player.GetHumanInventory().CanRemoveEntityInHands()) { // Print("ItemForDelete: " + itemInHands_player.ToString()); ItemsForDelete.Insert(itemInHands_player); } } ItemListPlayer = GetItemListinobject(player,NULL,true); if (ItemListPlayer.Count() > 0) { foreach(EntityAI ItemPlayer: ItemListPlayer) { private array<EntityAI> ItemInItemInInventory = GetItemListinobject(NULL,ItemPlayer,false); private CargoBase cargo = ItemPlayer.GetInventory().GetCargo(); if(cargo) { if (cargo.GetItemCount() > 0) { for (int f = 0; f < cargo.GetItemCount(); f++) { if(cargo.GetItem(f)) { ItemsForDelete.Insert(cargo.GetItem(f)); } } } } if (ItemInItemInInventory.Count() > 0) { foreach(EntityAI items_temp: ItemInItemInInventory) { if(items_temp) { ItemsForDelete.Insert(items_temp); } } } if(ItemPlayer) { ItemsForDelete.Insert(ItemPlayer); } } } if (ItemsForDelete.Count() > 0) { foreach(EntityAI item_temp: ItemsForDelete) { if(item_temp) { GetGame().ObjectDelete(item_temp); } } } } }; Sets.c
      class StartSetsPlayersConfig { void StartSetsPlayer(PlayerBase player,int use_set_id) { EntityAI itemCreated = NULL; EntityAI itemCreated1 = NULL; ItemBase itemCasted = NULL; switch( use_set_id ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1) { case 1: //Set with number 1 (Сет с номером 1) { My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку itemCreated = player.GetInventory().CreateInInventory("CoyoteBag_Green"); // Выдаем рюкзак и записываем в переменную itemCreated if (itemCreated) // Проверяем, создался ли рюкзак. Если он создался, переменная itemCreated будет не пуста и проверка пройдет { SetRandomHealthItem(itemCreated); // Выдаем рюкзаку рандомное качество itemCreated1 = itemCreated.GetInventory().CreateInInventory("Apple"); // Добавляем в инвентарь созданного рюкзака яблоко и записываем в переменную itemCreated1 if (itemCreated1) // Проверяем, создалось ли яблоко в рюкзаке, яблоко у нас с переменной itemCreated1 { SetRandomHealthItem(itemCreated1); // Выдаем яблоку рандомное качество } itemCreated1 = NULL; // Обнуляем значение переменной после работы с ней, чтобы следующая проверка прошла корректно itemCreated1 = itemCreated.GetInventory().CreateInInventory("Rag"); // Выдаем игроку бинты в рюкзак и записываем в переменную itemCreated1 if (itemCreated1) // Проверяем, создались ли бинты в рюкзаке, они у нас с переменной itemCreated1 { itemCasted = ItemBase.Cast(itemCreated1); // Выполняем преобразование в другой класс для работы с нужной нам функцией, поскольку в классе EntityAI нет нужной нам функции SetQuantity, а в подклассе ItemBase она есть. Предмет при этом так и остается один и тот же! itemCasted.SetQuantity(4); // Определяем количество для созданных бинтов как 4 штуки SetRandomHealthItem(itemCreated); // Выдаем бинтам рандомное качество, функция работает с классом EntityAI (см. в конфе файла) } } // переменную itemCreated не обнуляем далее, поскольку мы ее не используем в проверке ниже. itemCreated = player.GetInventory().CreateInInventory("TTSKOPants"); // Выдаем игроку штаны itemCreated = player.GetInventory().CreateInInventory("TTsKOJacket_Camo"); // Выдаем игроку куртку itemCreated = player.GetInventory().CreateInInventory("CombatBoots_Black"); // Выдаем игроку обувь //itemCasted = ItemBase.Cast(itemCreated); // Строка не нужна, закоментирована. используется для изменения класса EntityAI в ItemBase (чтобы нужные операции были доступны) itemCreated = player.GetInventory().CreateInInventory("CombatKnife"); // Выдаем игроку ножик в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("FNX45"); // Выдаем игроку FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = NULL; // Обнуляем значение переменной после работы с ней, нужно если мы будем использовать ее далее itemCreated = player.GetHumanInventory().CreateInHands("akm"); // Выдаем игроку AKM в руки if (itemCreated) // Проверяем, создался ли АКМ { itemCreated.GetInventory().CreateAttachment( "PSO11Optic" ); // Выдаем игроку на AKM оптику ПСО 11 и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodBttstck" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodHndgrd" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_Suppressor" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим } break; } case 2: //Set with number 2 (Сет с номером 2) { break; } case 3: //Set with number 3 (Сет с номером 3) { break; } case 4: //Set with number 4 (Сет с номером 4) { break; } case 5: //Set with number 5 (Сет с номером 5) { break; } case 6: //Set with number 6 (Сет с номером 6) { break; } default: //Default starting spawn set (Сет поумолчанию для всех игроков, если хотите назначить - добавляйте здесь!) { //My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку break; } } } void SetRandomHealthItem(EntityAI itemCreated) { if ( itemCreated ) { private int rndHlt = Math.RandomInt(55,100); itemCreated.SetHealth("","",rndHlt); } } } init_mod.c
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Script.c" #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Sets.c" ref CustomSpawnPlayerConfig My_Custom_Spawn_Parameters = new CustomSpawnPlayerConfig(); ref StartSetsPlayersConfig StartSetsPlayers = new StartSetsPlayersConfig(); modded class CustomMission { override void OnInit () { super.OnInit(); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(My_Custom_Spawn_Parameters.Read_Update_Config, 120000, true); // Обновление настроек скрипта кастомных спавнов, 1 минута = 60000 } override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) { pos = My_Custom_Spawn_Parameters.Load_And_Check_Spawnpoints(identity, pos); characterName = My_Custom_Spawn_Parameters.Load_And_Check_SpawnSkin_Player(identity, characterName); super.CreateCharacter(identity, pos, ctx, characterName); return m_player; } override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { super.StartingEquipSetup(player, clothesChosen); My_Custom_Spawn_Parameters.Load_And_Check_StartLoadout(player); } }  

       
      2. В файле:
      {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c в самом верху файла добавить:
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c" Чтобы получилось примерно так

       
      3. В папке, обозначенной параметром запуска сервера '-profile=', поместить файл с именем CustomSpawnPlayerConfig.txt
      и заполнить его данными по следующему формату:
      UID|Skin_player|sets_numbers|points_spawns где UID - это steam64id от профиля игрока в steam
      Skin_player - точный id скина игрока (можно указать 0 для отключения опции)
      sets_numbers - номер сета со стартовым лутом (можно указать несколько через ';', указать один всего, либо указать 0 для отключения опции)
      points_spawns - координаты спавна игрока на карте в формате 'x y z' (можно указать несколько через ';', указать всего одну точку, либо указать 0 для отключения опции)
      Пример:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      76561198141889254|SurvivorM_Oliver|1|12955.091797 16.115206 7993.588379 76561198141889256|SurvivorM_Oliver|1;2|14791.965820 76.481781 14041.661133;12029.079102 196.356125 7274.689941 76561198141889253|SurvivorM_Oliver|0|0  
      4. В файле Sets.c в папке:
      {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\ настроить стартовый лут для ваших игроков и написать собственные сеты
      ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше)
      Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет!
       
      P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!!
       
      Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в:
              {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c
              {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c
       
      Благодарности: Товарищу Mizev за его первоначальные гайды в группе VK при появлении в сети серверной части игры
       
       
    • By vitacite
      Квест на аномалии. Участники - любые игроки. 3 НПС, 3 Анимированных аномалии (пока без дамага), 3 квестовых предмета - детектор аномалий, карта сокровищь и журнал с девчонками 🙂
      Выглядит это так...
       

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
       
       
      Мануаль по установке тут....
      Обновление от 19.01.2016
      https://github.com/olkeakavitacite/EQP_Anomaly/
      Так же находится описание, как и чего делать.
       
    • By DrTauren
      DZAI создана простой, легко настраиваемой, лёгкой в установке системой. Она создана для работы с любыми DayZ-модами и картами.

      Особенности системы:
      Статичный спавн ботов - в городах, деревнях, на военных базах Динамический спавн ботов - спавнятся рандомно по всей карте. Могут появиться где угодно и когда угодно Патрули на воздушной технике - патрули также появляются рандомно. Пешие игроки имеют маленький шанс быть обнаруженными, но игрокам на какой-либо технике повезло гораздо меньше  Сухопутные патрули на технике - появляются так же рандомно, курсируют по дорогам между городами и деревнями Собственноручно настраиваемые патрули - спавните ботов и различные патрули в нужных вам местах. Например на ваших кастомных военных базах Боты используют только лутабельное оружие - вы можете подобрать любое оружие с убитого бота без каких-либо проблем, т.к. их лут генерируется с учётоб таблиц лута вашего мода. Чем реже лут у бота, тем он опасней (автор имеет ввиду скилл бота) Система жизней - боты имеют столько же жизней, как игрок. Точно так же могут упасть без сознания. Так что лучше стрелять по головам  
       
      Установка:
      1) Качаем архив: 
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      2) Распаковываем наш dayz_server.pbo, затем открываем файл server_monitor.sqf
      3) Находим строку:
      allowConnection = true; и добавляем над ней эту:
      [] call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZAI\init\dzai_initserver.sqf"; 4) Копируем папку DZAI из скаченного архива в корень нашего dayz_server
      5) Настроить работу системы под себя вы можете в этом файле: DZAI\init\dzai_config.sqf
    • By NoNameUltima
      Название:
      Админка с GUI для DayZ Standalone 0.63 и выше
       
      Стоимость:
      3500
       
      Функционал и особенности:
      Админка поставляется с ключами, и подписями. Админка разделена на 2 части - клиентская, и серверная. Так же работает в оффлайн режиме.  
      Версия админки:
      R3  
      Для установки админки, необходимо:
      На сервере подключить серверный мод. На сервере подключить клиентский мод. На сервере скопировать ключ из клиентского мода, и поместить в папку keys сервера. На клиенте добавить клиентский мод. В конфигурационный файл администрации прописать UID(ы) администраторов и модераторов.  
      Рабочие пункты админки:
       
      Отображение в 3D(ESP от 0 до 1000м)
      Настройки радиуса отображения Игроки. Зомби. Техника. Постройки. Объекты.  
      Отображение на карте(в радиусе игрока от 0 до 1000м):
      Настройки радиуса отображения Игроки. Зомби. Техника. Постройки. Объекты. НПЦ.  
      Сервер:
      Установка времени на сервере. Установка погоды на сервере(В бете).  
      Собственные:
      Телепорт по векторам(4 - по направлению взгляда. 5 - вверх). Телепорт по карте. Неуязвимость. Бесконечный БК. Невидимость. Защита от зомби. Свободная камера.  
      Игроки:
      Телепорт игрока к администратору. Телепорт администратора к игроку. Телепорт в заданные координаты. Лечение. Очистка инвентаря. Выдача БК к текущему оружию(в руках). Заблокировать. Разблокировать. Убить. Отсоединить. Забанить(свой файл банов по UID) Создание перед игроком объектов из заранее подготовленных файлов на сервере. Игроки(доп.  пункты для мода Ultima):
      Изменить баланс наличных Изменить банковский баланс Изменить репутацию Изменить фракцию Изменить кол-во убийств зомби Изменить кол-во убийств людей  
      Создание объектов:
      Фильтр при выборе раздела создания предметов(поиск по имени класса). Пресеты для создания авто, из аддонов(авто с обвесом, - колеса и т.п., так же можно добавлять и для стандартной техники, если нет желания ее создавать в сборе).  
      Удаление объектов:
      Все все объекты в радиусе X(не более 100м). Все объекты в радиусе X, по классу(не более 100м). Объект в прицеле по горячей клавише.  
      Другое:
      Карта администратора. Монитор отладки. Информационный виджет. Наблюдение за игроком.  
      Горячие клавиши:
      [        -     Вызов панели администратора. HOME     -     Вкл\Выкл отображения полосы отладки. DELETE   -    Удаление объекта в прицеле. 4  -    Телепорт по направлению взгляда. 5  -    Телепорт вверх. SHIFT+M - Карта администратора. F11 - Дебаг администратора.  
      Сообщения:
      Вывод сообщений игрокам, о действиях модератора(если в админке UID указан, как UID модератора).  
      Журналы:
      Действия администрации.  
      Контакты:
      skype: hf-trade
      discord: https://discord.gg/T9YAJDm
       
      Видео:
      ( ВНИМАНИЕ! В ВИДЕО, ВНУТРИ ПАНЕЛИ АДМИНИСТРАТОРА, РАБОТАЮТ ТОЛЬКО ТЕ ПУНКТЫ КОТОРЫЕ УКАЗАНЫ ВЫШЕ! ОСТАЛЬНЫЕ ПУНКТЫ ДОБАВЛЕНЫ НА БУДУЩЕЕ, И МОГУТ БЫТЬ ИЗМЕНЕНЫ)
      P.S. Обновления платные - 25% от стоимости админки.
    • By NoNameUltima
      ASCP (переделка DZEU)
       
      Возможности вкладки RCon:
      Просмотр чата - любые переписки, отправка собственных сообщений в чат, а так же отправка личных сообщений выбранному игроку. Цвет фона, и сообщений настраивается. Просмотр игроков находящихся на сервере(страна- флаг, GUID, IP, Порт, пинг) Таблица администрации - вы можете добавлять администраторов, и модераторов, - при входе на сервер будет выводится специализированное сообщение(в зависимости от настроек). Белый список. Оповещения(по дням недели, времени, интервалу. Как технические - рестарты и т.п., так и текстовые). Авто кики, с сообщениями о не правильных установках игрока(Например у вас запрещены некоторые символы в именах игроков). Работа с бан листами - отсев дубликатов, склейка банов. Список имен, GUID'ов, и дат, игроков заходивших на ваш сервер. Возможность запрета смены имени игрока, после первого захода на сервер.*Опция в режиме тестирования. Стандартные команды RCon(смена пароля, перезагрузка списка банов и т.п.) Настройки задающие IP, порт, пароль, максимально допустимую длину имени, максимально допустимое время нахождения в лобби и т.п. Авто-сохранение журналов чата ежечасно по указанным вами путям. Возможности вкладки сервер:
      Ручной запуск сервера. Настройки задающие авто-запуск сервера, командную строку, путь к файлу сервера.  
      Дополнительно:
      Авто-запуск батч файла перед стартом сервера, внутри которого вы можете выполнять любые события. Например связанные с чисткой БД. *Для примера созданы и приложены события для А2 DayZ Epoch: - Удаление определенной техники, на каждом рестарте. - Удаление объектов поврежденных более чем на Х процентов, на каждом рестарте. - Нанесение Х урона объектам, раз в сутки. - Удаление персонажей, которе не заходили на сервер более Х суток. - Пополнение кол-ва объектов для торговцев, на каждом рестарте, в зависимости от оставшегося кол-ва. - Удаление объектов не используемых более Х часов, на каждом рестарте. Авто-сохранение файлов серверных журналов. По файлам и папкам. Авто-очистка папок с журналами, от файлов старше Х дней(настраивается). Просмотр реал-тайм журналов сервера, таких как RPT файлы и т.п.  
      Работа программы проверялась на ОС'ях:
       
      Windows 7 Windows server 2008 Windows server 2012  
      Использовались сервера:
      A2OA DayZ Epoch\Overpoch, A3 Exile DayZ SA  
      Пример строки запуска в программе, для запуска DayZ SA:
      *т.к. строка зачастую длинная, ее проще править напрямую в файле ASCP_Settings.ini
      Параметры запуска(командная строка)=-port=2302 "-config=Instance_1\server.cfg" "-cfg=Instance_1\basic.cfg" "-profiles=Instance_1" "-mod=@Ultima;@UltimaClientAdmin;" "-serverMod=@UltimaServer;@UltimaServerAdmin;" -user=Instance_1 -name=Ultima -nologs -adminlog -freezecheck -FilePatching  
      Пример bat файла, для запуска DZSAL
      @echo off set DayZExe=DZSALModServer.exe set DayZConfig=Instance_1\server.cfg set DayZBasic=Instance_1\basic.cfg set DayZProfiles=Instance_1 set DayZUser=Instance_1 set DayZName=Ultima set PORT=2302 set SERVERMODS=@UltimaServer;@UltimaServerAdmin; set MODS=@UltimaData;@Ultima;@UltimaClientAdmin; set IGNOREMOD=@UltimaServer;@UltimaServerAdmin; set IP=192.168.1.2 start "" "%DayZExe%" -ip=%IP% -instanceId=1 -port=%PORT% -ignoremod=%IGNOREMOD% -skipserver -serverMod=%SERVERMODS% -mod=%MODS% -config=%DayZConfig% -cfg=%DayZBasic% -profiles=%DayZProfiles% -user=%DayZUser% -name=%DayZName% -nologs -adminlog -freezecheck -FilePatching *Батч файл запускает http сервер, с лаунчером, без запуска самого сервера DayZ(за запуск сервера отвечает ASCP), и игнорирует серверные моды.
       
      Проблемы кодировок:
      На Windows сервер, иногда, неверно установлены кодировки, и вместо кириллицы, либо "кракозябры", либо вообще не видно текста.
      Решение проблемы достаточно простое -
      Запускаем из командной строки: regedit (кто не знает, как это сделать, можно просто открыть любую папку в windows, и вверху в строке где написан путь к папке, написать regedit). Далее идем по пути регистра: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage] В правом окошке видим кодировки, находим кодировки начинающиеся с 1250, и до 1255. Правым кликом на кодировку, - изменить значение, и меняем на 1251, т.е. 1250=1251, 1251=1251, 1252=1251.... Перезагружаемся.  
      Полную версию программы можно приобрести за 2000р.
      P.S. Тем кто брал DZEU - может получить полную версию ASCP бесплатно.
       
      Немного скриншотов:
       
      Окошко статуса сервера:

      Окно настроек:

      Окно игроков:

       
×
×
  • Create New...