Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • OPG PROJECT

    Группа ВК

    По-настоящему хороший сервер с уникальным модом! 
     Заходи к нам,тебе тут понравится!
ZigoFrend

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

Recommended Posts

Нашёл одну статью на форуме ТЫК вот вам перевод. От себя скажу что у меня сервере постройки стоят уже 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-й минуте часа перед следующей запланировано резервное копирование.

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


 

 

 

 

Share this post


Link to post
Share on other sites



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

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

Share this post


Link to post
Share on other sites

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

 

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

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

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

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

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

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

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

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

 

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

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


 

 

Share this post


Link to post
Share on other sites
24 минуты назад, BorizzK сказал:

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

 

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

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

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

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

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

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

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

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

 

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

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


 

 

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

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites

123new Ну почему

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By BorizzK
      В эксперементалке 1.08 если сбросить предмет находясь на машине (крыше, багажнике, капоте в кузове) предмет проваливается сквозь машину на землю или оказывается в ее текстурах
       
      Тикет
      https://feedback.bistudio.com/T152071
       
      ответ богемии поразителен - сейчас нет простого решения
       
      А ниже что? Проще не бывает...
       
      Собственно код фикса (Автор Я)
       
      Code ``` modded class ItemBase extends InventoryItem { override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc) { super.EEItemLocationChanged(oldLoc,newLoc); if (newLoc.GetType() == InventoryLocationType.GROUND) { if (oldLoc.GetParent()) { PlayerBase player = PlayerBase.Cast(oldLoc.GetParent()); if (player) { FixPositionIfDropOnCar(player); } } } } void FixPositionIfDropOnCar(PlayerBase player) { vector m_RayStart; vector m_RayEnd; m_RayStart = player.GetPosition(); m_RayStart[1] = m_RayStart[1] + 0.5; m_RayEnd = m_RayStart; m_RayEnd[1] = m_RayEnd[1] - 1; RaycastRVParams m_RayCastInput = new RaycastRVParams(m_RayStart, m_RayEnd, this, 0.05); array<ref RaycastRVResult> m_RayCastResults = new array<ref RaycastRVResult>; m_RayCastInput.with = player; m_RayCastInput.flags = CollisionFlags.FIRSTCONTACT; if (DayZPhysics.RaycastRVProxy(m_RayCastInput, m_RayCastResults)) { if (m_RayCastResults.Count() > 0) { Car car; if (Class.CastTo(car, m_RayCastResults[0].obj) || Class.CastTo(car, m_RayCastResults[0].parent)) { this.SetPosition(m_RayCastResults[0].pos + (player.GetDirection() * 0.1)); } } } } } ``` Наверное имеет смысл чуть приподнять предмет над поверхностью, но необходимость этого зависит от типа предмета, потому не стал этого делать
       
      чуть откорректировал код
    • By BorizzK
      Собственно речь про расширения VPPAdmintools
      1 Автор собирает IP серверов где работает админка
      2 Если надо он заносит ip в некий черный список, сервер при обращении к его "сайту" получит инфу, что сервер в блоке и скрипт не даст подключаться игрокам

      Само расширение - код - спасибо комраду @Selleti
       
      modded class MissionServer { private string vppatlockmessage = "Server is Currently Locked!"; private string serverIP; private bool violatedRules = false; void MissionServer() { GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.vppapi, 5000.0, false); serverIP = GetServerIP(); } private void vppapi() { VPPATapiCB cb = new VPPATapiCB( this ); CURLContext ctx = GetCURLCore().GetCURLContext("http://54.39.130.144:5600"); ctx.GET( cb, string.Format( "/Validate?address=%1", serverIP ) ); } void setStatus(bool state) { violatedRules = state; if ( state ) vppatlockmessage = "Server Locked. Please contact the developer of the following mod [ VPPAdminTools ]\nEmail: vanillaplusplusdayz@gmail.com\nDiscord: discord.gg/GWXN2bB"; } void ForceKickPlayers() { GetRPCManager().SendRPC( "RPC_MissionGameplay", "KickClientHandle", new Param1<string>( vppatlockmessage ), true, NULL); array<PlayerIdentity> identities = new array<PlayerIdentity>; GetGame().GetPlayerIndentities( identities ); foreach(ref PlayerIdentity iden: identities) { GetGame().ChatPlayer("#kick " + iden.GetName()); Print(vppatlockmessage); } GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.ForceKickPlayers); } override void OnEvent(EventType eventTypeId, Param params) { if ( violatedRules ) GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.ForceKickPlayers, 3500, false); else super.OnEvent(eventTypeId,params); } string GetServerIP() { string ip; if (GetCLIParam("ip", ip)) { return ip; } return "0.0.0.0"; } }; class VPPATapiCB: CURLCallback { private string response; private MissionServer serverMission; void VPPATapiCB(MissionServer ms) { serverMission = ms; } override void OnSuccess( string data, int dataSize ) { response = data; if ( response == "true" ) serverMission.setStatus(true); } }; И собственно 2 фикса для серверного мода

      1 Удаляет расширение из загруженных модов вообще - автор Selleti
      выполнено в виде конфига мода
       
      class CfgPatches { class VPPATExtensions_FIX { units[] = {}; weapons[] = {}; requiredVersion = 0.1; requiredAddons[] = {"DZM_VPPATExtensions"}; }; }; class CfgMods { delete VPPATExtensions; }; 2 Удаляет из очереди вызов функицию которая ставится в очередь в конструкторе класса MissionServer  в моде VPPAdmintools в скрипте из обфусцированного VPPExtensions.pbo - автор - ну в общем пофигу - просто все
      выполнено в виде скрипта
      modded class MissionServer extends MissionBase { void MissionServer() { GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.vppapi); } }
      За сим раскланиваюсь
      Всегда Ваш

       
    • By Serdce
      Ссылка на первоисточник - https://github.com/BrettNordin/Exile
      Я всего лишь перевёл
      Собственно переходим по ссылке, и скачиваем архив.
      Для тех, кто не знает как качать с хаба скрин 
      И так, едем дальше
      Скачанный архив распаковываем в удобное место для работы,
      Идём в ваш @ExileServer, там нас интересуют файлы - extDB2.dll , extDB2.so , extDB2-conf.ini , XM8.dll , XM8.so Удаляем эти файлы
      Далее идём в @ExileServer которую мы скачали, всё её содержимое копируем в аналогичную папку на сервере.
      Теперь идём в вашу MPmissions и там распаковываем вашу миссию "Exile.название карты",
      Туда мы копируем содержимое папки Exile.MapName из архива,
      Далее открываем ваш config.cpp и ищем там class CfgExileCustomCode 
      В него мы добавляем - #include "CfgExileCustomCode.cpp"
      Должно получится так
      Запаковываем обратно)
      Ну и теперь из архива мы копируем tbbmalloc.dll, tbbmalloc_x64.dll в папку расположения вашего Arma3_server.exe
      Не забываем поменять в вашем файле запуска сервера с arma3server.exe на arma3server_x64.exe 
      Ну и финишная прямая, открываем вашу базу данных ( желательно с название exile ) и добавляем файл Exile_Database_Update_64x.sql
      Далее настройте под себя ваш extdb3-conf.ini
       
    • By Astrahrom
      Столкнулся с цикличной проблемой в лаунчере, при установке ботов A3EAI:
      Script @epochhive\A3EAI_config.sqf not found Оказалось, что все дело в том, что в открытом доступе лежат старые версии этого скрипта, и все кто пытается воткнуть в Epochhive, как я, данный скрипт - делают это по старой схеме, не актуальной для последних версий.
       
      Решение
       
      Скачиваем - https://yadi.sk/d/HfXeB1pEAGoRtw
       
      Устанавливаем:
      1. Взять из папки архива "1. Installation Package" папку "@A3EAI" и вложить её в папку с вашим сервером;
      2. Прописать скрипт в вашем запускаторе, примерно так:
      -servermod=@EpochHive;@A3EAI; Пример моего запускатора:
      @echo off start "arma3" "arma3server.exe" -servermod=@EpochHive;@A3EAI; -mod=@Epoch; -config=C:\Arma3Server\sc\server.cfg -port=2307 -profiles=sc -cfg=C:\Arma3Server\sc\basic.cfg -name=sc -autoINIT Варианты настройки, которые хранятся в самой папке @A3EAI\addons\a3eai_config в файле config.cpp.
    • By BorizzK
      Палатки пофикшены
      Ну разве что не ставятся на крест на церкви, ставятся чуть ниже
      Все чисто серверное
       
      Выложу завтра днем после небольшой доработки - что бы красиво было
       
      Вот резалт
       
       

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

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

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

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.