Мининг в ручную

Anything and all.

Moderators: Murderator+, Murderator

m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Мининг в ручную

Post by m3gamen »

Люди добрые помогите пожалуйста. Мне нужен облегчающий скрипт для копки вручную. Суть его такова что первый раз я копаю вручную а потом запускаю этот скрипт с хоткея и он докапывает всю руду в этом тайле, как докапает юзает кирку, чтобы появился прицел. Дело в том, что у меня аналогичный скрипт на пилоте был, но на моем шарде он не пашет изза несовместимости клиента с пилотом. Я набросал скрипт, но он вешает клиент кучей ошибок, прошу подправьте его плз.

sub dig()
VAR ms1 = "nothing"
VAR ms2 = "loosen"
VAR ms3 = "put"

UO.DeleteJournal()
UO.press(113) ;lastobjec waitfortarget lasttarget
repeat
wait(100)
until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3)
if UO.InJournal(ms2) OR UO.InJournal(ms3) then
UO.press(113)
repeat
wait(100)
until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3)
else
uo.press(112) ; lastobject
endif
endsub
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Re: Мининг в ручную

Post by Savage »

На F12 висит клиент макро lastobject, waitfortarget, lasttarget

Code: Select all

sub drocher()
   VAR ToolType="0x0E86"      ; topor = picaxe

   Repeat
      CheckLag()

;      UO.WaitTargetTile('lasttile')
;      UO.WaitTargetTile('0',STR(UO.GetX()),STR(UO.GetY()+3),'251')

;      UO.UseType(ToolType)
      UO.Press(123)
      Repeat
         wait(200)
      Until UO.InJournal('put|fail|not|hack|loosen|There')
   Until UO.InJournal('There')

   UO.UseType(ToolType)
   uo.print("!!!!")
end sub
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

Спасибо большое, но скрипт также ведет себя - во вкладке скрипт появляется куча новых один за другим летят ошибки и крашит уо. Inject 702.11 PaWn, client 5.0.9. Нечего неподелать наверное?
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Мининг в ручную

Post by Mirage »

Savage UO.DeleteJournal() забыл перед 1 repeat вставить ;)
Или надеялся что у автора делка в чеклаге вставлена.


PS чисто любопытство - зачем такая сложная механика? Почему нельзя просто хоткей нажать и выкопать все? Типо экономим конду на кирке? :)
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

Дело в том, что у меня неполучилось адаптировать скрипт на мининг вокруг себя под мой шард, хотя перепробовал я много разных, по какойто причине они все работают криво. После того как капнет один раз в тайле переключается на следующий тайл, как будто пофиг на сообщения журнала ему. Я в скриптах слабо шарю, как вы наверное уже успели догодаться, но подозреваю что дело в том, что во всех скриптах используется UO.Waittargettile("1339", str(i), str(j),"0"). А тайл прописывается определеный в данном случае 1339. А на моем серваке все разные тайлы, смотрел через ,infotile и 1340 есть и 1343 и 1338. Так, что приходиться заморачиваться в ручную))))
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

sub minround()
VAR Kirka = '0x0E85' ; Òèï Êèðêè
VAR MaxVes = 450 ; Ìàêñèìàëüíûé âåñ, ïîäûìàåìûé ÷àðîì ìèíóñ 10-15 ñòîóíîâ
VAR TileNum = '1339' ; Òàéë ïîëà ïåùåðû (íàèáîëåå ðàñïðîñòðàíåííûé òèï)
VAR x, y, t, k
VAR MaxTime = 100 ; èçìåðÿåòñÿ â 1/10 ñåê.
VAR ms1 = "There is nothing"
VAR ms2 = "You can't use"
VAR ms3 = "You put the"
VAR ms4 = "You loosen"
VAR ms5 = "You are too far away"
VAR ms6 = "Try mining in rock"
VAR ms7 = "You can't see that"
for y=-1 to 1
for x=-1 to 1

k = 0
repeat
UO.DeleteJournal()
t = UO.Timer()
k = k + 1
UO.CancelTarget()
wait(300)
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
UO.UseType( Kirka )
repeat
wait(300)
until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR ((t + MaxTime) < UO.Timer())
If UO.Weight > MaxVes Then
UO.Print(" Overweight!" )
return
Endif
until ( NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR (k > 10) )
next
next
endsub


Вот один из скриптов копки вокруг, найденных тут некопает нефига
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Re: Мининг в ручную

Post by Savage »

Mirage wrote:Savage UO.DeleteJournal() забыл перед 1 repeat вставить ;)
Или надеялся что у автора делка в чеклаге вставлена.


