Помощь - Поиск - Пользователи - Календарь
Полная версия: Подскажите почему move_smooth не работает?
UoKit.com Форумы > Кликер > UO Pilot
Страницы: 1, 2
SeregaB
Столкнулся с проблемой в Lua и обычном коде.
В игре Шутере происходит захват мышки и курсор пропадает.
Далее программа находит цель и ее координаты (set #x и set #y)
После чего идет команта сместить "мышу" move_smooth, но экран не поворачивается.
Сам курсор и все нажатия происходят, но экран в игре остается на месте.
Может надо как то прописать имитацию кода физической мышки, чтобы экран в игре поворачивался?
Такое вообще возможно?
Вот сам код на смещение мышки:

set #x 250
set #y 300
Move #x #y
kleft #x #y // кликнули
kleft_down #x #y // зажали ЛКМ
set clickoffsetx 500 // смещение для координаты X
set clickoffsety 50 // смещение для координаты Y
move_smooth #x #y // Переместили курсор
get mouse_pos #x #y // нашли курсор
kleft_up #x #y
end_script
DarkMaster
все сильно зависит от конкретной реализации. Двигать зачастую нужно относительно центра экрана либо координаты 1.1 либо 0.0.
SeregaB
Цитата(DarkMaster @ 25.9.2019, 3:46) *

все сильно зависит от конкретной реализации. Двигать зачастую нужно относительно центра экрана либо координаты 1.1 либо 0.0.

Тоесть в первом случае сначала навести курсор на центр экрана (X/2 , Y/2), а потом делать смещение?
Тоже самое и с координатами 1.1 и 0.0?
Levo222
Цитата(SeregaB @ 26.9.2019, 14:17) *

Тоесть в первом случае сначала навести курсор на центр экрана (X/2 , Y/2), а потом делать смещение?
Тоже самое и с координатами 1.1 и 0.0?

Мне кажется нужно производить это совсем другим инструментом, то что сейчас это как будто бы пытаться сделать ногами нежели руками.
SeregaB
Цитата(Levo222 @ 26.9.2019, 14:17) *

Мне кажется нужно производить это совсем другим инструментом, то что сейчас это как будто бы пытаться сделать ногами нежели руками.

Какие есть предложения?
SeregaB
Цитата(SeregaB @ 26.9.2019, 10:17) *

Тоесть в первом случае сначала навести курсор на центр экрана (X/2 , Y/2), а потом делать смещение?
Тоже самое и с координатами 1.1 и 0.0?

Пробовал все три варианта, экран в игре не поворачивается.
Что можно еще сделать?
FREEON
Код
set #poisk findcolor (0, 0 1600, 900 1 1 (3949430) %arr 2 1 abs) //поиск цвета по экрану
if #poisk > 0           // если найден нужный цвет, то
  move %arr [1 1], %arr [1 2] // наведем мышку на точку
end_if
set #vustrel findcolor (795, 445 805, 455 1 1 (3949430) %fire 2 1 abs) //когда цвет попадает в область прицела
if #vustrel > 0           // если если цвет в прицеле, то
  kleft %fire [1 1], %fire [1 2] // сделаем один выстрел
end_if
SeregaB
Цитата(FREEON @ 26.9.2019, 23:27) *

Код
set #poisk findcolor (0, 0 1600, 900 1 1 (3949430) %arr 2 1 abs) //поиск цвета по экрану
if #poisk > 0           // если найден нужный цвет, то
  move %arr [1 1], %arr [1 2] // наведем мышку на точку
end_if
set #vustrel findcolor (795, 445 805, 455 1 1 (3949430) %fire 2 1 abs) //когда цвет попадает в область прицела
if #vustrel > 0           // если если цвет в прицеле, то
  kleft %fire [1 1], %fire [1 2] // сделаем один выстрел
end_if


Такой код мне не подходит, я по такому принципу и делал
Levo222
Цитата(SeregaB @ 26.9.2019, 21:45) *

Какие есть предложения?

Делать через C-шную часть игры

Цитата(SeregaB @ 26.9.2019, 14:17) *

навести курсор на центр экрана

Запомнить область где она находилась, и с шагом N производить смещения относительно неё в ту область которая нужна
что-то типо SaveMousePos
А еще можно переназначить управление по типу движение мышью = клавиша такая-то(смещение на такое-то кол-во координат) В игре должна быть команда по типу "центрировать прицел" или что-то вроде того вместе с ней производить клики
В некоторых приложениях приходится убивать фон чтобы принялись клики мышью типо KillBackgroundFocus
DarkMaster
Цитата
Тоесть в первом случае сначала навести курсор на центр экрана (X/2 , Y/2), а потом делать смещение?
Тоже самое и с координатами 1.1 и 0.0?

при движении учитывать, что курсор всегда находится в этих координатах. Соответственно, если нужно чуть влево, то скажем, move нужно сделать в координаты x/2-1, y/2. Оси могут быть инвертированы.
SeregaB
Кто знает как этим пользоваться?

Macro_send - отправка нажатий клавиш с помощью макроса.
В инструкции нет описания.
SeregaB
Цитата(DarkMaster @ 25.9.2019, 3:46) *

все сильно зависит от конкретной реализации. Двигать зачастую нужно относительно центра экрана либо координаты 1.1 либо 0.0.

Методом записи движения мышки, получилось определить, что движения начинаются из центра экрана.
Пробовал потом воспроизвести запись, но экран не двигался!!! Но от физической мышки он поворачивается. Пробовал через запись и воспроизведение макроса, то же не получается.
Что еще можно сделать?
Может кто знает как назначить клавиши управления от джостика?
DarkMaster
попробуйте не через макрос, а через скрипт. move
SeregaB
Цитата(DarkMaster @ 6.10.2019, 22:46) *

попробуйте не через макрос, а через скрипт. move


move тоже не работает
Код

log СТАРТ
set #x 1280/2    // от куда двигаем курсор
set #y 720/2     // от куда двигаем курсор
log начало движения #x x #y
move #x #y             // навели
wait 100
kleft_down #x #y       // зажали ЛКМ
wait 100
move 1000 400 //#x #y      // Переместили курсор
wait 200
get mouse_pos #x #y     // нашли курсор
log сместили курсор в #x х #y             // показать в лог
wait 200
kleft_up #x #y         // отпустили ЛКМ
log отпустили ЛКМ в #x х #y             // показать в лог
wait 100
get mouse_pos #x #y     // нашли курсор
log конечная коорд. курсора  #x x #y             // показать в лог
end_script

Это лог в режиме игры
9:52:43 19 (autosaved_19.txt, 0): СТАРТ
9:52:44 19 (autosaved_19.txt, 3): начало движения 640 x 360
9:52:46 19 (autosaved_19.txt, 15): сместили курсор в 645 х 354
9:52:47 19 (autosaved_19.txt, 24): отпустили ЛКМ в 645 х 354
9:52:47 19 (autosaved_19.txt, 28): конечная коорд. курсора 645 x 354
А это лог без игры с темже скриптом
10:02:23 19 (autosaved_19.txt, 0): СТАРТ
10:02:23 19 (autosaved_19.txt, 3): начало движения 640 x 360
10:02:25 19 (autosaved_19.txt, 15): сместили курсор в 1000 х 400
10:02:26 19 (autosaved_19.txt, 24): отпустили ЛКМ в 1000 х 400
10:02:27 19 (autosaved_19.txt, 28): конечная коорд. курсора 1000 x 400

Я уже не понимаю, что надо делать, может какого то обновления в системе не хватает (W7 у мменя)?
Экран в игре вообще не поворачивается, в не режима боя в тойже игре все смещения работают.


Это тоже самое, только командой move_smooth
Код

log СТАРТ
set #x 1280/2    // от куда двигаем курсор
set #y 720/2     // от куда двигаем курсор
log начало движения #x x #y
move #x #y             // навели
wait 100
kleft_down #x #y       // зажали ЛКМ
wait 100
set clickoffsetx 300     // смещение для координаты X
set clickoffsety 50     // смещение для координаты Y
move_smooth #x #y      // Переместили курсор медленно
wait 200
get mouse_pos #x #y     // нашли курсор
log сместили курсор в #x х #y             // показать в лог
wait 200
kleft_up #x #y         // отпустили ЛКМ
log отпустили ЛКМ в #x х #y             // показать в лог
wait 100
get mouse_pos #x #y     // нашли курсор
log конечная коорд. курсора  #x x #y             // показать в лог
end_script


Вот какой лог:
В игре
526666 -> War Robots Steam
10:16:37 19 (autosaved_19.txt, 0): СТАРТ
10:16:38 19 (autosaved_19.txt, 3): начало движения 640 x 360
10:16:40 19 (autosaved_19.txt, 15): сместили курсор в 645 х 354
10:16:41 19 (autosaved_19.txt, 24): отпустили ЛКМ в 645 х 354
10:16:42 19 (autosaved_19.txt, 28): конечная коорд. курсора 645 x 354

Не в игре
65846 -> FolderView
10:17:02 19 (autosaved_19.txt, 0): СТАРТ
10:17:02 19 (autosaved_19.txt, 3): начало движения 640 x 360
10:17:05 19 (autosaved_19.txt, 15): сместили курсор в 940 х 410
10:17:06 19 (autosaved_19.txt, 24): отпустили ЛКМ в 940 х 410
10:17:06 19 (autosaved_19.txt, 28): конечная коорд. курсора 1240 x 460 (тут почему то курсор всегда улетает на двойное расстояние от смещения по Х и У, тоже не пойму почему так?
DarkMaster
попробуйте без смещений, так же рекомендую в качестве теста использовать абсолютные координаты(возможно смещаются окна).
SeregaB
Цитата(DarkMaster @ 9.10.2019, 11:12) *

попробуйте без смещений, так же рекомендую в качестве теста использовать абсолютные координаты(возможно смещаются окна).

Попробовал
Так тоже не работает
minfin
такой же вопрос,


есть подозрение что сервер считывает траекторию и прочие мувы
при записи видео, например, видно что курсор остаётся на месте, хотя функция выполняется.


и есть ли возможность выставлять скорость move ?
нужна рендом траектория, с рендом скоростью

DarkMaster
Цитата
и есть ли возможность выставлять скорость move ?

Move не имеет скорости. Он имеет только конечную точку.
Цитата
нужна рендом траектория, с рендом скоростью

Берете move и вызываете его много раз по любой траектории с любыми скоростями (используйте wait для задержки).
nykep
Цитата(SeregaB @ 9.10.2019, 10:22) *

Я уже не понимаю, что надо делать

играть в шутеры честно, это тебе не корейская ммо где игроки соревнуются у кого бот лучше и не выполнение рутинных действий сутками напролет.
DarkMaster
Цитата
играть в шутеры честно, это тебе не корейская ммо где игроки соревнуются у кого бот лучше и не выполнение рутинных действий сутками напролет.

Вы форумом не ошиблись?) Я не выгоняю ни коем образом, но подобные высказывания явно не для собравшихся здесь людей =)
nykep
Цитата(DarkMaster @ 15.11.2019, 16:22) *

