Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
DrTauren

DaRT 2.1 (DayZ Admin rCon Tool для Windows)

Рекомендованные сообщения

40 минут назад, SkaZzz сказал:

Вообще все работает ) Спасибо большое. есть только еше 1 вопрос не могу понять как тут подключиться. у меня не хостинг а удаленная машина с win10
image.png.a8c8d2e1e6691c110f5f7c3f5a9e50bc.png
Можешь если не сложно сказать от куда брать все это чтоб вставить в эти поля ?

ребята не ровняем базу данный с дартом и базой данный игры,это разные вещи!И если мало кто знает ,Дарт был разработан в то время когда был и есть но давным двно при моде DayZ Mod Arma 2

Изменено пользователем DAP (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





я думал это колонка как то работает ) и будет полезно ее заполнить ) Спасибо ) пусть значит будет пустая )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
01.12.2019 в 03:09, SkaZzz сказал:

я думал это колонка как то работает ) и будет полезно ее заполнить ) Спасибо ) пусть значит будет пустая )

это чисто для обмена банами между серверами посредством dart. Здесь указывается существующий MySQL сервер, где баны хранятся или будут храниться. Если сервер 1 то оно вам нафиг не сделось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, 123new сказал:

это чисто для обмена банами между серверами посредством dart. Здесь указывается существующий MySQL сервер, где баны хранятся или будут храниться. Если сервер 1 то оно вам нафиг не сделось.

Хорошо спасибо) просто подумал если мой админ использует Dart то он только так сможет разбанить ) так как почему именно разбан не работает в программе.и получается так что между программоми нет свзяи) он не может видеть кого я забанил или какие либо коментарии/заметки

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, SkaZzz сказал:

Хорошо спасибо) просто подумал если мой админ использует Dart то он только так сможет разбанить ) так как почему именно разбан не работает в программе.и получается так что между программоми нет свзяи) он не может видеть кого я забанил или какие либо коментарии/заметки

все там есть, и бан и разбан, и он может видеть кто кого забанил. Если вы открываете один и тот же сервер, и вкладку банов, да эти самые баны коммандой в опциях подгрузили в программе.
перед тем как задавать вопросы 'почему баны не сохраняются' или 'почему я не могу зайти с dart на сервер', и т.п. вы сначала гайд то по созданию сервера на форуме изучите, там не спроста дан архив с готовым серверным конфигом, где все это уже имеется в наличии. А то ж ведь получается, что вы в каких-то левых ютубах насмотритесь левых файлов и гайдов, а потом начинаете бездумно тыкать по разным гайдам, и при том даже понять не можете что конфиг  сервера у вас до конца не сконфигурирован правильно, и что все необходимое вам автор того самого гайда на тырьтьюбе не дал. А результат из этого всегда один 'ай спасити памагити гайд не работает, что делать'

Гайд по созданию сервера

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я тут подумал, может сделать веб-интерфейс к DaRT чтобы можно было удаленно без захода по RDP админить серв?

P.S. Я там сделал что дарт только из трея закрывается - потому что кто-то когдато это просил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, NeiroN сказал:

Я тут подумал, может сделать веб-интерфейс к DaRT чтобы можно было удаленно без захода по RDP админить серв?

P.S. Я там сделал что дарт только из трея закрывается - потому что кто-то когдато это просил.

а почему его же не запустить у себя на пк ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, NeiroN сказал:

Я тут подумал, может сделать веб-интерфейс к DaRT чтобы можно было удаленно без захода по RDP админить серв?

P.S. Я там сделал что дарт только из трея закрывается - потому что кто-то когдато это просил.

есть например такая тулза как PRIVATEHIVETOOLS. Там тебе и онлайн мониторинг за игроками на карте, и бан/кик игроков и т.д. Правда все это для Arma2 и Epoch.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
06.01.2020 в 21:35, NeiroN сказал:

Я тут подумал, может сделать веб-интерфейс к DaRT чтобы можно было удаленно

Было бы отлично. Чтобы с телефона контролировать, когда находишься далеко от компа. 

А у меня такой вопрос, когда с сервера выходят все игроки, в дарте всё равно показывает, что один игрок онлайн (тот, который был последний в игре). Так и должно быть, или что-то мне надо подправить? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да это нормально, просто иногда пустой лист приходил - поэтому я так сделал

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Исходник тут https://github.com/NeiroNx/DaRT - постепенно обновляется, не знаю на сколько хватит у меня активности - поэтому велком в разработку.

