Пожертвовать на дальнейшее развитие:
Рубли: R849464451336
Гривны: U145931779718
Доллары: Z353114408274
410011422550405
--v.2.32--
Полный вариант из хистори:
Поправил отображение иконки в трэе при запуске пилота.
Переделал меню настроек в формочку.
Добавил новые операторы в подсветку синтаксиса:
CharParam: fireresist
ColorAndCord: desktopheight, desktopwidth, monitor, monitorheight, monitorwidth, screenheight, screenwidth
Function: windowfrompoint
Macros: macro_send
Keyboard: send217
Array: init_arr
Proc: dir, dircreate, dirremove, errorlevel, execandwait, filecopy, filedelete, fileexists, filegetattr, filegetdate, filerename, filesetattr, filesetdate
Msg: log
Other: copy, delete, insert, posex, indexof.
Исправил ошибку в команде 'prompt', из-за которой все, что шло после пустых переменных игнорировалось.
Исправил ошибку повторного вызова команды 'prompt', после остановки скрипта с активным окном промпта.
Добавил логи для каждого скрипта отдельно. По достижении 1000 строк, обрезается до 500. Переключаются при переключении закладок скрипта (при активном главном логе 'M', переключения не происходит), или непосредственно в окне лога.
В связи с этим к команде 'set logging'добавились два параметра:
clear_current - очистить текущий персональный лог
save_current <path> - сохранить текущий персональный лог в указанный файл
Добавил задание диапазона цветов с помощью переменных в команде 'findcolor (725 48 813 123 1 1 (#color2a-#color2b) %Centr2 2)'
Добавил обработку паскалевских коментариев в стиле (* *). Строка должна начинаться с этих символов (пробелы игнорируются).
Исправил падение пилота при удалении закладок, выходе с работающими\остановленными скриптами, работе с процедурами.
Добавил в 'findcolor' погрешность оттенка. Указывается в %. Слегка изменился синтаксис команды.
пример: есть погрешность 3%. точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.
Для учета погрешности оттенка, цвет должен быть указан в скобках, иначе погрешность будет проигнорирована.
'set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type [count [deviation]]] [abs])'.
Починил комбинации с шифтом, типа 'sendex ~{end}'.
Добавил немного информативности в таблицу горячих клавиш для скриптов.
Добавил хинт на иконке в трэе со списком запущенных скриптов. Но его длина ограничена 64 символами.
Слегка поправил указание задержки между строк из скрипта, с помощью переменной 'linedelay'. Приостановка скрипта с помощью кнопки 'Pause' больше не сбрасывает ее на значение по-умолчанию.
Добавил в 'prompt' возможность выводить не нажимающиеся строки (без чекбоксов) с помощью восклицательного знака в начале строки
'set #s prompt (!Test ! Passed)'
Исправил вероятную причину порчи файла настроек.
Добавил в 'prompt' возможность выводить свой заголовок с помощью восклицательного знака, указанного в начале первой строки.
Поправил отправку клавиш в конструкциях типа
set $fishing 10
sendex {F$fishing}
Сделал загрузку скриптов не по порядку, а по номерам, по которым они были при закрытии пилота.
Добавил отображение списка работающих скриптов в панели задач и заголовке окна пилота.
Добавил в 'get color' возможность искать цвет в перекрытых окнах, при указании хэндла подопытного окна. Слегка изменился синтаксис 'get color #color #x #y [handle] [abs]'. При указании сразу обоих необязательных параметров 'handle' и 'abs', точка с координатами '#x, #y' должна попадать в заданное окно, иначе цвет не будет определен и команда вернет ошибку.
Добавил несколько ненужных зарезервированных переменных 'mousepos_x', 'mousepos_y', 'mouseposabs_x', 'mouseposabs_y'.
Добавил функцию определения цвета на экране 'color (#x #y [handle] [abs])', по работе полностью идентична команде 'get color'.
Добавил вычисление функций в условных операторах.
Исправил указание цвета с помощью переменных в конструкциях типа 'set $a findcolor (4, 1 13, 38 1 1 (B(#i)) %watch 2)'.
Добавил несколько ненужных функций обработки вещественных чисел и строковых переменных. Десятичным разделителем считается запятая. Почти все функции при ошибках возвращают '-1'.
abs(x) - Возвращает абсолютную величину x.
round(x) - Возвращает x, округлённый до самого близкого целого числа.
floor(x) - Возвращает x округлённый до ближайшего целого числа, которое меньше x.
ceil(x) - Возвращает x округлённый до ближайшего целого числа, которое больше x.
frac(x) - Возвращает дробную часть x, то есть часть, стоящую позади десятичной точки.
sqrt(x) - Возвращает квадратный корень из абсолютного значения x.
power(x n) - Возвращает x в степени n.
exp(x) - Возвращает e в степени x.
ln(x) - Возвращает натуральный логарифм от x.
log(n x) - Возвращает логарифм от x по основанию n.
sin(x) - Возвращает синус x (в радианах).
cos(x) - Возвращает косинус x (в радианах).
tan(x) - Возвращает тангенс x (в радианах).
arcsin(x) - Возвращает арксинус x.
arccos(x) - Возвращает арккосинус x.
arctan(x) - Возвращает арктангенс x.
degtorad(x) - Преобразовывает градусы в радианы.
radtodeg(x) - Преобразовывает радианы в градусы.
trunc(x) - Отбрасывает дробную часть.
minx(val1 val2 val3 ...) - Возвращает минимальную из величин.
maxx(val1 val2 val3 ...) - Возвращает максимальную из величин.
mean(val1 val2 val3 ...) - Возвращает среднее арифметическое.
point_distance(x1 y1 x2 y2) - Возвращает расстояние между точкой (x1,y1) и (x2,y2).
point_direction(x1 y1 x2 y2) - Возвращает угол (в градусах) между осью X и вектором с началом в точке (x1,y1) и окончанием в точке (x2,y2).
lengthdir_x(len dir) - Возвращает горизонтальный x-катет вектора определённый указанной длиной и направлением.
lengthdir_y(len dir) - Возвращает вертикальный y-катет вектора определённый указанной длиной и направлением.
is_real(x) - Возвращает 1, если x число.
is_string(x) - Возвращает 1, если x является строкой (не число).
chr(val) - Возвращает символ с ASCI кодом val.
ord(str) - Возвращает ASCI код первого символа в строке str.
string_replace(str substr newstr [all]) - Возвращает строку str, в которой встречающаяся подстрока substr будет заменена на подстроку newstr.
string_count(substr str) - Возвращает число, показывающее, сколько раз подстрока substr встречается в строке str.
string_lower(str) - Возвращает строку str, записанную маленькими буквами.
string_upper(str) - Возвращает строку str, записанную большими буквами.
string_letters(str) - Возвращает строку str, выбрасывая из неё все числа.
string_digits(str) - Возвращает строку str, выбрасывая из неё все буквенные символы.
Pi - 3,1415926535897932385.
Добавил возможность ожидать завершения запущенного скрипта в команде 'start_script <number> [wait]'. Соответственно слегка изменился синтаксис.
Добавил возможность редактирования скрипта в режиме паузы.
Добавил растягивание по горизонтали таблицы отображения переменных (только последней).
Исправил непропечатывание некоторых символов в начале сообщения команды 'log'.
Добавил возможность запускать\при\останавливать скрипты по названиям (по именам файлов). Сначала ищем по номерам, если не нашли, то обрабатываем первый найденный по имени. Слегка изменился синтаксис.
Добавил горячую клавишу для запуска всех скриптов.
Добавил в 'findimage' возврат конечных координат найденной картинки в третьем и четвертом элементе возвращаемого массива.
Исправил ошибку присваивания переменных существующим, но не запущенным скриптам.
Исправил сползание переменных в таблице отображения переменных, при определенных условиях.
Мелкие визуальные исправления в редакторе хоткеев для скриптов.
Добавил горячую клавишу, позволяющую переключать отображение хода выполнения скрипта "ShowScriptProcessing".
Добавил отображение хендла окна к которому привязан активный скрипт, в правом нижнем углу окна скрипта.
Исправил ошибку при зажатии горячей клавиши запуска скрипта.
Добавил подсказку в скрипте по синтаксису введенной команды. Отображается тамже, где и имена файлов скриптов.
Исправил ошибку появления окна сохранения скрипта под окном пилота.
Добавил вывод в скобках значений переменных после их имен, для команды 'set logging commands'
set #a #a + #b * %arr [ 2 #c ] // set #a(5) #a(5) + #b(8) * %arr [ 2 #c(11) ]
Добавил возмозность выбрать способ вывода сообщений (команды 'msg', об ошибках итд). При выборе варианта 'Hint', почти все сообщения выводятся в виде всплывающей подсказки, вместо диалогового окошечка с кнопкой ОК. При возникновении ошибки, ранее прерывавшей выполнение скрипта, прервется выполнение текущей команды и скрипт продолждится со следующей строки. Третий вариант отличается от второго отсутствием всплывающей подсказки. Имеется также возможность все выводимые сообщения дублировать в лог.
Исправил инфинитный луп, при вычислении выражений, когда значением переменной являлось ее имя.
Подправил малость ошибку в вычислении пути к сохраняемому\загружаемому скрипту.
Добавил функцию вычисление дня недели 'dayofweek (Year Month Day)'.
Если скрипт прикрепили к другому окну, то немедленно (со следующей строки скрипта) будем работать на новое окно. Относится к старым командам типа 'if #x #y #color'.
Добавил несколько ненужных зарезервированных переменных обозначающих цвет: 'clAqua', 'clBlack', 'clBlue', 'clDkGray', 'clFuchsia', 'clGray', 'clGreen', 'clLime', 'clLtGray', 'clMaroon', 'clNavy', 'clOlive', 'clPurple', 'clRed', 'clSilver', 'clTeal', 'clWhite', 'clYellow'.
Добавил несколько зарезервированных переменных для игры UO, позволяющих изменять соответствующие параметры: 'ShowNames', 'Transparency', 'PathFinding', 'CriminalActions'.
Добавил функцию 'eval (some arguments)', собирает всё что в скобках в одну строку и подставляет вместо себя.
Аналогичная команда теперь тоже требует скобок.
В меню "Скрипт" добавил пункт "Запустить\остановить текущий скрипт".
Слегка увеличил и выделил кнопочку с "определенным" цветом на закладке 'Scripts'.
Добавил функции разложения цвета:
'colorToRed (color)' - возвращает значение красного канала указанного цвета
'colorToGreen (color)' - возвращает значение зеленого канала
'colorToBlue (color)' - возвращает значение синего канала
'colorToRGB (color %arr)' - разлаживает цвет на составляющие в первую строку указанного массива
'colorToRGB (color %arr[x])' - то-же, но в конкретную строку // %arr [ 1 1 ] R, %arr [ 1 2 ] G, %arr [ 1 3 ] B
Научил функцию 'minx' и 'maxx' искать минимум и соответственно максимум в массиве.
'minx (%arr [1])' - возвращает минимальное значение конкретной строки массива
'minx (%arr)' - возвращает минимальные значения всех столбцов массива в формате '1|2|3' (для присваивания массива пачкой), т.е. в первую строку нового массива.
То же самое про 'maxx', только наоборот.
Подправил отправку русского текста командой 'sendex'. При активной английской раскладке в пилоте, нифига не печаталось.
Добавил новые операторы в подсветку синтаксиса
Mouse: mousepos_x, mousepos_y, mouseposabs_x, mouseposabs_y
Function: abs, round, floor, ceil, frac, sqrt, power, exp, ln, sin, cos, tan, arcsin, arccos, arctan, degtorad, radtodeg, trunc, pi, minx, maxx, mean, mod, point_distance, point_direction, lengthdir_x, lengthdir_y, is_real, is_string, chr, ord, string_replace, string_count, string_lower, string_upper, string_letters, string_digits, dayofweek, eval
Other: iniwrite, iniread, regwrite, regread, write
ColorAndCord: claqua, clblack, clblue, cldkgray, clfuchsia, clgray, clgreen, cllime, clltgray, clmaroon, clnavy, clolive, clpurple, clred, clsilver, clteal, clwhite, clyellow, colortorgb, colortored, colortogreen, colortoblue
CharParam: shownames, transparency, pathfinding, criminalactions.
Добавил проверку на круглость скобок в команде 'init_arr'. Сообщение выводим, но выполнение не прерываем.
Исправил обязательное наличие пробела перед скобками в команде 'init_arr'.
Добавил вывод в скобках значения элемента массива после его имени, для команды 'set logging commands'.
Добавил вывод значения переменной после присваивания в команде 'set', при включенном 'set logging commands'. Выводится отдельной строкой.
Добавил функции для обрезки пробелов и служебных символов в строке 'ltrim (string)', 'rtrim (string)', 'trim (string)'.
http://uopilot.uokit.com/dl.php
Прикрепленные файлы
uopilot_232_frost.rar ( 683,93 килобайт )
Кол-во скачиваний: 5264
Ничего себе! Спасибо!
апдейт... кхм... хороший... дальше много не цензурных радостных выражений...
соглашусь с предыдущими ораторами : нигого себе ))
это теперь операции с плавающей точкой имеются ?
а какие минимальные и максимальные значения у движка ?
Имеются функции работающие с плавающей точкой, но движок в 2,32 целочисленный, поэтому обработка результатов функций пока не очень удобна для пользователя. То-же сложение\вычитание пока затруднено.
Следующая версия в настоящий момент в стадии легкого тестирования после переделки с целочисленного на плавающий.
Тип будет Double, поддерживает приблизительно 15 цифр точности в диапазоне от 2.23 x 10**-308 до 1.79 x 10**308.
кстати почему-то думал, что оверлей реализован. Я что-то упустил или куда чего как?
Небудет, потому как запятая.
Не, не реализован еще, не могу понять как его просто выводить, обычно он вместо какогото цвета выводится. Видимо пример не удачный попался.
Скрипт на таминг, в 2.31 работает стабильно, 2.32 на строке
while_not (lastmsg skill) or (lastmsg beef) or (lastmsg broke) or (lastmsg can't) or (lastmsg hungry) or (lastmsg fail) or (lastmsg alredy) or (lastmsg away) or (lastmsg master) or (timer > 30000)
выдает ошибку
попробуйте проставить синтаксис:
while_not (lastmsg <= skill) or (lastmsg <= beef) or
ну и скобки бы я вплотную не лепил.
Так как вы предложили выдает Syntax Error (Exp1)
о как. а если сделать выше
set $message lastmsg
и сравнивать как я предложил, но только уже с $message ?
кстати я бы так же рекомендовал заменить все фразы переменными. Особенно "can't". Использовать одинарную кавычку в сравнении - просить приключений.
Тогда прийдеться прописать в начало все нужные слова $. а $msg <= текст оно не поймет, только $ <= $
Похоже прийдется остаться на версии 2.31, а я так надеялся что наконец-то закончаться вылеты пилота
Я вас понимаю. Я лишь предлагал вариант решения. У меня изначально везде в сравнениях переменные, чтобы не ловить потом сюрпризы. И вам на будующее рекомендую.
deviation в findcolor не работает
https://forum.uokit.com/index.php?s=&showtopic=22116&view=findpost&p=180616
в новом пилоте заметил, что если копировать с ворда подготовленый скрипт, то выдает ошибку и не вставляет, а если с блокнота то все норм. Полазил в настройках, но ни чего по кодировкам не нашел, это у меня только так или можно как то переключить, что бы вставлять скрипт с ворда?
Запускаем пилот, в заголовке жмем кнопку "развернуть" - видим левые поля и окошки )
Что-то мне подсказывает, что выглядеть это должно было не так. Может имеет смысл использовать уже отработанную таблицу:
действие клвиша1 клавиша2?
у нас будет:
название_скрипта start/stop pause
Должно быть и проще с реализацией без миллиона полей. Что-то вроде:
Можно сделать еще третий столбец вкл/выкл, но нужно ли? Не нужно - удалил хоткей и все.
Ну тут хотя бы кусок был виден. Сейчас сетка какая-то странная. Оставь ты 3 колонки: название, старт, пауза. Можно вообще вклдакой сделать отдельную форму, чтобы все нормально влазило.
Включение выключение некощерно будет, оно и так там сечас глючит в текущей версии, а так есть крестик - включено, нету - сответственно. Подправить бы надо...
У меня постоянно вот такая ошибка вылазиет "access violation at address 00460fcc in module uopilot. Read of address 00000048" Она конечно не особо мешает жмешь ок и программа работает, но хотелось бы знать что это?
Когда проводишь мышкой через нижнюю границу окна пилота? Пикселей на 20 уменьшь или увеличь размеры пилота, перестанет выскакивать. Долго выяснял почему...
Ага помогло спасибо
Пауза скрипта(ручками), потыкать кода не изменяя, прокрутить, вызывает ошибки интерпретации for.
Это вероятно связано с тем, что после паузы выполнение продолжается с той строки в которой стоит курсор.
Подумаем.
Теперь даже на простой строке if_not lastmsg water вылетает ошибка. Это полный абзац
Исправлено. Сломалось из-за функций в условиях, ластмсг вычислялось раньше чем задумано по приведенному синтаксису.
Но это уже следующую версию ждать?
Дык...
Может получится багфикс сделать из 232, это проще чем в 233 отключать то что сейчас ковыряется.
скрипт поставленный на паузу через pause_script не поддается редактированию.
при переключении вкладок открываются верхние строки лога, приходится каждый раз мотать.
хз как так вышло. Когда пришел увидел в логе:
end_repeat - Ошибка интерпретации скрипта (end_repeat).
Опять были проблемы с кодировкой при вставке лога на форум/аську и т.д. Используется CP1252, надо CP 1251.
Сожрал 180 метров памяти и 1.2 гига фала подкачки. Findcolor/findimage НЕ использовались. Самое сомнительное, что использовалось - for, while, gosub из for, логи.
фор, госуб - запись, в смысле структура интегер и строка, вайл вообще без дополнительных примочек, логи - обычный мемо, подчищается, чтоб содержал не белее 1000 строк.
Абсолютно не понятно. Мож массивы? они память с резервированием юзают, и просто так не освобождают.
кстати на форуме чето подковыряли, после того как я сделал нормальную вставку в пилот примеров кода. теперь как минимум много лишних переводов строк при копировании.
массивы есть, но они полностью статичные. Используются только как списки, объявляются в шапке скрипта, в теле не изменяются.
По поводу форума баг не понял. Точнее не смог воспроизвести. Копировал из пилота на форум и с форума в пилот. Все копировалось корректно. Уточни в чем проблема, поговорю с Wap'ом.
Лучше воспроизведи баг не с форумом, а со скриптом, оно полезней
а с форума стало копироваться так
DarkMaster
Сегодня, 13:16
Сообщение #41|
Модератор UOPilot
Сообщений: 2.394
Регистрация: 1.12.2008
Группа: Супермодераторы
Наличность: 8315
Пользователь №: 11.279
Предупреждения:
(0%)
массивы есть
Воспроизвести баг из скрипта на 600 несколько проблемотично, учитывая полную примитивность конструкций.
А почему не быть благодарными то? Получено очень много очень нужных фишичек. Или тебя огорчает отсутствтвие доната? Двусмысленные кавычки ты поставил)
Багфикса ждать. Это куски от разработки не убраны.
Если в лог отправляется переменная после точки(не в плотную), то она выводится в виде имени. Скорее всего связано с тем, что лог пытается найти скрипт с индексом. Пример строки из лога:
Загружена база логинов. Размер #sizeLogin
А можно узнать у разработчиков, какой алгоритм использует FindImage сейчас?
Я пишу сам себе подобное ПО, не адаптированное под UO, для личного пользования, интерес чисто профессиональный.
Алгоритм, как ни странно, взят с этого форума, гдето пробегал в свое время. Выковыривать его из пилота сейчас нет ни времени ни желания, букаф там много...
Похоже баг в findcolor:
https://forum.uokit.com/index.php?s=&showtopic=22116&view=findpost&p=180627
Уже исправлено. При задании диапазона вместо конечного значения портилось начальное. При копи\пасте пропустил пару буковок...
Ох едрёна кочерышка!!! сколько всего....
Половины даже не понял, о чем вообще речь)))
Яндекс и Мани хорошо, а кошель в киви реганите если не составит труда особого
Не смог заставить работать string_replace. Можно привести рабочий пример?
set $s Маша мыла раму
set $f string_replace ( $s мы би )
msg $f
end_script
Ага, бага есть, пробелы в строках не любит. Если без нелегальных символов строки, то нормально работает. Подправим.
Абсолютно точно то, что есть утечки.
Пока не знаю где.
Но мой скрипт что в 2.31, что в 2.32 наедает за 20-30 минут 2 гб оперативки и привет прекращение корректной работы findimage, а затем 3315.
И что удивительно, остановка скрипта не сбрасывает наевшую память. Запускаю снова скрипт, память продолжает расти с оставшегося кол-ва после остановки.
Очень большая просьба к вам. Максимально уменьшите скрипт с сохранением утечки. Так же приложите скриншот(ы) и изображения для необходимой эмуляции работы скрипта. Чем меньше будет скрипт, тем быстрее и с большим шансом будет найдена причина. За этим багом уже бегаем очень давно, не можем поймать.
ааааааааааааааааа, нашееееееееееел!!!!!!!! фантастика!!!!!!!! расскажу - не поверите.
Хотите набрать пилоту за пару секунд 2 гб всего одной командой?))
я научу))
Пишем в скрипте:
set $test1 findimage (0 0 1600 900 (c:\images\test1.bmp) %crds 2 100 -1)
wait 1000 // обязательно добавьте задержку, а то комп взорвется))
Путь и координаты для поиска можно указать любое, но чем больше диапазон поиска, тем сильнее набегает память.
А теперь самое вкусное)
Берем картинку, например test1.bmp как указано в скрипте.
картинка, например 20 на 10
используем например 3 цвета - 1 фон, второй и третий цвет.
Если от 0 до 19 по иксу и от 0 до 9 по игрику(как в пейнте), то
первый - фон - любой цвет
второй - любой возьмите цвет, отличный от фона и закрасьте пикселы:
[7 0] [7 1] [7 2] [4 3]
третий - ВАЖНЕЙШЕЕ УСЛОВИЕ - нулевой цвет! т.е. черный, именно под номером 0(это самый черный).
закрашиваем им [12 6] [13 6] [14 6]
всё! можно приязывать к любому окну, можно не привязывать вообще, открывайте диспетчер задач и наслаждайтесь!
Если рисовать картинку совсем лениво - качайте - http://zalil.ru/34088314
приятного взрыва!
Нет, рыцарь я, ты просто джедай
Кстати есть подозрение что из-за этих косяков не работал финдимидж в перекрытых окнах.
Запустил. Пилот честно загреб 2 гига.
Закрыл.
Запустил под отладчиком. Работает как часы, 10 метров +-.
Запустил без отладчика. Работает как часы.
Перезагрузил комп. Работает...
Больше добиться 2х гигового эфекта для анализа не получается...
Мелкий момент выяснить конечно удалось за время первого запуска, но этого очень мало...
set #result setwindowtext (#handle $windowName)
не воспринимает массив в качестве #handle
set $windowName %account [ #windowN 1 ] $formatedTime
set #handle %clientHandle [ #windowN ]
set #result setwindowtext (#handle $windowName)
работает
set $windowName %account [ #windowN 1 ] $formatedTime
set #result setwindowtext ( %clientHandle [ #windowN ] $windowName)
не работает
Новая версия не намечается? Замучился писать в 2,32, потом портировать в 2,17. Сейчас нужен send_down, а в 2,17 его нет, запускать два пилота и как-то слеплять их вместе это уже перебор.
Она давно намечается, но как я понял, точно не в этом году, завалили работой, как обычно под конец года. Плюс к этому я расковырял пилота, а обратно собрать некогда. Ну и еще один довольно неприятный момент, о котором ты вкурсе...
Кстати финдимидж еще откладывает выпуск новой версии, опятьже некогда ковырять...
colorToRGB Неопознанная команда.Что сделать чтобы работала?
Это функция. Она возвращает значение.
добавил описание на UOWiki
http://uopilot.tati.pro/index.php?title=ColorToRGB
#цвет - числовое значение 24-битного цвета, который нужно разложить на каналы RGB
а почему 24 бита то? У нас же ргб нормально работает в диапазоне 0-255 - 32 бита может все-таки?
Анализируются только младшие 3 байта, остальное игнорится. Т.е. по сути 24-32 неважно.
Любопытная штука,если переключение языка ввода поставить левый алт + правый шифт то пилот частенько виснет и не лечится ни чем кроме как "снять задачу" при комбинации же контрол+шифт ни разу не замечал...по моему есть какая то связь.Возможно об этом было написано уже,тогда сорри
Комбинация левый алт + правый шифт стоит по умолчанию после установки ХРюши,второй вариант на выбор это контрол +шифт.Я уверен почти на сто процентов что она как то влияет потому что как только переставил на контрол+шифт,виснуть перестал.Может гдето в горяих клавишах пилота по умолчанию стоит эта комбинация и конфликтует,но у меня горячие клавиши отключены,только две работают Ф3 стартует/стопарит скрипт и Ф4 останавливает все скрипты.
Я молился что бы эта конструкция сработала:
set $bmp .bmp
set $path35 c:\images\
set %lvl[3] 2lvl
set #lvl 3
for #i 1 2
set $vstupit findimage (#startX #startY #endX #endY ($path35%lvl[#lvl]#i$bmp) %crds50 2 100 -1)
set logging $vstupit
end_for
Советую так не делать. Сделай чуть выше присвоение тестовой переменной и не насилуй функцию. Повышается читаемость, гибкость, стабильность. Цена: лишняя строчка.
мною замечены такие странности тоже,напишешь скрипт,в первый раз не работает,может и во второй не сработать,разные ошибки выдает,то синтаксис то еще че,но почему то с третьего раза срабатывает и потом работает норм,хотя ничего не меняю а просто запускаю скрипт снова..
set $test findimage (#startX #startY #endX #endY (c:\test.bmp) %crds 2 100 -1)
if $test > 0
set #x %crds[1 1] + 5
set #y %crds[1 2] + 2
kleft #x, #y
end_if
:na4alo
for #i 1 5
gosub na4alo
end_for
:na4alo
return
for #i 1 5
set logging ушли в начало
gosub na4alo
set logging вернулись и завершаем цикл принудительно
break
end_for
set logging корректно завершили цикл
end_script
баг с параметром all:
set $a 1.800.900
set $b ""
set $c "."
set $s string_replace ($a $b $c all )
msg $s // 1all800.900
end_script
set $s string_replace ( мама да ма )
msg $s
end_script
Скажите пожалуйста кто нибудь что это такое "Ошибка выполнения скрипта 3315" и где искать причину?
Неплохо бы увидеть код.
Я не совсем понимаю какой код,эта ошибка вылезает наталкиваясь на файндколор но не регулярно а как получится,в логе ничего не фиксируется,просто под окном пилота выскакивает эта надпись на желтом фоне и скрипт останавливается.
вот кусок скрипта на котором он застревает,на втором файндколоре
set $total findcolor ( #z,#y #p,#j 41 41 #color %x 2 )
set logging $total
set #r $total
set #y26 #y + 26
repeat #r
set $total findcolor ( #z,#y #p,#j 41 41 #color %x 2 )
set logging $total
set #r $total
if #r < 1
// set #w #y + 41
// set #y26 #y + 26
goto 99 // konec !
end_if
существует и то и другое,ща выложу все действующие строки чтобы не было вопросов,а насчет
set #r $total
if #r < 1
все работает норм,просто скрипт немного решил переделать,в принципе где ошибка я понял,но из за нее скрипт останавливаться не должен,он просто должен делать не совсем то что нужно,но делать..
:start
set $total findcolor ( #z,#y #p,#j 41 41 #color %x 2 )
set logging $total
set #r $total
set #y26 #y + 26
repeat #r
set $total findcolor ( #z,#y #p,#j 41 41 #color %x 2 )
set logging $total
set #r $total
if #r < 1
// set #w #y + 41
// set #y26 #y + 26
goto 99 // konec !
end_if
end_repeat
goto start
:99
закомментинные строки это те которые участвовали в скрипте до переделки,после нее они не нужны,но чтобы не забыть где они были я их не стираю.
То есть в начальном виде скрипт работает безупречно,даже не ожидал,правда изредка выскакивает ошибка с памятью,пока не совсем понял причины,но заметил что она чаще выскакивает когда курсор проходит край окна пилота,может в этот момент какой то "лефт" срабатывает,короче это пока терпимо.
не заработал,все та же ошибка скрипта,пока не могу понять почему,мне просто хотелось бы знать значение ее,тогда проще было бы найти причину.Где то есть описание ошибок?Или эта цифра от винта??
https://forum.uokit.com/index.php?s=&showtopic=24880&view=findpost&p=179393
это я уже читал,понятно,попробую разобраться.
Баги с логами.
set %abil_ataka[1 6] test
set #abil_ataka 1
set logging нашли абилку %abil_ataka[#abil_ataka 6] - кастуем
set %abil_ataka[1] test
set #abil_ataka 1
set logging нашли абилку %abil_ataka[#abil_ataka] - кастуем
set #hp 100
set logging ищем кнопку "вперед" Наши хп #hp%
end_script
Нашел ещё несколько багов.
Не знаю что хуже, то что перешел на 2.32, то что в 2.32 присутствуют баги из-за которых не работает часть скрипта или то что не перешел раньше, что бы обнаружить баги раньше, да бы их поскорее исправили(
Вообщем
1)
Только в версии 2.32
2) Числовая переменная в номере массива не позволяет найти картинку.
set #startX 0
set #startY 0
set #endX 1280
set #endY 1024
set %bazariki[1] проход
set %bazariki[2] проход2
set %bazariki[3] назад
set %bazariki[4] 3чек
set %bazariki[5] базару_конец
set $bazariki findimage (#startX #startY #endX #endY (c:\images\объекты\охранница\%bazariki[5].bmp) %crds13 2 100 -1)
set logging нашли на $bazariki% // всегда 100%
for #baz 1 5
set $bazariki findimage (#startX #startY #endX #endY (c:\images\объекты\охранница\%bazariki[#baz].bmp) %crds13 2 100 -1)
set logging нашли на $bazariki% // - всегда -1
if $bazariki > 0 // Никогда не найдем
msg uspeh
end_if
end_for
set #baz 5
set $bazariki findimage (#startX #startY #endX #endY (c:\images\объекты\охранница\%bazariki[#baz].bmp) %crds13 2 100 -1)
Скажите пожалуйста,можно ли как то сделать так чтобы при "Скрипт >Открыть" или "...Новый" окно со списом файлов и окно с "Вы уверены тра ля ля.." всегда были поверх всех окон,в том числе и скриптового?Я исковырял все настройки вроде поснимал/поставил галки,но проблема не ушла,сначала вроде норм,но через какое то время при проделывании такой операции эти окошки оказываются за основным и их никак оттуда не достать, а "Снять задачу" очень неудобно потому как все что не сохранено летит в "туда",хотя итак сохраняюсь почти после каждой строки.Второе это имя файла в логе,подумал вроде надо,и поставил галку в "Отображать имена файлов скриптов",правда я думал это несколько другое,но теперь рад бы убрать из лога да вот никак.И третье,когда добавляю новые вкладки то иногда из предыдущей вкладки бывает исчезает либо все,либо последние изменения.
версия какая? если я правильно понял о чем вы, то это было исправлено.
По второму изображению в курсе. По поводу перекрытия потыкаю, посмотрю. Кажется понял в чем проблема. Я уже просто автоматом ентер прожимаю.
Access violation at address 00460FCC in module "uopilot_2.32.exe". Read of address 00000048.
Чуть-чуть измените размер окна. Фикс будет в следующей версии.
Хахах.. Вот это прикол блин!
Все баги что я выше написал, это всё один и тот же баг.
Везде фигурирует неопределенное число от 17 до 20 . В данном случае, именно 20 символов допустимое число ПЕРЕД считыванием числовой переменной.
Т.е. вот так всё ок:
set $bazariki findimage (0 0 100 100 (c:\images\объекты\%bazariki[#bak].bmp) %crds13 2 100 -1)
set $bazariki findimage (0 0 100 100 (c:\images\объекты\охранница\%bazariki[#bak].bmp) %crds13 2 100 -1)
видимо и недавний прикол с невосприятием папки рабочего стола из той же песни.
не зря у меня мозг стал противиться предложенным версиям. полез откатывать вику.
16:44:03 : find mistake 3375
16:44:03 : -1
16:44:04 : -1
16:44:06 : find mistake 5703
16:44:06 : -1
16:44:06 : -1
// в этот момент я свернул браузер к которому привязан пилот.
16:44:07 : find mistake 6984
16:44:07 : 0
16:44:07 : 0
16:44:07 : find mistake 7093
16:44:07 : 0
16:44:07 : 0
16:44:08 : find mistake 8375
16:44:08 : 0
16:44:08 : 0
16:44:09 : find mistake 8937
16:44:09 : 0
16:44:09 : 0
16:44:09 : сделали Ф5 в месте
// Послали send {F5} и браузер по прежнему свернут.
16:44:18 : find mistake 1719
16:44:18 : -1
16:44:18 : -1
16:44:20 : find mistake 3875
16:44:20 : -1
16:44:20 : -1
Перестало работать:
if lastmsg mss-hh8
так тоже не работает:
if lastmsg <= $a
Ошибка! проверьте правильность скрипта! EConvertError 'hours' is not a valid integer velue
set $tmp GetSelectedText
всё-таки багует.
Не копирует в буфер из ИЕ и Хрома (остальные браузы не смотрел).
Зато успешно работает в блокноте и подобных окнах.
getwindowpos не возвращает статус выполнения...
https://forum.uokit.com/index.php?s=&showtopic=25454&view=findpost&p=184397
32 тупит
Вроде ошибка
set %m[2 1] $s * 5
set $q %m[2 1]
set $s 10
set #q $q
set %m[2 1] #q
msg %m[2 1] // результат 50
set %m[2 1] $s * 5
set $q %m[2 1]
set $s 10
set #q %m[2 1] // ошибка - символ не распознан
set %m[2 1] #q
msg %m[2 1] // до результата не доходим
Это вообще фича, что первый случай работает. Это получилось когда-то случайно, специально этого не делалось. В массиве информация скорее всего сохранена чуть иначе(самим пилотом).
народ помогите пожалуйста, мне надо чтоб пилот кликал в 1 место в л2 на офф сервере, можете подсказать как должен выглядеть для этого скрипт если можно то образец напишете например чтоб кликал в центр окна, а то я не хрена не могу понять почему он не кликает
на оффе л2 пилот не работает.
Вопросы:
1) с фростом пилот работает?
2) если нет то зачем тогда обновляется версия ( uopilot_232_frost)?
3)если да то работает полностью или есть какие-то ограничения и какие?
(Все это по RO )
зашол в цикл и немогу выйти,
нужно в паузе узнать значение переменной,(найти где напартачил)
ка узнать?
эх жаль что на оффе не работает а то в ручную заколебался сосы крафтить)
а тогда можно выложить самый простой скрип чтоб пилот тыкал левой кнопкой мыши в небольшой квадрат??
зарание спс
как, вывести MSG на определенное время, чтоб оно само закрылось и прогамка пошла дальше?
или выводить в лог не все типа
log close
log clear
log open
log commands
а крнкретную строку
не поверите... log строка
только осваиваю сие чудо))))
стесняюсь спросить, что значит относительные координаты точки и абсолютные, в чем разница, в одной точке разные показания
случайно заметил одну особенность , обьясню процес чтоб понятней было
UO следит за графикрм в определенном диапозоне и если гравик меняется то в лог выводит куда,
а заметил то что открывая другое окно по верх графика UO всеровно следит за графиком , вижу по логу
что очень понравилось что можно заниматся чем нибудь другим и не боятся что будет сбой,
вопрос, можно сделать так чтоб можно было такженажимало на окошки в этом графике если по верх другое,
тоесть там логика при неком событии графика нужно выполнить некое действие?
абсолютные\относительные - это координаты экрана\окна.
для клика в неактивном окне следует привязать скрипт к нужному окну (см. set workwindow...) и использовать команду left
Полезые советы, 1-й пост и далее
Вообще эта тема скорее баги отписывать. Давайте отсюда переезжать потихоньку. Не бойтесь создать новую тему - не укусит).
Как я понял Pathfinding выдает только что он произошел или нет.
При set #x Pathfinding, #x выдает 0, а когда Pathfinding произошел, выдает 1.
Нельзя ли задавать конкретные перемненые для пазфайнда, чтоб чар бежал в это место, будто я сам кликнул дважды мышью.
Это позволит автоматом обходить любые препятствия, даже дома в полэкрана.
Совсем не сложно из charposx charposy lasttargetx lasttargety вычислить точную координату клика мышью, но кликнуть дальше экрана никак не получается.
Переменная PathFinding только включает\отключает\отображает соответствующую настройку в клиенте, также как и остальные 3 - ShowNames, Transparency CriminalActions.
Т.е. если сделать Set PathFinding 0, то по правому даблклику чар не будет бегать куда попало.
не отнять, а прибавить в моем случае. Потом очень удобно считать азимут 420 градусов масштабируя на шкалу от 0 до 6,28(с точкой).
У меня скоро крыша уже поедет... В игре ось Х идет справа налево...
Короче мне перерыв пора сделать. Уже на ерунде какой-то тупить начинаю.
есть координаты 300, 300
как програмно сделать их переменныпи?
суть, есть квадкад определенного цвета, навожу курсор куданить в квадрат, жму гтр/а вставляю эти координаты в шапку и нужно узнать координаты краев квадрата, как сделать?
или лудше чтоб координаты вставлялись по клику пк.мышки
Тем не менее я за отсчет от оси Y. Ну везде север/верх это 0.
Такая проблема:
wait 4s
send f6 200
if lastmsg <= have
set #c #c + 1
if #c = 20
pause_script
end_if
move 837, 458
left 837, 458
wait 2s
set #s string_digits (lastmsg)
set #s #s - 1
move 837, 460
drag 837, 460 292, 242 #s
move 370, 228
drag 370, 228 817, 229 500
end_if
Пока перечитывал новое по пилоту, выскочил еще один баг.
При закрытии окна пилота бесконечно выскакивает следующая ошибка:
Устраняется только килом пилота в диспетчере задач.
Пилот устойчиво вываливается с ошибкой на таком скрипте при попытке послать символ ` в окно Блокнота
wait 1000
send `
end_script
Ок, уговорили, непосылаемым это одно, а вылет это надо фиксить
Сегодня снова выскачила ошибка на integer value, в скрине есть вся информация.
Извиняюсь за качество скриншота. Скрин был сделан с удаленного раб. стола в котором была открыта виртуальная винда.
По вопросу, что такое Have, это одно слово из выскакивающей фразы You can't ... much have. Пишет такое, когда кончаются ресурсы для изготвления изделия. Так же я пробовал со словом can. Скрипт также недолго работает и выдает ошибку.
Информации много, но не вся, что в этот момент было в журнале? Точнее текст той самой lastmsg.
простите за много строчек но натолкнулся на глюк, и ничего сделать не могу.. привожу скрипт полностью..
при запуске выдаёт ошибку "строка 64 символ не распознан", но стоит прописать на строчке выше "msg 1" как ошибка пропадает... но приходится всё время жать на ок ...
проверял все переменные все они есть, никаких виясков нет, всё чётко...
//set #g findcolor (0 0 500 500 1 1 (2443151) %a 2 1)
set %a[1 1] 128
set %a[1 2] 116
set %a[2 1] (%a[1 1] + 37) * 2
set %a[2 2] (%a[1 2] + 51) * 2
:start
gosub getcolor
gosub x6
gosub y6
gosub x4
gosub y4
goto start
end_script
:getcolor
set #af %a[2 1] + 872
set #bf %a[2 2] + 872
for #b %a[2 2] #bf 109
set #y #b / 2
for #a %a[2 1] #af 109
set #x #a / 2
get color #c #x #y
set %m[#a #b] 0
if #c = 2957780 or #c = 3614169 or #c = 2102719 or #c = 3155374
set %m[#a #b] 1
end_if
if #c = 6480639 or #c = 6676990 or #c = 5760767 or #c = 5629182 or #c = 0 or #c = 0
set %m[#a #b] 5
end_if
if #c = 6807532 or #c = 7790574 or #c = 7987695 or #c = 2345699
set %m[#a #b] 20
end_if
if #c = 12320641 or #c = 12776559 or #c = 12254849 or #c = 12189056 or #c = 12320384
set %m[#a #b] 100
end_if
if #c = 9661440 or #c = 8806912 or #c = 11767296 or #c = 11504128 or #c = 0
set %m[#a #b] 500
end_if
if #c = 14388009 or #c = 14519338 or #c = 14453545 or #c = 14255399 or #c = 0 or #c = 0
set %m[#a #b] 1000
end_if
//if %m[#a #b] < 1
//move #x, #y
//msg #c
//end_if
end_for
end_for
return
:x6
set #xm %a[2 1] + 763
set #ym %a[2 2] + 872
for #ly1 %a[2 2] #ym 109
for #lx1 %a[2 1] #xm 109
set #lx2 #lx1 + 109
set #lx3 #lx1 + 218
set #ly2 #ly1 + 109
set #af1 (#lx1 - 109) / 2
set #af2 #lx1 / 2
set #af3 (#lx1 + 109) / 2
set #bf1 (#ly1 - 109) / 2
set #bf2 #ly1 / 2
set #r %m[#lx1 #ly1] + %m[#lx2 #ly2] + %m[#lx3 #ly1]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af2, #bf2
wait 10
left #af2, #bf1
end_if
set #r %m[#lx1 #ly2] + %m[#lx2 #ly1] + %m[#lx3 #ly2]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af2, #bf1
wait 10
left #af2, #bf2
end_if
set #r %m[#lx1 #ly1] + %m[#lx2 #ly1] + %m[#lx3 #ly2]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af3, #bf2
wait 10
left #af3, #bf1
end_if
set #r %m[#lx1 #ly2] + %m[#lx2 #ly2] + %m[#lx3 #ly1]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af3, #bf1
wait 10
left #af3, #bf2
end_if
set #r %m[#lx1 #ly2] + %m[#lx2 #ly1] + %m[#lx3 #ly1]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af1, #bf2
wait 10
left #af1, #bf1
end_if
set #r %m[#lx1 #ly1] + %m[#lx2 #ly2] + %m[#lx3 #ly2]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af1, #bf1
wait 10
left #af1, #bf2
end_if
end_for
end_for
return
:x4
set #xm %a[2 1] + 654
set #ym %a[2 2] + 981
for #ly1 109 #ym 109
for #lx1 109 #xm 109
set #lx2 #lx1 + 109
set #lx3 #lx1 + 218
set #lx4 #lx1 + 327
set #af1 (#lx1 - 109) / 2
set #af2 #lx1 / 2
set #af3 (#lx1 + 109) / 2
set #af4 (#lx1 + 218) / 2
set #bf1 (#ly1 - 109) / 2
set #r %m[#lx1 #ly1] + %m[#lx2 #ly1] + %m[#lx4 #ly1]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af4, #bf1
wait 10
left #af3, #bf1
end_if
set #r %m[#lx1 #ly1] + %m[#lx3 #ly1] + %m[#lx4 #ly1]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af1, #bf1
wait 10
left #af2, #bf1
wait 100
end_if
end_for
end_for
return
:y4
set #xm %a[2 1] + 981
set #ym %a[2 2] + 654
for #ly1 109 #ym 109
for #lx1 109 #xm 109
set #ly2 #ly1 + 109
set #ly3 #ly1 + 218
set #ly4 #ly1 + 327
set #bf1 (#ly1 - 109) / 2
set #bf2 #ly1 / 2
set #bf3 (#ly1 + 109) / 2
set #bf4 (#ly1 + 218) / 2
set #af1 (#lx1 - 109) / 2
set #r %m[#lx1 #ly1] + %m[#lx1 #ly2] + %m[#lx1 #ly4]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af1, #bf4
wait 10
left #af1, #bf3
end_if
set #r %m[#lx1 #ly1] + %m[#lx1 #ly3] + %m[#lx1 #ly4]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af1, #bf1
wait 10
left #af1, #bf2
end_if
end_for
end_for
return
:y6
set #xm %a[2 1] + 872
set #ym %a[2 2] + 763
for #ly1 109 763 109
for #lx1 109 872 109
set #lx2 #lx1 + 109
set #ly2 #ly1 + 109
set #ly3 #ly1 + 218
set #af1 (#lx1 - 109) / 2
set #af2 #lx1 / 2
set #bf3 (#ly1 + 109) / 2
set #bf1 (#ly1 - 109) / 2
set #bf2 #ly1 / 2
set #bf3 (#ly1 + 109) / 2
set #r %m[#lx1, #ly1] + %m[#lx2, #ly2] + %m[#lx1, #ly3]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af2, #bf2
wait 10
left #af1, #bf2
end_if
set #r %m[#lx2, #ly1] + %m[#lx1, #ly2] + %m[#lx2, #ly3]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af1, #bf2
wait 10
left #af2, #bf2
end_if
set #r %m[#lx1, #ly1] + %m[#lx1, #ly2] + %m[#lx2, #ly3]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af2, #bf3
wait 10
left #af1, #bf3
end_if
set #r %m[#lx2, #ly1] + %m[#lx2, #ly2] + %m[#lx1, #ly3]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af1, #bf3
wait 10
left #af2, #bf3
end_if
set #r %m[#lx2, #ly1] + %m[#lx1, #ly2] + %m[#lx1, #ly3]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af2, #bf1
wait 10
left #af1, #bf1
end_if
set #r %m[#lx1, #ly1] + %m[#lx2, #ly2] + %m[#lx2, #ly3]
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left #af1, #bf1
wait 10
left #af2, #bf1
end_if
end_for
end_for
return
Я так понимаю строка 64 это "set #r %m[#lx......"?
Сделайте #r строковой переменной и посмотрите что в нее попадает.
Сделайте "log commands" и проверьте что падает в лог.
можно тупой вопрос? у вас глюк повторился? у меня повторяется стабильно
msg глючит на длинной строке
set #dist 6
msg Округлённое расстояние между двумя точками равно #dist // нет числа, только имя переменной
end_script
WKnight, вроде просил проблемный размер окна (ошибка при пересечении мышкой нижней границы)
Вот: 440x469
Как скоро будет багфикс-версия?
Финдимейдж порядочно достал своими багами, а без него никак! =(
никто не будет платить за недоделку.
вот я хочу х64, и чтобы масивы были трёхмерные и ваще я уже много раз с талкивался с разными лимитами.. вот и щас отработал програмку, вставил в основной код и усё зависон. такое впечатление что существует лимит размера скрипта примерно в 2048 строк или типа того.
вобщем походу мой небесный бот скоро (если не считать уже) достигнет предела...
да никто ничего не обсирает, у меня лично нет денег, я нищий как незнамо кто, если если кто-то завидует моей нищей жизни, флаг ему в руки. что касается нас, то мы щас как тестеры, сидим тратим своё время юзаем прогу тестируем на баги и т.д. нам как бэ кто-то должен ведь платить ? поэтому это проект чисто на интузиазме ради фана, у кого есть средства тот поделится. у меня лично в жизни подобных проектов было как грязи, пока делал для фана всё было ништяк, как тока пытался поиметь финансы с них так всё летело к чертям. судьба такая. зарабатывать с метлой в руках и писать бесплатные программки для фана.
по масивам я чесно ничего не понял, я тебе конкретно выложил скрипт игры в линии, даже в виде модуля для боя в небеах, вот замени там тройной масив своим способом, тогда я пойму.
А это не совсем новое, это скорее фикс старого
не забудь, плз, в findimage поправить баг с черным цветом
WKnight, ты делаешь замечательное дело! Благодаря твоей программе и парочке хороших людей с форума, мне удалось понять, как писать сценарии, как читать код, как объяснять и помогать другим. Не денег ради, а просто потому что интересно.
Денежкой отблагодарить не смог, но старался помочь на форуме. Хотел помочь созданием chm-справки, и помогал на вики, пока была возможность.
Конечно баги будут, конечно будут исправляться и добавляться новые фичи в программульку.
BSW_rama: If you're so clever, show me your money...
Жёсткий вылет пилота:
init_arr %a (2) 4 5 6 7
set #l 3 // хочу 6-ку обработать
call test %a #l
end_script
proc test %b #n
log %b[2 #n]
msg Сюда не дойдем
end_proc
Числовая переменная, стоящая после масива, не передается.
Вот в таком виде работает, хотя всеравно фиксить надо.
call test #l %a
proc test #n %b
а массивы присвоить никак?
init_arr %a 10 20 30 40
init_arr %b(2) 50 60
init_arr %d (1 2) %a %b[2]// хотел получить 3 строки по 2 столбца
set delimiter ' '
log %d // %d
end_script
Походу самый легкий способ это в цикле построчно через init_arr.
Да, я именно про нее и говорю.
Чтото типа
set #b size(%b) + 1
set #c size(%c) + 1
set #f size(%a) + size(%b) + size(%c)
set delimiter " "
for #i 1 #f
if #i <= size(%a)
init_arr %e (#i) %a [#i]
continue
end_if
if #i < #b
init_arr %e (#i) %b [#b-#i]
continue
end_if
if #i < #c
init_arr %e (#i) %c [#c-#i]
continue
end_if
end_for
Скажите, что это стал пилот выдавать, скрипт час назад работал, а сейчас вот такое выдает. Если лефт заменить на клефт, тогда работает без ошибки.
3771? Чет мне подсказывает, что это обрезать можно ноликом)
Старт/стоп скрипт используется? Пилот памяти обжирается? set logging перед крашем может что-то теоретически подсказать.
Интересно, что пилот самостоятельно сохранил в своих настройках такого, что выдавал такую ошибку на left 111, 222 и ошибка выскакивала не каждый раз, а рандомно на любом из 30 лефтов?
Какие-то фантастические баги ко мне липнут. Невероятной загадки.
sendex @{F4}
wait 10000
end_script
Сделайте такой скрипт с открытым и активным пилотом(что бы закрыло его самого).
И вылетит целый ряд ошибок, а иногда они выпадают в бесконечном цикле(память не может быть read) и закрыть только через диспетчера возможно.
А теперь, в чем же загадка?
А она в том, что если у Вас не прокатило - пилот просто закрылся, то увеличьте задержку на 20000 или даже 100000
Почему-то после удачных закрытий - задержку нужно тоже увеличивать, что бы повторялся баг. Причем сперва оно у меня росло на 1-2 мс и хватало от 2150 + , что бы баг повторялся, а теперь выше 10000 обязательно надо...
вот такая жесткая жесть.
Отпишись пожалуйста, у кого повторилось.
Не повторилось. Пришли .ini, мож настройки какие влияют.
скрипт в это время единственный с алт+а4 рабоает?
Ничего не изменилось 2,29-2,33.
Так.
Тогда начну с самих ошибок
вываливаются по порядку сверху-вниз.
1020 строка на которую он ругается - это и есть wait
Действительно бывает что ни в какую не повторяется. И что бы началось повторение, нужно выносить пилот на второй монитор, оттуда запускать скрип где идет попытка привязки к первому. А после этого уже и на первом мониторе ошибка повторяется.
Вообщем, ищу дальше как повторять на 100%
Первое что нужно сделать - посмотреть 1019 строку. Иногда бывает, что ругнется на следующую. Так же обязательно посмотри что там в вэйте и предыдущем операторе в переменных, выведи это в лог.
Ты какую версию пользуешь?
В "о программе" ссылка на форум неактуальная.
2.32?
kleft -637, 541 abs
wait 5
kleft -1034, 987 abs
end_script
"-" рисует сам пилот, при клике по кнопке "абсолютные коры" элемента на втором экране.
И теоретически это можно посчитать верным и даже обработать.
Если бы не ошибка "ошибка строки, проверьте правильность скрипта".
Версия 2.31, 2.32
Притом просто left - успешно обрабатывает.
В следующей версии ошибку не выдает, но кликать в минус kleft всеравно не умеет.
дык раньше же отрицательные нормально работали.
Если работали, то по идее должны продолжить работать в будущем. 2,32 выдает ошибку потому что там несоответствие типов, у функции в параметрах используется беззнаковое целое, а передается ей со знаком. В ранешних версиях контроль соответствия типов был отключен, а 2.32 просочился.
Собственно потому и предположил, что не работает, раз у функции знака нет.
Ну так может снова отключить контроль типов? Или проверять знак числа и преобразовывать в нужное значение
Там уже сделано чтото вроде принудительного приведения типов. Ошибки такой месяца 3 не появлялось.
баги, котрые сильно достали
1) тупит запись в переменную типа %fuf#heh, зато читается на ура.
2) если нажать паузу при использовании команды prompt, то потмо окно запроса фих закроешь и ваще капец пока не перезапустишь программу.
3) тупит/тормозит сам посебе процес паузы/резюмэ часто после резюмэ вываливаются For-ы с ошибками. скрипт продолжается с то с позиции раньше, то с позиции позже.
4) при закрытие скрипта 1, скрипт 0 подгружается с бака непонятно какой давности. приходится постоянно чистить эти баки.
5) тупит не падетски вот такая конструкция, хотя по сути чё такого? я пишу в переменную "текст"#переменная, и уже баг, а конструкция сложнее проканывает.
set #a 1
set #b 1
set #c 2
set %base[1 1] blabla1
set %base[1 2] blabla2
set %base[1 3] blabla3
set %base[1 4] blabla4
set %basescr[#a] "set %baselist[#numunitsbase] "%base[#b 1] // !!!!-----большой баг-------!!!!!!!
set %basescr[#c] "set %unit"%base[#b 1]"[1] "%base[#b 1]
msg %basescr[#a]
msg %basescr[#c]
end_script
set $ugu "set %unit"272728"[1]" 272728
msg $ugu // убедимся что строка полностью записалась
init_arr %figa $ugu // вроде первая строка должна записаться?
msg %figa[1 1], %figa[1 2], %figa[1 3], %figa[1 4], %figa[1 5], // куда делись цифирки?
1. Никто никогда не обещал запись в такие конструкции, то, что оно работает при чтении - фича.
2. Не подтверждено. Замечено только, что скрипт продолжает работу с открытым окном, но оно прекрасно закрывается.
3. При снятии с паузы скрипт продолжает работу с той строки, где стоит курсор. Сделано давно по многочисленным просьбам. Об этом сказано и в хистори и на форуме многократно.
4. Есть бага с добавлением скрипта плюсиком, при этом не сохраняются последние изменения в текущем скрипте. Оно уже исправлено. Других багов с откатами незамечено.
5. "большой баг" есть в 2.32, но не воспроизводится в будущей версии. Видимо исправлена его причина.
6. %figa[2].
1) жаль, у меня на таких конструкциях целый скрипт для игры небеса построен, а точнее вся база, оч удобно.
2) называется лучше 1 раз увидеть http://youtu.be/7lie0c2fN7c
3) видать на мелких скриптах, ну да ладно, я приспособился, просто перезапускаю скрипт после паузы.
4) вычёркиваем
5) вычёркиваем
6) за целый месяц не смогли оформить в вики.... ладно разобрался, просто на форуме были примеры только в виде
init_arr %masiv 5 67 8 9
init_arr %masiv(2) 5 67 8 9
init_arr %masiv(3) 5 67 8 9
init_arr %masiv(4) 5 67 8 9
вот я и подумал что для первой строки писать (1) не нужно.. а на деле оказывется нужно.
1. Чтение убираться небудет. Фича полезная.
2. А у массивов и числовых закрывается без проблем
6. %figa[2].
2. а вот и нифига, помоему невнимательно видео смотрел, стабильный баг
1) запускаем скрипт
2) как вылазиет окошко, ставим на паузу
3) двигаем окошко
4) снимаемся с паузы
5) пробуем закрыть.
2. А у массивов и числовых закрывается без проблем
Вики доступна для редактирования всем желающим.
set $a 1
if ($a > 0)
set $a $a
end_if//<-- из за этой баги я потратил в пустую 3 часа жизни
end_script
Числовые выдают обработанную ошибку и нормально закрываются, массивы после этого не проверял.
Хо-хо.
Итак. Есть команда dir
Пример:
dir (%info C:\test test.bmp)
Значит, %info[1 1] = дата и время последнего изменения файла
Всё работает ок, если поменять время на компьютере, то всё по прежнему работает - ок. (казалось бы, к чему я это?)
А вот если будет произведен автопереход на время года как было сегодня примерно в 4:11 утра на час вперед, то dir будет видеть у файла ту же дату но + 1 час, и как результат - не состыковка.
Теперь что полезно.
1) В свойствах файла всё ещё отображается старая дата последнего изменения. (т.е. пилот берет данные где-то не совсем из свойств). Но пилот думает что + 1 час.
2) Когда я перезаписал этот файл из архива(специально в архиве храню подобные файлы, т.е. в этом случае их ничто не изменит). То стало определяться верная дата.
Вывод:
У файла есть несколько источников данных о дате его последнего изменения и пилот берет те данные, которые меняются переходом на время года. (Это наверное баг винды уже, что какой-то параметр вообще меняется - это же бред, нафиг он меняется? но вот так).
set #c -3
set #e -37 * -37
set #e #c * #c
end_script
жесть... хорошо хоть это можно выправить, блоком
if #c < 0
set #c 0 - #c
end_if
решается скобками...
Dir построена на FindFirst\FindNext. Они возвращают только одно значение даты. Не представляю как исправить.
set %travapolezero[1 1] 200
set %travazero[1 1] 200
set %travazero[1 2] 100
for #numpole 31 37 1
set %pole[#numpole 1] #numpole
set %pole[#numpole 2] %travapolezero[1 1] + 18 + 37 * (#numpole - 31)
set %pole[#numpole 3] %travazero[1 2] + 177
end_for
for #a 31 37 1
msg %pole[#a 2], %pole[#a 3]
wait 300
end_for
end_script
меняем в самой длинной строке имя переменной и ошибка пропадает.
set %travapolezero[1 1] 200
set %travazero[1 1] 200
set %travazero[1 2] 100
for #numpole 31 37 1
set %pole[#numpole 1] #numpole
set %pole[#numpole 2] %travazero[1 1] + 18 + 37 * (#numpole - 31)
set %pole[#numpole 3] %travazero[1 2] + 177
end_for
for #a 31 37 1
msg %pole[#a 2], %pole[#a 3]
wait 300
end_for
end_script
как меня это достало....
ещё один облом
set %hero %unit#heroid
хотя
set %masiv %drugoymasiv
работает прекрасно.
set #f prompt (2 4 6)
окошко автоматически исчезает через 2 сек, если первую цифру поставить 0
set #f prompt (0 2 4 6)
тогда висит до бесконечности...
чё за негласная фича?????
Бага.
$c
Автор UoPilot че за без предел,без вирусов можно нормально программу написать?
Отчет virustotal - https://www.virustotal.com/ru/file/c11b36e75078287781cbdfe6ec247a22f6a608c3322915e4b9e8b3f29c49cab7/analysis/
Меня ваша программа конечно устраивает но вирусы напрягают,для какой цели они зависают в программе ?
Кстати, у меня в конторе стоит корпоративный антивирус и он потёр именно последнюю версию пилота, а остальные версии спокойно пропустил.
что за антивирь и чем мотивировал?
WKnight, по ссылке тыкни, станет понятно. Из чего-то имеющего хоть какую-то репутацию только Symantec.
Та тыкал я туда, около шести срабатываний типа довнлоадер от никому неизвестных поделок. Прикинул почему именно довнлоадер, не нашел причин и закрыл ту фигню.
На несколько разный версий какая-нить шняга да ругается. Сейчас нет времени выяснять на какой именно кусок кода. Отложим до лучших времен.
set $a findimage ( 1, 1 950, 810 (FindImage\Tera\LauncherLoginButton.bmp) %launcher 2 100 1 6
Увеличиваем конечные координаты - получаем результат "-1". Оно же работало...
Есть подозрение, что там бага где-то. Тож заметил нечто подобное, пока отловить не удалось.
это ты что-то недавно натворил, т.к. поиск по фулхд работал исправно. Тут вбил фул хд, а мне -1 пишет...
какой-то бред. Пилот не перезапускал, пару раз прогнал скрипт с урезанной областью поиска, выставил область поиска 0 0 1920 1080 - сожрало. До этого я ставил 1 1 1920 1080. Только я подумал "ага!!!", ввел 1 1 1920 1080 и... оно тоже прекрасно теперь работало...
Вот по-этому пока отловить и не удалось .
И для кого я описывал все все способы и симптомы для -1 финдимиджа....
Я этот -1 как минимум в двух способах уже давно жду фиксов, т.к. половина моих ботов на это напарывается. Полное описание ищите раньше.
В кратце,
1) нулевой цвет
2) координаты поиска на широкоформатном экране.
И ты как раз сейчас наткнулся на второй, а у второго условий для повторения там несколько.
P.S. Дарк, я помню что обещал проверить кое-что... проверю, но позже... сорри за задержку... реально времени сейчас крайне мало...
Я цвет пока не трогал, координаты ковыряю, но оно крайне нестабильно проявляется. Выскакивает пару раз подряд -1, начинаешь дебажить, оно идеально отрабатывает.
Пилот перестал открывать ранее открытые скрипты, не сохраняет размер шрифтов. Удалял инишник - толку нет. Прикладываю бэкап удаленного инишника.
Прикрепленные файлы
uopilot.7z ( 2,14 килобайт )
Кол-во скачиваний: 78
А оно не говорит ченить типа ерор лоадинг хоткейс?
Кстати в этом конфиге уже нет ссылок на другие скрипты кроме одного.
Вообще ничего не говорит. Такое впечатление, что просто дефолтные настройки берет.
По идее можно было снести секцию хоткейс в конфиге и оно должно было стать нормально
угу. вот только их там было очень много и заново все расставлять ну совсем никак не хотелось. Главное работало.
А че сейчас то делать?
Другие настройки сохраняет?
Если его в новое место скопировать и там настраивать, сохраняет?
Мож вирус?
Он их сохраняет. Но он их не загружает. Т.е. я открываю инишник - все нормально сохранено, а загружается дефолт.
С вирусами сложнее. Я сижу серый на динамике, с единичными пробросами нестандартных портов, браузер запущен 100% времени в песочнице, стоит носкрипт, блок флэша и т.д., приложения к которым проброшены порты тоже запущены 100% времени в песочнице ну и антивирь стоит. Про вирусы я только байки слышу. Пилот вне песочницы работает.
Странно, пришли новый конфиг, и пример настройки которую он не загружает. Файл пилота не изменен?
У меня в одной папки лежит весь репозиторий, и отдельно ехе которым я пользуюсь с измененным названием. Закрыл, открыл - опять шрифт мелкий. Запустил 2.28 - все нормально. Запустил 2.32 тоже ожил. Втф? Он куда-нибудь в реестр лезть не начал случаем?
В реестр с незапамятных времен пишет только путь к клиенту уо из соответствующего поля ввода, и переменные для изиуо. Больше ничего вроде.
И че это было?
Даже предположений никаких нет.
set %test[1] 1
set #test 1
set $test 1
так работает:
set $test findimage (0 0 50 50 (c:\test\%test[#test]\тралала.bmp) %crds47 2 100 -1)
set $test findimage (0 0 50 50 (c:\test\%test[1]\тралала.bmp) %crds47 2 100 -1)
так не работает:
set $test findimage (0 0 50 50 (c:\test\#test\тралала.bmp) %crds47 2 100 -1)
set $test findimage (0 0 50 50 (c:\test\$test\тралала.bmp) %crds47 2 100 -1)
Проверим.
\ - не является разделителем. Т.е. имя переменной у тебя $test\тралала.bmp.
Еще раз выскажусь за то, чтобы пробелы до и после переменной опускались при подстановке значения переменной.
И да и нет. Чтобы было совсем правильно, нужны экранирующие символы. В части переменных очень сильно напрашивается игнорирование пробела.
не хотит выполнять циклы внутри первого цикла, причём сама фишка в том что если поставить #pos от 1, тогда он выполняет 1-5, а вот 6-15 не хотит.. пипец...
не ищите вы легких путей )
почему init_arr не используете для инициализации массива?
Не выполняет потому, что там выполнять нечего.
У вас все циклы типа от 551 до 549 с шагом 1.
кнайт, а что с шрифтом лога то порешали? Я чет забыл чем кончилось... Задолбал он меня уже вконец скидывать шрифт на 7... Не вижу я нихрена с таким шрифтом((
Не припомню. Возможно в 2до есть, щас перечитывать лень. При легком тесте в основной закладке не восстанавливает. Завтра поковыряю.
set #UOpilot findwindow (UoPilot v2.32 WK)
showwindow #UOpilot minimize
set $a 0 0 1500 1500
set $c findcolor ($a 1 1 4874622 %b 2)
msg $c
set $a 0 0 1500 1500
set #c findcolor ($a 1 1 4874622 %b 2)
msg #c
set %a[1] 0 0 1500 1500
set $c findcolor (%a[1] 1 1 4874622 %b 2)
msg $c
set %a[1] 0 0 1500 1500
set $c findimage (%a[1] (C:\тралала.bmp) %crds11 2 100 -1)
msg $c
set $a 0 0 1500 1500
set $c findimage ($a (C:\тралала.bmp) %crds11 2 100 -1)
msg $c
Ну поясни как надо. Если ты имеешь ввиду, что применяются только числовые переменные, то решение я конечно смогу найти - налепив лишние куски кода.
Но может у тебя как-то попроще?
если в двух словах, то не лепи в одну переменную несколько координат. Это работает только в ифах. Если где-то еще каким-то чудом заработает, то считай это фичей.
еще раз
set $c findcolor (#x #y #x1 #y1 1 1 4874622 %b 2)
Работает.
set $c findcolor ($x $y $x1 $y1 1 1 4874622 %b 2)
Не работает
set $c findcolor (%x[1] %y[1] %x1[1] %y1[1] 1 1 4874622 %b 2)
Не работает
в таком виде еще имеет смысл о чем то говорить. В частности о массивах.
Что за параметр [append] в save_array? В синтаксисе появился, а в истории развития тишина. Зарытые сокровища?
Поздно
Задумывалась дозапись массивов, что-то недоделано.
load_array %a $path
set #a size(%a)
set #a #a + 1
set %a[#a] Вася, а может Петя или вообще любая переменная
save_array %a $path
угу, а когда у тебя тхт файл на пару тысяч строк? А если их с десяток тысяч? Ты представляешь сколько он будет загружать, а потом сохранять? У меня были тхт шники которые пилот грузил более 10 минут. Зашибись, чтобы строчку добавить.
30к строк. сколько весил хз.
дальше 10к строк существенное замедление процесса. Хз может с этим что-то делали, это было не на 2.32.
Устал уже с этими форами бороться. Их можно поправить?
1)
:1
for #a 1 5
gosub 2
end_for
:2
goto 1
set #b 1
for #a 1 5
:1
if #b = 1
goto 2
end_if
end_for
:2
set #b 0
goto 1
for просто не свинка, а культурный оператор. Прерывание циклов по гото не культурно и свинство, вот он и не подчиняется. Кнайт вообще говорил, что хотел его поковырять по этому поводу. По большому счету это принудительное обучение культуре программирования)
Я понимаю - культура, мультура...
Однако, из-за этой культуры дописывать десятки, а то и сотни строк - затратно и чрева-то наделать ошибок.
ошибки они как раз с гото.
for ....
if ...
set #goto 1
break
end_if
end_for
if #goto = 1
goto mark
end_fi
for ....
if ...
set #goto 1
break
end_if
end_for
if #goto = 1
goto mark
end_fi
у меня таких проблем не возникает. Наверно потому, что гото у меня есть только в виде goto start)
set $icqNum 111-111-111
set #handleMainCahtWindow findwindow ([$icqNum] - Окно сообщений)
showwindow #handleMainCahtWindow hide
log #handleMainCahtWindow
showwindow #handleMainCahtWindow
set #handleMainCahtWindow findwindow ([$icqNum] - Окно сообщений)
log #handleMainCahtWindow
set $icqNum 111-111-111
set #handleMainCahtWindow findwindow ([$icqNum] - Окно сообщений)
showwindow #handleMainCahtWindow hide
log #handleMainCahtWindow
showwindow #handleMainCahtWindow
set #handleMainCahtWindow findwindow ([$icqNum] - Окно сообщений)
log #handleMainCahtWindow
какая перемення определяет день недели в новой версии??
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)