Current time: 23.03.2024, 18:30 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERA II
» WoG Era 2: Русская и Английская версии
Author Message
Berserker Offline
Administrators

Posts: 16449
Post: #3826

Algor, спасибо, VR:R, конечно, исправил.
Да, вместо него выполняется VR:R. Какая обратная совместимость в вопросе ГСЧ? Это был в своё время просто костыль на коленке в ответ на «нам не нравится, как генерирует rand-фуннкция игры». Хороший генератор псевдослучайных чисел и так обладает свойством слабой предсказуемости и равномерности распределения. Вихрь Мерсенна — один из лучших. Алгоритмически же VR:T и VR:V не отличимы.

И да, VR:T — один из источников рассинхронизации в сетевой игре (событие сработает только у одного из игроков) и абсолютно ненадёжен в плане генерации последовательности (выдаёт одинаковые). Если нужно намеренно сбросить значение генератора на число, зависимое от времени, то пример кода я указал. Берём то же время, что и Слава использовал (timeGetTime) и инициализируем генератор. Но такое не нужно почти нигде.

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

XEPOMAHT, можно чуть подробнее? У меня не стоит Era Scripts на тестовой сборке.


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

Posts: 16449
Post: #3827

Algor, да, объясняю, почему остаток от деления даёт неравномерно распределённые результаты.
Генератор выдаёт двоичное число, скажем 0..15 (16 значений). Мы хотим сгенерировать 0..12 (13 значений).
Если на генераторе выпало 0..12, они и станут итоговыми значениями. Если 13, 14, 15, они станут 0, 1, 2 соответственно (остаток от деления на 13). Имеем удвоенные шансы выпадения 0, 1, 2.
Правильный вариант реализован у меня в модуле Mersenne Twister. При выпадении 13, 14, 15 нужно отбросить результат и повторить генерацию. И так, пока не выпадет 0..12. Вот тогда будут одинаковые вероятности на желаемом числовом диапазоне. С VR:T такой финт не проходит, там не генератор, а просто текущий счётчик миллисекунд.


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

Posts: 2265
Post: #3828

(27.01.2020 16:14)Berserker Wrote:  можно чуть подробнее? У меня не стоит Era Scripts на тестовой сборке.

По версии bug fixes.erm этот код почему-то должен выдавать номер стека, но практически почему-то не выдаёт (вообще не ясно, зачем тут !!SN:X, когда номер можно и нужно получать из батлменеджера):

Code:
!?FU77007;                            [фаза регенерации (перед получением хода)]
!!SN:X?y1;                            [y1 - Отряд]

Вообще данный костыль на палатку, на которую навешивается паралич на 1 ход, давно пора удалить из Era Scripts.
(This post was last modified: 27.01.2020 17:15 by XEPOMAHT.)
27.01.2020 17:11
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #3829

XEPOMAHT, спасибо огромное, обязательно проверю. Мне пришлось менять все команды Эры, не исключаю ошибку.


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

Posts: 3880
Post: #3830

(27.01.2020 17:11)XEPOMAHT Wrote:  Вообще данный костыль на палатку, на которую навешивается паралич на 1 ход, давно пора удалить из Era Scripts.
Если есть более прямой рабочий фикс - я только за, кидай ссылку.
Просто когда я делал, такого не было. Сейчас даже и не помню, как оно работает.

Berserker, понятно все, кроме ""but prefer not do to it for multiplayer support". Какие там подводные камни?


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
27.01.2020 17:39
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #3831

XEPOMAHT, проверил. У меня идеально работает на тестовом бое.
!?FU77007; [фаза регенерации (перед получением хода)]
!!SN:X?y1; [y1 - Отряд]
!!IF:M^%Y1 %X1^;

Что выдаёт у тебя?

Algor, детерминизм в мультиплеере работает так. Одно и то же событие вызывается на обоих сторонах. Генератор с одним и тем же состоянием выдаёт одни и те же последовательности. Код работает одинаково. VR:T был не таким. На двух сторонах он давал разные (миллисекунды-то отличались) последовательности. Далее код шёл по разному сценарию (разные события, координаты, урон). То есть рассинхронизация. Сейчас VR:T равносилен качественному VR:R и можно использовать где угодно. Но сама команда объявляется устаревшей и на старых версиях платформы остаётся убийцей сетевой игры в большом числе случаев.


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

