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

Сообщения от Heroes3 на двухядерном процессоре

Пока нет оценок — будьте первым!
18 лет назад
Играю в HOMM 3 Arm. Blade, процессор пыхтит на 100%, вентилятор на ноутбуке работает постоянно, если работать от аккумулятора - хватает минут на 40 :-(

Есть какие-нибудь патчи для Героев, чтобы исправить данную ситуацию, или надо самим писать?
Аватар пользователя
18 лет назад
Вопросы: Какая система ноутбука?
18 лет назад
IBM (Lenovo), процессор Celeron-M, где-то 1500 MHz
18 лет назад
не в героях дело. Может на шерстяном одеяле играешь? или еще чем вентиляторы закрыл? Возможно просто перегрев
В ответ пользователю Монца
18 лет назад
Монца;110538
не в героях дело. Может на шерстяном одеяле играешь? или еще чем вентиляторы закрыл? Возможно просто перегрев

В-основном меня волнует 100%-я загрузка процессора, всё остальное - следствие того, что процессор загружен на 100%.
Причём данная загрузка проявляется не только на ноутбуке, но и на стационарных компьютерах.
Аватар пользователя
18 лет назад
Т.е. игра установленная с этого диска загружает процессоры на 100% ?
В ответ пользователю Inquisitor
18 лет назад
Inquisitor;110796
Т.е. игра установленная с этого диска загружает процессоры на 100% ?
Один процессор (одно ядро) загружает на 100%. Только диск, куплен очень давно. Может, я отстал от жизни, и есть какие-то патчи... :-)
Аватар пользователя
18 лет назад
Такой случай произошел первый раз со времен p166 :) Никаких патчей такого рода нет и быть не может. Один совет. Попробуйте купить новый диск героев III "Клинок Армагеддона"
В ответ пользователю Inquisitor
18 лет назад
Ещё особенность моей версии - для артефактов не 5, а 4 слота. Вернее, их 5, но один невидимый. Скажем, 4 занято, берём какую-нибудь сферу запрезения, и всё, она в 5-м, снять нельзя :-)

Кстати, проблему с загрузкой решил, правда через одно место. Если на каждые 5-10 вызовов функции IsIconic вызывать один раз sleep(1), то загрузка профессора падает до 1-3%. В-общем, изврат, буду искать нормальную версию...
В ответ пользователю ezhfan
Аватар пользователя
18 лет назад
Попробуй поставить эверест профешнл и глянь, че у тя и как. 100% это нереально, у меня на РII 350 герои летали, и винамп, и все что хочешь..
Попробуй диск купить это недорого, я видел АБ от 80 до 100р в питере...
Для лиценз диска это ерунда...
И никаких глюков небудет, и лучше бери SoD, на него все что хочешь можно поставить, и от диска отучить, и все такое...
В ответ пользователю ewgeniy
18 лет назад
ewgeniy;111450
Попробуй поставить эверест профешнл и глянь, че у тя и как. 100% это нереально, у меня на РII 350 герои летали, и винамп, и все что хочешь..
Попробуй диск купить это недорого, я видел АБ от 80 до 100р в питере...
Для лиценз диска это ерунда...
И никаких глюков небудет, и лучше бери SoD, на него все что хочешь можно поставить, и от диска отучить, и все такое...

Вполне реально 100% - там бесконечный цикл крутится без wait'ов. Поскольку отсутствует пятый слот под артефакты, есть подозрение, что герои какие-то не совсем лицензионные. :smile15: В-общем, заеду завтра на рынок Савёловский, куплю "Буковскую" версию, как что - отпишусь.
18 лет назад
Приключения продолжаются. Поставил Героев из "платиновой" серии - вылетают часто. Я уже понял, что мне везёт как-то по-особенному, но я буду бороться до конца :-)
В ответ пользователю ezhfan
18 лет назад
Итак, решил все проблемы :-) Расскажу по порядку:

1) Установил Клинок Армагеддона, сверху установил (в ту же папку) Дыхание смерти. Обновил Дыхание смерти. Случайные карты генерятся.

2) Отключил второе ядро процессора. (В диспетчере устройств заменил драйвер ACPI Multiprocessor PC на ACPI Uniprocessor PC). Как результат - герои не вылетают (не виснут).

3) Написал DLL-ку для героев, которая на каждые 10 вызовов функции IsIconic делает один вызов sleep(1). Результат - загрузка процессора 1-3%.