Вы форумом не ошиблись?) Я не выгоняю ни коем образом, но подобные высказывания явно не для собравшихся здесь людей =)

Да я понимаю, я и сам делаю себе ботов где надо гриндить или рыбалку какую нить, за которую меня вчера забанили на 10 лет на мэиле ру , но когда в шутерах читерят это выбешивает, в чем смысл игры в шутер если не в соревновании?
Fors1k
Цитата(nykep @ 15.11.2019, 16:03) *

играть в шутеры - это не выполнение рутинных действий сутками напролет.


Ну, в целом согласен. Пилот нужен для решения(имитации выполнения) рутинных, нудных задач, где не увлекателен сам процесс.
Как в шутере может быть неувлекательным процесс прицеливания и стрельбы, если это и есть сама суть шутера?!:))
Возможно нужно сменить саму игру, если она такая неинтересная, что аж хочется попросить пилота поиграть за тебя.
Звучит абсурдно, как если бы девушка написала "приезжай, у меня никого нет дома", то наверное поедешь сам, а не станешь кого-то просить вместо себя)Изображение
SeregaB
Цитата(nykep @ 15.11.2019, 16:03) *

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

Вот ссылка, где один товарищ сделал бота на мою игру, полноценное прицеливание у него не получилось, но он как то смог сделать поворот влево и вправо
Ссылка это не реклама, а просто хочу показать, что это возможно сделать какими-то командами.
Предполагаю, что бота делали на программе Кибор
[+]


