Перейти к содержанию

Сообщения от Круглый стол

В ответ пользователю Iamsamstan
Аватар пользователя
Почитываю иногда темы оффлайн-турниров на ХП, в основном в целях улучшения знания матчасти, ребята иногда весьма неочевидные вещи находят.

В онлайне нередки случаи дисконнекта, и иногда при повторе передачи хода комп ходит иначе, чем первоначально. Нарезка постов из дискуссии оффлайнщиков по этому вопросу:

handbookhmm.ru/1-moral-luck-ppb
Хотя статья написана по Героям 1, насколько я знаю, ГПСЧ в 2 отличается только переинициализацией в начале боя в зависимости от армий, а в 3 ещё зависимость от анимации в бою прикрутили, в остальном - то же самое. Как можно догадаться из постов выше, я допускаю, что есть ещё какие-то отличия, но...

R — это псевдослучайное число, которое используется для нужд алгоритмов, отвечающих за «случайные» события в игре (в том числе и за выпадение морали и удачи).

Текущее значение R - это четырёхбайтное значение (двойное слово, DWORD), которое хранится в оперативной памяти на момент начала проверки.

Данное число порождает последовательность псевдослучайных чисел по известному алгоритму, поэтому достаточно знать текущее (или начальное) значение R, чтобы можно было вычислить любое другое.

При самой проверке происходит генерация нового псевдослучайного числа, которое и используется для определения результата проверки. Схематично это выглядит так: R[0] или Seed -> R[1] -> R[2] -> ... Значение Seed инициализирует ГПСЧ (может зависеть, например, от текущего времени; генерируется во время запуска игры, поэтому перезапуск во многих случаях оказывается так полезен). Каждое игровое событие, требующее броска игральной кости, берёт в качестве Seed ( "семени" ) значение, оставшееся от предыдущей генерации, однако использует новое, полученное с помощью специального алгоритма из предыдущего. Исключением* является левел-ап, когда в качестве предыдущего случайного числа выступает значение функции, аргументами которой являются уровень героя и номер его дерева прокачки.

Уровень повышается на всех машинах одинаково, так что если сейв загружен непосредственно после получения уровня, то различий никаких быть не должно. Однако если игрок зашёл в город и открыл окно форта или посмотрел на статы какого-нибудь отряда в его армии, то значение R изменится (в цикле анимации существ).

Ещё некоторые события не используют предыдущее случайное значение в качестве "затравки". Например, Seed для каждого боя вычисляется отдельно и не является случайным числом, т.к. разбиение нейтралов на стеки, появление грейженого стека и генерация препятствий на поле боя также не являются случайными (зависят от координат клетки, на которой происходит битва). Кстати, именно поэтому можно использовать таймер/секундомер для ловли морали и удачи.

Проверить, использует ли эта функция глобальный ГПСЧ, можно, например, следующим образом. Перед каждой загрузкой сейва, рассматриваемого в данной теме, загружайте сперва другой, заранее подготовленный сейв (dummy), где какой-нибудь герой берёт сундучок на опыт и повышает свой уровень. Теперь загрузите собственно турнирный сейв и передайте ход. Запишите результат и повторите описанную процедуру несколько раз. Между загрузкой сейва dummy и передачей хода в турнирном сейве не выходите из игры, не открывайте окно форта или окно с информацией об отряде, не изменяйте игровые настройки громкости. Теперь попробуйте вместо сейва dummy загружать какой-либо другой сейв dummy1, в котором уровень повышает уже другой герой. Рано или поздно Вы должны будете подобрать такой сейв dummyN, после загрузки которого герой компа будет нападать всегда, причём это сможет повторить кто угодно и на какой угодно машине.

А сколько различных уникальных чисел для seed можно сгенерить через level-up?

Хороший вопрос Нужно посчитать, сколько различных значений может принимать следующая функция:
R(Level, TreeNo) = (343FDh * Level + 26497h * TreeNo + 259DFh) * 343FDh + 269EC3h
Причём здесь возможно переполнение, так что необходимо ещё добавить в конец and 0FFFFFFFFh.

