// Lamber-razmetka. ver 1.04b © Edred // // Скрипт разметки массива для рубки скриптом // Lamber-rubka. Ударьте топором по первому дереву, // которое хотите поместить в массив, дождитесь // сообщения "Go to next tree", переходите к следующему // дереву и бейте один раз топором по нему и т. д. // По окончании создания массива в текстовом редакторе // замените открывающие и закрывающие круглые скобки // на соответствующие квадратные. // В теле скрипта с массивом будут создаваться комментарии, // облегчающие поиск координат определенного дерева // (на всякий случай)
// Укажите имя файла для скрипта, создающего массив set $file c:\massiv.txt
set #i 1 set $fail you fail set $put you put set $lamber lumberjacking changed set $skill your skill set $slash / :snova if (lastmsg = $fail) or (lastmsg = $put) or (lastmsg = $lamber) or (lastmsg = $skill) set #cx charposx set #cy charposy set #ltx lasttargetx set #lty lasttargety set #ltt laststatictype exec cmd.exe /c >>$file echo $slash$slash tree number #i wait 100 exec cmd.exe /c >>$file echo set %stand( #i 1 ) #cx wait 100 exec cmd.exe /c >>$file echo set %stand( #i 2 ) #cy wait 100 exec cmd.exe /c >>$file echo set %derevo( #i 1 ) #ltx wait 100 exec cmd.exe /c >>$file echo set %derevo( #i 2 ) #lty wait 100 exec cmd.exe /c >>$file echo set %static( #i ) #ltt wait 100 set #i #i + 1 say Go to next tree - #i end_if wait 1000 goto snova end_script
Определите в теле скрипта переменную $file и запустите его. Скрипт переходит в режим ожидания. Теперь идите к ближайшему дереву и один раз бейте по нему топором. Результат рубки совершенно не важен. Это может быть сообщение о том, что ваша рубка сфизлилась, что вы положили логи в пак, что ваш скилл ламбера подрос - неважно. Дождитесь пока ваш чар скажет фразу "Go to next tree". Скрипт снова находится в режиме ожидания. Идите к следующему дереву и повторяйте процедуру. Повторяйте ваши действия столько сколько деревьев вы за раз хотите вырубать на макре. Я думаю, для начала деревьев 40-50 хватит.
Старайтесь двигаться по деревьям не хаотично, а последовательно. Направление движения не важно. Можете идти снизу-вверх, слева-направо или наоборот. Но лучше воздержитесь от кругов, спиралей и прочей лабуды. Старайтесь не размечать деревья, которые по отношению к предыдущему заслонены каким-либо препятствием. Если вы будете следовать этим рекомендациям - чар при рубке будет переходить от дерева к дереву достаточно быстро. Также, пока не написан обход препятствий - не искушайтесь джунглями и густыми зарослями... Чар может в них заблудиться.
Закончили разметку массива? Теперь реколльтесь от греха подальше к себе на базу и вам потребуется поработать с текстовым файлом массива.
Загрузите этот файл в текстовый редактор и замените поиском с заменой все открывающие круглые скобки на квадратные, проделайте аналогичное действие с закрывающими. В конец файла добавьте команду pause_script То есть ваши строки должны приобрести вид:
set %derevo [1 1] 1836 set %derevo [1 2] 1347 set %static [ 1 ] 3299 set %derevo [2 1] 1840 set %derevo [2 2] 1344 set %static [ 2 ] 3299 .................................. pause_script
Ламберджекинг. Рубка по массиву координат
ВНИМАНИЕ!!! ЭТИ МАКРОСЫ ТРЕБУЮТ UOPilot ver. 1.07 beta 7 или новее!!!
Код // Lamber-rubka по массиву. ver. 1.12b © Edred // // Используется массив координат, созданный при помощи // скрипта Lamber-razmetka. Массив должны быть загружены // в окна пилота номер 10. Если грузите в другое окно - // ищите в текста макроса все '.10' и заменяйте на // ваши номера. // // Перед запуском скрипта запустите скрипт с массивом // в окне пилота номер 10. Возьмите в руки топор, среколльтесь // в лес. Один раз ткните топором в любое дерево. Назначьте // ластобжектид и тип в переменные (значения берутся из окна // пилота "параметры чара") // // Необходимо забиндить на F10 - LastObject, WaitForTarget, LastTarget // Если ходите в хайде: F8 - Use skill hiding // Если макрос в цикле с реколлом и разгрузкой: // F1 - реколл на базу через ассист // F2 - реколл обратно в лес (в начало массива) // // Скрипт водит чара к деревьям, занесенным в массив и рубит их // до полной вырубки. // После завершения массива либо после набора максимального // веса чар реколлится через ассист либо подает сигнал и останавливается // (если реколл отменен). После реколла чар разгружается, реколлится // обратно в лес и скрипт зацикливается. // // v.1.11b: Изменен способ определения физла при реколле: // теперь проверяется изменение координат чара на те, которые // должны быть после реколла (ластмессага о физле может быть пропущена) // v.1.12b: В связи с возможными подвисаниями клиентов при большой нагрузке // на комп (два клиента, плюс еще чего-нибудь), вводим переменные для пауз // и, на всякий случай, еще маленькие паузы кое-где. Плюс мелкие фиксы. // // Перемещение чара к очередному дереву осуществляется использованием // скрипта Move, который должен быть помещен в окно пилота номер 0.
// -------------------------------------- Установка переменных ------------------------------------------- set #ves 550 // Максимальный вес set #minves 55 // вес чара с несколькими логами set #razmer 67 // Количество деревьев в массиве // Посмотрите последний блок в скрипте создания массива - // там в комментариях написан номер последнего дерева set #hide 1 // 1 - ходим и рубим в хайде. 0 - нет set #rec 1 // 1 - реколлимся через ассист, 0 - подаем сигнал и останов. set #basax 1714 // координаты чара после реколла на базу set #basay 994 // (смотрите в параметрах чара после реколла set #paus 3000 // пауза при драге логов из пака // координаты логов в паке set #logsx 730 set #logsy 406 // координаты куда драгать логи set #dragx 360 set #dragy 261 set #zhdat 0 // 1 - ждать 15 минут перед началом рубки, 0 - нет // ----------------------------------------------------------------------------------------------------------------------
:forever // крутимся в вечном цикле
// Предварительный этап. Если надо в хайде - хайдимся if #hide = 1 while_not ( lastmsg you have hidden ) send F8 3000 // Пытаемся захайдиться end_while end_if
if #zhdat = 1 wait 900000 end_if
// Основная процедура скрипта. Считывание данных из массива for #i 1 #razmer 1 set #kx %stand.10 [ #i 1 ] set #ky %stand.10 [ #i 2 ] gosub navigator // процедура перемещения чара к цели set #targx %derevo.10 [ #i 1 ] set #targy %derevo.10 [ #i 2 ] set #stattype %static.10 [ #i ] gosub vyrubka // процедура тотальной вырубки цели if wght > #ves gosub recall // реколл для разгрузки end_if end_for
:recall // проверяем переменную #rec - если 1 - реколлимся на базу через ассист // разгружаемся и реколлимся обратно в лес: // F1 - реколл на базу // F2 - реколл в лес if #rec = 1 // будем реколлиться :fiz1 send F1 3000 wait 3000 if ( ( (charposx < #basax) or (charposx > #basax) ) and ( (charposy < #basay) or (charposy > #basay) ) ) // координаты чара не совпадают с теми, в которых должен оказаться чар после реколла send tab 500 goto fiz1 end_if wait 3000 // Новая процедура разгрузки логов. Исходим из того, // что 10 логов = 2 стоуна (примерно). :razgr1 set #tmpves wght - 100 if #minves < #tmpves drag #logsx, #logsy #dragx, #dragy 500 wait #paus goto razgr1 end_if :razgr2 set #tmpves wght - 50 if #minves < #tmpves drag #logsx, #logsy #dragx, #dragy 250 wait #paus goto razgr2 end_if :razgr3 set #tmpves wght - 20 if #minves < #tmpves drag #logsx, #logsy #dragx, #dragy 100 wait #paus goto razgr3 end_if // а дальше прекрасно работает старая while #minves < wght // первая пара координат - координаты логов в паке // вторая пара координат - куда их драгать drag #logsx, #logsy #dragx, #dragy 10 // паузу подбирайте под себя wait #paus end_while :fiz2 send F2 3000 wait 3000 if ( (charposx = #basax) and (charposy = #basay) ) // координаты чара совпадают с теми, в которых он был до реколла send tab 500 конецформыначалоформыgoto fiz2 end_if set #i 1 goto forever end_if // не реколлимся flash alarm end_script
:vyrubka // подставляем ластстатиктип, координаты ласттаргета и // вырубаем дерево под корень. // Бинды: F10 - LastObject, WaitForTarget, Lasttarget
// следующие две строки прописывают ид и тип топора // посмотрите в параметрах чара (в пилоте) и поправьте set lastobjectid 1075293611 // топор set lastobjecttype 3907 // топор
// тут править ничего не надо set lasttargetx #targx set lasttargety #targy set lasttargetkind 3 set laststatictype #stattype
:povtor send F10 1500 if lastmsg you fail goto povtor end_if if (lastmsg no logs) return end_if wait 8000 if (lastmsg it appears) or (lastmsg you can't) // Что-то не то!!! // msg NE POPAL! Nomer #i return end_if goto povtor return
:navigator // процедура вызова скрипта Move из окна пилота номер 0. start_script 0 wait 2000 set #kudax.0 #kx set #kuday.0 #ky if #hide = 1 set #hide.0 1 end_if set #gotovo.0 0 resume_script 0 wait 1000 :povtor2 set #gt #gotovo.0 if #gt > 0 if #gt = 9 stop_script 0 msg Error! end_if if #gt = 2 stop_script 0 gosub recall end_if stop_script 0 return else wait 1000 end_if goto povtor2 return
УНИВЕРСАЛЬНАЯ ПРОЦЕДУРА ПЕРЕМЕЩЕНИЯ ЧАРА ДЛЯ РАЗНЫХ МАКРОСОВ
Поместите данный скрипт в окно пилота номер 0 и не забудьте после этого сохранить настройки, чтобы этот скрипт всегда был в окне номер 0. Обращения к данному скрипту будут производиться из разных скриптов! Описание вызова данной процедуры (если вы захотите делать это из своих макросов) сейчас отпосщу в соседний топик (обсуждение макросов).
Код // Move. ver. 1.02b © Edred // // Процедура, аналогичная по действию команде "move x, y" // из EasyUO. То есть, это процедура перемещает чара в // указанную точку мира. В отличие от ИзиУО, в данной процедуре // осуществляется контроль над перемещением чара в хайде // (если необходимо) и за появлением ПК или монстров (если // необходимо). // // Данная процедура должна быть помещена в окно номер 0 // UOPilot-а. Запускать предварительно процедуру не надо. // Управление этой процедурой очуществляется из тела // соответствующего макроса (описание управления в доке). // // Если вы хотите использовать хайд при перемещении, // забиндите на F8 - Use skill hiding
// Блок создания необходимых переменных // Не изменяйте их!!! set #kudax charposx set #kuday charposy set #hide 0 set #trevoga 0 // пока не работает!!! set #gotovo 0
// теперь процедура встает на паузу и ждет переназначения // переменных из тела вашего макроса pause_script
// Начинаем работу
// Описание принципов движения - схема koord.jpg // Для передвижения чара необходимо проверить, чтобы // клавиши Left, Right, Up, Down, Home, End, PgUp, PgDn // не были забиндены для других действий!
// Особенности: // 1. Перед любым движением вызывается процедура запоминания // текущих координат чара. Это нужно для отлова ситуаций // когда чар уперся в препятствие (сравнение координат чара // до шага и после) - savepos // 2. После каждого шага вызывается процедура проверки на хайд, // если параметр "хайд" задан - то задается пауза и проверяется // ластмессага на предмет "revealed". Если да, чар хайдится // снова - hide // 3. После этого вызывается процедура проверки на препятствие. // Если координаты не изменились при движении - чар уперся. // Кстати, проверить - в ряде случаев при движении первое движение // в определенном направлении означает только поворот чара // в нужном направлении. Надо отловить в каких случаях это происходит // и задать для них дополнительно изменение направления чара перед // движением. Идея: можно в savepos запоминать еще и направление // ориентации чара. Если изменилось только это - чар не уперся. // Если же чар и впрямь уперся - то вызываем процедуру обхода // препятствий. Проверка - baffle, а обход препятствий - unblock
:nextstep
if (charposx = #kudax ) and ( charposy = #kuday ) // прибыли set #gotovo 1 pause_script end_if
// Расположение чара - Вариант 2 if charposx = #kudax if charposy > #kuday gosub savepos send pageup gosub hidden gosub baffle goto nextstep end_if if charposy < #kuday gosub savepos send end gosub hidden gosub baffle goto nextstep end_if end_if
// Вариант 1 if charposy = #kuday if charposx > #kudax gosub savepos send home gosub hidden gosub baffle goto nextstep end_if if charposx < #kudax gosub savepos send pagedown gosub hidden gosub baffle goto nextstep end_if end_if
// Вариант 3 и 4 - сводим к 1 и 2 if charposy < #kuday if charposx < #kudax gosub savepos send down gosub hidden gosub baffle goto nextstep else gosub savepos send left gosub hidden gosub baffle goto nextstep end_if else if charposx < #kudax gosub savepos send right gosub hidden gosub baffle goto nextstep else gosub savepos send up gosub hidden gosub baffle goto nextstep end_if end_if // если добрались до сюда - я <вырезано анти-матом> msg donkey! set #gotovo 9 pause_script
:savepos set #prevx charposx set #prevy charposy return
:hidden if #hide = 1 // Если мы в хайде - надо паузу между шагами wait 1000 if lastmsg been revealed send F8 wait 1000 end_if end_if return
:baffle // процедура проверки на препятствие и обход его если уперлись. return
***********************************************FISHING************************** ************ :main gosub fish :fish for #y -5 5 1 for #x -5 5 1 set lasttargetx charposx + #x set lasttargety charposy + #y set lasttargetkind 2 gosub fish2 end_for end_for return :fish2 set #p 0 :fishing send F6 4000 if (lastmsg that is too) or (lastmsg there are no) return end_if set #p #p + 1 goto fishing return
|