Аналогичного бота я делал для платформы андройд, там точное прицеливание работает без проблем. Но вот с ПК версией на Steam возникает проблема. Как ее решить пока не знаю.
SeregaB
Вот как пример, это я делал бота на проге внутри андройда
[+]
FREEON
ну с весом пилота и его способностями он превосходит многие программы для автоматизации действий и другие проги с ним не сравнятся и не требует глубоких знаний в программировании. вот тоже к примеру если хоч сдлать бота то тебе нужно устанавливать autoit 3 он умеет управлять мышью в directX а хочешь автоприцел на андроид то поищи crosshair. а если хоч всех выносить то купи специальные читы которые могут встраиваться в процесс игры тое не факт что тебе впарят не болванку или какой-нить майнер или сниффер
SeregaB
Цитата(FREEON @ 17.11.2019, 17:58) *

а хочешь автоприцел на андроид то поищи crosshair

Как я понял crosshair это специальное устройство, которое эмулируем мышку, такой вариант не подходит для работы внутри эмулятора или на андройд устройстве, тк нужно, чтобы бот играл самостоятельно.
С autoit 3 надо пробовать, спасибо за совет.
SeregaB
Цитата(FREEON @ 17.11.2019, 17:58) *

тебе нужно устанавливать autoit 3

Попробовал Autoit 3, тоже не поворачивает командой MouseMove (x, y, speed)
speed ставил = 0 и больше
FREEON
Цитата(SeregaB @ 18.11.2019, 18:42) *

Попробовал Autoit 3, тоже не поворачивает командой MouseMove (x, y, speed)
speed ставил = 0 и больше

вот те некоторые направления для поиска, далее сам искай чо как куда.
Pixel Aim Bot
WallHack Pixel Trigger Bot
Trigger AimBot
SeregaB
Цитата(FREEON @ 18.11.2019, 23:04) *

вот те некоторые направления для поиска, далее сам искай чо как куда.
Pixel Aim Bot

Именно отсюда и брал пример.
В самой игре видимо есть какая-то блокировка, либо нужен какой-то особый способ ввода команды для смещения.
Я пока не понял как это обойти.
SeregaB
Попробовал через программу <...>, там смещение работает и экран поворачивает, вот только не пойму почему в Пилоте и других не работает?
SeregaB
Вопрос к знатокам!
Скажите пожалуйста, есль ли способ как то задействовать системные библиотеки DLL или WinApi, чтобы пилотом эмулировать сигналы смещения посылаемые от физической мышки? Каг будто это физическая мышка двигается? Кто нибудь сталкивался с этим?
На обычные команды сместить курсор игра не риагирует в режиме стрельбы и курсор находится в центре окна игры. При движении физической мышкой, координаты курсора меняются на -+1 пиксель. При попытке сместить курсор Пилотом на 1 пиксель по много раз подряд, экран также стоит на месте.
Как можно послать команды смещения, которые посылает физическая мышка?
SeregaB
Нашел такую функцию и она работает, правда в другой программе.
Экран поворачивается на заданное растояние
Код

Func _MouseMovePlus($X, $Y,$absolute = 0)
        Local $MOUSEEVENTF_MOVE = 1
    Local $MOUSEEVENTF_ABSOLUTE = 32768
    DllCall("user32.dll", "none", "mouse_event", _
            "long",  $MOUSEEVENTF_MOVE + ($absolute*$MOUSEEVENTF_ABSOLUTE), _
            "long",  $X, _
            "long",  $Y, _
            "long",  0, _
        "long",  0)
EndFunc

Так тоже работает
Код

Func _MouseMovePlus($X, $Y,$absolute = 0)
        Local $MOUSEEVENTF_MOVE = 1
        DllCall("user32.dll", "none", "mouse_event", _
            "long",  $MOUSEEVENTF_MOVE, _
            "long",  $X, _
            "long",  $Y, _
            "long",  0, _
        "long",  0)
EndFunc


Скажите пожалуйста, как подобное можно реализовать в Пилоте?
Как я и предполагал, через вызов DDL все работает.
Fors1k
Код
set #HWND findwindow ('Твоя игра')
set #WM_MOUSEMOVE hex2dec(0x0200)
set $wParam 0
set $lParam тут координаты

