Пожертвовать на дальнейшее развитие:
Рубли: R849464451336
Гривны: U145931779718
Доллары: Z353114408274
410011422550405
Для пожеланий и багов открыт специальный https://redmine.uokit.com/projects/uopilot/issues.
Крайне рекомендуется писать сообщения с соответствующим содержанием именно туда. В противном случае ваш пост будет промодерирован и вручную будет создана копия на багтреккере.
https://redmine.uokit.com/projects/uopilot/issues
Тут вообще идея-бомба родилась
1. получение/установка текстовых свойств windowed-компонент типа TEDit и т.п.
2. получение/установка св-в по id у объектов html.
1 изменить размеры, показать\спрятать, с текстом поиграться этим давно пользуюсь, собственно частично для себя и делал :)
правда есть некоторые сложности с поиском нужного контрола. первый раз приходится перебрать половину компонент, пока найдешь правильный путь.
2 не представляю как извне его найти.
хотелось бы переменную PID, в которой содержался бы PID процесса с которым работает скрипт. Аналогично handle. Делаю через чтение памяти, но с выходом новых версий приходится правкой заниматься, да и от вкладки зависит.
Вставка буфера аналог ctrl+v, только посыл в конкретное приложение, на не системное нажатие. Речь уже когда то шла, что на мысль натолкнул. Чтобы не кануло в лета собственно.
Добавлю 5 копеек от себя, в части касающейся парсера команд. На мой взгляд, было бы уместно довести до конца механизм работы с процедурами:
вложенный вызов процедур (вызов процедуры из другой процедуры) - существенно сократит и повысит читабельность кода большинства скриптов;
возможность возвращения значения из процедуры (return #myVar) - фактически, добавление разновидности процедур - функций;
передача массивов в качестве аргументов;
ну и что касается in-out параметров (т.е. по ссылке или по значению) - совсем не будут лишними, на мой взгляд.
Вот такие предложения
Ну и как всегда, не могу не напомнить про команду записи сообщения в лог Это просто становится моей визитной карточкой
Хотелось бы видеть аналог с++ switch ... Можно конечно с метками извращаться, но тогда если будет не описанная ситуация скрипт встанет с ошибкой. Громоздить кучу ифов не удобно да и тормозные они.
Тут идею по поводу лога опять начали подниматься.
Я придерживаюсь идеи создания ini файла в котором будет описана запись в лог каждой команды. И фантазию WKnight'у развивать не надо будет, чтобы придумывать описания и провидцем становиться не надо - пользователь сам скорректирует то что ему важно.
Так же очень хотелось бы иметь 4 режима лога:
1) Выключено. Даже ручной set logging траляля - полностью игнорируется.
2) В лог идет запись только в ручную проставленных сообщений(на данный момент идентично set logging off)
3) В лог идут только автоматические сообщения.
4) В лог идут все сообщения (на данный момент идентично set logging on).
waitkey {anykey} // без разницы кодом или символом
lawsend //медленный сенд))
Хотелось бы функцию, которая будет снимать не изменяющиеся точки для последующего сравнения в чем-то вроде финдимиджа. Цель - исключить переливающиеся элементы, вытаскивание надписей.
findcolor:
Группа - ищется группа пикселей заданных цветов (соотношений между каналами), состоящая из заданного числа точек (или больше), находящихся друг от друга на расстоянии не более чем заданное.
Используется для обнаружения объектов, состоящих более чем из одного пикселя подходящего цвета (отсекается "шум").
crop - определение углов прямоугольной области, ограничивающей все пиксели всех перечисленных цветов (соотношений);
Используется для быстрого определения размера текстовых надписей, высоты/ширины полоски маны(жизни) и т.п.
1) Отрываем окно статуса командой в пилоте или отдельная кнопка.
2) Нажимаем кнопку/плюсик "добавить переменную"
3) Получаем возможность ввести имя переменной и название.
4) В окошко добавляется строка, например, "ХП 12345", где ХП - название из предыдущего пункта, а 12345 - значение переменной.
5) Окошко самостоятельно обновляется. Таймер можно вывести переменной, но и фиксированный шибко не испортит.
6) Минимальные рамки окошка, а лучше и вовсе их отсутствие.
7) Обязательно возможность установить поверх всех окон.
8) В идеале возможность задать цвет при значениях больше или меньше определенных в пункте 4.
9) Желательно, чтобы окошек можно было создать несколько независимых.
10) Название выравнивание по левому краю, значение по правому.
Так же думаю будет правильным ввести под это дело несколько команд:
set status_open - открывает окно статуса.
set status_close - закрывает окно статуса.
set status_add "Мана" #mana.3 (#mana < 123 255 0 0 0)(0 255 0)
Добавляет в окно статуса строку с названием "Мана" и значением переменной #mana. Если #mana меньше 123, то цвет становится красным - 255 0 0, в другом случае цвет зеленый - 0 255 0. Параметры цвета необязательные, можно просто опустить.
set status_del #mana - удаляет переменную #mana из окна статуса.
Что мы имеем в итоге: небольшое окошко поверх всех окон в котором табличка названий переменных и их значения.
Пример:
set #mana.3 10
set #weight 300
set #ammo 27
set status_add "Мана" #mana.3 (#mana < 123 255 0 0 0)
set status_add "Вес" #weight (#weight < 100 0 255 0) (#weight > 500 255 0 0 0) (200 200 200)
set status_add "Патроны" #ammo
Нарисовал как мог...
_____________
| Мана__ __10 |
| Вес_____300 |
| Патроны...27 |
Все это программа максимум. Если будет реализация даже на базовом уровне - уже будет прекрасно.
Все-таки хотелось бы увидеть аналог hint, но не в виде всплывающего окна, а в виде оверлея, чтобы не просаживать фпс. Текстовое наполнение, положение текста на экране, цвет и размер шрифта задавались бы пользователем в скрипте. По-моему это универсальное решение, было бы здорово если бы удалось реализовать.
Примерный синтаксис:
overlay <text> [<начало блока текста по x> <начало блока текста по y> <цвет шрифта> <размер шрифта>]
set $t1 text1
set $t2 text2
set $t3 text3
set $t4 text4
set $t5 text5
set $t6 text6
set $t7 text7
set $t8 text8
overlay $t1||$t2 200 300 255 18
overlay $t3|$t4 800 600 65280 24
overlay $t5|$t6|$t7 880 600 16777215 24
overlay $t8 960 740 65535 10
Есть идея как можно поудобнее срастить Notepad++ с пилотом. Сейчас если пишешь скрипт в блокноте, то его постоянно приходиться подгружать в пилоте. Появилась команда load_script и навела меня на мысть:
set #a current_script
load_script #a test.txt
Допилить хотелось бы так: если лоад скрпит происходит в закладку из которой он был вызван, то скрипт заменяется и стартует уже новый. На данный момент этот код приводит к замене скрипта во вкладке, однако работает ранее запущенный(если не перезапускать).
давно мечтаю о do while... вроде и мелочь, но иногда так не хватает.
как кстати дела со switch? ты вроде начинал работать над ним, если не ошибаюсь.
Нет... Я имл в виду для группы findimage'ей... То есть что-бы можно было раз 5 запустить findimage/findcolor на запомненом изображении.
хотелось бы функцию для получения случайного значения с http://ru.wikipedia.org/wiki/Нормальное_распределение вероятностью в указанном диапазоне.
возможный пример использования:
set #time_to_wait ( normal 1 3 )
wait ( normal 1000 4000 )
Хотелось бы поиск в памяти. По сути оно конечно можно уже сейчас, но уж очень тормознуто выходит. К сожалению не всегда получается найти статические адреса либо лесенку из указателей. Приходится регулярно искать структуры через артмани(у которого есть достаточно слабые места), а потом выковыривать из результатов нужное.
Мечтаю об обходе "GameGuard", чтобы свободно ставить на макрос и сворачивать окно )
Это относительно Karos Online, я 3 дня искал возможность обхода гейм гварда, все попытки безуспешны... Как я понял GG отличаются от тех, что стоят на линейках и т.п., т.к. их софт мне не помог и гайды как хексить, сверлить ддлки тоже, т.к. их попросту нет в моем случае.
Единственное, что сработало - это мышка x7, но трабл в том, что процесс макроса занимает весь пк, т.е. свернуть окно нельзя, в этом все и неудобства.
Вот он противный http://www.gameguard.co.kr/ru/index.htm
%findingVar содержит список искомых значений со смещениями и типами.
#shift - шаг поиска.
%findingVar [1 1] 123 // - значение
%findingVar [1 2] 0 // - смещение
%findingVar [1 3] d // - тип
%findingVar [1 1] 321
%findingVar [1 2] -512
%findingVar [1 3] d
set #sizeFindingVar size (%findingVar)
for #i #startAddress #endAddress #shift
readmem %findingVar [1 1] #i %findingVar [1 3]
if #var = %findingVar [ 1] // Нашли искомое значение.
if #sizeFindingVar = 1 // Сверяем структуру если есть, нет - выходим.
set #successAddress #i
break
else
for #ii 2 #sizeFindingVar 1 // Сверяем всю структуру
set #addressWithShift %findingVar [1 2]
readmem #structureVar [1 1] #addressWithShift %findingVar [1 3]
if #structureVar = %findingVar [#ii 1]
if #ii = #sizeFindingVar // Если последнее значение из структуры, то все совпало.
set #successAddress #i
break 2
end_if
else // Значение смещения не совпало, выходим.
break
end_if
end_for
end_if
end_for
#successAddress содержит искомое значение.
меня наверно немного не так поняли. рядом с % точности совпадения ввести % отклонения оттенка либо изменение битности. лучше %.
подробнее как оно должо работать
в случае % оттенков. скажем есть погрешность 3%.
точка имеет цвет 100 100 100, 255*3%=8, соответственно 100+/-8. При этом все цвета в пределах (92 92 92)-(108 108 108) будут считаться совпадением. Ну и соответственно в масштабах финдимиджа для всей картинки. Я так понимаю кушать будет не мало, но лучше так, чем каждый раз на грабли вставать, да и некоторые аспекты сейчас нереализуемы из-за этого(чуть прозрачный фон например).
с битностью слабо представляю как работать, но суть думаю будет в конвертации bmp в меньшую битность на лету, коневертацию экрана в меньшую битноть и в итоге сравнением через текущий финд колор.
Столкнулся, с как я думал, решенной проблемой.
Теперь пилот умеет определять , размер окон и положение.(кстате как избавится от параметров которые не хочешь задавать, например мне надо определить лишь размер окна, но не его положение, но всеравно приходится резервировать переменные для всех параметров)
Теперь пилот с помощью showwindow умеет задавать приложениям, развернуться им свернуться и т.п. Но как быть если ненужно задавать , а нужно лишь определить свернуто окно или развернуто или восстановлено. Неужели в этом случае придется прибегать к внешним утилитам, может добавите команду позволяющие определить позицию окон (MIN MAX и.т.п.)?
я тоже обратил на это внимание и несомненно нужно расширение данной команды. Однако советую поэкспериментировать с вытаскиванием координат в различном положении окна. При свернутом окне, если мне не изменяет память, будут координаты -32000. Максимизированное окно можно вычислить подобным образом, т.к. размер будет равен разрешению экрана минус панелька пуск. Есть небольшой шанс, что окно будет не максимизированным, но с таким же размером, но это не сверх критично.
Хотелось бы вытаскивать состояния в _независимые_ переменные:
1) хайд
2) минимизировано
3) максимизировано
4) восстановлено
5) доступно
6) активно
Так же неоднократно была необходимость вытащить хендл активного окна. Т.е. просто узнать какое окно сейчас активно.
get #handle activewindow
В переменную #handle возвращается текущее активное окно.
Это бывает необходимо при работе с несколькими окнами/приложениями либо при работе скрипта, которому периодически необходимо свершать действия в развернутом окне. Возврат после этих действий бывает очень проблематичен.
предлагаю для решений проблем с нахождением окон добавить команду типа
get windowsfromcursor %winlist
или
get windows %winlist #x #y
команда должна выводить в отдельные строки массива хендлы всех окон, которые не минимизированы и находятся в точке экрана с заданными координатами. Туда же можно в столбцы добавить инфу о PID родительского процесса и именах окна и процесса
Мммм... А смысл? Что потом делать с этой свалкой хендлов?
А почему ты так уверен, что она верхнего уровня? Да и как правило проблемы начинаются, когда нужны именно дочерние окна.
У меня на данный момент открыто 28 окон, большинство развернуто на весь экран... Ну правда таких не много будет...
Прикрепленные файлы
speedballs.7z ( 32,72 килобайт )
Кол-во скачиваний: 1191
Я и их не открывать не буду, а закрывать не буду. Фишка в том, что так постоянно и каждый раз все закрывать, а потом открывать заново это бред. Есть анвир, есть виндов сканнер, которыми находится любое окно в течении 2 минут включая время написания кода и проверки его выполнения.
Если задать пилоту хоткей(в данном случае "z"), то при нажатии на него не будет напечатан символ, что достаточно не удобно. Решил исправить данную проблему небольшим скриптиком:
set #handle findwindow (Dungeon Defenders)
set workwindow #handle
:start
get windowpos #handle #xw #yw #w #h #r
if_not #xw = -32000 or #xw = -11 // Ïðèëîæåíèå íå ñâåðíóòî
get mouse_pos #x #y
left #x #y
send t
wait 100
else
sendex z
stop_script
end_if
goto start
send z?
И в какое окно посылать send z? Если приложение свернуто, то активно может быть что годно - от калькулятора до десятого дочернего окна редактора памяти.
Давно мечтаю о задании в теле скрипта хоткея на сам скрипт. Было бы еще очень интересная идея выполнения по хоткею подпрограммы внутри скрипта. Может быть очень полезно для коррекции действий. Сейчас это приходится решать дополнительными скриптами, что не очень удобно, а передавать другим людям и вовсе морока. Т.е. в теле скрипта будет содержатся что-то вроде:
:sub {F1}
msg 123
return
Можно ли научить пилот определять что зажата какая-либо кнопка (к примеру правая кнопка мышки) и в этом случае не запускать скрипт?
Лампочку бы красную где-нить в углу пилота если файл лога слишком тяжелый... А то тут обнаружил закончившееся место на винте и тхт файл по весу тянущий на порнуху)
было бы неплохо добавить функций для работы со строковыми переменными. к примеру взять за аналог простые функции копи инсерт
Copy(s:string, index:integer, count:integer):string
set $F qwertyASD12345
set $s copy( $f , 6 , 3) //результат ASD
Insert(source:string, var s:string,index:integer)
set $s qwerty12345
insert( ASD , $s , 6) // результат qwertyASD12345
и делит и поиск по строке тоже было бы неплохо )))
Просьба добавить опцию включения/отключения нумерации строк (чтобы при необходимости освободить место в окне)
Предлагаю в список считываемых Readmem типов добавить вещественные FLOAT/SINGLE (4 байта), REAL (6 байт), DOUBLE (8 байт), дабы не извращаться в самом скрипте, как https://forum.uokit.com/index.php?showtopic=22710.
При выходе из пилота "Сохранить изменения в имя_скрипта/новый_скрипт". Ну и соответственно блокировка выключения компа... Сколько уже скриптов загублено и сколько времени проведено в анализе на каком месте был последний сейв... Так же неплохо было бы автосейв в темп файл(именно в темп, а не перезапись).
ok
перенес в начало списка предыдущие 2 поста.
Хотелось бы, чтоб пилотовский хелп и история развития открывались в отдельных окнах, видимых на панели задач (ну или хотя бы опционально выбирать). Сейчас они как-то загадочно работают )
Было бы неплохо иметь функцию get workwindow, возвращающую хендл текущего рабочего окна
Вытаскивал с помощью артмани пид. Вроде все прошло достаточно быстро и просто.
В новой версии колонка с включенным скриптом не горит зеленым,в прошлой версии было очень удобно видеть какой скрипт работает и включен,а какой нет)
галочка "отображать запущенные скрипты"?
О спасибо)
WKnight
Вопрос: почему в пилоте не используются в выражениях вещественные числа? Насколько сложно это реализовать?
З.Ы.: это я веду к возможности использования тригонометрических функций )
исторически так сложилось, от прародителя. лет за 10 оно особо никому не понадобилось
я уже подумываю ченить придумать с точками, но проблема в том, во первых всё конкретно заточено на целочисленное, а во вторых что процедуры преобразования вещественных чисел не, так сказать, thread-safe, короче в потоках могут себя криво вести, как раньше поиск точек и картинок на экране, из-за которых пилот падал иногда.
Всё же хочется отдельную команду для внесения в массив нескольких значений сразу, типа:
aset %arr Один два три четыре
aset %b[2] 1 2 3 4 5 // присвоить первым пяти элементам 2-й строки массива %b соответствующие значения
вопрос: чем отличаются переменные active_script и current_script (кроме лишнего значка '^')?
Проблема: не получается обратиться к переменной текущего скрипта по её полному имени переменная.номер_скрипта, где номер скрипта задан в виде переменной (чтобы не прописывать номер текущего скрипта в имени в виде конкретного числа):
set #a 1
call test #a
end_script
proc test #aa #bb
msg Активный скрипт active_script, текущий скрипт current_script
// пытаемся обратиться к переменной #a
set #b #a.current_script
msg #b
set #c #a.active_script
msg внутри поцедуры a= #a , внешнее значение a = #b или #c
end_proc
3. опять же по логике - активный, тот чья закладка на вкладке скрипты сейчас активна, т.е. тот на который действует кнопки старт\пауза в правом нижнем углу пилота и тот что редактируется в данный момент. но это по логике, надо бы проверить, попозже...
активный тот, для которого действует комбинация ctrl+a
иначе active_script номер закладки редактируемого скрипта в пилоте,
а current_script это номер самого скрипта в котором эта команда используется.
Привет, с самого начала пользования пилотам, меня немного доставала одн апроблема, и почему то только сейчас, до меня дошло, что ее вполне можно решить в следующей версии.
Обычно пилотом в игре выполняется какой то сценарий по скрипту, но иногда, срочно нужно чтото сделать пользователю, например быстро ответить в чат или подвигать определенные скроллы. Ради этого приходить отыскивать окно пилота, тормозить все скрипты, часто ты это забываешь делать ,и в итоге процесс стопорится еще дольше.
Можно ли сделать такой команду, которая определяла, что мышью двигает, или нажимает клавиши мыши или клавиатуры пользователь , после чего скрипт, в котором есть определенная команда (типа: user_active) приостанавливал все свои операции на 5 секунд. Как только активность пользователя пропадала, скрипт бы продолжал свою работу.
Если нельзя определить, скрипт или пользователь двигает мышь или нажмет клавиши. ТО хотябы можно было бы сделать, чтобы определяло, зажата ли какая то клавиша мыши, чтобы хотябы когда двигаешь скролы, скрипт бы не вмешивался.
Вообщем идею,я думаю объяснил понятно, если такое нельзя реализовать, в том виде в каком я предложил, то хотябы предложите свой вариант, полностью или частично решающий данную задачу.
з.ы. Я частично решал данную проблему, тем, что добавил в скрипт, команду, чтобы он зацикливался, когда мышь находиться в области чата, но это было нне слишком удобно, потому, я часто поле того как отвечалв чате на чей то привал, забывал убирать курсор из области чата, и скрипт во все это время, оставался приостановленым. Может, ктото придумал боле практичный вариант, жду ваших идей и решений.
уже говрили, но как-то подзабили на эту тему. нужен возврат текущего(!!!) активного окна и состояний окна, в частности для того, чтобы притормаживать скрипт при постороннем активном окне.
Мое пожелание проигнарировано , или вы просто не знаете как это реализовать ? Могу подсказать теоритически, как это можно сделать и как должно работать.
я так понял, что в данный момент идет обсуждение этого вопроса.
по поводу игнорирования неторопитесь с выводами. часто в новой версии народ обнаруживает то что просил, при полном отсутствии на форуме какой-либо видимой реакции с моей стороны.
Сделайте так чтобы size возвращал числовое значение, так как сейчас он совсем не логично возвращает строку не смотря на то что ничего кроме цифр он вернуть не может.
еще один момент:
if $a qwe
вхождение строки не работает не смотря на то что оба значения строки
По поводу нововведения, к-е просит _LESTAT_:
Во-первых, действительно, это бывает полезная функция.
Но некоторые скрипты работают так, что и пользователю не мешают, и пользователем не прерываются, а значит, чаще всего можно заниматься своими делами, и если он будет на этом постоянно приостанавливаться, ничего хорошего не произойдет. Поэтому, имхо, если такое и добавлять, то так, чтобы для каждого скрипта отдельно можно было включить\выключить.
К тому же, пауза на какое-то время - это точно не то, что нужно. нужна простая пауза, чтобы скрипт потом возобновлять.
Хотя, с другой стороны, возобновлять их горячими комбинациями не получится, если их более одного.
Так что, здесь нужно много чего переворотить.
EL-GReeN
Что-то вы намудрили. Всё работает, если использовать промежуточную переменную, а не сразу в команде.
set $a qwerty
set #b size($a) + 3
msg #b
end_script
set $a qwerty
set #b PosEx(er $a)
msg #b
end_script
ув. WKnight, про работу пилота с окном "в фоне" не забыто? оч и оч хотелось бы чтоб пилот работал с перекрытым чем то окном, как в v2.04. Просто из-за обилия окон приходится сидеть на той версии и просто наблюдать, как у вас тут прогресс идет)
Хочу выяснить пару воросов у WKnight .
1. Будет ли / возможно ли реализация функции для чтения/записи *ini файлов и если да то в как скоро этого ждать. В последних версиях появилась наконец то фозможность работы со строками и в общем то можно написать самому то что нужно скажем в виде процедуры, но всё же хотелось бы иметь функцию типа :
FunctionIni (секция, ключ, значение, файл)
тем более что сам пилот ведь работает со своим инишником.
2. Будет ли / возможно ли реализация функции для чтения/записи параметров реестра.
if uo.InJournal("An Ex Por") then
uo.DeleteJournal("An Ex Por")
//полезное действие
endif
Было бы очень неплохо если бы в процедурах массивы как параметры тоже передавались.
возникла такая ситуация что в при использовании процедуры для чтения файлов потребовалось передача большого количества данных и при постепенной передаче данных в процедуру возникло множественное обращение к жесткому диску что совсем не хорошо. пока проблема решилась стартом параллельного скрипта но это дурной тон так можно заиметь много параллельных скриптов.
хотя возможно я много прошу и такие задачи надо решать уже совсем не средствами пилота просто в данный момент нет времени на изучение си / делфи или ещё чего ни будь для решения насущных задач.
иногда в скриптах приходится ставить большую задержку времени поэтому хотелось бы чтобы в каком-нибудь уголке пилота отображалось время, которое пилот простаивает по команде wait, и желательно что бы это включалось опционально как с отображением координат.
1)Было бы не плохо если бы в логе, сообщения можно было выделять цветным фоном.
Шрифт пусть остается черным, а вот если бы была возможность менять цвет фона на котором пишется текст, это было бы очень удобно. Просто у меня в лог отправляется много сообщений и не все из них важные. И я хотел бы чтобы особо важные сообщения в логе выделялись желтым маркером, сообщения об ошибках красным, важные успешные действия выполненные скриптом, выделялись бы зеленым и т.п..
2)Часто нужно задать узнать десятичный код цвета, но средствами пилота, это сделать не просто.
В пилоте нужна опция, открывающая диапазон цветов, с возможностью выбрать цвет шелчком мыши, после чего, копировался в буфер или сразу бы вставлялся в скрипт десятичный код выбраного цвета. Думаю лучше всего подайдет такой как в пейте, используя готовые компоненты, добавить такую возможность не займет много времени, а удобства добавит значительно.
3)В пилоте нужна встроеная экранная лупа, я уже предлагал ее добавить и вроде бы WKnight , согласился, что эту вещь нужно добавить, но в с того момента уже минуло несколько версий, а лупы так и нету.
4)Нужна более продвинутое создание форм. с возможностью добавления панелек с кнопками. Лично мне, да и другим очень бы пригодилось, если бы каждый раз когда нужно, что-то быстро активировать в скрипте, отключить часть его функций или приостановить его, то не приходилось бы, разворачивать пилот, останавливать скрипты и переписывать код, а достаточно было нажать кнопочку, на висящей повер всех окон маленькой панельке с быстрыми кнопочками.
1) +
2, 3) почему не воспользоваться FSCapture? Хотя не спорю- приятно смотреть, как другие велосипед изобретают ))
4) не понял. Для чего, почему, для кого это надо и т.п. И так ведь есть опция для пилота - "висеть поверх всех окон"
Ну и останавливаешь/запускаешь каждую функцию с помощью отдельного скрипта. Имею в виду - скрипт крутится один большой, но функции работают/не работают в зависимости от состояния каких-то ключевых глобальных переменных. Вот эти переменные и меняешь в других маленьких скриптах. И хинты в них же можно повесить.
односимвольные значения переменных проще редактировать на панели параметров персонажа. в принципе любые там редактировать можно, но это уже зависит от реализации скрипта
подобный кнопочный гуй нужен и нужен давно. Вопрос не поднимал из-за не совсем понятного мне механизма, как это должно работать. По сути, наверное, это будут те же скрипты, но привязанные к кнопке в окошке поверх всех окон с кодом типа "set #typeAttack.#current_script 2".
Можно конечно использовать отдельные вкладки. Однако при достаточно больших скриптах с приличным функционалом все действительно становится проблематичным. Во 1 не удобно постоянно соблюдать порядок скриптов. Убрал один старый и не нужный вначале списка - правь все остальные. Нужны несколько уровней вкладок для подобных решений. Да и распараллеливать многие вещи стало бы возможно. Так же если параметров настроек много, то поиск той строчки бывает крайне не удобен. А теперь на примере:
У нас запущен ПвП скрипт(для того же вова очень актуально), для боя против разных классов он может сильно изменятся. Скрипт у нас работает в режиме боя против мага. Мы убили мага, к нам подбегает паладин. Мы сворачиваемся, открываем пилот, выбираем вкладку для изменения параметров боя, выбираем нужную строку из нескольких десятков, меняем значение, запускаем скрипт(значений для изменений может быть и несколько), сворачиваем пилот. А есть ли смысл теперь разворачивать игру? Все равно у нас уже труп вместо чара.
О неужто кто-то со мной согласен, а я уж думал такое только мне нужно, рад вашей поддержке и более точному описанию.
Да по логике механизм работы описать легко, а реализовать такое вовремя работы скрипта, не просто, но думаю не невозможно, особенно если все как следует обдумать.
А если реализация удастся, пилот вновь выйдет на новый уровень взаимодействия с пользователем, и станет куда более функциональным и простым в обращении.
В идеале, пилоту не помешал бы вообще полноценный редактор форм, со своими лабелами, едитами, чекбоксами, и главное КНОПКАМИ. Я видел подобную реализацию, не только в серьезных языках программирования(типа Делфи) , но и в простых пользовательских маленьких программах (например в редактор форм у программ помогающих делать руссификаций), к сожалению точно не помню названий, но это означает, что это не так сложно сделать.
Да пока это мечты, но черт каким крутым станет пилот, если в нем будет подобная штука - полноценные функциональные формы. Эх было бы здорово, практический полноценный визуальный язык программирования.
Возможно ли в меню горячих клавиш для запуска скриптов добавить клавиши мультимедийных клавиатур типа stop, home, find и т.п.?
теоретически наверно да, но у меня обычная клавиатура...
будем подумать.
Я бы добавил пожелания к текущему пилоту:
- исправить корявость копирования русского текста из справки пилота и редактора скриптов при включенной английской раскладке
- возможность сворачивания пилота в 1 маленькую панельку (поверх всех окон), чтобы там только были кнопки управление скриптами и имена(псевдонимы) скриптов
- добавить возможность назначать псевдонимы скриптам. Например, скрипт 0 назвать "Атака", скрипт 1 - "Тип врага", скрипт 2 - не переименовывать. И чтобы к скриптам и переменным в других скриптах можно было обращаться по этим псевдонимам. При этом вкладки скрипттов тоже должны называться по псевдонимам, а при наведении курсора на них - видеть номер этого скрипта.
- при изменении имени скрипта сразу же должно меняться имя на вкладке пилота
- псевдонимы скриптов назначать в коде самих этих скриптов:
set script_name Атака // текущий скрипт получил имя Атака
set script_name // текущий скрипт получил имя "по-умолчанию" равное номеру скрипта
set script_name 3 Враг // 3-й скрипт получил имя Враг (по умолчанию)
set script_name 3 // 3-й скрипт получил имя "по-умолчанию" равное "3"
set script_name Атака // текущий скрипт получил имя Атака
set script_name // текущий скрипт получил имя "по-умолчанию" равное номеру скрипта
set script_name 3 Враг // 3-й скрипт получил имя Враг (по умолчанию)
set script_name 3 // 3-й скрипт получил имя "по-умолчанию" равное "3"
Вот интересно, а как планируется двигать мышей в окне формы, если ей в это же время двигает скрипт в окне игры?
А чем это вообще мешает? Ну если стрелялка, то еще понятно, но мморпг всегда давало жмякать все что хочется. Такое же обычное окно как и у блокнота.
Никто не говорил, что все не решаемо текущими скриптами. Да можно сделать десяток скриптов, потом десяток хоткеев, потом запомнить все что забиндил, учимся играть на пианино для нажатия всех хоткеев. Можно даже без промпта для скрости организовать на отдельных вкладочках с хоткеями, вот только пользоваться этим будет не удобно. Тут вопрос лишь во времени и простоте использования. По факту мы получаем гибкие удобные и быстро адаптируемые скрипты.
Как вариант можно сделать просто панель быстрого доступа к скриптам, но в любом случае будет необходимо доделать механизм взаимодействия между соседними скриптами. Меня больше всего пугает именно вопрос способа ссылаться на необходимый скрипт.
// Опять свалил.
--v.2.25--
научил понимать переменные из других скриптов в формате #a.#b, #a.$b, #a.active_script
да, починил
а где скачать 2.25?
пока нигде, это так сказать анонс
Хотелось бы в экселевской табличке по конвертации цветов, отдельной строчкой видеть номера цветов, для цветовой гаммы в 16 бит (для виртуальных машин). Если кто-то сталкивался с такой проблемой, подскажите как поправить формулу.
Надо чтобы, забиваю я скажем серый из 32 битной гаммы - "7829367"
И сразу вижу что в 16 битной он будет - "7566707"
Хотелось бы, чтоб отображался хендл окна к которому привязан тот или иной скрипт.
Можно чтоб этот хендл отображался в одном и том же месте окна пилота, а при переключении вкладок скриптов - менялся на хендл для текущего скрипта.
(Не забыть поменять в момент привязки по W или Ctrl-A)
Очень не хватает богатого хелпа по оператору Timer
Хотелось бы видеть и понимать всю логику этого оператора, в примерах с комментариями. Пересмотрел все скрипты на автобафы и т.д. Как-то всё равно малоинформативно. Так и не разобрался как создать несколько независимых таймеров.
Нужны ли в начале скрипта строки типа:
set timer
или
set timer 0
Зачем они и что происходит с таймером если этих строк нету. Он же так и так с нуля считает вроде, от запуска скрипта.
Особенно интересуют циклы нескольких таймеров, завязанные на:
while #timer1 < 1
end_while
На самом деле тут даже описывать толком нечего. Переменная таймер создается при запуске скрипта и содержит в себе время работы скрипта в миллисекундах. Объявлять ее не нужно - создается она автоматически. Все что можно сделать с этой переменной - обнулить ее командо set timer (вроде даже 0 писать не нужно). Вот и все. Использование нескольких таймеров по большому счету немного не корректно звучит. Таймер существует только 1 и только в нем значение постоянно изменяется. Примеры же приведенные для работы с несколькими таймерами всего навсего сравнивают значение созданных переменных все с тем же единственным таймером.
Может проще будет понять, если учесть более адекватное название для системной переменной timer было бы now, то есть "сейчас".
возможно это есть и сейчас, и я недостаточно разобрался с командой "logging", но хотелось бы увидеть в новых версиях запись в отдельный лог-файл всех нестандартных событий которые происходят с пилотом (ошибки, зависания итд с указанием ошибки, номера скрипта, его названия, строки вызвавшей ошибку, и если возможно значений переменных скрипта), а также "тихий" режим при котором не будет никаких всплывающих сообщений об ошибке, а только запись в лог. иногда всплывающие сообщения очень мешают, и не всегда есть возможность посмотреть даже в чем была ошибка, не говоря о том чтобы изучать значения переменных
также было бы просто шикарно добавить опции автоматического перезапуска пилота в случае какой-либо ошибки или зависания (либо перезапуска скрипта, вызвавшего ошибку), или оповещения о проблеме миганием в панели задач. если это конечно реально без помощи второго пилота. в последней версии 2.27, к сожалению, пилот зависает довольно часто при агрессивной работе нескольких скриптов, и не сразу можно понять что он повис (hint`ы продолжают отображаться). пока решил попробовать вернуться к 2.24.1. хотя вполне возможно проблема не в новой версии пилота, а в новых версиях скриптов
Надо что-нибудь для определения размера экрана (рабочего стола) для указанного монитора
Команду post на Windows 7 x64.
научить бы пилот не реагировать на зажатие клавиш ctrl,alt,shift
при каких обстоятельствах? при эмуляции чего? относительно недавно перед эмуляцией нажатий ctrl,alt,shift вроде должны отжиматься.
UOpilot - бомба!
Если б я учил детишек 9-12 лет основам алгоритмизации - делал бы это с помощью UOpilot'а, а не паскаля.
Столь простую в синтаксисе, наглядную в отслеживании исполнения кода и мощную по возможностям программу скриптов не найти.
Хотел тут пожелать чтоб была возможность найти картинку на экране, проглядел список фич свежей версии - а оно уже есть!
Повторюсь: UOpilot - бомба! Спасибо за такую клевую штуку!
Спасибо не булькает
После некоторых мытарств с браузерками я понял чего ещё не хватает пилоту ))
Нужны функции доступа к содержимому окна браузера по хендлу. А также операции типа regex, чтоб вытащить всё что нужно из этого содержимого.
подробнее, как именно должно работать.
// получаем в $s текст (html-код) страницы браузера, окно которой имеет хендл #whandle
set $s getwindowcontent #whandle
// анализ строки $s
...
// получаем в $s текст (html-код) страницы браузера, окно которой имеет хендл #whandle
set $s getwindowcontent #whandle
// анализ строки $s
...
по горячим следам мысли:
- глобальный хоткей на включение/отключение всех остальных хоткеев;
- OSD сообщения;
дополнительные мысли:
вывод в OSD по таймеру / с выводом при запущенном скрипте / информации о статусе скрипта / переменных
привязка глобального хоткея к CAPS LOCK для удобной наглядной индикации состояния хоткеев.
перечитал этот топик.
оказывается про OSD уже писалось
прошу добавить в msg возможность перевода строки по \n
кстати, в hint цвет фона не меняется, как цвет шрифта?
еще непонятная вещь:
в виду экспериментов и освоения программы приходится достаточно часто её перезапускать.
и уже несколько раз попадаю в ситуацию когда настройки перестают сохраняться и подгружаться. более того они игнорируются.
то есть после закрытия программы и повторного запуска не загружается ни одного скрипта.
при этом при попытке поставить галочку на пункт получаю ошибку
'' is not a valid integer value.
закладки в логе с номерами скриптов для фильтрации, закладка для вывода всех сообщений(как сейчас)
очень хотелось бы поскорее silent mode без всплывающих окон с сообщениями об ошибках (символ не распознан, EConvertError, EAccessViolation итд), иногда очень мешают именно сами окна...
Еще добавлю в пожелания сделать возврат параметров из проседур proc. Сейчас они только внутрь передаются.
Это более важно, чем цвет фона hint )
P.S.: Только что сидел минут 5 втыкал- почему у меня в C# не работает конструкция типа:
if (a <> 0) b = 1;
(там правильно писать '!=' вместо '<>' )
Если надумаешь делать задание цвет фона для hint - предусмотри сразу, плиз, возможность задания прозрачности. Т.е. цвет может быть четырехбайтовым при необходимости (3 байта RGB и один байт на прозрачность).
Еще бы замечательно для hint добавить опции open/close (появления/закрытия), отключающие таймер закрытия.
hint (12 255 1010 695 -1 -1 (Идет процесс расчета, ждите...)) open
// долго считаем...
...
hint close
msg Расчет окончен!
Пожелание: Исправить https://forum.uokit.com/index.php?s=&showtopic=22925&view=findpost&p=164044.
Добавить в вариант prompt с #числовой_переменной дополнительную опцию, которая:
1) убирает кнопку Ok
2) при клике на одном из пунктов меню сразу закрывает окошко и возвращает результат выбора
3) если окошко закрылось по таймауту, то возвращается 0 (как изначально и было задумано)
Например:
set #b prompt(пункт1 пункт2) #таймер_автозакрытия_мсек #признак_наличия_кнопки_Ok
Есть три одновременно работающих скрипта. Нужна возможность для каждого из них настроить свою горячую клавишу для паузы. Насколько я понял сейчас нет такой возможности? Можно настроить горячую клавишу только для активного скрипта?
они работают, но через одно место.
создать новые три скрипта с содержимым "pause_script N" и забиндить их на хоткеи )))
настройки в двух столбиках в верхней части работают для самого пилота и активного скрипта.
в табличке в правом нижнем углу задаются хоткеи только запуска\остановки персонально для каждого скрипта.
судя по пожеланиям, туда можно добавить еще персональную паузу.
старт\стоп из той таблички работает, сегодня проверял, единственное, если скрипт активный, то кнопка Старт не нажимается почему-то.
Сейчас гоняю одну браузерную игрушку. Столкнулся с тем, что при переходе с одного браузера на другой иногда не совпадают относительные координаты точек в скрипте, которых совсем не мало...
Отсюда появилась идея:
ввести встроенные переменные для условного изменения относительных/абсолютных координат в рабочем окне
.
Поясню:
например, сейчас у меня одна из многих точек в скрипте имеет относительные координаты 100, 200
В другом же браузере эта же точка находится в координатах 120, 230.
В скрипте (для второго браузера) пишем:
set relative 20, 30
или
set relative 20, 30 abs // для исмещения абсолютных координат
И все! Скрипт не нужно весь переписывать под новый браузер!
Все команды left, kleft, pleft, get color, if <color>, findcolor, findimage автоматически добавляют/вычитают эти смещения к указанным в скрипте значениям
Подобный вопрос уже поднимался и как раз ты говорил, что это не нужно и это надо реализовывать в своих скриптах самостоятельно.
Я кстати с этим согласен от начала и до конца.
Во 1 не так и много подобных чудесных смещений всех координат на одинаковое расстояние.
Во 2 ничего не мешает в начале скрипта задавать все координаты.
В 3 это специфика работы кликера как такого. Это то, с чем тебе в любом случае придется работать.
Сам уже достаточно давно все до единой координаты, цветА объявляю в шапке скрипта. Там же дописываются все смещения. Как итог - код более читаемый, нигде нет дублирующихся одинаковых координат(не исправлять дважды и более раз), смещения задаются в течении пары секунд.
У кого-нибудь есть проблемы при редактировании скриптов с уменьшением окна пилота?
У меня иногда в процессе переключения между вкладками Еще и окна редактора скриптов пилот разворачивается на весь экран и я не могу его нормально уменьшить, т.к. правый нижний угол уходит под панель задач, а если я пытаюсь его поднять повыше к верхнему краю экрана (чтоб увидеть низ), то проклятая Win7 сама разворачивает его на весь экран снова, ппц.
По горизонтали его еще сузить можно, а вот по вертикали - уже матерных слов иногда не хватает )
Делается так:
1) разворачиваем окно редактора на весь экран
2) кликаем на вкладке Еще
3) снова переключаемся на вкладку Скрипт
Вуаля! - гемор готов ))
set #var findwindow (UOPilot)
if #var = 0
msg Пилот не найден!
else
set windowpos 0 0 200 300 #var
end_if
end_script
save_array добавитьв ситнтаксис номер строки с котрой писать в файл. По сути скопировать синтаксис из load_array/
Переставить пункт "Отображать ход выполнения скрипта" в середину меню, к пункту "Сворачивать UOPilot в трей" и если можно - добавить горячую клавишу.
Часто приходится включать/выключать отображение хода скрипта, и работать с сохранением настроек, а они находятся в самом верху и в самом низу меню, которое по высоте не влазит в 800 пикселов высоты матрицы. И каждый раз приходится скроллить то вверх, то вниз.
Насчет отображения хендла рабочего окна (по Ctrl+A) я уже, кажется, писал.
3 предложения:
добавить в readmem параметр HEX 4 байта чтобы возвращался адрес для работы с указателями
добавить функцию перевода dex - hex
добавить функцию сдвига массива
очень бы хотелось получать цвет LastMsg, а сам LastMsg сделать в виде стека, была бы шикарно
WKnight
Кстати по поводу чар параметров. Если выбрать маленький тип окошка, то открыть/закрыть нажатием на Char Parametrs будет нельзя - вылетит ошибка. Очень бы хотелось возможность задавать возможность видеть только определенные переменные определенных скриптов ну цвета. Даже идейка небольшая появилась как это реализовать. Создается двухмерный массив где:
%arr [ 1 1 ] #a.1 // имя переменной и вкладка скрипта.
%arr [ 1 2 ] значение переменной
%arr [ 1 3 ] 0 255 0 // цвет текста
%arr [ 1 4 ] 70 70 70 // цвет фона
Окно параметров чара просто считывает этот массив и отрисовывается согласно массиву. Человек же получает полное управление отображением.
пардон, если уже было. Как насчет отображения картинок в hint
меню команд по правой кнопке мыши:
set $w getselectedtext
set $w setselectedtext (text)
что-то забыли в разделе окон
PosEx(SubStr String [Offset=1])
Copy(String Index Count)
Delete(String Index Count)
Insert(Source String Index)
Команды - отсутствуют.
setlayout - отсутствует
getlayout - в клавишах
Напрпашивается подменю работы с текстом.
hint упомянут дважды
Список увеличился, но имеется куча одиночных команд в корне. Оно уже не лезет =)
say можно записать в клавиши. С технической стороны весч другая, а с практической результат очень близок.
set logging
hint
msg
Тоже можно сгруппировать, возможно туда же alarm.
end_script - переместить в скрипты.
Что делать с остальными не знаю.
ну вот как-то так.
В окне Log Window , кроме стандартных кнопок "Свернуть" "Развернуть" "Закрыть" , там же нужны дополнительные интерактивные кнопки. "Запустить последний остановленый скрипт" ,
"Остановить последний запущенный скрипт"
"Остановить все скрипты".
"Свернуть основное окно пилота, оставив лишь лог"
Насчет любителей горячих клавиш. У меня все клики скрипта срабатывают только через kleft , а kleft всегда передает фокус тому окну в котором кликает, делая окно пилота неактивным, из-за чего пилот неловит Горячие клавиши, вообще ! Это было выяснено, когда я пытался понять почему ниодна горячая клавиша вовремя работы скриптов не срабатывает. Поэтому и самому окну пилота не помешают клавиша "Остановить/Приостановить, Запустить/Продолжить" все скрипты. И не нужно говорить ,что горячие клавиши всё решают, там где они никогда не срабатывают.
=============================
В винде есть интересная функция, которую можно удобо использовать в скриптах. А именно если в настройках мыши, включить опцию "Показать расположение курсора, по нажатию Ctrl" , то вокруг курсора , на долю секунды покажется исходящая волна. Очень бы хотелось, чтобы эту опцию можно было адаптировать, для показа куда кликает мышь. Ведь скрипт переносит курсор, кликает мнгновенно, и меня это устраивает, но если бы я наглядно видел куда происходят клики, было бы еще удобней. Вообщем если бы при каждом клике скрипта срабатывала опция вызывающая показ местоположения курсора, но при этом не тревожущая кнопку ctrl , тоесть вызывалась бы виртуально, а не срабатывала бы для всей операционной системы, было бы очень удобно. Если у кого мысли как это(или чтото подобное) можно осуществить, не затрагивая глобальных клавиш?
з.ы. Нажатие ctrl , перед каждым кликом, можете не предлагать, это я и сам могу реализовать, но как я уже сказал это не слишком удобно, предложить другие варианты, или возможно напишите похожие утилиты/плагины, которые можно будет вызвать через скрипт. Насчет того, что длительность нахождения курсора в месте клика можно изменять случайным образом с помощью небольшого фрагмента скриптика,я тоже знаю, и мне это не нужно, этот совет тоже можете оставить при себе. Необходима именно наглядный маркер вокруг места клика, исчезающий через 500мс, а не в самом месте.
Можно отображать hint в месте клика, как вариант. Мне, например, такие навороты не нужны ни разу. (Понятно, что всем не угодишь).
В крайнем случае можно сделать процедуру, в которую передаются данные по точке клика и в которой жмется тот самый Ctrl, после чего делается клик мышки.
Сделать возможным редактирование скрипта в режиме паузы
Сделать опцию позволяющую вместо нумерации вкладок скриптов отображать имя файла скрипта
Получить хендл окна в точке с указанными абсолютными координатами, чтоб туда мышку не дергать всё время.
Очень-очень прошу сделать нормальное копирование русскоязычного текста в/из окна пилота и из окна справки, а то уже "немного" раздражают кракозябры после копирования. Не всегда ведь упомнишь, что нужно обязательно язык на русский переключить перед копированием.
З.Ы.: чуток доната кинул )
Там cp 1252, надо вернуть 1251.
if 2
msg 2 истинно
end_if
if 11
msg 11 истинно
end_if
побочный эффект разбора составных условий.
в процессе разбора из каждой пары условий формируется строка типа (1^1)v0, и потом сворачивается до упора.
do_while
switch
добавил возможность выводить в лог выполняющиеся строки скрипта. включается 'set logging commads', выключается 'set logging off'
опечатка commads - n пропущена
меню команд по правой кнопке мыши:
set $w getselectedtext
set $w setselectedtext (text)
что-то забыли в разделе окон
---
Если предлагалось засунуть их в меню Get, то оно логически имхо не очень. Там сейчас находятся остатки от команды Get, которые некуда было запхнуть по смысловому значению, хотя по идее мауспос можно к мыше перетащить.
В принципе это все обсуждабельно.
setlayout - отсутствует
getlayout - в клавишах
---
Обе в клавишах, только сет инвизибленная была
Имхо логически там и должны быть, есть другое мнение?
hint упомянут дважды
---
с разным синтаксисом. с условными операторами таж фигня.
Всем привет.. этот сайт конечно для уо.. но он меня не интересует.. аа конкретно уопилот заинтересовал с онлайн играми... думаю было бы не плохо в другие игры.. сделать тоже готовые скрипты.. и публики будет больше.. например у меня несколько скриптов готовых по рыбалке в соц сетях есть уже
locust19, есть три раздела для https://forum.uokit.com/index.php?showforum=163, https://forum.uokit.com/index.php?showforum=161 и https://forum.uokit.com/index.php?showforum=162.
Если какая-либо игра начнет пользоваться особой популярностью, на нашем форуме, - для неё обязательно будет создан отдельный раздел.
Смысла создавать разделы для 2-3 тем - нет никакого, это лишь усложнит навигацию по форуму.
Хочется иметь возможность задавать координаты центра экрана словом для hint.
И цвет текста, как в html.
hint (12 red centerX centerY [width height] (any text))
set delimiter '^'
set %a[1] 10^20
// хотелось бы:
msg %a[1 1] // 10
msg %a[1 2] // 20
end_script
Возможно дурацкое предложение...
А можно сделать чтобы новая вкладка создавалась с тремя строками:
две пустых, а в последней end_script?
Пожелание: добавить команду очистки массива (удаление всех строк, элементов и т.п.):
set %arr
в советах есть извращенный способ очистки массива. кстати можно на эту тему поковырять недавний функционал с созданием массива фиксированного размера.
Пример работает. Чем поможет фиксированный размер в ситуации с повторным использоваием массива?
пересоздать с нулевым размером, потом создать с необходимым. не крутил. просто идея.
set size (%a) // очистить массив
предложение сделать сетевой обмен глобальными переменными:
1) связываем от 2 до 100500 пилотов по сетке, у каждого будут айдишники.
2) скриптом загоняем что то в глобальную переменную которая не зависит от того запущен скрипт или нет, обращаемся по сети к другому пилоту и считываем у него глобальную переменную, используем ее.
Пожелание: починить работу команд get color, if <коорд, цвет> для работы с неактивными окнами (закрытыми другими окнами). В версии 2.28 они нормально не работают
{ num_4 } в принципе неправильно преобразовывать в num_4 без скобок. но как выяснилось, даже гуру иногда нарушают правила, приходится делать исключения
а извлекать из { num_4 } лишние пробелы, при этом проверяя, чтоб ничего не нарушить, слишком затратно в плане быстродействия.
Кстати, DarkMaster, ты говорил что у тебя есть в общем готовая обновленная инструкция по языку скриптов, но были проблемы с преобразованием ее в компактный формат. Может всётаки сообща допилим этот вопрос?
Я не говорил, что она готовая. В общем хотел завтра но тем не менее.. Вопсчем у нас появилась вика. Беда в том, что у меня времени вообще нет. 2 переезда, переоформление квартир, отправка бабушки в другой город, в общем весело. Щас вытащу шаблончик, напишу пару строк.
Поздравляю!
Там помоему говорилось что проблемы с преобразованием всяких спойлеров итд, но не суть, главное текст вроде был , что вобщем тоже не суть, главное с чегото начать
Я про запарки со временем уже давно перестал сообщать, они то есть, то неожиданно кончаются, то внезапно появляются, так что даже сообщить некогда. Да и большинство всеравно не прочитает об этом, и будут долбиться и обижаться почему им не отвечают
Кнайт, текста нет. Чтобы начинать писать текст, надо было сразу его форматировать. Форматировать у меня не получалось не по-дебильному. Когда получилось дестрашена поймал за язык про вику и двух недельное разбирательство со стилями, форматированием пошло коту под хвост и началось разбирательство с викой.
Во, а говоришь текста нет. Правда не в таком виде, как ожидалось, но все команды забиты, ссылки на похожие есть, из хистори про каждую команду навыдергивано. Это уже очень много сделано. Осталось букавально косметика.
Очень не хватает глобальных переменных, и проверок нажатых кнопок.
load_array работает медленно.
примерно в тот же огород. когда-то шла речь о подвкладках, для создания проектов предполагающих несколько вкаладок без путаницы и проблем. возможно даже дерево... оно актуально до сих пор
if keyboard_check(32) //код пробела
say Вы нажали пробел.
end_if
if keyboard_check(32) and keyboard_check(18) //код пробела и альта
say Вы нажали пробел и альт.
end_if
Ну тогда еще добавлю, что должна быть возможность "прозрачной" и "непрозрачной" проверки:
- прозрачная - код клавиши проверяется пилотом и в любом случае нажатие передается далее в рабочее окно (не убирается из очереди)
- непрозрачная - то же что и выше, но в случае если нажата указанная клавиша, то код клавиши удаляется из очереди и не передается в рабочее окно
Как именно там сделано я не знаю исходников нет.
Задача расчета успеет ли сработать условие на нажатие, зависит от пользователя, то есть (сработало условие)-->(обработка действий) если пока обрабатываются действия произошло нажатие то условие не сработает, что есть не хорошо.
ну сделать этот эвент в виде обычной процедуры или подпрограммы, которая будет вызваться в отдельном либо в том же потоке
:event1 key(^S) parallel // вызов в параллельном потоке
return
procedure event2 key(^2) // вызов в потоке основной программы
end_proc
мысль очень правильная.
Более того в случае запуска копии возникает интересный вопрос с переменными. В ходе работы нескольких эвентов может получиться так, что один изменит значения в расчетах другого(набор переменных то один). Для адекватной работы придется создавать локальные переменные для каждого эвента, делать функцию вывода результата, продумывать каким образом обращаться к переменным из основного скрипта(считывать при входе? - будут устаревшие данные; при обращении? - может исказиться копией эвента). Мороки много. Прорабатывать все эти тонкости имхо берд и сделать чем проще, тем лучше. Запуск нескольких экземпляров можно конечно сделать и в определенных случаях точно хуже не будет, но обращаться надо будет с ним хорошо подумав.
А вот ничего не делать при повторном запуске и очередь очень правильные варианты.
Очень хочется иметь переменные для каждого скрипта, сохраняющие значения даже если скрипт остановлен, чтобы использовать их значения при повторном запуске того же скрипта. При необходимости можно им давать особые имена (##пример или $$пример).
Использование дополнительного скрипта в режиме "Пауза" только для хранения переменных предлагаю считать извращением ))
Пропаганда и преумножение извращенцов )))
А для каких целей это нужно?
Подозреваю что будет совсем неактуально с появлением глобальных переменных.
раз уж пошла речь о глобальных переменных, то может сразу и до локальных доберемся? т.е. возможность объявить локальную переменную для подпрограммы ну и по возможности для циклов.
Не понял, как это должно выглядеть?
Локальные и так объявляются в начале
set #a 1
gosub 1
msg #a #b // результат: #a = 1 #b = 20.
:1
local set #a 10
set #b #a + 10
return
local set #a 10 не затронуло переменную находящуюся вначале скрипта, т.к. она была создана и существовала только в пределах подпрограммы 1.
Ставлю пилот поверх окон - всё отлично.
А когда галочку снимаю - необходимо перезапускать.
в 2до засунул, а там подумаем. от глобальных отличается очень сильно.
Хотелось бы, чтобы появилась возможность сетевого взаимодействия пилотов. Например, есть два пилота которым нужно синхронизировать действия. То есть в моем случае, в одном пилоте иногда меняется значение одной переменной, а второй должен сразу об этом узнать. И наоборот. Можно конечно в теории настроить ftp как сетевой диск и юзать savearray/loadarray на нем, но не уверен что это будет нормально работать на практике. Возможно ли взаимодействие пилотов по ip в будущем?
Наткнулся на один пост, сразу вспомнил про пилот.
>После перезапуска эксплорера не все иконки в трее восстанавливаются
>>Если программа использует трей - она обязана делать RegisterWindowMessage("TaskbarCreated") и затем в оконном цикле это сообщение если получит - то заново пересоздавать свои значки и меню.
set #handle windowfromcursor
set workwindow #handle
:start
set timer
load_array %arr "W:\s.txt"
set #time timer
hint %arr[1,1]|#time
wait 1000
goto start
Докрутить к редактору сворачивание кусков кода.
switch. очень часто изобретаю велосипед из-за его отсутствия...
set #handle windowfromcursor
set workwindow #handle
set $ip 95.66.140.10
set connection (3 ($ip) 80)
set #a #b.3.9
hint #a
stop_script
при запросе выбора значения в prompt хотелось бы иметь возможность вместо "Выберите значение" задать свой заголовок.
Пилот поверх все окон. Нажимаем "сохранить как" и получаем окно, которое перекрыто самим же пилотом. Надоело возюкать его по всему рабочему столу)
ага. особенно то, что пилот нельзя переместить, пока не закроешь окно, которое перекрыто пилотом, который нужно сначала переместить, но пилот нельзя переместить, пока не закроешь окно, которое перекрыто пилотом, который....
Дом, который построил Джек
Пожелание:
Если в качестве приемника ниже указан массив, то записываем в него хендлы ВСЕХ подходящих окон (можно искать только по части заголовка окна):
set %arr FindWindow (World of Warcraft)
потому как переименовывать окна не всегда хорошо.
Кстати, немного кинул "звона" на WMR
было: set logging <текст>
стало: L <текст>
А еще был о бы клево если в промпте с выбором нескольких значений, можно было поумолчанию задавать включен ли чебокс или нет. Это не критично, но было бы куда удобней.
Для примера:
Вместо отлюченых, "Отлключить профессии" и "ОТключить производство", было бы
поумолчанию включенные галки, с "Профессии" и "Производство". Что выглядело бы намного логичей. Да и в текстовом промте, иногда нужно вводить одну и туже фразу, было бы удобней с введенным текстом по умолчанию, или Промпт запоминал последне введенное значение и при сдедующем открытии, В поле ввода уже была введена строка, выделеная синим, тоесть можно начать ввод поновой, а можно просто нажать ОК и введеться строка поумолчанию или последння введенная.
Последнюю версию не проверял, но раньше часто были проблемы при работе с буфером обмена. При попытке чтения/записи часто возникала ошибка-конфликт с другими программами, после которой скрипт останавливался с алертом.
Хорошо бы переделать синтаксис, чтоб сообщения об ошибке не вылетало, а возвращался код завершения: 0 - успешно, -1 - ошибка выполнения операции. Или можно в #rez сразу писать длину полученного/отправленного текста (вместо нуля), так даже лучше будет.
set #rez clipboard Проверка связи
get #rez clipboard $s
Если #rez не указан, то тогда код возврата никуда не пишется.
Подумал над своим предложением...
Такой синтаксис будет противоречить уже существующему...
Тогда уж лучше добавить системную переменную clipboardresult, в которую будет писаться код завершения операции с буфером обмена.
не знаю, было ли такое предложение: в редактор хоткеев добавить еще выбор звука/звукового файла на запуск, остановку, пауза скрипта, сохранение скрина. плюс на остальные по желанию. но эти 4 крайне желательно для обратной связи пользователю
Если сночно нужно, то насколько я помню по моей давней рекомендации, в скрипты могут получать состояние других скриптов! Теоритически, можно написать отдельный скриптик, который будет следить за изменением состояния других скриптов. И проигрывать звуки в случае поимки изменения состояния. Со скрином, правда такое не получится. Тут надо ловить присутсвие файла ,что чуток погромоздней выйдет.
Хотя чтобы так не извращаться, возможно проще выполнить ваше предложение.
Хотя Горячие клавиши у меня попрежнем у срабатывают лишь, когда активно окно пилота, тоесьт никогда. Потому что каждым kleft кликом по игровому окно, он и становиться активным.
У меня тоже все нормально работает. И старт\стоп и пауза.
Какая у вас версия?
Хорошо бы иметь команду типа get WindowFromAbsPos, которая в массив записывает хендлы всех окон, находящихся в указанной точке экрана. В порядке убывания значения TOP. Т.е. 1-й элемент массива - самое верхнее окно, находящееся в указанной точке, 2-й - окно, которое ниже и т.д.
При написании очередного скрипта снова очень сильно захотелось иметь возможность создания и наполнения массива одной строкой:
init_array %массив #число_столбцов <значения для инициализации>
init_array %arr 2 (x1 y1) (x2 y2) (x3 y3)
или
init_array %arr 3 x1 y1 z1 x2 y2 z2
init_array %arr 1 7 8 9 10 11 // будет создан двухмерный массив (все элементы в одном столбце)
init_array %arr 0 7 8 9 10 11 // будет создан одномерный массив (все элементы в одной строке)
где
%arr - создаваемый и инициализируемый массив
2 или 3 - число столбцов в создаваемом массиве
xi yi - значения для инициализации отдельных строк
дык одномерный массив это не строка, а такой же столбец... честно говоря тупо медитировал над написанным. есть подозрения как это должно работать, но уверенности нет...
попробую выразить мысль более пилотовским синтаксисом.
init %arr [1] 1 2 3 4 5 // в первый столбец.
если брать строки, то можно:
%arr [ -5 ] // минусом помечаем, что это строка.
Как с помощью твоего синтаксиса выполнить?:
set %arr [ 5 1 ] 1
set %arr [ 5 2 ] 2
set %arr [ 5 3 ] 3
init %arr [0 2] 11 12 21 22 31 32 // 0 флаг заполнения двухмерного массива, 2 количество столбцов.
кстати можно даже хитрее.
init %arr [x y]
где x указывает номер столбца/строки с которого начинается заполнение, y указывает количество строк/столбцов (ширину/высоту заполняемого куска).
Т.е.
init %arr [2 3] 21 22 23, 31 32 33
init %arr [-3 2] 31 41, 32 42, 33 43, 34 44
Присваиваемые числа равны индексам ячеек для удобства понимания итоговой таблицы. Запятые нафиг, тоже сделал для восприятия.
Не могу проверить наличие переменной в другом скрипте- появляется ошибка с остановкой скрипта:
set #sn 7
if #m.#sn = "" // Ошибка выполнения
msg Переменная не задана
else
msg Значение переменной равно #m.#sn
end_if
end_script
Объявляй переменную в начале скрипта.
в начале скрипта из которого выдергиваешь переменную. статус запущен/не запущен сейчас тоже уже можно вытащить.
а в чем проблема?
2.19
Добавил возможность ссылаться на 'workwindow' из других скриптов.
set #sn 4
set #w workwindow.#sn // ошибка
а я не тестил) просто знаю, что есть.
про массивы
а если ченить типа
set %a 1 2 3 // столбец
set %a [-7] 1 2 3 // конкретная строка
через set оно както проще и привычней
приведенный синтаксис вроде полностью совместим со старыми скриптами.
ммм... тогда либо отсутствует возможность задать начальную позицию столбца либо я чего-то не понял.
наличие [] в строках и отсутствие в столбцах делают очень схожий, но различный синтаксис, который может привести к путанице и ошибкам. Так задумано или где-то что-то опущено/не дописано/является флагом необязательного параметра?
set %a - одномерный массив
set %a[-7] - двухмерный массив
особой путаницы быть не должно
Можно приведенный мной пример отобразить в этом синтаксисе?
init %arr [2 3] 21 22 23, 31 32 33
init %arr [-3 2] 31 41, 32 42, 33 43, 34 44
init %arr [-3 1] 31 32 33 34 35
Присваиваемые числа равны индексам ячеек для удобства понимания итоговой таблицы. Запятые нафиг, тоже сделал для восприятия.
Я чет не догоняю что где и как. Как set %a[-7] указывает на начальную позицию? Как задается количество строк/столбцов?
init %arr 1 2 3 4 // пишет в одномерный (однострочный) массив начиная с 1 столбца. Сколько значений - столько будет элементов.
init %arr[3] 3 4 5 6 7 // пишет в 3-ю строку двухмерного массива начиная с 1-го столбца. Сколько значений, столько и будет столбцов
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)