ZigoFrend

Фикс сохранение построек/палаток

16 сообщений в этой теме

Нашёл одну статью на форуме ТЫК вот вам перевод. От себя скажу что у меня сервере постройки стоят уже 2-ую неделю.

 

 

Здесь много постов с жалобами на нарушение настойчивости. На самом деле, он работает как задумано. Я знаю, что вы, вероятно, готовитесь разжечь меня прямо сейчас за это, но выслушайте меня. Я не говорю, что это хороший дизайн, на самом деле это ужасный дизайн, но технически он работает правильно. Я думаю, что часть проблемы здесь в том, что люди не понимают, как часто серверы выходят из строя. Именно сбои сервера и являются настоящей проблемой - они являются виновниками потери постоянства, а не самой системы сохранения.

Позвольте мне показать вам, что я имею в виду. Я использовал свой собственный сервер, чтобы разместить палатку на острове Скалисты. Затем я выполнил команду taskkill / F / IM DayZServer_x64.exe, которая имитирует сбой сервера, поскольку ключ / F заставляет exe немедленно закрыться. Результат был такой:
dayz-servercrash-1.png
с последующим...
dayz-servercrash-2.png
ЭТО КЛЮЧЕВАЯ ТОЧКА ЗДЕСЬ. Я не могу сказать вам, сколько стримеров я смотрел, играя в DayZ, которые думают, что это был запланированный перезапуск.  Каждый раз, когда вы получаете красное сообщение об ошибке «Нет сообщений ...» в центре экрана, это сбой сервера, а не перезапуск, и в этот момент это означает, что сервер «потерял постоянство» состояние, потому что, если сервер возвращается без двоичных файлов (которые теперь повреждены) в папке (ях) хранения, заменяемой некоторыми файлами резервных копий, результат будет следующим:
dayz-servercrash-3.png

Я залогинился и, конечно же, палатка исчезла. Зачем? Поскольку двоичные файлы были повреждены, поэтому система загружает свежий Чернарус из файлов XML и создает новый набор файлов сохраняемости хранилища.

Теперь давайте попробуем еще раз, на этот раз ожидаем перезапуска запланированного сервера. На моем сервере он перезапускается каждые 2 часа, поэтому я размещаю другую палатку примерно в том же месте ...

dayz-restart-1.png

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

dayz-restart-2.png

Это ключевой момент, как хорошо. Это сообщение приводит вас к мысли, что это был сбой сервера, хотя на самом деле это не так.  Это был запланированный перезапуск моего сервера. Я подожду минуту, пока сервер снова включится, нажмите «Play», чтобы снова войти в систему, и ...

dayz-restart-3.png

... палатка все еще там, потому что перезапуск корректно завершил работу exe, что означает отсутствие повреждения двоичных файлов (ПРИМЕЧАНИЕ: мой сервер работает в режиме реального времени, поэтому солнце установило немного, поэтому изображение выглядит несколько иначе) ,

Смысл, который я пытаюсь здесь подчеркнуть, заключается в том, что Богемия не будет простым решением этой проблемы. Это было бы серьезным изменением того, как обрабатывается постоянство. Бинарная файловая система должна быть полностью уничтожена для чего-то другого. Вопрос в том, действительно ли Bohemia сделает это, чтобы исправить эту проблему, теперь, когда игра официально выпущена?

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

Итак, настойчивость нарушена? Технически, нет, это не так. Он делает то, что должен делать - сохранять состояние мира на сервере и в результате коррупции загружать новый мир. Так "когда ты собираешься исправить настойчивость?" это не тот вопрос, который мы должны задавать. Реальный вопрос, который мы должны задать: почему сервер так часто падает? Выяснение сбоев сервера будет иметь большое значение для обеспечения стабильности постоянства.


 

 

 

 

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


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


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

Написать собственную систему не получится т.к. нет никаких массивов поиска отспавненных палаток, машин и прочих объектов, которые хранятся на карте, как например было в sfq в ('allmissionobjects "cars")'. Т.е. сделать бы свою альтернативу может и рады бы, но увы, невозможно.

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


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

123new Почему невозможно?

 

Делаем просто ))) через костыли

Сканируем ВСЕ обьекты на карте (эпизодически)

И распихиваем их по массивам TStringArray - по 3 эелемента на класс - имя класса обьекта, координаты, ориентация