PS чисто любопытство - зачем такая сложная механика? Почему нельзя просто хоткей нажать и выкопать все? Типо экономим конду на кирке? :)

Хоткей прийдётся долбить пока всё не добудешь. При низком уровне скила это занятие по времени может достигать получаса.
Действительно у меня в чеклаге делжурнал.
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

Скила то как раз у меня гм, добавил deletejoutnal заработало все ок. Спасибо. Насчет мининга вокруг себя подскажите, почему может не работать? :)
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Re: Мининг в ручную

Post by Savage »

А ты часом не на ранке играешь? Попробуй номер тайла ставить 0.
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

56 сфера клиент 5.0.9
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

sub minround()
VAR Kirka = '0x0E85' ;
VAR MaxVes = 450 ;
VAR TileNum = '0' ; !Изменил на ноль!
VAR x, y, t, k
VAR MaxTime = 100
VAR ms1 = "There is nothing"
VAR ms2 = "You can't use"
VAR ms3 = "You put the"
VAR ms4 = "You loosen"
VAR ms5 = "You are too far away"
VAR ms6 = "Try mining in rock"
VAR ms7 = "You can't see that"
for y=-1 to 1
for x=-1 to 1

k = 0
repeat
UO.DeleteJournal()
t = UO.Timer()
k = k + 1
UO.CancelTarget()
wait(300)
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
UO.UseType( Kirka )
repeat
wait(300)
until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR ((t + MaxTime) < UO.Timer())
If UO.Weight > MaxVes Then
UO.Print(" Overweight!" )
return
Endif
until ( NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR (k > 10) )
next
next
endsub


Изменил на ноль непомогло при запуске скрипты в уо выдает сообщение You cant see the target. И даже копать не начинает :/
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Re: Мининг в ручную

Post by Savage »

Тогда посмотри на этот код. Тут я получаю номер тайла через приватгеттайл. Вообщем запускаешь дроу, если нарисует шахту то будет работать. Если нет, то меняем инжу, убираем патчи с вердаты.

Code: Select all

sub draw() 
var x,y,s
uo.textclose()
uo.textclear()
for y=1426 to 1461
s=""
for x=346 to 389
if uo.privategettile(x,y,-1,1330,1360) then
if uo.privategettile(x,y,-1,2272,2281) OR uo.privategettile(x,y,-1,6003,6012) then
 s=s+"+"
else
 s=s+"#"
end if
else
 s=s+"_"
end if
next
uo.textprint(s)
next
uo.textopen()
end sub


sub test()
UO.Print(STR(UO.PrivateGetTile(375,1425,-1,1358,1358)))
end sub



###############################################################
#===---==---==---==---= TURBO Mining =---==---==---==---==---=#
#               Nova Shard: http://nova-uo.ru/                #
#           Scripted by Savage (c) 2008 ICQ:33336141          #
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
# Bind on NUM ENTER or other key: exec PausedSwitch           #
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
# To start script use ",exec mn" command from client window   #
###############################################################

sub tt()
var nn
nn=UO.Timer()
while true
UO.Print(STR(UO.Timer()-nn))
wait(500)
wend
end sub


sub Arm()
   While UO.ObjAtLayer('Lhand')==''
      UO.Equipt('Lhand','0x1B78')
      wait(700)
   Wend
   While UO.ObjAtLayer('Rhand')=='' OR UO.GetGraphic(UO.ObjAtLayer('Rhand'))=='0x0E86'
      UO.Equipt('Rhand','0x1441')
      wait(700)
   Wend
end sub


sub MN()
   VAR i
   DIM X[12]
   DIM Y[12]

   UO.SetGlobal('PausedScript','Off')
;   UO.Exec(Alarm())
   X[0]=387
   Y[0]=1436

   X[1]=386
   Y[1]=1431

   X[2]=381
   Y[2]=1430

   X[3]=375
   Y[3]=1430

   X[4]=374
   Y[4]=1435

   X[5]=369
   Y[5]=1437

   X[6]=364
   Y[6]=1438

   X[7]=359
   Y[7]=1437

   X[8]=372
   Y[8]=1438
   
   X[9]=378
   Y[9]=1438

   X[10]=378
   Y[10]=1443

   While TRUE
      For i=0 to 10
         KillRat()
         SuperWalk(X[i],Y[i],"")
         DigItStay((UO.Str*3.7),2,UO.GetX(),UO.GetY())
      Next
   Wend
end sub


