Page 1 of 1

Помогите подправить скрипт пожалуйста

Posted: 2007-01-30 13:36:41
by The_best_miner

Code: Select all

#При работе должна быть "отжата" кнопка NumLock 
Var Pickaxe=0x0E85 # Pichaxe
Var Ore=0x19B9
Var Ingot=0x1BF2
Var Iron=0x0000
Var MoveDelay=150 # Промежуток между шагами 
Var MoveNumber=1   # Количество шагов при смене дислокации 
Var Ep=0.172 # Значение ширины угла хождения при определении направления. Если на пути встречаются сложные и широкие препятствия - увеличить. 0.172 - сбаланчированный. 
Var FileName='C:\Mining2.dat' # В каждой строке файла тайл дерева 

Sub Main() 
UO.SetGlobal('process','no')
repeat
if UO.GetGlobal('process')=='no' then
GoToTile(1920,369,0,False)
GoToTile(1918,374,0,False)
UO.DeleteJournal() 
UO.Exec('exec Lumb')
endIf
Wait(3000)
until (1==0) 
EndSub 

Sub Lumb()
Var Tl,T,X,Y,Z,srl
var wei
UO.SetGlobal('process','yes') 
Var F=File(FileName) 
F.Open() 
Beg:
DeleteJournal('no mine') 
Tl=safecall F.Readln() 
Tl=Trim(Tl) 
If Tl=='File read error' Then 
  GoTo Ext 
EndIf 
T=GetNumb(Tl,0) 
X=GetNumb(Tl,1) 
Y=GetNumb(Tl,2) 
Z=GetNumb(Tl,3) 
UO.Print('next mine') 
UO.Print('Tile '+Tl) 
GoToTile(X,Y,1,False) 
Repeat 
  uo.DeleteJournal()  
  UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z)) 
  While uo.Waiting()
    Emil()
     If UO.Dead() Then
     Ress()
     UO.WarMode( 0 ) 
     GoToTile(X,Y,1,false)
     UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z)) 
     Emil()
    endif
  WEND
repeat
Wait(1000)
If UO.Dead() Then
Ress()
UO.WarMode( 0 )
GoToTile(X,Y,1,False)
UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z)) 
Emil()
endif
#if uo.count(Ore)>170 then
wei = ( UO.Str * 4 ) - 50
if UO.Weight > wei then
GoToTile(1920,373,0,False)
GoToTile(1920,366,0,False)
GoToTile(1951,362,0,False)
GoToTile(1951,367,0,False)
Plav()
wait(1000)
Exist()
wait(1000)
GoToTile(1952,368,0,False)
GoToTile(1951,367,0,False)
GoToTile(X,Y,1,False)
UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z)) 
UO.UseObject(UO.ObjAtLayer('Rhand'))
endif
Until UO.InJournal("There is no ore here to mine.") or UO.InJournal("There is no ore here to mine")
Until UO.InJournal("There is no ore here to mine.") or UO.InJournal("There is no ore here to mine")
If UO.InJournal("There is no ore here to mine.") or UO.InJournal("There is no ore here to mine") then
Goto Beg
EndIf 
Ext: 
F.Close() 
UO.SetGlobal('process','no') 
EndSub 

###############################################################
#Определение что есть ж)
###############################################################
sub Exist()
#############Iron
If UO.Count(0x1BF2, 0x0000) > 0 Then
ProDrop(0x1BF2, 0x0000)
EndIF
############Rasty 
If UO.Count(0x1BF2,0x0750) > 0 Then
ProDrop(0x1BF2,0x0750)
EndIF
############Bronze
If UO.Count(0x1BF2, 0x0488) > 0 Then
  ProDrop(0x1BF2, 0x0488)
EndIF
############Old Copper
If UO.Count(0x1BF2, 0x0949) > 0 Then
  ProDrop(0x1BF2, 0x0949)
EndIF
############Dull Copper
If UO.Count(0x1BF2, 0x060A) > 0 Then
  ProDrop(0x1BF2, 0x060A)
EndIF
############Copper 
If UO.Count(0x1BF2, 0x0641) > 0 Then
  ProDrop(0x1BF2, 0x0641)
