Current time: 21.04.2024, 10:32 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERA / WOG - сетевая игра и проблемы с ней
» Очень актуальная тема на день её создания
Author Message
Elmore Offline

Posts: 589
Post: #91

Не не не, я именно написал "когда плагин пойдет в релиз". Разумеется, мы его сперва тщательно оттестируем 132
А Баре нужен сервак на хостинге с безлимитным трафиком. Я так понимаю именно это он имел ввиду.


Image: widget.png?style=banner2
(This post was last modified: 08.06.2021 21:18 by Elmore.)
08.06.2021 21:17
Find all posts by this user Quote this message in a reply
Panda Away
Moderators

Posts: 1005
Post: #92

Elmore, он имел в виду, что нужно улучшать именно аппаратную начинку (ОЗУ, ЦПУ).


Тот, кто просыпается рано - жаворонок, поздно - сова. А тот, кто плохо спит и ходит с черными кругами под глазами - панда!
08.06.2021 21:37
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16486
Post: #93

-) VR:R использует геройский random() в бою. Странно, что Слава использовал random() не геройский. Можно, конечно, перенаправить эту вог-функцию на геройскую реализацию.
-) Вне боя вместо геройского random() используется Вихрь Мерсенна. Функция перехвачена.
-) Алгоритм diff от Славы вызывал вылеты. В особенности при разных размерах сохранений. Кроме статической памяти ЕРМ появилось множество динамических секций. Разобраться в нюансах мне не удалось. Я пропатчил код, вырезав весь diff-функционал на корню. Всегда отправляется полное сохранение.

Code:
(* Fix multiplayer crashes: disable orig/diff.dat generation, always send packed whole savegames *)
  Core.p.WriteDataPatch(Ptr($4CAE51), ['E86A5EFCFF']);       // Disable WoG BuildAllDiff hook
  Core.p.WriteDataPatch(Ptr($6067E2), ['E809000000']);       // Disable WoG GZ functions hooks
  Core.p.WriteDataPatch(Ptr($4D6FCC), ['E8AF001300']);       // ...
  Core.p.WriteDataPatch(Ptr($4D700D), ['E8DEFE1200']);       // ...
  Core.p.WriteDataPatch(Ptr($4CAF32), ['EB']);               // do not create orig.dat on send
  Core.p.WriteDataPatch(Ptr($4CAD91), ['E99701000090']);     // do not perform savegame diffs
  Core.p.WriteDataPatch(Ptr($41A0D1), ['EB']);               // do not create orig.dat on receive
  Core.p.WriteDataPatch(Ptr($4CAD5A), ['31C040']);           // Always gzip the data to be sent
  Core.p.WriteDataPatch(Ptr($589EA4), ['EB10']);             // Do not create orig on first savegame receive from server


Вопрос: исправит ли проблему принудительная отправка сетевого пакета на синхронизацию состояния генератора при каждом вызове random(), если весь WoG-код тоже будет использовать геройский random()?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
08.06.2021 21:55
Find all posts by this user Quote this message in a reply
ZVS Offline

Posts: 500
Post: #94

(08.06.2021 20:53)igrik Wrote:  по старой памяти накидал я на скорую руку плагин. Если есть желание, потестируйте плиз. Я с десяток боёв провёл - вроде всё норм.
Попробую, но не раньше конца недели. Все же мне кажется, что синхронизация параметров монстров не вылечит от рассинхрона ГСЧ.
Quote:передача данных свыше 4кб будет дорого ему обходиться в лобби
Я, наверное чего-то не понимаю, но при чем тут лобби? Разве оно не используется, чтобы просто начать игру, а далее все передается от игрока к игроку напрямую?
(08.06.2021 21:55)Berserker Wrote:  -) VR:R использует геройский random() в бою. Странно, что Слава использовал random() не геройский. Можно, конечно, перенаправить эту вог-функцию на геройскую реализацию.
Честно уже не помню, но, согласись, было бы странно, чтобы я его использовал, а другим говорил его НЕ использовать.
Хотя в принципе могу лишь повторить. Генератор не важен, если его инициализировать перед использованием одинаковым зерном.
Quote:-) Вне боя вместо геройского random() используется Вихрь Мерсенна. Функция перехвачена.
Не думаю, что это решит проблему рассинхронизации.
Quote:-) Алгоритм diff от Славы вызывал вылеты.
Ты имеешь в виду СТАЛ вызывать вылеты после добавления дин. данных?
Иначе как TE работал с ним?
Quote:Я пропатчил код, вырезав весь diff-функционал на корню.
Т.е. ты вырезал не только WoGовский diff, но и SoDовский заодно. Передача полного сэйва, конечно, уже не проблема с современными скоростями. Хоть он и в 100-ни раз больше по размеру.
Думаю можно считать удачным решением.
Quote:Вопрос: исправит ли проблему принудительная отправка сетевого пакета на синхронизацию состояния генератора при каждом вызове random(), если весь WoG-код тоже будет использовать геройский random()?
Мое мнение - да, при условии, что ты точно уверен, что нашел все рассинхроны ГСЧ.
Но я бы настаивал на моем предложении устанавливать зерно принудительно детерминированно (не значит в одно и тоже значение) на обоих сторонах без передачи по сети зерна.
08.06.2021 22:52
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4338
Post: #95

