Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Создаем плавающую переменную set: #A1 #A2 ... #A(#i)
FREEON
сообщение 30.8.2019, 0:33
Сообщение #1


****

Apprentice
Сообщений: 295
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1477
Пользователь №: 18.346
Возраст: 25



Как скриптом создать имя плавающей переменной и затем вывести ее в лог?
Код

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] не получается и обратиться к ней тоже не выходит
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 30.8.2019, 1:57
Сообщение #2


****

Apprentice
Сообщений: 207
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 988
Пользователь №: 18.746
Возраст: 26



Что понимается под плавающей переменной?
Какая именно задача?
Что должны увидеть в логе?
Что значит представить массив в качестве переменной? "set #a(#i) %a(#i)[1]" В этой записи %a(#i)[1] - это уже и есть переменная (ячейка массива итой строки, первого столбца).
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 30.8.2019, 12:24
Сообщение #3


****

Apprentice
Сообщений: 295
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1477
Пользователь №: 18.346
Возраст: 25



Цитата(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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 30.8.2019, 13:03
Сообщение #4


****

Apprentice
Сообщений: 295
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1477
Пользователь №: 18.346
Возраст: 25



Даже ещё можно сократить
Код
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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 30.8.2019, 16:00
Сообщение #5


****

Apprentice
Сообщений: 207
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 988
Пользователь №: 18.746
Возраст: 26



Цитата(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 ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 30.8.2019, 17:04
Сообщение #6


****

Apprentice
Сообщений: 295
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1477
Пользователь №: 18.346
Возраст: 25



Цитата(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]
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 31.8.2019, 17:58
Сообщение #7


****

Apprentice
Сообщений: 207
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 988
Пользователь №: 18.746
Возраст: 26



Убрал лишние строки, задал переменные через 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 9.10.2019, 14:46
Сообщение #8


****

Apprentice
Сообщений: 295
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1477
Пользователь №: 18.346
Возраст: 25



Плавающее имя 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

Какие есть еще варианты?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 9.10.2019, 15:14
Сообщение #9


****

Apprentice
Сообщений: 207
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 988
Пользователь №: 18.746
Возраст: 26



Картинки должны сохраняться на 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 9.10.2019, 16:58
Сообщение #10


****

Apprentice
Сообщений: 295
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1477
Пользователь №: 18.346
Возраст: 25



Цитата(Fors1k @ 9.10.2019, 15:14) *

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

Ну да важен принцип создания нового файла без перезаписи старого. Можно 1, 2, 3...или же имя по системному времени
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 9.10.2019, 21:32
Сообщение #11


****

Apprentice
Сообщений: 295
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1477
Пользователь №: 18.346
Возраст: 25



попробовал прикрутить дату и время к имени но гдето подводные камни...
Код

while 1 = 1
    if  697, 152 10213092                                 //условие когда нам необходимо сохранить часть экрана(сделать скриншот)
        set $b DateNow TimeNow  //дата время
        //log $b
        init_arr %b $b       // перевести в %
        log %b[1] %b[2]                       // вывести в дату и время
        set %a GetImage  (582, 208 590, 220 )       // сохранить в памяти часть экранной области
        set $jpg SaveImage (%a [1 1] D:\123\(%b[1] %b[2]).jpg) // сохранить в файл на диск C:\
        set $b DeleteImage  (%a [1 1])              // удалить из памяти часть экранной области
    end_if
end_while
End_script

если же сделать просто дату %b[1] то работает но праблема в том что перезаписывает
Код

while 1 = 1
    if  697, 152 10213092                                 //условие когда нам необходимо сохранить часть экрана(сделать скриншот)
        set $b DateNow TimeNow  //дата время
        //log $b
        init_arr %b $b       // перевести в %
        log %b[1] %b[2]                       // вывести в дату и время
        set %a GetImage  (582, 208 590, 220 )       // сохранить в памяти часть экранной области
        set $jpg SaveImage (%a [1 1] D:\123\%b[1].jpg) // сохранить в файл на диск C:\
        set $b DeleteImage  (%a [1 1])              // удалить из памяти часть экранной области
    end_if
end_while
End_script

с %b[2] не работает так как в имя пишет двоеточие(21:30:40). Как можно обойти двоеточие или заменить его например на 21-30-40
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 9.10.2019, 21:59
Сообщение #12


****

Apprentice
Сообщений: 295
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1477
Пользователь №: 18.346
Возраст: 25



обошол кастылями
Код

while 1 = 1
    if  295, 63 16777215                                   //условие когда нам необходимо сохранить часть экрана(сделать скриншот)
        set $b DateNow TimeNow  //дата время
        //log $b
        set $i ":" // что ищем
        set $c "-" // чем заменяем
        set $s string_replace ($b $i $c all)
        log $s
        init_arr %b $s       // перевести в %
        log %b[1] %b[2]                       // вывести в дату и время
        set %a GetImage  (582, 208 590, 220 )       // сохранить в памяти часть экранной области
        set $jpg SaveImage (%a [1 1] D:\123\%b[1] %b[2].jpg) // сохранить в файл на дискс именем (дата-время)
        set $b DeleteImage  (%a [1 1])              // удалить из памяти часть экранной области
    end_if
end_while
End_script

оказывается можно сделать проще:
Код

while 1 = 1
    if  295, 63 16777215                                   //условие когда нам необходимо сохранить часть экрана(сделать скриншот)
        init_arr %b (1) day . month . year _ hour . min . sec
        log %b[1]                       // вывести в дату и время
        set %a GetImage  (582, 208 590, 220 )       // сохранить в памяти часть экранной области
        set $jpg SaveImage (%a [1 1] D:\123\%b[1].jpg) // сохранить в файл на диск C:\
        set $b DeleteImage  (%a [1 1])              // удалить из памяти часть экранной области
    end_if
end_while
End_script



Сообщение отредактировал FREEON - 9.10.2019, 22:48
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 12.11.2019, 13:59
Designed by Nickostyle