А затем пишем в профиль сервера GetGame().SetProfileStringList("имя переменной",названиемассива);

сохраняем GetGame().SaveProfile();

Ну и при старте читать с помощью GetGame().GetProfileStringList("имя переменной",названиемассива); затем в цикле читать массив проверять стоит ли по координатам такой обьект и если нет ставить

ну это просто про обьекты

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

 

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

ну и сохраняю данные в профиле сервера


 

 

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


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

123new Почему невозможно?

 

Делаем просто ))) через костыли

Сканируем ВСЕ обьекты на карте (эпизодически)

И распихиваем их по массивам TStringArray - по 3 эелемента на класс - имя класса обьекта, координаты, ориентация

А затем пишем в профиль сервера GetGame().SetProfileStringList("имя переменной",названиемассива);

сохраняем GetGame().SaveProfile();

Ну и при старте читать с помощью GetGame().GetProfileStringList("имя переменной",названиемассива); затем в цикле читать массив проверять стоит ли по координатам такой обьект и если нет ставить

ну это просто про обьекты

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

 

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

ну и сохраняю данные в профиле сервера


 

 

а ты учел насколько сервер при этом будет грузить машину серверную? Тебя любой хостер после таких нагрузок убьет сразу, если не с 1, то с 3 запуска сервера точно. Это уже больше именно на мазохизм смахивает, судя по симптомам)

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

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


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

123new Ну почему

зависит от железа и виртуалки где это все крутится

нужно просто памяти не менее 12 гиг на серв, а лучше 14

хотя если хостинг на быстрых сас или ссд то пров ваще не заметит короткого всплеска

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


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

BorizzK а ты представь, что работает не виртуалка, а реалка, и сервер не 1 дэйза, а пара-тройка дэйзовых, и арма ккакая-нить с контрой в перемешку. Я думаю народ на других серверах оценит тебя в моменты таких сканов своей пятой точкой.

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


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

123new Это где такой хостинг? Никто давно не предоставляет хостинг (ну кроме самопала) на реал железе

Вcё под виртуализацией (vsphere, hyper-v, xen и тп) и все vcpu, ram и дисковое пространство, что были оплачены, я могу смело грузить на 100% в течение всего оплаченного периода, тк оплачены все мегагерцы, биты и дисковое пространство

 

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


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

BorizzK ууу эт места надо знать. да, не из дешевых, но есть такие ;)

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


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

123new Какие такие? Хостинг без виртуализации бред полнейший, к тому же игровой, да и вообще любой

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


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

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

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


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

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

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


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

Как раз виртуализация обеспечивает лачшую производительность   и надежность, те качество

Просто поверь моему опыту работы в этой области

10 с виртуализацией и 29 в ит вообще

 

Кстати, если тебе выделили физмашину, то как то либо должны выделяться, ограничиваться ресурсы, либо они все твои

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


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

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

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

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


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

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

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

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

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


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

Войти

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


