Инуструкция по написанию макросов в EasyUO

  • Не в сети
  • Boralgin
  • Автор темы
  • Ветеран
  • Сообщений: 155
  • Thanks: 0
Не в сети

Инуструкция по написанию макросов в EasyUO

#3766
Инструкция по написанию макросов EasyUO.

Макрос в игре состоит из повторений какого-либо действия. По этому, макрос
должен выглядеть так:
Initevents
<сам макрос>
Return
Макрос состоит из процедур, каждая из которых вмещает в себя
одно или несколько действий.

Процедура объявляется так:
<имя процедуры>:
А закрывается пропуском строки.
В EasyUO объявляется командой Event macro. То есть, команда, потом номер
действия.

color=red]![/color Список номеров можно посмотреть по ссылкам раз и два .

Далее идет несколько действий с предметами игры (мышкой, клавиатурой, самой игрой), а именно:
Event drag (переменная, код предмета) – перетаскивание предмета.
Click (x,y) - щелчок кнопкой мыши по экранными координатам (координаты
можно посмотреть в нижней части окна EasyUO). Если после координат добавить букву
d – будет двойной щелчок.
Move (x,y,z) – команда идти чару по такой-то координате в игре. Координаты
можно посмотреть в нижней части окна EasyUO рядом с экранными координатами.
Key (любая клавиша) – нажатие на клавишу клавиатуры.
If (условие) – указание программе, что делать, если…
Finditem (код предмета) - поиск в открытой сумке какого-либо предмета.
Set (что-то чему-то) - присвоение переменной\константе определенного
значения. Можно вводить цифры, буквы, названия констант\переменных.
Goto (название процедуры) – после этой команды программа начинает выполнять
заданную процедуру.
Wait (время в секундах) – задержка в скрипте на заданное время.

Практика:
Теперь рассмотрим употребление этих команд на практике в различных
ситуациях.
Код предмета
Откуда можно взять код предмета для использования в других командах?
Делаем двойной щелчок на нужном предмете в игре, потом смотрим в окно
переменных, а именно "Last Action"(строка #LOBJECTTYPE). Берем оттуда 3 символа и вписываем их в
скрипт. Все, код предмета у нас есть. Так же можно посмотреть ID предмета в строке #LOBJECTID.
Перетаскивание предмета
Почему после команды Event drag предмет никуда не перетаскивается?
Потому, что эта команда обозначает начало процедуры перетаскивание (грубо
говоря, получается так, что игрок зажал кнопку мыши и повел в сторону, но
кроме этого ничего не сделал).

Делается это так:
Event drag <код предмета>
Wait 1s
Key &#40;Цифра,если нужно вводить количество,если нет, то эту строку 
пропускаем&#41;
Key Enter
Click &#40;x,y&#41; – координаты той экранной точки, куда вам нужно что-то кинуть
Команда if
Как использовать команду if?
Для начала, после if задаем условие выполнения действия (к примеру, если чара
убили и он гост)
If #charghost = yes
Далее, если мы хотим после этой команды сделать одно действие (чар бежит к
хилеру и тот сам его оживляет), то на следующей строке пишем действие:
If #charghost = yes
Move &#40;x,y&#41; – координаты хиллера
А если действий более одного (чар бежит к кресту, то есть надо еще и кликать
на крест), то блок команд, который должен выполняться, берется в скобки:
If #charghost = yes
&#123;
Move &#40;x,y&#41; – координаты креста
Click &#40;x,y&#41; - экранные координаты креста
&#125;
Использование журнала в добыче ресурсов
Итак, как заставить программу понимать сообщение игры "Рыбы здесь
нет…" - или соответственно сообщение для ламбера и майнинга. Делается это
так – вылавливается одна точка (до появления сообщения), потом открывается
окно переменных и смотрится переменная #sysmsg (важно успеть это сделать, пока системное сообщение видно на экране ультимы. Пропадает сообщение на экране - пропадает значение #sysmsg). Копируется в буфер обмена “сообщение” которое является значением этой переменной (не обязательно полностью, можно лишь часть), после этого пишется:
If <сообщение> in #journal
Goto next &#40;название процедуры следующей точки&#41;.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • Boralgin
  • Автор темы
  • Ветеран
  • Сообщений: 155
  • Thanks: 0
Не в сети

Re: RE: Инуструкция по написанию макросов в EasyUO

#3767
В первой части был список команд, которые наиболее часто
используются при написании макросов. Теперь посмотрим более полный
список, с объяснением назначения каждой из команд.

Команды контроля скрипта:
call – Включает макрос, расположенный в другом файле.
cmpPix – Вставляет выбранный пиксель на место предыдущего.
exit – Останавливает макрос.
for – Создает счетчик.
gosub – Переводит скрипт на другой sub.
goto – Переводит исполнение скрипта на указанную процедуру.
halt – Заканчивает скрипт.
if – Команда задания условия.
pause – Задает паузу в скрипте.
return – Возвращает выполнение скрипта на предыдущее место после sub.
stop – Заканчивает скрипт.

Команды клиента:
chooseSkill – Показывает значение определенного умения (скилла).
click – Делает щелчок мышкой на определенные экранные координаты в клиенте.
deleteJournal – Стирает содержимое журнала.
findItem – Ищет вещи, монстров, НПЦ по их ID.
getUOTitle – возвращает текст, написанный на заглавии окна клиента.
hideItem – «прячет» предмет (его не видно в окне клиента).
ignoreItem – Стирает код предмета из списка finditem.
key – Имитирует нажатие клавиши.
move – Указание персонажу двигаться в определенные координаты.
msg – Выдает сообщение в окне клиента (в качестве речи).
nextCPos – Определяет, где откроется следующий контейнер.
onHotKey – Указывает, какие действия будут произведены, если нажать
определенную клавишу.
savePix – Сохраняет цвет указанного пикселя.
setUOTitle – Устанавливает текст на заглавии окна клиента.
scanJournal – ищет какую-либо информацию в журнале игрока.
sleep – Ожидает указанное количество времени.
target – Ожидает, когда появится значок цели.
terminate – Закрывает выбранный клиент.
uoXL – Запускает\выбирает клиенты.
wait – Ожидает указанное количество времени.

Команды Event:
event Drag – Переносит объект.
event ExMsg – Показывает сообщение над определенным предметом.
event Macro – Выполняет event macro.
event PathFind – двигает чара по определенным координатам.
event Property – Читает описание предмета.
event SkillLock – Лочит\разлочивает определенные умения.
event Sleep – Ждет указанное количество времени.
event SysMessage – Выдает сообщение в окне клиента (как системное).
initEvents – Включает все команды event.

Команды, используемые в магазине:
getShopInfo – Выдает информацию о товаре, имеющемся у определенного продавца.
setShopItem – Задает количество покупаемых вещей (по коду предмета).

Menu Commands:
menu Activate – Включает меню в окне программы.
menu Button – Создает кнопку по определенным координатам в меню программы.
menu Clear – Очищает все меню.
menu Delete – Стирает окно в EasyUO.
menu Edit – Создает меню редактирования по указанным координатам указанной
ширины.
menu Font Align – Меняет вид шрифта.
menu Font BGColor – Задает цвет фона в программе.
menu Font Color – Меняет цвет шрифта.
menu Font Name – Меняет тип шрифта.
menu Font Size – Меняет размер шрифта.
menu Font Style – Меняет стиль шрифта.
menu Get – Вставляет текст в меню редактирования.
menu GetNum – Возвращает количество меню редактирования.
menu Hide – Сворачивает окошко меню EasyUO.
menu HideEUO – Сворачивает основное окно.
menu Show – Показывает окно меню.
menu Text – Создает текст в меню.
menu Window Color – Меняет цвет окна.
menu Window Size – Меняет размер окна.
menu Window Title – Меняет заголовок окна.

Различные команды:
deleteVar – Стирает значение переменной.
display – Показывает сообщение.
execute – Включает определенную программу.
linesPerCycle – Меняет скорость работы программы.
playCD – Начинает проигрывать диск в сдроме.
set – Присваевает переменной значение.
send – Посылает на сервер запрос и выводит полученный ответ.
shutDown – Выключает компьютер.
sound – Проигрывает звуковой файл.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • Boralgin
  • Автор темы
  • Ветеран
  • Сообщений: 155
  • Thanks: 0
Не в сети

Re: RE: Инуструкция по написанию макросов в EasyUO

#3768
CALL
Синтаксис: CALL FILENAME [(Var1) (Var2) (VarX)]
CALL вызывает другой скрипт из текстового файла и потом возвращается к главному скрипту. Обычное расширение скрипт-файла: .txt Если вы работаете со сложным скриптом - возможно с сотнями линий кода, мы настоятельно рекомендуем разбить скрипт на файлы.
См. также: EXIT - как выйти из скрипта вызванного "CALL". Команда CALL поддерживает параметры. Параметры хранятся в переменных: %1 %2 %3 и т.д.

Пример:
call macromine 
call macromine.scr 
call mminer&#92;macromine 
call c:&#92;scripts&#92;mminer&#92;macromine.txt 
call test.txt hail and farewell 
halt 
***test.txt*** 
msg %1 %2 %3 $ 
***end***

CHOOSESKILL
Синтаксис: CHOOSESKILL SKILL [REAL]
Используйте CHOOSESKILL, чтобы выбрать навык, который появится в системной переменной #skill. Вам необходимо ввести первые 4 знака названия навыка, так вместо magery вы можете использовать mage или magenta Исключения: AnimalLore и Stealth названы anil и stlt.

CLICK
Синтаксис: CLICK x y [r d g p n]
Кроме обычного щелчка вы можете использовать: правый щелчок(r), двойной щелчок(d), тянуть(g), положить(p), или не делать ничего кроме перемещение курсора. Найти координаты курсора можно в нижней части окна EasyUO, справа от положения вашего персонажа. Используйте тянуть и положить для перемещения объектов. Если вы любите сёрфинг в интернете (или делаете что-то еще на своей машине, во время работы скрипта) выберите
опцию в EasyUO - не перемещать курсор, чтобы предотвратить ультимный курсор от перемещения. Эта опция не всегда работает.
При перемещении кучки вы можете тянуть, нажать ентер, и затем нажать на конечное местоположение.

Пример:
click 639 479 
click 200 70 d 
click 300 50 g 
click 300 100 p 
click 300 100 r 
click 300 50 g 
msg $ 
click 300 100 p

CMPPIX
Синтаксис: CMPPIX {Number} {t f}
cmppix сравнивает цвет двух сохраненных точек (см. SAVEPIX). Если они равняются, то следующая линия обрабатывается. Используйте f (false), чтобы изменить эффект наоборот.

Пример:
cmppix 1 
cmppix 1 t 
cmppix 50 t 5 
cmppix 50 f 5

CONTPOS
Синтаксис: CONTPOS xcord ycord
Перемещает последний открытый контейнер в позицию x , y. Использование этой функции в людных местах подобно Бритбанку не рекомендуется, но это должно работать в вашей шахтерской лачуге. При использовании UOA выключите опцию Display/Show Container Count.

Пример:
msg bank $ 
wait 20 10 
contpos 10 10 
halt

DELETEJOURNAL
Синтаксис: DELETEJOURNAL
Эта команда заставляет scanjournal игнорировать прошлую читаемую линию и все линии выше.

Пример:
for %cnt 10 1 
&#123; 
scanjournal %cnt 
if hail in &#92;#journal 
&#123; 
msg farewell!$ 
deletejournal 
&#125; 
&#125;

Если вы или кто-то еще говорит “привет”, вы ответите
“Прощай” только однажды.

EVENT DRAG
Синтаксис: EVENT DRAG dragid
Эта команда тянет определенный предмет без использования мыши. Не имеет значения, находится предмет на земле или в сумке. С этой командой нельзя использовать переменную #ndmod. Чтобы отпустить вещь - используйте команду CLICK.
Пожалуйста, обратите внимание: прежде чем использовать событийные команды, вы должны инициализировать их с помощью InitEvents в начале скрипта.

Пример:
initevents 
event drag #lobjectid 
msg $ 
click 123 456 p

EVENT SKILLLOCK
Синтаксис: EVENT SKILLLOCK SKILLNAME UP DOWN LOCKED
Эта команда изменяет статус замка данного навыка (вверх, вниз или заперто).

Пример:
EVENT SKILLLOCK MAGE DOWN 
;this sets your magery skill down 
EVENT SKILLLOCK ARMS LOCKED 
;this sets your Arms Lore Skill locked

EVENT SYSMESSAGE
Синтаксис:
Создает системное сообщение, которое появляется в левом нижнем углу экрана. Другие люди не могут видеть его. Чтобы изменить цвет сообщения, вы можете использовать переменную #SYSMSGCOL.

Пример:
EVENT SYSMESSAGE This is a Systemmessage

EXECUTE
Синтаксис: EXECUTE command
Используйте EXECUTE, чтобы запустить внешние программы. Вы можете также определить параметры командной строки. Чтобы использовать execute, вы должны разрешить это в EasyUO.

Пример:
execute easyuo.exe anotherscript.txt 
execute http://www.uogames.ru 
execute mailto:[email protected]

EXIT
Синтаксис: EXIT
Выход из подскрипта. Если вы используете команду выхода в главном скрипте,
выполнение будет повторно начато в первой линии.

FINDITEM
Синтаксис: FINDITEM [itemid itemtype]
Находит предметы определенного типа. Определите тип изделия которое вы будете искать. Вы можете получить тип каждого объекта двойным щелчком на него и последующей проверкой переменной #LObjectType. Если вы хотите найти больше одного объекта определенного типа, используйте индекс, чтобы определить о каком именно объекте вы хотите получить информацию. Например, ища Katana, которых в сумке 2 штуки, вы получаете первый используемый индекс = 1, и второй используемый индекс = 2.

Возвращаемые значения:
#FindID, 
Id найденного предмета. Пишите это в #LTargetID, и используйте это с вашим UO last target macro. &#40;Работает также с #LObjectID&#41; 
#FindX 
X позиция предмета 
#FindY 
Y позиция предмета 
Внимание: они должны быть приспособлены для использования #ndmod для операции тащить и класть. 
#FindKind 
В эту переменную функция возвращает код : 
Возможные значения: 
0 = предмет находится в рюкзаке 
1 = предмет находится на полу
-1 = предметы не были найдены

Дополнительная информация:
Предметы, которые вы ищете, должны быть на экране. Мешки, в которых они могут быть, должны быть открыты.
Если вы указали неверный индекс FindKind, он становится –1.
FindBagID показывает ID мешка, предмет - внутри.
FindItem сортирует предметы по их ID. Предметы должны сохранять свои индексы даже когда перемещены в другой мешок (кроме случаев когда вы добавляете новые предметы или удаляете их).
FindItem: использовать IDs чтобы найти предмет очень полезно, если вы знаете что вы ищите (например NPC Продавец). Только определите ID этого типа. Вы можете легко определять тип монстров или животных. Нажмите на них мишенью, получите Id из LTargetID и сделайте FindItem по определенному ID. Тип записан в новую переменную #FindType.
FindItem: несколько типов, Ids и wildcards (*)
Одновременно можно определять больше чем одного типа или IDat. Их можно смешивать.
;Typ1 = XYY, Typ2 = XYZ, ID = ABCDEFG 
nditem XYY XYZ ABCDEFG 
; IS = Male, HS = Female 
nditem HS IS 
FindItem: #FindType

Это необходимо, чтобы определить тип найденного предмета (при определении нескольких разных типов).
FindItem: #FindMod может быть задействована после нахождения. Необходим при использовании нескольких разных типов, поскольку у них разные модификаторы.


FOR
Синтаксис: FOR variable value1 value2 lines
Используйте FOR, чтобы создавать классический цикл FOR/NEXT, который вы так любите в бейсике.
Переменная = индекс цикла
Может использоваться в вашей программе
Value1 = начальное значение
Value2 = конечное значение
Используйте структуру блоков с { скобками, или определите число линий, которые будут обработаны.

Пример:
Bsp1: 
for %cnt 1 10 2 
msg %cnt $ 
wait 20 
halt 
Bsp2: 
for %cnt 1 10 
msg %cnt 
msg $ 
halt 
Bsp3: 
for %cnt 1 10 
&#123; 
msg %cnt $ 
wait 20 
&#125; 
halt 
Bsp4: 
msg backward: $ 
for %cnt 10 1 
&#123; 
msg %cnt $ 
wait 20 
&#125; 
halt 
Bsp5: 
msg verschachtelt$ 
for %cnt1 2 0 
&#123; 
for %cnt2 9 0 
&#123; 
msg %cnt1 %cnt2 $ 
wait 20 
&#125; 
&#125; 
halt 
msg verschachtelt$ 
for %cnt1 2 0 
&#123; 
for %cnt2 9 0 
&#123; 
msg %cnt1 %cnt2 $ 
wait 20 
&#125; 
&#125; 
halt

GOSUB
Синтаксис: GOSUB subroutine
Можно использовать подпрограмму, если это секция кода, которая часто используется.
Например, у вас есть часть кода, которая называется Z. Оствльные к примеру назовем A, B, C. Подпрограмма (процедура) позволяет легко сделать такую структуру: A, Z, B, Z, C, Z
К примеру, есть скрипт по майнингу. Чар перемещается в разные места и в каждом копает. У меня есть процедура копания. В каждом месте я просто запускаю эту процедуру...
Команды, которые вы должны знать - sub, gosub, и return. Процедура начинается с sub и названия (например sub dig), и заканчиваются словом return. Вызывать процедуру можно используя команду gosub, сопровождающуюся названием процедуры.

Пример:

В этом макросе чар сначала пойдет в локацию 1, покапает. Затем перейдет в локацию 2, покапает. Затем пойдет в локацию 3, покапает и остановится.
location1: 
move 2000 1500 a 10s 
gosub dig 
location 2: 
move 2005 1505 a 10s 
gosub dig 
location 3: 
move 2010 1510 a 10s 
gosub dig 
HALT 
sub dig 
set #lobjectid %shovel 
key %lastobjectkey 
click 400 400 
return

GOTO
Синтаксис: GOTO label
Используйте GOTO, чтобы перейти к определенной метке в вашем коде. Метки должны закончиться двоеточием (старый добрый DOS)

Пример:
Beginning: 
call run_only_once.txt 
Continue: 
call important.txt 
..... 
goto Continue

HALT
Синтаксис: HALT
ОСТАНАВЛИВАЕТ программу подобно выбору остановки в меню. Для полного перезапуска скрипта.

IF
Синтаксис: IF var1 Operator var2 [NrOfLines]
При использовании IF следующая линия будет обработана толко в случае получения TRUE. Необходимо использовать пробелы до и после оператора. Операторы: =, >, <, <>, =, < =. Блочная структура: Вместо определения числа линий, которые будут обработаны вы можете использовать { образные скобки чтобы отмечать линии, которые будут обработаны.
Новые операторы: IN и NOTIN
( См. также выражение scanjournal )

Пример:
if #weight > 390 
msg overloaded!!!$ 
if 1 > 2 2 
msg not processed$ 
msg not processed$ 
msg continued here$ 
halt

IGNOREITEM
Синтаксис: IGNOREITEM id type reset
    Первоначально IgnorItem был задуман, чтобы справляться с некоторыми проблемами при FindItem. Но это оказалось очень полезным для навыков подобно Провокации. Когда вы игнорируете предмет/человека, это больше не замечается FindItem. Это может, например, использоваться для отравления, чтобы избежать отравления того же оружия дважды.

    Пример:
IGNOREITEM id 
IGNOREITEM reset 
;IgnLists.txt 
;This script will demonstrate 
;the use of several ignoreitem 
;lists. Press the start button, 
;go to a shop, and target two 
;NPCs of your choice! 
msg; Take a dagger and target NPC 1$ 
wait 3s 
msg; &#40;Press play to continue&#41;$ 
pause 
set %npc1 #ltargetid 
msg; Take a dagger and target NPC 2$ 
wait 3s 
msg; &#40;Press play to continue&#41;$ 
pause 
set %npc2 #ltargetid 
msg; ---Start---$ 
ignoreitem %npc1 1 
ignoreitem %npc2 2 
msg; Nothing will be found$ 
finditem %npc1 
msg; 1: #findid $ 
wait 3s 
finditem %npc2 
msg; 2: #findid $ 
wait 3s 
ignoreitem reset 1 
msg; NPC 1 will be found$ 
finditem %npc1 
msg; 1: #findid $ 
wait 3s 
finditem %npc2 
msg; 2: #findid $ 
wait 3s 
ignoreitem %npc1 1 
2 &#40;ENGLISH&#41; COMMANDS 20 
ignoreitem reset 2 
msg; NPC 2 will be found$ 
finditem %npc1 
msg; 1: #findid $ 
wait 3s 
finditem %npc2 
msg; 2: #findid $ 
wait 3s 
msg; ---End---$ 
halt

INITEVENTS
Синтаксис: initevents
Чтобы использовать событийные команды, initevents должен быть выполнен однажды. 'Однажды' относится к случаям клиента. Это означает, каждый раз когда вы стартуете клиент, вы должны использовать команду initevents. Один пример был бы в начале вашего главного скрипта, с поздними запусками некоторых процедур в цикле.

Пример:
initevents

KEY

Синтаксис: KEY key [alt] [ctrl] [shift]
Функция KEY посылает нажатия клавиш в UO. Вы можете использовать A-Z, 0-9, F1 к F12, и некоторые другие специальные клавиши. Дополнительные комбинации с ctrl, alt или shift также могут быть реализованы. Дополнительная информация: При запуске больше чем одной UO, может случаться что спец. клавиши ( ctrl, alt, shift) не работает. В этом случае используйте F1 - F12, чтобы избежать этой проблемы.
Специальные клавиши - ESC, BACK, TAB, ENTER, PAUSE, CAPSLOCK, SPACE, PGUP,
PGDN, END, HOME, LEFT, RIGHT, UP, DOWN, PRNSCR, INSERT, DELETE,
NUMLOCK и SCROLLLOCK.

Пример:
key f1 
key a ctrl 
key esc 
key f4 alt &#40;Well ... You wouldn't use this one, would you?&#41;

MOVE
Синтаксис: MOVE x y [tolerance] [maxtime]
MOVE перемещает ваш персонаж в данные целевые координаты, которые могут быть замечены в первой колонке статусбара. Tolerance определяет расстояние от чара к объекту. Если tolerance нет, она определяется стандартным значением 2.
Есть также параметр ограничения времени maxtime, после прохождения которого ход отменяется, если цель не была достигнута.

Пример:
move 1418 1697 
move 1439 1693 1 
move 1439 1693 0 15s

MSG
Синтаксис: MSG message [$]
Команда MSG посылает текст в UO, как будто это было набрано с клавиатуры. Знак доллара – то же самое что нажатие Enter.

Пример:
msg forward $ 
msg hail $and $farewell $ 
Last update 10-28-01 by Cheffe

NEXTCPOS
Синтаксис: NEXTCPOS xcord ycord
Используйте NEXTCPOS, чтобы установить координаты для следующего открытого контейнера к x y. Вы можете определить отрицательные значения, но будьте осторожны и не размещайте ваш контейнер вне поля зрения. Это может (в отличие от contpos) использоваться в людных местах.

Пример:
nextcpos 10 10 
wait 10 
msg bank $

ONHOTKEY
Синтаксис: ONHOTKEY key [strg alt shift]
Команда OnHotKey - полезна для выполнения действий при нажатии кнопки, типа питья микстуры или использовании бинтов. Команда OnHotKey выполняет лишь следующую линию после себя. Так что лучше использовать goto или gosub. Я предпочитаю goto.
Чтобы эти кнопки были доступны, необходимо создать цикл.

Пример:
HotkeyLoop: 
OnHotKey F1 
GOTO MessageOne 
OnHotKey F2 
GOTO MessageTwo 
GOTO HotkeyLoop 
MessageOne: 
msg Congrats, you pressed F1 $ 
goto HotkeyLoop 
MessageTwo: 
msg Congrats, you pressed F2 $ 
goto HotkeyLoop

PAUSE
Синтаксис: PAUSE
Команда PAUSE прерывает выполнение скипта. Выполнение может быть продолжено со старой позиции снова, после нажатия кнопки Play.

Пример:
PAUSE

PLAYCD
Синтаксис: PLAYCD диск
Проигрывает диск. Удобен когда небходимо вернуть ваше внимание к игре.

Пример:
if #hits < 90 
playcd d: 
if #hits < 30 
call rescue.txt

SAVEPIX
Синтаксис: SAVEPIX xcord ycord memory
Savepix сохраняет цвет в данных координатах. В целом, вы можете сохранять до тысячи разных точек. Системная переменная #pixcol всегда показывает цвет последней сохраненной точки.

Пример:
savepix 620 400 1 
savepix 430 210 2

SCANJOURNAL
Синтаксис: scanjournal [entry index]
При использовании scanjournal [entry index] вы можете увидеть линию журнала нумерованною [entry index] в переменной #journal.
scanjournal 1 = последняя строчка журнала
scanjournal 2 = строчка перед последней
Вы можете проверять строковое значение в #journal, используя операторы IN и NOTIN.
#journal не обновляется, вы должны сделать цикл.

Пример:
Example: 
scanjournal 1 
if is_attacking_you in #journal 
&#123; 
msg Guards ! $ 
call recallme 
&#125; 
goto Example

SET
Синтаксис: SET variable value [+ - * / [value]]
Используйте SET, чтобы установить или изменить переменные. EUO Версии большее чем 1.11b позволяет использование операторов +,-, *,/ и % . Числа в Изи всегда положительны, так что 4 равняется -4. Это может использоваться, чтобы вычислить расстояние к объектам и т.д.

Пример:
Syntax1: SET variable value &#91;operator value&#93; 
Syntax2: SET variable value &#91;+ - * / &#91;value&#93;&#93; 
set #lspell 40 
set #lspell #lskill 
set *1 #weight2 
set *1 *1 - 1 
set *1 *1 + 
set *1 #mana + 5 

Example of an FOR NEXT loop: 
set *1 30 
N1: 
set *1 *1 - 1 
msg; *1 $ 
wait 20 
if *1 > 0 
goto N1 
msg done$ 
halt

SHUTDOWN
Синтаксис: SHUTDOWN [FORCE]
Этой командой вы можете выключать ваш компьютер. При выборе force закрываются неотвечающие задачи.

Пример:
if #time = 1900 
&#123; 
shutdown force 
&#125;

STOP
Синтаксис: STOP
Останавливает программу подобно выбору остановки в меню. Происходит полный рестарт скрипта.

Пример:
if #time = 2300 
&#123; 
msg go home $ 
stop 
&#125;

TARGET
Синтаксис: TARGET [maxtime]
Target останавливает выполнение скрипта, пока не появляется targetcursor. Maxtime определяется максимальным временем, которое может пройти перед отменой команды Target. Стандартное значение для maxtime – 2 секунды.

Пример:
target 7s

Variables
Синтаксис: нет.
В EasyUO есть два разных типа переменных: системные и определенные пользователем. Системные переменные непосредственно взаимодействуют с UO и главным образом только читаются. Просмотреть список этих переменных вы можете в окне переменных. Системные переменные отождествляют с префиксом (#). Кроме того, есть два разных типа пользовательских переменных, которые могут быть используемыми и измененными свободно, чтобы хранить числа и строки. Возможны простые вычисления, что позволяет строить циклы FOR-NEXT. Вы можете посмотреть короткий пример в описании команды SET. Глобальные пользовательские переменные создаются с номером от 1 до 100 и (*) символом впереди. Они глобальны, что означает что они доступны во всех случаях EUO. Содержание этих переменных занесено в реестр Windows и все еще доступно после перезагрузки. Локальные пользовательские переменные имеют силу в конкретном моменте EUO, построены с идентификатором на ваш выбор и символа (%) впереди.

Пример:
&#40; ObjectIDs железной двери первого банка Brit, Felucca, Drachenfels&#41;: 
Если #lobjectid = KKEGUND 
goto sayit 
Если OPNGUND < > #lobjectid 
exit 
sayit: 
msg; I'm going into britbank now!$ 
halt

WAIT
Синтаксис: WAIT time [randomtime]
Функция WAIT останавливает выполнение скрипта до тех пор пока не пройдет указаное время. Вы можете определить
продолжительность в секундах или в шагах по 50ms. Ждать 1s = ждать 20. Если есть randomtime, то он прибавляется к времени ожидания.

Пример:
wait 5s 
wait 2s 1s

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • Boralgin
  • Автор темы
  • Ветеран
  • Сообщений: 155
  • Thanks: 0
Не в сети

Re: RE: Инуструкция по написанию макросов в EasyUO

#3769
Теперь посмотрим на сами переменные:

Описание системных переменных EasyUO.

#CHARDIR
Определяет направление в которое смотрит чар.
Возможные значения:
0 = facing North
1 = facing NorthEast
2 = facing East
3 = facing SouthEast
4 = facing South
5 = facing SouthWest
6 = facing West
7 = facing NorthWest

Пример:
top: 
if #CHARDIR = 0 
msg : Looking North $ 
wait 2s 
goto top

#CHARPOSX
В этих двух переменных - текущее положение чара. Значения соответствуют x/y координатам UO auto map.

Пример:
msg #CHARPOSX $ 
msg #CHARPOSY $ 
halt

#CHARSTATUS
В #CHARSTATUS - текущий статус чара:
C = poisend
H = hidden
CH = poisend and hidden

Пример:
if C in #CHARSTATUS 
&#123; 
call cureme.txt 
&#125;

#CONTID
Эта переменная содержит id активного в настоящее время контейнера. Это означает, что если вы открываете ваш рюкзак, #contid будет EGKTIND как в примере. Если вы теперь открываете другой контейнер, id изменится на id нового открытого контейнера (JHBVFTZ как в примере). Если вы теперь тянете предмет из вашего рюкзака, #contid изменится назад на EGKTIND, если вы теперь кладете предмет в другой контейнер, #contid изменится на JHBVFTZ. Команда contpos установит позицию активного контейнера. Это означает, что contpos использует #contid, чтобы установить его в новую позицию.

Пример:
key i alt 
msg #contid Dies ist meine eigene Rucksack ID $ 
contpos 200 200

#CONTPOSX
В этих переменных сохранено x/y положение контейнера. Эти переменные лучше всего опишет команда NETXCPOS, которая устанавливает обе переменные.

#CONTTYPE
Эта переменная показывает тип контейнера, который в настоящее время открыт и находится в фокусе/активнен.

Пример:
key i alt 
wait 20 
msg #conttype ist der Type meines Rucksacks.$

#CURSORX
Координаты курсора мыши.

#DEX
В этой переменной числовое значение ловкости.

#FINDBAGID
Когда вы ищете предмет с помощью finditem, и тот предмет находится в контейнере или мешке, то в этой переменной будет id этого мешка.

#FINDDIST
Эта переменная позволяет ограничивать расстояние с котороым EasyUo будет искать цель, указаную в команде target (next target). Самый легкий пример в макро provoke , который ищет цели, чтобы provoke на них.

Пример:
initevents 
initevents 
;use skill event macro provoke 
event macro 13 22 
target 
;section for first provoked animal 
;section or marker id 
x: 
;target next event macro command 
event macro 26 0 
wait 10 
finditem #ltargetid 
;to not target blues when provoking 
if #findrep < 3 
goto x 
;the part of the macro that this example 
;Provoke does not work if targets are too 
;far away so the macro is made more 
;efficient by limiting the search areas to 
;10 tiles in any direction. 
if #finddist > 10 
;you need to loop back to the target next 
;command to choose a new target 
goto x 
;if the target is within 10 tiles you need 
;to use the last target key to apply the 
;target 
;here is the event macro for last target 
event macro 22 0 
;this is the section for the second target 
;to provoke on, it is the same as the 
;previous section. 
y: 
event macro 26 0 
wait 10 
finditem #ltargetid 
if #findrep < 3 
goto y 
if #finddist > 10 
goto y 
event macro 22 0 
wait 10s 
if yes in #charghost 
halt

#FINDID
Если вы ищет предмет с использованием nditem, переменная #ndid будет содержать ID предмета, который вы найдете.

Пример:
nochmal: 
finditem POF 
if #findkind = 1 2 
ignoreitem #findid 
goto nochmal 
if findkind = -1 1 
halt 
msg #findid is the ID of the gold in my bag.I have exactly #findstack gold on me.$

#FINDKIND
Показывает, где предмет был найден.
#findkind -1 = Предмет не найден.
#findkind 0 = Предмет находится в мешке.
#findkind 1 = Предмет находится на земле.

#FINDREP
1 : Innocent
2 : Friend
3 : Gray
4 : Criminal
5 : Enemy
6 : Murderer
У серого (3) более высокий приоритет чем у остальных.

#FINDSTACK
Эта переменная показывает кол-во изделий в стеке, который найден командой finditem.

#FINDX
Показывает значение X предмета, который найден finditem. Также читается #FINDMOD

Пример:
finditem %forgeid 
if #findkind = 1 
&#123; 
msg The Forge is at X #findx $ 
msg The Forge is at Y #findy $ 
ignoreitem %forgeid 
halt 
&#125;

#GOLD
В этой переменной показано сколько золота ваш чар имеет в рюкзаке. Чтобы это значение было верно, то необходимо, чтобы полоса статуса была открыта.

#HITS
Показывает кол-во хитов чара. Чтобы эта переменная была определена правильно, полоса статуса должна быть открыта.

Пример:
if #hits < #str 
&#123; 
msg i need healing $ 
call healme.txt 
&#125;

#INT
Значение интеллекта вашего чара.

#JOURNAL
Когда вы используете команду scanjournal в этой переменной будет хранится значение сканированой линии.

Пример:
scanjournal 1 
if YOU_SEE_LORD_BRITISH in #journal 1 
msg Hail to thee, Mylord!$

#LHANDID
Эти переменные содержат id последнего предмета/оружия/щита, который вы носили. #lhandid предназначен для левой руки, а #rhandid - для правой. Можно использовать это в UO Makro вооружаться/разоружаться.

Пример:
set %waffe; 
nochmal: 
finditem %waffe %cnt 
if #findkind = -1 1 
halt 
set #lhandid #findid 
key f5;UO Makro for arm/disarm 
wait 1s 
key f5;UO Makro for arm/disarm 
wait 1s 
ignoreitem #findid 
goto nochmal

#LLIFTEDID
Эта переменная содержит id последнего тянутого/поднятого объекта.

Пример:
initevents 
finditem JTL 
event drag #findid 
wait 20 
msg $ 
wait 20 
msg Der Gegenstand hat die ID #lliftedid $

#LOBJECTID
В этой переменной хранится уникальный id предмета, который вы использовали в последний раз. Если вы нажмете дабл-кликом на молоток кузнеца, id этого молотка будет показываться здесь.

#LSKILL
Тут хранится последний навык, который вы использовали. В эту переменную можно записывать.

#LSPELL
Тут хранится последний спелл, который вы использовали. В эту переменную можно записывать.

#LTARGETID
Тут хранится id последнего предмета/чара/животного, которое вы выбирали. Использовать можно чтобы найти id предмета или можно записывать в эту переменную, чтобы установить последнюю цель.

#LTARGETKIND
Здесь видно, является ли ваша последняя цель ресурсом подобно дереву или объекту. Эта переменная может быть перезаписана.

#MANA
Тут показанна мана чара. Чтобы эта переменная была определена правильно, полоса статуса должна быть открыта.

#NEXTCPOSX
С помощью этой переменной можно контролировать где откроется следующий контейнер.

#PIXCOL
Если вы сохраняете код цвета точки с помощью savepix x y 0, он показан в этой переменной.

#RHANDID
Также есть #LHANDID

#SCNT
Таймер в секундах. Начинается с 0, с запуска окна.

#SHARD
Название текущего шарда.

#SHOPCNT
Количество изделий у вендора.

#SHOPCURPOS
Номер верхнего предмета в списке вендора. Переменная обновляется командой GETSHOPINFO.

#SHOPITEMID
ID верхнего предмета в списке вендора. Переменная обновляется командой GETSHOPINFO.

#SHOPITEMMAX
Кол-во верхнего предмета в списке вендора. Переменная обновляется командой GETSHOPINFO.

#SHOPITEMNAME
Название верхнего предмета в списке вендора. Переменная обновляется командой GETSHOPINFO. Иногда это работает, иногда нет.

#SHOPITEMPRIZE
Цена верхнего предмета в списке вендора. Переменная обновляется командой GETSHOPINFO.

#SHOPITEMTYPE
Тип верхнего предмета в списке вендора. Переменная обновляется командой GETSHOPINFO.
Тот же самый тип, который вы найдете в переменных #LOBJECTTYPE и #FINDTYPE.

#SKILL
Показывает текущий уровень навыка, который был выбран командой CHOOSESKILL.

#SKILLLOCK
Показывает текущее состояние замка навыка, который вы выбрали командой CHOOSESKILL.

Пример:
CHOOSESKILL MAGE REAL 
msg Currently magery is set &#92;#skilllock$ 
<hr>

#STAMINA
В этой переменной записана текущая стамина вашего чара. Чтобы эта переменная была определена правильно, окно статуса должно быть открыто.

#STR
В этой переменной записана сила вашего чара.

#SYSMSG
Эта переменная содержит текущее системное сообщение. Системное сообщение - сообщения в низком левом углу экрана.

Пример:
if DU_BIST_ZU_MOUDE in #sysmsg 1 
msg Ich leg mich jetzt schlafen!!!$

#SYSMSGCOL
Этой переменной вы можете изменять цвет системного сообщения.

Пример:
initevents 
for %i 1 1000 
&#123; 
set #sysmsgcol %i 
event sysmessage HELLO %i 
wait 10
[small]Найдено на просторах интернета, видоизменено, исправлено и дополнено.[/small]

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.