Помощь - Поиск - Пользователи - Календарь
Полная версия: Оптимизация скрипта с большим кодом.
UoKit.com Форумы > Кликер > UO Pilot
TRUB
Доброго времени суток. Есть метод позволяющий брать данные из других веток скрипта:
#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
В первой же строке:
Цитата
if %b1c1.1 [1]

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

Аналогично.
Какое-нибудь:
if %b1c1.1 [1] != ""
используйте
cirus
Цитата
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
Цитата
Вообще-то это проверка на цвет.

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

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

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

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

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

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

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

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



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

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

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

Буфер по вводу логина пароля не работает. Парадокс в чем . Команда "sendex " не вводит ни каких данных , а в комбинации "sendex ^v " -ввела "v
cirus
Цитата
Команда "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
танцы з буфером ни к чему не приводят. Думаю и нет смысла это делать. буфер просто руками тоже не работает если хочу вставить логин и пароль, значит дело не пилоте .
Остаеться вопрос , как ввести тогда большие символы? использовать Caps Lock. может и решит половину проблемы, но как тогда ввести "@" в строке логина?
cirus
Цитата
но как тогда ввести "@" в строке логина?

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

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

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

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

Без понятия. Ручками.
TRUB
4Story_RU -игра =)
Я то понял что ручками , а какая команда отвечает за нажатие , для Shift - ~ ...
адля Caps Lock не нахожу как использовать.
DarkMaster
попробуйте send217, а лучше say.
TRUB
определил что комда " Sendex " в этом клиенте отказывается работать.
Не реагирует также на {CapsLock}, записывать данный из буфера обмена тоже отказывается.
Команды Say, присвоение строчной переменной $, тоже не дали результатов.
Уже больше 10 часов долбусь с этой проблемой подряд. Может у кого были похожие проблемы, не откажусь от вашего метода решения, или может светлых мыслей в эту сторону.
Возвращаюсь к вводу пароля с помощью макросов. Как их запускать правильно и редактировать сам файл макроса чтоб ошибки не выкидывало?
cirus
Цитата
Как их запускать правильно и редактировать сам файл макроса чтоб ошибки не выкидывало?

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

А там случаем нету gameguard?
Ещё есть вариант использовать экранную клавиатуру.
TRUB
Для меня как не очень сильного кодера=) мягко говоря этого описание скрипта мало. я не понял что надо сделать.
А как определить есть ли GameGuard ? по всем признакам вроде как его робота, полистал форум у многих были проблемы с вводом " Shift , alt .." и есть ли решения как с ним бороться?
DarkMaster
Цитата
Команды Say, присвоение строчной переменной $, тоже не дали результатов.

А именно? Say не посылает нажатия, а посылает коды символов. Т.е. там понятие шифта вообще не существует - пошел и большие и какие угодно.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.