Page 1 of 5
EasyUO. Микросправочник
Posted: 2006-10-01 17:32:52
by Edred
Начну потихоньку постить. Еще не закончил, но многое сделано. После выхода версии 1.5, считаю что Изя - идеальное решение для добывающих скриптов. Так что моя рекомендация:
1. Изя для добывающих
2. Стелс для прокачки
3. Инжект для ПвП и ПвМ.
Так-с, текстовые выделения, естественно, слетают. Когда справочник будет закончен - планирую выложить его где-нибудь на сайте, вообще давно пора сделать собственный сайт для всех моих справочников и учебников
Code: Select all
Микросправочник по скриптингу в EasyUO
Ver. 1.00, (с) Edred, 2006.
Описана версия EasyUO 1.5 (EuoX). Будьте внимательны! Многие операторы и переменные (например, операторы цикла) в более ранних версиях недоступны!
Данный справочник не является учебником! За разжевыванием простейших вещей добро пожаловать в уроки скриптинга на инжекте (благо и язык, и функции, и переменные во многом схожи).
Содержание:
I. Язык
II. Системные функции
III. Системные переменные и константы
I. Язык
Переменные. Есть четыре типа переменных: standart, namespace, persistent, system. Тип переменной определяется первым символом ее имени.
Standart (существуют во время работы скрипта, доступны только из скрипта, удаляются после выполнения скрипта) начинаются с символа %.
Namespace (доступны через команду nameSpace, бывают локальные и глобальные, локальные – как стандартные, глобальные – доступны из всех скриптов, удаляются после выполнения скрипта) начинаются с символа !
Persistent (хранятся в реестре, доступны во всех скриптах и в разных сессиях работы ИзиУО) начинаются с символа *
System (зарезервированные имена) начинаются с символа #
Все переменные регистронезависимые.
Выражения. Выражения могут быть командой, блоком, процедурой.
Команда: <command_line> <параметры>
Например:
set %var 2 + 2
Блок: список команд, заключенный в фигурные скобки {}. Каждая команда должна быть записана на отдельной строке, включая и {}.
Например:
{
set %var 2 + 2
display ok %var
}
Процедура: начинается с sub (с именем), заканчивается return. Вызов происходит командой gosub имя.
В процедуру можно передавать параметры, перечисляя из через пробел после имени. Параметры автоматически заносятся в локальные переменные %1, %2 и т. д. (в процедуре). %0 содержит количество параметров. Учтите, что локальные переменные %0, %1, %2 и т. д. будут перезаписаны при вызове любой другой процедуры (например, из вашей процедуры).
Операнды. Бывают арифметические, сравнения, логические, объединения.
Арифметические:
%a + %b сложить
%a - %b вычесть
%a * %b умножить
%a / %b разделить
%a % %b остаток от деления %a на %b
ABS %a модуль %a
Сравнения:
%a = %b проверка на совпадение
%a <> %b проверка на несовпадение
%a < %b меньше
%a > %b больше
%a <= %b меньше или равно
%a >= %b больше или равно
%a in %b проверка, содержится ли первая строка во второй
% a notin %b проверка, что первая строка не содержится во второй
Логические:
%a && %b AND (если обе величины true – вернет true)
%a || %b OR (если любая из величин true – вернет true)
! %a NOT (если величина false – вернет true)
Объединения (должны быть первым операндом в строке за исключением пробелов или табуляций):
+ объединение строк.
Например:
Display ok Это
+ одна
+ строка
Halt
, объединение строковых операндов в одну строку
Например:
set %var1 A
set %var2 B
set %test %var1 , %var2
(%test будет AB)
. добавление (массивы) значения второго оператора к первому и вычисление результата
Например:
set %var1 A
set %var2 B
set %var1B s7_is_1337
set %test %var1 . %var2
(%test будет s7_is_1337) Кто бы мне самому объяснил это?
Табличка старшинства операций при вычислении:
Precedence Операнд Associativity
1a . right-associative
2a , left-associative
3 ( ) non-associative
4 - (unary) ! right-associative
5 * / % left-associative
6 + - left-associative
7 < > <= >= in notIn left-associative
8 = <> left-associative
9 && left-associative
10 || left-associative
11 ABS left-associative
Операторы языка.
break Немедленное прерывание любого цикла
Например:
set %Test 1
while %Test < 10
{
;код между фигурными скобками будет выполняться пока %Test меньше 10
;Когда %Test будет равно 7, выполнение цикла будет прервано.
if %Test = 7
break
set %Test %Test + 1
}
display ok %Test $
halt
call Передает управление другому файлу с скриптом
Синтаксис:
Call {файл} [параметры]
Например:
call subs.txt recall %runebookid %runenum
Замечание: управление к первому скрипту будет возвращено, как только в вызываемом скрипте встретится оператор exit или в конце второго файла.
continue Переключает выполнение цикла на следующую итерацию
Например:
for %cnt 1 10
{
if #random % 10 <> 5
continue
display ok Был найден остаток от деления, равный 5!
return
}
exit Завершение вызванного скрипта
Например:
if %pet = all
exit
for Цикл for
Например:
for %i 1 20
{
msg %i $
wait 10
}
gosub Вызов процедуры. Параметры – аналогично call. Возврат из процедуры – команда return. Внимание! ИзиУО поддерживает рекурсию максимальным числом вложений равным 1000. На 1001 вложении вас ждет привет от разработчиков.
Синтаксис:
gosub {subName} [parameters...]
goto Переход по метке. Не выходите за пределы процедуры!
Пример:
loop:
if %donotloop
goto exit
goto loop
exit:
halt Закончить выполнение скрипта. Скрипт не может быть в этом случае перезапущен. Эта команда делает точно тоже самое, что и stop.
Например:
if #findcnt < %amountNeeded
halt
if Условный оператор. Выполняется, если условие истинно
Синтаксис:
if ( expression ) { }
или
if ( expression ) { } else { }
Например:
if %a > %b
display ok a больше чем b
else
display ok a меньше или равно b
pause Временная остановка выполнения текущего скрипта
Например:
if #findkind = 1
{
display ok Выполнение скрипта остановлено. Нажмите кнопку Play в ИзиУО для продолжения.
pause
}
repeat..until Цикл с послеусловием. Всегда выполняется хоть один раз. Прерывается, если условие истинно.
Синтаксис:
repeat { } until ( expression )
Например:
repeat
{
set %str %str , !
str len %str
}
until #strres >= 30
return Возврат управления из процедуры. Возвращаемое значение помещается в системную переменную result.
Синтаксис:
return { expression }
Например:
gosub makeLowerCase #charname
event macro 1 0 my name is #result
halt
sub makeLowerCase
str lower %1
return #strRes
stop Закончить выполнение скрипта. Скрипт не может быть в этом случае перезапущен. Эта команда делает точно тоже самое, что и halt.
Sub Объявление процедуры
while Оператор цикла с предусловием. Выполняется, пока условие истинно.
Синтаксис:
while ( expression ) { }
Например:
while %Test < 10
{
set %Test %Test + 1
}
Posted: 2006-10-01 17:33:23
by Edred
Code: Select all
II. Системные функции
Функциями я их назвал чисто условно, на самом деле это команды, так как задаются отдельной строкой каждая, параметры перечисляются через пробел, результат работы возвращается через различные системные переменные.
Функции клиента УО.
chooseSkill Помещает величину указанного скилла в #skill, а лок-статус в #skillCap
Синтаксис:
chooseSkill {skill name} ["real"]
click Клик в указанной позиции УО клиента (экранные координаты)
Синтаксис:
click {X-coordinate} {Y-coordinate} [Модификаторы]
Модификаторы(можно задавать несколько):
d двойной клик
dmc не перемещать курсор
f быстрый клик
g драг (drag)
mc переместить курсор
n ничего (курсор перемещается)
p дроп (drop)
r клик правой кнопкой мыши
x {count} несколько быстрых кликов
cmpPix Сравнить текущий пиксель с ранее сохраненным (savePix). В зависимости от параметров будет выполняться блок, который задан после функции.
Синтаксис:
cmpPix {number} [true | false]
Параметры:
number номер ранее сохраненного пикселя
true блок исполняется, если текущий пиксель равен ранее сохраненному
false блок выполняется, если текущий пиксель отличен от ранее сохраненного
contPos Перемещает верхний активный гамп в указанные экранные координаты
Синтаксис:
contPos {X-Coordinate} {Y-Coordinate}
deleteJournal Удаляет содержимое журнала
findItem Поиск объекта по типу (типы в Изи имеют буквенное обозначение, 2-3 буквы) или ID (6-8 букв). Если index (порядковый номер) не задан, первый найденный объект будет помещен в системные переменные #find* (целый набор системных переменных, куда помещаются различные характеристики найденного предмета). Если index задан, то index-ный найденный объект будет помещен в #find*. Если вместо ID или типа будет задана * - все объекты всех типов искаться.
Синтаксис:
findItem {{id} | {type} | *} [index] [[G] | [G_{dist}] | [C] | [C_{container id}]]
Параметры:
C Только объект в контейнерах может быть возвращен. (Контейнер должен быть открыт)
C_{container id} Только объект в указанном контейнере может быть возвращен (контейнер должен быть открыт)
G Только объект на земле может быть возвращен.
G_{Dist} Только объект на земле не далее указанной дистанции может быть возвращен.
A Объект с атрибутом Hidden.
CA_{container id} Только объект с атрибутом hidden в указанном контейнере.
Примечание:
Типы объектов можно объединять для множественного поиска в одну строку через подчеркивание (NSF_FSF)
Например:
findItem TSF G_2
if #findkind <> -1
{
event Drag #findID
wait 20
click 200 300 p
}
getShopInfo Возвращает (в переменных #shop*) информацию из клиента о текущем верхнем пункте гампа покупки. Каждый раз когда вы скроллом сдвигаете гамп покупки и вызываете эту функцию, она обновляет указанные системные переменные.
getUOTitle Возвращает текст из заголовка окна клиента. Текст помещается в #strRes.
hideItem Прячет для клиента указанный графический объект. Не оказывает влияния на сервер. Нельзя прятать статику и объект должен находиться на земле.
Синтаксис:
hideItem {id}
ignoreItem Удаляет объект/объекты из списка для поиска findItem. Если задан reset – все предыдущие игнорированные объекты будут возвращены в список для поиска.
Синтаксис:
ignoreItem {{id} | {id-list} | {type} | {type-list} | {"reset"}} [list]
Параметры:
List – номер списка игнорированных объектов. Если не указан, используется глобальный список. Идею использования этих списков я не уловил.
key Посылает в клиент код нажатия клавиши. Код задается символьно и может быть: A-Z, 0-9, F1-F12 и ESC, BACK, TAB, ENTER, PAUSE, CAPSLOCK, SPACE, PGDN, PGUP, END, HOME, LEFT, RIGHT, UP, DOWN, PRNSCR, INSERT, DELETE, NUMLOCK or SCROLLLOCK.
Синтаксис:
key {key-specifier} [[ alt ] | [ ctrl ] | [ shift ]]
Например:
key F4 ALT
move Перемещает чара в указанные мировые координаты. Патчфинд (поиск пути) не используется, для последнего используйте event PathFind. Если чар упрется – то он будет пытаться обойти препятствие по какому-то простейшему алгоритму (выглядит как дерганье), мелкие препятствия обходит успешно. Толерантность по умолчанию 2, таймаут по умолчанию 3 секунды. Для перемещения чара используются клиентские команды типа Cursor Up и пр., не переназначайте их в клиенте.
Синтаксис:
move {X-Coordinate} {Y-Coordinate} [tolerance] [timeout]
Например:
move 1234 1234 2 3s
Параметры:
Tolerance – как близко подойти
Timeout – время подхода, после этого будет пытаться «дергаться».
msg Послать строку в клиент произнесением чаром. Символ $ означает перевод каретки (то есть типа enter).
Например:
msg I wish to lock this down$
target 5s
event Macro 22 ; вызов системного макроса lasttarget
nextCPos Задает экранные координаты, где будет открыт следующий контейнер/гамп
Синтаксис:
nextCPos {X-coordinate} {Y-coordinate}
onHotKey Выполняет следующую строку кода (блок задавать нельзя) в случае нажатия на заданную клавишу. Возможные клавиши такие же, как в функции key.
Синтаксис:
onHotKey {key-specifier] [[alt] | [ctrl] | [shift]]
Пример:
set #lpc 1000
repeat
onhotkey a
gosub hotkey a
onhotkey b
gosub hotkey b
onhotkey c
gosub hotkey c
onhotkey d
gosub hotkey d
onhotkey e
gosub hotkey e
sleep 1
until #false
sub hotkey
{
event sysmessage %1
Loop:
sleep 1
onhotkey %1
goto Loop
return
}
savePix Сохраняет цвет пикселя в заданных экранных координатах под заданным номером. Этот пиксель может быть использован в функции cmpPix. Последний цвет также сохраняется в системной переменной #pixCol.
Синтаксис:
savePix {X-coordinate} {Y-coordinate} [number]
setShopItem Установить количество покупки заданного ID. ID обычно берется из системной переменной #shopItemID.
Синтаксис:
setShopItem {ID} {amount}
Например:
; Выбрать для покупки максимальное количество предмета,
; находящегося в верхней строке гампа покупки
getShopInfo
setShopItem #shopItemID #shopItemMax
setUOTitle Заменить заголовок окна УО
Синтаксис:
setUOTitle {title}
scanJournal Сканирует журнал и помещает найденную строку в системную переменную #journal. В системную переменную #jColor записывается цвет строки.
Синтаксис:
scanJournal {index}
Параметры:
index какую строку журнала использовать. 1 – только последняя строка, 2 – вторая с конца и т. д. Максимально может быть 1000.
Например:
waitForAttack:
scanjournal 1
if is_attacking_you in #journal
msg guards $
goto waitForAttack
sleep Ожидать указанное время, в миллисекундах. Для времени, большего 50 мс, рекомендуется использовать wait.
Синтаксис:
sleep {time}
target Ожидание появления прицела. Умолчание для таймаута – 2 секунды. Таймаут – максимальное время ожидания прицела.
Синтаксис:
target {timeout}
Например:
target 3s
terminate Закрыть текущий УО клиент или ИзиУО. Умолчание – клиент. При закрытии клиента обновляются системные переменные #сliNr и #cliCnt.
Синтаксис:
terminate [{"uo"} | {"euo"}]
uoXL Запустить или переключиться на другой открытый клиент. Обновляются системные переменные #сliNr и #cliCnt.
Синтаксис:
uoXL [{"new"} | {"swap"}]
wait Пауза на указанное время. Время изменяется с шагом в 50 мс. Можно задавать время в секундах (s). Рандом – от 0 до указанного времени.
Синтаксис:
wait {time} [random time]
Например:
wait 5s
wait 2s 1s
Code: Select all
Events.
Евенты (события) используют доступные внутренние макросы клиента УО
event Drag Драг (drag) объекта по его ID. Не использует мышь. Для того, чтобы объект отпустить, необходимо использовать click.
Синтаксис:
event Drag {object id}
Например:
event Drag %ore
wait 20
click 100 100 p
halt
event ExMsg Shows a message over the object given by the ID
event Macro Выполняет внутренний макрос клиента УО
Синтаксис:
event Macro {param1} [param2] [param3]
Таблицы по параметрам:
Speech
Param1 Param2 Param3 Описание
1 0 msg text Say
2 0 msg text Emote
3 0 msg text Whisper
4 0 msg text Yell
Movement
Param1 Param2 Param3 Описание
5 0 Walk North West
5 1 Walk North
5 2 Walk North East
5 3 Walk East
5 4 Walk South East
5 5 Walk South
5 6 Walk South West
5 7 Walk West
War/Peace & Paste
Param1 Param2 Param3 Описание
6 0 Переключение War/Peace
7 0 Paste
Gump Control
Param1 Param2 Param3 Описание
8 0 Open Configuration
8 1 Open Paperdoll
8 2 Open Status
8 3 Open Journal
8 4 Open Skills
8 5 Open Spellbook
8 6 Open Chat
8 7 Open Backpack
8 8 Open Overview
8 9 Open Mail
8 10 Open Party Manifest
8 11 Open Party Chat
8 12 Open Necro Spellbook
8 13 Open Paladin Spellbook
8 14 Open Combat Book
8 15 Open Bushido Spellbook
8 16 Open Ninjutsu Spellbook
8 17 Open Guild
9 0 Close Configuration
9 1 Close Paperdoll
9 2 Close Status
9 3 Close Journal
9 4 Close Skills
9 5 Close Spellbook
9 6 Close Chat
9 7 Close Backpack
9 8 Close Overview
9 9 Close Mail
9 10 Close Party Manifest
9 11 Close Party Chat
9 12 Close Necro Spellbook
9 13 Close Paladin Spellbook
9 14 Close Combat Book
9 15 Close Bushido Spellbook
9 16 Close Ninjutsu Spellbook
9 17 Close Guild
10 1 Minimize Paperdoll
10 2 Minimize Status
10 3 Minimize Journal
10 4 Minimize Skills
10 5 Minimize Spellbook
10 6 Minimize Chat
10 7 Minimize Backpack
10 8 Minimize Overview
10 9 Minimize Mail
10 10 Minimize Party Manifest
10 11 Minimize Party Chat
10 12 Minimize Necro Spellbook
10 13 Minimize Paladin Spellbook
10 14 Minimize Combat Book
10 15 Minimize Bushido Spellbook
10 16 Minimize Ninjutsu Spellbook
10 17 Minimize Guild
11 1 Maximize Paperdoll
11 2 Maximize Status
11 3 Maximize Journal
11 4 Maximize Skills
11 5 Maximize Spellbook
11 6 Maximize Chat
11 7 Maximize Backpack
11 8 Maximize Overview
11 9 Maximize Mail
11 10 Maximize Party Manifest
11 11 Maximize Party Chat
11 12 Maximize Necro Spellbook
11 13 Maximize Paladin Spellbook
11 14 Maximize Combat Book
11 15 Maximize Bushido Spellbook
11 16 Maximize Ninjutsu Spellbook
11 17 Maximize Guild
Open Door
Param1 Param2 Param3 Описание
12 0 Opendoor
Use Skills
Param1 Param2 Param3 Описание
13 1 Use Skill Anatomy
13 2 Use Skill Animal Lore
13 35 Use Skill Animal Taming
13 4 Use Skill Arms Lore
13 6 Use Skill Begging
13 12 Use Skill Cartography
13 14 Use Skill Detecting Hidden
13 15 Use Skill Discordance
13 16 Use Skill Evaluating Intelligence
13 19 Use Skill Forensic Evaluation
13 21 Use Skill Hiding
13 23 Use Skill Inscription
13 3 Use Skill Item Identification
13 46 Use Skill Meditation
13 9 Use Skill Peacemaking
13 30 Use Skill Poisoning
13 22 Use Skill Provocation
13 48 Use Skill Remove Trap
13 32 Use Skill Spirit Speak
13 33 Use Skill Stealing
13 47 Use Skill Stealth
13 36 Use Skill Taste Identification
13 38 Use Skill Tracking
14 0 Last Skill
Magery
Param1 Param2 Param3 Описание
15 0 Cast Spell Clumsy
15 1 Cast Spell Create Food
15 2 Cast Spell Feeblemind
15 3 Cast Spell Heal
15 4 Cast Spell Magic Arrow
15 5 Cast Spell Night Sight
15 6 Cast Spell Reactive Armor
15 7 Cast Spell Weaken
15 8 Cast Spell Agility
15 9 Cast Spell Cunning
15 10 Cast Spell Cure
15 11 Cast Spell Harm
15 12 Cast Spell Magic Trap
15 13 Cast Spell Magic Untrap
15 14 Cast Spell Protection
15 15 Cast Spell Strength
15 16 Cast Spell Bless
15 17 Cast Spell Fireball
15 18 Cast Spell Magic Lock
15 19 Cast Spell Poison
15 20 Cast Spell Telekinesis
15 21 Cast Spell Teleport
15 22 Cast Spell Unlock
15 23 Cast Spell Wall Of Stone
15 24 Cast Spell Arch Cure
15 25 Cast Spell Arch Protection
15 26 Cast Spell Curse
15 27 Cast Spell Fire Field
15 28 Cast Spell Greater Heal
15 29 Cast Spell Lightning
15 30 Cast Spell Mana Drain
15 31 Cast Spell Recall
15 32 Cast Spell Blade Spirits
15 33 Cast Spell Disple Field
15 34 Cast Spell Incognito
15 35 Cast Spell Magic Reflection
15 36 Cast Spell Mind Blast
15 37 Cast Spell Paralyze
15 38 Cast Spell Poison Field
15 39 Cast Spell Summon Creature
15 40 Cast Spell Dispel
15 41 Cast Spell Energy Bolt
15 42 Cast Spell Explosion
15 43 Cast Spell Invisibility
15 44 Cast Spell Mark
15 45 Cast Spell Mass Curse
15 46 Cast Spell Paralyse Field
15 47 Cast Spell Reveal
15 48 Cast Spell Chaing Lightning
15 49 Cast Spell Energy Field
15 50 Cast Spell Flame Strike
15 51 Cast Spell Gate Travel
15 52 Cast Spell Mana Vampire
15 53 Cast Spell Mass Dispel
15 54 Cast Spell Meteor Swarm
15 55 Cast Spell Polymorph
15 56 Cast Spell Earthquake
15 57 Cast Spell Energy Vortex
15 58 Cast Spell Resurrection
15 59 Cast Spell Air Elemental
15 60 Cast Spell Summon Daemon
15 61 Cast Spell Earth Elemental
15 62 Cast Spell Fire Elemental
15 63 Cast Spell Water Elemental
15 63 Cast Spell Water Elemental
Necromancy
Param1 Param2 Param3 Описание
15 101 Cast Spell [N] Animate Dead
15 102 Cast Spell [N] Blood Oath
15 103 Cast Spell [N] Corpse Skin
15 104 Cast Spell [N] Curse Weapon
15 105 Cast Spell [N] Evil Omen
15 106 Cast Spell [N] Horrific Beast
15 107 Cast Spell [N] Lich Form
15 108 Cast Spell [N] Mind Rot
15 109 Cast Spell [N] Pain Spike
15 110 Cast Spell [N] Poison Strike
15 111 Cast Spell [N] Strangle
15 112 Cast Spell [N] Summon Familiar
15 113 Cast Spell [N] Vampiric Embrace
15 114 Cast Spell [N] Vengeful Spirit
15 115 Cast Spell [N] Wither
15 116 Cast Spell [N] Wraith Form
Bushido
Param1 Param2 Param3 Описание
15 145 Cast Spell [B] Honorable Execution
15 146 Cast Spell [B] Confidence
15 147 Cast Spell [B] Evasion
15 148 Cast Spell [B] Counter Attack
15 149 Cast Spell [B] Lightning Strike
15 150 Cast Spell [B] Momentum Strike
Chivalry
Param1 Param2 Param3 Описание
15 201 Cast Spell [C] Cleanse By Fire
15 202 Cast Spell [C] Close Wounds
15 203 Cast Spell [C] Consecrate Weapon
15 204 Cast Spell [C] Dispel Evil
15 205 Cast Spell [C] Divine Fury
15 206 Cast Spell [C] Enemy Of One
15 207 Cast Spell [C] Holy Light
15 208 Cast Spell [C] Noble Sacrifice
15 209 Cast Spell [C] Remove Curse
15 210 Cast Spell [C] Sacred Journey
Ninja Moves
Param1 Param2 Param3 Описание
15 245 Cast Spell [NI] Focus Attack
15 246 Cast Spell [NI] Death Strike
15 247 Cast Spell [NI] Animal Form
15 248 Cast Spell [NI] Ki Attack
15 249 Cast Spell [NI] Surprise Attack
15 250 Cast Spell [NI] Backstab
15 251 Cast Spell [NI] Shadowjump
15 252 Cast Spell [NI] Mirror Image
Spellweaving
Param1 Param2 Param3 Описание
15 601 Cast Spell [SW] Arcane Circle
15 602 Cast Spell [SW] Gift of Renewal
15 603 Cast Spell [SW] Immolating Weapon
15 604 Cast Spell [SW] Attunement
15 605 Cast Spell [SW] Thunderstorm
15 606 Cast Spell [SW] Nature's Fury
15 607 Cast Spell [SW] Summon Fey
15 608 Cast Spell [SW] Summon Fiend
15 609 Cast Spell [SW] Reaper Form
15 610 Cast Spell [SW] Wildfire
15 611 Cast Spell [SW] Essence of Wind
15 612 Cast Spell [SW] Dryad Allure
15 613 Cast Spell [SW] Ethereal Voyage
15 614 Cast Spell [SW] Word of Death
15 615 Cast Spell [SW] Gift of Life
15 616 Cast Spell [SW] Arcane Empowerment
Miscellanous
Param1 Param2 Param3 Описание
16 0 Last Spell
17 0 Last Object
18 0 Bow
19 0 Salute
20 0 Quit Game
21 0 All Names
22 0 Last Target
23 0 Target Self
24 1 Arm/Disarm Left
24 2 Arm/Disarm Right
25 0 Wait For Target
26 0 Target Next
27 0 Attack Last
28 0 ^ Delay
29 0 Circletrans
31 0 Close Gumps
32 0 Always Run
33 0 Save Desktop
34 0 Kill Gump Open
35 0 Primary Ability
36 0 Secondary Ability
37 0 Equip Last Weapon
Client's Range Control
Param1 Param2 Param3 Описание
38 0 ^ Set Update Range
39 0 ^ Modify Update Range
40 0 Increase Update Range
41 0 Decrease Update Range
42 0 Maximum Update Range
43 0 Minimum Update Range
44 0 Default Update Range
45 0 Update Update Range
46 0 Enable Update Range Color
47 0 Disable Update Range Color
48 0 Toggle Update Range Color
Invoke Virtues
Param1 Param2 Param3 Описание
9 1 Invoke Honor Virtue
49 2 Invoke Sacrifice Virtue
49 3 Invoke Valor Virtue
Пример:
set #lTargetX 1000
set #lTargetY 1000
set #lTargetKind 3
; использовать лопату в координатах 1000, 1000
set #lObjectID %shovel
event Macro 17 ; use shovel
target 5s
event macro 22 ; target ground
halt
event PathFind Перемещает чара в указанные координаты, если это возможно. Если координата Z не указана, она считается -1. Перемещение осуществляется с использованием механизма поиска оптимального пути и обхода препятствий. Перемещение возможно только в пределах одного экрана. Если вам необходимо идти на большее расстояние, путь необходимо разбить на несколько частей. На сайте и форуме ИзиУО до дури реализаций этого способа передвижения.
Синтаксис:
event PathFind {X-Coordinate} {Y-Coordinate} [Z-Coordinate]
event Property Читает описание и характеристики указанного объекта и помещает информацию в системную переменную #property. Cтроки в #property разделяются $.
Синтаксис:
event Property {ID}
event SkillLock Изменяет флаг лока скилла. Возможные состояния: up, down, locked. В последних версиях ИзиУО эта команда заменена командой exevent SkillLock, но для совместимости оставлена и эта.
Синтаксис:
event SkillLock {skill name} {[up] | [down] | [locked]}
Параметры (условные обозначения скиллов для этой команды):
Miscellaneous Skills
Alch - Alchemy
Blac - Blacksmithy
Bowc - Bowcraft Fletching
Bush - Bushido
Carp - Carpentry
Chiv - Chivalry
Cook - Cooking
Fish - Fishing
Focu - Focus
Heal - Healing
Herd - Herding
Lock - Lockpicking
Lumb - Lumberjacking
Mage - Magery
Medi - Meditation
Mini - Mining
Musi - Musicianship
Necr - Necromancy
Ninj - Ninjitsu
Remo - Remove Trap
Resi - Resisting Spells
Snoo - Snooping
Stea - Stealing
Stlt - Stealth
Tail - Tailoring
Tink - Tinkering
Vete - Veterinary
Combat Skills
Arch - Archery
Fenc - Fencing
Mace - Mace Fighting
Parr - Parrying
Swor - Swordsmanship
Tact - Tactics
Wres - Wrestling
Actions
Anim - Animal Taming
Begg - Begging
Camp - Camping
Dete - Detecting Hidden
Disc - Discordance
Hidi - Hiding
Insc - Inscription
Peac - Peacemaking
Pois - Poisoning
Prov - Provocation
Spir - Spirit Speak
Trac - Tracking
Lore & Knowledge
Anat - Anatomy
Anil - Animal Lore
Arms - Arms Lore
Eval - Evaluating Intelligence
Fore - Forensic Evaluation
Item - Item Identification
Tast - Taste Identification
event Sleep Отключает УО клиента на указанное время (в миллисекундах). Клиент это время будет не реагировать ни на что, но использовать 0% загрузки ЦПУ.
Синтаксис:
event Sleep {ms}
event SysMessage Выводит текст в клиенте как системное сообщение. Эта команда не работает, если вы не включили enable event sysmessage в настройках.
Синтаксис:
event SysMessage {message}
Code: Select all
Exevents.
Отличие от обычных евентов – посылают пакеты информации прямо на сервер. Кроме того, расширенный синтаксис.
Exevent Drag Переместить (drag) объекты по сериалу с возможностью указать количество. По умолчанию количество 1.
Синтаксис:
Exevent Drag {object id} [amount]
Exevent Dropc Бросить (Drops) объект в указанный контейнер. X и Y – координаты в контейнере. Если не указаны – объект будет брошен на контейнер.
Синтаксис:
Exevent Dropc {container id} [x y]
Exevent Droppd Бросить предмет одежды на папердолл (paperdoll). Объект перед этим должен быть перемещен командой Exevent Drag.
Синтаксис:
Exevent Droppd
Exevent Dropg Бросит объект (перед этим перемещенный командой Exevent Drag) в указанные координаты на земле. Если Z не указана, она будет взята из системной переменной #charPosZ.
Синтаксис:
Exevent Dropg {x} {y} [z]
Exevent Popup Открыть контекстное меню объекта/NPC. Если entry не указано, меню будет открыто в экранных координатах 0,0. В противном случае будет выбран пункт этого меню за номером entry (считается с 1) без показа меню.
Синтаксис:
Exevent Popup {id} [entry]
Exevent RenamePet Переименовать животное по сериалу в указанное имя
Синтаксис:
Exevent RenamePet {id} {name}
Exevent SkillLock Изменяет состояние лока скилла. Смотри соответствующий event.
Синтаксис:
Exevent SkillLock {skill name} {[up] | [down] | [locked]}
Exevent StatLock Изменяет состояние лока стата.
Синтаксис:
Exevent StatLock {str|dex|int} {[up] | [down] | [locked]}
Команды меню.
Команды создания собственных меню или использования существующих (в ИзиУО). Пока без перевода, мне лично пока на фиг не надо).
menu Activate Activates a window element in the EasyUO menu window
menu Button Creates a button at position x/y with specified size on the EasyUO menu window
menu Check Creates a checkbox at position x/y with specified size on the EasyUO menu window
menu Clear Clears all window elements from the EasyUO menu window
menu Combo Creates a combobox at position x/y with specified size on the EasyUO menu window or adds entries to the combobox
menu Delete Deletes a window element from the EasyUO menu window
menu Edit Creates a edit field at position x/y with specified width in the EasyUO menu window
menu Font Align Changes the font alignment in the EasyUO menu window
menu FontBGColor Changes the font background color in the EasyUO menu window
menu Font Color Changes the font color in the EasyUO menu window
menu Font Name Changes the font in the EasyUO menu window
menu Font Size Changes the font size in the EasyUO menu window
menu Font Style Changes the font style in the EasyUO menu window
menu Font Transparent Sets the transparency of the background color of the font
menu Get Returns the value associated with a control in the EasyUO menu window
menu GetNum Returns the number in an edit field in the EasyUO menu window
menu Hide Hides the EasyUO menu window
menu HideEUO Hides the main EasyUO window
menu Image Create Creates a new image control in the menu
menu Image Ellipse Draws an ellipse/circle within a specified image
menu Image File Loads an external image file
menu Image FloodFill Applies the FloodFill effect in the area around a specified pixel within a specified image
menu Image Line Draws a line within a specified image
menu Image Pix Paints a single pixel within a specified image
menu Image PixLine Prints a horizontal line of pixels within a specified image
menu Image Pos Moves an already existing image control to a different position
menu Image Rectangle Draws a rectangle within a specified image
menu List Creates a listbox at position x/y with specified size on the EasyUO menu window or adds entires to the listbox
menu Set Sets the text of a control
menu Shape Creates a shape in the EasyUO menu window
menu Show Shows the EasyUO menu window
menu Text Creates a label at the specified position in the EasyUO menu window
menu Window Color Changes the color of the EasyUO menu window
menu Window Size Changes the size of the EasyUO menu window
menu Window Title Changes the title of the EasyUO menu window
Namespace.
Брр… Пространство имен. Дискретная область памяти, которая используется как пользовательская переменная… Вам оно надо? Дерзайте.
nameSpace local Defines the current namespace and its scope
nameSpace global Defines the current namespace and its scope
nameSpace clear Clears every variables within the current namespace
nameSpace push Stores the current namespace name and scope
nameSpace pop Restores the current namespace name and scope
nameSpace copy Copy variables from one namespace to another
Прочие.
Display Показывает сообщение в стандартном messagebox с установкой кнопок по вашему выбору.
Синтаксис:
display {[ok] | [okcancel] | [yesno] | [yesnocancel]} {message}
Execute Запускает внешнюю программу с возможностью передать ей параметры
Синтаксис:
execute {filename} [argument...]
linesPerCycle Устанавливает скорость исполнения скрипта. ИзиУО исполняет 20 циклов в секунду и в каждом цикле исполняет по 10 строк (умолчание). При этом некоторые команды имеют встроенную паузу. Вы можете изменить умолчание, когда скрипт завершится – установки обнулятся. В общем, насколько я понял, тут можно поиграть с снижением нагрузки на cpu, надо экспериментировать.
Смотреть здесь: http://www.easyuo.com/forum/viewtopic.php?p=21269
Синтаксис:
linesPerCycle {linespercycle}
set Присвоить переменной указанное значение. Отсутствие значения – присваивается пустая строка. Опция abc - the absolute (mathimatically) value will be assigned (потом разберусь).
Синтаксис:
[[set]] {{!namespaceVariable} | {%standardVariable} | {*persistantVariable} | {#systemVariable}} [expression] [abs]
send Посылает запрос на HTTP-сервер и выполняет код, который будет возвращен
(какие-то глюки с онлайн-докой, потом разобраться и добавить синтаксис)
shutDown Выключить компьютер. Если установлено force – не отвечающие приложения будут закрыты.
Синтаксис:
shutDown ["force"]
sound Воспроизвести указанный wave-файл или SystemDefault beep
Синтаксис:
sound [filename]
str Выполнить операцию над строкой
Синтаксис:
[[str]] {"Len"} {string}
[[str]] {"Pos"} {string} {sub string} [index]
[[str]] {"Left"} {string} {length}
[[str]] {"Right"} {string} {length}
[[str]] {"Mid"} {string} {start} {length}
[[str]] {"Lower"} {string}
[[str]] {"Ins"} {string} {sub string} {start}
[[str]] {"Del"} {string} {start} {length}
[[str]] {"Count"} {string} {substring}
Параметры:
Len Сохранить длину строки в #strRes.
Pos Сохранить позицию подстроки в #strRes. index – какую встречу подстроки в строке вернуть.
Left Сохранить часть строки слева в#strRes.
Right Сохранить часть строки справа в #strRes.
Mid Сохранить часть строки с указанной позиции в #strRes.
Lower Перевести в нижний регистр букв, сохранить в #strRes.
Ins Вставить подстроку в строку и сохранить итог в #strRes.
Del Удалить часть строки и сохранить итог в #strRes.
Count Вернуть количество встреч подстроки в строке.
tile Получает информацию о тайле из файлов карты
Синтаксис:
tile {"Init"} [noOverrides]
tile {"Cnt"} {x} {y} [facet]
tile {"Get"} {x} {y} {index} [facet]
Параметры:
Init Инициализирует информацию о тайле для получения ее в ИзиУО. Опция "noOverrides" отключает
чтение статики из файла вердаты
Cnt Получает количество тайлов в указанных координатах и записывает ее в #tileCnt.The default value
for facet is the current facet. Otherwise follows the values for #cursKind.
Get Получить тип тайла и координату Z и записать в #tileType и #tileZ. Index изменяется от 1 до
#tileCnt. The default value for facet is the current facet. Otherwise follows the values for #cursKind
Общие.
deleteVar Удаляет содержимое переменной (присваивает ей пустую строку). Удалять можно только те переменные, которым до этого были присвоены какие-либо значения!
Синтаксис:
deleteVar {variable name}
initEvents Инициализация всех команд евентов. Можно использовать только один раз в скрипте, пока не указано – использовать команды event невозможно.
playCD Начать проигрывать диск в указанном приводе CD. А где команда кофеварке?
Синтаксис:
playCD {drive-spec}
Posted: 2006-10-01 17:33:44
by Edred
III. Справочник по системным переменным и константам
Code: Select all
Character
#charPosX Возвращает координату X персонажа
#charPosY Возвращает координату Y персонажа
#charPosZ Возвращает координату Z персонажа
#charDir Возвращает направление взгляда чара
#charStatus Возвращает статус персонажа [C – poisoned, H – hidden, B – female, G – warmode, D – под
эффектом lethal strike]
#charID Возвращает сериал персонажаReturns the id of the character
#charGhost Возвращает YES если чар мертв, в противном случае NO.
#backpackID Возвращает сериал главного бекпака персонажа
Status
Чтобы эти переменные работали, статус персонажа должен быть открыт!
#charName Возвращает имя персонажа
#sex Возвращает пол персонажа
#str Возвращает силу персонажа
#hits Возвращает текущее здоровье персонажа
#maxHits Возвращает максимальное здоровье персонажа
#dex Возвращает ловкость персонажа
#stamina Возвращает текущую стамину персонажа
#maxStam Возвращает максимальную стамину персонажа
#int Возвращает интеллект персонажа
#mana Возвращает текущую ману персонажа
#maxMana Возвращает максимальную ману персонажа
#maxStats Возвращает текущий максимум статов персонажа
#luck Возвращает текущую удачу (? – luck) персонажа
#weight Возвращает текущий вес персонажа
#maxWeight Возвращает максимальный вес, поднимаемый персонажем
#minDmg Возвращает минимальный урон от текущего оружия
#maxDmg Возвращает максимальный урон от текущего оружия
#gold Возвращает количество гп, которое имеет персонаж
#followers Возвращает число следующих за персонажем (followers)
#maxFol Возвращает максимальное число следующих (followers) персонажа
#AR Возвращает текущий армор-класс персонажа
#FR Возвращает размер резиста к огню персонажа (fire resist)
#CR Возвращает размер резиста к морозу персонажа (cold resist)
#PR Возвращает размер резиста к отравлению персонажа (poison resist)
#ER Возвращает размер резиста к энергии персонажа (energy resist)
#TP Возвращает Tithing Points персонажа
Container
#nextCPosX Возвращает x-координату, где следующий контейнер/гамп будет открыт
#nextCPosY Возвращает y координату, где следующий контейнер/гамп будет открыт
#contSize Возвращает размер (? – size) текущего выбранного контейнера/гампа
#contPosX Возвращает x-координату текущего выбранного контейнера/гампа
#contPosY Возвращает y- координату текущего выбранного контейнера/гампа
#contKind Возвращает kind текущего выбранного контейнера/гампа. В доке пишут, типа, большинство меню имеют приаттаченный kind и его можно использовать, чтобы узнать, открыто ли крафт меню, что-то в этот момент драгается или открыта рунбука и всякое тому подобное… хз, надо проверять.
#contID Возвращает сериал текущего выбранного контейнера/гампа
#contType Возвращает тип объекта текущего выбранного контейнера/гампа
#contName Возвращает название текущего выбранного контейнера/гампа
Last Action
#lObjectID Возвращает сериал последнего использованного объекта
#lObjectType Возвращает тип последнего использованного объекта
#lTargetID Возвращает сериал последнего использования прицела
#lTargetX Возвращает x-координату последнего использования прицела
#lTargetY Возвращает y-координату последнего использования прицела
#lTargetZ Возвращает z-координату последнего использования прицела
#lTargetKind Возвращает класс объекта из-под последнего прицела [1 – объект, 2 – земля, гора, шахта, 3 – ресурсы: деревья, вода]
#lTargetTile Возвращает Возвращает тайл, на который кидался последний прицел
#lLiftedID Возвращает сериал объекта, который последний раз подымался или перемещался чаром
#lLiftedType Возвращает тип объекта, который последний раз подымался или перемещался чаром
#lLiftedKind Returns if an object is being dragged/lifted
#lSkill Возвращает последний использованный скилл
#lSpell Возвращает последний использованный спелл
FindItem
#findID Возвращает Returns the id of the object returned by findItem
#findType Возвращает Returns the type of the object returned by findItem
#findX Возвращает Returns the x-coordinate of the object returned by findItem
#findY Возвращает Returns the y-coordinate of the object returned by findItem
#findZ Возвращает Returns the z-coordinate of the object returned by findItem
#findDist Возвращает Returns the distance from the character to the object returned by findItem
#findKind Возвращает Returns the kind of the object returned by findItem
#findStack Возвращает Returns the number of stacked items in the object returned by findItem
#findBagID Возвращает Returns the bag the object returned by findItem is contained in
#findMod Возвращает Returns displacement for #findX and #findY
#findRep Возвращает Returns the reputation of the object returned by findItem
#findCol Возвращает Returns the color of the object returned by findItem
#findIndex Возвращает Gets the values of all other findItem results without restarting the time-consuming FindItem command.
#findCnt Возвращает Returns the number of objects that matches what was searched for with the findItem command
Shop
#shopCurPos Возвращает Returns the current position on the shop menu
#shopCnt Возвращает Returns the total number of lines on the shop menu
#shopItemType Возвращает Returns the item type of the current line on the shop menu
#shopItemID Возвращает Returns the item ID of the current line on the shop menu
#shopItemName Возвращает Returns the name of the item the current line on the shop menu
#shopItemPrice Возвращает Returns the price of the current line in the shop menu
#shopItemMax Возвращает Returns the number of items in the stack of the current line in the shop menu
Extended
#skill Возвращает Returns the current skill level for a skill chosen with chooseSkill command
#skillCap Возвращает Returns the current skill cap for a skill chosen with chooseSkill command
#skillLock Возвращает Returns the current lock status of the skill chosen with chooseSkill command
#journal Возвращает Returns the journal line selected using the scanJournal command
#jIndex Возвращает Returns the index of the current journal entry
#jColor Возвращает Returns the color of the text in the journal
#sysMsg Возвращает Returns the current system message
#sysMsgCol Возвращает Returns the current system message color
#targCurs Возвращает Returns if cursor is a target cursor
#cursKind Возвращает Returns the facet where the character is
Client Variables
#cliVer Возвращает Returns the version of the client
#cliCnt Возвращает Returns the number of clients currently running
#cliNr Возвращает Returns which client is currently active for EasyUO
#cliXRes Возвращает Returns the width of the gameplay window
#cliYRes Возвращает Returns the height of the gameplay window
#cliLeft Возвращает Returns the X coordinate of the left edge of the gameplay window
#cliTop Возвращает Returns the Y coordinate of the top edge of the gameplay window
#cliLogged Возвращает Returns if a character is logged into the game
Combat
#lHandID Возвращает Returns the ID of the item to be armed in the left hand
#rHandID Возвращает Returns the ID of the item to be armed in the right hand
#enemyHits Возвращает Returns the percentage of hit points left on the current enemy
#enemyID Возвращает Returns the ID of the current enemy
Namespace Variables
#nsName Возвращает Returns the name of the currently active namespace
#nsType Возвращает Returns the type of the currently active namespace
Miscellaneous Variables
#shard Возвращает Returns which shard you are logged into
#date Возвращает Returns the local date on your computer
#time Возвращает Returns the local time on your computer
#sysTime Counts the number of milliseconds since 01/Jan/1980 UTC
#sCnt Timer in seconds since Windows boot
#sCnt2 Timer in tenths of seconds since Windows boot
#pixCol Возвращает Returns the color of the pixel last saved with savePix
#cursorX Возвращает Returns the x-coordinate of the cursor
#cursorY Возвращает Returns the y-coordinate of the cursor
#random Holds a random number
#dispRes Возвращает Returns button clicked in last call to display
#lShard Set the last shard of your choice
Result
#menuButton Возвращает Returns the name of the last clicked menu Button
#menuRes Возвращает Returns the result of the last menu Get or menu GetNum command
#sendHeader Holds HTTP header information for the send command
#strRes Возвращает Returns the result of the last str command
#property Возвращает Returns the result of the last event Property command
#result Возвращает Returns the result of the last return command
#opts Determines which EasyUO configuration options are active
#euoVer Возвращает Returns the EasyUO version string
#lpc Determines the number of lines that are executed per cycle
Tile
#tileType Возвращает Returns the type of the last read tile
#tileZ Возвращает Returns the z-coordinate of the last read tile
#tileCnt Возвращает Returns the number of tile layers of the last read position
#tileName Возвращает Returns the name of the last read tile
#tileFlags Возвращает Returns the flags of the last read tile
Constants
#dot A constant that represents the dot character
#false A constant that represents boolean false
#smc A constant that represents the semicolon character
#spc A constant that represents the space character
#true A constant that represents boolean true
Posted: 2006-10-01 19:10:51
by SLAK
Операнды сравнения : больше и меньше у тебя одинаковы... Исправь!
ЗЫ: когда исправят, можете стереть мой пост

Posted: 2006-10-01 19:14:43
by Edred
Еще кусочек...
SLAK: спасибо, исправил
ЗЫ: Исправления, замечания, пожелания приветствуются.
Posted: 2006-10-01 19:48:45
by doomstar
А масивов в последней версии так и нет?

Posted: 2006-10-01 21:44:04
by Edred
doomstar wrote:А масивов в последней версии так и нет?

Еще не знаю

Я просто иду по доке, перевожу, вспоминаю то, что знал и использовал 2 года назад, заодно изучаю новое. Ну и пишу в справочник. Пишу с двумя целями - мне так легче самому запомнить и под рукой в дальнейшем будет на русском. Ну и сюда закину, авось кому еще сгодится.
Posted: 2006-10-25 09:23:37
by Edred
Закинул третью часть в том, виде, в каком она пребывает последнее время - то есть частично переведенной. В ближайшее время заниматься справочником не буду, полностью сосредоточился на стелсе.
Posted: 2006-10-25 11:44:31
by Nmy
скинеш все свои скрипты? изьу +\- знаю

Posted: 2006-10-25 20:07:42
by Edred
Скриптов-то нет. Старые, двухлетней давности, давно погибли, из новых успел написать только мининг с разгрузкой в банк и авторесом у креста. Его выкладывать нельзя, на Форест Варз начнется невообразимое

Posted: 2006-10-26 11:30:43
by SLAK
Posted: 2006-10-26 14:15:41
by Edred
Posted: 2006-10-26 23:05:20
by SLAK
Edred wrote:А представляешь что начнется, если я выложу тоже самое, но на стелс?
Как только мне в руки попадёт откомпиленый, стабильный стелс с хотьбой - время начала Армагедона можно будет сосчитать на пальцах

Ну естесно я не буду ложить его на форуме, но НиПы возможно начнут рулить ещё больше

Posted: 2006-10-27 00:31:52
by Edred
До Армагеддона осталось пять дней... отсчет пошел!

Posted: 2006-10-27 01:25:12
by SLAK
Edred wrote:До Армагеддона осталось пять дней... отсчет пошел!

Почитал ченжлог. Проделаная работа понравилась, наверно всё что прсили - Миралекс ввёл. Удивился когда увидел фукции перемещения чара, я думал будет полнофункциональная ходилка

Но инжект нас научил, что лучшая ходилка - это та которую написал сам (а самая лучшая - которую стырил у более "провиднутого коллеги")
ЗЫ: *Играет траурная музыка*
Posted: 2006-10-27 15:26:19
by Edred
Ходилка уже написана. И будет мной выложена сразу после релиза.
Posted: 2006-10-27 17:35:33
by SLAK
Posted: 2006-11-08 17:46:42
by BulldoZer
Как по мне инжа проще чем изя...
ЛЮДИ КТО РАЗБЕРАЕТЬСЯ ХОТЬ НЕМНОГО В
ИЗЕУО
У меня есть скрипт на ламбер... все хорошо но я хачу что бы он вылаживал не только логи в банк но и цветные логи!!!
Вопрос как найти нужную функцию?? по каким словам искать??
(скрипт большой(( )
И можно будет её скопировать, только поменять, повторяющиеся айди на нужные???
ЭТО УЖАС

Posted: 2006-11-08 23:07:22
by Edred
пилот проще инжи, инжа проще чем изя, изя проще чем стелс... Чем сложнее язык - тем легче писать.
Да, забыл в начало поставить уолуп.
Posted: 2006-11-08 23:18:55
by Nmy
BulldoZer wrote:Как по мне инжа проще чем изя...
ЛЮДИ КТО РАЗБЕРАЕТЬСЯ ХОТЬ НЕМНОГО В
ИЗЕУОУ меня есть скрипт на ламбер... все хорошо но я хачу что бы он вылаживал не только логи в банк но и цветные логи!!!
Вопрос как найти нужную функцию?? по каким словам искать??
(скрипт большой(( )
И можно будет её скопировать, только поменять, повторяющиеся айди на нужные???
ЭТО УЖАС

like
Code: Select all
finditem DWJ_EWJ_GWJ_TVJ C_ , #BackpackID
Code: Select all
Unload:
finditem %Ore C_ , #BackpackID
for #findindex 1 #findcnt
{
exevent drag #findid #findstack
wait 5
exevent dropc %Safe
wait 16
}