Если кому надо могу кинуть промежуточную сборку(пока установил Visual Studio 2013 могу собрать).

Самый главный вопрос это авторизация, я умею только Http Basic Auth делать, где пароль в открытом виде, а всякие Digest - не умею.

 

Сделал базовую версию - заготовку для веб. Будет папка с статичными файлами и скриптами, а всякие действия будут через JSON запросы передаваться. Код буду использовать ES6 - поэтому всякие браузеры типа IE - это мимо, Edge - возможно. На данный момент вывод списка игроков и банов в JSON - /playerList, /banList , порт 8080, корневая папка статических файлов data/www

Вопрос по ServerSide заменам блоков - рассматривается(лень, да и не ясно нужно ли вообще)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, NeiroN сказал:

Исходник тут https://github.com/NeiroNx/DaRT - постепенно обновляется, не знаю на сколько хватит у меня активности - поэтому велком в разработку.

Если кому надо могу кинуть промежуточную сборку(пока установил Visual Studio 2013 могу собрать).

Самый главный вопрос это авторизация, я умею только Http Basic Auth делать, где пароль в открытом виде, а всякие Digest - не умею.

 

Сделал базовую версию - заготовку для веб. Будет папка с статичными файлами и скриптами, а всякие действия будут через JSON запросы передаваться. Код буду использовать ES6 - поэтому всякие браузеры типа IE - это мимо, Edge - возможно. На данный момент вывод списка игроков и банов в JSON - /playerList, /banList , порт 8080, корневая папка статических файлов data/www

Вопрос по ServerSide заменам блоков - рассматривается(лень, да и не ясно нужно ли вообще)

 

по поводу пароля могу предложить такое: так как есть исходники самого дарта,сделай в самом исходнике дарта функцию на принятия запроса проверки пароля который был указан по веб.Тем самым он не будет в открытом виде.

Изменено пользователем DAP (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Остановился на простой авторизации...

И наконец сделал чтобы игроки удалялись из списка сразу при выходе и не висели в нем мертвым грузом, осталось доделать чтобы число игоркрв в шапке обновлялось и адрес был не в скобках с портом.

Да и вкладку в настройках надо бы сделать...

 

p.S. Прикольно переписывать старые проекты после повышения своего уровня)))

