Полезные процедуры-)
| |
PAR | Дата: Среда, 2006-12-13, 4:16 AM | Сообщение # 1 |
 Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
| Если вам стало недостаточно готовых чужих скриптов, в которых не все сделано так, как было бы удобнее для вас, значит пришло время создать свой собственный скрипт. Сия тема поможет вам сделать это не придумывая веллосипедов и не перекапывая пол инета в поисках нужного кусочка скрипта) Пример использования процедуры: допустим у вас дефолтовый скрипт Code | sub main() #программа end sub
чтобы использовать в нем дополнительнцю процедуру "blabla" нада переписать скрипт следующим образом:
var Pizza=0x1040
sub main() #программа blabla(1234,Pizza,"niam") #программа end sub
sub blabla(number,item,string) #процедура end sub | Опытных скриптеров подобные подробности насмешат, однака возможно комуто они пригодятся) Процедуры, использующие объекты требуют указывать их идентификатор (ИД) чтобы узнать ИД объекта (допустим той-же пиццы) нужно набрать в уо комманду ,info и выбрать искомый объект. Впрочем перейду уже к процедуркам: ----- Телепорт через рунбук ----- Code | sub RunebookRecall(RuneBookID,RuneNum) var x,y x=UO.GetX() y=UO.GetY()
UO.Exec('warmode 0') UO.UseObject(RuneBookID)
while x==UO.GetX() and y==UO.GetY() wait(200) if RuneNum<=8 then UO.LClick(63,(RuneNum-1)*15+69) endif if RuneNum>8 then UO.LClick(212,(RuneNum-9)*15+69) endif wend end sub | функция телепортирует вас по указанной руне в указанном рунбуке, требуется знать ИД рунбука) пример использования: Code | RunebookRecall(0x60B70413,10) | ----- Перезарядить рунбук ----- Code | sub RechargeRunebook(RunebookID) UO.DeleteJournal() while not UO.InJournal('recharge') UO.UseObject(RunebookID) UO.WaitTargetType(0x1f4c) wait(2000) UO.LClick(244,23) wend end sub | пример использования: Code | RechargeRunebook(0x60B70413) | ----- Простой реконнектор ----- Code | sub Reconnector(ResolutionMode) if UO.ObjAtLayer('Bpack') == '' then UO.DeleteJournal() wait(20000) UO.Press(40,10,100) wait(5000)
if ResolutionMode==640 then UO.LClick(318,269) #640x480 endif if ResolutionMode==800 then UO.LClick(400,328) #800x600 endif
wait(5000) while UO.ObjAtLayer('Bpack') == '' wait(100) UO.LClick(317,315) wait(100) UO.LClick(318,269) wait(3000) UO.LClick(615,456) wait(3000) UO.LClick(615,456) wait(3000) UO.LClick(615,456) wait(3000) UO.LClick(615,456) wait(5000) wend endif end sub | Процедура проверяет наличие связи и реконнектит вас если связь оборвана. Может быть использована как отдельный скрипт. пример использования: Установите параметр на 800, если разрешение ультимы у вас 800*600 или 640, если разрешение 640*480
Сообщение отредактировал mont - Пятница, 2007-06-01, 2:59 AM |
|
| |
PAR | Дата: Среда, 2006-12-13, 4:17 AM | Сообщение # 2 |
 Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
