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

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

UoKit.com Форумы _ UO Pilot в Lineage II _ Один скрипт на 2 окна одновременно

Автор: Korsar2888 3.8.2014, 1:29

Один скрипт на 2 окна одновременно

подскажите как сделать так, чтобы 1 скрипт одновременно работал на несколько окон?

Или если тема уже обсуждалась киньте плс мне ее.

заранее очень благодарен!

Автор: DarkMaster 3.8.2014, 11:48

Задача какая? Что мешает запустить 2 вкладки? Нужна какая-то синхронизация работы?

Автор: Korsar2888 3.8.2014, 12:37

Оптимизация, чтобы на 5-10 окон 1 скрипт а не 10 вкладок

Автор: DarkMaster 3.8.2014, 13:25

Оптимизация, простите, чего? Работать будет медленнее, писать сложнее, гибкости меньше. Три вагона проблем и на данный момент смыл совсем не ясен.

Можете выдернуть все хендлы окон в массив через findwindow и менять workwindow под каждое действие.

Автор: Korsar2888 3.8.2014, 13:34

Почему нет привязки на несколько окон?
просто, чтобы бинды действовали на все окна сразу, а привязки идет по последнему.
не ужели никак не сделать?

Автор: DarkMaster 3.8.2014, 14:16

Цитата
чтобы бинды действовали на все окна сразу

Это в винде изначально абсурд. При отсылке клавиши в некоторое окно требуется указать хендл. Это API винды так устроен. Отсылать в несколько окон можно только посылая несколько раз меняя хендл. Это опять же API винды такой. Т.е. по сути вы можете сделать все тоже самое на пилоте просто меняя workwindow - это и есть тот самый хендл. Отослать во все окна сразу нажатия без привязки вообще не очень умная мысль. У вас в данную секунду несколько тысяч окон, можно конечно выделить видимые/родительские, но в итоге все равно получится хрень "мой кот ходит по клавиатуре, а я узнаю новые сочетания клавиш в опере".

Цитата
не ужели никак не сделать?

Сделать. Перебирайте хендлы через workwindow, отсылайте нажатия в каждый хендл.

Автор: Korsar2888 3.8.2014, 14:53

Да боже у меня 5 окон, которые называются одинаково. Привязка идет как Линейдж 2, но привязывается только к 1му, последнему. Я понимаю 1000 окон. Однако каманда send217 действует только на привязанное окно, даже если оно будет в фоновом режиме, главное, чтобы точки цвета были видны. Я могу спокойно запустить бота на фарм и юзать скайп, браузер и прочее. При команде send217 {2} и т.д. отправляется только в ла2, в отличае от sendeх, который использует только на активное окно. Так как координаты цвета фиксируются по опр окну (не абсолютые), то на 5ти окнах координаты цвета хп моба, хп и мп чара будут одинаковы. Для норм кача у меня 5 скриптов на одно окно, если делать 5 окон это получится 25 скриптов, а если я захочу 20 окон? Потому мне важно чтобы привязка была по 5ти окнам одновременно. Я знаю, что это можно сделать, но не знаю как. Если бы это сделать нельзя было, то я бы не мог пользовать клавиатурой в др программах, при рабочем скрипте в ла2.
Понимаете да? Ла2 в фоне, не активное окно просто на заднем плане.

Автор: DarkMaster 3.8.2014, 19:16

Я вас понимаю и понимаю, что в результате вам надо. Осталось только вам это доказать)

Прочитайте, то что написано выше. Привязать к 5 окнам не возможно. И к 2 не возможно. Но их возможно динамически переключать.

Автор: Korsar2888 3.8.2014, 20:10

Понимаю, как же мне теперь с этим смириться? Может подскажите какой-нибудь выход?

Автор: DarkMaster 3.8.2014, 20:33

А чем вас не устраивает глобально мое решение? Неужели настолько нереально извратит ваш скрипт смена workwindow? Ну сделайте подпрогамму на поиск всех окон с заданным заголовком и цикл по отправке нажатий в них.

Автор: Korsar2888 3.8.2014, 21:05

очень долго времени уйдет на переключение, 1 скрипт юзает несколько ф-ций одновременно в опр моменты, если на 1м из око не будет полноценно считаной инфы, которая меняестя ежесекундно, то адекватного фарма не будет.
Я вижу выход открывать 5 пилотов это выход такой же ужасный как и делать по 25 вкладок

Автор: DarkMaster 4.8.2014, 0:12

Код
set timer
repeat 100000
set workwindow 1234123
end_repeat
log timer

Время 8112. Т.е. на одну смену фокуса уходит 0.08 миллисекунды. Это просто ничто. За 1 секунду можно сменить фокус 739 644 раза... У вас считывание цвета происходит не чаще, чем 30 раз в секунду. Цифры просто несопостовимы.

Автор: Korsar2888 4.8.2014, 0:37

Цитата(DarkMaster @ 4.8.2014, 1:12) *

Код
set timer
repeat 100000
set workwindow 1234123
end_repeat
log timer

Время 8112. Т.е. на одну смену фокуса уходит 0.08 миллисекунды. Это просто ничто. За 1 секунду можно сменить фокус 739 644 раза... У вас считывание цвета происходит не чаще, чем 30 раз в секунду. Цифры просто несопостовимы.

Это типо он будет привязываться ко всем окнам по очереди за 0,08сек?

или как?

даже если так, все равно например команда send217{2} юзанется только в 1но окно, а не во все одновременно. Так же подскажите могу ли я сделать, чтобы команда выбиралась случайным образом типо
goto 1 or goto 2
1но из 2х.

