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

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

UoKit.com Форумы _ UO Pilot _ Оптимизация скрипта

Автор: crax 26.9.2017, 20:27

Всем добрый день!

у меня есть несколько переменных - пары координат х и у, которые нужно вводить по очереди.
скрипт выглядит схематично так:

Код

set #uslovie 1
set #x1 234
set #y1 699
set #x2 676
set #y2 099
set #x3 222
set #y3 222
:begin

if #uslovie  = 1
send #x1
send {tab}
send #y1
set #uslovie #uslovie + 1
end_if

if #uslovie = 2
send #x2
send {tab}
send #y2
set #uslovie #uslovie + 1
end_if

if #uslovie = 3
send #x3
send {tab}
send #y3
set #uslovie #uslovie + 1
end_if
goto begin


возможно ли как-то избежать постоянного ввода однотипного участка
Код

if #uslovie = 3
send #x3
send {tab}
send #y3
set #uslovie #uslovie + 1
end_if
goto begin


а написать только кусок
Код


if #uslovie = 3
send #x #uslovie  - порядковый номер х совпадает с условием
send {tab}
send #y #uslovie  - порядковый номер y совпадает с условием
set #uslovie #uslovie + 1
end_if
goto begin



понимаю что именно так нельзя поэтому и нуждаюсь в помощи
заранее благодарен :-)






Автор: DarkMaster 26.9.2017, 23:25

вообще можно сделать массив, а в варианте с луа можно даже "именно так", т.к. там в этот же массив можно запихать что угодно и даже функцию, которая вернет это "условие". Тут очень большой вопрос кстати что содержится в #uslovie. Если это просто некоторое число или строка, то вообще не вижу проблемы:
set arr[1 1] x1
set arr[1 2] y1
set arr[1 3] uslovie1
set arr[2 1] x2
set arr[2 2] y2
set arr[2 3] uslovie2
set arr[3 1] x3
set arr[3 2] y3
set arr[3 3] uslovie3


ну и получается универсальный блок:

Код
if arr[n 3] = 3
    send arr[n 1] arr[n 3] - порядковый номер х совпадает с условием
    send {tab}
    send arr[n 2] arr[n 3] - порядковый номер y совпадает с условием
    set #uslovie #uslovie + 1
end_if

Как-то так. Можно было бы что-то более конкретное, если понимать более четко задачу.

Автор: crax 27.9.2017, 2:05

Спасибо, огромное!
Предполагал что это можно сделать при помощи массивов.
Не очень ими владею, буду читать справку:-)
#uslovie да, просто число в данном случае. Я упростил весь блок,
чтобы осталось самому голову поломать:-)
Ещё раз спасибо!

Автор: cirus 27.9.2017, 2:31

Код
set arr[1 1] x1

Вот что бывает когда пишешь скрипты на двух языках. Не хватает %.
Код
set %arr[1 1] x1

Цитата
возможно ли как-то избежать постоянного ввода однотипного участка

Массивы и циклы. Для примера:
Код
init_arr %a (1) 234 699  // x1 y1
init_arr %a (2) 676 99   // x2 y3
init_arr %a (3) 222 222

for #i 1 size(%a)
    log %a [#i 1]
    log tab
    log %a [#i 2]
    log
end_for
end_script



Автор: crax 27.9.2017, 2:36

Спасибо, про % только хотел спросить:-)

Теперь обобщу полученную информацию и попытаюсь применить в своем скрипте:-)

Автор: crax 15.10.2017, 8:45

спасибо еще раз! вроде начинаю разбираться с массивами )
подскажите а можно похожее провернуть с findcolor?

есть несколько таких участков:

Код
set $a findcolor (177, 251   224, 285  1 1 331878 %arr 2)
if $a > 0  // Yes
left %arr [1 1], %arr [1 2]
wait 1000
end_if


меняется область поиска и цвет



Автор: cirus 15.10.2017, 10:57

Можно, но findcolor не понимает массивы, поэтому нужно присвоить значение массива числовой переменной и уже её использовать в findcolor.

код
Код
init_arr %a (1) 472, 106 672, 301 4464896       // область поиска и цвет
init_arr %a (2) 1517, 530 1753, 692 16633191    // область поиска и цвет
init_arr %a (3) 80, 91 232, 207 7919083         // область поиска и цвет

for #i 1 size (%a)
    set #startX %a [#i 1]  
    set #startY %a [#i 2]
    set #endX %a [#i 3]
    set #endY %a [#i 4]
    set #color %a [#i 5]
    set #a findcolor (#startX #startY #endX #endY  1 1 #color %arr)
    if  #a > 0
        left %arr [1 1], %arr [1 2]
        wait 1000
    end_if
end_for
end_script

Автор: crax 15.10.2017, 11:23

Спасибо огромное!

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