В этой небольшой статье, я расскажу вам [и покажу],
как сделать "разморозку" окна игры Perfect World.
Что это такое и зачем оно нужно? Могут спросить те,
кто не в курсе. При игре в оконном режиме, если вы
переключаетесь на другое приложение, окно игры,
"застывает" и вы не можете видеть, что сейчас
происходит с вашим персонажем. Неудобно!
Так вот. Эта статья, поможет исправить такое
неудобство и вы сможете нормально играть.
Если не хотите сами делать, то качайте
уже готовую утилиту PW Window Unfreezer
Для работы, нам понадобиться утилита [Ссылки могут видеть только зарегистрированные пользователи. ]
Если, у вас, ее нет, то [Ссылки могут видеть только зарегистрированные пользователи. ]
Теперь будем двигаться пошагово: 0. Запускаем [Ссылки могут видеть только зарегистрированные пользователи. ] 1. Запускаем игру,* но не заходим в меню выбора персонажа** [не логинимся!] 2. Заходим в Settings > Hotkeys > Next Scan-Exact Value и назначаем клавишу F12Скриншот >>
[Ссылки могут видеть только зарегистрированные пользователи. ]
3. Открываем процесс игры, через Process > elementclient.exe, либо через иконку Скриншот >>
[Ссылки могут видеть только зарегистрированные пользователи. ]
4. Вводим в поле Hex цифру 0, опцию Scan Type ставим в положение Exact Value и жмем First Scan*** Скриншот >>
[Ссылки могут видеть только зарегистрированные пользователи. ]
5. Меняем значение в поле Hex на цифру 1 и переходим в окно игры Скриншот >>
[Ссылки могут видеть только зарегистрированные пользователи. ]
6. Нажимаем F12 и ждем, когда закончиться сканирование 7. Если вы все правильно сделали, то должно появиться небольшой список адресов 8. Перейдите в самый низ в окно с адресами, там будут несколько выделенных зеленымСкриншот >>
[Ссылки могут видеть только зарегистрированные пользователи. ]
9. Теперь вычисляем, какой из них верный, играя с фокусом окна игры****
Теперь осталось только включить его. Дважды щелкните по нашему Скриншот >>
[Ссылки могут видеть только зарегистрированные пользователи. ]
адресу, он появиться в нижнем окне. Затем впишите в поле Value
цифру 1 и поставьте галочку в Frozen Все. Только помните,
разморозка действует, пока запущена утилита [Ссылки могут видеть только зарегистрированные пользователи. ]
Примечание: В Шаге 4 можно не ждать полного завершение
сканирования. Достаточно, чтобы полоса заполнилась на 1/3-ть
* в оконном режиме и с маленьким разрешением. Так будет удобнее
** так будет меньше левых адресов выдавать во время поиска
*** во время сканирования не трогайте мышь и ничего не делайте
**** если окно игры в фокусе, то в нашем адресе стоит 1 если не в фокусе то 0
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Небольшая справочка:
У активного окна всегда как минимум два зелёных адреса, по которым лежит 1, это сто проц. Скорей всего их даже больше. Один из них, как мы уже выяснили, влияет на прорисовку. Второй должен отвечать за звук (тоже зависит от активности/неактивности окна игры). Наверняка ещё есть зелёный адрес, отвечающий за отлов клавиш (пока равен 1, клавиши проверяются, когда 0 - нет).
А в дополнение к статье можно добавить пункты, описывающие патчинг клиента (например, через Olly Dbg или DLL Injection).
Наверняка ещё есть зелёный адрес, отвечающий за отлов клавиш (пока равен 1, клавиши проверяются, когда 0 - нет).
Долго искал, но этот магический адрес я не нашёл. И я сомневаюсь, что кто-то его найдёт, потому что клавиши в клиент посылаются тогда, когда флаг разморозки равен единице. Думаю, что все названные тобой флаги входят в флаг разморозки...
P.S. При поиске флага разморозки у меня всегда остаётся 1 зелёный адрес
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Звук точно не входит в флаг разморозки, т.к. из неактивного окна не идёт звук в любом случае.
Разве? У меня, при размороженном клиенте, музыка играет даже, когда в браузере сидишь...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
10 Можно идти еще дальше, нажать правой кнопкой по найденному адресу, и там в меню выбрать функцию поиска инструкций, которые записывает данные по этому найденому адресу.
11 В своем боте при нажатии "логин", запускать клиент игры с флагом CREATE_SUSPENDED, и пропатчить по адресу найденной инструкции свой код, например так:
Код:
//Патч, исключающий "заморозку" окна при потере им фокуса.
SIZE_T InjectedBytes;
BYTE AlwaysUnfreezePatch[] = {0xb0, 0x01}; //0x00431f02 mov al,1;
if (WriteProcessMemory(m_ProcessHandle, (LPVOID)0x00431f02, AlwaysUnfreezePatch, sizeof(AlwaysUnfreezePatch), &InjectedBytes) == FALSE)
{
ProcessTerminate();
return;
}
if (InjectedBytes != sizeof(AlwaysUnfreezePatch))
{
ProcessTerminate();
return;
}
Можно заодно многооконку сделать и прибить мультик с зелеными уродцами... Рыбки мне гораздо больше нравились)))) и музыка такая спокойная была (не та, в которой китаец по английский пел))))))
12 разморозить запущенный клиент....
Последний раз редактировалось Мегазадрот; 16.01.2012 в 00:18.
Конечно, привязка к image base процесса необязательна, но у меня это уже вошло в привычку.
Мультик прибит наполовину, ибо мне просто надоело пропускать его каждый раз. После запуска игры первая заставка сразу будет пропущена, фоновая - остаётся и проигрывается, как положено.