Войти сейчас

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

    • Автор: BorizzK
      Палатки пофикшены
      Ну разве что не ставятся на крест на церкви, ставятся чуть ниже
      Все чисто серверное
       
      Выложу завтра днем после небольшой доработки - что бы красиво было
       
      Вот резалт
       
       

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

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

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: Alex39
       
       
      ARMA 3 FIX V1.92/145639 NoSteam + DLC
      Выкладываю сюда так как на сайте нет отдельного раздела по пираткам клиента, так как стоит на данный момент мод @Exile.
       
      Файлы подходят для всех серверов, без исключения, только ставим свои файлы мода и сервера
    • Автор: BorizzK
      //AUTHOR: BORIZZ.K //Version 20.12.2018.0011 void PlaceAllCarsToGround() { array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; Object object; string className; int objectcount = 0; vector mapcenter = "7500 0 7500"; int radius = 20000; vector foundcar_pos; mapcenter[1] = GetGame().SurfaceY( mapcenter[0], mapcenter[2] ); GetGame().GetObjectsAtPosition(mapcenter, radius, nearest_objects, proxy_cargos); for ( int i = 0; i < nearest_objects.Count(); i++ ) { object = nearest_objects.Get(i); className = object.GetType(); if ( GetGame().IsKindOf(className, "Car" ) ) //if ( className == "OffroadHatchback" || className == "V3SVehicle" || className == "V3SChassis" || className == "CivilianSedan") { EntityAI objectEnt = EntityAI.Cast(object); if (objectEnt) { foundcar_pos = objectEnt.GetPosition(); Print("::: PlaceAllCarsToGround() ::: Found car: " + className + ", objectEnt: " + objectEnt + ", Position: " + foundcar_pos.ToString() + ", SurfaceGetNormal: " + GetGame().SurfaceGetNormal(foundcar_pos[0], foundcar_pos[2]).ToString()); //Check surface under car /* string surface_type; int liquidType; GetGame().SurfaceUnderObject(object, surface_type, liquidType); Print("::: PlaceAllCarsToGround() ::: Found car: " + className + ", objectEnt: " + objectEnt + ", surface_type: " + surface_type + ", liquidType: " + liquidType); */ if ( foundcar_pos[1] < (GetGame().SurfaceY(foundcar_pos[0], foundcar_pos[2])) - 0.1 || foundcar_pos[1] > (GetGame().SurfaceY(foundcar_pos[0], foundcar_pos[2])) + 0.1 ) { foundcar_pos[1] = GetGame().SurfaceY(foundcar_pos[0], foundcar_pos[2]); objectEnt.SetPosition(foundcar_pos); objectEnt.SetOrientation(objectEnt .GetOrientation()); objectEnt.SetDirection(objectEnt .GetDirection()); Print("::: PlaceAllCarsToGround() ::: Position changed for car : " + className + ", objectEnt: " + objectEnt + ", Position: " + foundcar_pos.ToString()); } else { Print("::: PlaceAllCarsToGround() ::: No position change required for car : " + className + ", objectEnt: " + objectEnt); } } } } } Добавить код в init.c (ВНЕ КЛАССА)
      Вызывать в конце функции main()
      Просто вставив в конце
      PlaceAllCarsToGround();
       
      P.S. Поправил код, + учел рекомендации Ультимы
      У меня на сервере с машинами все ок
       
    • Автор: STORMWAY
      Официальные серверные файлы DayZ Standalone 0.63.
       
      Официальная документация от Bohemia (на английском): https://forums.dayz.com/topic/239635-dayz-server-files-documentation/
      Перевод (на русском): 
       
       
      Скачать из Mega.Nz: https://mega.nz/#!VcUE2SDI!KzqEh791T_E-Iwaort4eVwkN5bbvaCwzjluhP0ZWZxw
      Скачать из Steam: https://store.steampowered.com/app/223350/DayZ_Server/
       
      Запуск сервера (У некоторых с этим проблемы)
       
      У некоторых пользователей, сразу возникли проблемы с запуском, а именно:
       

       
      Ошибка подобного содержания.
      Вот вам решение проблемы:
      Вам нужно, создать .bat файл в директории сервера, с этим содержанием:
      «start "" "DayZServer_x64.exe" -port=2302 -config=!ServerSettings\serverDZ.cfg -profiles=!ServerSettings -user=!ServerSettings -name=Server -freezecheck -autoinit»
      Поясняю:
      -port=2302 — Указать ваш открытый порт.
      -!ServerSettings — Папка с файлами конфигурации, базой данных игроков, настройками BattleEye и файлами логов сервера.
      P.S. Если нужно, дописываем в конце «-adminlog» для создания дополнительного файла с логами сервера формата .ADM
      Далее, создаем папку в корне сервера «!ServerSettings» про ! не забываем!
      И в эту папку переносим файл serverDZ.cfg
      Все, запускать сервер через созданный нами BAT файл.
       

    • Автор: voralex
      Доброго времени суток!)
      Вот вам первый фикс на предложенную мною версию сервера DayZ Standalone 0.60.133913
      И так начнем :
      1.Берем файлы ниже.
      2.Все папки из архив-->>v0.60 закинуть в корень сервера с заменой.
      3.Открываем в корне сервера папку voralex-->>server.cfg
      4.В нем вставляем строки :
      5.В корне сервера-->>storage_-1\ChernarusPlus\000 в данной папке все удаляем!
      Теперь у вас сохраняется транспорт\персонаж\палатки и т.д.
      Поздравляю!)
      Жду <3
      Файлы сохранения : Яндекс.диск
      ЛИБО НИЖЕ(прикреплено).

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