Wake of Gods Forum | Форум Во Имя Богов

Full Version: ERA / WOG - сетевая игра и проблемы с ней
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Итак - найден ещё один баг сетевой игры:

Справочник Wrote:Rx
Генерировать случайное значение от 0 до x (включительно) и ДОБАВИТЬ его к текущему значению.

R#/$
Установить генератор случайных чисел на одно значение.
    $ – номер случайного числа в генераторе для синхронизации.
    # – фантомный параметр (не используется)
Если вы не уверены, что генератор случайных чисел в одинаковой позиции на обоих компьютерах, вы можете просто перезапустить их на один ритм.
!!VRy1:R25; - Вызов данной команды в мультиплеере в триггере !!BG0;(- срабатывает перед действием) ломает сетевую игру. (на 2-х машинах) Значение там разное!!!

!!VRy1:R0/y1; - данная строчка кода всего лишь делает что? Я так и не понял, но вызов данной команды в мультиплеере (на 2-х машинах) вызывает рассинхрон. Значение там хоть и одинаковое, но лишь присутствие данного ресивера в триггере !!BG0;(- срабатывает перед действием) ломает сетевую игру.


Прошу не использовать данные ресиверы в данном триггере и объяснить, зачем !!VRy1:R0/y1; вообще нужен?
Возможно, именно подобная механика присутствует в навыках существ с рандомным значением, что ломает сетевую игру. Нужно искать альтернативы.

UPD: тот же результат и с !!VR:R0/#min/#max

!!OW:C?y1/?y1;
!!VRy2&y1=0:R0/100/300;

Достаточно вызова генератора лишь с одной стороны, чтобы был рассинхрон.
Например, здесь сработает лишь для красного.
Отличное наблюдение.
Berserker, дополнил
Это разные команды даже по смыслу. ЗЫ. Если код выполняется на обоих сторонах, рассинхрона быть не должно.
Berserker, я ещё немного дополнил. Но говорю, как есть
Если хоть кто-то из игроков (да-да, достаточно одному) инициирует запуск любого из !!VR:R (просто запуск - даже значение нигде не нужно использовать)- рассинхрон будет!

Решение я вижу здесь примерно такое (для опыта существ и вторичных навыков)
Генерация значения должна быть сделана до боя. То есть все "рандом шансы" должны быть предопределены в BA0

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


Также напоминаю об этом:

Проблема получения типа игры у героя-защитника.
Quote:Достаточно вызова генератора лишь с одной стороны, чтобы был рассинхрон.
Всё верно. Так во всех играх. Нужно идентичные вызовы делать со всех сторон.

UPD: если get-синкаксис для !!FU:D, внезапно, не работает, мне нужен любой другой механизм получения какого-либо значения у оппонента в сетевой игре.
Не передать данные оппоненту, а получить данные у оппонента.
Не работал и не работает. Не пробовал на обратной стороне в ответ на вызов функции выслать данные отправителю через FU:D?
Berserker, пробовал, не работает так как мне надо.

И да, в Хэлпе, в т.ч. англоязычном, про неработающий get-синтаксис ничего не сказано:
D$/$/$ ... up to 16#s. Call the function at opposite side. Syntax is the same as for FU:P
Посему, считаю багом и требую сатисфакции исправления (не в хэлпе, а в Эре) Yes
Algor, там в реализации именно стандартная асинхронная отправка данных геройской функцией. GET никогда и не планировался к поддержке. Механизма отправки с получением нет. Да и в целом с момента отправки данных на том стороне сколько угодно событий может произойти до их получения. А потом ещё сколько угодно событий с момента отправки ответа.

Quote:Berserker, пробовал, не работает так как мне надо.
Тебе нужно классическое синхронное поведение. Когда обе игры подвисают до отправки/приёма/обработки/ответной отправки данных. Такого в Г3 нет. Поправьте меня, если не так.
Не совсем. Мне не нужно синхронное поведение, мне нужно как-то его эмулировать.
Сейчас делаю очередную за последние годы попытку этого добиться самыми извращенными способами, которые только приходят на ум. Пока не получается.

Еще у тебя пропущена константа 999, обзови как-нить при случае
; =============== ERM FLAGS ===============
!#DC(ERM_FLAG_REAL_BATTLE) = 1000;
!#DC(ERM_FLAG_IS_HUMAN) = 1000;
!#DC(ERM_FLAG_NETWORK_BATTLE) = 997;
!#DC(ERM_FLAG_HUMAN_VS_HUMAN_BATTLE) = 998;
; ============= END ERM FLAGS =============

И да, сейчас уже есть вариант вставить в код задержку на N секунд? А то может я пропустил.
Algor, нужен именно номер раунда? Насколько я знаю, он общий на двоих.
daemon_n, нет конечно, это просто для примера надо было что-то передать.
Функция sleep редко в играх применяется. Заморозишь всё окно, обработку сетевых событий, анимацию и т.д.
Berserker, т.е. нет? Ок.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Reference URL's