sub DigItStay(MaxWeight,MaxDistance,BaseX,BaseY)
   VAR x,y,TempX,TempY
   VAR Last=0,LastTimer, ContFlag=1
   VAR MaxTimer=160,Count=1
   VAR TileB=1339
   VAR TileE=1359
   Var Tile

   For x=-MaxDistance to MaxDistance
      For y=-MaxDistance to MaxDistance

         Tile=-1
         Tile=TileB
         While NOT UO.PrivateGetTile(UO.GetX()+x,UO.GetY()+y,-1,Tile,Tile) AND Tile<TileE
            Tile=Tile+1
         Wend

         If Tile<TileE Then
            Repeat
               ToHide()
               IF UO.InJournal('cliloc# 0xA5F5') Then
                  TempX=UO.GetX()
                  TempY=UO.GetY()
                  KillRat()
                  SuperWalk(TempX,TempY,"")
               Endif

               CheckLag() ; deleting journal
            
               UO.WaitTargetTile(Str(Tile),STR(UO.GetX()+x),STR(UO.GetY()+y),STR(UO.GetZ()))
               UO.UseType('0x0E86')
               LastTimer=UO.Timer()

               Repeat
                  wait(200)
               until UO.InJournal("Iguana|cliloc# 0x5DE4|Shining|Blood|silver|Spectral|Stars|cliloc# 0x5DE5|cliloc# 0x5DE3|cliloc# 0x5DE0|cliloc# 0xAD03|cliloc# 0xAD00|cliloc# 0xA867|cliloc# 0xAD02") OR LastTimer+MaxTimer<UO.Timer()

               If UO.GetGlobal('PausedScript')=='On' Then
                  UO.Print("+++ Script paused! +++")
                  UO.Print("+++ Script paused! +++")
                  TempX=UO.GetX()
                  TempY=UO.GetY()
                  While UO.GetGlobal('PausedScript')=='On'
                     wait(500)
                  Wend
                  UO.Print("+++ Script continued! +++")
                  UO.Print("+++ Script continued! +++")
                  SuperWalk(TempX,TempY,"")
               Endif

               If UO.Life<UO.Str then
                  TempX=UO.GetX()
                  TempY=UO.GetY()
                  KillRat()
                  SuperWalk(TempX,TempY,"")
                  ToHide()
               Endif


               If UO.Weight>=MaxWeight then
                  TempX=UO.GetX()
                  TempY=UO.GetY()
                  KillRat()
                  SuperWalk(TempX,TempY,"")
                  GoSmelt()
               Endif
            Until UO.InJournal("cliloc# 0xAD00|cliloc# 0xA867|cliloc# 0xAD02")
         Endif
      Next
   Next
end sub


sub GoSmelt()
   VAR TempX,TempY, TempX1, TempY1
   VAR RuneForge='0x4014AE2F' ; dom
   VAR RuneBank ='0x400DCF77' ; bank
   VAR RuneCaves='0x400C9FDE' ; pewera

   TempX=UO.GetX()
   TempY=UO.GetY()
   
   UO.Cast('Recall',RuneForge)
   While TempX==UO.GetX() AND TempY==UO.GetY()
      wait(200)
   Wend

   Smelt()

   TempX1=UO.GetX()
   TempY1=UO.GetY()

   UO.Cast('Recall',RuneBank)
   While TempX1==UO.GetX() AND TempY1==UO.GetY()
      wait(200)
   Wend

   UO.Say("Bank")
      
   UnloadOre()

   If UO.GetGlobal('PausedScript')=='On' Then
      UO.Print("+++ Script paused! +++")
      UO.Print("+++ Script paused! +++")
      While UO.GetGlobal('PausedScript')=='On'
         wait(500)
      Wend
      UO.Print("+++ Script continued! +++")
      UO.Print("+++ Script continued! +++")
   Endif

   LoadRes()

   TempX1=UO.GetX()
   TempY1=UO.GetY()

   UO.Cast('Recall',RuneCaves)
   While TempX1==UO.GetX() AND TempY1==UO.GetY()
      wait(200)
   Wend
   SuperWalk(TempX,TempY,"")
End sub


sub smelt()
   VAR Forge='0x40004D06'
   VAR WaitTime=1000
   VAR Exit=0
   
   While Exit<>1
;      ToHide()
      UO.FindType('0x19B9',-1,'backpack')
      If UO.FindCount() Then
;         UO.Print("Good!")
         UO.WaitTargetObject(Forge)
         UO.UseObject('finditem')
         wait(WaitTime)
      Else
;         UO.Print("Bad!")
         Exit=1
      Endif
   Wend
end sub

