Возможно, удастся записывать бои!
кодил недавно с использованием WinAPI, что натолкнуло на одну идею.
Срочно надо выяснить, лаким образом производится игрой вероятностные действия в бою (выпадение морали, точное значение урона при ударе, и т. д.)? несолько экспериментов на боевой карте, запускаемой c одного и того же сейва позволили выдвинуть гипотезу: эти вероятностные значения при одних и тех же действиях игрока зависят только от времени, потраченного игроком на обдумывание очередного действия, т. е. идеально воспроизведя все действия и выдержав ровно такие же паузы между ходами, мы вроде бы можем добиться полного повтора боя! (а по наблюдениям можно выдвинуть и более смелое утверждение: события повторяются даже вне зависимости от скорости боя, выставленной в настройках, главное - точно выдерживать паузы между ходами) Если у кого-нибудь найдётся время потестированть, - помогите подтвердить или опровергнуть гипотезу!
A если предположение относительно псевдорандомности в бою подтвердится, то это будет ознначать, что возможно осуществить давную мечту героистов - запись и повтор боёв!! поставить хук на мышь и консоль во время боя, и записывать все действия , а потом воспроизводить в том же темпе...
Срочно надо выяснить, лаким образом производится игрой вероятностные действия в бою (выпадение морали, точное значение урона при ударе, и т. д.)? несолько экспериментов на боевой карте, запускаемой c одного и того же сейва позволили выдвинуть гипотезу: эти вероятностные значения при одних и тех же действиях игрока зависят только от времени, потраченного игроком на обдумывание очередного действия, т. е. идеально воспроизведя все действия и выдержав ровно такие же паузы между ходами, мы вроде бы можем добиться полного повтора боя! (а по наблюдениям можно выдвинуть и более смелое утверждение: события повторяются даже вне зависимости от скорости боя, выставленной в настройках, главное - точно выдерживать паузы между ходами) Если у кого-нибудь найдётся время потестированть, - помогите подтвердить или опровергнуть гипотезу!
A если предположение относительно псевдорандомности в бою подтвердится, то это будет ознначать, что возможно осуществить давную мечту героистов - запись и повтор боёв!! поставить хук на мышь и консоль во время боя, и записывать все действия , а потом воспроизводить в том же темпе...
-
-
Почетный член КС — Honored Member- Сообщения: 6063
- Зарегистрирован: 22 дек 2002, 13:40
- Откуда: Петрозаводск
- Контактная информация:
Интересняа теория, то какая точность? Ведь алгоритмов и правда никто не знает
CMEPTb, Little Angel of Death
"Если ничто другое не помогает, прочтите, наконец, инструкцию." - Аксиома Кана
"Если ничто другое не помогает, прочтите, наконец, инструкцию." - Аксиома Кана
- Ups_Domas
Fairy Dragon- Сообщения: 789
- Зарегистрирован: 29 май 2003, 16:17
- Откуда: Lithuania, Klaipeda
- Контактная информация:
да было время гдето читал про псевдо рандом цыфры - т.е. все знаем что комп может выдасть вам рендом число - оказываеться что ето число на прямую зависит от даты времени нажатия клавишы (или изполнению команды) всё какбы и хорошё но сколько помниться что нынешние компики производят больше чем 100000 команд в секунду и столько же вариацый времени ну и псевдо рандом цыфры. Если в Героях похожый алгоритм (т.е. просто взята рандом цыфра) то кликай сколько угодно всё равно непопадёш
но вот мне другая мысля пришла на чсёт рандомности в боях - можно поймать момент в бою когда повторяеться и удар и т.д. но зависимость идёт от превыдущих событий - т.е. ето очень похоже на линейку повышалку - лубая магия невозможна - 3000 а только 3210 и ето также в бою если ты чтото сделал на пример топронул минотавра то срабатывание ево зашиты повышаеться на второй удар ну а если ты таво же минотавра пнул спелом то на следующий топор реже сработает резист минотавра ну и т.д.
ну ето только мои замечяния
но вот мне другая мысля пришла на чсёт рандомности в боях - можно поймать момент в бою когда повторяеться и удар и т.д. но зависимость идёт от превыдущих событий - т.е. ето очень похоже на линейку повышалку - лубая магия невозможна - 3000 а только 3210 и ето также в бою если ты чтото сделал на пример топронул минотавра то срабатывание ево зашиты повышаеться на второй удар ну а если ты таво же минотавра пнул спелом то на следующий топор реже сработает резист минотавра ну и т.д.
ну ето только мои замечяния
Если ты становишься, похож на фотографию в паспорте, значит тебе пора в отпуск.
Мне вроде бы удавалось попадать в течении нескольких раундов. Я поэтому и прошу - потестируйте, кому не лень, чтобы вместе прийти к каким-то выводам.всё какбы и хорошё но сколько помниться что нынешние компики производят больше чем 100000 команд в секунду и столько же вариацый времени ну и псевдо рандом цыфры. Если в Героях похожый алгоритм (т.е. просто взята рандом цыфра) то кликай сколько угодно всё равно непопадёш
УРА-А!
Все ожидания оправдались! Бои повторять можно!
Итак, для контрольного эксперимента напал 50 гидрами на 100 нейтральных гидр, сразу сохранился, и начал работать с сейвом. Набросал простеньких код, 10 раз с интервалами в 3 секунды эмулирующий клик мыши. Теперь надо было запустить программку, успеть развернуть Героев, загрузить сейв и передвинуть мышку на кнопку "Защищаться". Скорость боя поставил 4, чтобы было видно всплывающее точное значение урона. Гидры противника подходили и начинали выносить моих, а программка сама "вела бой", кликая на защиту. Но никак не получалось синхронизировать запуск программки с загрузокй сейва. Тогда модифицирую код: пауза в 10 сек, эмуляция двойного клика мышки, а уже потом в цикле пауза 3 секунды - клик. Теперь, внмание! запускаю программу, разворачиваю Героев, ставлю мышку на название нужного сейва в меню "Загрузить игру", и программка сама загружает сейв! теперь опять передвигаем мышку на "Защищаться", и бой идёт... но теперь вся последовательность "случайных" значения урона и выпадения морали зафиксировалась, и повторяется каждый раз при подобном запуске!!
Таким образом, на пути создания полноценного CombatRecorder'а лежат лишь чисто технические проблемы (рассинхронизация, скорость, разрешение и т. п.), с которыми тоже вполне реально разобраться.
Нет ли здесь людей с опытом програмирования, желающих поддержать идею? Я и сам, пожалуй, справлюсь, но, во-первых, честно говоря, у меня почти нет опыта работы с хуками и WinAPI, работал в основном с прикладными прораммами и математическими алгоритмами, так что потребуется время, а, во-вторых, что самое главное, времени-то почти и нет, экзамены, курсовая, да ещё в участие в ТМ, не знаю даже, как на него время выкраивать... (впрочем, возможно, это последняя возможность поиграть в турнире, так как, боюсь, потом времени станет ещё меньше... )
Все ожидания оправдались! Бои повторять можно!
Итак, для контрольного эксперимента напал 50 гидрами на 100 нейтральных гидр, сразу сохранился, и начал работать с сейвом. Набросал простеньких код, 10 раз с интервалами в 3 секунды эмулирующий клик мыши. Теперь надо было запустить программку, успеть развернуть Героев, загрузить сейв и передвинуть мышку на кнопку "Защищаться". Скорость боя поставил 4, чтобы было видно всплывающее точное значение урона. Гидры противника подходили и начинали выносить моих, а программка сама "вела бой", кликая на защиту. Но никак не получалось синхронизировать запуск программки с загрузокй сейва. Тогда модифицирую код: пауза в 10 сек, эмуляция двойного клика мышки, а уже потом в цикле пауза 3 секунды - клик. Теперь, внмание! запускаю программу, разворачиваю Героев, ставлю мышку на название нужного сейва в меню "Загрузить игру", и программка сама загружает сейв! теперь опять передвигаем мышку на "Защищаться", и бой идёт... но теперь вся последовательность "случайных" значения урона и выпадения морали зафиксировалась, и повторяется каждый раз при подобном запуске!!
Таким образом, на пути создания полноценного CombatRecorder'а лежат лишь чисто технические проблемы (рассинхронизация, скорость, разрешение и т. п.), с которыми тоже вполне реально разобраться.
Нет ли здесь людей с опытом програмирования, желающих поддержать идею? Я и сам, пожалуй, справлюсь, но, во-первых, честно говоря, у меня почти нет опыта работы с хуками и WinAPI, работал в основном с прикладными прораммами и математическими алгоритмами, так что потребуется время, а, во-вторых, что самое главное, времени-то почти и нет, экзамены, курсовая, да ещё в участие в ТМ, не знаю даже, как на него время выкраивать... (впрочем, возможно, это последняя возможность поиграть в турнире, так как, боюсь, потом времени станет ещё меньше... )
Чтобы повторился псевдорэндом описанный в этой теме необходимо выполнять много условностей, например:
обязательно сохранится как только попал в битву, загрузится с этого сейва, запустить прогу записи кликов, и выиграть данный бой без сейв-лоадов, (если нужен лоад - то делать его только с начального сейва и перезапускать прогу). При этом совершенно не факт что на другом компе сейв будет повторять действия.
обязательно сохранится как только попал в битву, загрузится с этого сейва, запустить прогу записи кликов, и выиграть данный бой без сейв-лоадов, (если нужен лоад - то делать его только с начального сейва и перезапускать прогу). При этом совершенно не факт что на другом компе сейв будет повторять действия.
Да, технических трудностей много. Не удастся, к сожалению, записывать бои по сети... Насчёт разных компов как раз особой проблемы нет - если одинаковое разрешение и у обоих достаточная мощность, то не вижу, в чём может проявиться разница. Впрочем, конечно, надо будет проверить.
Вы все правильно говорите, окромя последней фразы. Что значит НЕ ФАКТ что на другом компе сейв будет повторять действие ? Вы хотите сказать что одни и те же программы работают на разных компутерах по разному. Это легко проверить. Выложите на форуме какой-нить сейв перед нападением. Укажите координату на карте куда нападать. Выложите скриншот начало боя. Пусть участники форума скачают данный сейв и на своих компах cверят полученное у себя поле боя с вашим скриншотом. Уверен, если ничо дергать в сейве не будут, а сразу нападут в указанную точку - поле будет один в один ! Уж если рандом отрисует все в точности до последнего камушка и кустика на разных компах, то другие действия с сейва тоже также повторяться на разных компах.Hoher писал(а):Чтобы повторился псевдорэндом описанный в этой теме необходимо выполнять много условностей, например:
обязательно сохранится как только попал в битву, загрузится с этого сейва, запустить прогу записи кликов, и выиграть данный бой без сейв-лоадов, (если нужен лоад - то делать его только с начального сейва и перезапускать прогу). При этом совершенно не факт что на другом компе сейв будет повторять действия.
Слабо эксперимент провести ?
Ваша идея тупиковая, но не совсем. Сами говорите, что по сети не удасться записывать, то есть там где как раз лоад/сейв не делают.А про лоад/сейв в офлайнах Вам Hoher сказал что не выйдет записи. Но он имеет ввиду ПОЛНОЙ записи боя вследствии применения лоад/сейва в бою. Я вижу единственное применение, это запись части боя, допустим переломного момента в бою или зацикливание длинного нудного боя и записи пары циклов.Atos писал(а):Да, технических трудностей много. Не удастся, к сожалению, записывать бои по сети... Насчёт разных компов как раз особой проблемы нет - если одинаковое разрешение и у обоих достаточная мощность, то не вижу, в чём может проявиться разница. Впрочем, конечно, надо будет проверить.
Офлайнщик загрузится с любого своего сейва сделанного в бою и зная что если с этого места он будет делать определенную последовательность действий, то этот участок боя будет выполняться в точности как прошлый раз. Трудность будет вызывать именно точность перемещений юнитов вплоть до клеточки. Но тем не менее можно все же сделать запись пары циклов боя. Для чего это можно применить ? Использовать при проверке прохождений сложных битв, где куча мала из кучи отрядов или когда берутся крепости когда компутер тупит не желая выходить из крепости а предпочитает потихоньку дохнуть от яда за стенами. На самом деле это такую часть битвы легче ПОКАЗАТЬ чем описать словами. Да к тому ГЛАЗАМ верят больше чем УШАМ