EndIF
############Pirit 
If UO.Count(0x1BF2, 0x09EE) > 0 Then
  ProDrop(0x1BF2, 0x09EE)
EndIF
############Silver
If UO.Count(0x1BF8, 0x0482) > 0 Then
  ProDrop(0x1BF8, 0x0482)
EndIF
############Gold
If UO.Count(0x1BEC, 0x0000) > 0 Then
  ProDrop(0x1BEC, 0x0000)
EndIF
############Shadow
If UO.Count(0x1BF2, 0x0770) > 0 Then
  ProDrop(0x1BF2, 0x0770)
EndIF
############Verit
If UO.Count(0x1BF2, 0x0947) > 0 Then
  ProDrop(0x1BF2, 0x0947)
EndIF
############Agapit
If UO.Count(0x1BF2, 0x0400) > 0 Then
  ProDrop(0x1BF2, 0x0400)
EndIF
############Blood
If UO.Count(0x1BF2, 0x04C2) > 0 Then
  ProDrop(0x1BF2, 0x04C2)
EndIF
############Azurit
If UO.Count(0x1BF2, 0x04DF) > 0 Then
  ProDrop(0x1BF2, 0x04DF)
EndIF
############Mithril ore
If UO.Count(0x19B9, 0x052D) > 0 Then
  ProDrop(0x19B9, 0x052D)
EndIF
############Valorite ore
If UO.Count(0x19B9, 0x0515) > 0 Then
  ProDrop(0x19B9, 0x0515)
EndIF
############Winter ore
If UO.Count(0x19B9, 0x0481) > 0 Then
  ProDrop(0x19B9, 0x0481)
EndIF
############Black Rock Ore
If UO.Count(0x19B9,0x0455) > 0 Then
  ProDrop(0x19B9,0x0455)
EndIF
############Ambers
If UO.Count(0x0F25,0x0000) > 0 Then
  ProDrop(0x0F25,0x0000)
EndIF
end sub
###############################################################
#Умный дроп
###############################################################
sub ProDrop(T,C)
UO.FindType(T,C,'backpack') 
Var b = UO.GetSerial("finditem")
UO.FindType(T,C,'ground') 
Var g = UO.GetSerial("finditem")
UO.MoveItem(b, "0", g,str(uo.getx(g)),str(uo.gety(g)),"0")
Wait(500)
If Uo.Count(T,C) > 0 Then 
Clear(T,C)
endIF
end sub
###############################################################
#Конец умного дропа
###############################################################
###############################################################
#Умный дроп 2
###############################################################
sub ProDrop2(T,C)
UO.FindType(T,C,'backpack') 
If C < 0 Then 
C = UO.GetColor('finditem')
endif
Var b = UO.GetSerial('finditem')
UO.FindType(T,C,'ground') 
Var g = UO.GetSerial('finditem')
UO.MoveItem(b, '0', g,str(uo.getx(g)),str(uo.gety(g)),'0')
Wait(500)
If Uo.Count(T,C) > 0 Then 
Clear(T,C)
endIF
end sub
###############################################################
#Конец умного дропа 2
###############################################################
Sub GetNumb(C,I) 
var J,T,K 
J=0 
K=1 
While K>0 
  J=J+1 
  If (Mid(C,J,1)==' ') Or (J>=Len(C)-1) Then 
   If I==0 Then 
    T=Val(Left(C,J)) 
   Else 
    T=GetNumb(Right(C,Len(C)-J-1),I-1) 
   EndIf 
   K=0 
  EndIf 
wend 
UO.Print(T) 
return T 
endsub

Sub Perp(Dir) 
Var D 
D=Dir 
If Dir==1 Then 
  D=3 
EndIf 
If Dir==2 Then 
  D=4 
EndIf 
If Dir==3 Then 
  D=-1 
EndIf 
If Dir==4 Then 
  D=-2 
EndIf 
If Dir==-1 Then 
  D=-3 
EndIf 
If Dir==-2 Then 
  D=-4 
EndIf 
If Dir==-3 Then 
  D=1 
EndIf 
If Dir==-4 Then 
  D=2 