;------------------------- Unload ore -------------------------
sub unloadore()
   VAR TempX,TempY,i,Exit
   VAR StoreCont='0x4004BA6D'
   VAR ResCont='0x400B338D'
   VAR Container

   DIM Drop[9]
   
   Drop[0]='0x1BF2' ; Ingi
   Drop[1]='0x19B9' ; Ruda
   Drop[2]='0x1081' ; Koja
   Drop[3]='0x0EED' ; Dengi
   Drop[4]='0x09F1' ; Myaso
   Drop[5]='0x09B9' ; Ptitsa
   Drop[6]='0x0F0E' ; Empty Bottle
   Drop[7]='0x1BD1' ; Periya
   Drop[8]='0x0F0A' ; Lesser Poison

   ToHide()

   For i=0 to 8
      Exit=0
      Repeat
         If i<2 Then
            Container=StoreCont
         Else
            Container=ResCont
         Endif

         UO.FindType(Drop[i],-1,'backpack')
         
         If UO.FindCount() Then
            UO.MoveItem('finditem',0,Container)
            wait(300)
            CheckLag()
         Else
            Exit=1
         Endif
      Until Exit==1
   Next
end sub


sub LoadRes()
   VAR InPack
   VAR WaitTime=300
   VAR PickMeshok='0x401D3721'
   VAR ResMeshok ='0x401D3721'

   VAR PickType='0x0E86'
   VAR BandType='0x0E21'
   VAR NSType='0x0F88'
   VAR BMType='0x0F7B'
   VAR MRType='0x0F86'
   VAR BPType='0x0F7A'
   VAR GCType='0x0F07'
   VAR GHType='0x0F0C'

   VAR Bintov=50
   VAR Regs=10
   VAR Potions=10
   
   UO.UseObject(PickMeshok)
   wait(WaitTime)

; Kirki
   While UO.Count(PickType)<5
      UO.FindType(PickType,-1,PickMeshok)
      wait(WaitTime)
      If UO.FindCount() Then
         UO.MoveItem('finditem',1,'backpack')
         wait(WaitTime)
         CheckLag()
      Endif
   Wend

   UO.UseObject(ResMeshok)
   wait(WaitTime)

; Binty
   UO.FindType(BandType,-1,'backpack')
   wait(WaitTime)
   InPack=UO.GetQuantity('finditem')
   IF InPack<Bintov Then
      UO.FindType(BandType,-1,ResMeshok)
      wait(WaitTime)
      If UO.FindCount() Then
         UO.MoveItem('finditem',Bintov-InPack,'backpack')
         wait(WaitTime)
      Endif
   Endif

; Regi
   IF UO.NS<Regs Then
      UO.FindType(NSType,-1,ResMeshok)
      wait(WaitTime)
      If UO.FindCount() Then
         UO.MoveItem('finditem',Regs-UO.NS,'backpack')
         wait(WaitTime)
      Endif
   Endif

   IF UO.BM<Regs Then
      UO.FindType(BMType,-1,ResMeshok)
      wait(WaitTime)
      If UO.FindCount() Then
         UO.MoveItem('finditem',Regs-UO.BM,'backpack')
         wait(WaitTime)
      Endif
   Endif

   IF UO.MR<Regs Then
      UO.FindType(MRType,-1,ResMeshok)
      wait(WaitTime)
      If UO.FindCount() Then
         UO.MoveItem('finditem',Regs-UO.MR,'backpack')
         wait(WaitTime)
      Endif
   Endif

   IF UO.BP<Regs Then
      UO.FindType(BPType,-1,ResMeshok)
      wait(WaitTime)
      If UO.FindCount() Then
         UO.MoveItem('finditem',Regs-UO.BP,'backpack')
         wait(WaitTime)
      Endif
   Endif

; Potiony
   UO.FindType(GCType,-1,'backpack')
   wait(WaitTime)
   InPack=UO.GetQuantity('finditem')
   IF InPack<Potions Then
      UO.FindType(GCType,-1,ResMeshok)
      wait(WaitTime)
      If UO.FindCount() Then
         UO.MoveItem('finditem',Potions-InPack,'backpack')
         wait(WaitTime)
      Endif
   Endif

   UO.FindType(GHType,-1,'backpack')
   wait(WaitTime)
   InPack=UO.GetQuantity('finditem')
   IF InPack<Potions Then
      UO.FindType(GHType,-1,ResMeshok)
      wait(WaitTime)
      If UO.FindCount() Then
         UO.MoveItem('finditem',Potions-InPack,'backpack')
         wait(WaitTime)
      Endif
   Endif
   
end sub


