UoKit.com Форумы > Кликер > UO Pilot
Страницы: 1, 2
FREEON
Как скриптом создать имя плавающей переменной и затем вывести ее в лог?
Код

for #i 1 5
    set #a(#i) #i
    log #a(#i)
end_for
log #a(4) //вывести содержание переменной из середины
end_script

и при выдаче в лог нужную переменную нам не выдает. лог:
Цитата
1(1)
2(2)
3(3)
4(4)
5(5)
5(4)

с массивом же норм работает и можно обратиться к нужному имени
Код

for #i 1 5
    init_arr %a(#i) #i
    log %a(#i) [1]
end_for
log %a(4) [1]
end_script

лог:
Цитата
1
2
3
4
5
4

но при попытке представить массив в качестве переменной set #a(#i) %a(#i)[1] не получается и обратиться к ней тоже не выходит
Вверх
Fors1k
Что понимается под плавающей переменной?
Какая именно задача?
Что должны увидеть в логе?
Что значит представить массив в качестве переменной? "set #a(#i) %a(#i)[1]" В этой записи %a(#i)[1] - это уже и есть переменная (ячейка массива итой строки, первого столбца).
Вверх
FREEON
Цитата(Fors1k @ 30.8.2019, 1:57)

Что понимается под плавающей переменной?
Какая именно задача?
Что должны увидеть в логе?
Что значит представить массив в качестве переменной? "set #a(#i) %a(#i)[1]" В этой записи %a(#i)[1] - это уже и есть переменная (ячейка массива итой строки, первого столбца).

По сути это генерация кода для пилота самим же пилотом. Например сделали поиск объектов и нам выдало несколько результатов дабы не писать объект1 имеет такие-то параметры объект2 имеет такие параметры объект3 имеет такие параметры, мы скриптом по размеру результа поиска присваиваем имена a1 a2 a3 самим пилотом и запоминаем данные.
Пример поиска объектов выдачи им имен и запоминания позиции и затем фильтр по нужным параметрам и затем действие в лучшей для нас позиции
Код

log clear
log mode compact
set #poisk findimage (1023, 34 1077, 50 (D:\_UOPilot\newimage\astro.bmp) %arr 2 80 -1) //поиск
for #i 1 size(%arr)
if  #poisk > 0
    set #sx (%arr[#i 1] - 5)      //координаты для анализа объекта
    set #sy (%arr[#i 2] + 10)
    set #ex (%arr[#i 1] + 12)
    set #ey (%arr[#i 2] + 25)
    //--где будет действие
    set #x %arr[#i 1] + 0
    set #y %arr[#i 2] + 0
    log #x #y
    init_arr %x(#i) #x [1]  //присваеваем уникальное имя и задаем коорд.
    init_arr %y(#i) #y [1]
    //log массив %x(#i)[1] %y(#i)[1]
    //log #sx #sy #ex #ey
    //move  #sx #sy   //обл поиска
    //wait 100
    //move #ex #ey    //конец обл поиска
    set $path "D:\_UOPilot\newimage\ras\"  //картинки для выбора лучшего варианта
    set delimiter ' '
    dir (%image $path *.bmp*)             //поиск картинок в папке и загрузка их в массив
    //log В папке найдено: size(%image) картинок
    for #j 1 size(%image)
        set #v findimage(#sx #sy #ex #ey (%image [#j 1]) %a) //поиск лучшего объекта
        //log поиск в #sx #sy #ex #ey
        if  #v > 0
            //log Найдена картинка %image [#j 3]
            init_arr %b(#i) %image [#j 3] //присвоим параметру отсева уникальное имя
            log %b(#i) [1]
            break
        else
            //log нет цифр
        end_if
    end_for
end_if
end_for
set delimiter
//log %b(1)[1]%b(2)[1]%b(3)[1]
set $p %b(1)[1]%b(2)[1]%b(3)[1]
set $m minx(minx(%b))        //отсев нужного значения
log $m
set #n posex($m $p)                //позиция значения в масиве
log поз #n
for #i 1 size(%arr)         //действие
if #i = #n                  //когда позиция и значение совпадают выполнить действие
    log #i = #n
    move %x(#i)[1] %y(#i)[1]  //действие в лучшей точке в нужном месте
end_if
end_for
end_script

Вверх
FREEON
Даже ещё можно сократить
Код
log поз #n
for #i 1 size(%arr)         //действие
if #i = #n                  //когда позиция и значение совпадают выполнить действие
    log #i = #n
    move %x(#i)[1] %y(#i)[1]  //действие в лучшей точке в нужном месте
end_if
end_for
end_script

На
Код
log поз #n
Set #i #n                  //когда позиция и значение совпадают выполнить действие
move %x(#i)[1] %y(#i)[1]  //действие в лучшей точке в нужном месте
end_script

Вверх
Fors1k
Цитата(FREEON @ 30.8.2019, 12:24)

По сути это генерация кода для пилота самим же пилотом. Например сделали поиск объектов и нам выдало несколько результатов дабы не писать объект1 имеет такие-то параметры объект2 имеет такие параметры объект3 имеет такие параметры, мы скриптом по размеру результа поиска присваиваем имена a1 a2 a3 самим пилотом и запоминаем данные.
Пример поиска объектов выдачи им имен и запоминания позиции и затем фильтр по нужным параметрам и затем действие в лучшей для нас позиции
code
Код

log clear
log mode compact
set #poisk findimage (1023, 34 1077, 50 (D:\_UOPilot\newimage\astro.bmp) %arr 2 80 -1) //поиск
for #i 1 size(%arr)
if  #poisk > 0
    set #sx (%arr[#i 1] - 5)      //координаты для анализа объекта
    set #sy (%arr[#i 2] + 10)
    set #ex (%arr[#i 1] + 12)
    set #ey (%arr[#i 2] + 25)
    //--где будет действие
    set #x %arr[#i 1] + 0
    set #y %arr[#i 2] + 0
    log #x #y
    init_arr %x(#i) #x [1]  //присваеваем уникальное имя и задаем коорд.
    init_arr %y(#i) #y [1]
    //log массив %x(#i)[1] %y(#i)[1]
    //log #sx #sy #ex #ey
    //move  #sx #sy   //обл поиска
    //wait 100
    //move #ex #ey    //конец обл поиска
    set $path "D:\_UOPilot\newimage\ras\"  //картинки для выбора лучшего варианта
    set delimiter ' '
    dir (%image $path *.bmp*)             //поиск картинок в папке и загрузка их в массив
    //log В папке найдено: size(%image) картинок
    for #j 1 size(%image)
        set #v findimage(#sx #sy #ex #ey (%image [#j 1]) %a) //поиск лучшего объекта
        //log поиск в #sx #sy #ex #ey
        if  #v > 0
            //log Найдена картинка %image [#j 3]
            init_arr %b(#i) %image [#j 3] //присвоим параметру отсева уникальное имя
            log %b(#i) [1]
            break
        else
            //log нет цифр
        end_if
    end_for
end_if
end_for
set delimiter
//log %b(1)[1]%b(2)[1]%b(3)[1]
set $p %b(1)[1]%b(2)[1]%b(3)[1]
set $m minx(minx(%b))        //отсев нужного значения
log $m
set #n posex($m $p)                //позиция значения в масиве
log поз #n
for #i 1 size(%arr)         //действие
if #i = #n                  //когда позиция и значение совпадают выполнить действие
    log #i = #n
    move %x(#i)[1] %y(#i)[1]  //действие в лучшей точке в нужном месте
end_if
end_for
end_script


А где сам вопрос?)
В скрипте есть лишние строки. Нужно просто сократить?
Цитата(FREEON @ 30.8.2019, 12:24)
По сути это генерация кода для пилота самим же пилотом.

В каких строках здесь идет генерация кода самим пилотом?
Цитата(FREEON @ 30.8.2019, 12:24)
присваиваем имена a1 a2 a3

Где в коде были присвоены имена a1 a2 a3 ?
Вверх
FREEON
Цитата(Fors1k @ 30.8.2019, 16:00)

А где сам вопрос?)
В скрипте есть лишние строки. Нужно просто сократить?

Вопрос в том что бы как задать именно через set а не примочками init_arr
Цитата
В каких строках здесь идет генерация кода самим пилотом? Где в коде были присвоены имена a1 a2 a3 ?
пилотом прописываем точки x1 x2 x3 y1 y2 y3 и точку для выбора приоритета. Если делать именно без #i то они перезапишут старую и в конце будет результат последней, если с помощью её то тогда переменные(массивы) хранятся

init_arr %x(#i) #x [1] //присваеваем уникальное имя и задаем коорд.
init_arr %y(#i) #y [1]
//
init_arr %b(#i) %image [#j 3]
Вверх
Fors1k
Убрал лишние строки, задал переменные через set, а не примочками init_arr, как и просил.
code
Код
log clear
log mode compact
while #poisk < 0 or #poisk = 0
    set #poisk findimage (1023, 34 1077, 50 (D:\_UOPilot\newimage\astro.bmp) %arr 2 80 -1) //поиск
end_while
for #i 1 size(%arr)
    //-- координаты для анализа объекта
    set #sx (%arr[#i 1] - 5)
    set #sy (%arr[#i 2] + 10)
    set #ex (%arr[#i 1] + 12)
    set #ey (%arr[#i 2] + 25)
    //-- где будет действие
    log x: %arr[#i 1] y: %arr[#i 2]
    //-- присваиваем уникальное имя и задаем коорд.
    set %x[#i] %arr[#i 1]
    set %y[#i] %arr[#i 2]
    //log #sx #sy #ex #ey
    //move  #sx #sy   //обл поиска
    //wait 100
    //move #ex #ey    //конец обл поиска
    set $path "D:\_UOPilot\newimage\ras\"  //картинки для выбора лучшего варианта
    set delimiter ' '
    dir (%image $path *.bmp*)             //поиск картинок в папке и загрузка их в массив
    //log В папке найдено: size(%image) картинок
    for #j 1 size(%image)
        set #v findimage(#sx #sy #ex #ey (%image [#j 1]) %a) //поиск лучшего объекта
        //log поиск в #sx #sy #ex #ey
        if  #v > 0
            //log Найдена картинка %image [#j 3]
            set %b[#i] %image [#j 3] //присвоим параметру отсева уникальное имя
            log %b[#i]
            break
        end_if
        //log нет цифр
    end_for
end_for
set delimiter ''
//log %b[1]%b[2]%b[3]
set $p %b[1]%b[2]%b[3]
set $m minx(minx(%b))        //отсев нужного значения
log $m
set #n posex($m $p)                //позиция значения в массиве
log поз #n
move %x[#n] %y[#n]      //действие в лучшей точке в нужном месте
end_script

Вверх
FREEON
Плавающее имя SaveImage
Код

set #j 0 //счетчик для имени картинки
while 1 = 1
    if  55, 82 6738175                               //условие когда нам необходимо сохранить часть экрана(сделать скриншот)
        set #j #j +1                                    //начало отсчета цикла и имени картинки
        for #i #j 999
            init_arr %name(#i) #i                       //задаем имя
            set %a GetImage  (700, 40  1365, 766)       // сохранить в памяти часть экранной области
            set $jpg SaveImage (%a [1 1] D:\123\%name(#i) [1].jpg) // сохранить в файл на диск C:\
            set $b DeleteImage  (%a [1 1])              // удалить из памяти часть экранной области
            break                                       //прерываем цикл что бы не считать в холостую
        end_for
    end_if
end_while
End_script

Какие есть еще варианты?
Вверх
Fors1k
Картинки должны сохраняться на D:\ с именами 1.jpg , 2.jpg , и т.д. , верно?

Код
for #i 1 9999
    while_not 55, 82 6738175                         //условие когда нам необходимо сохранить часть экрана(сделать скриншот)
    end_while
    set %name[1] #i                                  //задаем имя
    set %a GetImage  (700, 40  1365, 766)            // сохранить в памяти часть экранной области
    set $jpg SaveImage (%a[1 1] D:\123\%name[1].jpg) // сохранить в файл на диск D:\
end_for

Вверх
FREEON
Цитата(Fors1k @ 9.10.2019, 15:14)

Картинки должны сохраняться на D:\ с именами 1.jpg , 2.jpg , и т.д. , верно?

Ну да важен принцип создания нового файла без перезаписи старого. Можно 1, 2, 3...или же имя по системному времени
Вверх
Invision Power Board © 2001-2024 Invision Power Services, Inc.
Version for Pocket PC © 2006-2024, IPBest Studio.