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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Оптимизация скрипта с большим кодом., Оптимизация.
TRUB
сообщение 17.10.2017, 21:31
Сообщение #1


**

Neophyte
Сообщений: 10
Регистрация: 16.10.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.646
Возраст: 30



Доброго времени суток. Есть метод позволяющий брать данные из других веток скрипта:
#i.2 - обращаемся к переменной #i из скрипта, находящегося в окне номер 2, при этом скрипт 2 должен работать или быть на паузе.
$i.5 - обращаемся к строковой переменной из 5 скрипта.
%arr.5 [1 3] - обращаемся к элементу массива из 5 скрипта.
когда делаю ссылку на масив:


1------- Это 1 скрипт где записываются данные вручную.
Код

set $e 742, 523                      //точка подтверждения  перемещения
init_arr %fc1 (1) 690, 335 1783605   // координаты и цвет в одну строку для проверки на пустоту
set delimiter ' '                    // установить разделитель между элементами 'пробел


//--------------Даные 1 сумка 1 ячеек -----------------
init_arr %b1c1 (1) 500, 245 725008    // координаты и цвет в одну строку для проверки на пустоту
set delimiter ' '                    // установить разделитель между элементами 'пробел'

2-------Это 2 скрипт где происходят все действия
Код

if %b1c1.1 [1]                               //Проверяем ячейку на пустоту [1]- значит пустая
else                                   //если нет то выполняеться действия
    move %b1c1.1 [1 1] %b1c1.1 [1 2]       //переносим курсор  на искомую ячейку
    wait 300                           //ждем  300 мс
    left_down %b1c1.1 [1 1] %b1c1.1 [1 2]  //зажимаем левую клавишу
    move %fc [1 1] %fc [1 2]         //Перетаскиваем предмет в хранилеще
    wait 300                           //ждем  300 мс
    left_up %fc1.1 [1 1] %fc1.1 [1 2]      //отпускаем  левую клавишу
    left $e.1                            //закрываем окно подтвеждения
end_if
if  %f1c.1 [1]                 //проверка  на  наличие окна  подтверждения
    left $e.1              //нажимаем в указаной точке   чтоб закрыть окно
else
end_if


----------------------------------------------------------------------------------------------
Когда запускаю ругаеться на "Syntax error (Exp1)" Понимаю что есть где-то подвог, а где найти не могу.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 17.10.2017, 23:11
Сообщение #2


***********

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



В первой же строке:
Цитата
if %b1c1.1 [1]

Сравнение то где? В пилоте так не прокатывает.
Цитата
if %f1c.1 [1]

Аналогично.
Какое-нибудь:
if %b1c1.1 [1] != ""
используйте


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


**********

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



Цитата
if %b1c1.1 [1]
Сравнение то где?

Вообще-то это проверка на цвет.
Цитата
2-------Это 2 скрипт где происходят все действия

Вначале скрипта добавить:
Код
set delimiter ' ' 

Разделитель устанавливается для каждой вкладки отдельно. Кстати, в первом скрипте он не нужен.
Или не использовать его вообще, тогда значения указывать отдельно:
Код
if %b1c1.1 [1 1] %b1c1.1 [1 2] %b1c1.1 [1 3]

Вместо if else можно использовать if_not.
Код
set delimiter ' '
if_not %b1c1.1 [1]                          //Проверяем ячейку на пустоту [1]- значит пустая
    move %b1c1.1 [1 1] %b1c1.1 [1 2]       //переносим курсор  на искомую ячейку
    wait 300                           //ждем  300 мс
    left_down %b1c1.1 [1 1] %b1c1.1 [1 2]  //зажимаем левую клавишу
    move %fc [1 1] %fc [1 2]         //Перетаскиваем предмет в хранилеще
    wait 300                           //ждем  300 мс
    left_up %fc1.1 [1 1] %fc1.1 [1 2]      //отпускаем  левую клавишу
    left $e.1                            //закрываем окно подтвеждения
end_if
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 18.10.2017, 12:02
Сообщение #4


