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

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

UoKit.com Форумы _ UO Pilot _ Ошибка Error while creating lua virtual machine

Автор: Yassia 11.10.2017, 10:23

Ошибка при старте скрипта выскакивает сообщением. Как можно решить проблему создания этой VM?

Автор: Yassia 11.10.2017, 10:40

Вроде, проблема решена. Стояла 2.39 night версия, скачал просто 2.39 - проблема исчезла сама собой.

Автор: DarkMaster 11.10.2017, 12:38

Цитата
Ошибка при старте скрипта выскакивает сообщением. Как можно решить проблему создания этой VM?

Дллку ему луа нужно - лежит рядом на сайте.

Автор: lICH 13.11.2017, 18:31

Цитата(DarkMaster @ 11.10.2017, 13:38) *

Дллку ему луа нужно - лежит рядом на сайте.

файл Луа.длл ? а куда его закинуть? у меня такая же ошибка на версии 2.40.

Автор: DarkMaster 13.11.2017, 21:12

рядом с exe пилота

Автор: cirus 14.11.2017, 2:00

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

Автор: WKnight 14.11.2017, 14:07

fixed

Автор: Warstone 6.6.2018, 15:15

Не фиксед. Переодически появляется минуты через 3 работы скрипта.
v2.40d b010

Автор: DarkMaster 6.6.2018, 20:06

Цитата
Не фиксед. Переодически появляется минуты через 3 работы скрипта.
v2.40d b010

Нестабильную ночную сборку качал?
Код скрипта? У меня есть скрипт который работает 24/7, подобного поведения не замечено.

Автор: Warstone 7.6.2018, 11:15

На стабильной не работало что-то... Кажется кнопки или он тупо выбивал ошибку не помню.

Исходный код
set linedelay 0
showwindow workwindow

set %coords [1 1] 819
set %coords [1 2] 1233
set %coords [2 1] 963
set %coords [2 2] 1275
set %coords [3 1] 1387
set %coords [3 2] 1279

while 1 = 1
call is_waiting_input %coords
if $is_waiting_input = 1
call loop_once
if $loop_once = 1
wait 250
else
wait 400
end_if
end_if
end_while

proc loop_once
set $result 1
call is_waiting_1_w
if $is_waiting_1_w = 0
call is_waiting_2_q
if $is_waiting_2_q = 0
call is_waiting_3_d
if $is_waiting_3_d = 0
call is_waiting_4_a
if $is_waiting_4_a = 0
call is_waiting_5_s
if $is_waiting_5_s = 0
call is_waiting_6_x
if $is_waiting_6_x = 0
call is_waiting_7_z
if $is_waiting_7_z = 0
call is_waiting_8_e
if $is_waiting_8_e = 0
call is_waiting_9_c
if $is_waiting_9_c = 9
set $result 0
end_if
end_if
end_if
end_if
end_if
end_if
end_if
end_if
end_if
end_proc

proc is_waiting_input %coords

set $result 1
set #i 1
while #i < 2
set #x %coords [#i 1]
set #y %coords [#i 2]

if_not #x, #y 16777215
set $result 0
break
end_if

set #i #i + 1
end_while
end_proc

proc is_waiting_1_w
if 2007, 1201 16777215
set $result 1
send217_down w
wait 150
send217_up w
else
set $result 0
end_if
end_proc

proc is_waiting_2_q
if 1980, 1234 16777215
set $result 1
send217_down q
wait 150
send217_up q
else
set $result 0
end_if
end_proc

proc is_waiting_3_d
if 1965, 1219 16777215
set $result 1
send217_down d
wait 150
send217_up d
else
set $result 0
end_if
end_proc

proc is_waiting_4_a
if 1977, 1300 16777215
set $result 1
send217_down a
wait 150
send217_up a
else
set $result 0
end_if
end_proc

proc is_waiting_5_s
if 1950, 1254 16777215
set $result 1
send217_down s
wait 150
send217_up s
else
set $result 0
end_if
end_proc

proc is_waiting_6_x
if 1926, 1260 16777215
set $result 1
send217_down x
wait 150
send217_up x
else
set $result 0
end_if
end_proc

proc is_waiting_7_z
if 1923, 1209 16777215
set $result 1
send217_down z
wait 150
send217_up z
else
set $result 0
end_if
end_proc