EndIf 
RETURN D 
EndSub 

Sub MoveOnce(Dir,Del,Rev) 
Var Num 
If Rev Then 
  Num=MoveNumber+1 
Else 
  Num=MoveNumber 
EndIf 
If (Num>0) and (Dir<>0) Then 
  If Dir==1 Then 
   UO.Press(38,Num,Del) 
  EndIf 
  If Dir==2 Then 
   UO.Press(33,Num,Del) 
  EndIf 
  If Dir==3 Then 
   UO.Press(39,Num,Del) 
  EndIf 
  If Dir==4 Then 
   UO.Press(34,Num,Del) 
  EndIf 
  If Dir==-1 Then 
   UO.Press(40,Num-1,Del) 
  EndIf 
  If Dir==-2 Then 
   UO.Press(35,Num,Del) 
  EndIf 
  If Dir==-3 Then 
   UO.Press(37,Num,Del) 
  EndIf 
  If Dir==-4 Then 
   UO.Press(36,Num,Del) 
  EndIf 
  If Rev Then 
   If Dir<>-1 Then 
    UO.Press(40,1,Del) 
   EndIf 
  EndIf 
EndIf 
EndSub 

Sub GetQDir(x,y) 
Var J=0 
If X==0 Then 
  J=1 
Else 
  If (Y/X)<ep Then 
   J=3 
  Else 
   If (X/Y)<ep Then 
    J=1 
   Else 
    J=2 
   EndIf 
  EndIf 
EndIf 
RETURN J 
EndSub 

sub GetDir(myx,myy,ox,oy) 
Var I,J 
J=0 
Var X=ox-myx 
Var Y=oy-myy 
I=GetQDir(Abs(X),Abs(Y)) 
If X>=0 Then 
  If Y>=0 Then 
   If I==1 Then 
    J=-2 
   Else 
    If I==2 Then 
     J=-1 
    Else 
     If I==3 Then 
      J=4 
     EndIf 
    EndIf 
   EndIf 
  Else 
   If I==1 Then 
    J=2 
   Else 
    If I==2 Then 
     J=3 
    Else 
     If I==3 Then 
      J=4 
     EndIf 
    EndIf 
   EndIf 
  EndIf 
Else 
  If Y>=0 Then 
   If I==1 Then 
    J=-2 
   Else 
    If I==2 Then 
     J=-3 
    Else 
     If I==3 Then 
      J=-4 
     EndIf 
    EndIf 
   EndIf 
  Else 
   If I==1 Then 
    J=2 
   Else 
    If I==2 Then 
     J=1 
    Else 
     If I==3 Then 
      J=-4 
     EndIf 
    EndIf 
   EndIf 
  EndIf 
EndIf 
RETURN J 
endsub 

sub abs(a) 
Var b 
If a<0 Then 
  b=-a 
Else 
  b=a 
endif 
return b 
endsub 

Sub PermResend() 
Var Mn=4
Repeat 
 # UO.Resend() 
  Wait(MoveDelay*Mn) 
Until (1>2) 
EndSub 

sub max(A,B) 
Var C 
If A>B Then 
  C=A 
Else 
  C=B 
EndIf 
Return C 
EndSub 

sub GetDistance(X,Y) 
return max(abs(X-uo.getx()),abs(Y-uo.gety())) 
endsub 

sub GoToTile(OX,OY,N,S) 
var myx, myy, MD, J 
var Lx1 ,Ly1 
var Lx2 ,Ly2 
var Sx ,Sy 
var T 
var Des=N 
J=1 
MD=MoveDelay*1.5 
myx=uo.getx() 
myy=uo.gety() 
MoveOnce(GetDir(uo.getx(),uo.gety(),ox,oy),MD,False) 
Sx=0 
Sy=0 
Lx1=uo.getx()/2 
Ly1=uo.gety()/2 
Lx2=Lx1/2 
Ly2=Ly1/2 
T=UO.Timer() 
If (GetDistance(ox,oy)<>N) or ((not S) and GetDistance(ox,oy)>N) Then 
  UO.Exec('exec PermResend') 