***********

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



Цитата
Вообще-то это проверка на цвет.

Судя по комментам, там предполагается появление пустоты. Т.е. в любом случае это краш.


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


**

Neophyte
Сообщений: 10
Регистрация: 16.10.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.646
Возраст: 30



DarkMaster
Цитата
Судя по комментам, там предполагается появление пустоты. Т.е. в любом случае это краш.

Пустатой я предполагаю что там будет определенный цвет , который я заведомо знаю.
Код
init_arr %fc1 (1) 690, 335 1783605   // координаты и цвет в одну строку для проверки на пустоту

Может я вас не правильно понимаю. Но там нет сравнения там только правда\ложь.
cirus
Код
set delimiter ' ' 
я так понял надо использовать там где скрипт обработки ?
А не там где объявление , если данные и обработка этих данных находятся в разных местах.
Цитата
Вместо if else можно использовать if_not.
-вы правы . Вечером все переделаю и проверю.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 18.10.2017, 15:00
Сообщение #6


**********

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



Цитата
set delimiter ' '
я так понял надо использовать там где скрипт обработки ?

Да.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
TRUB
сообщение 21.10.2017, 17:34
Сообщение #7


**

Neophyte
Сообщений: 10
Регистрация: 16.10.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.646
Возраст: 30



Все что выше советовали, переделал работает. Появилась новое препятствие.
Когда делаю релог в окне игры
Код

set delimiter ' '
set $var setlayout (0409)          // включили английскую раскладку
//set workwindow 197538 // сделать рабочим окно c указанным хендлом
move %h3.1 [1 1] %h3.1 [1 2]
left %h3.1 [1 1] %h3.1 [1 2]    // выбераем  строку ввода пароля
wait 2s
set SendExDelay 100              // задержка между вводами букв
sendex ~xxxxxxxx                // ввод пароля
//send 1                        // проверрка на ввод  любой клавиши
wait 2s
end_script

не хочет вводить любые символы, окно клиента все равно что не активное.Где тут подводные камни?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.10.2017, 19:39
Сообщение #8


**********

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



А курсор ставит в строку ввода пароля? Кстати, без move тоже должно работать.
sendex работает только для активного окна, т. е. рабочее окно должно быть не переднем плане.
Или используйте send или send217, они работают для неактивного окна.

Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
TRUB
сообщение 21.10.2017, 19:59
Сообщение #9


**

Neophyte
Сообщений: 10
Регистрация: 16.10.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.646
Возраст: 30



использовал "kleft "
оно и активизирует окно и становиться в нужное поле.
Начались проблемы с вводом, Sendex не работает
а Send водит только маленький регистр.
send_down ~ // зажатие "Shift" не срабатывает

Питался записать макрос ввода пароля, удаляю лишние движений мышкой , запускаю , и системе вылетает с синим экраном... =) первый раз было чуть с стула не упал.
Мимо ввода подскажите как правильно редактировать макрос чтоб таких казусов не было.

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


**********

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



Цитата
а Send водит только маленький регистр.

Что за приложение?
Цитата
Sendex не работает

А рабочее окно на переднем плане?
Цитата
send_down ~ // зажатие "Shift" не срабатывает

Зажать модификатор (Ctrl, Alt, Shift) можно только sendex или sendex_down/sendex_up.
Можно попробовать что-то вроде:
Код
sendex ~  // зажать шифт
send q      // нажать q, т. е. должно напечатать Q
sendex     // отпустить все модификаторы

Цитата
как правильно редактировать макрос чтоб таких казусов не было.

Проблема не в редактировании макроса, а их корявой реализации в пилоте. Для работы макросов требуется соблюдение ряда условий.
Лучше оставьте макросы как самый последний вариант.
Как вариант, вместо нажатий использовать буфер:
Код
set clipboard qweRTy     // копируем в буфер логин
wait 100
kleft 200 200     // выбираем  строку ввода пароля
wait 200
sendex ^v              //нажать Ctrl + V (вставить логин)
end_script



Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
TRUB
сообщение 21.10.2017, 20:39
Сообщение #11