sub KillRat()
   VAR TempX,TempY
   VAR Dist, i=0, Exit
   VAR LastTimer=0, BTimer=0, DTimer=0, STimer=0
   VAR Scan=6
   VAR Corpse
   VAR cp
   DIM Rats[10]   
   
   Rats[0]='0x006C' ; elem
   Rats[1]='0x0030' ; Scorpion
   Rats[2]='0x0034' ; Snake
   Rats[3]='0x0038' ; Skeleton
   Rats[4]='0x0032' ; Skeleton2
   Rats[5]='0x001E' ; Harpii
   Rats[6]='0x00D7' ; Krisy
   
   While i<7
      UO.Set('finddistance',Scan)
      UO.FindType(Rats[i],-1,'ground')      
      wait(50)
      If UO.FindCount() Then
         UO.Equipt('Rhand','0x1441')
         wait(600)
         Arm()
         wait(50)
         UO.Exec('warmode 1')
         UO.DeleteJournal()
         Dist=1
         Corpse=UO.GetSerial('lastcorpse')
         While Dist<Scan
            UO.Set('finddistance',Dist)
            UO.FindType(Rats[i],-1,'ground')
            wait(50)

            If UO.FindCount() Then
               Exit=0
            Else
               Exit=1
            Endif

            cp=0
            While Exit<>1
               UO.Attack('finditem')
               If cp<>1 Then
                  UO.Cast('Poison','finditem')
                  cp=1
                  wait(2000)
               Endif
               If UO.GetDistance('finditem')>1 Then
                  SuperWalk(0,0,'finditem')
               Endif
               wait(100)

               If UO.Poisoned() AND UO.Life<60 Then
                  If DTimer+50<UO.Timer() Then
                     UO.UseType('0x0F07')
                     DTimer=UO.Timer()
                  Else
                     If BTimer+30<UO.Timer() Then
                        UO.BandageSelf()
                        BTimer=UO.Timer()
                        wait(300)
                        Arm()
                     Endif
                  EndIf
                  UO.Attack('finditem')
               EndIf
               
               If UO.Life<80 Then
                  If NOT UO.Poisoned() AND DTimer+50<UO.Timer() Then
                     UO.UseType('0x0F0C')
                     DTimer=UO.Timer()
                  Else
                     If BTimer+30<UO.Timer() Then
                        UO.BandageSelf()
                        BTimer=UO.Timer()
                        wait(300)
                        Arm()
                     Endif
                  Endif
                  UO.Attack('finditem')
               EndIf

               If UO.GetGlobal('PausedScript')=='On' Then
                  UO.Print("+++ Script paused! +++")
                  UO.Print("+++ Script paused! +++")
                  TempX=UO.GetX()
                  TempY=UO.GetY()
                  While UO.GetGlobal('PausedScript')=='On'
                     wait(500)
                  Wend
                  UO.Print("+++ Script continued! +++")
                  UO.Print("+++ Script continued! +++")
                  SuperWalk(TempX,TempY,"")
               Endif

               If UO.InJournal('corpse') OR Corpse<>UO.GetSerial('lastcorpse') Then
                  wait(1000)
                  If UO.GetDistance('lastcorpse')>1 Then
                     SuperWalk(0,0,'lastcorpse')
                  Endif
                  Loot()
                  Dist=0
                  Exit=1
                  i=0
               Endif
            Wend
            Dist=Dist+1
         Wend
      Endif
      i=i+1
   Wend

   UO.Exec('warmode 0')
   While UO.Life<UO.Str
      Healing()
      wait(3000)
   Wend
end sub


###############################################################
###############################################################
;
;                        Shared Subs
;
###############################################################
###############################################################

#==============================================================
#  tohide() - try hidding char. When char lose HP, drink inviz
#             potion if it found in backpack
#
#  Journal has been deleted!!!
#--------------------------------------------------------------
sub tohide()
   If NOT UO.Hidden() Then
      UO.DeleteJournal()
      UO.UseSkill('Hiding')
      repeat
         wait(200)
      until UO.InJournal('cliloc# 0xA5F8|cliloc# 0xA196|cliloc# 0xA5F9|cliloc# 0xA5F5')
   Endif
end sub


#==============================================================
#  CheckLag() - click on backpack and awaiting "backpack"
#               message in journal.
#
#  Journal has been deleted!!!
#--------------------------------------------------------------
sub CheckLag()
   UO.DeleteJournal()
   UO.Click('backpack')
   repeat
      wait(500)
   until UO.InJournal('backpack|cliloc# 0x9ED5')
end sub


#==============================================================
#  Gong(counter) - playing wav-file 'counter'-times
#  http://www.djetta.ru/cow.wav
#--------------------------------------------------------------
sub Gong(times) ; play wav-file
   VAR i
   for i=1 to times
      UO.Exec("playwav f:\game\uo\injection\cow")
      wait(1200) ; time to play sample at once
   next
