Code: Select all
sub Lumber()
var i=0,j=0,k=0,r=0,q=0,ii,jj, a=0
var TopX=324,TopY=65
dim TreeX[300], TreeY[300],TreeT[300]
dim TreeTile[300]
var flag=0,treeCount=0,clicks=0,flag2=0
var f=file("C:\trees3.dat")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
var Area=4 ## Ðàçìåð îáðàáàòûâàåìîé òåððèòîðèè, ìîæíî ìåíÿòü îò 1 äî 4.
var TryHiding=1 ## 1 - ïåðåä òåì êàê ðóáèòü äåðåâî, áóäåò ïûòàòüñÿ óéòè â õàéä, 0 - íå áóäåò
var TryRecall=1 ## 1 - ïîñëå òîãî êàê ñîáåðåò LogsQty ëîãîâ, áóäåò ïûòàòüñÿ ðåêîëèòüñÿ äîìîé, # ñêëàäûâàòü ëîãè íà ïîë è ðåêîëèòüñÿ îáðàòíî (íóæíî âûáðàòü äâå ðóíû), 0 - íå áóäåò.
var LogsQty=555 ## Êîëè÷åñòâî ëîãîâ, äîáûâ êîòîðîå íàäî ðåêîëèòüñÿ äîìîé.
var RecallFromScroll=0 ## 1 - ñ ðóí, 0 - èç ðóíáóêà
var GetFromFile=1 ## 1 - êîîðäèíàòû äåðåâüåâ áóäóò ñ÷èòûâàòñÿ èç ôàéëà, 0 - ñîáèðàòñÿ èç êëèåíòà
var Const=2 ## âî ñêîëüêî ðàç óâåëè÷èâàòü ðàçìåð òåñòîâîé òåððèòîðèè (êîýôôèöèåíò)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#Ãðàôèêà äåðåâüåâ
TreeTile[0]=3283
TreeTile[1]=3277
TreeTile[2]=3293
TreeTile[3]=3296
TreeTile[4]=3302
TreeTile[5]=3299
TreeTile[6]=3290
TreeTile[7]=3288
TreeTile[8]=3286
TreeTile[9]=3280
uo.exec("filterspeech on")
uo.exec("filterspeech add 'Where do you want to use the pickaxe?'")
uo.print('aXE: ')
uo.exec('addobject axe')
wait(5000)
if TryRecall==1 then
uo.print('rUNBOOK' )
uo.exec('addobject Runebook')
wait(5000)
if RecallFromScroll==1 then
uo.print('Âûáåðè ðóíó äîìîé: ')
uo.exec('addobject runeHome')
wait(5000)
uo.print('Âûáåðè ðóíó â ëåñ: ')
uo.exec('addobject runeLumber')
wait(5000)
end if
end if
#Çàãðóæàåì êîîðäèíàòû èç ôàéëà
if GetFromFile==1 then
uo.print('Çàãðóæàåì êîîðäèíàòû èç ôàéëà...')
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()
else
#Ñîáèðàåì êîîðäèíàòû èç êëèåíòà
uo.print('Ñîáèðàåì êîîðäèíàòû äåðåâüåâ â îêðóãå...')
for a=1 to Const
for q=1 to Area
if q==2 then
gotoxy(uo.getx()+20,uo.gety()-10)
end if
if q==3 then
gotoxy(uo.getx(),uo.gety()+20)
end if
if q==4 then
gotoxy(uo.getx()-20,uo.gety())
end if
for r=0 to 3
if r==1 then
gotoxy(uo.getx()+10,uo.gety())
end if
if r==2 then
gotoxy(uo.getx(),uo.gety()+10)
end if
if r==3 then
gotoxy(uo.getx()-10,uo.gety())
end if
for j=0 to 8
for i=0 to 8
clicks=0
flag=0
uo.DeleteJournal()
#Êëèêàåì íà òàéë
uo.usetype('0x09A8')
waitForTarget()
uo.DeleteJournal()
uo.LClick(TopX+i*21-j*21,TopY+i*21+j*21)
WaitForTryRock()
#Ïðîâåðÿåì äåðåâî ëè ýòî
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 9
if uo.LastTile(0)==TreeTile[k] then
flag=1
end if
next
end if
#Êëèêíóëè íà ñòâîë
if flag==1 then
flag2=0
if treeCount>0 then
for ii=1 to treeCount
if treeX[ii]==uo.lastTile(1) AND treeY[ii]==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)
TreeT[treeCount]=uo.LastTile(0)
uo.print('Íàéäåíî äåðåâî: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2)))
end if
end if
#Êëèêíóëè ïî ëèñòâå
if flag==2 then
flag2=0
if treeCount>0 then
for ii=1 to treeCount
if treeX[ii]==uo.lastTile(1) AND treeY[ii]==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)
TreeT[treeCount]=uo.LastTile(0)-1
uo.print('Íàéäåíî äåðåâî: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2)))
end if
end if
next
next
next
next
next
uo.exec("filterspeech off")
uo.print('Àíàëèç çàêîí÷åí, êîîðäèíàòû äåðåâüåâ çàïèñàíû â ôàéë C:\trees.dat')
SaveToFile(treeCount,TreeX,TreeY,TreeT)
end if
uo.print('Äåðåâüåâ íàéäåíî: '+str(treeCount))
wait(2000)
#Õîäèì ïî ñîáðàííûì êîîðäèíàòàì
while 1==1
if treeCount>0 then
for i=1 to treeCount
if TryRecall==1 AND uo.Count('ZLK')>=LogsQty then
ToRecall(RecallFromScroll)
end if
uo.print('Èäåì ê äåðåâó '+str(i)+': x='+str(treex[i])+' y='+str(treey[i]))
flag=gotoxy(treex[i],treey[i])
if flag==1 then
if TryHiding==1 then
ToHide()
end if
GetTree(str(treeT[i]),str(treeX[i]),str(TreeY[i]),str(uo.getz()))
end if
next
end if
wend
end sub
sub GetTree(type,x,y,z)
var i
uo.print('Íà÷èíàåì ðóáêó äåðåâà...')
for i=0 to 30
if uo.warmode()==1 then
return 0
end if
wait(200)
uo.deletejournal()
uo.waittargettile(type,x,y,z)
uo.useobject('axe')
if WaitForChange()==1 then
return 1
end if
next
return 0
end sub
sub ToRecall(FromScroll)
RecallToHome(FromScroll)
wait(1000)
Unload()
wait(1000)
RecallToLumber(FromScroll)
end sub
sub RecallToHome(FromScroll)
var i
uo.print('Ðåêîëèìñÿ äîìîé...')
for i=1 to 10
uo.deletejournal()
if FromScroll==0 then
RecallRunebookhome()
else
uo.waittargetobject('runeHome')
uo.cast('Recall')
end if
if WaitForRecall()==1 then
return 1
end if
next
return 0
end sub
sub RecallToLumber(FromScroll)
var i
uo.print('Ðåêîëèìñÿ îáðàòíî...')
for i=1 to 10
uo.deletejournal()
if FromScroll==0 then
RecallRunebookles()
else
uo.waittargetobject('runeLumber')
uo.cast('Recall')
end if
if waitForRecall()==1 then
return 1
end if
next
return 0
end sub
sub ToHide()
var i
uo.print('Ïûòàåìñÿ óéòè â õàéä...')
for i=1 to 15
uo.deletejournal()
uo.useskill('Hiding')
if WaitForHide()==1 then
return 1
end if
next
return 0
end sub
sub WaitForRecall()
var Text1=uo.getname()+": The spell fizzles."
var mess='',lastX=uo.getX(),lastY=uo.getY()
for var i=0 to 400
mess=uo.journal(0)
if uo.Journal(0)==Text1 then
return 0
end if
if uo.getX()<>lastX OR uo.getY()<>LastY then
return 1
end if
wait(50)
next
return 0
end sub
sub WaitForHide()
var Text1=uo.getname()+": You have hidden yourself well"
var Text2=uo.getname()+": You can't seem to hide here."
var mess
for var i=0 to 200
mess=uo.journal(0)
if uo.Journal(0)==Text1 then
return 1
end if
if uo.Journal(0)==Text2 then
return 0
end if
wait(50)
next
return 0
end sub
sub WaitForChange()
var Text1=uo.getname()+': You hack at the tree for a while, but fail to produce any useable wood.'
var Text2='There are no logs here to chop.'
var Text3="You can't reach this."
var mess
for var i=0 to 200
mess=uo.journal(0)
if uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 then
return 1
end if
if uo.Journal(0)==Text1 then
return 0
end if
if mess[0]=='Y' AND mess[1]=='o' AND mess[2]=='u' AND mess[4]=='p' AND mess[5]=='u' AND mess[6]=='t' then
return 0
end if
wait(50)
next
return 0
end sub
sub WaitForTryRock()
var Text1="That is too far away."
var Text2="Try mining in rock."
var Text3="There is no ore here to mine."
var Text4="You have no line of sight to that location"
var Text5="You can't see the target"
for var i=0 to 50
if uo.Journal(0)==Text1 OR uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 OR uo.Journal(0)==Text4 OR uo.Journal(0)==Text5 then
return 1
end if
wait(200)
next
return 0
end sub
sub WaitForTarget()
for var i=0 to 50
if uo.Targeting()==1 then
return 1
end if
wait(200)
next
return 0
end sub
sub WaitForChangeXY(myX,myY,lastX,lastY)
for var i=1 to 50
if lastX<>myX OR lastY<>myY then
return 1
end if
wait(200)
next
return 0
end sub
sub gotoXY(x,y)
var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0
for i=1 to 60
MyX=uo.getX();
MyY=uo.getY();
if LastX==MyX AND LastY==MyY then
halt=halt+1
else
halt=0
end if
if halt>=10 then
if uo.GetDir()==1 then
for z=0 to 8
uo.press(40)
next
end if
if uo.GetDir()==3 then
for z=0 to 8
uo.press(37)
next
end if
if uo.GetDir()==5 then
for z=0 to 8
uo.press(38)
next
end if
if uo.GetDir()==7 then
for z=0 to 8
uo.press(39)
next
end if
halt=15
end if
if abs(x-myX)<=1 AND abs(y-myY)<=2 then
return 1
end if
if x<=MyX then
if y<=MyY then
for z=0 to 3
uo.press(38)
next
else
for z=0 to 3
uo.press(37)
next
end if
else
if y<=MyY then
for z=0 to 3
uo.press(39)
next
else
for z=0 to 3
uo.press(40)
next
end if
end if
lastX=myX
lastY=myY
wait(200)
next
return 0
end sub
sub abs(num)
if num>=0 then
return num
else
return num*(-1)
end if
end sub
sub SaveToFile(TreeCount,TreeX,TreeY,TreeT)
var f=file("C:\trees3.dat")
var s=0,i=0
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 main()
Lumber()
end sub
sub Unload()
var UnloadCont='0x40125B73' #àéäè ñåéôà
ToHide()
VAR Exit, i
DIM Ore[5]
Ore[0]=0x1bdd
Ore[1]=0x1bdd
Ore[2]=0x1bdd
Ore[3]=0x1bdd
UO.SetReceivingContainer(UnloadCont) ; storecontainer
wait(500)
For i=0 to 3
Exit=0
repeat
UO.FindType(Ore[i])
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
CheckLag()
wait(1500)
Else
Exit=1
endif
until Exit==1
Next
UO.UnSetReceivingContainer()
end sub
sub CheckLag()
UO.DeleteJournal()
UO.Click('backpack')
repeat
wait(500)
until UO.InJournal('backpack')
end sub
sub RecallRunebookhome()
ToHide()
UO.UseObject('Runebook')
wait(500)
UO.LClick(136,70)
wait(1000)
end sub
sub RecallRunebookles()
ToHide()
Uo.UseObject('Runebook')
wait(500)
UO.LClick(136,160)
wait(1000)
end sub
Привет всем, вот играю на DRW и пользуюсь таким скриптом на ламбер. Скрипт старый, но хороший. И вобщем то нет проблем, но хотелось бы, что бы в случае появления элема, чар просто останавливался и продолжал рубить дальше после определённой задержке




