Yoko

All sides of Injection
It is currently 2024-03-29 03:11:50

All times are UTC+02:00




Post new topic  Reply to topic  [ 22 posts ]  Go to page 1 2 Next
Author Message
PostPosted: 2010-09-11 22:57:04 
Offline

Joined: 2010-09-07 18:18:24
Posts: 11
Люди добрые помогите пожалуйста. Мне нужен облегчающий скрипт для копки вручную. Суть его такова что первый раз я копаю вручную а потом запускаю этот скрипт с хоткея и он докапывает всю руду в этом тайле, как докапает юзает кирку, чтобы появился прицел. Дело в том, что у меня аналогичный скрипт на пилоте был, но на моем шарде он не пашет изза несовместимости клиента с пилотом. Я набросал скрипт, но он вешает клиент кучей ошибок, прошу подправьте его плз.

Quote:
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


Top
   
PostPosted: 2010-09-12 13:21:54 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
На F12 висит клиент макро lastobject, waitfortarget, lasttarget
Code:
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


Top
   
PostPosted: 2010-09-13 07:35:02 
Offline

Joined: 2010-09-07 18:18:24
Posts: 11
Спасибо большое, но скрипт также ведет себя - во вкладке скрипт появляется куча новых один за другим летят ошибки и крашит уо. Inject 702.11 PaWn, client 5.0.9. Нечего неподелать наверное?


Top
   
PostPosted: 2010-09-13 07:56:45 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
Savage UO.DeleteJournal() забыл перед 1 repeat вставить ;)
Или надеялся что у автора делка в чеклаге вставлена.


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

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2010-09-13 08:52:17 
Offline

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


Top
   
PostPosted: 2010-09-13 09:01:06 
Offline

Joined: 2010-09-07 18:18:24
Posts: 11
Quote:
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


Вот один из скриптов копки вокруг, найденных тут некопает нефига


Top
   
PostPosted: 2010-09-13 17:38:46 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
Mirage wrote:
Savage UO.DeleteJournal() забыл перед 1 repeat вставить ;)
Или надеялся что у автора делка в чеклаге вставлена.


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

Хоткей прийдётся долбить пока всё не добудешь. При низком уровне скила это занятие по времени может достигать получаса.
Действительно у меня в чеклаге делжурнал.


Top
   
PostPosted: 2010-09-13 18:07:01 
Offline

Joined: 2010-09-07 18:18:24
Posts: 11
Скила то как раз у меня гм, добавил deletejoutnal заработало все ок. Спасибо. Насчет мининга вокруг себя подскажите, почему может не работать? :)


Top
   
PostPosted: 2010-09-13 19:13:50 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
А ты часом не на ранке играешь? Попробуй номер тайла ставить 0.


Top
   
PostPosted: 2010-09-13 20:30:23 
Offline

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


Top
   
PostPosted: 2010-09-13 20:34:50 
Offline

Joined: 2010-09-07 18:18:24
Posts: 11
Quote:
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. И даже копать не начинает :/


Top
   
PostPosted: 2010-09-14 07:59:37 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
Тогда посмотри на этот код. Тут я получаю номер тайла через приватгеттайл. Вообщем запускаешь дроу, если нарисует шахту то будет работать. Если нет, то меняем инжу, убираем патчи с вердаты.

Code:
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


Top
   
PostPosted: 2010-09-14 11:04:38 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
вообще простой модуль копания по тайлам без всяких бродилок, скидывалок и прочих украшательств выглядит вот так:

Code:
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:
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 = должно содержать сообщения когда руды нет или ты не можешь достать до тайла с рудой.

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2010-09-14 21:46:07 
Offline

Joined: 2010-09-07 18:18:24
Posts: 11
Спасибо больщое за помощ! Все адаптировал :) :twisted: :o


Top
   
PostPosted: 2011-11-22 15:48:29 
Offline

Joined: 2005-02-08 18:39:50
Posts: 444
Location: Moscow
Mirage wrote:
Code:
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)

репиты убирал, но не в этом дело мне кажется


Top
   
PostPosted: 2011-11-22 16:21:21 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
я как нибудь устану от таких просьб и нажалуюсь админу шарда где ты играешь :mrgreen:
1)
Code:
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) не проще сменить шард?

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2011-11-22 17:34:47 
Offline

Joined: 2005-02-08 18:39:50
Posts: 444
Location: Moscow
хм, может я не так понял? про вариант с сообщениями
но в этом случае он полностью вырубает дерево, т.е. постоянно рубит
а мне нужно самому скрип запускать, как при ручной рубке.

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

а если во время проверки чар будет дорубливать дерево, то есть вероятность задвоения проверки с плачевным результатом.


Top
   
PostPosted: 2011-11-22 17:49:04 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
а что за шард?


Top
   
PostPosted: 2011-11-22 18:18:45 
Offline

Joined: 2005-02-08 18:39:50
Posts: 444
Location: Moscow
шард


Top
   
PostPosted: 2011-11-22 20:38:08 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
а в местном антимакро бывают минусы и двузначные числа?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 22 posts ]  Go to page 1 2 Next

All times are UTC+02:00


Who is online

Users browsing this forum: Bing [Bot] and 17 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited