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

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

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

Автор: TRUB 17.10.2017, 21:31

Доброго времени суток. Есть метод позволяющий брать данные из других веток скрипта:
#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)" Понимаю что есть где-то подвог, а где найти не могу.

Автор: DarkMaster 17.10.2017, 23:11

В первой же строке:

Цитата
if %b1c1.1 [1]

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

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

Автор: cirus 18.10.2017, 2:11

Цитата
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

Автор: DarkMaster 18.10.2017, 12:02

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

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

Автор: TRUB 18.10.2017, 14:56

DarkMaster

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

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

Может я вас не правильно понимаю. Но там нет сравнения там только правда\ложь.
cirus
Код
set delimiter ' ' 
я так понял надо использовать там где скрипт обработки ?
А не там где объявление , если данные и обработка этих данных находятся в разных местах.
Цитата
Вместо if else можно использовать if_not.
-вы правы . Вечером все переделаю и проверю.

Автор: cirus 18.10.2017, 15:00

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

Да.

Автор: TRUB 21.10.2017, 17:34

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

Код

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

не хочет вводить любые символы, окно клиента все равно что не активное.Где тут подводные камни?

Автор: cirus 21.10.2017, 19:39

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


Автор: TRUB 21.10.2017, 19:59

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

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


Автор: cirus 21.10.2017, 20:23

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

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

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

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

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

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




Автор: TRUB 21.10.2017, 20:39

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

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

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

Буфер по вводу логина пароля не работает. Парадокс в чем . Команда "sendex " не вводит ни каких данных , а в комбинации "sendex ^v " -ввела "v

Автор: cirus 21.10.2017, 20:51

Цитата
Команда "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

Разные приложения по-разному воспринимают нажатия.

Автор: TRUB 21.10.2017, 21:10

танцы з буфером ни к чему не приводят. Думаю и нет смысла это делать. буфер просто руками тоже не работает если хочу вставить логин и пароль, значит дело не пилоте .
Остаеться вопрос , как ввести тогда большие символы? использовать Caps Lock. может и решит половину проблемы, но как тогда ввести "@" в строке логина?

Автор: cirus 21.10.2017, 21:28

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

Код
send @
// или
set $a @
send $a

Автор: TRUB 21.10.2017, 21:34

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

не прокатывает. send $a подразумивает использование буфера. а может можна както через кода клавиш?
а как нажать Caps Lock ?

Автор: cirus 21.10.2017, 21:50

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

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

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

Без понятия. Ручками.

Автор: TRUB 21.10.2017, 22:04

4Story_RU -игра =)
Я то понял что ручками , а какая команда отвечает за нажатие , для Shift - ~ ...
адля Caps Lock не нахожу как использовать.

Автор: DarkMaster 21.10.2017, 22:33

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

Автор: TRUB 21.10.2017, 23:16

определил что комда " Sendex " в этом клиенте отказывается работать.
Не реагирует также на {CapsLock}, записывать данный из буфера обмена тоже отказывается.
Команды Say, присвоение строчной переменной $, тоже не дали результатов.
Уже больше 10 часов долбусь с этой проблемой подряд. Может у кого были похожие проблемы, не откажусь от вашего метода решения, или может светлых мыслей в эту сторону.
Возвращаюсь к вводу пароля с помощью макросов. Как их запускать правильно и редактировать сам файл макроса чтоб ошибки не выкидывало?

Автор: cirus 21.10.2017, 23:50

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

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

А там случаем нету gameguard?
Ещё есть вариант использовать экранную клавиатуру.

Автор: TRUB 22.10.2017, 0:22

Для меня как не очень сильного кодера=) мягко говоря этого описание скрипта мало. я не понял что надо сделать.
А как определить есть ли GameGuard ? по всем признакам вроде как его робота, полистал форум у многих были проблемы с вводом " Shift , alt .." и есть ли решения как с ним бороться?

Автор: DarkMaster 22.10.2017, 14:04

Цитата
Команды Say, присвоение строчной переменной $, тоже не дали результатов.

А именно? Say не посылает нажатия, а посылает коды символов. Т.е. там понятие шифта вообще не существует - пошел и большие и какие угодно.

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