EndIf 
While ((GetDistance(ox,oy)<>N) or ((not S) and GetDistance(ox,oy)>N)) and (OX>=0) and (OY>=0) 
  If ((UO.Timer()-T)*15>MoveDelay) Then 
   T=UO.Timer() 
#   UO.Print(Str(uo.getx())+' '+Str(uo.gety())+' '+Str(ox)+' '+Str(oy)+' '+Str(GetDir(uo.getx(),uo.gety(),ox,oy))+' '+Str(T)) 
   Lx2=Lx1 
   Ly2=Ly1 
   Lx1=myx 
   Ly1=myy 
   myx=uo.getx() 
   myy=uo.gety() 
  endIf 
  MD=MoveDelay 
  If ((OX-uo.getx())*(OX-uo.getx())+(OY-uo.gety())*(OY-uo.gety())>0) Then 
   MD=MD*3/GetDistance(ox,oy) 
  EndIf 
  wait(MD) 
  If GetDistance(OX,OY)>Des Then 
   MoveOnce(GetDir(uo.GetX(),uo.GetY(),ox,oy),MD,False) 
  Else 
   If S Then 
    If GetDistance(OX,OY)<Des Then 
     If GetDistance(OX,OY)<>0 Then 
      MoveOnce(GetDir(ox,oy,uo.GetX(),uo.GetY()),MD,False) 
     Else 
      MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD,False) 
     EndIf 
    EndIf 
   EndIf 
  EndIf 
  If GetDistance(OX,OY)<>Des Then 
   If (Lx2==uo.getx()) and (Ly2==uo.gety()) Then 
    If (Sx<>uo.getx()) or (Sy<>uo.gety()) Then 
     J=1 
    EndIf 
    J=J+1 
    UO.Resend() 
    Sx = uo.getx() 
    Sy = uo.gety() 
    Stun(ox,oy,J) 
   EndIf 
  EndIf 
Wend 
UO.Exec('terminate PermResend') 
endsub 

Sub Stun(X,Y,N) 
Var I 
Var myx 
Var myy 
myx = uo.getx() 
myy = uo.gety() 
For I=1 to N 
  MoveOnce(perp(GetDir(myx,myy,x,y)),MoveDelay,False) 
Next 
Wait(MoveDelay) 
UO.Resend() 
If (myx==uo.getx()) and (myy==uo.gety()) Then 
  For I=1 to N 
   MoveOnce(-perp(GetDir(myx,myy,x,y)),MoveDelay,False) 
  Next 
  Wait(MoveDelay) 
  UO.Resend() 
EndIf 
If (myx==uo.getx()) and (myy==uo.gety()) Then 
  For I=1 to N 
   MoveOnce(-GetDir(myx,myy,x,y),MoveDelay,False) 
  Next 
  Wait(MoveDelay) 
  Stun(x,y,N) 
EndIf    
EndSub 

Sub DeleteJournal(What) 
Var T,J 
J=False 
If UO.InJournal(What) Then 
  J=True 
  UO.DeleteJournal() 
EndIf 
RETURN J 
EndSub 

sub Plav()
UO.Set('finddistance','2')
UO.FindType(0x0FB1,-1,'ground')
If UO.FindCount() <> 0 Then
repeat
UO.FindType(0x19B9)
IF UO.FindCount() > 0 Then
 If UO.GetColor('finditem') == '0x0455' Then #BlackRock
 ProDrop(0x19B9,0x0455)
 else 
 If UO.GetColor('finditem') == '0x0515' Then #Vailorite
 ProDrop(0x19B9,0x0515)
 else
 If UO.GetColor('finditem') == '0x052D' Then #Mifril
 ProDrop(0x19B9,0x052D)
 else
 If UO.GetColor('finditem') == '0x0481' Then #Winter
 ProDrop(0x19B9,0x0481)
 else
  If UO.GetColor('finditem') == '0x04C2' Then #BloodRock
 ProDrop(0x19B9,0x04C2)
 else
   If UO.GetColor('finditem') == '0x04DF' Then #Azurite
 ProDrop(0x19B9,0x04DF)
 else
    If UO.GetColor('finditem') == '0x0947' Then #Verite
 ProDrop(0x19B9,0x0947)
 else   
    If UO.GetColor('finditem') == '0x0400' Then #Agapite
 ProDrop(0x19B9,0x0400) 
 else
  UO.UseObject('finditem')
 wait(1200)
 end If
 end If
 end If
 end If
 end If
 end If
 end If
 end If