end sub


#==============================================================
#  Alarm() - when char lose some HP, U are informed :)
#--------------------------------------------------------------
sub Alarm()
   VAR CharHP=60
   while 1==1
      wait(1000)
      if UO.Life<CharHP then
         gong(1)
      endif      
   wend
end sub


#==============================================================
#  SuperWalk(X,Y,Serial) - char is walking by dX and dY step
#                sub using Home, End, PgUp, PgDown keys
#                d'not rebind this key from default action!
#     walkwait - delay after keypress
#--------------------------------------------------------------
sub SuperWalk(x,y,Target)
   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   
      If Target<>"" Then
         dx=UO.GetX(Target)-UO.GetX()
         dy=UO.GetY(Target)-UO.GetY()
;         UO.Print("Target locked!")
         If UO.GetDistance(Target)<2 Then
            Exit=1
         Endif
      Else
         dx=x-UO.GetX()
         dy=y-UO.GetY()
         If dx==0 AND dy==0 Then
            Exit=1
         Endif

      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
end sub


sub StepEdit(x,y,dir,key)
   VAR walkwait=80
   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=80
   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



###############################################################
###############################################################
;
;                        Hotkeys Subs
;
###############################################################
###############################################################


sub PausedSwitch()
   If UO.GetGlobal('PausedScript')=='Off' Then
      UO.SetGlobal('PausedScript','On')
   Else
      UO.SetGlobal('PausedScript','Off')
   Endif
end sub



#==============================================================
#  Healing() - memoryzed current weapon, bandageself, armed
#--------------------------------------------------------------
sub Healing()
   UO.SetArm('CWeapon')
   UO.Exec("bandageself")
   wait(500)
   UO.Arm('CWeapon')
end sub


#==============================================================
#  Cure() - cast cure to self from scroll, if she found
#           or from spellbook
#--------------------------------------------------------------
sub Cure()
   VAR ManaNeed=6
   VAR ManaNeedScroll=3
   If UO.Poisoned() Then
      If UO.Mana>=ManaNeed Then
         UO.Cast('Cure','self')
         UO.Print("Spell!!!")
      Else
         UO.Print("Low mana spell!!!")
      Endif
   Else
      UO.Print("You allready not sick!!!")
   Endif
end sub


#==============================================================
#  Heal() - cast heal to self from scroll, if she found
#           or from spellbook
#--------------------------------------------------------------
sub Heal()
   VAR ManaNeed=4
   VAR ManaNeedScroll=2
   If UO.Life<UO.Str Then
      If UO.Mana>=ManaNeed Then
         UO.Cast('Heal','self')
         UO.Print("Spell!!!")
      Else
         UO.Print("Low mana spell!!!")
      Endif
   Else
      UO.Print("Your HP at maximum!!!")
   Endif
end sub


#==============================================================
#  GHeal() - cast greater heal to self from scroll, if she
#            found or from spellbook
#--------------------------------------------------------------
sub GHeal()
   VAR ManaNeed=11
   VAR ManaNeedScroll=5
   If UO.Life<UO.Str Then
      If UO.Mana>=ManaNeed Then
         UO.Cast('Greater Heal','self')
         UO.Print("Spell!!!")
      Else
         UO.Print("Low mana spell!!!")
      Endif
   Else
      UO.Print("Your HP at maximum!!!")
   Endif
end sub


#==============================================================
#  Loot() - looting corpse and from ground. Savage.
#--------------------------------------------------------------
sub Loot()
   VAR WaitTime=500
   VAR Exit=0, i, FromCorpse=0, Rezak='0x1441'
   DIM Loot[10]

   UO.Set('finddistance',3)
   
   Loot[0]=0x19B9 ; ore
   Loot[1]=0x0EED ; gp
   Loot[2]=0x1079 ; Hides
   Loot[3]=0x14EB ; Treassure Map
   Loot[4]=0x09F1 ; Raw ribs
   Loot[5]=0x1BD1 ; Feathers
   Loot[6]=0x1081 ; leather
   Loot[7]=0x0F0A ; Poison Potion
   Loot[8]=0x09B9 ; Raw Bird
   
   UO.WaitTargetObject('lastcorpse')
   UO.UseType(Rezak)
   wait(1000)

   UO.DeleteJournal()
   For i=0 to 8
      Exit=0
      While Exit<>1
         UO.FindType(Loot[i],-1,'lastcorpse')
         If UO.FindCount() Then
            If i==2 Then
               UO.WaitTargetObject('finditem')
               UO.UseType('0x0F9F')
            Else
               UO.MoveItem('finditem','0','LootBag')
            Endif
            wait(WaitTime)
         Else
            Exit=1
         Endif
      Wend
   Next
   UO.Print("!!! Polutal!")