set $msg sendmessage (#HWND #WM_MOUSEMOVE $wParam $lParam)

end_script


По идее как-то так, но как точно записать - не знаю.
cirus
Цитата
как подобное можно реализовать в Пилоте?

Только если написать свою длл, в которой можно использовать любые функции winapi.
Цитата
set $msg sendmessage (#HWND #WM_MOUSEMOVE $wParam $lParam)

Это эмуляция перемещения, не захватывает курсор в отличии от mouse_event.
Цитата
По идее как-то так, но как точно записать - не знаю.

Код
// пример как выделить текст в блокноте
// не забыть про привязку к окну Ctrl+A

set #WM_MOUSEMOVE 512
set #WM_LBUTTONDOWN 513
set #WM_LBUTTONUP 514
set #MK_LBUTTON 1

// координаты выделения
set #x 0
set #y 0
set #x2 300
set #y2 300

set #lparam  #x + #y * 65536
set $s sendmessage (workwindow #WM_LBUTTONDOWN #MK_LBUTTON #lparam)  // зажать левую кнопку мыши
wait 200
set #lparam  #x2 + #y2 * 65536
set $s sendmessage (workwindow #WM_MOUSEMOVE 0 #lparam)    // переместить курсор
wait 200
set $s sendmessage (workwindow #WM_LBUTTONUP 0 #lparam)    // отпустить левую кнопку мыши
end_script
Fors1k
Цитата(cirus @ 14.12.2019, 18:43) *

Только если написать свою длл, в которой можно использовать любые функции winapi.

Ведь это же, полагаю, вполне возможно реализовать в самом пилоте без длл, если sendmessage уже в нем присутствует, то и функции, думаю, можно добавить, в грядущей версии? (ну вопрос, думаю, больше к wknight, хотя по предложениям нововведений в последнее время - молчок (что тут, что в отдельных темах)Изображение).
Цитата(cirus @ 14.12.2019, 18:43) *

пример как выделить текст в блокноте
code
Код
 // не забыть про привязку к окну Ctrl+A

set #WM_MOUSEMOVE 512
set #WM_LBUTTONDOWN 513
set #WM_LBUTTONUP 514
set #MK_LBUTTON 1

// координаты выделения
set #x 0
set #y 0
set #x2 300
set #y2 300

set #lparam  #x + #y * 65536
set $s sendmessage (workwindow #WM_LBUTTONDOWN #MK_LBUTTON #lparam)  // зажать левую кнопку мыши
wait 200
set #lparam  #x2 + #y2 * 65536
set $s sendmessage (workwindow #WM_MOUSEMOVE 0 #lparam)    // переместить курсор
wait 200
set $s sendmessage (workwindow #WM_LBUTTONUP 0 #lparam)    // отпустить левую кнопку мыши
end_script


Круто, работает.
Levo222
Цитата(nykep @ 15.11.2019, 20:56) *

в чем смысл игры в шутер если не в соревновании?

в соревновании в том, кто лучше сделает читы)
Fors1k
Цитата(SeregaB @ 13.12.2019, 20:40) *
Скажите пожалуйста, как подобное можно реализовать в Пилоте?
Как я и предполагал, через вызов DDL все работает.

Ну, походу, то, что ты хотел.
Код
//...
call move 100 -50      // сдвинуть курсор на 100 вправо и на 50 вверх
wait 2000
call move -100 50      // вернуть курсор обратно
wait 2000
call move 1100 500 abs // передвинуть курсор в кординаты 1100 500
//...
end_script
proc move #x #y $abs
set linedelay 0
set #flags 1
if $abs = abs
set #flags 32769
set #x 65536 * #x / screenwidth
set #y 65536 * #y / screenheight
end_if
exec winapiexec.exe u@mouse_event #flags #x #y 0 0
end_proc

Файл закинь в /System32.
DarkMaster
Fors1k, а это не тот же sendmessage? Через него не работает? Может быть тогда можно воспользоваться виндовым rundll?
Fors1k
Цитата(DarkMaster @ 17.12.2019, 18:10) *
Fors1k, а это не тот же sendmessage? Через него не работает?
Не очень понял вопрос)

Есть функция sendmessage(...), есть mouse_event(...), есть и другие - все это отдельные независимые функции. Каждая вызывается по своему имени и со своим личным набором параметров.
Если ты хотел спросить одно ли и тоже выполнит sendmessage(#HWND #WM_MOUSEMOVE ...) и mouse_event(#flags #x #y ...), то, как подсказывает нам практика и cirus - нет:
Цитата(cirus @ 14.12.2019, 18:43) *

Это ( sendmessage(#HWND #WM_MOUSEMOVE ...) ) эмуляция перемещения, не захватывает курсор в отличии от mouse_event.

В пилоте доступна только одна функция из всего winapi, с записью: set $s sendmessage (#HWND #msg #wparam #lparam), хотя куда более ожидаем доступ ко всему winapi с записью типа:
set $s callwinapi( sendmessage #HWND #msg #wparam #lparam)
set $s callwinapi( mouse_event #flags #x #y 0 0)
set $s callwinapi( EnableWindow #hWnd #bEnable )
и т.д.
Цитата(DarkMaster @ 17.12.2019, 18:10) *
Может быть тогда можно воспользоваться виндовым rundll?
Rundll32, к сожалению, здесь не помощник, так как он создавался майкрософтом не для пользователей, а для самих себя, и работает не со всеми библиотеками и функциями.=(
В связи с этим, еще сильнее напрашивается реализация доступа в пилоте не только к sendmessage, а к winapi целиком.
Только не знаю уже куда писать пожелания, так как в ответ везде тишина((
DarkMaster
Цитата
хотя куда более ожидаем доступ ко всему winapi

Цитата
еще сильнее напрашивается реализация доступа в пилоте не только к sendmessage, а к winapi целиком.

У меня есть очередной ответ под копирку, который тебе не понравится( Lua...там оно уже есть в виде биндингов к ffi. Окошки тоже можно делать кстати. Правда я там так и не разобрался, как хендлы дергать. Но оно есть =)
Fors1k
offtopic
Цитата(DarkMaster @ 17.12.2019, 19:03) *
У меня есть очередной ответ под копирку, который тебе не понравится =)

Хах, ничего, я только за полезные дискуссии и советы=)
Цитата(DarkMaster @ 17.12.2019, 19:03) *
Lua...там оно уже есть в виде биндингов к ffi)

Ну чего же тогда задача автора не была решена за пару минут великим луа?))
Не, серьезно, если бы люди задавали тут вопросы, и за 5 мин получали ответы на луа, без всяких: ну вроде надо так, а дальше не знаю как закончить... там как бы эта функция есть, но как запускать - хз... раньше запускалось, а ща чет никак...в документации сказано так, но оно так не запускается... и т.д. , то я бы был только за такой язык, где все есть и все работает.)
Ясное дело я вижу, что в пилоте то одного, то другого не хватает, но здесь хоть у нас под боком есть Верховный Сотворитель(Wknight), к которому можно сразу же обратиться с каким-то пожеланием в соответствующую тему. Да, там конечно тишина сейчас, но мысль о том, что есть "дверь, куда постучать", уже греет))
Цитата(DarkMaster @ 17.12.2019, 19:03) *

Правда я там так и не разобрался, как хендлы дергать. Но оно есть =)

В этом весь луа))) :
Цитата(minfin @ 27.11.2019, 8:00) *
трое суток учил Lua. = от это уж точно "грызть кактус"
список функций не полный. всё-равно костыль на костыле. не понятный скрипт в непонятном скрипте.
Цитата(SeregaB @ 13.12.2019, 20:40) *
Нашел такую функцию и она работает, правда в другой программе.
Цитата(DarkMaster @ 17.12.2019, 19:03) *

Правда я там так и не разобрался...
Цитата(Sairex @ 15.12.2019, 11:10) *
Костыли для break и continue на goto
Цитата(Themen @ 5.8.2019, 15:24) *

Почему-то не работают файловые функции (LUA), если расширение файлов "*.int".
Цитата(sutra @ 3.3.2019, 5:05) *
Цитата
Без чудо файликов в Lua jit не будет работать компиляция и еще ряд фишек
Во-во! Везде надо "смотреть в оба" на ЧУДО-файлики, на всякие фокусы ..., да ещё и разбираться во всём этом. Всех кудесников - на рудники. И вообще, когда принцип - "милый мой хороший, догадайся сам" становится основой - грош цена таким реализациям.
И таких сообщений можно найти сотни, они и отпугивают от луа.


Ну, и раз так все активно агитируют за луа, то я уже все-таки подумываю на выходных ознакомиться с ним, и поискать что-то такое, что на нем получится написать проще и удобнее, чем на пилоте;)
DarkMaster
Цитата
Ну чего же тогда задача автора не была решена за пару минут великим луа?))

Потому что я малость не шарю в винапи, и у меня есть проблемы с поиском окон. Винапи, насколько я понял, требует не просто хендл, а полноценную структуру в качестве параметров, а вот, как из хендла вытащить структуру для меня вопрос. Хотя когда-то я писал дллки по дерганью свойств окон с перебором дерева... Это проблема не луа, а квалификации в области знаний.
Цитата
В этом весь луа))):

