Скупка регов, перемещаясь по рункам. Гораздо дешевле чем по книге. Рунка на 20 поездок стоит всего 250 гп, то есть 12,5 гп за поездку. Раз в 20 дешевле , чем по книге.
Тестилась на старой инже и на новой.
Скупать можно любые товары по байлистам, но периодически нужно прикупать рунки и реги для полетов, поэтому надо замарчить хотя бы одного мага.
Code:
var clr=38, clo=43, cly=53, clg=63, clb=3, cla=89, clda=83, clp=120 , clgr=1088, clw=2998
# красный - '38' или '0x0026' # темно-бирюзовый - '83' или '0x0053'
# оранжевый - '43' или '0x002B' # голубой - '89' или '0x0059'
# желтый - '53' или '0x0035' # синий - '3' или '0x0003'
# зеленый - '63' или '0x003F' # фиолетовый - '120' или '0x0078'
# '1088' - по умолчанию
# 1152 - бирюзовый 1151 - черный 1155 - фиолетовый 1156 - белый 1158 - кр 1161 - синий 1162 - темно зел 1166 ткр 1169 сз
# 2500 2524 - оранж 2517 кр 2567 малин 2566=0x0A06 белый
# 2998 - белый 3008 3221 3600 и выше - контур
Var LifeLimit=uo.getMaxHP() ;UO.Life
Var WeightLimit=uo.getMaxHP()*4 ;720
############################################################
sub BuyRegByRune()
## Kobol 2016
## Марчатся рунки рядом с вендорами м складываются в пак. Туда же складываются пустые рунки, штук 5, реги для перемещения
##Чар ищет в паке рунки и если находит не пустую, то реколится по ней. Покупает у мага все, что нужно, в т.ч реги для полета
## Докупает пустых рунок, если из осталось меньше 5 шт.
## Если после перелета на рунке остается 1 заряд, то чар марчит пустую рунку на текущее место. Рунки с одним зарядом больше не
## используются.
## При превышении весового лимита чар реколится по 9 слоту книги к своему сундуку в заборе и скидывает туда накупленное.
## Если у вендора нет товара, ждет некоторое время и делает вторую
## попытку. Если и она неудачна, то летит дальше. В некоторых местах идет ко второму вендору и докупает у него.
## Ну вроде все.##
var curweapon=0, i, k, runa, fRCL=0, RuneL, VenName="",Ven="", MyX, MyY
var OldX=uo.GetX()
var OldY=uo.GetY()
var Time
dim Runka[4]
Runka[0]="0x1F14"
Runka[1]="0x1F15"
Runka[2]="0x1F16"
Runka[3]="0x1F17"
dim RunID[20] ; серийники рун
var rserial, rname, rcharges, brserial ; серийник рункм
var MyMoney
MyMoney=UO.Gold
uo.charprint('0x09DC','h_rekol() Try to recall !!!! ')
checklag()
UO.IgnoreReset()
uo.deletejournal()
wait(100)
UO.FindType("0x1F4C","0x0000","2") ; 'recall scroll ### 0x1F14 0x1F15 - кверх ногами справа налево 0x1F16 кверх ногами слева направо 0x1F17
if UO.GetQuantity("finditem")>0 then
fRCL=1 ; recall scroll found
end if
fRCL=0 ;' скроллы пока не используем
#if uo.weight > WeightLimit then # Максимальный вес при котором домой с рудой
#return
#end if
# 1848-Tr1
RegAgain:
while uo.weight < WeightLimit*1.3 and UO.Gold>2000
## перемещаемся
for i=0 to 3
;' выбираем рунку
checklag()
uo.findtype (Runka[i],"0x0000","backpack")
wait(100)
;if UO.GetQuantity("finditem")>0 then
while UO.FindCount() > 0
checklag()
wait(100)
rserial=uo.getserial("finditem")
wait(100)
printincolor("149 New rserial="+rserial,1155)
if rserial== "0xFFFFFFFF" then
printincolor("162 rserial="+rserial,0)
goto blankR
end if
wait(200)
uo.deletejournal()
wait(200)
k=0
ClikAgain: ###<<<<<<<<<<<<<
uo.click(rserial)
wait(300)
RuneL=uo.injournal("charges")-1
if RuneL==-1 and k<10 then
k=k+1
checklag()
goto ClikAgain
end if
if k==10 then
printincolor("181 k==10 rserial="+rserial,0)
goto blankR
end if
k=0
;printincolor("120 RuneL="+str(RuneL),clb)
;uo.journalserial(uo.injournal("too close")) == "Server ID"
rname=UO.Journal(RuneL-1)
rcharges=UO.Journal(RuneL)
;printincolor("120 "+rname,clg)
;printincolor("120 "+rcharges,clg)
rcharges=val(mid(rcharges,1,2))
;printincolor("120 "+rname,clr)
;printincolor("120 rcharges="+str(rcharges),clr)
uo.ignore("finditem")
if rcharges==1 then
#' если на рунке остался один заряд больше ее не используем - запас для марки
;printincolor("187 ONLY 1 CHARGE!!! rcharges="+str(rcharges)+" "+rserial,clm)
UO.TextPrint ("187 ONLY 1 CHARGE!!! goto blankR rcharges="+str(rcharges)+" "+rserial)
checklag()
uo.ignore(rserial)
goto blankR
end if
if instr(rname,"Blank")> -1 then
;' blank rune пропускаем
;printincolor("126 ignore "+rname,clb)
;printincolor("127 ignore "+rserial,clb)
checklag()
uo.ignore(rserial)
goto blankR
end if
;printincolor(rserial,clr)
;printincolor(rname,cla)
uo.ignore(rserial)
;' перелетаем на новое место -------------
checklag()
uo.waittargetobject(rserial)
wait (100)
if fRCL==1 then
uo.usetype("0x1F4C") ;' Recall Scroll
wait (1000)
test()
return
else
uo.print ("Recall scroll not found")
uo.deletejournal()
wait(100)
;Uo.Exec("cast 'Recall' rserial")
goNext:
uo.cast("Recall",rserial)
wait (500)
if UO.InJournal(" mana ") then
UO.Deletejournal()
UO.UseSkill("Meditation")
k=0
Repeat
k=k+1
checklag()
If uo.getHP() < uo.getMaxHP()-10 then
uo.say("guards")
uo.playwav("FrsUndrAttack.wav" ) ; pip2.wav
end if
Wait(8000)
Until UO.InJournal("You are") or UO.InJournal("You lose") or k>10
UO.DeleteJournal()
goto goNext
else
wait (8000)
checklag()
end if
MyX=uo.getX()
wait(200)
MyY=uo.getY()
wait(200)
; 'if oldX<>uo.getX() or oldY<>uo.getY() then
checklag()
if oldX<>MyX or oldY<>MyY then
;'--- перелетели на новое место. покупаем реги
printincolor("200 h_rekol Recol success",cla-2)
#' ----- проверка остатка зарядов ---------
######### ######## ###### ###### ##### ########## #########
UO.DeleteJournal()
uo.click(rserial)
wait(300)
RuneL=uo.injournal("charges")-1
rname=UO.Journal(RuneL-1)
rcharges=UO.Journal(RuneL)
;printincolor("263 "+rname,clg+5)
;printincolor("264 "+rcharges,clg+5)
rcharges=val(mid(rcharges,1,2))
;printincolor("120 rcharges="+str(rcharges),clg+2)
UO.TextPrint ("269 Check 1 rcharges="+str(rcharges))
printincolor("--- !!! 270 Check 1 rcharges="+str(rcharges),clw)
;' проверяем остались ли на рунке заряды
;' если до полета оставался один заряд, то он израсходовался
if rcharges==1 then
# марчим рунку на это место
# выбрасываем рунку
;UO.DropHere(rserial)
printincolor("148 UO.DropHere rserial= "+rserial,clp)
UO.TextPrint ("148 UO.DropHere rserial= "+rserial)
brserial=GetBlanklRune()
printincolor("148 brserial= "+brserial,clp)
goMArk:
printincolor(" 269 Try Uo.cast(Mark, brserial)="+(brserial),2567)
checklag()
Uo.cast("Mark", brserial)
wait (500)
if UO.InJournal(" mana ") then
UO.Deletejournal()
UO.UseSkill("Meditation")
k=0
Repeat
k=k+1
checklag()
If uo.getHP() < uo.getMaxHP()-10 then
uo.say("guards")
uo.playwav("FrsUndrAttack.wav" ) ; pip2.wav
end if
Wait(8000)
Until UO.InJournal("You are") or UO.InJournal("You lose") or k>10
UO.DeleteJournal()
goto goMArk
else
wait (8000)
checklag()
end if
printincolor(" 287 Result Uo.cast(Mark, brserial)="+(brserial),2567)
;return
######### ######## ######## ########## ########## ########## #########
end if
# 'в зависимости от места покупки выбираем имя вендора
Ven=""
if uo.getX()<2918 and uo.getX()> 2911 then
# Vesper ------
Ven="Angelo"
end if
if uo.getX()<1418 and uo.getX()> 1413 then
# Brit Ins
Ven="Jina"
end if
;' покупаем реги или что там
buyVendor(ven, "BScr")
if MyMoney == UO.Gold and uo.getX()<4680 then
printincolor("No items bought. Waiting for refresh", clg)
uo.playwav("pip1.wav" )
k=0
if uo.journal ("reach the vendor") then
k=20
end if
UO.DeleteJournal()
while k<60
If uo.getHP() < uo.getMaxHP()-10 then
uo.say("guards")
uo.playwav("FrsUndrAttack.wav" ) ; pip2.wav
end if
hiding()
uo.warmode(0)
wait(1500)
k=k+1
uo.playwav("pip2l.wav" ) ; pip2.wav
wend
;' покупаем реги или что там еще раз
buyVendor(ven, "BScr")
if MyMoney == UO.Gold then
printincolor("No items bought again. Go to the next point", clp)
uo.playwav("pip1.wav" )
end if
else
MyMoney = UO.Gold
printincolor("buy complete success", clg)
uo.playwav("ding.wav" )
end if
# 'добираем реги у соседних вендоров
if uo.getX()<2918 and uo.getX()> 2911 then
ChaserXY(2918,668)
ChaserXY(2913,665)
printincolor("Try to buy from vendor 2913,665 Vesper", clp)
;' покупаем реги или что там еще раз
buyVendor("Bryant", "BScr")
if MyMoney == UO.Gold then
printincolor("No items bought again. Go to the next point", clp)
uo.playwav("pip1.wav" )
end if
end if
if uo.getX()<1418 and uo.getX()> 1413 then
ChaserXY(1410,1600)
;ChaserXY(2913,665)
printincolor("Try to buy from vendor 1410,1600 BritIns ", clp)
;' покупаем реги или что там еще раз
buyVendor("Yusuf", "BScr") ### !!!!!!!!
if MyMoney == UO.Gold then
printincolor("No items bought again. Go to the next point", clp)
uo.playwav("pip1.wav" )
end if
end if
if uo.getX()<1599 and uo.getX()>1596 and uo.getY()<1653 and uo.getY()>1648 then
ChaserXY(1593,1648)
ChaserXY(1594,1657)
printincolor("Try to buy from vendor 1592,1657 Brit daln" , clp)
;' покупаем реги или что там еще раз
buyVendor("Winona", "BScr")
if MyMoney == UO.Gold then
printincolor("No items bought again. Go to the next point", clp)
uo.playwav("pip1.wav" )
end if
end if
if uo.getX()<5735 and uo.getX()>5730 and uo.getY()<3199 and uo.getY()>3190 then
ChaserXY(5736,3196)
;ChaserXY(1592,1657)
printincolor("Try to buy from near vendor 5736,3196", clp)
;' покупаем реги или что там еще раз
buyVendor(ven, "BScr")
if MyMoney == UO.Gold then
printincolor("No items bought again. Go to the next point", clp)
uo.playwav("pip1.wav" )
end if
printincolor("Try to buy from near vendor 4547,851", clp)
;' покупаем реги или что там еще раз
buyVendor(ven, "BScr")
if MyMoney == UO.Gold then
printincolor("No items bought again. Go to the next point", clp)
uo.playwav("pip1.wav" )
end if
wait (200)
ChaserXY(4550,859)
;ChaserXY(1592,1657)
printincolor("Try to buy from near vendor MoonGlow 4550,859", clp)
;' покупаем реги или что там еще раз
buyVendor(ven, "BScr")
if MyMoney == UO.Gold then
printincolor("No items bought again. Go to the next point", clp)
uo.playwav("C:\Program Files\Drago World\Ultima Online\scripts\pip1.wav" )
end if
end if
;hiding()
uo.warmode(0)
wait(500)
else
uo.ignore(rserial)
printincolor("479 ignore(rserial)="+rserial,clr)
end if
oldX=MyX
oldY=MyY
printincolor("498 MyX="+str(MyX)+" MyY="+str(MyY), 5)
end if
blankR:
;printincolor(" 469 blankR: Search next rune", 5)
checklag()
uo.ignore(rserial)
uo.findtype (Runka[i],"0x0000","backpack")
wait(100)
wend
next
restart1:
printincolor("495 IgnoreReset() ",1152)
UO.IgnoreReset()
wait (1000)
wend
printincolor("Weight Limit exceeded", clr)
checklag()
RunebookRecall(9)
checklag()
DropRegSunduk()
goto RegAgain
end sub
###
############################################################
sub GetBlanklRune()
var curweapon=0, i, RNum, runa, fRCL=0,RuneL
var OldX=uo.GetX()
var OldY=uo.GetY()
var Time, ven=""
dim Runka[4]
Runka[0]="0x1F14"
Runka[1]="0x1F15"
Runka[2]="0x1F16"
Runka[3]="0x1F17"
dim RunID[20] ; серийники рун
var rserial, bserial,rname, rcharges ; серийник рункм
uo.charprint("0x09DC","Get Rune begin!! ")
checklag()
UO.IgnoreReset()
UO.Deletejournal()
wait(100)
RNum=0
for i=0 to 3
checklag()
uo.findtype (Runka[i],"0x0000","-1")
while UO.FindCount() > 0
uo.deletejournal()
checklag()
uo.click("finditem")
wait(100)
RuneL=uo.injournal("Rune")-1
rname=UO.Journal(RuneL)
rcharges=UO.Journal(RuneL+1)
rserial=uo.getserial("finditem")
;printincolor(rname,clb)
if instr(rname,"Blank")>-1 then
RNum=RNum+1
bserial=uo.getserial("finditem")
;printincolor(rname,cla)
;printincolor(bserial,cla)
;return rserial
else
end if
checklag()
uo.ignore(rserial) ; если не бланк - игнорим и бланк игнорим
uo.findtype (Runka[i],"0x0000","-1")
wait(200)
wend
wait(100)
next
checklag()
UO.IgnoreReset()
printincolor("RNum="+str(RNum),clr)
;если бланк рунок меньше 5 - покупаем
if RNum<5 then
uo.set("buydelay","4000")
UO.Buy("BlankRunes",ven)
wait(4300)
printincolor("BlankRunes buy complete", clg)
wait(100)
uo.say("bye")
wait(200)
uo.playwav("piip1.wav" )
end if
printincolor("90 bserial= "+bserial,clb)
return bserial
end sub
########################################################
sub RunebookRecall(n)
var oldX=uo.getX()
var oldY=uo.getY()
var time
;ID=0x40239516 Type=0x0EFA
repeat
uo.Exec('warmode 0')
uo.UseObject('0x40239516')
wait(1000)
uo.LClick(135, n*15+55)
wait(500)
uo.LClick(135, n*15+55)
time=uo.Timer()
repeat
wait(500)
until oldX<>uo.getX() or oldY<>uo.getY() or uo.Life==0 or uo.InJournal('needs') or time+200<uo.Timer()
uo.DeleteJournal()
until oldX<>uo.getX() or oldY<>uo.getY()
end sub
##################################################
sub DropRegSunduk() ; перекладка руды в сундук
hiding()
if uo.waiting() then
uo.canceltarget()
endif
VAR a,Exit
VAR UnloadCont='0x4003205c' ; '0x40041342' ; АЙДИ сундука для руды
DIM Reg[9]
Reg[0]="0x0E34" ; blank
Reg[1]="0x0F8C" #SA
Reg[2]="0x0F86" #MR
Reg[3]="0x0F7B" #BM
Reg[4]="0x0F84" #GA
Reg[5]="0x0F85" #GI
Reg[6]="0x0F8D" #SS
Reg[7]="0x0F88" #NS
Reg[8]="0x0F7A" #BP
UO.SetReceivingContainer(UnloadCont)
wait(500)
For a=0 to 8
Exit=0
repeat
UO.FindType(Reg[a])
if UO.GetQuantity("finditem")>0 then
UO.Grab("0","finditem")
wait(1500)
checklag()
Else
Exit=1
endif
until Exit==1
Next
UO.UnSetReceivingContainer()
end sub
###################################################
sub buyVendor(VenName, buyList)
VAR vend, ven=VenName, i=401
var MyMoney
MyMoney=UO.Gold
uo.set("buydelay","4000")
UO.Buy(buyList,ven)
wait(4300)
uo.say("bye")
wait(200)
if MyMoney == UO.Gold then
printincolor("No items bought again. Go to the next point", clp)
uo.playwav("piip1.wav" )
else
uo.playwav("pip2.wav" )
end if
end sub
Sub CheckLag()
UO.DeleteJournal()
UO.Click("backpack")
repeat
Wait(300)
until UO.InJournal("backpack")
endsub
sub PrintInColor(text,color)
# PrintInColor("здесь текст",'цвет текста')
# красный - '38' или '0x0026' # темно-бирюзовый - '83' или '0x0053'
# оранжевый - '43' или '0x002B' # голубой - '89' или '0x0059'
# желтый - '53' или '0x0035' # синий - '3' или '0x0003'
# зеленый - '63' или '0x003F' # фиолетовый - '120' или '0x0078'
# '1088' - по умолчанию
# 1152 - бирюзовый 1151 - черный 1155 - фиолетовый 1156 - белый 1158 - кр 1161 - синий 1162 - темно зел 1166 ткр 1169 сз
# 2500 2524 - оранж 2517 кр 2567 малин 2566=0x0A06 белый
# 2998 - белый 3008 3221 3600 и выше - контур
UO.ConColor(color)
;UO.Exec('set quiet 0') # Показывать сообщения Injection.
UO.Print(text)
;UO.Exec('set quiet 1') # Не показывать сообщения Injection.
UO.ConColor('1088')
endsub
sub ChaserXY(X,Y)
VAR dx, dy, dxOld, dyOld, i
var cdist
;cdist=uo.getdistance(target)
i=0
While i<30
i=i+1
If not uo.dead() Then
dx=X-UO.GetX()
dy=Y-UO.GetY()
;If UO.GetDistance(Target)<3 Then
;return
;Endif
else
Return
Endif
if abs(dx)<1 and abs(dy)<1 then
return
end if
If dx<>0 AND dy<>0 Then
If dx>0 AND dy>0 Then
UO.Press(40) ; DownArrow
Endif
If dx>0 AND dy<0 Then
UO.Press(39) ; RightArrow
Endif
If dx<0 AND dy>0 Then
UO.Press(37) ; LeftArrow
Endif
If dx<0 AND dy<0 Then
UO.Press(38) ; UpArrow
Endif
Endif
If dx<>0 AND dy==0 Then
If dx>0 Then
UO.Press(34) ; PgDown
Endif
If dx<0 Then
UO.Press(36) ; Home key
Endif
Endif
If dx==0 AND dy<>0 Then
If dy>0 Then
UO.Press(35) ; End
Endif
If dy<0 Then
UO.Press(33) ; PgUp
Endif
Endif
dx=X-UO.GetX()
dy=Y-UO.GetY()
if abs(dx)<1 and abs(dy)<1 then
return
end if
wait (walkwait)
Wend
end sub
############################################################
Sub InStr(Source, subStr)
var n = len(subStr)
var j
if len(Source)>=len(subStr) then
for var i = 0 to len(Source)-n
j = 0
while (j < n) and (Source[i+j] == subStr[j])
j = j+1;
wend
if j == n then
return i
end if
next
else
end if
return -1
end sub
#####################################
sub abs(a)
Var b
If a<0 Then
b=-a
Else
b=a
endif
return b
endsub