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

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

UoKit.com Форумы _ UO Pilot _ Подскажите почему move_smooth не работает?

Автор: SeregaB 24.9.2019, 19:29

Столкнулся с проблемой в 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 25.9.2019, 3:46

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

Автор: SeregaB 26.9.2019, 10:17

Цитата(DarkMaster @ 25.9.2019, 3:46) *

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

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

Автор: Levo222 26.9.2019, 14:17

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

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

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

Автор: SeregaB 26.9.2019, 17:45

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

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

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

Автор: SeregaB 26.9.2019, 19:13

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

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

Пробовал все три варианта, экран в игре не поворачивается.
Что можно еще сделать?

Автор: 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

Автор: SeregaB 27.9.2019, 8:52

Цитата(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 28.9.2019, 2:54

Цитата(SeregaB @ 26.9.2019, 21:45) *

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

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

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

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

Запомнить область где она находилась, и с шагом N производить смещения относительно неё в ту область которая нужна
что-то типо SaveMousePos
А еще можно переназначить управление по типу движение мышью = клавиша такая-то(смещение на такое-то кол-во координат) В игре должна быть команда по типу "центрировать прицел" или что-то вроде того вместе с ней производить клики
В некоторых приложениях приходится убивать фон чтобы принялись клики мышью типо KillBackgroundFocus

Автор: DarkMaster 28.9.2019, 16:58

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

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

Автор: SeregaB 4.10.2019, 15:41

Кто знает как этим пользоваться?

Macro_send - отправка нажатий клавиш с помощью макроса.
В инструкции нет описания.

Автор: SeregaB 4.10.2019, 18:51

Цитата(DarkMaster @ 25.9.2019, 3:46) *

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

Методом записи движения мышки, получилось определить, что движения начинаются из центра экрана.
Пробовал потом воспроизвести запись, но экран не двигался!!! Но от физической мышки он поворачивается. Пробовал через запись и воспроизведение макроса, то же не получается.
Что еще можно сделать?
Может кто знает как назначить клавиши управления от джостика?

Автор: DarkMaster 6.10.2019, 22:46

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

Автор: SeregaB 9.10.2019, 10:22

Цитата(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 9.10.2019, 11:12

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

Автор: SeregaB 10.10.2019, 12:33

Цитата(DarkMaster @ 9.10.2019, 11:12) *

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

Попробовал
Так тоже не работает

Автор: minfin 15.11.2019, 9:04

такой же вопрос,


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


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


Автор: DarkMaster 15.11.2019, 11:21

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

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

Берете move и вызываете его много раз по любой траектории с любыми скоростями (используйте wait для задержки).

Автор: nykep 15.11.2019, 16:03

Цитата(SeregaB @ 9.10.2019, 10:22) *

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

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

Автор: DarkMaster 15.11.2019, 16:22

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

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

Автор: nykep 15.11.2019, 16:56

Цитата(DarkMaster @ 15.11.2019, 16:22) *

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

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

Автор: Fors1k 15.11.2019, 19:29

Цитата(nykep @ 15.11.2019, 16:03) *

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


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

Автор: SeregaB 17.11.2019, 15:02

Цитата(nykep @ 15.11.2019, 16:03) *

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

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


Аналогичного бота я делал для платформы андройд, там точное прицеливание работает без проблем. Но вот с ПК версией на Steam возникает проблема. Как ее решить пока не знаю.

Автор: SeregaB 17.11.2019, 15:16

Вот как пример, это я делал бота на проге внутри андройда

[+]

Автор: FREEON 17.11.2019, 17:58

ну с весом пилота и его способностями он превосходит многие программы для автоматизации действий и другие проги с ним не сравнятся и не требует глубоких знаний в программировании. вот тоже к примеру если хоч сдлать бота то тебе нужно устанавливать autoit 3 он умеет управлять мышью в directX а хочешь автоприцел на андроид то поищи crosshair. а если хоч всех выносить то купи специальные читы которые могут встраиваться в процесс игры тое не факт что тебе впарят не болванку или какой-нить майнер или сниффер

Автор: SeregaB 18.11.2019, 10:53

Цитата(FREEON @ 17.11.2019, 17:58) *

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

Как я понял crosshair это специальное устройство, которое эмулируем мышку, такой вариант не подходит для работы внутри эмулятора или на андройд устройстве, тк нужно, чтобы бот играл самостоятельно.
С autoit 3 надо пробовать, спасибо за совет.

Автор: SeregaB 18.11.2019, 18:42

Цитата(FREEON @ 17.11.2019, 17:58) *

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

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

Автор: FREEON 18.11.2019, 23:04

Цитата(SeregaB @ 18.11.2019, 18:42) *

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

вот те некоторые направления для поиска, далее сам искай чо как куда.
https://www.youtube.com/watch?v=JLUM6beWSVk&t=742s
https://pvpru.com/board/showthread.php?t=143959
https://autoit-script.ru/threads/avtomatizacija-apb-r-prevraschenie-triggerbot-v-aimbot-triggerbot-warthunder-tanki.21109/

Автор: SeregaB 19.11.2019, 12:47

Цитата(FREEON @ 18.11.2019, 23:04) *

вот те некоторые направления для поиска, далее сам искай чо как куда.
https://www.youtube.com/watch?v=JLUM6beWSVk&t=742s

Именно отсюда и брал пример.
В самой игре видимо есть какая-то блокировка, либо нужен какой-то особый способ ввода команды для смещения.
Я пока не понял как это обойти.

Автор: SeregaB 19.11.2019, 14:22

Попробовал через программу <...>, там смещение работает и экран поворачивает, вот только не пойму почему в Пилоте и других не работает?

Автор: SeregaB 10.12.2019, 16:35

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

Автор: SeregaB 13.12.2019, 20:40

Нашел такую функцию и она работает, правда в другой программе.
Экран поворачивается на заданное растояние

Код

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 14.12.2019, 18:18

Код
set #HWND findwindow ('Твоя игра')
set #WM_MOUSEMOVE hex2dec(0x0200)
set $wParam 0
set $lParam тут координаты

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

end_script


По идее как-то так, но как точно записать - не знаю.

Автор: cirus 14.12.2019, 18:43

Цитата
как подобное можно реализовать в Пилоте?

Только если написать свою длл, в которой можно использовать любые функции 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 14.12.2019, 21:47

Цитата(cirus @ 14.12.2019, 18:43) *

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

Ведь это же, полагаю, вполне возможно реализовать в самом пилоте без длл, если sendmessage уже в нем присутствует, то и функции, думаю, можно добавить, в грядущей версии? (ну вопрос, думаю, больше к wknight, хотя по предложениям нововведений в последнее время - молчок (что https://forum.uokit.com/index.php?showtopic=19856, что в отдельных темах)Изображение).
Цитата(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 15.12.2019, 10:31

Цитата(nykep @ 15.11.2019, 20:56) *

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

в соревновании в том, кто лучше сделает читы)

Автор: Fors1k 16.12.2019, 18:30

Цитата(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.


Прикрепленные файлы
Прикрепленный файл  file.rar ( 1,87 килобайт ) Кол-во скачиваний: 337

Автор: DarkMaster 17.12.2019, 18:10

Fors1k, а это не тот же sendmessage? Через него не работает? Может быть тогда можно воспользоваться виндовым rundll?

Автор: Fors1k 17.12.2019, 18:53

Цитата(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 17.12.2019, 19:03

Цитата
хотя куда более ожидаем доступ ко всему winapi

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

У меня есть очередной ответ под копирку, который тебе не понравится( Lua...там оно уже есть в виде биндингов к ffi. Окошки тоже можно делать кстати. Правда я там так и не разобрался, как хендлы дергать. Но оно есть =)

Автор: Fors1k 17.12.2019, 19:49

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 17.12.2019, 22:51

Цитата
Ну чего же тогда задача автора не была решена за пару минут великим луа?))

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

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

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

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

Автор: SeregaB 18.12.2019, 12:20

Цитата(Fors1k @ 16.12.2019, 18:30) *

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

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

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

Автор: DarkMaster 18.12.2019, 12:48

Цитата
Как я понимаю, в Пилоте напрямую через DLL нельзя прописать такую функцию?

Можно.

Скорее всего кстати файлик закинуть можно и просто рядом с пилотом.

Автор: Fors1k 18.12.2019, 21:14

Цитата(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 23.12.2019, 11:12

Цитата(Fors1k @ 18.12.2019, 21:14) *

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

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

Fors1k, единственное есть вопрос, как можно сделать плавное смещение курсора командой call move x y?

Автор: Fors1k 23.12.2019, 19:48

Цитата(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 13.1.2023, 9:21

Очень странно... Такая сверхважная весчь, как перемещение камеры вместе с курсором в играх с нонтаргетом... описывается только в 1 захолустной темке на форуме, которую случайно нашел. Был уверен что пилотик на такое не способен, и придется учитться работать с ардуино, ведь утвержалось так, будто лишь только через этот дополнительный костыль в виде платы можно двигать камеру. Но тут приходит уважаемый Fors1k, пишет какой-то файлик и О ЧУДО! Пилот из простого-умного манипулятора мышкой превращается в полноценную программу для написания серьезных ботов в современных играх с нонтаргетом, а не только в браузерках и уо, где только курсором и нужно управлять) Спасибо.
Уже собирался заказывать ардуино, хорошо что темку откапал вовремя

Автор: DarkMaster 13.1.2023, 11:48

Уверяю все это пишется на ура без плавного перемещения. Как правило оно только вредит и очень сильно. Единственное реальное применение подобных плавностей "скругление" углов при беге по вейпоинтам. Правда там все равно придется писать кастомную функцию под конкретный случай с кучей старнных не линейных параметров и подгонкой вручную по месту. Есть еще полумифический момент обхода детекторов чтобы больше "очеловечить" код, но если гнаться за очеловечиванием, то, как правило, это очень много работы и добавить плавный мув мышкой при этом капля в море.

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

Если вам что-то нужно - спрашивайте. Подскажем.

Автор: Cockney 13.1.2023, 13:30

Скорее оффтоп, но все же интересно. А есть ли решения автоматизации именно в 3d ? Т.е. условно в начале сессии устанавливаем позицию камеры и далее отслеживаем вектор ее ? Интересует чисто визуальный метод, без чтения памяти жерты. Разумеется, система координат может не совпадать, но главное чтобы бот мог превращать визуальные изменения в числовые. Под решением подразумевается не только пилот, но и возможно другие вещи.

Автор: DarkMaster 13.1.2023, 14:50

готового нет. там есть вопросы по тому какие будут набегать погрешности и не будет ли уползать вектор.
Проще по минимапу. По нему ориентация работает все шикарно.

Автор: Zenogiasu 14.1.2023, 14:33

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

Автор: Zenogiasu 29.3.2023, 20:03

Приветствую авантюристы. Возникла пара вопросов.
как делить число, чтоб пилот сохранял дробную часть и учитывал её при дальнейших вычислениях? например 577 на 10, пилот вернет 57.Надо это мне для того чтобы move_smooth по своим расчетам реализовать. Принцип расчета в том что мы берем текущие корды мыши и вычитаем из координат, куда надо переместить 500 500, чтобы полученный отрезок уже разделить делителем 10 и двигать мышь с рандом промежутками времени. но если не приделать костыль в виде конечного перемещения обычным мувом в нужные корды 500 500, то курсор приедет с погрешностями в точку назначения, если текущие корды мыши не будут делиться на 10 или другой делитель без остатка. в коде все прописал. Есть решение?
Такую-же проблему испытываю при использовании winapiexec. Там с погрешностями двигает и работает странно в этом плане. Иногда четко иногда нет.
Просто для человекоподобия в игре надо двигать камерой, и принциаипльно важно после рандомных двиганий вернуть её на ту-же позицию, которую определить можно только по средству вычислений координат, а не визуально, чтоб корректно работал дальше бот. А корды погрености выдают...

Код

call movesmooth 500 500 //50 50
end_script

proc movesmooth #endx #endy #x1 #y1
set linedelay 0
//set #endx #endx + (-#x1 + random (#x1 * 2))   // это разброс 50 пикслеей туда и сюда если просто хотим поводить мышкой
//set #endy #endy + (-#y1 + random  (#y1 * 2))
set #delitel 12
get mouse_pos #x #y        // получаем текущие корды мыши чтобы
set #cx #endx - #x         // вычесть из из координат куда надо переместить
set #cy #endy - #y         // чтобы дать понять на сколько сдвинуть мышь от того где она до того куда надо
set #fx #cx / #delitel     // затем получаем шаг путем деления
set #fy #cy / #delitel     // полученных кординат, на столько будет двигаться мушь в 1 шаг
repeat #delitel            // двигаем мышь столько раз на сколько разделили делителем
    wait 1 + random (15)
    set #x #x + #fx
    set #y #y + #fy
    move #x #y
end_repeat
//move #endx #endy         // а это костыль если решения не найдется
get mouse_pos #x #y
log  #x #y
end_proc

Автор: Cockney 29.3.2023, 21:42

Раньше было такое решение https://forum.uokit.com/index.php?showtopic=29139

Сейчас лучше lua использовать

Автор: Zenogiasu 30.3.2023, 1:38

Цитата(Cockney @ 29.3.2023, 21:42) *

Сейчас лучше lua использовать

rolleyes.gif
спс. согласен. но в печали что это не написано на заглавной странице пилота. если с нуля учить то конечно луа. Вот только там нет основополагающего финдколора. точнее чтобы его получить нужно перекопать весь форум за 3 часа, по крупицам в разных темах найти решения как там это реализовать, а неокрепший в программировании разум этому не особо рад. я пытался, но в будущем обязательно доберусь)
1. p.s а есть вариант сделать чтобы сам шаг был рандомный? например из точки 0 0 при перемещении в 500 500 мышь будет по 50 пикселей по х и у двигать каждый раз, и это тоже палевно (не кидайтесь, разрабы тут уменют смотреть в экран игрока). нужно чтоб например двигал мышь и шаки рандомизировал, например если первый шаг 40 то второй уже 60 и в итоге пришелд всеравно к цели.
2. Как сделать кривые перемещения? про кривую Безье что-нибудь слышали, не подскажете? как реализовать в коде её

Автор: nykep 30.3.2023, 9:55

чтоб вернуть обратно записывай все рандомные движения мышью в массив, а потом двигай по ним в обратном порядке. Если замутить что-то с дробной частью, то все равно будет погрешность, потому что надо будет округлять до целого чтоб не выдало ошибку при попытке перемещения мыши.

Код

--lua
local a = findcolor (46, 737, 468, 767, 16711422, '%b', 2, 1, 0) -- координаты, цвет, массив, тип поиска, количество точек, отклонение
-- "(1341565-2435657)" так записывается диапазон, а так несколько цветов "(1341565, 2435657)"



Автор: Cockney 30.3.2023, 10:29

Цитата(Zenogiasu @ 30.3.2023, 1:38) *

rolleyes.gif
спс. согласен. но в печали что это не написано на заглавной странице пилота. если с нуля учить то конечно луа. Вот только там нет основополагающего финдколора. точнее чтобы его получить нужно перекопать весь форум за 3 часа, по крупицам в разных темах найти решения как там это реализовать, а неокрепший в программировании разум этому не особо рад. я пытался, но в будущем обязательно доберусь)
1. p.s а есть вариант сделать чтобы сам шаг был рандомный? например из точки 0 0 при перемещении в 500 500 мышь будет по 50 пикселей по х и у двигать каждый раз, и это тоже палевно (не кидайтесь, разрабы тут уменют смотреть в экран игрока). нужно чтоб например двигал мышь и шаки рандомизировал, например если первый шаг 40 то второй уже 60 и в итоге пришелд всеравно к цели.
2. Как сделать кривые перемещения? про кривую Безье что-нибудь слышали, не подскажете? как реализовать в коде её



1. почему нет ? это должно выглядеть примерно так set #step = random(50). далее нужно просто этот #step учитывать, чтобы не перемахнуть ключевую точку
2. взять готовую реализацию и портировать на пилот или алгоритм реализовать самостоятельно с учетом особенностей пилота по работе с дробными числами

Автор: Zenogiasu 30.3.2023, 16:59

Цитата(nykep @ 30.3.2023, 9:55) *

чтоб вернуть обратно записывай все рандомные движения мышью в массив, а потом двигай по ним в обратном порядке. Если замутить что-то с дробной частью, то все равно будет погрешность, потому что надо будет округлять до целого чтоб не выдало ошибку при попытке перемещения мыши.

Код

--lua
local a = findcolor (46, 737, 468, 767, 16711422, '%b', 2, 1, 0) -- координаты, цвет, массив, тип поиска, количество точек, отклонение
-- "(1341565-2435657)" так записывается диапазон, а так несколько цветов "(1341565, 2435657)"


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

Автор: Zenogiasu 25.4.2023, 15:09

Здравстуйте. подскажите пожалуйста существует ли проблема у пилота в том, что на разных версиях вин10 скрипты могут работать с разной скоростью? поставил пилота на другой комп с другой виндой там те-же самые скрипты работают раза в 2 быстрее (пипка пилота тайминги скрипты все иддентично). Какбудто на другой винде некоторые тайминги пропускаются чтоли или их рандомная составляющая хз. Может ли быть дело в том что на новой винде, где все работает быстрее, подчищена папка winsxs?(через командную строку) ПС то что на новой винде все работает бстрее не значит что это хорошо, так как когда на старой версии виндовс ему надо ждать 200 мс, а затем сделать чек открытия инвентаря или еще чего либо, на новой винде он какбудто ждет вместо 200мс всего 50 или 100, инвентарь еще прорисоваться не успевает в виду чего некоторый сбой.
при этом дело не в компах, там ранаьше была та-же винда, просто на 2х снес и поставил новую и обнаружил этот казус. + есть причина считать что сея пиратскаая сборка устаревшая потому-что обс на ней не запускается

Автор: cirus 25.4.2023, 17:42

Скорость работы скрипта зависит от процессора.

Автор: Zenogiasu 25.4.2023, 21:54

Цитата(cirus @ 25.4.2023, 17:42) *

Скорость работы скрипта зависит от процессора.

Знаю о чем вы. Но я не про это. У меня язык пилота и большие тайминги, а также время на выполнение строки минимум 20мс, мне скорострельность не нужна пока-что, уровень не тот. Поэтому мои скрипты будут работать даже на коробке из под пиццы нагружая её на 0%. Лишь 1 фрагмент где надо по фасту прогрузить штук 15 переменных и передвинуть окно пилота в нужную позицию, где я на этот фрагмент поставил линеделэй 1. На старых виндусах оно видно как выполняется, прогружаются переменные двигаетс яокно. А на новых виндусах на 2х разных компах оно делается моментально, и чтобы визуально приблизить к тому, как на старых, нужно там поставить задержку 20, что говорит о том что на новых виндусах каждая строка выполняется почему-то на 20мс быстрее чем на других... Чтож я так понял что решения нет, видимо с виндой чето не то. Буду другую ставить значит...

Еще вопрос: не могу корректно найти количество изображений, которыйх несколько. через переменную финдимаге пишет не корректное число, как правило в разы большее чем картиинок на деле, через размер массива то-же самое но немного другие цифры. пока-что могу использовать только проверку каждой ячейки отдельно на предмет картинки... Или в данном случае стоит научиться пользовать скриптом на поиск скученности пикселей из другой темы? я попробовал - офигенный скрипт так-то, только расчеты бы понять, чтобы научитсья самому писать такой...

Автор: nykep 27.4.2023, 2:51

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

Автор: cirus 27.4.2023, 13:18

Цитата
вэйты должны работать как надо независимо от скорости компа

Почитайте как работает Sleep в Windows. Если вкратце, то эта функция не точная, то что вы установите паузу 5мсек, не означает что скрипт продолжит работу через 5 мсек.

Автор: DarkMaster 27.4.2023, 18:56

Цитата
Почитайте как работает Sleep в Windows. Если вкратце, то эта функция не точная, то что вы установите паузу 5мсек, не означает что скрипт продолжит работу через 5 мсек.

По большому счету там два возможных шага 16мс на реально старом железе и 1мс на современном. Они оба не гарантированы, под луа есть модуль который показывает очень точно прошедшее время и по тестам этой связки могу сказать, что погрешность обычно не больше 0.01 мс, при каких-то критических перегрузках может будет в районе 0.1-0.2 мс и то, это будет исключение и соседний вэйт будет уже нормальным. Т.е. на данный задержки нельзя пологаться, как на сверхточный таймер, но в рамках скипта обычно этого более чем достаточно для стабильной повторяемости результата.

Автор: Zenogiasu 3.5.2023, 4:28

Хелп. Через проц не ищет почему-то финдколор.
пишет что переменная 0 если выполнять через проц. Если же выполнять обычно или через госуб - нормально находит цвет. Бывает такое?
call check
log #a1
end_script

proc check
set #cr surrent_script
set #a1.#cr findcolor ...
end_proc
//
обнаружил что работать не будет если сделать в проце set #a1.#cr fincolor... или любая обычная сноска на скрипт. Но если сделать в проце просто set #a1 findcolor а потом в проце присвоить #a1.#cr то работать будет как надо. Баг? Это же чтобы финдколор в проце намутить чтобы переменные поиска в скрипт ереместить в 2 раза больше строк писать придется, если конечно тебе надо переносить эти переменные. если не надо переносить то работать будет и так.

Автор: nykep 3.5.2023, 14:52

у тебя результат findcolor записывает в переменную #a1.#cr , а в лог выводится #a1

Автор: Zenogiasu 8.5.2023, 2:13

Цитата(nykep @ 3.5.2023, 14:52) *

у тебя результат findcolor записывает в переменную #a1.#cr , а в лог выводится #a1

И что? зачем, если хочешь логнуть переменную, писать log #a1.1 или log #a.#cr если это скрипт 1 ?? просто пишешь log #a.1 и финдколор или финдимаге из проца должен был присвоить этой переменной значение. И он присваивает! Но не правильное. Всегда присваивает 0 хотя оно не 0, если сделать финдколор вне проца ну...
если сделать в проце set #e.#cr findcolor, if #e.cr > 0 log Найдено. То пилот выдает ошибку что мол скрипт не правильный
при этом если вместо #cr использовать просто через точку #e.1 if #e.1 > 0, то работает, но опять таки выдает 0, хотя картинка есть.

В общем через проц нельзя сделать что-то типа?

call color
if #a > 0
log 1
end_if
if #a2 > 0
log 2
end_if
...
end_script

proc color
set #cr surrent_script
set #a.#cr findcolor ...
set #a2.#cr findclolor ...
set #a3.cr findclolor ...
end_proc
Если если вместо проца юзать гото то работает. по сути я повторил в точности свой вопрос.... у пилота проблема с переменными при финдколоре в проце



Автор: nykep 8.5.2023, 4:31

похоже что переменные в процедуре считаются локальными и не выходят за ее пределы. Используй gosub

Код
gosub color
if #a > 0
log 1
end_if
if #a2 > 0
log 2
end_if
if #a3 > 0
log 3
end_if
end_script

:color
set #cr current_script
set #a.#cr findcolor (1211, 93 1309, 115 1 1 (1532976) %arr1 2 1 0)
set #a2.#cr findcolor (123, 351 245, 494 1 1 (2171169) %arr2 2 1 0)
set #a3.#cr findcolor (1554, 943 1608, 964 1 1 (16777215) %arr3 2 1 0)
return


я вообще то никогда не пользовался процедурой поэтому не вникал, но раз ты ее используешь почитал бы вики https://uopilot.uokit.com/wiki/index.php?title=Proc

Автор: DarkMaster 10.5.2023, 15:59

Одной из целей создания процедур в пилоте было именно выделение переменных в отдельный namespace, чтобы какой-нибудь for #i не грохал счетчик в основном коде.

Переходите на луа и все будет хорошо.

Автор: Zenogiasu 18.5.2023, 23:54

Цитата(DarkMaster @ 10.5.2023, 15:59) *

Одной из целей создания процедур в пилоте было именно выделение переменных в отдельный namespace,

Подскажите пожалуйста правильно ли я делаю с переменными. Есть такие переменные, которые вот прям необходимо окончательно и безповоротно запомнить, и которые никогда не стирались бы и не зависили от того включен скрипт или нет. Ибо разные скрипты, которые физически никак не могут быть обхединены, генерируют определенные переменные в определенных обстоятельствах. Например переменная вылетов из-за разных причин. Если игра вылетел из-за краша или какой-то прочей неурядицы, бот заходит обратно, но делает это максимум 3 раза подряд чтобы не долбиться туда 12 часов пока ты спишь, если вдруг работа бота не может быть продолжена из-за каких-то игровых обстоятельств. переменную вылета я записываю допустим как #vilet.14 и 14 скриптом никогда не пользуюсь и не запускаю. там хранятся переменные эта, и ряд других. Правильно ли я их сохраняю или есть какой-то еще способ? потому-что выглядит это как бредни малолетнего) догадался сам до этого способа, заметил что можно прописывать переменные в неактивный скрипт и они там будут сохранять свои значения.
Или вот например скрипт, который надо всегда у меня запускать перед первым запуском, он прогружает переменные, от которых зависит вообще по сути то, что будет делать бот, его функционал. Как если бы был интерфейс у бота, где ты ставишь галочки делать то или делать это, в такой-то промежуток времени, поворачивать камеру туда-то или туда-то. естественно прописываются они тоже в скрипт неиспользуемый никогда.

Автор: nykep 19.5.2023, 23:04

пишу скрипт 1

Код
wait 1000
log #a.2

скрипт 2
Код
wait 1000
set #a 123

при остановленном скрипте 2 в лог пишет "#a.2" , а не 123. Не знаю как они у тебя сохраняются

Автор: DarkMaster 20.5.2023, 21:56

Держите для этих целей отдельную вкладку. Используйте ее как базу данных и храните там эти переменные. Соответственно обрщайтесь к переменным через точку типа #a.8. Эта вкладка обязательно должна быть запущена. Ее можно сразу поставить на паузу или увести в бесконечный цикл вэйтов.

Автор: Zenogiasu 27.5.2023, 20:20

Цитата(DarkMaster @ 20.5.2023, 21:56) *

Держите для этих целей отдельную вкладку. Используйте ее как базу данных и храните там эти переменные. Соответственно обрщайтесь к переменным через точку типа #a.8. Эта вкладка обязательно должна быть запущена. Ее можно сразу поставить на паузу или увести в бесконечный цикл вэйтов.

нет, скрипту вовсе необязательно быть активным чтобы хранить в себе переменные, и чтобы другие скрипты основывали свою работу на всегда выключенном скрипте, в котором тем не менее прописаны переменные.
например скрипт захода в клиент у меня отдельный. когда он начинается он чекает переменную вылетов в 14 складке, которую сам же приплюсовывает в конце каждого своего завершения. которая обнуляется при детекте успешной работы бота. Но если она = 3 значит он 3 раза подряд уже пытается войти и начтаь и не может. Отрубаем и пишем себе в вк что все пипец

Автор: Zenogiasu 27.5.2023, 23:20

Цитата(nykep @ 19.5.2023, 23:04) *

пишу скрипт 1
Код
wait 1000
log #a.2

скрипт 2
Код
wait 1000
set #a 123

при остановленном скрипте 2 в лог пишет "#a.2" , а не 123. Не знаю как они у тебя сохраняются

не так имею в виду
имею в виду что когда скрипт 1 прописывает в неработающий скрипт 2 переменную, если запустить потом скрипт 2 и логировать эту переменную она будет не nul, а с установленным уже заранее занечением которыое установил скрипт 1. странно кто-то удалил мое предыдущее сообщение. это какая-то сакральная информация? как информация про винапиехец?)

Автор: DarkMaster 28.5.2023, 18:52

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

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

// Тут посты кроме меня тереть особо не кому. Я не стирал, в корзине форума ваших постов тоже не вижу. Они точно были? Дата? Цитата любого куска чтобы в поиск вбить.

Автор: Zenogiasu 28.5.2023, 22:18

Цитата(DarkMaster @ 28.5.2023, 18:52) *

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

// Тут посты кроме меня тереть особо не кому. Я не стирал, в корзине форума ваших постов тоже не вижу. Они точно были? Дата? Цитата любого куска чтобы в поиск вбить.

Пост появился потом пропал потом снова появился, а в промежутке я дописал то что дописал так что все хорошо.
Касательно ошибок - я так наверно уже месяцев 10 делаю - ошибок небыло, все максимально четко, и если честно, даже не представляю как бы без этого жил. Чтобы добиться нужного результата, пришлость бы просто объединять все в 1 скрипт, головной, который уже не отключается никогда. И вот какраз таки это и вызвало бы много ошибок, потому-что сложно.
А в луа можно также сохранять переменные в других вкладках? Это выглядело бы как local a.3 = 3 ? к примеру.

Автор: DarkMaster 29.5.2023, 14:30

Там схема немного иная. Я где-то описывал найти не могу. Если народ ссылочку не даст - опишу заново. Там схема изначально более замороченная, но в плане использования особо не будет отличатсья.
Смысл следующий:
через ffi выделяем кусок памяти. В данном случае этот служебный скрипт уже без вариантов придется держать запущенным, хотя там достаточно на вечый wait поставить.
Далее пишем в файлик адрес по которому выделена память.
В других скриптах подгружаем из файлика адрес, создаем указатель на этот адрес.
В итоге обращаемся из любого скрипта примерно так:
exchange[321] = 456
if exchange[321] == 123 then

Т.е. exchange получается глобальный для всех скриптов.

ну и exchange может быть любой размерности - смотря, как объявить.
Т.е. exchange[123][321] = 456 тоже делается элементарно.
Размерности может быть не только 1, 2, но 3, 5, 984 и т.д.

Автор: Zenogiasu 18.6.2023, 21:42

Цитата(DarkMaster @ 29.5.2023, 14:30) *

Там схема

подскажите пожалуйста почему код
sendex @
wait 300
sendex
end_script
Менят каждый раз раскладку клавиатуры, и как это пофиксить. Ато это ужасно.

Цитата(Zenogiasu @ 18.6.2023, 21:34) *

подскажите пожалуйста почему код
sendex @
wait 300
sendex
end_script
Менят каждый раз раскладку клавиатуры, и как это пофиксить. Ато это ужасно.

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

Автор: DarkMaster 19.6.2023, 0:30

Это может быть связано с тем, что данный символ доступен только в английской раскладке. Если нужен именно sendex, то могу предложить вызывать
set #a setlayout (409) // англ
set #a setlayout (419) // рус
для переключения раскладки

если sendex не принципиален, то say не должен иметь таких проблем.

Автор: Zenogiasu 19.6.2023, 8:45

Цитата(DarkMaster @ 19.6.2023, 0:30) *

Это может быть связано с тем, что данный символ доступен только в английской раскладке. Если нужен именно sendex, то могу предложить вызывать
set #a setlayout (409) // англ
set #a setlayout (419) // рус
для переключения раскладки

если sendex не принципиален, то say не должен иметь таких проблем.

ого круто, не знал что есть Say, который независимо ни от чего втч раскладки, будет писать текст какой нужно.
и еще, я ведь как бы не символ пытаюсь написать @, я пытаюсь зажать всего-лишь альт, кликнуть по итему и отжать альт... а он каждый раз меняет раскладку... а после НВ где игра глючить сразу начинала при Ру раскладке теперь у меня параноя.

Автор: DarkMaster 19.6.2023, 17:50

попробуйте заменить
sendex @
на
sendex @{}

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