Изменено пользователем NeiroN (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чтобы изменения вступили в силу, нужно как-то обновиться? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13.01.2020 в 19:51, NeiroN сказал:

Исходник тут https://github.com/NeiroNx/DaRT - постепенно обновляется, не знаю на сколько хватит у меня активности - поэтому велком в разработку.

Если кому надо могу кинуть промежуточную сборку(пока установил Visual Studio 2013 могу собрать).

Самый главный вопрос это авторизация, я умею только Http Basic Auth делать, где пароль в открытом виде, а всякие Digest - не умею.

 

Сделал базовую версию - заготовку для веб. Будет папка с статичными файлами и скриптами, а всякие действия будут через JSON запросы передаваться. Код буду использовать ES6 - поэтому всякие браузеры типа IE - это мимо, Edge - возможно. На данный момент вывод списка игроков и банов в JSON - /playerList, /banList , порт 8080, корневая папка статических файлов data/www

Вопрос по ServerSide заменам блоков - рассматривается(лень, да и не ясно нужно ли вообще)

 

есть же в сети web-библиотеки функционала Rcon battleye, в свое время еще на арма 2 выше упомянутой встречал и в dayz cc и в priate hive tools, и даже еще где-то в подобии онлайн-мониторинга. Я к чему - зачем городить своего рода велосипед с обязательным наличием на сервере запущенной копии какого-нибудь dart ли т.п. проложухи для общения с сервером, когда можно просто web-интерфейс с нужными php скриптами держать там, а он в свою очередь будет связываться с сервером по rcon и получать необходимые данные? И все что у вас в rcon работает, будет теми же коммандами и так работать, а удобство будет зависеть от умельца web-разработчика на php? Проще говоря, зачем городить лестницу, если можно действовать напрямую? Другой вопрос, конечно, в том, кто тут сам php знает и сможет такую штуковину сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, Prilip сказал:

Чтобы изменения вступили в силу, нужно как-то обновиться? 

Я давал ссылку на свои исходники, пока что не выкладываю собранную версию, потому что она в промежуточной стадии. Но если ооочень хочется, то скину как буду дома.

 

 

А насчет php - на вкус и цвет все фломастеры разные. Вот захотелось на C# и все.

Изменено пользователем NeiroN (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Промежуточная сборка: https://yadi.sk/d/RR-je2Ybk3rFcA

Вебсервер(нужно включить в настройках) умеет пути:

http://localhost:8080/[любой путь из корневого каталога] 

http://localhost:8080/flag/*.gif

в формате JSON:

http://localhost:8080/playersList

http://localhost:8080/bansList

http://localhost:8080/chat?type=Тип&timestamp=0000

Где тип = 

        Console

 

        GlobalChat
        SideChat
        DirectChat
        VehicleChat
        CommandChat
        GroupChat
        UnknownChat
        AdminChat

        ScriptsLog
        CreateVehicleLog
        DeleteVehicleLog
        PublicVariableLog
        PublicVariableValLog
        RemoteExecLog
        RemoteControlLog
        SetDamageLog
        SetPosLog
        SetVariableLog
        SetVariableValLog
        AddBackpackCargoLog
        AddMagazineCargoLog
        AddWeaponCargoLog
        AttachToLog
        MPEventHandlerLog
        SelectPlayerLog
        TeamSwitchLog
        WaypointConditionLog
        WaypointStatementLog

 

        Debug

 

А timestamp = время самой старой записи в миллисекундах с 1970.1.1

записей старше 4 часов нет - хз стоит ли держать их дольше

 

Верстку пока лень делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сдеал карту игроков(удаленная база должна быть дейзовской) - отрисовка через svg:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, NeiroN сказал:

Сдеал карту игроков(удаленная база должна быть дейзовской) - отрисовка через svg:

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

Это для DayZ Mod а?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я же написал что координаты из базы  dayzmod берет, для epoch скорее всего нужен другой запрос:

SELECT s.playerName,replace(replace(d.Worldspace,'[',''),']','') FROM player_data s 
LEFT JOIN character_data d ON d.PlayerUID=s.playerUID 
WHERE FIND_IN_SET(s.playerName, @name) AND d.InstanceID=1337 AND d.Alive=1

Можно так то вынести в настройки.

В теории можно через фильтра BattleEYE получать - в клиенте прописать(скрипт специальный) периодический publicVariableServer, а в BE фильтр с логированием в консоль, тогда можно без базы обойтись.

 

Сейчас думаю отдельную вкладку в DaRT c Картой сделать.

Изменено пользователем NeiroN (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, NeiroN сказал:

Я же написал что координаты из базы  dayzmod берет, для epoch скорее всего нужен другой запрос:


SELECT s.playerName,replace(replace(d.Worldspace,'[',''),']','') FROM player_data s 
LEFT JOIN character_data d ON d.PlayerUID=s.playerUID 
WHERE FIND_IN_SET(s.playerName, @name) AND d.InstanceID=1337 AND d.Alive=1

Можно так то вынести в настройки.

В теории можно через фильтра BattleEYE получать - в клиенте прописать(скрипт специальный) периодический publicVariableServer, а в BE фильтр с логированием в консоль, тогда можно без базы обойтись.

Где ты это указал?

в этом тексте?

"Сдеал карту игроков(удаленная база должна быть дейзовской) - отрисовка через svg:"

понятие дейзовской совсем не указывает на именно dayz mod!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, NeiroN сказал:

Я же написал что координаты из базы  dayzmod берет, для epoch скорее всего нужен другой запрос:

 

а ничего, что это вообще раздел DayZ Standalone а не  dayz mod?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, 123new сказал:

а ничего, что это вообще раздел DayZ Standalone а не  dayz mod?

А какая разница(они даже окно армы переделать поленились)?

Я и универсальное решение могу сделать... Скиньте живой сервер (с живой базой players.db) а то поставил а база пустая... А на Standalone у меня как то не куплен а сейчас скидок нет и отдавать 1200 за него неохота

Хз как там данные игрока хранятся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, NeiroN сказал:

А какая разница(они даже окно армы переделать поленились)?

Я и универсальное решение могу сделать... Скиньте живой сервер (с живой базой players.db) а то поставил а база пустая... А на Standalone у меня как то не куплен а сейчас скидок нет и отдавать 1200 за него неохота

Хз как там данные игрока хранятся.

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

Но может попробуешь,вот база прикреплена с одного проекта,и тебе не обязательно покупать игру

players.db

Изменено пользователем DAP (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрел там данные в бинарном формате, нужно заведомо известные данные - позиция скорее всего бинарная. А вот имена скинов, лица, вполне себе текстовые.

нужно чтобы в базе было всего 2 игрока и знать их местоположение, инвентарь, одежду, ник - чтобы сопоставить данные.

2.jpg.2873938c7bb4ed9daf9bc67e0902429f.jpg

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

dist=33592.85546875

players_killed=64

infected_killed=41024

playtime=2430756166 

Переводим в читаемый формат:

datetime.datetime.fromtimestamp(2430756166/1000).strftime("%d days %H:%M:%S")
'29 days 07:12:36'

longest_survivor_hit=158.06077575683594

 

Это для игрока с ID 1

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: MeinCain
      Всем доброго времени суток!

      Может быть есть те, кто подскажут, есть ли адекватные платные админки для Day? Цена не важна. Не встречал просто ни разу, может чем хороша.... Инфистар помню раньше был на моде и А3, но что-то судя по всему уже не работает. Есть ли еще варианты платных админок?
       
      Ультимовскую не предлагать. 
    • Автор: 123new
      И так, ребятки, вот вам небольшая 'полезняшка' от меня, и совершенно бесплатно!
       
      Описание:

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      или создать их самим со следующим содержанием:
      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); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку DefaultSets(player); // Для выдачи своих сетов по рандому всем игрокам, не прописанным в скрипте, раскомментировать эту строку break; } } } void SetRandomHealthItem(EntityAI itemCreated) // Функция генерирует и применяет для предмета рандомное значение здоровья! { if ( itemCreated ) { private int rndHlt = Math.RandomInt(55,6); itemCreated.SetHealth("","",rndHlt); } } void DefaultSets(PlayerBase player) // Функция выдает сеты игрокам, не прописанным в конфигурации скрипта!!! { EntityAI itemCreated = NULL; EntityAI itemCreated1 = NULL; ItemBase itemCasted = NULL; // ниже пример, если вам нужно задать свои точки спавна для всех игроков. Этот код можно также использовать и для каждого сета индивидуально! // Код закомментирован, если это надо - раскомментируйте! // начало кода точек спавна игрока /* private array <vector> spawnpoints = {"7500 0 7500", "7500 0 7500","7500 0 7500", "7500 0 7500"}; private vector selected_spawnpoint = spawnpoints.GetRandomElement(); player.SetPosition(selected_spawnpoint); */ // конец кода точек спавна игрока private int random_set_number = Math.RandomIntInclusive(1,6); // генерируем рандом номер сета от 1 до 6 включительно (по значениям блоков case ниже) switch( random_set_number ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1) { case 1: //Set with number 1 (Сет с номером 1) { 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; } } } } 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 будет применено для всех игроков при респавне в случае, если им не выдан никакой сет!
      Поумолчанию в функции default вызывается функция DefaultSets, позволяющая рандомно выбирать любой из сетов для игроков, которым сет не задан в конфигурации скрипта. Принцип составления сетов такой же, как и выше. Если будете пользоваться этим, обратите вниманием на строку:
      private int random_set_number = Math.RandomIntInclusive(1,6); Эта функция генерирует число от 1 до 6 включительно. Соответственно если сетов будет больше 6, то число надо корректировать и тут тоже!
       
      P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!!
       
      Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в:
              {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c
              {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c
       
      Благодарности: Товарищу Mizev за его первоначальные гайды в группе VK при появлении в сети серверной части игры
       
       
    • Автор: vitacite
      Квест на аномалии. Участники - любые игроки. 3 НПС, 3 Анимированных аномалии (пока без дамага), 3 квестовых предмета - детектор аномалий, карта сокровищь и журнал с девчонками 🙂
      Выглядит это так...
       

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

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

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

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

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

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

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

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

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

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
       
       
      Мануаль по установке тут....
      Обновление от 19.01.2016
      https://github.com/olkeakavitacite/EQP_Anomaly/
      Так же находится описание, как и чего делать.
       
    • Автор: 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
  • Наш выбор

×
×
  • Создать...

Важная информация

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