proc is_waiting_8_e
if 1915, 1236 16777215
set $result 1
send217_down e
wait 150
send217_up e
else
set $result 0
end_if
end_proc

proc is_waiting_9_c
if 1911, 1179 16777215
set $result 1
send217_down c
wait 150
send217_up c
else
set $result 0
end_if
end_proc


И да, еще одна проблема - пришлось отказаться от пилота и написать на Шарпах.

Это код для рыбалки для АРКи под мое разрешение. Рыбу 2.1 он еле вытягивает. В зависимости от тех клавиш, которые надо нажимать. Если попадаются последние, то - жопа. Написал свой из 21 секунды которая дается - осталось 10. То есть с режимом linedelay 0 - пилот нереально медленный. Слежение отпускал.

Автор: DarkMaster 7.6.2018, 15:42

Тут просто нечему работать 21 секунду кроме непосредственных вэйтов. На чем время убивалось? linedelay через set прописывал? Логгирование было выключено?

Есть некоторые вопросы по поводу if x y color, т.к. он ждет синхронизации кадра и при низком фпс это может негативно сказываться на производительности. Чтобы этого избежать можно использовать findcolor.

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

Автор: Warstone 8.6.2018, 14:12

Цитата(DarkMaster @ 7.6.2018, 15:42) *

Тут просто нечему работать 21 секунду кроме непосредственных вэйтов. На чем время убивалось? linedelay через set прописывал? Логгирование было выключено?
Первая строчка-же.
Цитата(DarkMaster @ 7.6.2018, 15:42) *

Есть некоторые вопросы по поводу if x y color, т.к. он ждет синхронизации кадра и при низком фпс это может негативно сказываться на производительности. Чтобы этого избежать можно использовать findcolor.
Там есть лесенка из if'ов (OCR на коленке) вот она работает долго. То есть визуально видно что первая буква отрабатывает сильно быстрее. В своей проге я на этапе поиска надписи делаю постоянно скриншоты, а потом уже расшифровку надписи делаю на снятом изображении.
Цитата(DarkMaster @ 7.6.2018, 15:42) *

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

PS как быстро вытаскивать изображение? У меня пока такой код (самый медленный, как я понял):
Код
        private static void GetImage(IntPtr hwnd) {
            Graphics memoryGraphics = Graphics.FromImage(bmp);
            IntPtr dc = memoryGraphics.GetHdc();
            PrintWindow(hwnd, dc, 0);
            memoryGraphics.ReleaseHdc(dc);
        }
bmp - глобальная битмапа один раз созданная.

Автор: Cockney 8.6.2018, 14:26

GetDIBBits(). В шарпах это по другому именуется.

Это если снимается окно "сверху", забыл добавить. PrintWindow() если перекрыто.

Автор: Warstone 8.6.2018, 17:21

Ага... А какие еще варианты есть нажатия клавиш, кроме посылки сообщений в окно и keybd_event'а? А то хочется чтобы нажатия можно было делать на неактивном окне, но с последним это не прокатывает по понятной причине.

Автор: Cockney 8.6.2018, 18:42

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

Автор: REGEDIT 24.8.2018, 11:34

скачал dll закинул в папку с пилотом все равно ошибка выскакивает

Автор: DarkMaster 24.8.2018, 12:04

Версия какая? Последний релиз? Скачайте последнюю стабильную ночную.

Автор: REGEDIT 24.8.2018, 13:52

да скачал не ту версию спс помогло

Автор: T15K6 21.12.2018, 14:28

Цитата(DarkMaster @ 24.8.2018, 13:04) *

Версия какая? Последний релиз? Скачайте последнюю стабильную ночную.


у миня такая ошибка била потом бросил uopilot.exe в scripts папку вместе с lua5.1.dll но шас нету ошибки но ничего не делаит в игре

Автор: cirus 21.12.2018, 15:10

Цитата
но ничего не делаит в игре

Может защита у игры есть, типа фроста.
Проверьте в блокноте или браузере.

Автор: T15K6 21.12.2018, 17:56

Цитата(cirus @ 21.12.2018, 16:10) *

Может защита у игры есть, типа фроста.
Проверьте в блокноте или браузере.

вблокноте работает а никак не обоити зашиту?

Автор: cirus 21.12.2018, 18:19

Цитата
а никак не обоити зашиту?

Я таким не занимался.

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