#----------------MINING SKALI ON DRW V1.2 BY Immelstorn aka Vanger (C)-------------------#
#----------------------------------------------------------------------------------------#
var Chest=0x4029AC79 ; - Серийник сундука для сброса.
var PickAxe=0x0E85 ; - Тип кирки для копания.
var Runebook=0x4001E4AC ; - Сериал рунбуки.
var f=file('C:\min9.dat') ; - Файл, где хранятся координаты точек для копания.
var TryToHide=1 ; - Копать ли в стелсе, 0 - нет.
var MaxWeight=827 ; - Сколько чар может унести.
var ElementalPause=1 ; - Стоять ли на паузе после выкапывания элементала, 0 - не стоять.
var KillElemental=0 ; - Убивать ли элементала, 0 - нет.
var RuneHome=1 ; - Номер руны домой.
var RuneMining=6 ; - Номер руны к горе.
var Reconnect=0 ; - Использовать ли реконнект, 0 - не использовать.
#----------------------------------------------------------------------------------------#
var flag,weapon
#----------------------------------------------------------------------------------------#
;1. Функция mining() - отвечает за копание.
;2. Функция marching() - отвечает за запись координат точек копания в файл.
; Прекратить марк можно, сказав END и нажав ESC.
; Чтобы точка запомнилась, достаточно покопать в ней 1 раз.
;3. В скрипте есть функции еды и речаржа рунбуки. Чтобы они работале в сундуке должны
; лежать фишстейки и реколлы соответственно.
;4. Скрипт может убивать элементалов. Для этого у вашего чара должно быть достаточно
; магери на полиморф в демона, также желательно высокий парринг, реслинг и тактика.
; В паке у вас должны лежать инвизки, манки, и ГХ, а также приличный щит.
#----------------------------------------------------------------------------------------#
sub mining()
VAR Time,Space,MinCount,i
DIM MinType[500],MinX[500],MinY[500],MinZ[500],CharX[500],CharY[500]
f.Open()
MinCount=f.ReadNumber()
for i=0 to (MinCount-1)
MinType[i]=f.ReadNumber()
MinX[i]=f.ReadNumber()
MinY[i]=f.ReadNumber()
MinZ[i]=f.ReadNumber()
CharX[i]=f.ReadNumber()
CharY[i]=f.ReadNumber()
next
f.Close()
if Reconnect==1 then
CheckReconnector()
endif
RecallRunebook(RuneMining)
flag=0
uo.print('Current mining point: '+str(flag+1)+'')
Walk(CharX[flag],CharY[flag],'')
Beginning:
WSprotection()
if TryToHide==1 then
ToHide()
end if
while not uo.InJournal('no ore here') and not uo.InJournal('location') and not uo.InJournal('far away') and not uo.InJournal('in rock') and not uo.InJournal('Iron')
if uo.waiting() then
uo.canceltarget()
endif
if uo.InJournal("Elemental") and ElementalPause==1 then
uo.print('Выкопан элементал!!!')
Time=MakeTime()
Space=' '
uo.TextOpen()
uo.TextPrint('Был выкопан элементал ' +Space +Time)
repeat
wait(5000)
print('say GO to continue')
until uo.injournal('GO')
uo.deletejournal()
goto Beginning
endif
if uo.InJournal("Elemental is attacking you") and KillElemental==1 then
uo.print('Элементал атакует!!!')
Time=MakeTime()
Space=' '
uo.TextOpen()
uo.TextPrint('Вы были атакованы элементалом' +Space +Time)
KillElemental()
uo.deletejournal()
goto Beginning
endif
if uo.Weight>MaxWeight then
uo.print('Перегруз! Летим домой')
RecallRunebook(RuneHome)
uo.UseObject(Chest)
wait(500)
DropOres()
RechargeRunebook()
ToEat()
uo.print('Летим на раскопки')
RecallRunebook(RuneMining)
flag=0
Walk(CharX[flag],CharY[flag],'')
goto Beginning
endif
uo.DeleteJournal()
UsePickAxe()
uo.waittargettile(str(MinType[flag]),str(MinX[flag]),str(MinY[flag]),str(MinZ[flag]))
while not uo.InJournal('You put') and not uo.InJournal('heavy') and not uo.InJournal('location') and not uo.InJournal('no ore') and not uo.InJournal('but fail') and not uo.InJournal('far away') and not uo.InJournal('in rock')
wait(200)
if uo.InJournal("Elemental") and ElementalPause==1 then
uo.print('Выкопан элементал!!!')
Time=MakeTime()
Space=' '
uo.TextOpen()
uo.TextPrint('Был выкопан элементал ' +Space +Time)
repeat
wait(5000)
print('say GO to continue')
until uo.injournal('GO')
uo.deletejournal()
goto Beginning
endif
if uo.InJournal("Elemental is attacking you") and KillElemental==1 then
uo.print('Элементал атакует!!!')
Time=MakeTime()
Space=' '
uo.TextOpen()
uo.TextPrint('Вы были атакованы элементалом' +Space +Time)
KillElemental()
uo.deletejournal()
goto Beginning
endif
wend
wend
uo.deletejournal()
flag=flag+1
if flag==MinCount then
uo.print('Going back to point 1')
while not flag==0
flag=flag-1
Walk(CharX[flag],CharY[flag],'')
wend
endif
uo.print('Current mining point: '+str(flag+1)+'')
Walk(CharX[flag],CharY[flag],'')
goto Beginning
end sub
sub marching()
VAR MinCount=0, exit=0, flag2=0, t=0, TestX, TestY
DIM MinType[500],MinX[500],MinY[500],MinZ[500],CharX[500],CharY[500]
while exit<>1
uo.deletejournal()
uo.usetype(PickAxe)
wait(500)
while uo.targeting()
if uo.injournal('END') then
exit=1
end if
wait(100)
wend
repeat
wait(100)
until uo.injournal('far away') or uo.injournal('in rock') or uo.injournal('sight') or uo.injournal('You put') or uo.injournal('ore here') or uo.injournal('loosen') or uo.injournal('Cancelled')
if uo.injournal('You put') or uo.injournal('ore here') then
TestX=uo.lasttile(1)
TestY=uo.lasttile(2)
if MinCount>0 then
repeat
if TestX<>MinX[t] or TestY<>MinY[t] then
t=t+1
else
flag2=1
endif
until t==MinCount OR flag2==1
endif
if flag2==0 then
MinType[MinCount]=uo.lasttile(0)
MinX[MinCount]=uo.lasttile(1)
MinY[MinCount]=uo.lasttile(2)
MinZ[MinCount]=uo.lasttile(3)
CharX[MinCount]=uo.getX()
CharY[MinCount]=uo.getY()
MinCount=MinCount+1
uo.print(''+str(MinCount)+' mining point found. Koord '+str(MinX[(MinCount-1)])+' '+str(MinY[(MinCount-1)])+'')
endif
if flag2<>0 then
flag2=0
endif
if t<>0 then
t=0
endif
endif
wend
SaveToFile(MinCount,MinType,MinX,MinY,MinZ,CharX,CharY)
uo.print('Marching finished. Found '+str(MinCount)+' mining points. Good luck in mining!')
end sub
sub SaveToFile(count,type,x,y,z,cX,cY)
var i
f.Open()
f.Create()
f.Writeln(count)
for i=0 to (count-1)
f.Writeln(str(type[i])+' '+str(x[i])+' '+str(y[i])+' '+str(z[i])+' '+str(cX[i])+' '+str(cY[i]))
next
f.Close()
end sub
sub ToHide()
while not uo.Hidden()
uo.Print('Hiding...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(3700)
if uo.injournal('preoccupied') then
uo.exec('warmode 1')
uo.exec('warmode 0')
endif
wend
end sub
sub WSprotection()
if UO.InJournal("World is saving") then
UO.DeleteJournal()
repeat
wait(500)
until UO.InJournal("saved")
endif
end sub
sub CheckLag()
UO.DeleteJournal()
UO.Click('backpack')
Repeat
wait(100)
Until UO.InJournal('backpack')
end sub
sub DropOres()
var a, Exit
DIM Ore[5]
Ore[0]=0x19B9 ## - 4 and more ore
Ore[1]=0x19B7 ## - 1 ore
Ore[2]=0x19BA ## - 2 ore
Ore[3]=0x19B8 ## - 3 ore
if uo.Waiting() then
uo.CancelTarget()
end if
uo.useobject('backpack')
wait(500)
uo.SetReceivingContainer(Chest)
wait(500)
for a=0 to 3
exit=0
repeat
uo.FindType(Ore[a])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1000)
else
exit=1
end if
until Exit==1
next
uo.UnSetReceivingContainer()
end sub
sub ToEat()
uo.findtype('0x097B','-1',Chest)
if uo.findcount()>0 then
uo.grab('20','finditem')
wait(500)
uo.findtype('0x097B','-1','backpack')
repeat
UO.UseObject('finditem')
wait(500)
until uo.injournal('You feel quite full') OR uo.injournal('You are stuffed!') OR uo.injournal('You are simply too full')
uo.findtype('0x097B','-1','backpack')
if uo.findcount()>0 then
uo.setreceivingcontainer(Chest)
wait(500)
uo.grab('0','finditem')
uo.unsetreceivingcontainer()
wait(500)
endif
endif
end sub
sub RecallRunebook(n)
var mX, mY
uo.Set('norbcheck','1')
uo.Set('norbcalc','1')
if n==1 then
n=21
endif
if n==2 then
n=33
endif
if n==3 then
n=46
endif
if n==4 then
n=58
endif
if n==5 then
n=64
endif
if n==6 then
n=73
endif
if n==7 then
n=88
endif
if n==8 then
n=94
endif
if n==9 then
n=1025
endif
if uo.Waiting() then
uo.CancelTarget()
end if
mX = uo.getX()
mY = uo.getY()
while uo.getX()==mX and uo.getY()==mY
WSprotection()
UO.Recall(Runebook,n)
wait(10000)
wend
end sub
sub RechargeRunebook()
uo.findtype('0x1F4C','-1',Chest)
if uo.findcount()>0 then
uo.grab('2','finditem')
wait(800)
uo.recall(Runebook,'1')
wait(4000)
uo.findtype('0x1F4C','-1','backpack')
if uo.findcount()>0 then
uo.setreceivingcontainer(Chest)
wait(1000)
uo.grab('0','finditem')
wait(1000)
uo.unsetreceivingcontainer()
endif
endif
end sub
VAR walkwait=300, cel='', glX, glY
sub Walk(x,y,Target)
VAR Step, dX, dY, Exit=0, dirW=0, result
While Exit<>1
if Target<>"" then
cel=Target
dX=UO.GetX(Target)-UO.GetX()
dY=UO.GetY(Target)-UO.GetY()
if UO.GetDistance(Target)<2 then
Exit=1
endif
else
dX=x-UO.GetX()
dY=y-UO.GetY()
glX=dX
glY=dY
if dX==0 AND dY==0 then
Exit=1
endif
endif
if Exit==0 then
if dX>0 AND dY>0 then
dirW=9 ;number 2
endif
if dX>0 AND dY<0 then
dirW=7 ;number 6
endif
if dX<0 AND dY>0 then
dirW=3 ;number 4
endif
if dX<0 AND dY<0 then
dirW=5 ;number 8
endif
if dX<>0 AND dY==0 then
if dX>0 then
dirW=8 ;number 3
else
dirW=4 ;number 7
endif
endif
if dX==0 AND dY<>0 then
if dY>0 then
dirW=2 ;number 1
else
dirW=6 ;number 9
endif
endif
result=Go(dirW)
if result==0 then
result=Go(dirW-2)
if result==0 then
result=Go(dirW+2)
endif
endif
endif
Wend
return 1
endsub
sub Go(dir)
var x, y, check=1, dirStart=UO.GetDir()
x=UO.GetX()
y=UO.GetY()
DIM key[12]
key[0] = 34 ;number 3
key[1] = 40 ;number 2
key[2] = 35 ;number 1
key[3] = 37 ;number 4
key[4] = 36 ;number 7
key[5] = 38 ;number 8
key[6] = 33 ;number 9
key[7] = 39 ;number 6
key[8] = 34 ;number 3
key[9] = 40 ;number 2
key[10] = 35 ;number 1
key[11] = 37 ;number 4
DIM dirS[12]
dirS[0] = 2 ;number 3
dirS[1] = 3 ;number 2
dirS[2] = 4 ;number 1
dirS[3] = 5 ;number 4
dirS[4] = 6 ;number 7
dirS[5] = 7 ;number 8
dirS[6] = 0 ;number 9
dirS[7] = 1 ;number 6
dirS[8] = 2 ;number 3
dirS[9] = 3 ;number 2
dirS[10] = 4 ;number 1
dirS[11] = 5 ;number 4
While UO.GetDir()<>dirS[dir]
UO.Press(key[dir])
wait(walkwait)
if UO.GetDir()==dirStart then
CheckLag()
endif
if (cel<>"" AND UO.GetDistance(cel)<2) OR (glX==0 AND glY==0) then
return 1
endif
Wend
UO.Press(key[dir])
wait(walkwait)
if x==UO.GetX() AND y==UO.GetY() then
CheckLag()
UO.Press(key[dir])
wait(walkwait)
endif
if x==UO.GetX() AND y==UO.GetY() then
return 0
else
return 1
endif
endsub
sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
While (UO.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(20000) # WorldSave Protection
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.LDblClick(357,164)
UO.LClick(616,459)
Wait(3000)
Wend
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
UO.Exec('terminate mining')
wait(1000)
UO.Exec('exec mining')
wait(1000)
UO.TextOpen()
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
RFlag = 1
ReconnectTime = '0'
endif
Until false
end sub
sub MakeTime()
VAR D, T, Ret, i
Ret = STR(UO.Time())
T = ""
For i = 0 To Len(Ret)
T = Ret[Len(Ret)-i] + T
If (I == 2) OR (I == 4) Then
T = ":" + T
EndIf
Next
Ret = STR(UO.Date())
D = ""
For i = 0 To Len(Ret)
D = Ret[Len(Ret)-i] + D
If (I == 2) OR (I == 4) Then
D = "." + D
EndIf
Next
Ret = T + " @ " + D
RETURN Ret
end sub
sub CheckReconnector()
UO.Exec('terminate Reconnector')
wait(1000)
UO.Exec('exec Reconnector')
wait(1000)
End sub
sub KillElemental()
VAR Count,LastTimer,Elemental,i,GrabOres=0
DIM Ore[4]
Ore[0]=0x19B9 ; - 4 and more ore
Ore[1]=0x19B7 ; - 1 ore
Ore[2]=0x19BA ; - 2 ore
Ore[3]=0x19B8 ; - 3 ore
Elemental=uo.GetSerial(uo.JournalSerial(uo.InJournal('Elemental')-1))
uo.useobject('backpack')
wait(500)
uo.exec('warmode 1')
uo.exec('warmode 0')
UO.UseType('0x0F0E','0x0631') ; inviz potion
uo.exec('warmode 1')
uo.exec('warmode 0')
repeat
If UO.Mana>=50 then
UO.WaitMenu('What','Daemon')
UO.Cast('Polymorph')
wait(8000)
else
while UO.Mana<50
UO.UseType('0x0F0E','0x09DF') ; total mana potion
wait(3000)
wend
endif
until UO.STR>200
LastTimer=UO.Timer()
repeat
UO.BandageSelf()
wait(4000)
until UO.Life==UO.STR OR LastTimer+450<UO.Timer()
UO.UseType(0x1B76) ; heater shield
wait(500)
while not GrabOres==1
Walk(0,0,Elemental)
uo.attack(Elemental)
wait(3500)
uo.usetype('0x0F0E','0x09BB') ; great heal potion
for i=0 to 3
uo.findtype(Ore[i],-1,'ground')
if uo.findcount()>0 then
uo.grab('0','finditem')
wait(500)
GrabOres=1
endif
next
wend
GrabOres=0
uo.exec('warmode 1')
uo.exec('warmode 0')
end sub
sub UsePickAxe()
weapon=UO.ObjAtLayer('Rhand')
if weapon=='' then
uo.findtype(PickAxe,-1,'backpack')
uo.Equip('Rhand','finditem')
wait(500)
weapon=UO.ObjAtLayer('Rhand')
endif
uo.UseObject(weapon)
end sub
Всё отлично работает, просто нужно поставить после всего прохода по копанию, задержку, минут на 10.
Куда?