igrik, спасибо. В ближайшие часы сделаю тесты

Все молодцы! Работаем дальше177


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
08.06.2021 23:10
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 2814
Post: #96

(08.06.2021 22:52)ZVS Wrote:  Попробую, но не раньше конца недели. Все же мне кажется, что синхронизация параметров монстров не вылечит от рассинхрона ГСЧ.
Нет, не вылечит. Но хотя бы один маленький кирпичик положен.
На самом деле этот код так, на вскидку. Я думаю его ещё дорабатывать и дорабатывать.
(08.06.2021 22:52)ZVS Wrote:  Я, наверное чего-то не понимаю, но при чем тут лобби? Разве оно не используется, чтобы просто начать игру, а далее все передается от игрока к игроку напрямую?
Нет. Все данные всегда через сервер лобби проходят (если игра играется через лобби).
И если сервер упал или начал обновляеться - игра прерывается, о чём пользователи получают уведомление.


game bug fixes extended.dll || My Plugins || My GitHub
08.06.2021 23:52
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16486
Post: #97

ZVS, igrik говорит про игру по сети с HD-модом. Не по локальной, а по глобальной через личный сервер автора HD-мода. На сервере видны публичные игры, есть возможность играть, даже если у тебя нет белого IP. Все данные отправляются и принимаются через сервер, то есть он прокси. И там ограничение на размер данных за одну пересылку. Было 4 КБ, для Эры бараторч поднял до 60k, если память не изменяет.

Quote:Ты имеешь в виду СТАЛ вызывать вылеты после добавления дин. данных?
Именно так, стал. Какое-то время спасало дополнение сохраняемых данных нулями до фиксированного значения, например 4 МБ. Потом перестало, так как вылетало в случайный момент. В конечном счёте оказалось, что проще всего посылать всю сохранёнку в ~600 КБ для XL-карты.

Quote:Но я бы настаивал на моем предложении устанавливать зерно принудительно детерминированно (не значит в одно и тоже значение) на обоих сторонах без передачи по сети зерна.
Это не будет уже ГСЧ вообще, как мне кажется. Запусти цикл на генерацию 20 значений, ничего не меняя ещё на поле боя. И будет 20 одинаковых чисел. Всё, что у нас есть — хэш от нескольких значений вроде раунда и позиций отрядов. Я по разному в жизни извращаюсь с генерацией псевдослучайных значений, но тут видится тупик. И это даже не разброс урона, не стремящийся к мат. ожиданию, а такие важные вещи как блоки, мораль, случайные заклинания.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
09.06.2021 00:09
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4338
Post: #98

igrik, не сработал плагин как минимум на навыке окаменения от Архидьяволов.
и на "неудачном ударе"


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
09.06.2021 00:54
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 2814
Post: #99

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


game bug fixes extended.dll || My Plugins || My GitHub
09.06.2021 01:01
Visit this user's website Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4338
Post: #100

igrik, это плагин, который активизирует "неудачу" (половина урона)

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

Проще говоря, видно, что плагин работает!

UPD: проблема та же и с "удачным ударом"
Плюс "Печаль", наложенная Архидьяволом, не дала эффекта, так как наложена лишь на одной стороне. В дэбафах она есть, но эффекта не возымела.


Далее, как только Мастер-Гремлины скастовали "минное поле" перед выстрелом (только на стороне защитника, лол), его урон изменился, но удар другими юнитами всё равно наносит верный урон на обеих сторонах

Всё - минус-мораль лишь на одной стороне - окончательный рассинхрон


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
09.06.2021 01:05
Visit this user's website Find all posts by this user Quote this message in a reply
ZVS Offline

Posts: 500
Post: #101

(09.06.2021 00:09)Berserker Wrote:  Это не будет уже ГСЧ вообще, как мне кажется. Запусти цикл на генерацию 20 значений, ничего не меняя ещё на поле боя. И будет 20 одинаковых чисел. Всё, что у нас есть — хэш от нескольких значений вроде раунда и позиций отрядов. Я по разному в жизни извращаюсь с генерацией псевдослучайных значений, но тут видится тупик. И это даже не разброс урона, не стремящийся к мат. ожиданию, а такие важные вещи как блоки, мораль, случайные заклинания.
А я не вижу проблемы. По-моему вполне можно обойтись чем-то вроде "хэш от нескольких значений вроде раунда и позиций отрядов".
Мне кажется ты просто не хочешь этим заниматься, т.к. слова "видится тупик" видятся не очень аргументированно. Ab Если все же решить попробовать можем детали "хэша" обсудить.
09.06.2021 01:19
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 2814
Post: #102

Для общей информации, да и пусть будет тут:
1006 - тип действия в бою + передача зерна (передаётся: 0x47883B; принимается: 0x473D61)


game bug fixes extended.dll || My Plugins || My GitHub
09.06.2021 01:52
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16486
Post: #103

ZVS, при возможности попробую и фиксированный, конечно.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
09.06.2021 02:00
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4338
Post: #104

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


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
09.06.2021 02:14
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16486
Post: #105

daemon_n, для сингла такой убийственно некачественный генератор не подойдёт, да и незачем. Проблема лишь в сетевой битве человек vs человек.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
09.06.2021 02:17
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group