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

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


****

Apprentice
Сообщений: 277
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1245
Пользователь №: 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
Сообщений: 164
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 692
Пользователь №: 18.746
Возраст: 26



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


****

Apprentice
Сообщений: 277
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1245
Пользователь №: 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
Сообщений: 277
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1245
Пользователь №: 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
Сообщений: 164
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 692
Пользователь №: 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
Сообщений: 277
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1245
Пользователь №: 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
Сообщений: 164
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 692
Пользователь №: 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Отправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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