Луа тут вообще не при чем. Там фактически сишные структуры. Т.е. процесс написания ничем от Си отличаться не будет.
А вот структуры в качестве параметров там, где они не нужны, и переопределение стандартных типов - вот в этом все Си и особенно винапи. Не на то грешишь, но саму идею поддерживаю =)
Цитата
Костыли для break и continue на goto

На самом деле в очень многих языках тоже самое. Тот же break <LEVEL> скорее редкая фишка, как правло это все то же goto, как не печально.
Цитата
Без чудо файликов в Lua jit не будет работать компиляция и еще ряд фишек
Во-во! Везде надо "смотреть в оба" на ЧУДО-файлики

Опять же вопрос квалификации сборщика. Тапки кидать в меня и кнайта. Пользователь не виноват. Хотя по большому счету, если ты занимаешься разработкой, то должен быть и готов подлинковать что-то, подгуглить. Но сам подход, что не было этих вещей из коробки крайне ошибочен и подобные проблемы меня лично зачастую выбешивают неимоверно. Ладно когда их 1-2, но у меня были _недели_ подобных подлинковок, конфликтов версий и прочей лабуды просто для того чтобы скомпилить какую-нибудь либу. В итоге цепочка из проблем накапливала больше двух десятков звеньев. Виноваты мы короче =)
SeregaB
Цитата(Fors1k @ 16.12.2019, 18:30) *