Порядок определить совсем не сложно. Поскольку TreeNo, как я понял из описания, фиксировано для каждого конкретного героя, то функция может принимать всего 75 значений (именно столько раз можно корректно повысить уровень героя, согласно ФизМиГу).

75 нужно умножить на 255, т.к. на "левом" сейве можно выбрать абсолютно любого героя для получения уровня. Итого, 75 * 255 = 19125.

Добавлено через 6 минут
Для онлайна здесь вижу сложность, что при загрузке сейва как минимум 1 раз генерируется новое случайное число - при выборе монстра, анимация которого будет сопровождать загрузку. Хз сбивает ли это настройки ГПСЧ и хз перегенерируется ли оно в процессе анимации (как у юнитов на карте).

Еще можно попросить Бараторча реализовать выбор seed-а для хода компа независимым от R, как для левелапа. Например, привязать его к номеру игрового дня, тогда повтор хода (с точным сохранением армии) будет давать однозначность хода компа.
Аватар пользователя
Я вот нифига не понял, кроме одного. Еще с начала 2014 года уже чет перекрутили на счет того, что касается битв. Ибо даже тебе, Викк, писал о норм тактике взятия консы 3 за флакс еще в турнире TDD. Сейчас она нифига не работает, сколько не пробывал, первый стек грифов всегда летит не туда. Фиг с ним, потери от этого меняются с достойных на минус 3-4 психа либо 1 птицу, но суть не в этом, сам алгоритм действий нейтралов поменялся и это не есть гуд. Вот сейчас они даже в наглую могут не влупить подставленную единичку, а ломиться к основному стеку, надеясь на мораль.
Ася 390383586

Осень-Зима 2013-14.
В ответ пользователю Vatya
Аватар пользователя
Сегодня против Маретти встретил впервые вот такую штуку при попытке подключения.
Коннект через ТВ.
Встречал ли кто такое ранее и как убрать её.

В ответ пользователю Redwhait
Аватар пользователя
Redwhait HP
Сегодня против Маретти встретил впервые вот такую штуку при попытке подключения.
Коннект через ТВ.
Встречал ли кто такое ранее и как убрать её.

На днях Журист катал с датчанином - была такая же чешуя. Решилось сменой хоста - создавал Журист. Вроде раньше Тварына с ним еще не мог сконнектится, причем, если мне память не изменяет, обоюдно. Вплоть до ребутов системы дело доходило.
Аватар пользователя
Это его файрвол шалит, встречал такое при игре с ним.
http://www.twitch.tv/mikevalentine/
Аватар пользователя
Интересно у кого как изменились приоритеты по замкам за время начало\текущее состояние. У меня вот 2 штуки из верха списка попали в низ.
Ася 390383586

Осень-Зима 2013-14.
Аватар пользователя
Попробовал сегодня играть с чужого компа, тоже не смог сконектиться ни через ТВ, ни через хаму. Если я создаю, оппу такая же ошибка вылетает, если он создает - то мне тупо пишет айпи не найден. Стоит 8 винда, фаервол и антивирус я вырубил, версия героев с рутрекера от джастобсервера. Какие еще могут быть причины таких ошибок?
В этом мире есть только две действительно бесконечные вещи - вселенная и глупость, при чем на счет первой я не уверен...©
icq 667277468
В ответ пользователю SP_SkyLine
SP_SkyLine
Попробовал сегодня играть с чужого компа, тоже не смог сконектиться ни через ТВ, ни через хаму. Если я создаю, оппу такая же ошибка вылетает, если он создает - то мне тупо пишет айпи не найден. Стоит 8 винда, фаервол и антивирус я вырубил, версия героев с рутрекера от джастобсервера. Какие еще могут быть причины таких ошибок?
попробуй на хдмоде поставить совместимость хп сп2
Когда рестартов не осталось, обязательно ждите Гурниссона без балисты:D

