Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot в онлайн играх _ Проблема: функция get color отрабатывает не всегда

Автор: ИгорьКокс 21.5.2018, 15:52

Здравствуйте.
Не ясно по какой причине, мой скрипт на строках с вызовом функции get color пишет в лог следующее:

15:26:37 0 (autosaved_0.txt, 601): get - Не удалось создать картинку.
15:26:37 0 (autosaved_0.txt, 601): get - Не удалось выбрать картинку.
15:26:37 0 (autosaved_0.txt, 601): get - Не удалось создать картинку из памяти.
15:26:37 0 (autosaved_0.txt, 601): get - Не закрылось.
15:26:37 0 (autosaved_0.txt, 601): get - Не открылось.


Вот реальный пример моего скрипта:

Код
set #handleWin findwindow (Игра)
set workwindow #handleWin
set #xcoord3f 599
set #xcoord3 8
set #ycoordcommon 295
set #ycoord3 15

set #x #xcoord3f + #xcoord3
set #y #ycoordcommon + #ycoord3
get color #ccolor #x #y


Вот как раз на последней строчке пилот ругается в лог, и что самое интересное, это происходит не каждый раз, а иногда. Функции get color в скрипте довольно много, и эти ошибки скачут по таким строкам в случайном порядке. Может кто с таким сталкивался и поборол? Буду благодарен за помощь.

Версия программы: 2.40
ОС: Windows 10 x64



Автор: DarkMaster 22.5.2018, 3:41

попробуйте использовать обновленый синтаксис:
set #c color(#x, #y)

Автор: ИгорьКокс 22.5.2018, 11:11

Спасибо за совет, но, к сожалению, новый синтаксис не помог. Однако я заметил одну особенность, попробую объяснить...
Непосредственно окно игры, с которым нужно работать, порождается родительским окном игрового клиента, и имеет свой максимальный размер (заданный разработчиками), который меньше разрешения монитора (1280х1024), попытки развернуть его на полный экран стандартной кнопкой окна "Развернуть"не удаются. Если же потянуть окно игры за заголовок к верху экрана, то окно разворачивается на полную ширину экрана (видно, это недоработка разработчика игры). Так вот, в этом положении функция get color случайным образом ругается в лог, но, если окно не расширять, а оставить в "родных" рамках, то функция отрабатывает без ошибок в логе, но возвращает тоже в случайном порядке "левые" значения цвета нужных мне точек (т.е. часть цветов правильные, а часть нет).
Ещё одно: если в параметрах функции указывать get color хендл окна, то цвета возвращаются "левые" абсолютно все, я так и не смог определить из какого окна они берутся. Хендл указан именно нужного окна, я уверен на 100%, так как GetWindowtext для этого хендла возвращает правильный заголовок.


Автор: DarkMaster 22.5.2018, 11:58

Цитата
Ещё одно: если в параметрах функции указывать get color хендл окна, то цвета возвращаются "левые" абсолютно все, я так и не смог определить из какого окна они берутся. Хендл указан именно нужного окна, я уверен на 100%, так как GetWindowtext для этого хендла возвращает правильный заголовок.

А если нажать на кнопочку F в интерфейсе пилота сверху, то скриншот корректный?
Вообще скорее всего какое-то смещение координат происходит. Можно попробовать взять цвет какой-нибудь точки, а потом финдколором найти ее координаты. Скорее всего они будут разными.

Автор: ИгорьКокс 22.5.2018, 13:52

Проблема, вроде, решена, спасибо. Нужно было просто получить нормальный хендл рабочего окна, получилось сделать это с помощью конструкции

Код

set #handle WindowFromCursor
set workwindow #handle

теперь в каждой функции get color ставлю параметр хендла и все отлично работает.
Ума не приложу почему конструкция
Код
set #handle findwindow (игра)
set workwindow #handle

не давала корректного хендла, хотя, ещё раз, заголовок окна по этому хендлу возвращался правильный.
Спасибо большое, DarkMaster, за помощь.

Автор: DarkMaster 22.5.2018, 18:01

http://forum.uokit.com/index.php?showtopic=26742

Чтобы не мучиться с курсорами. Там просто будет готовый код. Родительское окно рекомендую на рамку наводить.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)