| ----- Закрыть ультиму ----- Code | sub CloseUO(ResolutionMode,Key) UO.Press(Key) Wait(2000) if ResolutionMode==640 then UO.LClick(390,304) #640x480 endif if ResolutionMode==800 then UO.LClick(433,333) #800x600 endif end sub | В отличие от готовых функций инжекта (например UO.CloseUO()), не вызывает ошибку приложения. Для работы данной функции требуется чтобы меню выхода открывалось по выбранной клавише. пример использования: Как и в прошлой процедуре, первый параметр это разрешение, а второй код кнопки выхода (27 - кнопка ESC) ----- Купить у вендора ----- Code | sub VendorBuy(Items,VendorName) UO.DeleteJournal() UO.Buy(Items,VendorName) wait(100) while not UO.InJournal('Greetings.') and not UO.InJournal('stock.') wait(200) wend end sub | не требует дополнительной задержки после использования, покупает независимо от лагов) пример использования: Code | VendorBuy('items_list','Melissa') | items_list <- набор предметов с таким названием требуется создать в injection->main->buy\sell, тогда при использовании процедуры он будет куплен у вендора Melissa. Если вы не хотите указывать имя вендора то второй параметр следует сделать 'vendor', тогда покупка произойдкт у блжайшего продавца. ----- Продать вендору ----- Code | sub VendorSell(Items,VendorName,SellingDelay) var VendorVelocity=0 UO.DeleteJournal() UO.Sell(Items,VendorName) wait(100) while not UO.InJournal('total') and not UO.InJournal('sold.') and not UO.InJournal('stock.') and VendorVelocity<SellingDelay/200 wait(200) VendorVelocity=VendorVelocity+1 wend end sub | Также, как и предидущая функция, не требует дополнительной задержки после использования и покупает независимо от лагов. Ктомуже на случай если аендор не отвечает (например при переполнени вендора) предусмотрена максимальная задержка отклика SellingDelay. пример использования: Code | VendorSell('items_list','Melissa',3000) | items_list <- набор предметов с таким названием требуется создать в injection->main->buy\sell, тогда при использовании процедуры он будет продан вендору Melissa. Если вы не хотите указывать имя вендора то второй параметр следует сделать 'vendor', тогда вы продадите блжайшему продавцу. Последний параметр SellingDelay это время ожидания ответа от вендора, при средних лагах советую 3000)) ----- Разрезать все предметы определнного вида ----- Code | sub CutItems(Item) while UO.Count(Item)<>0 UO.WaitTargetType(Item) UO.UseType(0x0f9e) repeat wait(10) until UO.InJournal('material') or UO.InJournal('object>!') UO.DeleteJournal() wend end sub | Необходимо чтобы в бэкпаке были ножницы. Будет резать пока не кончится указанный тип вещей или пока не сломаются все ножницы. пример использования: Code | CutItems(0x13db) #StuddedTunic | ----- Положить шмотку в сундук (ящик) ----- Code | sub Put(Item,Syndyk) UO.UseObject(Syndyk) while UO.Count(Item)>0 UO.FindType(Item) UO.MoveItem('finditem','0',Syndyk) wait(1000) wend UO.Resend() UO.Hide(Syndyk) end sub | Складывает все вещи типа Item в сундук пример использования: Code | Put(0x0eed,0x62a55aaf) | Первый параметр - ИД шмотки (в данном случае золота:), 2й - ИД сундука ----- Взять из сундука (ящика) ----- Code | sub Take(Item,Count,Syndyk) var PrevItemCount=UO.Count(Item) UO.UseObject(Syndyk) UO.FindType(Item,'0x0000',Syndyk) wait(1000)
if UO.GetQuantity('finditem')>0 Then wait(1000) UO.MoveItem('finditem',Count,'backpack') wait(1000) endif
while PrevItemCount==UO.Count(Item) wait(200) if UO.GetQuantity('finditem')==0 Then wait(1000) PrevItemCount=-10 endif wend UO.Resend() UO.Hide(Syndyk) end sub | Процедура позволяет переложить указанное кол-во предмета из сундука в бэкпак Т.к. во время перекладывания могут быть задержки, процедура будет ожидать пока вещи не переложатся. пример использования: Code | Take(0x0eed,'10000',0x62a55aaf) | Первый параметр - ИД шмотки (в данном случае золота:), 2й - количество (сколько нвдо взять) и 3й - ИД сундука
Сообщение отредактировал mont - Пятница, 2007-06-01, 3:01 AM |
|
| |
fox | Дата: Среда, 2006-12-13, 8:41 PM | Сообщение # 3 |
Рядовой
Группа: Проверенные
Сообщений: 3
Статус: Offline
| неработает реканнектор пишет инваилд намбер оф аргументс что надо исправить в реконнекторе? чтобы он заработал разрешение 640
Нубоскриптер нид бекап
|
|
| |
PAR | Дата: Четверг, 2006-12-14, 1:10 PM | Сообщение # 4 |
 Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
