Как?! Вы все еще не умеете пользоваться Пилотом? - Тогда мы идем к вам! Примечание автора: Данный материал не претендует на БИБЛИЮ по написанию макросов, просто здесь в более ясной форме изложены операторы и их использование. Мы будем использовать следующие программы: UOPilot by Strelok (Strelok.web) UOPilot by WK (WKnight.hotbox) UOPilot by WK (Purga WebDrive) Ну конечно мы будем использовать и UO Assist, но я уверен, что у Вас он уже есть: Как мы будем работать: Конечно, я не буду открывать все свои секреты, но здесь будут рассмотрены некоторые из них. Я буду давать описание оператора, и давать к нему пример, для закрепления прошлых операторов, я буду их часто комбинировать. При работе я так же буду указывать, в какой программе это создавалось. Поехали: Для начала запомните одну вещь, в UoPilot, в одной строке может быть ТОЛЬКО ОДИН оператор, иначе он не поймет их. Так что, запомнив только это правило можно далеко уйти. -------------------------------------------------------------------------------- Оператор Send Назначение: cлужит для посылки в окно UO некой клавиши, обычно это F1..F12, но могут быть и другие. Работает следующим образом: Send [Клавиша] [Задержка] Пример: Send F1 100. - Здесь мы посылаем нажатие клавиши F1 и делаем паузу на 100 миллисекунд. При этом выполнится действие, которое было "забинденно" на клавишу F1, и не важно где это было сделано, в UO Assist или в самой UO. Как один из вариантов использование пишем в UO такой макрос: UO Macro Options - Add Key - F1 UseSkill -> Anatomy WaitForTarget LastTarget И в пилоте: Send F1 10000 -------------------------------------------------------------------------------- Оператор Say Назначение: служит для посылки сообщения в UO. Работает следующим образом: Say [текст] Пример: Say This my first message. Заставит сказать вашего чара "This my first message" Применений у этого оператора много, например синхронизация 2х и более окон, но об этом позже: -------------------------------------------------------------------------------- Оператор Wait Назначение: служит для паузы в макросе. Работает следующим образом: Wait [задержка] Пример: Wait 10000, сделает задержку в макросе на 10 секунд. Пример макроса (основанный на прошлом) UoPilot Send F1 Wait 10000 Тот же макрос, но уже в 2х строчках. Не смущайтесь что после "Send F1" не выставлена задержка явным образом, это не обязательно. -------------------------------------------------------------------------------- Оператор End_Script * * - для пилота Стрелка Назначение: EndScript заканчивает макрос. Пример макроса выглядит так: UoPilot Send F1 Wait 10000 End_Script Данный макрос отработает только один раз, т.к. в конце макроса стоит оператор End_Script. -------------------------------------------------------------------------------- Оператор Left Назначение: имитирует нажатие левой клавиши, по заданным координатам. Работает следующем образом: Left [X], [Y] (для пилота стрелка Left Point1). Для установки координат, нужно поставить фокус на UoPilot навести мышку на нужное место, и нажать Ctrl + A, таким образом, вы получите координаты мишки, на текущий момент, осталось их вписать в макрос. Пример использования: Устанавливаем курсор мышки на кнопку War/Please и нажимаем Ctrl + А. В пилоте, полученные координаты вписываем в макрос и получаем, например: UoPilot Left 900, 300 Wait 5000 В данном макросе мы будем менять свой статус каждые 5 секунд. Остальные действия с мышкой по аналогии. -------------------------------------------------------------------------------- На данный момент мы рассмотрели саамы основные операторы, дальше пойдут Условия, Циклы, работа с Цветами и метками, а так же переменными. Работа с цветами, переменными и условиями Переменные, так же как и цвета, позволяют писать очень сложные макросы, в переменных можно хранить нужную информацию, а по цветам определять некоторые параметры: Так как работа с переменными и цветами различается в пилотах Стрелка и WK, то я дам их описание по раздельности. -------------------------------------------------------------------------------- Переменные для пилота WK Оператор Set - позволяет установить переменной числовое (#) или строковое ($) значение. Работает следующим образом: Set [имя переменной] [значение] Так как тут различаются строковые и численные переменные, то не забывайте # - это ЧИСЛЕННАЯ, а $ - СТРОКОВАЯ, их имена могут совпадать, но они ВСЕГДА различаются: Пример использования: Set #Var 5, задаст переменной #Var значение 5. Set $Var Test String, задаст переменной $Var значение Test String. Заметьте что их имена одинаковые, но хранятся разные значения, в первом случае число, во втором строка, то что в ней хранится определяется спец символом # или $. Но так же следует запомнить что нельзя по своему желанию менять эти символы. Т.е. Set #Var 1 не означает, что в $Var будет храниться 1, так как это разные переменные: Для увеличения или повторного изменения переменной нужно опять же использовать оператор Set, чтобы увеличить переменную #Var на 5 нужно написать так: Set #Var #Var+5, и ни как иначе. Можно проводить и другие действия ( + | - | * | / ) Set #Var1 #Var / 2 запишет в переменную #Var1 половину значения #Var. Так же у этого пилота есть определенные переменные - константы, которые он получает от клиента (к сожалению, только от клиента 1.26.4a или 1.26.4b) Это int, hits и.т.п., доступны через правую кнопку мыши - переменные -> тут полный список переменных - констант. Цвета и Условия для пилота WK Это самое слабое место пилота WK, но это ИМХО. Цвета позволяют определить, где ты находишься, вернее удостовериться, что там, где надо Например, позволяют определить отравлен ли ты, или по нескольким контрольным точкам, удался ли рекол по макросу. Так работа с цвета сводится к условиям, то заодно рассмотрим и их. И так пошли по порядку, так как это одно из самых сложных мест, буду очень сильно расписывать. Оператор If - служит для проверки условия, в случае верности условия выполняет блок между If (условие) и End_IF. Внутри условия может быть как проверка переменных, так и цветов. Для начала начнем с переменных, пример: UoPilot WK Set #Var 5 If #Var = 4 Say Var равно 4 End_If End_Script В самом начале макроса, мы установили переменной #Var значение 5, а потом проверили, равна ли она 4, но так как она не равна, то условие ложно и блок между If и End_If никогда не выполнится. Рассмотрим так же оператор применяя его в связке If (условие) : else : End_IF мы сможет в любо случае обработать данные, т.к. все, что до else будет выполняться, если условие верное, а после else, если условие не верное. Пример: UoPilot WK Set #Var 5 If #Var = 4 Say Var равно 4 Else Say Var не равно 4 End_IF End_Script На данном примере вы увидите строку "Var не равно 4" - Почему? Все просто, раз #Var равно 5, то условие ложное (If #Var = 4) и блок между IF и ELSE не выполняется, а вот между ELSE и End_IF выполняется. Чтобы выполнялся блок между IF и Else попробуйте заменить 5 на 4, и у вас все выйдет Теперь на примере цвета вы уже поняли как работает оператор If... если нет, то прочтите заново! ... ну а раз ты читаешь это, значит ты понятливый читатель, я очень рад за тебя Помнишь, мы рассматривали работу с оператором Left и как задавали координаты для щелчка? Нет? Как так: перечитай :) Для узнавания цвета в нужном месте, поставь галочку на <Цвет>, в закладке "Скрипт" и нажми уже знакомые Ctrl + A, заметил, что на кнопке, которая напротив этой галочки, появилось цифровое выражение? - Это и есть цвет в данной точке. Нажав на кнопку, в текст макроса добавится это число, так что не ошибешься Теперь пошли проверять цвет в нужной точке Вспоминая, оператор IF запишем условие следующим образом: If [x] [y] [color] - думаю тут все понятно, первые два значения, это координаты точки, где мы будем определять цвет, а вот color это значение, с которым идет проверка. Пример будет придумать тяжеловато, но мы его напишем вместе: Нажни левую кнопку на своем чаре, и удерживая отведи мышку в сторону, ты вытащишь маленькое окошко, на которой полосками будет отражены твои статы или параметры. Наводи мышку на середину верхней полоски (это твоя жизнь) и нажми Ctrl + A в пилоте сохранятся значения позиции мышки и цвет в данной точке, теперь пишем следующий блок, попутно вспоминая, прошлые операторы, у меня получилось так: UoPilot WK If 926, 308 48829 Say все нормально Else Say Хватит End_If Wait 1000 И начинай себе причинять ущерб здоровью, как только здоровье сильно уменьшится, твой чар заголосит "Хватит", если он еще верит в свои силы, то он будет говорить "все нормально" Думаю на этом примере ты, мой читатель, понял, как работать с цветами -------------------------------------------------------------------------------- Переменные для пилота Стрелка. Переменной в пилоте стрелка считается все, что имеет спец символ $, заметьте, что тут он означает ЧИСЛО, а не как в пилоте WK строку. Для установки значения переменной используется блок: $Var = 1, а для изменения переменной или ее увеличения опять же $Var = $Var + 1, увеличит значение $Var на единицу. В этом и все отличие при работе с переменными в разных пилотах. Тут я больше задерживаться не буду. Цвета и Условия для пилота Стрелка. Цвета это самая сильная сторона пилота Стрелка, я бы даже сказал, что это единственный пилот, который позволяет так умело работать с цветами: Для работы с цветами, в пилоте Cтрелка используются точки (Point), для создания такой точки нужно: Перейти в закладку <Скрипт> и там под закладку "Точки", теперь нажимая на кнопку Add - у нас появится новая точка Point1 (нумерация точек начитается с 1, т.е. запись 3, будет относиться к Point3). И нажимаем Ctrl + A в нужном месте, теперь в Point1 у нас хранятся и координаты точки и ее цвет! А старый макрос для пилота WK примет такой вид: UoPilot S If Point1 Say все нормально Else Say Хватит End_If Wait 1000 Не правда ли проще? Но это не все, благодаря Стрелку, мы может искать точку с определенным цветом, в заданном нами квадрате! Для этого служит оператор: FindColor со следующими параметрами FindColor [Смещение] [Верхний Левый угол прямоугольника] [Нижний правый угол] [Куда сохранятся результаты] [Искомый цвет] [Переменная об успешном поиске] пример: UoPilot S FindColor 0 Point1 Point2 Point4 Point3 $Var If ( $Var = true ) Say Нашел End_If И так по порядку, над 0 просто не задумываемся, Point1 и Point2, выставляем в Верхний левый угол бэкапа, и нижний правый соответственно, Point3 выставляем значение какого нить потса, например яда, Point4 не трогаем, в него будет записаны координаты этого потса, а $Var сигнализирует о нахождении этого потса - Т.е. если это зелье будет у вас в сумке, то ваш чар закричит <Нашел>. А про If ($Var = true) могу лишь сказать, что это обычное условие -------------------------------------------------------------------------------- Работа с циклами. Циклы являются неотъемлемой частью любого сложного, да и некоторых простых макросов. Т.к. позволяют сократить сам макрос, и как следствие снизить процент ошибки, но и улучшить его читаемость. Оператор Repeat .... End_Repeat (Для пилота Стрелка EndRepeat), используется только в связке, иначе не будет работать. Пример использования: Repeat 10 Wait 1000 End_Repeat В данном макросе, мы после Repeat поставили число 10, которое означает что, данный кусок (между Repeat и End_Repeat), будет использован 10 раз. Т.е. мы сделаем задержку не в 1 секунду, а в 1*10 = 10 секунд. Применений у данного оператора много, всех не перечислить. Оператор While : End_While существует только в пилоте WK, а очень жаль: По сути, это и цикл и условие. Т.к. перед повторением внутреннего блока, идет проверка на верность условия. Работает следующим образом: UoPilot WK While mana < int Send F2 5500 End While Здесь мы в первой строчке проверяем условие, если мана меньше текущего интеллекта (максимальная мана всегда равна кол-ву интеллекта), то можно, ... да и нужно, ... медитировать до максимума. Что мы и делаем. F2 в данном случае медитация. Так же можно использовать проверку на цвет, например While [X], [Y] [color] End_While Будет работать до тех пор, пока цвет в указанном месте будет равен описанному. На этом первая и надеюсь не последняя статья о написании макросов заканчивается, так что учитесь, и развивайтесь: Самое главное Читайте Хелп, там это все написано. А так же потрудитесь поискать нужную вам информацию на форуме автор: DeMAN