Ну, походу, то, что ты хотел.

Файл закинь в /System32.

Отлично, спасибо, теперь получился поворот экрана, только не понятно что это за файл и как его делать под себя, если понадобятся другие задачи. Как я понимаю, в Пилоте напрямую через DLL нельзя прописать такую функцию?
DarkMaster
Цитата
Как я понимаю, в Пилоте напрямую через DLL нельзя прописать такую функцию?

Можно.

Скорее всего кстати файлик закинуть можно и просто рядом с пилотом.
Fors1k
Цитата(SeregaB @ 18.12.2019, 12:20) *

Отлично, спасибо, теперь получился поворот экрана, только не понятно что это за файл и как его делать под себя, если понадобятся другие задачи.

В смысле как запускать другие функции winapi? Я думал тебе только move был нужен, и написал удобную процедуру именно под него. Можно и универсальную сделать.
Для любой функции winapi: call winApi <библиотека> <функция> <параметры(одной переменной)> .
А можно и совместить, если move все-таки будет использоваться в коде часто.
Пример:
Код
set $params 1 -300 -250 0 0
call winapi u mouse_event $params              // сдвинуть курсор на 300 влево и на 250 вверх
wait 1000

call move 300 250                              // вернуть курсор обратно    (КОРОТКАЯ ЗАПИСЬ)
wait 2000
call move 500 500 abs                          // сдвинуть курсор в 500x500 (КОРОТКАЯ ЗАПИСЬ)

set $params 0 open calc.exe 0 0 1
call winapi s ShellExecuteW $params            // запустить калькулятор
wait 4000

set $params findwindow('калькулятор') 16 0 0
call winapi u SendMessageW $params             // закрыть калькулятор

end_script

//---------------------------------------------

