#################### Train Archery crafted by Askaneli #################### #################### Шард DRW (http://www.drw.ru) #################### #################### Отдельное спасибо за наводку Guesst #################### #################### Отдельное спасибо за модули Sfagnum #################### #############################################################################
Var RejimSC=2 ; Режим работы скрипта, 1 - арчер, 2 - кастующий Var Sunduk='0x4029B845' ; ИД сундука где все ресурсы, луки и стрелы, реги для вортекса или скролы для вортекса, кормёжка для чаров Var xVortex='1255',yVortex='745',zVortex='251' ; Координаты куда кастуем вортекса, не далее 2х тайлов от берега, а то стрелы не достаёт упавшие Var TBow='0x13B1' ; Тип оружия которое будем использовать, лук типа сча
## Запускаемый модуль
sub main() uo.exec("filterspeech clear") uo.exec("filterspeech off") uo.exec("set finddistance 3") uo.sayu(".detail 0") uo.useobject(Sunduk) uo.useobject('backpack') wait(1000) uo.exec("exec main0"+STR(RejimSC)) uo.Exec('terminate Reconnector') wait(1000) uo.Exec('exec Reconnector') wait(1000) end sub
## Модуль арчера
Sub main01() var Vortex='0x40043143',check = false var arN,arT,arE,qV = 0 var sk=uo.skillval("Archery",1)
uo.exec("warmode 1") arN = uo.count('0x0F3F','0x0000') arE = arN while not uo.dead() if uo.IsNPC(Vortex) then ## Есть вортекс, просто следим за количеством стрел и наличием лука if uo.skillval("Archery",1) == 1000 then uo.asmLogAdd('Training.txt', UO.asmGetDate('dd/mm/yy')+" - "+UO.asmGetTime('hh:nn:ss')+" YES!!! GM Archery!!!") uo.closeuo() end if if uo.count('0x0F3F','0x0000')<50 then ; Стрелы, пополняем из сундука arT = uo.count('0x0F3F','0x0000') uo.findtype('0x0F3F','0x0000',Sunduk) Cheklag() uo.moveitem('finditem','100','backpack') wait(1000) arE = arE + uo.count('0x0F3F','0x0000')-arT end if if uo.GetGraphic(uo.ObjAtLayer('Lhand'))<>TBow then ; Оружие в руке, при отсутствии берём из сундука uo.findtype(TBow,'-1','backpack') if uo.findcount()>0 then uo.usetype(TBow) wait(1000) else uo.findtype(TBow,'-1',Sunduk) Cheklag() uo.moveitem('finditem','1','backpack') wait(1000) uo.usetype(TBow) wait(1000) end if end if if not check then check = true qV = qV + 1 end if else ## Нету вортекса, ищем следующего, попутно подбираем стрелы в пак с земли. Пишем отчётик о состоянии скила в лог. Кушаем до полного. if check then if sk <> uo.skillval("Archery",1) then uo.asmLogAdd('Training.txt', UO.asmGetDate('dd/mm/yy')+" - "+UO.asmGetTime('hh:nn:ss')+" ::на поднятие скила потратил " + str(arE-ArN) + ", потребовалось " + str(qV) + " вортексов, состояние скила арчери - "+STR(uo.skillval("Archery",1)/10)) arN = uo.count('0x0F3F','0x0000') arE = arN qV = 0 sk = uo.skillval("Archery",1) end if Eda() check = false end if uo.findtype('0x000D','0x000D','ground') if uo.findcount()>0 then Vortex=uo.getserial('finditem') UO.attack(Vortex) end if end if wait(1000) ; Опрос состояния каждую секунду if uo.injournal('SkokaAR') then uo.deletejournal() uo.say(STR(uo.skillval("Archery",1)/10)) end if wend uo.closeuo() end sub
## Модуль кастующего
Sub main02() var Vortex='' var i dim ResursCast[5]
ResursCast[1]='0x1F66' ## Energy Vortex Scroll ResursCast[2]='0x0F7B' ## BM ResursCast[3]='0x0F7A' ## BP ResursCast[4]='0x0F86' ## MR ResursCast[5]='0x0F88' ## NS
uo.exec("warmode 0")
uo.findtype('0x000D','0x000D','ground') ; Стартовый поиск вортекса, на всякий случай ... if uo.findcount()>0 then Vortex=uo.getserial('finditem') end if
while not uo.dead() if not uo.IsNPC(Vortex) then ## Нету вортекса, кастуем его что бы был , если есть кому качать арчери, ну и реги за одно пополняем и кушаем, чёб голодным не был чар if ChekArcher() then while not castuni(40,'0x1F66','Energy Vortex') for i=2 to 5 if uo.count(ResursCast[i],'0x0000')==0 then uo.findtype(ResursCast[i],'0x0000',Sunduk) Cheklag() if uo.findcount()>0 then uo.moveitem('finditem',str(10-uo.count(ResursCast[i],'0x0000')),'backpack') wait(1000) end if end if next wend uo.findtype('0x000D','0x000D','ground') if uo.findcount()>0 then Vortex=uo.getserial('finditem') for i=2 to 5 if uo.count(ResursCast[i],'0x0000')<10 then uo.findtype(ResursCast[i],'0x0000',Sunduk) Cheklag() if uo.findcount()>0 then uo.moveitem('finditem',str(10-uo.count(ResursCast[i],'0x0000')),'backpack') wait(1000) end if end if next Eda() ToMedit() end if end if end if wait(1000) ; Опрос состояния каждую секунду if uo.mana==uo.int then ToHide() end if if uo.injournal('Stop Aaz 3472') then uo.deletejournal() uo.closeuo() end if uo.findtype('0x0F3F','0x0000','ground') if uo.findcount()>0 then ##Cheklag() uo.moveitem('finditem','-1',Sunduk) wait(1000) end if wend uo.closeuo() end sub
for i=1 to 5 if uo.IsNPC(Archers[i]) then if Archers[i]<>uo.getserial('self') then return true end if end if next return false end sub
Sub Eda() if uo.count('0x097B','0x0000')<50 then ## Жрачка, кушаем до изнеможения uo.findtype('0x097B','0x0000',Sunduk) if uo.findcount()>0 then Cheklag() uo.moveitem('finditem',STR(50-uo.count('0x097B','0x0000')),'backpack') wait(1000) end if end if
uo.deletejournal() repeat if uo.count('0x097B','0x0000')==0 then return end if uo.usetype('0x097B','0x0000') wait(1000) until uo.injournal("You are stuffed!") or uo.injournal("You can't think of a way to use that item.") end sub
Sub Cheklag() UO.DeleteJournal() UO.Click('backpack') Repeat Wait(10) Until UO.InJournal("backpack") end sub
Sub ToMedit() while uo.mana<40 uo.warmode(0) uo.deletejournal() uo.useskill('Meditation') repeat wait(10) until uo.injournal("You lose your concentration") or uo.injournal("You are at peace.") or uo.mana>40 wend end sub
Sub ToHide() while not uo.hidden() uo.warmode(0) uo.DeleteJournal() uo.useskill("Hiding") repeat wait(10) until UO.InJournal("You have hidden yourself well") or UO.InJournal("You can't seem to hide here.") or UO.InJournal("You are preoccupied with thoughts of battle.") or uo.dead() if UO.InJournal("You are preoccupied with thoughts of battle.") then uo.warmode(0) end if if uo.dead() then return end if wend end sub
Sub castuni(minMANA,sType,cName) var t = UO.Timer(),m = UO.MANA uo.exec("warmode 0") repeat UO.FindType(sType,-1,'my') If UO.findcount()>0 then if uo.mana<(minMANA/2) then ToMedit() end if m = UO.MANA uo.DeleteJournal() uo.waittargettile('400',xVortex,yVortex,zVortex) UO.UseObject('finditem') else if uo.mana<minMANA then ToMedit() end if m = UO.MANA uo.DeleteJournal() uo.waittargettile('400',xVortex,yVortex,zVortex) uo.cast(cName) end if t = UO.Timer() repeat wait(10) until IsMyOwn('You have interrupted') or IsMyOwn(uo.getname()+': The spell fizzles.') or IsMyOwn('You lack') or t+200<uo.Timer() or m > UO.MANA wait(500) if IsMyOwn('You lack') then return false end if until not (IsMyOwn('You have interrupted') or IsMyOwn(uo.getname()+': The spell fizzles.')) return true end sub
Sub IsMyOwn(msgSTR) if not UO.InJournal(msgSTR) then return false end if if msgSTR == Left(UO.Journal(UO.InJournal(msgSTR)-1),len(msgSTR)) then return true else return false end if end sub
## Модуль реконекта
Sub Reconnector() var ReconnectTime, RFlag ReconnectTime = '0' RFlag = 1 Repeat While (uo.ObjAtLayer('Bpack') == '') if RFlag Then ReconnectTime = MakeTime() RFlag = 0 endif Wait(110000) # WorldSave Protection uo.Say('') Wait(5000) uo.Say('') Wait(5000) uo.Say('') Wait(5000) uo.LDblClick(357,164) uo.LClick(616,459) Wait(5000) WEnd Wait(3000) if (RFlag == 0) and (ReconnectTime <> '0') Then UO.asmLogAdd('Training.txt', UO.asmGetDate('dd/mm/yy')+" - "+UO.asmGetTime('hh:nn:ss')+" - "+"Упс. Ребут типа !!!") uo.Exec('terminate main01') uo.Exec('terminate main02') wait(5000) uo.RClick(196,193) wait(2000) uo.RClick(196,193) wait(2000) uo.RClick(196,193) wait(2000) uo.RClick(196,193) wait(2000) uo.Exec('exec main') wait(5000) RFlag = 1 ReconnectTime = '0' endif Until false end sub Sub MakeTime() VAR D, T, Ret, i Ret = STR(uo.Time()) T = "" For i = 0 To Len(Ret) T = Ret[Len(Ret)-i] + T If (I == 2) OR (I == 4) Then T = ":" + T EndIf Next Ret = STR(uo.Date()) D = "" For i = 0 To Len(Ret) D = Ret[Len(Ret)-i] + D If (I == 2) OR (I == 4) Then D = "." + D EndIf Next Ret = T + " @ " + D RETURN Ret end sub