Posts: 2265
Post: #3832

(27.01.2020 17:52)Berserker Wrote:  Что выдаёт у тебя?

Image: b63e0ac351dd.png

(27.01.2020 17:39)Algor Wrote:  Если есть более прямой рабочий фикс - я только за, кидай ссылку.

Из плагина game bug fixes.dll (входит в текущий состав ЭРА):

Code:
_BattleStack_* mon = (_BattleStack_*)(int)(c->esi -656);

    // если выстрелов у катапульты или балисты больше нет
    // то делаем пропуски передачи хода этим машинам
    if (mon->creature_id == 145 || mon->creature_id == 146) {
        if ( mon->creature.shots < 1 ) {
            c->return_address = 0x464DAD;
            return NO_EXEC_DEFAULT;
        }    
    }

и

Code:
// исправление бага палатки, когда на её ходу невозможно убежать или сделать другие действия
    _PI->WriteByte(0x75C82C, 0xEB);
27.01.2020 18:04
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #3833

XEPOMAHT, я рассчитываю номер стека как адрес структуры отряда из ecx - адрес первой структуры / размер структуры отряда в бою. вероятно, один из плагинов подменяет у тебя что-то. Предлагаешь как получать в этот момент номер отряда?
Перехват по адресу 446B50.


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

Posts: 3880
Post: #3834

XEPOMAHT, о, спасибо, уберу у себя тогда.


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
27.01.2020 18:10
Visit this user's website Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4333
Post: #3835

XEPOMAHT, Berserker, Algor, в сборке bug fixes.erm слегка отличается от того, что в чистой Era Scripts.
Я вырезал несколько строк точно и целый кусок с отменой берсерка, кажется, потому что все отряды делали заметную паузу перед "ожиданием", что преаращало игру в слайдшоу во время боя с большим количесвтом отрядов.


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
27.01.2020 18:42
Visit this user's website Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4333
Post: #3836

Berserker, в sublime_editor не хватает автовставки для ресивера !!IF, предлагает лишь !!if/!!en и тп.

(27.01.2020 18:04)XEPOMAHT Wrote:  

Какой прекрасный интерфейс. Его бы под hd mod и некоторые иные моды доработать.Ab


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
27.01.2020 20:21
Visit this user's website Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2265
Post: #3837

(27.01.2020 18:10)Berserker Wrote:  XEPOMAHT, я рассчитываю номер стека как адрес структуры отряда из ecx - адрес первой структуры / размер структуры отряда в бою.

Теоретически, проще и быстрее получать номер стека можно так: mov eax, dword [ecx+F8]

(27.01.2020 18:10)Berserker Wrote:  вероятно, один из плагинов подменяет у тебя что-то.

Вроде бы нет. Перехват Тифона идёт позже, а больше и не кому.

(27.01.2020 18:42)daemon_n Wrote:  bug fixes.erm слегка отличается от того, что в чистой Era Scripts.

Пробовал - то же самое, что и в чистой ES.

(27.01.2020 20:21)daemon_n Wrote:  Какой прекрасный интерфейс. Его бы под hd mod и некоторые иные моды доработать.Ab

Да вроде какие-то энтузиасты делали адаптацию и под HD-мод, и даже кое-кто под MoP:

(This post was last modified: 27.01.2020 20:44 by XEPOMAHT.)
27.01.2020 20:39
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #3838

XEPOMAHT, +F8 разве не уровень существа?


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

Posts: 16449
Post: #3839

XEPOMAHT, возможно, какой-то скрипт в этом событии меняет x1. Можешь проверить с одним тестовым скриптом?


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

Posts: 2807
Post: #3840

(27.01.2020 18:04)XEPOMAHT Wrote:  Из плагина game bug fixes.dll (входит в текущий состав ЭРА):
Не входит.
Названия у плагинов одинаковые, но тот плагин, который в оригинальном установщике ЭРЫ имеет 10% функционала от моего.


game bug fixes extended.dll || My Plugins || My GitHub
27.01.2020 23:27
Visit this user's website 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