proc winapi $lib $function $params
set linedelay 0
switch $lib
case u
exec winapiexec.exe user32.dll@$function $params
break
case s
exec winapiexec.exe shell32.dll@$function $params
break
end_switch
end_proc
proc move #x #y $abs
set linedelay 0
set #flags 1
if $abs = abs
set #flags 32769
set #x 65536 * #x / screenwidth
set #y 65536 * #y / screenheight
end_if
exec winapiexec.exe u@mouse_event #flags #x #y 0 0
end_proc

Цитата(DarkMaster @ 18.12.2019, 12:48) *
Скорее всего кстати файлик закинуть можно и просто рядом с пилотом.

Ага, можно куда угодно. Просто в s32 удобно, что бы путь не писать каждый раз)
Цитата(DarkMaster @ 17.12.2019, 22:51) *

Потому что я малость не шарю в винапи

Да я сам впервые вижу этот вин апи, и уже начинаю его недолюбливать))
SeregaB
Цитата(Fors1k @ 18.12.2019, 21:14) *

Да я сам впервые вижу этот вин апи, и уже начинаю его недолюбливать))

Хоть и впервые, но уже много чего можешь сделать. Я совсем не представляю откуда брать параметры и как это все на деле применять. В разных программах все по разному, конкретного описапия нигде не нашел.
Просто с применением WinApi расширяется круг возможностей, пример тому решилась моя задача.

Fors1k, единственное есть вопрос, как можно сделать плавное смещение курсора командой call move x y?
Fors1k
Цитата(SeregaB @ 23.12.2019, 11:12) *
Fors1k, единственное есть вопрос, как можно сделать плавное смещение курсора командой call move x y?

Код
wait 500
set linedelay 0
call move -500 -230           // сдвинуть курсор на 500 влево и на 230 вверх

wait 1200

call movesmooth 500 230       // плавно вернуть курсор обратно

end_script

//----------------------------

proc movesmooth #x #y
set #cf 12
set #cx #x / #cf
set #cy #y / #cf
repeat #cf
call move #cx #cy
end_repeat
set #fx #x - #cx * #cf
set #fy #y - #cy * #cf
call move #fx #fy
end_proc

proc move #x #y $abs
set linedelay 0
set #flags 1
if $abs = abs
set #flags 32769
set #x 65536 * #x / screenwidth
set #y 65536 * #y / screenheight
end_if
exec winapiexec.exe u@mouse_event #flags #x #y 0 0
end_proc
Zenogiasu
Очень странно... Такая сверхважная весчь, как перемещение камеры вместе с курсором в играх с нонтаргетом... описывается только в 1 захолустной темке на форуме, которую случайно нашел. Был уверен что пилотик на такое не способен, и придется учитться работать с ардуино, ведь утвержалось так, будто лишь только через этот дополнительный костыль в виде платы можно двигать камеру. Но тут приходит уважаемый Fors1k, пишет какой-то файлик и О ЧУДО! Пилот из простого-умного манипулятора мышкой превращается в полноценную программу для написания серьезных ботов в современных играх с нонтаргетом, а не только в браузерках и уо, где только курсором и нужно управлять) Спасибо.
Уже собирался заказывать ардуино, хорошо что темку откапал вовремя
DarkMaster
Уверяю все это пишется на ура без плавного перемещения. Как правило оно только вредит и очень сильно. Единственное реальное применение подобных плавностей "скругление" углов при беге по вейпоинтам. Правда там все равно придется писать кастомную функцию под конкретный случай с кучей старнных не линейных параметров и подгонкой вручную по месту. Есть еще полумифический момент обхода детекторов чтобы больше "очеловечить" код, но если гнаться за очеловечиванием, то, как правило, это очень много работы и добавить плавный мув мышкой при этом капля в море.

Забывайте про старый синтаксис. В нулевой строке прописывайте включение lua:
--lua
и пользуйтесь именно им. Это очень сильно облегчит написание.

Если вам что-то нужно - спрашивайте. Подскажем.
Cockney
Скорее оффтоп, но все же интересно. А есть ли решения автоматизации именно в 3d ? Т.е. условно в начале сессии устанавливаем позицию камеры и далее отслеживаем вектор ее ? Интересует чисто визуальный метод, без чтения памяти жерты. Разумеется, система координат может не совпадать, но главное чтобы бот мог превращать визуальные изменения в числовые. Под решением подразумевается не только пилот, но и возможно другие вещи.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.