end sub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Мининг в ручную

Post by Mirage »

вообще простой модуль копания по тайлам без всяких бродилок, скидывалок и прочих украшательств выглядит вот так:

Code: Select all

sub Mine()
VAR Pickaxe = '0x0E85' ; тип кирки
VAR MaxRange = 2
var msg1 = '%|destroyed|useable|выкопали|0xAD00|0xA867|0xA2DE|0xAD03|0x5DE0|0x5DE1|0x5DE2|0x5DE3|0x5DE4|0x5DE5|0x5DE6|0x5DE7|Вы положили|put the|is nothing here to mine|Wthere do you|Вам не удалось|У вас нет|have no line|ничего|Тут ничего|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
var msg2 = '%|destroyed|0xAD00|0xA867|0xA2DE|Тут ничего|is nothing here to mine|нет руды|У вас нет|have no line|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
VAR X, Y, Z, Tiles, lasttimer, mX, mY, mZ
mX = UO.GetX('self')
mY = UO.GetY('self')
mZ = UO.GetZ('self')
for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
   for X = MaxRange - ( MaxRange * 2 ) to MaxRange
      Tiles = MiningTiles(mX+X, mY+Y)
      if Tiles then
         repeat
            UO.DeleteJournal()
            UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)
            UO.UseType(Pickaxe)
            LastTimer=UO.Timer()
            repeat
               wait(100)
            until UO.InJournal(msg1) || UO.Timer()>LastTimer+100
         until UO.InJournal(msg2) || UO.Timer()>LastTimer+500
      endif
   next
next
end sub
Sub MiningTiles(X,Y)
var i
if UO.PrivateGetTile(X, Y, -1, 616, 618) then
   for i=616 to 618
      if UO.PrivateGetTile(X, Y, -1, i, i) then
         return i
      end if
   next
end if
if UO.PrivateGetTile(X, Y, -1, 1339, 1363) then
   for i=1339 to 1363
      if UO.PrivateGetTile(X, Y, -1, i, i) then
         return i
      end if
   next
end if
if UO.PrivateGetTile(X, Y, -1, 2272, 2282) then
   for i=2272 to 2282
      if UO.PrivateGetTile(X, Y, -1, i, i) then
         return i
      end if
   next
end if
if UO.PrivateGetTile(X, Y, -1, 4963, 4973) then
   for i=4963 to 4973
      if UO.PrivateGetTile(X, Y, -1, i, i) then
         return i
      end if
   next
end if
if UO.PrivateGetTile(X, Y, -1, 6001, 6012) then
   for i=6001 to 6012
      if UO.PrivateGetTile(X, Y, -1, i, i) then
         return i
      end if
   next
end if
if UO.PrivateGetTile(X, Y, -1, 13121, 13369) then
   for i=13121 to 13369
      if UO.PrivateGetTile(X, Y, -1, i, i) then
         return i
      end if
   next
end if
if UO.PrivateGetTile(X, Y, -1, 13446, 13455) then
   for i=13446 to 13455
      if UO.PrivateGetTile(X, Y, -1, i, i) then
         return i
      end if
   next
end if
if UO.PrivateGetTile(X, Y, -1, 13484, 13492) then
   for i=13484 to 13492
      if UO.PrivateGetTile(X, Y, -1, i, i) then
         return i
      end if
   next
end if
if UO.PrivateGetTile(X, Y, -1, 13625, 13628) then
   for i=13625 to 13628
      if UO.PrivateGetTile(X, Y, -1, i, i) then
         return i
      end if
   next
end if
return 0
end sub


Если уж совсем в край упрощать то просто копать должен и вот так:

Code: Select all

sub Mine()
VAR Pickaxe = '0x0E85'
VAR Tiles = 0
VAR MaxRange = 2
var msg1 = '%|destroyed|useable|выкопали|0xAD00|0xA867|0xA2DE|0xAD03|0x5DE0|0x5DE1|0x5DE2|0x5DE3|0x5DE4|0x5DE5|0x5DE6|0x5DE7|Вы положили|put the|is nothing here to mine|Wthere do you|Вам не удалось|У вас нет|have no line|ничего|Тут ничего|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
var msg2 = '%|destroyed|0xAD00|0xA867|0xA2DE|Тут ничего|is nothing here to mine|нет руды|У вас нет|have no line|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
VAR X, Y, Z, lasttimer, mX, mY, mZ
mX = UO.GetX('self')
mY = UO.GetY('self')
mZ = UO.GetZ('self')
for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
   for X = MaxRange - ( MaxRange * 2 ) to MaxRange
      repeat
         UO.DeleteJournal()
         UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)
         UO.UseType(Pickaxe)
         LastTimer=UO.Timer()
         repeat
            wait(100)
         until UO.InJournal(msg1) || UO.Timer()>LastTimer+100
      until UO.InJournal(msg2) || UO.Timer()>LastTimer+500
      
   next
