Code: Select all
var fName= "C:\uo\inject\trees3.dat" ## - Путь к файлу в котором будут хранится координаты деревьев.
var TypeFood='0x097B' ## - Тип еды которую будем кушать.(сейчас фиштейки
var tKnife = '0x0F52' ; тип ножа, если он в руках - не придётся тыкать на него прицелом.
sub kindling()
var i, f
dim TreeX[500],TreeY[500],TreeT[500]
var flag,treeCount=0
UO.Exec('terminate Reconnector')
UO.Exec('exec Reconnector')
if UO.GetGraphic(UO.ObjAtLayer('Rhand')) == '0x0F51' then
uo.waittargetobject(UO.ObjAtLayer('Rhand'))
uo.AddObject('knife')
else
UO.Print('Мтякс... покажЪ нож...')
uo.AddObject('knife')
while uo.Targeting()
wait(100)
wend
end if
ToHide()
uo.Print('Посмотримс, что там у нас в файлике завалялось...')
f = file(fName)
f.open()
treeCount=safe call f.ReadNumber()
for i=1 to treeCount
TreeT[i]=safe call f.ReadNumber()
TreeX[i]=safe call f.ReadNumber()
TreeY[i]=safe call f.ReadNumber()
next
f.close()
Orfo(str(treeCount),'Значится пошукал я и нашел '+str(treeCount)+' дерев','',0)
wait(2000)
ToHide()
if treeCount<1 then
return
end if
uo.set('finddistance','3')
uo.FilterSpeech('on')
uo.FilterSpeech('add', 'What do you want to use this on?')
while not UO.Dead()
for i=1 to treeCount
if uo.skillval('Camping',1)==1000 then
uo.set('finddistance','14')
uo.FilterSpeech('off')
UO.CloseUO()
end if
uo.Print('Потопал к дереву №'+str(i)+': x='+str(TreeX[i])+' y='+str(TreeY[i]))
if GotoXY(TreeX[i],TreeY[i]) == 1 then
GetTree(str(TreeT[i]),str(TreeX[i]),str(TreeY[i]),str(uo.GetZ()))
Camping()
end if
next
ToEat()
wend
uo.set('finddistance','14')
uo.FilterSpeech('off')
UO.CloseUO()
end Sub
Sub GetTree(Type,X,Y,Z)
var lt
var Text2='There is no wood left to harvest'
var Text3="You can't"
var Text4='That is too far away.'
var Text5='Chopping the tree '
var Text6='You put'
UO.DeleteJournal()
while not UO.InJournal(Text2) and not UO.InJournal(Text3) and not UO.InJournal(Text4) and not UO.InJournal(Text5) and not UO.Dead()
ToHide()
CheckLag()
uo.WaitTargetTile(Type,X,Y,Z)
uo.UseObject('knife')
lt = UO.Timer()
while not UO.InJournal(Text2) and not UO.InJournal(Text3) and not UO.InJournal(Text4) and not UO.InJournal(Text5) and not UO.InJournal(Text6) and not UO.Dead() and lt+100 > UO.Timer()
wait(100)
wend
if lt+100 < UO.Timer() then
if uo.targeting() then
uo.canceltarget()
end if
UO.Print('Больное какое то дерево')
return
end if
wend
end Sub
sub MarckingLumbers()
var k, i
dim TreeX[500], TreeY[500],TreeT[500]
dim TreeTile[29]
var flag=0, treeCount=0, flag2=0
TreeTile[0]=3277
TreeTile[1]=3280
TreeTile[2]=3283
TreeTile[3]=3286
TreeTile[4]=3289
TreeTile[5]=3291
TreeTile[6]=3294
TreeTile[7]=3296
TreeTile[8]=3299
TreeTile[9]=3302
TreeTile[10]=3393
TreeTile[11]=3394
TreeTile[12]=3395
TreeTile[13]=3396
TreeTile[14]=3415
TreeTile[15]=3416
TreeTile[16]=3417
TreeTile[17]=3418
TreeTile[18]=3419
TreeTile[19]=3438
TreeTile[20]=3439
TreeTile[21]=3440
TreeTile[22]=3441
TreeTile[23]=3442
TreeTile[24]=3460
TreeTile[25]=3461
TreeTile[26]=3462
TreeTile[27]=3290
TreeTile[28]=3288
uo.FilterSpeech('on')
uo.FilterSpeech('add', 'Where do you want to use the')
uo.Print('Ты будешь смеятся, но мне нужна либо кирка, либо лопата...')
uo.AddObject('Pickaxe')
While uo.Targeting()
Wait (100)
Wend
uo.Print('Iwi derevja,tikaj na nih a ja budu proverjatj...')
UO.DeleteJournal()
while uo.Lasttile(1)<>uo.getX() and uo.Lasttile(2)<>uo.gety()
CheckLag()
uo.UseObject('Pickaxe')
if WaitForTryRock()==0 then
flag = 0
for k = 0 To 9
if uo.LastTile(0)==TreeTile[k]+1 then
flag = 2
end if
next
if flag == 0 then
for k = 0 To 28
if uo.LastTile(0)==TreeTile[k] then
flag = 1
end if
next
end if
if flag > 0 then
flag2 = 0
if treeCount > 0 Then
for i = 1 To treeCount
if TreeX[i]==uo.LastTile(1) and TreeY[i]==uo.LastTile(2) then
flag2 = 1
end if
next
end if
if flag2 == 0 then
treeCount = treeCount + 1
TreeX [treeCount] = uo.LastTile(1)
TreeY [treeCount] = uo.LastTile(2)
if flag == 1 then
TreeT [treeCount] = uo.LastTile(0)
else
TreeT [treeCount] = uo.LastTile(0) - 1
end if
uo.print('Надо же! В дерево попал!!! В это: x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2)))
Orfo(str(treeCount),'Всего '+str(treeCount)+' дерев',' наковырял',0)
else
uo.Print('Вот чукча!!! Ты мне енто дерево уже показывал!!!, давай что нибудь новенькое покажи...')
end if
else
UO.Print('похоже... но не дерево...')
end if
end if
wend
uo.Filterspeech('off')
if treeCount < 1 then
UO.Print('И чо ты мне мозги тут пудрил? Ни одного дерева же не нашёл!')
UO.Print('Ну ни чо в другой раз тебе больше повезёт :)')
return
end if
if treeCount < 100 then
uo.Print('И чо ты думаешь этого тебе хватит?!?!?')
else
uo.Print('Ну ты и хапуга... и глянь терпения то хватило...')
end if
wait(200)
uo.Print('Да не расстраивайся ты... я так шутю :)')
wait(200)
uo.Print('посмотрел я тут на досуге, что ты навыбирал...')
uo.Print('буду попробывать скинуть в файл...')
SaveToFile(treeCount,TreeX,TreeY,TreeT)
wait(500)
uo.Print('Всё! Типа скинул в файл: ' + fName)
wait(200)
uo.Print('Эё!!! Ты куда собрался? погодь я тебя ещё не отпустил, ща рубать пойдём...')
wait(700)
kindling()
end Sub
Sub WaitForTryRock()
var Text1="Try mining in rock."
var Text2="That is too far away."
var Text3="You can't see the target"
var Text4="You have no line of sight to that location"
var Text5="There is no ore here to mine."
var Text6='You loosen'
var Text7='You put'
var Text8='OOPS!!!'
var Text9='STOPPP'
while not UO.InJournal(Text1) and not UO.InJournal(Text2) and not UO.InJournal(Text3) and not UO.InJournal(Text4) and not UO.InJournal(Text5) and not UO.InJournal(Text6) and not UO.InJournal(Text7) and not UO.InJournal(Text8) and not UO.InJournal(Text9)
wait(50)
wend
if UO.InJournal(Text1) then
UO.Print('ща посмотрю куда ты там тыкнул...')
return 0
end if
if UO.InJournal(Text2) or UO.InJournal(Text3) or UO.InJournal(Text4) then
UO.Print('а чо поближе дерева не водятся?')
end if
if UO.InJournal(Text5) or UO.InJournal(Text6) or UO.InJournal(Text7) or UO.InJournal(Text8) then
UO.Print('Ты вроде подрова собирался??? Ну так и иди... лесом иди...')
end if
return 1
end Sub
Sub SaveToFile(treeCount,TreeX,TreeY,TreeT)
var s=0,i=0, f
f = file(fName)
f.open()
f.create()
s=safe call f.writeln(treeCount)
for i=1 to treeCount
s=safe call f.writeln(str(TreeT[i])+' '+str(TreeX[i])+' '+str(TreeY[i]))
next
f.close()
end Sub
Sub Orfo(sNum, fStr, lStr, Rod) ## Rod - 0/1; 0 - дерево, 1 - лог
var n=VAL(Right(sNum,1))
if n==0 then
if Rod == 0 then
UO.Print(fStr+'а'+lStr)
else
UO.Print(fStr+lStr)
end if
return
end if
if n<5 then
UO.Print(fStr+'а'+lStr)
return
end if
if Rod == 0 then
UO.Print(fStr+'ев'+lStr)
else
UO.Print(fStr+'ов'+lStr)
end if
end Sub
Sub Camping()
var mx=uo.getx(),my=uo.gety(),x,y
uo.DeleteJournal()
while uo.count('0x0DE1','0x0000') > 0
for x=mx-2 to mx+2
for y=my-2 to my+2
CheckLag()
if uo.count('0x0DE1','0x0000')==0 or uo.Dead() then
return
end if
uo.findtype('0x0DE1','0x0000','ground')
if UO.FindCount() == 0 then
uo.findtype('0x0DE1','0x0000','backpack')
uo.drop('1',str(x),str(y),str(uo.getz()),'finditem')
CheckLag()
end if
uo.findtype('0x0DE1','0x0000','ground')
if UO.FindCount() > 0 then
uo.deletejournal()
uo.useobject('finditem')
wait(1500)
if uo.injournal("You can't") then
uo.ignore('finditem')
end if
end if
next
next
wend
end Sub
Sub ToHide()
while not UO.Hidden()
CheckLag()
UO.WarMode(0)
UO.UseSkill('Hiding')
repeat
wait(200)
until UO.InJournal('You have hidden') OR UO.InJournal('seem to hide') OR UO.InJournal('preocopured') or UO.Dead()
wend
end Sub
Sub ToEat()
UO.DeleteJournal()
UO.FindType(TypeFood,'0x0000','backpack')
while UO.FindCount() > 0 and not uo.InJournal('too full') and not UO.Dead()
CheckLag()
uo.UseType(TypeFood,'0x0000')
while not uo.InJournal('full') and not uo.InJournal('stuffed') and not uo.InJournal('hungry') and not uo.InJournal('satiated') and not UO.Dead()
wait(100)
wend
UO.FindType(TypeFood,'0x0000','backpack')
wend
end Sub
Sub CheckLag()
if uo.Waiting()>0 then
uo.Exec('canceltarget')
end if
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(50)
until uo.InJournal('backpack') or UO.Dead()
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(20000) # WorldSave Protection
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.LDblClick(357,164)
UO.LClick(616,459)
Wait(3000)
WEnd
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
UO.Exec('terminate kindling')
wait(1000)
UO.Exec('exec kindling')
UO.TextOpen()
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
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
###################################################################################################
################################# тут ходилка #####################################################
###################################################################################################
Sub GotoXY(x,y)
VAR i
VAR dir,ldir,rdir,key,olddir
VAR dx,dy,Exit=0
VAR CacheLimit=9,CacheIndex="Text"
DIM CacheX[10], CacheY[10]
CacheX[0]="Test"
While Exit<>1
dx=x-UO.GetX()
dy=y-UO.GetY()
If dx<=2 AND dy<=2 Then
Exit=1
Endif
If dx<>0 AND dy<>0 Then
If dx>0 AND dy>0 Then ; GoSE
dir=3
ldir=2
rdir=4
key=40 ; DownArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==2 Then ; GoNE
dir=1
ldir=0
rdir=1
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=5
rdir=6
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx>0 AND dy<0 Then ; GoNE
dir=1
ldir=0
rdir=2
key=39 ; RightArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==0 Then ; GoWN
dir=7
ldir=6
rdir=7
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSE
dir=3
ldir=3
rdir=4
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx<0 AND dy>0 Then ; GoSW
dir=5
ldir=4
rdir=6
key=37 ; LeftArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==6 Then ; GoWN
dir=7
ldir=7
rdir=0
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSE
dir=3
ldir=2
rdir=3
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx<0 AND dy<0 Then ; GoWN
dir=7
ldir=6
rdir=0
key=38 ; UpArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==0 Then ; GoNE
dir=1
ldir=1
rdir=2
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=4
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
Endif
If dx<>0 AND dy==0 Then
If dx>0 Then ; GoE
dir=2
key=34 ; PgDown
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoSE
dir=3
ldir=3
rdir=4
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoNE
dir=1
ldir=1
rdir=0
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx<0 Then ; GoW
dir=6
key=36 ; Home key
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==0 Then ; GoWN
dir=7
ldir=7
rdir=0
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=4
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
Endif
If dx==0 AND dy<>0 Then
If dy>0 Then ; GoS
dir=4
key=35 ; End
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoSE
dir=3
ldir=2
rdir=3
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=6
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dy<0 Then ;GoN
dir=0
key=33 ; PgUp
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoNE
dir=1
ldir=1
rdir=2
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoWN
dir=7
ldir=7
rdir=6
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
Endif
Wend
return 1
end sub
Sub StepEdit(x,y,dir,key)
VAR walkwait=300
VAR ErrLevel=0
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
If x==UO.GetX() AND y==UO.GetY() Then
;zatik
ErrLevel=1
Endif
Endif
Return ErrLevel
end sub
Sub StepArrow(x,y,dir,ldir,rdir,key)
VAR walkwait=300
VAR ErrLevel=0
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir AND UO.GetDir()<>ldir AND UO.GetDir()<>rdir Then
CheckLag()
Endif
Endif
If UO.GetX()==x AND UO.GetY()==y Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
CheckLag()
If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
; zatik
ErrLevel=1
Endif
Endif
Endif
Return ErrLevel
end sub