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
Мининг в ручную
Moderators: Murderator+, Murderator
Мининг в ручную
Люди добрые помогите пожалуйста. Мне нужен облегчающий скрипт для копки вручную. Суть его такова что первый раз я копаю вручную а потом запускаю этот скрипт с хоткея и он докапывает всю руду в этом тайле, как докапает юзает кирку, чтобы появился прицел. Дело в том, что у меня аналогичный скрипт на пилоте был, но на моем шарде он не пашет изза несовместимости клиента с пилотом. Я набросал скрипт, но он вешает клиент кучей ошибок, прошу подправьте его плз.
-
- Expert!
- Posts: 1205
- Joined: 2004-04-04 11:13:54
- Location: Балаково, Саратовская обл.
- Contact:
Re: Мининг в ручную
На 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
Re: Мининг в ручную
Спасибо большое, но скрипт также ведет себя - во вкладке скрипт появляется куча новых один за другим летят ошибки и крашит уо. Inject 702.11 PaWn, client 5.0.9. Нечего неподелать наверное?
Re: Мининг в ручную
Savage UO.DeleteJournal() забыл перед 1 repeat вставить
Или надеялся что у автора делка в чеклаге вставлена.
PS чисто любопытство - зачем такая сложная механика? Почему нельзя просто хоткей нажать и выкопать все? Типо экономим конду на кирке?

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

Re: Мининг в ручную
Дело в том, что у меня неполучилось адаптировать скрипт на мининг вокруг себя под мой шард, хотя перепробовал я много разных, по какойто причине они все работают криво. После того как капнет один раз в тайле переключается на следующий тайл, как будто пофиг на сообщения журнала ему. Я в скриптах слабо шарю, как вы наверное уже успели догодаться, но подозреваю что дело в том, что во всех скриптах используется UO.Waittargettile("1339", str(i), str(j),"0"). А тайл прописывается определеный в данном случае 1339. А на моем серваке все разные тайлы, смотрел через ,infotile и 1340 есть и 1343 и 1338. Так, что приходиться заморачиваться в ручную))))
Re: Мининг в ручную
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
Вот один из скриптов копки вокруг, найденных тут некопает нефига
-
- Expert!
- Posts: 1205
- Joined: 2004-04-04 11:13:54
- Location: Балаково, Саратовская обл.
- Contact:
Re: Мининг в ручную
Mirage wrote:Savage UO.DeleteJournal() забыл перед 1 repeat вставить![]()
Или надеялся что у автора делка в чеклаге вставлена.
PS чисто любопытство - зачем такая сложная механика? Почему нельзя просто хоткей нажать и выкопать все? Типо экономим конду на кирке?
Хоткей прийдётся долбить пока всё не добудешь. При низком уровне скила это занятие по времени может достигать получаса.
Действительно у меня в чеклаге делжурнал.
Re: Мининг в ручную
Скила то как раз у меня гм, добавил deletejoutnal заработало все ок. Спасибо. Насчет мининга вокруг себя подскажите, почему может не работать? 

-
- Expert!
- Posts: 1205
- Joined: 2004-04-04 11:13:54
- Location: Балаково, Саратовская обл.
- Contact:
Re: Мининг в ручную
А ты часом не на ранке играешь? Попробуй номер тайла ставить 0.
Re: Мининг в ручную
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. И даже копать не начинает :/
-
- Expert!
- Posts: 1205
- Joined: 2004-04-04 11:13:54
- Location: Балаково, Саратовская обл.
- Contact:
Re: Мининг в ручную
Тогда посмотри на этот код. Тут я получаю номер тайла через приватгеттайл. Вообщем запускаешь дроу, если нарисует шахту то будет работать. Если нет, то меняем инжу, убираем патчи с вердаты.
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
Re: Мининг в ручную
вообще простой модуль копания по тайлам без всяких бродилок, скидывалок и прочих украшательств выглядит вот так:
Если уж совсем в край упрощать то просто копать должен и вот так:
Можно конечно еще избавиться от длиннущих строк сообщений но так оно работает побыстрее имхо.
PS если копать не будет то проверяй сообщения и вписывай:
msg1 = должно содержать все возможные сообщения при копании
msg2 = должно содержать сообщения когда руды нет или ты не можешь достать до тайла с рудой.
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 = должно содержать сообщения когда руды нет или ты не можешь достать до тайла с рудой.
Re: Мининг в ручную
Спасибо больщое за помощ! Все адаптировал




Re: Мининг в ручную
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)
репиты убирал, но не в этом дело мне кажется
Re: Мининг в ручную
я как нибудь устану от таких просьб и нажалуюсь админу шарда где ты играешь
1)
соответственно как чтото 1 раз выкопает скрипт остановится.
2) если смотреть на тебя со стороны (админу) то при таком варианте ты выкопаешь всю руду по нажатию 1 кнопки вокруг себя и на каждый следующий тайл чар будет "просматривать" (вертеться) по всем сторонам. Очень быстро. Так что у админа может сложиться впечатление что ты на скрипте.
3) я уже предлагал тебе сделать ТАК но ты сказал тебя не устраивает вариант с сообщениями
4) не проще сменить шард?

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) не проще сменить шард?
Re: Мининг в ручную
хм, может я не так понял? про вариант с сообщениями
но в этом случае он полностью вырубает дерево, т.е. постоянно рубит
а мне нужно самому скрип запускать, как при ручной рубке.
процесс рубки:
кликаем на топор и кликаем на дерево
при первом же ударе идет проверка сервера для чара на макрос
если я ее прошел,то
могу еще раз рубить
если не прошел проверку -> идем за решетку
а если во время проверки чар будет дорубливать дерево, то есть вероятность задвоения проверки с плачевным результатом.
но в этом случае он полностью вырубает дерево, т.е. постоянно рубит
а мне нужно самому скрип запускать, как при ручной рубке.
процесс рубки:
кликаем на топор и кликаем на дерево
при первом же ударе идет проверка сервера для чара на макрос
если я ее прошел,то
могу еще раз рубить
если не прошел проверку -> идем за решетку
а если во время проверки чар будет дорубливать дерево, то есть вероятность задвоения проверки с плачевным результатом.
Re: Мининг в ручную
а что за шард?
Re: Мининг в ручную
а в местном антимакро бывают минусы и двузначные числа?