| 
			
			 Заблокирован 
			
			
			
			
				 
				Регистрация: 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 
-------- 
Разберайтесь.
		 
		
		
		
		
		
		
		
	 |