Комплимент который сделал мой день:
Катя ЭПИК барышня) вы бы видели как пялились на её сиськи молодёж) я та с девушкой был) но всё равно пялился ) потому что хорошие) (с) Browser

Слабая раздача, которую заиграл исключительно из-за колпака на 111. (с) Сатир

В ответ пользователю aka.Ward3n
Аватар пользователя
14.09.2014 г. тоже похожая ошибка в хамачи выскочила: "Unknown error". Так соединения и не добились. Впервые подобное вижу. Обновление версии хамачи не помогло :confused:
Аватар пользователя
Ребята, хочу поднять пару вопросов:

1. Недавно "под еду" смотрел стрим, причем двусторонний. Меня напряг факт того, что люди раздают советы типа "туда не иди - сюда иди", "эй, ты забыл передать арты" и напоминания скупил во внешке юнитов или нет.
Но это в принципе ничего...
Но когда увидел что оппоненту в аське пишут "только не вздумай разгонять главного" и пр. стало как-то неуютно. В конкретной ситуации это все было "сотрясанием воздуха", но кто может гарантировать что эти советы были просто жестом доброй воли и дружеской помощью, а не анализом реальной обстановки по ту сторону коннекта?
Просто сам пару раз попадался на разгоне и ловил вполне удачно, а тут "ангел хранитель" бдит :)

2. Как по правилам положено выходить из ситуации:
Играем с противником на шахматном таймере. Решили засейвиться. Записали таймеры. Как при загрузке их привести к прошлым значениям? Ибо как показала вчерашняя партия Тоганаша с Маретти - таймер это СИЛА! :)
"Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
"Сущность войны — обман. Искусный должен изображать неумелость. При готовности атаковать демонстрируй подчинение. Когда ты близок — кажись далёким, но когда ты очень далеко — притворись, будто ты рядом."
В ответ пользователю Rabe
Аватар пользователя
Rabe
Записали таймеры. Как при загрузке их привести к прошлым значениям?
Тот, кто грузит, должен подождать количество времени, добавляемое на ход (например, 8 минут, если играется n+8+1) и передать ход.
Нам это идеально подойдёт! (с)

"Совесть - она либо есть, либо её нет" (с) RedWhait HP
В ответ пользователю MerlinTheMagician
Аватар пользователя
MerlinTheMagician
Тот, кто грузит, должен подождать количество времени, добавляемое на ход (например, 8 минут, если играется n+8+1) и передать ход.
пфф, мы тут с Дерти ждали 24 минуты после загрузки сейва :smile04:
Я думаю выход таков, что надо сейвы делать в начале хода т.к шахматный прибавляет количество времени за предыдущий ход.
В ответ пользователю Redwhait
Аватар пользователя
Redwhait HP
пфф, мы тут с Дерти ждали 24 минуты после загрузки сейва :smile04:
Я думаю выход таков, что надо сейвы делать в начале хода т.к шахматный прибавляет количество времени за предыдущий ход.
Тааак, я, видимо, не до конца понимаю механику таймера...
Если гипотетически так: У меня 1:15:27, а у противника 28:15. Мы сохранились как и обычно в конце хода. Шахматный таймер 20+10+1. При загрузке что получится?
"Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
"Сущность войны — обман. Искусный должен изображать неумелость. При готовности атаковать демонстрируй подчинение. Когда ты близок — кажись далёким, но когда ты очень далеко — притворись, будто ты рядом."
В ответ пользователю Rabe
Аватар пользователя
Rabe
Тааак, я, видимо, не до конца понимаю механику таймера...
Если гипотетически так: У меня 1:15:27, а у противника 28:15. Мы сохранились как и обычно в конце хода. Шахматный таймер 20+10+1. При загрузке что получится?
Шахматный таймер плюсанет столько, сколько ты ходил.
Ходит час, знач час, минуту знач минуту.

Статистика

Приветствуем новейшего участника: Emil

Сейчас на сайте 7 пользователей 1251 гостей