| Заблокирован 
				 
				Регистрация: 02.02.2007 
					Сообщений: 515
				      | 
				  
 
			
			Данная документация содержит описание языка скриптов программы UOPilot. Будьте внимательны при использовании более ранних версий программы.
 Условные обозначения:
 <> - обязательный параметр
 [] - необязательный параметр
 
 
 СИНТАКСИС
 ===========
 
 В одной строке может быть только одна команда. Первое слово в строке - команда, остальные слова - параметры. Если первое слово в строке не команда - строка считается комментарием.
 
 Слова состоят из символов 0-9, А-z, А-я.
 
 Символы #, $, %, +, -, *, /, >, <, =, :, ., (, ), [, ] являются служебными, остальные разделители.
 
 Можно писать комментарии после всех параметров. Также таковыми считается все, что идет после двойного слэша '//'. Крайне рекомендуется использовать именно такой метод.
 
 Паузы в командах указываются по умолчанию в миллисекундах (1/100 секунды), но возможно указание времени и явно, в часах, минутах, секундах:
 wait 500   // ждать 0.5 секунды
 wait 5s    // ждать 5 секунд
 wait 1m    // ждать 1 минуту
 wait 1h    // ждать 1 час
 
 
 Переменные
 ===========
 
 В имени переменной допустимы символы - ['0'..'9','A'..'z','А'..'я'], регистр не учитывается. Максимальная длина имени переменной 255 символов.
 
 Переменные могут быть числовыми и строковыми. Синтаксис числовой переменной '#name', где name - имя переменной. Синтаксис строковой переменной '$name', где name - имя переменной.
 Например:
 set #i 20
 set $s test string
 
 Также вы можете использовать массивы. Символ процента '%' считается идентификатором массива. Индексы массива указываются после имени в квадратных скобках '[' и ']'. Размер массива равен максимальному использованному индексу. Присваивание значений осуществляется каждому элементу индивидуально командой set. Элементы массива могут содержать как строки, так и числа. Допустимо сылаться на массивы параллельных скриптов, указав после имени массива, через точку, номер скрипта. При указании только первого индекса в двумерном массиве, результатом будет строка из всех элементов второй размерности массива, соответствующих указанному индексу, и разделенных пробелом.
 Например:
 set %ar [4] тест // одномерный массив на 4 элемента
 set %arr [50 1] 544
 set %arr [50 2] 800 // двумерный массив на 50 раз по 2 элемента
 set %ar.2 [5] // одномерный массив в параллельном скрипте
 left %arr [50] // клик левой кнопкой по координатам 544 800
 
 Учтите, что элементы массивов нельзя напрямую использовать в условных операторах:
 if charposx <> %arr [50 1]
 
 Перед использованием переменной в скрипте вы должны определить ее при помощи команды set. Переменные изменяются только при участии set и for, команда repeat использует значение, не изменяя его.
 Например:
 set #i #i + 1
 
 Синтаксис команды Set:
 -----------------------------------------
 set $<имя> <значение> или
 set #<имя> <знач1> [<зн. оп.> <знач2>]
 set %<имя> [элемент] <значение>
 между знаком операции и значениями должен быть разделитель. Поддерживаются следующие операции: +, -, *, /, также вы можете использовать скобки для изменения приоритетов выполнения математических операций. При делении результат округляется к меньшему целому.
 Например:
 set #q ((5+4)/(3+-2)* #e )-(2-(-5+9))*3
 
 Со строковыми переменными возможны некоторые математические операции:
 set $s1 1
 set $s2 2
 set $s $s1 + $s2
 Результатом будет $s = '1 + 2', т.е. при присваивании чего-либо строковой переменной, ей присваивается все до конца строки, с соответствующими заменами
 set #n $s1 + $s2
 Результатом будет #n = 3, т.е. если строковая переменная, содержит строковое представление целого числа, то ее можно использовать в качестве числовой переменной.
 
 В команде set вы можете использовать генератор случайных чисел: random <number> возвращает число в диапазоне от 0 до number-1
 Например:
 set #a random 2
 
 При двух или более запущенных скриптах вы можете обращаться к переменным, определенным в других скриптах пилота. Синтаксис указания таких переменных следующий:
 #i.2 - обращаемся к переменной #i из скрипта, находящегося в окне номер 2.
 
 Переменные в процессе выполнения скрипта могут быть изменены при помощи таблицы отображения переменных. Изменение переменных происходит синхронно с набором символов.
 
 
 Зарезервированные переменные
 =============================
 
 Примечание 1: [W] означает, что вы можете изменять значение этой переменной
 в скрипте через команду set, все остальные переменные только для чтения.
 
 Примечание 2: Для корректного определения Пилотом большинства параметров чара у вас на экране ультимы должно быть раскрыто окно статов (Character Status).
 
 
 hour - текущее время (час)
 
 min - текущее время (минуты)
 
 sec - текущее время (секунды)
 Например:
 say current time is hour : min . sec
 
 timer - считает количество миллисекунд от начала выполнения скрипта может использоваться практически в любых операторах и сочетаниях.
 set timer // устанавливает значение timer в 0
 
 name - имя чара
 
 str - сила чара
 
 int - интеллект чара
 
 dex - ловкость чара
 
 hits - здоровье чара
 
 mana - мана
 
 stam - стамина
 
 gold - количество денег у чара
 
 wght - текущий вес
 
 armor - класс армора
 
 charposx - позиция чара по горизонтали
 
 charposy - позиция чара по вертикали
 
 charposz - координата z чара (высота)
 
 chardir - направление взгляда чара (куда чар повернут)
 0 - чар смотрит на север, каждые 45 градусов поворота чара по часовой стрелке добавляют еденичку, т.е. 7 - чар смотрит на северо-запад
 
 lastmsg - последнее сообщение сервера
 
 lastobjectid - идентификатор последнего использованного объекта [W]
 
 lastobjecttype - тип последнего использованного объекта [W]
 
 lasttargetid - идентификатор последней цели [W]
 
 lasttargetx - координаты последней цели [W]
 
 lasttargety -  - " - [W]
 
 lasttargetz -  - " - [W]
 
 lasttargetkind - класс последней цели (1 - предмет; 2 - земля; 3 - статика или вода) (т.е. если вам нужно лопатой/киркой кликнуть на поверхность пещеры в заданные координаты, то необходимо указать '3'; если необходимо кликнуть через ласт таргет на предмет, то необходимо указать '1' и 'Id' предмета; ловя рыбку указываем координаты точки и класс '2'). [W]
 
 lastliftedid - идентификатор вещи, которая последней была тронута с места (передвинута, побывала в 'руке'). [W]
 
 lastskill - номер последнего скила который был использаван через меню Skills [W]
 
 lastspell - номер последнего заклинания которое быле прокастовано через книгу [W]
 
 laststatictype - тип последней статичной цели (дерево...) [W]
 
 target - вид курсора (0 - рука; 1 - прицел) [W]
 
 При двух или более запущенных скриптах вы можете обращаться к переменным, определенным в других скриптах пилота для других чаров, добавив к имени переменной номер скрипта через точку. Например:
 set lasttargetid.1 7
 say hits.1
 
 
 Условные операторы, циклы, переходы
 ==================================
 
 В условных операторах и циклах вы можете использовать следующие операции: >, <, =, <>, а также логические операции (and, or, xor). Приоритетов нет, обрабатывается последовательно.
 Например:
 if hour = 23 and min = 45 or #count = 100
 
 Для изменения приоритетов используйте круглые скобки:
 while (#a > 1 and #a < 3) or ((#a = 1 and 130, 9 7295) or #a = 5)
 
 В условных операторах вы можете использовать генератор случайных чисел: random <number> возвращает число в диапазоне от 0 до number-1
 Например:
 while #a = #b or random 5 > 3
 
 Для прерывания действия операторов while, for и repeat вы можете использовать команду Break. Синтаксис:
 Break [уровень]
 Если уровень больше 1, то прерывается заданное кол-во родительских циклов.
 
 Оператор Continue переводит исполнение цикла на следующий шаг. Может быть использован в циклах repeat, for, while.
 
 При использовании последнего сообщения от сервера в условных операторах, существует некоторое правило синтаксиса:
 if lastmsg текст последнего сообщения или его часть
 или
 if lastmsg = $a [or lastmsg = $b ...]
 Т.е. если в условии напрямую указан текст сообщения, то не должно быть больше ничего, включая знаки каких-либо операций.
 
 
 Оператор IF
 --------------------
 Синтаксис:
 if <условие>
 ...
 end_if
 
 или
 
 if <условие>
 ...
 else
 ...
 end_if
 
 или
 
 if_not <условие>
 ...
 end_if
 
 или
 
 if_not <условие>
 ...
 else
 ...
 end_if
 
 Возможны три варианта условий:
 
 1) Проверка какой-то переменной, синтаксис:
 if <значение> <знак операции> <значение>
 Примечание: между знаком операции и значениями должен быть разделитель.
 Например:
 if hits < 45
 
 2) Проверка последнего сообщения от сервера:
 If lastmsg <последнее сообщение>
 если в последнем сообщении от сервера есть указанная строка
 Например:
 if lastmsg too heavy
 
 3) Проверка цвета в определенных координатах:
 if <коорд> <цвет> [цвет2]
 Если цвет в точке <коорд> равен <цвет>
 Примечание: если задан цвет2, то цвет точки проверяется на принадлежность диапазону от цвет до цвет2. Учтите, что проверка цвета в определенных координатах корректно работает только при развернутом окне ультимы.
 
 
 Оператор WHILE
 ----------------------------
 Синтакис:
 While <условие>
 ...
 end_while
 
 или
 
 While_not <условие>
 ...
 end_while
 
 Возможны три варианта условий:
 
 1) Проверка какой-то переменной, синтаксис:
 While <значение> <знак операции> <значение>
 Примечание: между знаком операции и значениями должен быть разделитель.
 Например:
 While hits > 45
 
 2) Проверка последнего сообщения от сервера:
 While lastmsg <последнее сообщение>
 делать пока в последнем сообщении от сервера есть указанная строка
 Например:
 while lastmsg too heavy
 
 3) Проверка цвета в определенных координатах:
 While <коорд> <цвет> [цвет2]
 Пока цвет в точке <коорд> равен <цвет>
 Примечание: если задан цвет2, то цвет точки проверяется на принадлежность диапазону от цвет до цвет2
 Например:
 While 320 240 1489121
 
 
 Оператор FOR
 ------------------------
 
 Синтаксис:
 For #<имя> <начало> <конец> [шаг]
 ...
 End_for
 Цикл, с инкрементом переменной. Если переменная #<имя> существовала, то она заменяется, иначе добавляется. После завершения цикла переменная равна <конец>. Если шаг не указан, он равен 1.
 Например:
 For #i 0 10 2
 
 Учтите, что если вы задаете граничные условия цикла через переменные, пилот считывает значения этих переменных при входе в цикл и больше значения этих переменных не проверяет. Поэтому изменение границ цикла внутри цикла невозможно.
 
 
 Оператор REPEAT
 -------------------------------
 
 Повтор действий указанное количество раз
 Синтаксис:
 Repeat <число>
 ...
 End_Repeat
 
 
 Оператор GOTO
 ---------------------------
 
 Переход на указанную метку
 Синтаксис:
 Goto <метка>
 
 Метка должна быть указана в скрипте в следующем синтаксисе:
 :<метка>
 
 Например:
 Goto end
 :end
 
 
 Вызов подпрограмм
 -----------------------------------
 
 Синтаксис вызова подпрограммы:
 gosub <метка>
 
 Подпрограмма начинается с
 :<метка>
 и заканчивается
 return
 
 Подпрограммы рекомендуется располагать в конце скрипта и перед ними поставить либо end_script, либо goto на начало скрипта.
 
 
 Вызов процедуры
 ------------------------------
 
 Синтаксис вызова процедуры:
 call <имя>
 Процедура с указанным именем ищется сначала в текущем скрипте, а затем, если не найдена, в "файле процедур" - скрипт с номером 99. Загрузить туда что-либо можно с помошью соответствующего пункта меню. Поддерживается вложенный вызов процедур.
 
 Процедуры можно располагать в любом месте программы. При обнаружении начала прроцедуры, автоматически ищется ее конец, и выполнение продолжается со следующей строки. Вложенное описание не поддерживается.
 
 Процесс выполнения процедуры не отображается, параметры пока не передаются.
 
 Процедура начинается с
 proc <имя>
 и заканчивается
 end_proc
 
 Например:
 proc saying_message
 say test passed
 end_proc
 call saying_message
 end_script
 
 
 Управления работой скрипта
 =========================
 
 
 Окончание работы скрипта
 ----------------------------------------------
 
 Скрипт в окне выполняется пошагово, от первой строки к последней, за исключением случаев переходов по условным операторам, циклам, меткам, и подпрограммам. После выполнения последней строки скрипт будет автоматически повторяться сначала.
 
 Для прекращения выполнения скрипта используйте команду:
 End_Script
 Параметров нет.
 
 Или команду:
 stop_script
 без указания каких-либо параметров.
 
 
 Паузы
 -----------
 
 Wait <число> - ждать.
 Параметр <число> можно задать в различных единицах измерения:
 wait 1  // 1 миллисекунда
 wait 1s // 1 секунда
 wait 1m // 1 минута
 wait 1h // 1 час
 
 WaitForTarget [max wait time] - ждать "прицела" (в милисекундах).
 Приостанавливает выполнение скрипта, пока курсор в ультиме не примет форму таргета, или пока не истечет интервал времени, указанный в качестве параметра в мс. Значение по умолчанию для max wait time составляет 10000 (то есть 10 секунд).
 
 pause_script
 Команда pause_script без указания параметров приостанавливет выполнение текущего скрипта. Чтобы запустить его вновь, вы должны будете задать команду resume_script В ДРУГОМ СКРИПТЕ c ссылкой на номер текущего (см. следующий подраздел)
 
 
 Управление работой других скриптов
 ================================
 
 Вы можете управлять работой других скриптов, запущенных в других окнах ЭТОГО ЖЕ UoPilot-а при помощи нижеследующих команд. При этом в качестве параметра <number> вы указываете номер окна соответствующего скрипта в UoPilot-е.
 
 start_script <number>
 Если скрипт с таким номером существует, то он будет запущен
 
 stop_script [number | all]
 Если скрипт с таким номером существует, то он будет остановлен
 
 pause_script [number | all]
 Если скрипт с таким номером существует, то он будет приостановлен
 
 resume_script <number | all>
 Если скрипт с таким номером существует, то его выполнение будет продолжено
 
 В во всех этих командах, за исключением первой, вместо номера скрипта вы можете задать параметр 'all' - тогда действие данной команды будет распространено на все скрипты, загруженные во все существующие окна UoPilot-а.
 
 По поводу использования команд pause_script и stop_script без параметров - смотрите предыдущий подраздел.
 
 
 Команды интерфейса и вызова внешних программ
 ============================================
 
 Alarm [файл .wav]
 Издает звуковой сигнал, содержащийся в файле [файл .wav]. При ошибке воспроизведения файла (неверный формат), или если параметр [файл .wav] не указан  - воспроизводится стандартный звуковой сигнал, ранее содержащийся в файле msg.wav. Если файл не найден, то команда игнорируется.
 Например:
 alarm welcome.wav
 
 Msg [текст]
 На экран выводится окно, содержащее указанный текст, выполнение скрипта при этом приостанавливается до закрытия окна. Окно с текстом выводится поверх всех окон.
 
 Flash
 Мигнуть в таскбаре. При этом в таскбаре мигает окно Пилота. Если вы хотите, чтобы мигало то окно ультимы, к которому привязан текущий скрипт, укажите команду flash с каким-либо параметром.
 Например:
 flash что-нибудь
 
 Exec <команда> [параметры]
 Запустить указанное приложение, передать ему указанные параметры. Для использования в качестве параметров зарезервированных переменных, поставьте перед ними признак переменной '#'.
 Обратите внимание, что вы используете знак '#' как для числовых переменных, так и для строковых!
 Например:
 exec c:\test.exe #name #lastmsg
 
 Terminate <заголовок окна>
 Завершить указанное приложение. Следует использовать с осторожностью, иначе можно прибить совсем не то, что хотелось.
 
 macro_load <имя файла>
 Загрузить ранее записанный и сохраненный в файл макрос. Если не указан путь, то ищется в каталоге UoPilot'а.
 
 macro_play [число]
 Запустить загруженный макрос [число] раз, и дождаться окончания его выполнения. Если [число]=0 - макрос будет выполняться бесконечно, по умолчанию один раз. Остановить\запустить вручную можно стандартными горячими клавишами.
 
 
 Команды работы с мышью
 =======================
 
 Все команды работы с мышью, а также некоторые другие требуют указания координат. Пилот поддерживает два способа указания координат: абсолютные координаты (координаты точки от левого верхнего угла экрана) и относительные координаты (координаты точки от левого верхнего угла экрана Ультимы. Заголовок окна Ультимы не учитывается). Задать в скрипте координаты вы можете, наведя курсор мыши на необходимую точку и нажав комбинацию Ctrl-A. При этом помните:
 
 1) Окно UoPilot должно быть активно. То есть расположите окно ультимы под окном пилота, выберите окно пилота, наведите курсор мыши на нужную точку НЕ НАЖИМАЯ НА КНОПКИ МЫШИ и нажмите Ctrl-A.
 
 2) В окне пилота должен быть включен один из флажков "Сразу вставлять относительные координаты в скрипт" или "Сразу вставлять абсолютные координаты в скрипт". В противном случае, координаты можно вставить в скрипт вручную, кликнув мышью на кнопке с координатами.
 
 3) Если вы указываете в командах абсолютные координаты (нельзя использовать в команде drag) - вам надо после координат указать идентификатора абсолютных координат - ключевое слово "abs", являющееся последним параметром в команде.
 Например:
 double_left 218, 242 abs
 
 На время выполнения команд работы с мышью по абсолютным координатам, происходит захват мыши.
 
 Move <коорд>
 Перемещает курсор в указанные координаты.
 Внимание! Крайне рекомендуется задавать эту команду перед заданием любой из двух нижеследующих команд.
 
 Left <коорд>
 Щелкнуть левой клавишей мыши 1 раз в указанных координатах
 
 Right <коорд>
 Щелкнуть правой клавишей мыши 1 раз в указанных координатах
 
 Double_Left <коорд>
 Щелкнуть левой клавишей мыши 2 раза в указанных координатах
 
 Double_Right <коорд>
 Щелкнуть правой клавишей мыши 2 раза в указанных координатах
 
 left_down <коорд>
 Прижимает левую кнопку мыши в указанных координатах
 
 left_up <коорд>
 Отпускает левую кнопку мыши в указанных координатах
 
 right_down <коорд>
 Прижимает правую кнопку мыши в указанных координатах
 
 right_up <коорд>
 Отпускает правую кнопку мыши в указанных координатах
 
 
 Прочие команды
 ==============
 
 Send <клавиша [пауза]> | <текст>
 "Нажать" клавишу и ждать указанное число миллисекунд. Если параметр не распознан как управляющая клавиша, то он посылается как текст. В последнем случае команда работает аналогично команде say, за исключением завершающего Enter'а.
 
 Sendex <список клавиш>
 "Нажать" последовательно несколько клавиш. Посылает практически все комбинации клавиш. Клавиши Ctrl, Alt, Shift кодируются символами ^, @ и ~ соответственно. Все функциональные клавиши должны быть заключены в фигурные скобки, например: {Enter}. В одной команде может быть целое предложение из клавиш:
 sendex ~closing ~application @{f4}
 Имеется следующее свойство: приложение примет только те клавиши (символьные), которые соответствуют установленной в нем раскладке клавиатуры.
 Во время выполнения команды, на приложение направляется фокус, и блокируется система. При некоторых обстоятельствах, следующая команда выполняется до завершения текущей.
 
 Drag <откуда> <куда> [количество]
 Перенести из точки с координатами <откуда> в точку с координатами <куда> указанное количество предметов. Координаты <откуда> и <куда> могут быть только относительные. Если не указать количество, то перенесется один некучкующийся предмет (окошко с количеством не всплывает), если указать all, то перенесутся все предметы.
 Например:
 Drag #x #y 320, 240
 
 Say [текст]
 Набрать текст и нажать Enter. Например:
 say my x: coordx y: coordy and armor: ar
 --------
 Разберайтесь.
 |