Версия пилота 2.39 или выше.
Пример: https://youtu.be/evDiR0jCB3w
Подготовка:
Скачать
irfanview.zip ( 2,8 мегабайт )
Кол-во скачиваний: 278
Запустить IrfanView от администратора, выбрать Option, Capture/Screenshot.
В открывшемся окне ставим параметры:
1. Desktop area - current monitor (mouse).
2. Горячая клавиша.
3. Save capture image as file. Указать имя файла и путь для сохранения.
4. BMP - Windows Bitmap.
5. Нажать кнопку Start.
Теперь, при нажатии горячей клавиши, Num 1 в данном случае, будет сохранятся скрин экрана с курсором.
Запускаем игру, делаем скрин с нужным курсором (нажать горячую клавишу). Открыть Paint, Photoshop или что-то подобное, открыть полученный скрин, вырезать курсор, закрасить левый верхний пиксель и всё что не относится к курсору в один любой цвет. Сохранить изображение.
Получится примерно так:
cursor2.bmp ( 2,16 килобайт )
Кол-во скачиваний: 531
Параметры 1-4 настраиваются 1 раз. После перезапуска программы нужен только пункт 5.
Желательно создать RAM-диск 15-20 мб. И сохранять скрин на него.
IrfanView и UoPilot запускать от администратора.
Поиск курсора:
1. Запустить игру.
2. Запустить IrfanView, нажать Start.
3. Запустить скрипт в пилоте.
set %a [1] LoadImage (C:\cursor2.bmp) // путь к картинке с курсором
set $path "Z:\111.bmp" // путь к скрину, тот что указывали в настройках IrfanView
:start
filedelete ($path)
sendex {num_1} // горячая клавиша, та что указывали в IrfanView
wait 50
while fileexists ($path) = 0
wait 1
end_while
wait 10
set %b [1] LoadImage ($path)
set #a findimage(0 0 1920 1080 (%a [1 1]) %arr %b [1 1])
if #a > 0
hint (24 clRed 500 500 (Атаковать))
// что делать если курсор найден, хинт можно убрать
else
hint (24 clblue 1920 1 (1)) // можно убрать
// если курсор не найден, можно ничего не писать
end_if
set %b [1] DeleteImage (%b [1 1])
goto start
а если курсор не статичен? То есть при наведении на нужный объект он постоянно меняет форму и цвет. Будет ли достаточно зафиксировать только одну из позиций?
Наверное зависит от задачи.
Можно же искать обычный вид курсора, а не изменённый. Т. е. если обычный не найден, значит он изменился.
--lua
local ffi = require("ffi")
local user = ffi.load('User32.dll')
ffi.cdef[[
typedef struct {int x; int y;} POINT;
typedef struct {int cbSize; int flags; int hCursor; POINT ptScreenPos;} CURSORINFO, *PCURSORINFO;
int GetCursorInfo(PCURSORINFO pci);
]]
function GetCursor()
pci = ffi.new('CURSORINFO')
pci.cbSize = ffi.sizeof('CURSORINFO')
user.GetCursorInfo(pci)
return pci.hCursor
end
log('Идентификатор курсора: ' .. tostring(GetCursor()))
if GetCursor() == 65567 then
log('Рука')
end
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)