next
end sub


Можно конечно еще избавиться от длиннущих строк сообщений но так оно работает побыстрее имхо.
PS если копать не будет то проверяй сообщения и вписывай:
msg1 = должно содержать все возможные сообщения при копании
msg2 = должно содержать сообщения когда руды нет или ты не можешь достать до тайла с рудой.
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

Спасибо больщое за помощ! Все адаптировал :) :twisted: :o
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Мининг в ручную

Post by Gromiz »

Mirage wrote:

Code: Select all

sub Mine()
VAR Pickaxe = '0x0E85'
VAR Tiles = 0
VAR MaxRange = 2
var msg1 = '%|destroyed|useable|выкопали|0xAD00|0xA867|0xA2DE|0xAD03|0x5DE0|0x5DE1|0x5DE2|0x5DE3|0x5DE4|0x5DE5|0x5DE6|0x5DE7|Вы положили|put the|is nothing here to mine|Wthere do you|Вам не удалось|У вас нет|have no line|ничего|Тут ничего|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
var msg2 = '%|destroyed|0xAD00|0xA867|0xA2DE|Тут ничего|is nothing here to mine|нет руды|У вас нет|have no line|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
VAR X, Y, Z, lasttimer, mX, mY, mZ
mX = UO.GetX('self')
mY = UO.GetY('self')
mZ = UO.GetZ('self')
for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
   for X = MaxRange - ( MaxRange * 2 ) to MaxRange
      repeat
         UO.DeleteJournal()
         UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)
         UO.UseType(Pickaxe)
         LastTimer=UO.Timer()
         repeat
            wait(100)
         until UO.InJournal(msg1) || UO.Timer()>LastTimer+100
      until UO.InJournal(msg2) || UO.Timer()>LastTimer+500
      
   next
next
end sub



о, скрипт то, что нужно, но как всегда нюансы, итить их.

вот мы имеем скрипт, который обкапывает вокруг себя тайлы исходя из сообщений.
а можно отредактировать так, чтобы скрипт отключался, как только найдет тайл, где можно копать, исходя из сообщений? грубо говоря без цикла, как, например, с рубкой?(viewtopic.php?f=20&t=16819)

репиты убирал, но не в этом дело мне кажется
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Мининг в ручную

Post by Mirage »

я как нибудь устану от таких просьб и нажалуюсь админу шарда где ты играешь :mrgreen:
1)

Code: Select all

var msg3 = 'put|положили' ; сообщение при УДАЧНОЙ выкопке
##############
         until UO.InJournal(msg1) || UO.Timer()>LastTimer+100
            if UO.InJournal(msg3) then
                  return
            endif
      until UO.InJournal(msg2) || UO.Timer()>LastTimer+500

соответственно как чтото 1 раз выкопает скрипт остановится.
2) если смотреть на тебя со стороны (админу) то при таком варианте ты выкопаешь всю руду по нажатию 1 кнопки вокруг себя и на каждый следующий тайл чар будет "просматривать" (вертеться) по всем сторонам. Очень быстро. Так что у админа может сложиться впечатление что ты на скрипте.
3) я уже предлагал тебе сделать ТАК но ты сказал тебя не устраивает вариант с сообщениями ;)
4) не проще сменить шард?
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Мининг в ручную

Post by Gromiz »

хм, может я не так понял? про вариант с сообщениями
но в этом случае он полностью вырубает дерево, т.е. постоянно рубит
а мне нужно самому скрип запускать, как при ручной рубке.

процесс рубки:
кликаем на топор и кликаем на дерево
при первом же ударе идет проверка сервера для чара на макрос
 если я ее прошел,то
   могу еще раз рубить
если не прошел проверку -> идем за решетку

а если во время проверки чар будет дорубливать дерево, то есть вероятность задвоения проверки с плачевным результатом.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Мининг в ручную

Post by ZeroDX »

а что за шард?
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Мининг в ручную

Post by Gromiz »

ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Мининг в ручную

Post by ZeroDX »

а в местном антимакро бывают минусы и двузначные числа?
Post Reply