**

Neophyte
Сообщений: 10
Регистрация: 16.10.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.646
Возраст: 30



Цитата
Что за приложение?
Клиент игры .

Цитата
А рабочее окно на переднем плане?

после команды kleft оно на переднем плане и курсор стоит строке куда вводить текст
Цитата
Как вариант, вместо нажатий использовать буфер:

Буфер по вводу логина пароля не работает. Парадокс в чем . Команда "sendex " не вводит ни каких данных , а в комбинации "sendex ^v " -ввела "v
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.10.2017, 20:51
Сообщение #12


**********

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



Цитата
Команда "sendex " не вводит ни каких данных , а в комбинации "sendex ^v " -ввела "v

Т. е. если sendex v, то ничего не введёт, а sendex ^v введёт?
Пробуйте разные варианты:
Код
sendex_down ^v    // зажать ctrl + V, работает только в активном окне
    // возможно потребуется wait
sendex_up ^v     // отпустить ctrl + V
end_script

Код
sendex ^
sendex v
sendex
end_script

Код
sendex ^
send v
sendex
end_script

Разные приложения по-разному воспринимают нажатия.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
TRUB
сообщение 21.10.2017, 21:10
Сообщение #13


**

Neophyte
Сообщений: 10
Регистрация: 16.10.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.646
Возраст: 30



танцы з буфером ни к чему не приводят. Думаю и нет смысла это делать. буфер просто руками тоже не работает если хочу вставить логин и пароль, значит дело не пилоте .
Остаеться вопрос , как ввести тогда большие символы? использовать Caps Lock. может и решит половину проблемы, но как тогда ввести "@" в строке логина?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.10.2017, 21:28
Сообщение #14


**********

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



Цитата
но как тогда ввести "@" в строке логина?

Код
send @
// или
set $a @
send $a
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
TRUB
сообщение 21.10.2017, 21:34
Сообщение #15


**

Neophyte
Сообщений: 10
Регистрация: 16.10.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.646
Возраст: 30



send @
// или
set $a @
send $a

не прокатывает. send $a подразумивает использование буфера. а может можна както через кода клавиш?
а как нажать Caps Lock ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.10.2017, 21:50
Сообщение #16


**********

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



Цитата
Клиент игры .

Что за игра?
Цитата
send $a подразумивает использование буфера.

Буфер вообще не причём, просто отправка нажатия в приложение.
Цитата
а как нажать Caps Lock ?

Без понятия. Ручками.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
TRUB
сообщение 21.10.2017, 22:04
Сообщение #17


**

Neophyte
Сообщений: 10
Регистрация: 16.10.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.646
Возраст: 30



4Story_RU -игра =)
Я то понял что ручками , а какая команда отвечает за нажатие , для Shift - ~ ...
адля Caps Lock не нахожу как использовать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 21.10.2017, 22:33
Сообщение #18


***********

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



попробуйте send217, а лучше say.


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


**

Neophyte
Сообщений: 10
Регистрация: 16.10.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.646
Возраст: 30



определил что комда " Sendex " в этом клиенте отказывается работать.
Не реагирует также на {CapsLock}, записывать данный из буфера обмена тоже отказывается.
Команды Say, присвоение строчной переменной $, тоже не дали результатов.
Уже больше 10 часов долбусь с этой проблемой подряд. Может у кого были похожие проблемы, не откажусь от вашего метода решения, или может светлых мыслей в эту сторону.
Возвращаюсь к вводу пароля с помощью макросов. Как их запускать правильно и редактировать сам файл макроса чтоб ошибки не выкидывало?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.10.2017, 23:50
Сообщение #20


**********

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



Цитата
Как их запускать правильно и редактировать сам файл макроса чтоб ошибки не выкидывало?

Я уже давал ссылку http://uopilot.tati.pro/index.php?title=Макросы
Цитата
4Story_RU

А там случаем нету gameguard?
Ещё есть вариант использовать экранную клавиатуру.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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