Автор: DarkMaster 4.8.2014, 10:00

делаете findwindow в массив. Именно в массив. Он тогда возвращает не последнее окно, а все окна. Потом делаете цикл:

Код
set #sizeHandle size(%handle) // Узнаем размер массива
for #i 1 #sizeHandle 1
    set workwindow %handle [ #i ]
    send217 1
end_for


По рандому вам понадобится if и опереатор(ну просто удивительно) random. Читаем - там все достаточно примитивно.

goto лучше не использовать. Это очень сильно усложняет понимание кода и затрудняет его модификацию. Используйте gosub, а подрограммы выносите за пределы основного кода. Это очень сильно окупается во время модификации кода.

Автор: Korsar2888 4.8.2014, 23:57

а можно каждую строчку рассписать, а то с массивами я еще не дружу))

Автор: DarkMaster 5.8.2014, 11:03

Дык а что тут расписывать? С массивом тут одна строчка в которой индекс просто задан переменной. Все...

Автор: Korsar2888 5.8.2014, 15:22

set timer
repeat 100000
set workwindow Lineage II // название окна
end_repeat
log timer


set #sizeHandle size(%handle) // Узнаем размер массива
for #i 1 #sizeHandle 1 // это что за строчки?
set workwindow %handle [ #i ] //И это?
send217 1 //зачем это?
end_for

Дело в том, что я никогда не сталкивался с массивами не понимаю, что это а в вашей вики по пилоту ничего нет, рассморел примеры очень слабо понял. Можешь или написать конечный вариант для скрипта или объяснить мне

Автор: DarkMaster 5.8.2014, 17:41

Цитата
Можешь или написать конечный вариант для скрипта

Дык я его и так написал уже... Все что там нужно - это перед скриптом сделать findwindow в массив.
Откройте справку, нажмите ctrl+f и вбейте findindow. Последнее изменение как раз про поиск с занесением в массив. И даже с примером.

for можно найти там же. Циклы с нуля объяснять точно не буду - они там очень хорошо написаны. Если что-то с ними не понятно, то пишите "в справке написано вот это, но мне не понятен такой-то момент". Смысл мне перепечатывать эту же справку? Если какие-то непонятные моменты, то я их поясню.

Автор: Korsar2888 5.8.2014, 17:44

понял спасибо

Автор: veiron 5.8.2014, 19:25

Код

set #google findwindow ( Google Chrome)
set #google GetWindow (#google CHILD)
set #google GetWindow (#google CHILD)
set #google GetWindow (#google CHILD)
set workwindow #google

А если такой хэндл загонять в массив, тогда как делать так?: set %handle[ 1 ] #google

Автор: DarkMaster 5.8.2014, 20:09

Цитата
тогда как делать так?: set %handle[ 1 ] #google

Да. Следующий в set %handle[ 2 ] загоняйте. Правда дочерние окна все несколько усложняют. Я бы рекомендовал сразу первый же поиск делать в массив.
Цитата
set #google findwindow ( Google Chrome)

Вот это не в переменную, а в массив загоняйте. Вот как в переменную, точно так же и в массив. Ну и дочерние ищите точно так же, только вместо переменной используйте элемент массива. Кстати можно использовать мой код, если вместо send217 подставить ваш кусок по поиску дочернего окна.
Напишите вы уже этот поиск в массив. Никто вас не укусит за ошибку. Писать вместо вас не буду, а ошибку я поправлю и у вас будет рабочий код. Ну только бред откровенный теперь не надо штамповать)) Тем более в справке есть готовый пример - вам просто имена поменять надо будет и все.

Автор: veiron 6.8.2014, 21:50

Цитата(DarkMaster @ 5.8.2014, 20:09) *

Правда дочерние окна все несколько усложняют. Я бы рекомендовал сразу первый же поиск делать в массив.

Код

set #google findwindow  (Google Chrome)
set #google GetWindow (#google CHILD)
set workwindow #google
set %wash[1] #google
//*скрипт
   set workwindow %wash [ 1 ]
   left 100 100
//*стоп скрипт

Я не понял про какой вы поиск говорите, но так с чилдом нормально работает.

Автор: Korsar2888 6.8.2014, 23:46

set #google findwindow (Google Chrome)
set #google GetWindow (#google CHILD)
set workwindow #google
set %wash[1] #google
//*скрипт
set workwindow %wash [ 1 ]
left 100 100
//*стоп скрипт

можешь по подробнее пояснить что делает каждая строчка простыми человеческими словами?

Автор: DarkMaster 7.8.2014, 0:22

set %handle findwindow (Google Chrome)

начните вот так.

Цитата
set #google findwindow (Google Chrome)

поиск окна
Цитата
set #google GetWindow (#google CHILD)

дочернее окно
Цитата
set workwindow #google

рабочее окно

Автор: Korsar2888 7.8.2014, 23:38

set workwindow %wash [ 1 ]
А это, что тогда?

Автор: DarkMaster 8.8.2014, 9:43

Это смена рабочего окна.

Автор: Korsar2888 9.8.2014, 23:22

Потом как нить продолжим как выходные будут

Автор: DarkMaster 10.8.2014, 0:32

А сегодня что О.о?)

Автор: Levo222 21.12.2018, 9:06

Когда будет написан пилот на LUA?

Автор: DarkMaster 21.12.2018, 12:04

Цитата
Когда будет написан пилот на LUA?

https://forum.uokit.com/index.php?s=&showtopic=19856&view=findpost&p=429598

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