EndIf
until UO.FindCount() == 0
UO.Print("-=-= END =-=-")
else
UO.Print("Forge not found")
endIf
end sub

sub count()
UO.Print(str(UO.Count(ore)))
end sub

Sub BS()
#0x1B7B - Metal shield
#0x13BF - chainmail tunic
#0x1415 - грудина 
 while true
   UO.FindType(0x1415, -1,'ground')
   wait(2000)
   If UO.FindCount() > 0 Then
     uo.waittargetobject('finditem')
     Uo.UseType(0x0FBB)
     wait(5000)
   endif 
 WEND
end sub

sub Emil()
IF (UO.GetGraphic(UO.ObjAtLayer("Rhand"))) <> '0x0E85' Then
 If UO.Count('0x0E85') > 0 Then
  UO.UseType('0x0E85')
 endif
else
 UO.UseObject(UO.ObjAtLayer('Rhand'))
EndIf
wait(2000)
end sub

sub Clear(T,C)
Var Count = UO.Count(T,C)
UO.FindType(T,C,'backpack') 
Var b = UO.GetSerial("finditem")
UO.FindType(T,C,'ground') 
Var g = UO.GetSerial("finditem")
Wait(500)
UO.MoveItem(b, "0", g,str(uo.getx(g)),str(uo.gety(g)),"0")
Wait(500)
If UO.Count(T,C) == Count Then
 If (UO.Count('finditem')+Count) < 60000 Then
  uo.ignore('finditem')
  ProDrop(T,C)
endIf
endIf
end sub

sub Ress()
While UO.Dead()
wait(1000)
UO.WarMode( 1 ) 
WEND
end sub

sub Count()
#UO.Print('Iron : '+Str(UO.Count(0x19B9, 0x0000)))
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Bronze : '+Str(UO.Count(0x19B9, 0x0488)))
#UO.Print('Rasty : '+Str(UO.Count(0x19B9, 0x0750)))
#UO.Print('-=-=-=-=-=-=-=-')
#wait(4000)
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Old Copper : '+Str(UO.Count(0x19B9, 0x0949)))
#UO.Print('Dull Copper : '+Str(UO.Count(0x19B9, 0x060A)))
#UO.Print('Copper : '+Str(UO.Count(0x19B9, 0x0641)))
#UO.Print('-=-=-=-=-=-=-=-')
#wait(4000)
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Pirit : '+Str(UO.Count(0x19B9, 0x09EE)))
#UO.Print('Silver : '+Str(UO.Count(0x19B9, 0x0482)))
#UO.Print('Shadow : '+Str(UO.Count(0x19B9, 0x0770)))
#UO.Print('Gold : '+Str(UO.Count(0x19B9, 0x04AA)))
#UO.Print('-=-=-=-=-=-=-=-')
#wait(4000)
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Verit : '+Str(UO.Count(0x19B9, 0x0947)))
#UO.Print('Agapit : '+Str(UO.Count(0x19B9, 0x0400)))
#UO.Print('Blood : '+Str(UO.Count(0x19B9, 0x04C2)))
#UO.Print('Azurit : '+Str(UO.Count(0x19B9, 0x04DF)))
#UO.Print('-=-=-=-=-=-=-=-')
Wait(4000)
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Mithril : '+Str(UO.Count(0x19B9, 0x052D)))
#UO.Print('Valorite : '+Str(UO.Count(0x19B9, 0x0515)))
#UO.Print('Winter : '+Str(UO.Count(0x19B9, 0x0481)))
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('BlackRock : '+Str(UO.Count(0x19B9, 0x0455)))
#UO.Print('-=-=-=-=-=-=-=-')
end sub