| Вроде все работает.. Для единичного запуска реконнектора внутри скрипта нада пускать его вотак: Code | Sub Main() #code Reconnector(800) #code end sub | При этом реконнектор один раз проверит наличие связи и реконнектится если связь отсутствует. Точнее оно будет пытаться реконнектиться до тех пор пока не зайдет в ультиму. чтобы сама функция превратилась в скрипт для реконнекта надыть кое что добавить в нее: Code | sub AutoReconnector() var ResolutionMode=640 var Message2Close='CloseReconnector'
var ReconnectorInUse=1
while ReconnectorInUse==1 UO.DeleteJournal() if UO.ObjAtLayer('Bpack') == '' then wait(20000) UO.Press(40,10,100) wait(5000)
if ResolutionMode==640 then UO.LClick(318,269) #640x480 endif if ResolutionMode==800 then UO.LClick(400,328) #800x600 endif
wait(5000) while UO.ObjAtLayer('Bpack') == '' wait(100) UO.LClick(317,315) wait(100) UO.LClick(318,269) wait(3000) UO.LClick(615,456) wait(3000) UO.LClick(615,456) wait(3000) UO.LClick(615,456) wait(3000) UO.LClick(615,456) wait(5000) wend endif
wait(5000) if UO.InJournal(Message2Close) then ReconnectorInUse=0 endif wend end sub | Это уже готовый скрипт для автоматического реконнекта, гарантирующий вам вечный онлайн)) При таком ее использовании надо настроить следующие параметры: var ResolutionMode=640 <-- разрешение экрана var Message2Close='CloseReconnector' <-- Сообщение в ультиме, по которому закроется скрипт реконнектор Скрипт будет выложен в раздел "файлы" -)
Сообщение отредактировал mont - Пятница, 2007-06-01, 3:01 AM |
|
| |
PAR | Дата: Четверг, 2007-01-04, 6:32 AM | Сообщение # 5 |
 Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
| ----- Запись рекалов ----- Code | sub Inscript(SBID) var BlankScroll=0x0E34 var BlankScroll4WTO='^0x0E34' var BlankScrollsInPack=1
while BlankScrollsInPack==1 and UO.SkillVal("Inscription",1)>450 while UO.Mana>=50 and UO.Count(BlankScroll)>0 UO.DeleteJournal() UO.WaitMenu('Select','Circle 4','Select','Recall') UO.WaitTargetObject(BlankScroll4WTO,SBID) UO.UseSkill("Inscription")
while not UO.InJournal('enough mana') and not UO.InJournal('move and stop') and not UO.InJournal('finish') and not UO.InJournal('perform') wait(100) wend wend
wait(3000)
while UO.Mana<UO.Int UO.DeleteJournal() UO.UseSkill("Meditation") while not UO.InJournal('You are unable to concentrate') and not UO.InJournal('You stop meditating') and not UO.InJournal('perform') wait(100) wend wend
if UO.Count(BlankScroll)<1 then BlankScrollsInPack=0 endif wend end sub | Создает рекалы из бланков, пока последние не закончатся. Пример использования: Inscript(0x6282172A) Единственный параметр - ИД спеллбука, с помощью которого будут создаваться свитки.
Сообщение отредактировал mont - Пятница, 2007-06-01, 3:02 AM |
|
| |
PAR | Дата: Четверг, 2007-01-04, 6:49 AM | Сообщение # 6 |
 Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
| ----- Создать еду и покушать ----- Code | var AlreadyEaten=0
sub Eat(item) if UO.Count(item)>0 and AlreadyEaten==0 then UO.UseType(item) AlreadyEaten=1 endif end sub
sub CreateFoodnEat() var Cake =0x09e9 var Muffins =0x09ea var ChickenLeg =0x1608 var Ham =0x09c9 var Pizza =0x1040 var CookedBirds =0x09b7 var Spam =0x1044 var FishStake =0x097B var Baranina =0x0F95
AlreadyEaten=0
if UO.Count(Cake)==0 and UO.Count(Muffins)==0 and UO.Count(ChickenLeg)==0 and UO.Count(Ham)==0 and UO.Count(Pizza)==0 and UO.Count(CookedBirds)==0 and UO.Count(Spam)==0 and UO.Count(FishStake)==0 and UO.Count(Baranina)==0 then UO.Cast('Create Food') wait(3000) endif
Eat(Cake) Eat(Muffins) Eat(ChickenLeg) Eat(Ham) Eat(Pizza) Eat(CookedBirds) Eat(Spam) Eat(FishStake) Ea t(Baranina) end sub | За 1 запуск процедуры съедается 1 кусок любой пищи. Если в вашем бэкпаке нет еды, то создаст еду, и съест ее. Если же еда уже есть то создавать ничего не будет, а просто съест) Code | пример использования: #начало скрипта var AlreadyEaten=0 #код CreateFoodnEat() | Обязательно не забываем инициализировать переменную var AlreadyEaten=0 в начале скрипта. Впрочем, если этого не сделать, ничего страшного не произойдет, только начнут хаваться сразу все виды пищи одновременно) Также желательно наличие в рюкзаке спелбука с заклинанием Create Food и элементарного навыка мажери (вроде 33 хватает)
Сообщение отредактировал mont - Пятница, 2007-06-01, 3:02 AM |
|
| |
 |