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

 
Ответить в эту темуОткрыть новую тему
> Оптимизация скрипта
crax
сообщение 26.9.2017, 20:27
Сообщение #1


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



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

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

Код

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



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





Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 26.9.2017, 23:25
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



вообще можно сделать массив, а в варианте с луа можно даже "именно так", т.к. там в этот же массив можно запихать что угодно и даже функцию, которая вернет это "условие". Тут очень большой вопрос кстати что содержится в #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

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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
crax
сообщение 27.9.2017, 2:05
Сообщение #3


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



Спасибо, огромное!
Предполагал что это можно сделать при помощи массивов.
Не очень ими владею, буду читать справку:-)
#uslovie да, просто число в данном случае. Я упростил весь блок,
чтобы осталось самому голову поломать:-)
Ещё раз спасибо!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.9.2017, 2:31
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Код
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


Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
crax
сообщение 27.9.2017, 2:36
Сообщение #5


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



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

Теперь обобщу полученную информацию и попытаюсь применить в своем скрипте:-)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
crax
сообщение 15.10.2017, 8:45
Сообщение #6


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



спасибо еще раз! вроде начинаю разбираться с массивами )
подскажите а можно похожее провернуть с 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


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


Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 15.10.2017, 10:57
Сообщение #7


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Можно, но 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
crax
сообщение 15.10.2017, 11:23
Сообщение #8


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



Спасибо огромное!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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