sub play()
Var Co = 0
While true
 If UO.Life < UO.Str then
   If Co < 10 then
    uo.playwav("D:\cap000.wav")
    wait(1500)
    Co = Co + 1
   else  
    wait(60000)
    Co = 0
   endif
 end if
wait(1000)
wend

sub Lot()
repeat
UO.FindType(0x19B9,-1,'ground')
IF UO.FindCount() > 0 Then
 Uo.Grab(0,'finditem')
 wait(1000)
end if
until UO.FindCount() == 0
end sub
Вот весь срипт. в чем все дело, он работает у определной копалки, для которой написан. :idea:
А когда я его перенастраиваю под свою копалку он не может дойти, перенастраиваю меняю маршрут...он начинает глючить... :(

Posted: 2007-01-30 13:45:25
by The_best_miner
Скрипт предназначен для...идет в шахту (с этим проблема) копает в шахте набирает вес идет обратно к дому! и выкладывает руду в руду уже прилоченную к дому....

Posted: 2007-01-30 16:21:28
by Nmy

Code: Select all

GoToTile(1920,369,0,False)
GoToTile(1918,374,0,False) 
идёт в шахту

Code: Select all

Var F=File(FileName)
F.Open() 
мининг по тайлам каторые прописаны в фаиле

Code: Select all

GoToTile(1920,373,0,False)
GoToTile(1920,366,0,False)
GoToTile(1951,362,0,False)
GoToTile(1951,367,0,False) 
идёт разгрузится

Code: Select all

GoToTile(1952,368,0,False)
GoToTile(1951,367,0,False)
GoToTile(X,Y,1,False) 
идёт обратно и к точке копки

там копка идёт только в 1 тайл под себя ?

Posted: 2007-01-30 19:12:22
by The_best_miner
да под себя, но вот в чем дело. чтобы дойти до шахты мне нужно 7 точек. а тут всего 3. И у меня он не доходит, как вставляю свои точки он так начинает бегать туда сюда что ужас...

Posted: 2007-01-30 19:25:00
by Nmy
The_best_miner wrote:да под себя, но вот в чем дело. чтобы дойти до шахты мне нужно 7 точек. а тут всего 3. И у меня он не доходит, как вставляю свои точки он так начинает бегать туда сюда что ужас...
прописать ты можеш 1 строку

Code: Select all

GoToTile(1920,369,0,False)
или 10

Code: Select all

GoToTile(1920,369,0,False)
GoToTile(1920,369,0,False)
GoToTile(1920,369,0,False)
GoToTile(1920,369,0,False)
GoToTile(1920,369,0,False)
GoToTile(1920,369,0,False)
GoToTile(1920,369,0,False)
GoToTile(1920,369,0,False)
GoToTile(1920,369,0,False)
GoToTile(1920,369,0,False)
суть скрипта нетеряется - и ты должен прописать столько- сколько надо чтоб шол правильно!

ищи скрипт каторый собирает в файл тайлы и все- пропишы всю шахту и будет у тебя мининг

надеюсь больше небудеш постить

Posted: 2007-01-30 19:41:20
by The_best_miner
так вот я и прописываю свои 8 строк...но он не идет а начинает прыгать....

Code: Select all

GoToTile(2327,889,0,False) 
GoToTile(2227,886,0,False) 
GoToTile(2327,885,0,False) 
GoToTile(2327,871,0,False) 
GoToTile(2354,871,0,False) 
GoToTile(2358,855,0,False) 
GoToTile(2363,849,0,False) 
GoToTile(2356,839,0,False)  
вот так я меняю...чтобы дойти до шахты а он начинает дергаться...
Я так понимая перва строка это первая точку куда он идет, вторая страка это вторая точка куда он идет и тд. Не каждый же шаг прописывать?

Posted: 2007-01-30 20:38:11
by Nmy
проверь нечего ли немешает, может у тебя в инже забиндина кнопка каторую инжа использует для годьбы
End, Home, Page Up/Down, стрелки

Posted: 2007-01-31 01:44:24
by The_best_miner
Настроил!!!!!!!!1 :D :D :D :D :D :) :) :)
Все работает....ах да кстати он не только под собой копает а еще ходит и вокруг себя копает если нету руды может рандомно отойти и начать капать...