В-общем, спасибо всем за помощь :-)
18 лет назад
По просьбам трудящихся опишу процесс поподробнее.
Оговорюсь сразу, что полученный продукт имеет полное право завесить винду, и, кто не закрыл документ MS Office или кто прописал гадость сию в автозагрузку - я не виноват :-)
Безобразие я переписал, т.к. в оригинальном варианте сие предназначалось для конкретной версии 3-х Героев. Много кода надёргал с wasm.ru, в особенности из http://wasm.ru/article.php?article=apihook_1

Как оно работает? Всё просто. приложение prog.exe дёргает функцию set_hook из библиотеки syshook.dll. Это могло быть любое приложение, имеющее очередь обратотки сообщений windows.
Далее, функция set_hook, находящаяся в dll-ке (требование MSDN для системных хуков), ставит хук на WH_CBT. Это мог быть любой другой системный хук. События по данному хуку обрабатываются функцией-заглушкой SysMsgProc. Почему так? А потому что нам нужен не хук - нам нужно подгрузится в адресное пространство всех приложений с окнами, особенно Героев :-)
Можно было прописать эту dll-ку в реестр, чтобы она автоматически ко всем приложениям подсасывалась, однако, я не идеален и, думаю, понаделал кучу ошибок. В-общем, чтобы система не падала, лучше так не делать.

DLL-ка при подгрузке ищет в папке, откуда был запущен процесс, файл syshook.ini. В первой строчке этого файла должно быть регулярное выражение, соответствующее имени запускаемого файла, во второй строчке - через сколько раз вызывать sleep(1) при вызовах IsIconic.

Про механизм внедрения рассказывать тут не буду - читайте статью, там всё понятно.

Если кто скажет, что главная процедура DLL-ки должна была бы и выгрузку корректно обработать, то замечу, что мне хотелось, чтобы программа компилировалась у всех под Delphi 6, а там ошибка в system.pas, которая не позволяет корректно обрабатывать события загрузки/выгрузки. Стек сломали-с.

Итак, как оно работает. В папке с Героями должен лежать syshook.ini (в архиве прилагается пример). Запускаем программу (prog.exe), ждём 3 секунды, она должна что-то написать, затем запускаем героев. Программу не закрываем :-).

P.S.: можно было бы сделать более лёгкое и менее кривое решение - исправить exe-шник Героев, но это уже процесс творческий и индивидуальный для каждой конкретной версии Героев.

P.P.S.: в архиве помимо бинарников приложены исходники, дабы желающие могли компилировать вволю. В Delphi открывать dpr-файлы, я компилировал в Delphi 6, можно открыть и скомпилить в Delphi 7.
Dll-ка и exe-шник компилятся отдельно.

Извините за сумбурное описание и хреновый стиль программирования - мало спал %<:)
Вложения 1
1 файл • Общий размер: 461,5 KB
18 лет назад
И добавлю пару слов насчёт ошибок в программе:
1) Переменная Hook в функции CallNextHookEx скорее всего некорректна (неопределена). Не думаю, что это критическая ошибка.
2) Новая функция, замещающая IsIconic, нереентерабельна, т.е. если в два потока начать её дёргать - будет плохо (но Герои III так не сделают). Для других программ нужно что-то придумать с синхронизацией (используя, например, InterlockedExchange).
3) Используемый метод инжекта также неидеален - для Героев можно было бы сделать запускалку (и не надо было бы извращаться с DLL-ками и хуками). Но тогда программа будет неуниверсальной и её нельзя будет доработать, чтобы, скажем, она запускала Starcraft (т.к. тот запускается лоадером).
4) Отсутствие комментариев говорит само за себя. Впрочем, если кто что спросит - я отвечу (если не исчезну с форума).
5) Скорость работы можно было бы увеличить, если вместо ReadProcessMemory и WriteProcessMemory использовать чтение и запись памяти "напрямую", предварительно открыв доступ с помощью VirtualProtect.
6) Открытие процесса с правами PROCESS_ALL_ACCESS - тоже косяк, оно не всегда работать будет, если пользователь в правах ограничен.
7) Даже боюсь себе представить, как оно будет работать под Windows Vista :eek: Впрочем, наверное, это проблемы Microsoft и того перца, который сидит на Vista.:D

Статистика

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