ребят ... читая многие темы по этой теме которую выложил... извиняюсь за банальность темы, но осмелюсь попросить кого нибудь объединить 2 скрипта, один на мой взгляд просто идеален ,но не подходит мне, так как нету вип шахты,а второй имеет большое количество ошибок т.к. мне его многие пытались сделать ,но он всё таки далёк от идеала,но выполняет нужную мне функцию. Могу на дрв подбросить ГП. за проделанный труд.
Ближе к делу)
Мне нужно чтобы сие добро, маркало точки как в скрипте 2(глючный) и обкапывало их, при наборе определённого количества Оре, рекол к сундуку и обратно копать(цикличность)+реконект который помнит, а не просто реконектит,ну и главную особенность 1ого скрипта ,это убивание элема под действием инвизки методом каста вортекса и продолжать копать(можно ещё рекол сразу после убийства элема выхи и скинуть всё оре и опять трудится).
Ниже оба скрипта которые нужно объединить, заранее прошу прощение за качество скриптов, мне они достались изначально в таком виде. сам не шарю.
мининг скалы + вортекс
Moderators: Murderator+, Murderator
-
- Posts: 3
- Joined: 2010-12-19 11:55:56
Re: мининг скалы + вортекс
это с скрипт 1 с вортексом
###############################################################
#===---====----===---===---= Mining =---=-=-=-=-=--=-=-=-=-=-=#
# Single char mining for VIP Mine. DRW Shard http://www.drw.ru #
# Scripted by Savage (c) 2005-2010 ICQ:33336141 #
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
# To start script use ",exec mine" command from client window #
###############################################################
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
;==================== Main mining script ======================
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
sub mine()
UO.Exec('terminate Reconnector')
wait(1000)
uo.exec('exec Reconnector')
VAR DigDistance, TileNum, KillElemental
VAR ElemSignal, LastTimer
DIM BaseX[2], BaseY[2]
VAR BaseZ, WayPoint, WayPoints
VAR MaxWeight
VAR i,j,TileY,TileX,DirX,DirY
VAR Delta,BeginX,EndX,BeginY,EndY
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; TileNum='Num' - Use ",infotile" command on the floor
; Номер тайла в котором можно копать ,потыкайте командой
; ",infotile" по разнвм тайлам и посмотрите не отличаются ли их
; номера.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
TileNum='1339'
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Максимальный вес, который может поднять чар. Ставьте его
; немного меньше реального. То есть если чар поднимает 760, то
; ставим 730.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
MaxWeight=600
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; DigDistance=4 - Distance from tile where pickaxe targeting
; Радиус круга по которому будет копать чар, то есть расстояние
; до клетки куда можно дотянуться киркой.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
DigDistance=3
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; KillElemental='Yes'/'No' - Use 'Yes' if char skilled to morph
; in daemon and wrestling > 50
; Если чар достаточно прокачен чтоб бить элемов, ставьте 'Yes'
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
KillElemental='No'
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; ElemSignal='Off'/'On' - Play sound when elemental is digged
; Оповешать при появлении элема
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
ElemSignal='Off'
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Здесь указываем координаты точек копания. Нужно встать на
; позицию и посмотреть координаты в инжекте. Их и нужно
; подставить вместо моих. Чара ставьте на 4 клетки от стен.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
BaseX[0]=5914
BaseY[0]=1084
BaseZ=0
BaseX[1]=5906
BaseY[1]=1084
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Указываем количество точек копания
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
WayPoints=2
CheckLag()
UO.UseObject('Sunduk')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the') OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("Podoydi k sunduku i tkni v nego pricelom!")
UO.AddObject('Sunduk')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
UO.UseObject('Sunduk')
Else
; UO.Say("Ok! Viju sunduk.")
Endif
CheckLag()
UO.UseObject('MyBox')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the') OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("Pokaji yashik!")
UO.AddObject('MyBox')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
UO.UseObject('MyBox')
Else
; UO.Say("Ok! Viju sunduk.")
Endif
CheckLag()
UO.UseObject('IronBag')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the')OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("V kakoy meshok kidat' Iron Ore")
UO.AddObject('IronBag')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
Else
; UO.Say("Meshok dlya Iron Ore viju")
Endif
CheckLag()
UO.UseObject('OtherBag')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the')OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("V kakoy meshok kidat' rudu?")
UO.AddObject('OtherBag')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
Else
; UO.Say("Meshok dlya rudy viju.")
Endif
CheckLag()
UO.UseObject('BestBag')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the')OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("V kakoy meshok kidat' vihu?")
UO.AddObject('BestBag')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
Else
; UO.Say("Meshok dlya vihi viju.")
Endif
While NOT UO.Dead()
For WayPoint=0 to WayPoints-1
walkn(BaseX[WayPoint],BaseY[WayPoint],"")
digitstay(MaxWeight,DigDistance,KillElemental,ElemSignal,BaseX[WayPoint],BaseY[WayPoint])
Next
wend
If UO.InJournal('Elemental') then
UO.TextPrint('Elemental founded '+MakeTime())
end sub
; Проверка нужности руды. Закоментировать то что нужно копать.
sub CheckOre()
VAR Cont=1, i=0, Exit=0
VAR Count=0 ; Сколько элементов в массиве.
DIM Ores[15]
; Ores[0]="Rusty"
; Ores[1]="Old Copper"
; Ores[2]="Dull Copper"
; Ores[3]="Copper"
; Ores[4]="Bronze"
; Ores[5]="Silver"
; Ores[6]="Iron"
; Ores[7]="Shadow"
; Ores[8]="Rose"
; Ores[9]="Gold"
; Ores[10]="Agapite"
; Ores[11]="Blood Rock"
; Ores[12]="Verite"
; Ores[13]="Valorite"
; Ores[14]="Mytheril"
While i<Count AND Exit==0
If UO.InJournal(Ores[i]) Then
Cont=0
Exit=1
Endif
; UO.Print(STR(i))
; UO.Print(Ores[i])
i=i+1
Wend
return Cont
end sub
;-------------------- Try to mine under self ------------------
sub digitstay(MaxWeight,MaxDistance,KillElemental,ElemSignal,BaseX,BaseY)
VAR x,y,z='0',TileNum='1339'
VAR Last=0,LastTimer, ContFlag=1
VAR MaxTimer=110
For x=-MaxDistance to MaxDistance
For y=-MaxDistance to MaxDistance
Repeat
CheckLag() ; deleting journal
ToHide()
UO.WaitTargetTile(TileNum,STR(UO.GetX()+x),STR(UO.GetY()+Y),z)
UO.UseType('0x0E85')
LastTimer=UO.Timer()
Repeat
wait(500)
until UO.InJournal("Try mining") OR UO.InJournal("You put") OR UO.InJournal("You loosen") OR UO.InJournal("There is no") OR UO.InJournal("That is too") OR UO.InJournal("OOPS") OR UO.InJournal("attacking you") OR LastTimer+200<UO.Timer()
If NOT UO.InJournal('There is no') then
ContFlag=CheckOre()
Endif
If UO.InJournal('You loosen') then
repeat
wait(300)
until UO.InJournal("You put") OR LastTimer+MaxTimer<UO.Timer()
Endif
If UO.InJournal('something with ore') OR UO.InJournal("Elemental") then
If ElemSignal=='On' Then
Gong(2)
Endif
If KillElemental=='Yes' Then
KillElem()
walkn(BaseX,BaseY,"")
Else
; any user defined command when char digget elemental
Endif
Endif
If UO.InJournal("attacking you") then
gong(3)
Endif
If UO.Weight>=MaxWeight then
unloadore()
Endif
Until UO.InJournal("There is no") OR UO.InJournal("That is too") OR UO.InJournal("Try mining") OR ContFlag==0
Next
Next
end sub
;------------------------- Unload ore -------------------------
sub unloadore()
VAR TempX,TempY,i,Exit, Exit1, ConTainer, j
VAR SundukX=5902
VAR SundukY=1088
VAR Index=14 ; количество элементов массива
DIM Ore[5], Colors[20]
Colors[0]="0x09F0" ; Gorgan
Colors[1]="0x09D3" ; Steel
Colors[3]="0x0BA7" ; Eldar
Colors[4]="0x08AF" ; Plut
Colors[5]="0x0085" ; Dragon
Colors[6]="0x0060" ; Aqua
Colors[7]="0x09E6" ; Elvin
Colors[8]="0x010F" ; Krinit
Colors[9]="0x09DA" ; Vulkan
Colors[10]="0x09EC" ; Blood Crest
Colors[11]="0x008F" ; Sand Rock
Colors[12]="0x09B9" ; Acid
Colors[13]="0x09A4" ; Crystaline
TempX=UO.GetX()
TempY=UO.GetY()
walkn(SundukX,SundukY,"")
ToHide()
UO.UseObject("Sunduk")
UO.UseObject("MyBox")
Ore[0]=0x19B9 ; 4 and more ore
Ore[1]=0x19B7 ; 1 ore
Ore[2]=0x19BA ; 2 ore
Ore[3]=0x19B8 ; 3 ore
For i=0 to 3
Exit=0
repeat
UO.FindType(Ore[i])
if UO.GetQuantity('finditem')>0 then
If UO.GetColor('finditem')=='0x0000' Then
Container=UO.GetSerial('IronBag')
Else
Container=UO.GetSerial('OtherBag')
Exit1=0
j=0
While j<Index AND Exit1<>1
If UO.GetColor('finditem')==Colors[j] Then
Container=UO.GetSerial('BestBag')
Exit1=1
Endif
j=j+1
Wend
Endif
UO.MoveItem('finditem',0,Container)
CheckLag()
wait(1000)
Else
Exit=1
endif
until Exit==1
Next
UO.FindType('0x0EED',-1,'backpack')
wait(500)
If UO.FindCount() Then
UO.MoveItem('finditem','all','MyBox')
wait(500)
CheckLag()
Endif
UO.FindType('0x0F0E','0x0000','backpack')
wait(500)
If UO.FindCount() Then
UO.MoveItem('finditem','all','MyBox')
wait(500)
CheckLag()
Endif
LoadRes()
walkn(TempX,TempY,"")
ToHide()
end sub
sub LoadRes()
VAR EdaType='0x097B'
VAR WaitTime=300, InPack
VAR Scrolls=10
VAR Potions=10
VAR VortInPack=0, MassInPack=0
; Eda
UO.FindType(EdaType,-1,'MyBox')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem',100,'backpack')
wait(WaitTime)
CheckLag()
Endif
CheckLag()
Repeat
UO.UseType(EdaType)
wait(1000)
Until UO.InJournal('You can')
UO.FindType(EdaType,-1,'backpack')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem','all','MyBox')
wait(WaitTime)
CheckLag()
Endif
; Inviz
UO.FindType('0x0F0E','0x0631','backpack')
wait(WaitTime)
InPack=UO.GetQuantity('finditem')
IF InPack<Potions Then
UO.FindType('0x0F0E','0x0631','MyBox')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem',Potions-InPack,'backpack')
wait(WaitTime)
Endif
Endif
; Vortex
Vort:
UO.IgnoreReset()
UO.FindType('0x1F66',-1,'backpack')
While UO.FindCount()
VortInPack=VortInPack+UO.GetQuantity('finditem')
wait(WaitTime)
UO.Ignore('finditem')
UO.FindType('0x1F66',-1,'backpack')
Wend
IF VortInPack<Scrolls Then
UO.FindType('0x1F66',-1,'MyBox')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem',Scrolls-VortInPack,'backpack')
wait(WaitTime)
Goto Vort
Endif
Endif
; Dispell
Dispell:
UO.IgnoreReset()
UO.FindType('0x1F62',-1,'backpack')
While UO.FindCount()
MassInPack=MassInPack+UO.GetQuantity('finditem')
wait(WaitTime)
UO.Ignore('finditem')
UO.FindType('0x1F62',-1,'backpack')
Wend
IF MassInPack<Scrolls Then
UO.FindType('0x1F62',-1,'MyBox')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem',Scrolls-MassInPack,'backpack')
wait(WaitTime)
Goto Dispell
Endif
Endif
UO.IgnoreReset()
end sub
;----------- Summon Energy Vortex, kill elem and loot him -----------
sub killelem()
var xx,yy,m
DIM Ore[4]
Ore[0]='0x19B7' ; 1 ore
Ore[1]='0x19BA' ; 2 ore
Ore[2]='0x19B8' ; 3 ore
Ore[3]='0x19B9' ; 4 and more ore
var i, Exit,l
UO.Set('finddistance',10)
uo.usetype('0x0f0e','0x0631') ;inviz
wait(3000)
;0x000D vortex
povtor:
UO.DeleteJournal()
m=UO.Mana
; uo.cast('Energy Vortex','self')
UO.WaitTargetSelf()
uo.usetype('0x1f66')
While UO.Mana>=m
wait(300)
Wend
if uo.injournal('spell fizzles') then
goto povtor
endif
wait(1000)
jdat:
UO.FindType('0x0010',-1,'ground')
wait(300)
If UO.FindCount() Then
UO.FindType('0x000D',-1,'ground')
wait(300)
If UO.FindCount() Then
wait(1000)
goto jdat
Else
goto povtor
End if
End if
dispel:
m=UO.Mana
UO.DeleteJournal()
; uo.cast('Mass Dispel','self')
UO.WaitTargetSelf()
UO.UseType('0x1F62')
While UO.Mana>=m
wait(300)
Wend
if uo.injournal('fizzles') then
goto dispel
end if
xx=UO.GetX()
yy=UO.Gety()
For i=0 to 3
UO.FindType(Ore[i],-1,'ground')
If UO.GetQuantity('finditem')>0 then
Walkn(0,0,'finditem')
UO.Grab('all','finditem')
CheckLag()
UO.FindType('0x0EED',-1,'ground')
If UO.FindCount() Then
UO.Grab('all','finditem')
End if
Endif
Next
Walkn(xx,yy,'')
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()
while NOT UO.Hidden()
UO.DeleteJournal()
UO.FindType('0x0F0E','0x0631','my')
if UO.Life<UO.STR/2 AND UO.GetQuantity('finditem')>0 then
UO.UseType('0x0F0E','0x0631') ; inviz potion
UO.Exec('warmode 0')
wait(2000)
else
UO.Exec('warmode 0')
UO.UseSkill('Stealth')
repeat
wait(100)
until UO.InJournal('You have hidden') OR UO.InJournal('seem to hide') OR UO.InJournal('preoccupied')
endif
wend
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')
end sub
#==============================================================
# Gong(counter) - playing wav-file 'counter'-times
# http://www.jetta.ru/cow.wav
#--------------------------------------------------------------
sub Gong(times) ; play wav-file
VAR i
for i=1 to times
UO.Exec("playwav C:\InformedFile.wav")
wait(1200) ; time to play sample at once
next
end sub
#==============================================================
# Alarm() - when char lose some HP, U are informed
#--------------------------------------------------------------
sub Alarm()
VAR CharHP=190
while 1==1
wait(1000)
if UO.Life<CharHP then
gong(1)
endif
wend
end sub
;---------------- Ходилка -----------------------
sub GoW()
VAR walkwait=300
VAR x,y,dir=6
VAR key=36 ; Home key
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetX()+1==x Then
return -1
Else
return 1
Endif
end sub
sub GoN()
VAR walkwait=300
VAR x,y,dir=0
VAR key=33 ; PgUp
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetY()+1==y Then
return -1
Else
return 1
Endif
end sub
sub GoE()
VAR walkwait=300
VAR x,y,dir=2
VAR key=34 ; PgDown
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetX()-1==x Then
return -1
Else
return 1
Endif
end sub
sub GoS()
VAR walkwait=300
VAR x,y,dir=4
VAR key=35 ; End
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetY()-1==y Then
return -1
Else
return 1
Endif
end sub
sub GoWN()
VAR walkwait=300
VAR x,y,dir=7
VAR key=38 ; UpArrow
x=UO.GetX()
y=UO.GetY()
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
If UO.GetDir()==dir Then
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetDir()==dir Then
return -1
Else
return UO.GetDir()
Endif
Else
return UO.GetDir()
Endif
end sub
sub GoNE()
VAR walkwait=300
VAR x,y,dir=1
VAR key=39 ; RightArrow
x=UO.GetX()
y=UO.GetY()
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
If UO.GetDir()==dir Then
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetDir()==dir Then
return -1
Else
return UO.GetDir()
Endif
Else
return UO.GetDir()
Endif
end sub
sub GoSE()
VAR walkwait=300
VAR x,y,dir=3
VAR key=40 ; DownArrow
x=UO.GetX()
y=UO.GetY()
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
If UO.GetDir()==dir Then
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetDir()==dir Then
return -1
Else
return UO.GetDir()
Endif
Else
return UO.GetDir()
Endif
end sub
sub GoSW()
VAR walkwait=300
VAR x,y,dir=5
VAR key=37 ; LeftArrow
x=UO.GetX()
y=UO.GetY()
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
If UO.GetDir()==dir Then
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetDir()==dir Then
return -1
Else
return UO.GetDir()
Endif
Else
return UO.GetDir()
Endif
end sub
#==============================================================
# WalkN(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 WalkN(x,y,Target)
VAR i
VAR dx,dy,Exit=0
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()
Endif
If dx>0 AND dy<0 Then
GoNE()
Endif
If dx<0 AND dy>0 Then
GoSW()
Endif
If dx<0 AND dy<0 Then
GoWN()
Endif
Endif
If dx<>0 AND dy==0 Then
If dx>0 Then
GoE()
Endif
If dx<0 Then
GoW()
Endif
Endif
If dx==0 AND dy<>0 Then
If dy>0 Then
GoS()
Endif
If dy<0 Then
GoN()
Endif
Endif
Wend
end sub
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 mine') #сюда похоже нужно писать название другого скрипта, который нужно перезапустить после реконекта (для прокачки)
wait(1000)
UO.Exec('exec mine')
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
###############################################################
#===---====----===---===---= Mining =---=-=-=-=-=--=-=-=-=-=-=#
# Single char mining for VIP Mine. DRW Shard http://www.drw.ru #
# Scripted by Savage (c) 2005-2010 ICQ:33336141 #
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
# To start script use ",exec mine" command from client window #
###############################################################
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
;==================== Main mining script ======================
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
sub mine()
UO.Exec('terminate Reconnector')
wait(1000)
uo.exec('exec Reconnector')
VAR DigDistance, TileNum, KillElemental
VAR ElemSignal, LastTimer
DIM BaseX[2], BaseY[2]
VAR BaseZ, WayPoint, WayPoints
VAR MaxWeight
VAR i,j,TileY,TileX,DirX,DirY
VAR Delta,BeginX,EndX,BeginY,EndY
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; TileNum='Num' - Use ",infotile" command on the floor
; Номер тайла в котором можно копать ,потыкайте командой
; ",infotile" по разнвм тайлам и посмотрите не отличаются ли их
; номера.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
TileNum='1339'
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Максимальный вес, который может поднять чар. Ставьте его
; немного меньше реального. То есть если чар поднимает 760, то
; ставим 730.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
MaxWeight=600
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; DigDistance=4 - Distance from tile where pickaxe targeting
; Радиус круга по которому будет копать чар, то есть расстояние
; до клетки куда можно дотянуться киркой.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
DigDistance=3
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; KillElemental='Yes'/'No' - Use 'Yes' if char skilled to morph
; in daemon and wrestling > 50
; Если чар достаточно прокачен чтоб бить элемов, ставьте 'Yes'
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
KillElemental='No'
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; ElemSignal='Off'/'On' - Play sound when elemental is digged
; Оповешать при появлении элема
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
ElemSignal='Off'
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Здесь указываем координаты точек копания. Нужно встать на
; позицию и посмотреть координаты в инжекте. Их и нужно
; подставить вместо моих. Чара ставьте на 4 клетки от стен.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
BaseX[0]=5914
BaseY[0]=1084
BaseZ=0
BaseX[1]=5906
BaseY[1]=1084
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Указываем количество точек копания
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
WayPoints=2
CheckLag()
UO.UseObject('Sunduk')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the') OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("Podoydi k sunduku i tkni v nego pricelom!")
UO.AddObject('Sunduk')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
UO.UseObject('Sunduk')
Else
; UO.Say("Ok! Viju sunduk.")
Endif
CheckLag()
UO.UseObject('MyBox')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the') OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("Pokaji yashik!")
UO.AddObject('MyBox')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
UO.UseObject('MyBox')
Else
; UO.Say("Ok! Viju sunduk.")
Endif
CheckLag()
UO.UseObject('IronBag')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the')OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("V kakoy meshok kidat' Iron Ore")
UO.AddObject('IronBag')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
Else
; UO.Say("Meshok dlya Iron Ore viju")
Endif
CheckLag()
UO.UseObject('OtherBag')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the')OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("V kakoy meshok kidat' rudu?")
UO.AddObject('OtherBag')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
Else
; UO.Say("Meshok dlya rudy viju.")
Endif
CheckLag()
UO.UseObject('BestBag')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal('You can') OR UO.InJournal('What is the')OR UO.Timer()>LastTimer+100
If UO.InJournal('see the') Then
UO.Say("V kakoy meshok kidat' vihu?")
UO.AddObject('BestBag')
While UO.Targeting()==2
wait(500)
Wend
UO.SaveConfig()
Else
; UO.Say("Meshok dlya vihi viju.")
Endif
While NOT UO.Dead()
For WayPoint=0 to WayPoints-1
walkn(BaseX[WayPoint],BaseY[WayPoint],"")
digitstay(MaxWeight,DigDistance,KillElemental,ElemSignal,BaseX[WayPoint],BaseY[WayPoint])
Next
wend
If UO.InJournal('Elemental') then
UO.TextPrint('Elemental founded '+MakeTime())
end sub
; Проверка нужности руды. Закоментировать то что нужно копать.
sub CheckOre()
VAR Cont=1, i=0, Exit=0
VAR Count=0 ; Сколько элементов в массиве.
DIM Ores[15]
; Ores[0]="Rusty"
; Ores[1]="Old Copper"
; Ores[2]="Dull Copper"
; Ores[3]="Copper"
; Ores[4]="Bronze"
; Ores[5]="Silver"
; Ores[6]="Iron"
; Ores[7]="Shadow"
; Ores[8]="Rose"
; Ores[9]="Gold"
; Ores[10]="Agapite"
; Ores[11]="Blood Rock"
; Ores[12]="Verite"
; Ores[13]="Valorite"
; Ores[14]="Mytheril"
While i<Count AND Exit==0
If UO.InJournal(Ores[i]) Then
Cont=0
Exit=1
Endif
; UO.Print(STR(i))
; UO.Print(Ores[i])
i=i+1
Wend
return Cont
end sub
;-------------------- Try to mine under self ------------------
sub digitstay(MaxWeight,MaxDistance,KillElemental,ElemSignal,BaseX,BaseY)
VAR x,y,z='0',TileNum='1339'
VAR Last=0,LastTimer, ContFlag=1
VAR MaxTimer=110
For x=-MaxDistance to MaxDistance
For y=-MaxDistance to MaxDistance
Repeat
CheckLag() ; deleting journal
ToHide()
UO.WaitTargetTile(TileNum,STR(UO.GetX()+x),STR(UO.GetY()+Y),z)
UO.UseType('0x0E85')
LastTimer=UO.Timer()
Repeat
wait(500)
until UO.InJournal("Try mining") OR UO.InJournal("You put") OR UO.InJournal("You loosen") OR UO.InJournal("There is no") OR UO.InJournal("That is too") OR UO.InJournal("OOPS") OR UO.InJournal("attacking you") OR LastTimer+200<UO.Timer()
If NOT UO.InJournal('There is no') then
ContFlag=CheckOre()
Endif
If UO.InJournal('You loosen') then
repeat
wait(300)
until UO.InJournal("You put") OR LastTimer+MaxTimer<UO.Timer()
Endif
If UO.InJournal('something with ore') OR UO.InJournal("Elemental") then
If ElemSignal=='On' Then
Gong(2)
Endif
If KillElemental=='Yes' Then
KillElem()
walkn(BaseX,BaseY,"")
Else
; any user defined command when char digget elemental
Endif
Endif
If UO.InJournal("attacking you") then
gong(3)
Endif
If UO.Weight>=MaxWeight then
unloadore()
Endif
Until UO.InJournal("There is no") OR UO.InJournal("That is too") OR UO.InJournal("Try mining") OR ContFlag==0
Next
Next
end sub
;------------------------- Unload ore -------------------------
sub unloadore()
VAR TempX,TempY,i,Exit, Exit1, ConTainer, j
VAR SundukX=5902
VAR SundukY=1088
VAR Index=14 ; количество элементов массива
DIM Ore[5], Colors[20]
Colors[0]="0x09F0" ; Gorgan
Colors[1]="0x09D3" ; Steel
Colors[3]="0x0BA7" ; Eldar
Colors[4]="0x08AF" ; Plut
Colors[5]="0x0085" ; Dragon
Colors[6]="0x0060" ; Aqua
Colors[7]="0x09E6" ; Elvin
Colors[8]="0x010F" ; Krinit
Colors[9]="0x09DA" ; Vulkan
Colors[10]="0x09EC" ; Blood Crest
Colors[11]="0x008F" ; Sand Rock
Colors[12]="0x09B9" ; Acid
Colors[13]="0x09A4" ; Crystaline
TempX=UO.GetX()
TempY=UO.GetY()
walkn(SundukX,SundukY,"")
ToHide()
UO.UseObject("Sunduk")
UO.UseObject("MyBox")
Ore[0]=0x19B9 ; 4 and more ore
Ore[1]=0x19B7 ; 1 ore
Ore[2]=0x19BA ; 2 ore
Ore[3]=0x19B8 ; 3 ore
For i=0 to 3
Exit=0
repeat
UO.FindType(Ore[i])
if UO.GetQuantity('finditem')>0 then
If UO.GetColor('finditem')=='0x0000' Then
Container=UO.GetSerial('IronBag')
Else
Container=UO.GetSerial('OtherBag')
Exit1=0
j=0
While j<Index AND Exit1<>1
If UO.GetColor('finditem')==Colors[j] Then
Container=UO.GetSerial('BestBag')
Exit1=1
Endif
j=j+1
Wend
Endif
UO.MoveItem('finditem',0,Container)
CheckLag()
wait(1000)
Else
Exit=1
endif
until Exit==1
Next
UO.FindType('0x0EED',-1,'backpack')
wait(500)
If UO.FindCount() Then
UO.MoveItem('finditem','all','MyBox')
wait(500)
CheckLag()
Endif
UO.FindType('0x0F0E','0x0000','backpack')
wait(500)
If UO.FindCount() Then
UO.MoveItem('finditem','all','MyBox')
wait(500)
CheckLag()
Endif
LoadRes()
walkn(TempX,TempY,"")
ToHide()
end sub
sub LoadRes()
VAR EdaType='0x097B'
VAR WaitTime=300, InPack
VAR Scrolls=10
VAR Potions=10
VAR VortInPack=0, MassInPack=0
; Eda
UO.FindType(EdaType,-1,'MyBox')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem',100,'backpack')
wait(WaitTime)
CheckLag()
Endif
CheckLag()
Repeat
UO.UseType(EdaType)
wait(1000)
Until UO.InJournal('You can')
UO.FindType(EdaType,-1,'backpack')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem','all','MyBox')
wait(WaitTime)
CheckLag()
Endif
; Inviz
UO.FindType('0x0F0E','0x0631','backpack')
wait(WaitTime)
InPack=UO.GetQuantity('finditem')
IF InPack<Potions Then
UO.FindType('0x0F0E','0x0631','MyBox')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem',Potions-InPack,'backpack')
wait(WaitTime)
Endif
Endif
; Vortex
Vort:
UO.IgnoreReset()
UO.FindType('0x1F66',-1,'backpack')
While UO.FindCount()
VortInPack=VortInPack+UO.GetQuantity('finditem')
wait(WaitTime)
UO.Ignore('finditem')
UO.FindType('0x1F66',-1,'backpack')
Wend
IF VortInPack<Scrolls Then
UO.FindType('0x1F66',-1,'MyBox')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem',Scrolls-VortInPack,'backpack')
wait(WaitTime)
Goto Vort
Endif
Endif
; Dispell
Dispell:
UO.IgnoreReset()
UO.FindType('0x1F62',-1,'backpack')
While UO.FindCount()
MassInPack=MassInPack+UO.GetQuantity('finditem')
wait(WaitTime)
UO.Ignore('finditem')
UO.FindType('0x1F62',-1,'backpack')
Wend
IF MassInPack<Scrolls Then
UO.FindType('0x1F62',-1,'MyBox')
wait(WaitTime)
If UO.FindCount() Then
UO.MoveItem('finditem',Scrolls-MassInPack,'backpack')
wait(WaitTime)
Goto Dispell
Endif
Endif
UO.IgnoreReset()
end sub
;----------- Summon Energy Vortex, kill elem and loot him -----------
sub killelem()
var xx,yy,m
DIM Ore[4]
Ore[0]='0x19B7' ; 1 ore
Ore[1]='0x19BA' ; 2 ore
Ore[2]='0x19B8' ; 3 ore
Ore[3]='0x19B9' ; 4 and more ore
var i, Exit,l
UO.Set('finddistance',10)
uo.usetype('0x0f0e','0x0631') ;inviz
wait(3000)
;0x000D vortex
povtor:
UO.DeleteJournal()
m=UO.Mana
; uo.cast('Energy Vortex','self')
UO.WaitTargetSelf()
uo.usetype('0x1f66')
While UO.Mana>=m
wait(300)
Wend
if uo.injournal('spell fizzles') then
goto povtor
endif
wait(1000)
jdat:
UO.FindType('0x0010',-1,'ground')
wait(300)
If UO.FindCount() Then
UO.FindType('0x000D',-1,'ground')
wait(300)
If UO.FindCount() Then
wait(1000)
goto jdat
Else
goto povtor
End if
End if
dispel:
m=UO.Mana
UO.DeleteJournal()
; uo.cast('Mass Dispel','self')
UO.WaitTargetSelf()
UO.UseType('0x1F62')
While UO.Mana>=m
wait(300)
Wend
if uo.injournal('fizzles') then
goto dispel
end if
xx=UO.GetX()
yy=UO.Gety()
For i=0 to 3
UO.FindType(Ore[i],-1,'ground')
If UO.GetQuantity('finditem')>0 then
Walkn(0,0,'finditem')
UO.Grab('all','finditem')
CheckLag()
UO.FindType('0x0EED',-1,'ground')
If UO.FindCount() Then
UO.Grab('all','finditem')
End if
Endif
Next
Walkn(xx,yy,'')
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()
while NOT UO.Hidden()
UO.DeleteJournal()
UO.FindType('0x0F0E','0x0631','my')
if UO.Life<UO.STR/2 AND UO.GetQuantity('finditem')>0 then
UO.UseType('0x0F0E','0x0631') ; inviz potion
UO.Exec('warmode 0')
wait(2000)
else
UO.Exec('warmode 0')
UO.UseSkill('Stealth')
repeat
wait(100)
until UO.InJournal('You have hidden') OR UO.InJournal('seem to hide') OR UO.InJournal('preoccupied')
endif
wend
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')
end sub
#==============================================================
# Gong(counter) - playing wav-file 'counter'-times
# http://www.jetta.ru/cow.wav
#--------------------------------------------------------------
sub Gong(times) ; play wav-file
VAR i
for i=1 to times
UO.Exec("playwav C:\InformedFile.wav")
wait(1200) ; time to play sample at once
next
end sub
#==============================================================
# Alarm() - when char lose some HP, U are informed

#--------------------------------------------------------------
sub Alarm()
VAR CharHP=190
while 1==1
wait(1000)
if UO.Life<CharHP then
gong(1)
endif
wend
end sub
;---------------- Ходилка -----------------------
sub GoW()
VAR walkwait=300
VAR x,y,dir=6
VAR key=36 ; Home key
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetX()+1==x Then
return -1
Else
return 1
Endif
end sub
sub GoN()
VAR walkwait=300
VAR x,y,dir=0
VAR key=33 ; PgUp
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetY()+1==y Then
return -1
Else
return 1
Endif
end sub
sub GoE()
VAR walkwait=300
VAR x,y,dir=2
VAR key=34 ; PgDown
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetX()-1==x Then
return -1
Else
return 1
Endif
end sub
sub GoS()
VAR walkwait=300
VAR x,y,dir=4
VAR key=35 ; End
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
wend
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetY()-1==y Then
return -1
Else
return 1
Endif
end sub
sub GoWN()
VAR walkwait=300
VAR x,y,dir=7
VAR key=38 ; UpArrow
x=UO.GetX()
y=UO.GetY()
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
If UO.GetDir()==dir Then
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetDir()==dir Then
return -1
Else
return UO.GetDir()
Endif
Else
return UO.GetDir()
Endif
end sub
sub GoNE()
VAR walkwait=300
VAR x,y,dir=1
VAR key=39 ; RightArrow
x=UO.GetX()
y=UO.GetY()
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
If UO.GetDir()==dir Then
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetDir()==dir Then
return -1
Else
return UO.GetDir()
Endif
Else
return UO.GetDir()
Endif
end sub
sub GoSE()
VAR walkwait=300
VAR x,y,dir=3
VAR key=40 ; DownArrow
x=UO.GetX()
y=UO.GetY()
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
If UO.GetDir()==dir Then
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetDir()==dir Then
return -1
Else
return UO.GetDir()
Endif
Else
return UO.GetDir()
Endif
end sub
sub GoSW()
VAR walkwait=300
VAR x,y,dir=5
VAR key=37 ; LeftArrow
x=UO.GetX()
y=UO.GetY()
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
If UO.GetDir()==dir Then
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
Endif
If UO.GetDir()==dir Then
return -1
Else
return UO.GetDir()
Endif
Else
return UO.GetDir()
Endif
end sub
#==============================================================
# WalkN(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 WalkN(x,y,Target)
VAR i
VAR dx,dy,Exit=0
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()
Endif
If dx>0 AND dy<0 Then
GoNE()
Endif
If dx<0 AND dy>0 Then
GoSW()
Endif
If dx<0 AND dy<0 Then
GoWN()
Endif
Endif
If dx<>0 AND dy==0 Then
If dx>0 Then
GoE()
Endif
If dx<0 Then
GoW()
Endif
Endif
If dx==0 AND dy<>0 Then
If dy>0 Then
GoS()
Endif
If dy<0 Then
GoN()
Endif
Endif
Wend
end sub
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 mine') #сюда похоже нужно писать название другого скрипта, который нужно перезапустить после реконекта (для прокачки)
wait(1000)
UO.Exec('exec mine')
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
Last edited by devileeeee on 2011-01-30 15:13:36, edited 1 time in total.
-
- Posts: 3
- Joined: 2010-12-19 11:55:56
Re: мининг скалы + вортекс
это глючный скрипт номер 2 с ходилкой и обкопом
#########################################################
### Mining Mountains / Копание скалл v5.1.7 Full ###
#########################################################
### Шард Dragon World ###
#########################################################
### Внимание:
### Для работы скрипта нужна версия YokoInjection 4ZD.
### Скачать dll этой версии можно
### от сюда: http://www.swines.nm.ru/injection.zip
#########################################################
### Авторы:
### -Автор скрипта:"Аskaneli".
### -Редактировал и дополнял:"BETEPAH".
### -Идеи и редкатирование скрипта:"cOoler".
### -За помощь в доработке скрипта спасибо:"Legio".
### Спасибо всем кто каким либо образом помогал в
### разработке этого скрипта.
#########################################################
############################
### Описание и настройка ###
############################
### Обратите внимание на значки "]![" ими выделенны важные сообщения.
###
### Чар бегает от точки к точке (координаты точек берет из файла).
### Выкопает, бежит к следующей, при весе 600 стоунов в паке порталится домой
### скидывает руду в сундук,
### после реколится обратно бежит к последней точке копания и продолжает копать.
### Пример: В файле 100 точек копания, вы выкопав 74 дошли до придела в весе в
### 550 стоунов сработала система рекола
### и вы "порталитесь" домой и складываете руду в сундук, после вы реколитесь
### обратно к месту копаня и бежите к 75 точке.
### Дойдя до 100 точки (тоесть последней в списке) чар перейдет к 1ой точке.
### (Цикличность)
### ]![ Для корректной работы скрипта нужно замарчить не менее 80 точек. ]![
###
####################
### Нововведения ###
####################
### 1)Полностью изменены системы сброса руды и рекола по руне от пк(теперь
### физлить невозможно). [cOoler]
### 2)Временно удалены функции - речарж рунбуки и хаванья, в следующих версиях
### опять появяться!. [cOoler]
### 3)Доработана ходилка, теперь проверяет растояние от точки до чара при
### каждом шаге. [cOoler]
### 4)Теперь сундук для логов задается таргетом вместе с рунбукой и руной ...
### рекол на место копания происходит автоматом. [cOoler]
### ]![ ПРИ возникновении глюков .. ошибок и другой лабуды пишите в ICQ! ]![
###
###################################
### Режимы работы скрипта ###
###################################
### Работает в 2х режимах: ###
### 1)Маркировка ###
### 2)Копание ###
###################################
### Режим Первый - "Маркировка" ###
###################################
### Этот режим отвечает за Маркирование(записывание координат) точек копания.
### Включается переменной var GetFromFile=0 ## 1 - координаты деревьев будут
### считыватся из файла, 0 - собиратся из клиента.
### То есть если GetFromFile=1 координаты деревьев собиратся из клиента.
###
### Маркировка происходит так:
### Поставте переменную GetFromFile равную 0 (GetFromFile=1).
### Положите к себе в сумку Рунбук(с рунами домой и в лес), Руну(в безопастное
### место) и Кирку.
### Идите на место где вы хотите копать.
### Запустите Скрипт GoMining(), инжект попросит вас указать Рунбук
### (появится прицел,прицелом на него).
### Инжект сообщит вам что ('Собираем координаты руды в округе...').
### Инжект возьмет в руки Кирку.
### Теперь вы должны в любом порядке сами прицелом указать координаты
### (достаточно просто нажать прицелом на скалу или пол в шахте).
### ]![ Для марка точек капания требуется соблюдать расстояние больше чем 4
### тайла, т.е. чтобы чар не копал. ]![
### Если вы не промахнулись и "нажали" на подходящее для копания место, то
### инжект сообщит вам об этом(Найдена руда "координаты руды").
### Причем что если даже вы нажмете два раза на одно и тоже место то он
### не "запомнит" его повторно.
### Ходите и марчите точки копания.
### Для того чтобы остановить марк нажмите таргетом на себя.
### Инжект напишет вам сообщение ('Анализ закончен, координаты руды записаны в
### файл C:\Ore.dat') и создаст файл на диске
### С:\ куда запишет координаты точек копания.
### После этого чар пойдет по координатам и будет копать.
###
################################
### Режим Второй - "Копание" ###
################################
### Этот режим соответственно отвечает за Копание.
### Включается переменной var GetFromFile=0 ## 1 - координаты деревьев будут
### считыватся из файла, 0 - собиратся из клиента
### То есть если GetFromFile=1 координаты деревьев будут считыватся из файла.
### И вам не надо будет сново марчить точки копания.
###
### Копание происходит так:
### Поставте переменную GetFromFile равную 1 (GetFromFile=1).
### Положите к себе в сумку Кирку, Руну(в безопастное место) и Рунбук(с рунами
### домой и в лес).
### ]![ Внимание в скрипте номера рун в рунбуке настроены под ДРВ шард. ]![
###
#########################################
### Дополнительные функции скрипта ###
#########################################
### В скрипте 3 доп. функций: ###
### 1)Рекол при Атаке ###
### 2)Килл Элементала ###
### 3)Реконнект ###
##########################################
### Функция Первая - "Рекол при Атаке" ###
##########################################
### Этот режим соответственно отвечает за Рекол при атаке ентов и не только.
### Включается переменной var ControlOfDanger=0 ## 1 - Включить рекол по руне(в
### паке) при атаке, 0 - отключить рекол.
### То есть если ControlOfDanger=1 чар будет реколиться при атаке.
###
### Побег происходит так:
### Поставте переменную ControlOfDanger равную 1 (ControlOfDanger=1).
### Замарчите Руну в безопастном месте.
### Положите к себе в сумку
### Руну(которую замарчили в безопастном месте), Реагенты(Black Pearls,Blood
### Moss,Mandrake Root.)
### и Бутылки расчитывая на то сколько вы хотите рубить.(Invizible Potion,Mana
### Potion,Heal Potion).
### При атаке вы выпиваете Invizible Potion, автоматически телепортитесь на то
### место,
### где замаркана руна(в бакпаке).
### В это время записывается имя того кто вас атачил.
### После рекола руна маркается и проверяется ваша мана и здоровье, если чегото
### меньше,
### чар выпивает Mana Potion или Heal Potion в зависимости от надобности.
###
######################################
### Вариант Первый - "Цыкличность" ###
######################################
### Есди вы хотите чтобы скрипт не прекращал свою работу, то поставьте
### переменную CycleScript раную 1 (CycleScript=1).
### Теперь после рекола скрипт не будет выключаться, а будет ждать указанное
### время(DangerTime) и затем
### реколиться домой, речаржить рунбуку, есть и опять реколиться на место
### копания и копать.
###
#####################################
### Вариант Второй - "Выключение" ###
#####################################
### Есди вы хотите чтобы скрипт не прекращал свою работу, то поставьте
### переменную CycleScript раную 0 (CycleScript=0),
### Теперь после рекола скрипт выключится и закроет окно UO.
###
##########################################
### Функция Вторая - "Килл Элементала" ###
##########################################
### Этот режим соответственно отвечает за Килл Элементала при выкидывании с
### сервера.
### var ElementalKill=0 ## 1 - Вылючить килл элементала, 0 - отключить.
### То есть если ElementalKill=1 чар будет килять элема.
### Если вы поставите переменную ElementalKill равную 1 (ElementalKill=1), то
### чар будет килять элементала.
### Если вы поставите переменную ElementalKill равную 0 (ElementalKill=0), то
### чар будет реколиться от элементала.
###
### Реконнект происходит так:
### Поставте переменную ElementalKill равную 1 (ElementalKill=1).
### Положите к себе в сумку
### Реагенты и Бутылки расчитывая на то сколько вы хотите рубить.(Invizible
### Potion,Mana Potion,Heal Potion).
### После того как будет выкопан элементал, чар выпьет инвизку, морфнется в
### демона, возьмет в руки щит и будет пытаться
### кильнуть элеменала.
### После того как он кильнет элементала, будет произведен лут, после чего чар
### продолжит копать.
###
####################################
### Функция Третья - "Реконнект" ###
####################################
### Этот режим соответственно отвечает за Реконнект при выкидывании с сервера.
### Включается переменной var Reconnect=1 ## 1 - Включить реконнект на сервер
### если выкинет, 0 - отключить реконнект.
### То есть если Reconnect=1 чар будет реколиться при атаке.
###
### Реконнект происходит так:
### Поставте переменную Reconnect равную 1 (Reconnect=1).
### Если вдруг повиснет игровая сфера или вас выкинет по любой другой причине
### реконнектор законнектит ваc на сервер автоматически.
### Пишется время дисконнекта и коннекта на сервер.
###
### ]![ Настройте скрипт под себя при помощи переменных. ]![
###
##################
### Переменные ###
##################
################################################################################
###################
var FileName=('C:\ore.dat') ## - Путь к файлу в котором будут хранится
### координаты где копать.
###
var TryHiding=1 ## 1 - Перед тем как копать руду, будет пытаться уйти в хайд,
### 0 - не будет .
###
var TryRecall=1 ## 1 - После того как соберет достаточный вес, будет пытаться
### реколиться домой,
### складывать руду в сундук и реколиться обратно , 0 - не будет.(DropOnVip
### должно быть 0)
###
var RuneToHome=6 ## - Номер руны Домой,по счёту в рунбуке.(сейчас в 4ом
### слоте,можнnfv? ult rehcjh cnjbn b Дшту о менять от 1-9)
###
var RuneToMining=5 ## - Номер руны в место где копаем,по счёту в рунбуке.
### (сейчас в 5ом слоте,можно менять от 1-9)
###
var GetFromFile=1 ## 1 - Координаты где копать будут считыватся из файла, 0 -
### собиратся из клиента
### (сначала соберите а потом считывайте из файла).
###
var OreQty=600 ## - Максимальный вес, добыв который надо реколиться домой.
### (сейчас 600 стоунов)
###
var ControlOfDanger=0 ## 1 - Включить рекол по руне(в паке) при атаке, 0 -
### отключить рекол.
###
var ElementalKill=0 ## 1 - Вылючить килл элементала, 0 - отключить(рекол).
###
var DangerousTime=50000 ## - Время в секундах которое чар будет ждать(после
### рекола) пока уйдет ПК или Элемент.(сейчас 50 секунд)
###
var CycleScript=0 ## 1 - Скрипт не отключается после рекола от атакующего, 0 -
### отключаетсяи закрывает UO.
###
var Reconnect=1 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить
### реконнект.
###
var DisturbingSound=('C:\warning.wav') ## - Звук которы будет пригран при атаке.
### (замените на свой)
###
var DropX=2023 ## - Координата перед сундуком по X.
###
var DropY=414 ## - Координата перед сундуком по Y.
###
var DropOnVip=0 ## - Если в ВИП пещере пожходить к сундука и сбрасывать руду.
### (TryRecall должно быть 0)
################################################################################
###################
###
### После настройки:
### Идите в место где будем копать.
### Запустите cкрипт GoMining(), инжект попросит вас указать Кирку(появится
### прицел, прицелом на неё),
### Рунбук(появится прицел, прицелом на него) ,Руну(прицелом на нее) и Сундук
### для логов.
### После этого чар пойдет по координатам и будет копать руду.
###########
### Код ###
###########
sub GoMining()
uo.Print('Выбери Кирку: ')
uo.Exec('addobject Pickaxe')
while uo.Targeting()
wait(100)
wend
if TryRecall==1 then
uo.Print('Выбери PунБук: ')
uo.Exec('addobject Runebook')
while uo.Targeting()
wait(100)
wend
end if
if ControlOfDanger==1 then
uo.Print('Выбери Руну: ')
uo.Exec('addobject Rune')
while uo.Targeting()
wait(100)
wend
end if
uo.Print('Выбери Сундук: ')
uo.Exec('addobject Chest')
while uo.Targeting()
wait(100)
wend
if ControlOfDanger==1 then
uo.Exec('exec ControlOfDanger')
end if
if Reconnect==1 then
uo.Exec('exec Reconnect')
end if
if DropOnVip==0 then
RecallToOre()
end if
uo.Exec('exec Mining')
end sub
sub Mining()
var i=0,j=0,k=0,r=0,q=0,ii,jj,f
var TopX=324,TopY=65
dim OreX[5000],OreY[5000],OreT[5000]
dim OreTile[21]
var flag=0,OreCount=0,clicks=0,flag2=0
####################
### Графика руды ###
####################
OreTile[0]=1339
OreTile[1]=1355
OreTile[2]=1354
OreTile[3]=1359
OreTile[4]=1358
OreTile[5]=1357
OreTile[6]=1352
OreTile[7]=1341
OreTile[8]=1363
OreTile[9]=1359
OreTile[10]=1339
OreTile[11]=1354
OreTile[12]=1386
OreTile[13]=1353
OreTile[14]=2278
OreTile[15]=2282
OreTile[16]=2281
OreTile[17]=2277
OreTile[18]=2278
OreTile[19]=2275
OreTile[20]=1351
OreTile[21]=0
uo.FilterSpeech('on')
uo.FilterSpeech('add', 'Where do you want to use the pickaxe?')
#####################################
### Загружаем координаты из файла ###
#####################################
if GetFromFile==1 then
uo.Print('Загружаем координаты из файла...')
f=file(FileName)
f.Open()
OreCount=safe call f.ReadNumber()
for i=1 to OreCount
OreT[i]=safe call f.ReadNumber()
OreX[i]=safe call f.ReadNumber()
OreY[i]=safe call f.ReadNumber()
next
f.Close()
else
######################################
### Собираем координаты из клиента ###
######################################
uo.Print('Собираем координаты руды в округе...')
repeat
clicks=0
flag=0
uo.DeleteJournal()
#######################
### Кликаем на тайл ###
#######################
uo.UseObject('Pickaxe')
wait(500)
uo.DeleteJournal()
while uo.Targeting()
wait(100)
wend
###########################
### Проверяем то ли это ###
###########################
flag=0
for k=0 to 21
if uo.LastTile(0)==OreTile[k]+1 then
flag=2
end if
next
if flag==0 then
for k=0 to 21
if uo.LastTile(0)==OreTile[k] then
flag=1
end if
next
end if
if uo.Lasttile(1)==uo.GetX() and uo.Lasttile(2)==uo.Gety() then
flag=3
end if
########################
### Кликнули на тайл ###
########################
if flag==1 then
flag2=0
if OreCount>0 then
for ii=1 to OreCount
if OreX[ii]==uo.LastTile(1) and OreY[ii]==uo.LastTile(2) then
flag2=1
end if
next
end if
if flag2==0 then
OreCount=OreCount+1
OreX[OreCount]=uo.LastTile(1)
OreY[OreCount]=uo.LastTile(2)
OreT[OreCount]=uo.LastTile(0)
uo.Print('Найдена руда номер '+str(OreCount)+' : x='+str(uo.Lasttile(1))+'
y='+str(uo.LastTile(2)))
end if
end if
#####################
### Кликнули выше ###
#####################
if flag==2 then
flag2=0
if OreCount>0 then
for ii=1 to OreCount
if OreX[ii]==uo.LastTile(1) and OreY[ii]==uo.LastTile(2) then
flag2=1
end if
next
end if
if flag2==0 then
OreCount=OreCount+1
OreX[OreCount]=uo.LastTile(1)
OreY[OreCount]=uo.LastTile(2)
OreT[OreCount]=uo.LastTile(0)-1
uo.print('Найдена руда номер '+str(OreCount)+' : x='+str(uo.Lasttile(1))+'
y='+str(uo.LastTile(2)))
end if
end if
until (Flag==3) or (OreCount==5000)
uo.FilterSpeech('off')
uo.Print('Анализ закончен, координаты руды записаны в файл ' +FileName)
SaveToFile(OreCount,OreX,OreY,OreT)
end if
uo.Print('Координат найдено: '+str(OreCount))
wait(2000)
######################################
### Ходим по собранным координатам ###
######################################
while 1==1
if OreCount>0 then
for i=1 to OreCount
if TryRecall==1 and uo.Weight>OreQty then
ToRecall()
i=1
end if
if DropOnVip==1 and TryRecall==0 and uo.Weight>OreQty then
DropOnVip()
i=1
end if
j=i*2-1
if j>OreCount then
j=2*(OreCount-i+1)
end if
InfoOre()
flag=WalkN(OreX[j],OreY[j], '')
if TryHiding==1 then
ToHide()
end if
; if flag==1 then
GetOre(str(OreT[j]),str(OreX[j]),str(OreY[j]),str(uo.GetZ()))
; end if
next
end if
wend
end sub
sub SaveToFile(OreCount,OreX,OreY,OreT)
var s=0,i=0,f
f=file(FileName)
f.Open()
f.Create()
s=safe call f.Writeln(OreCount)
for i=1 to OreCount
s=safe call f.Writeln(str(OreT[i])+' '+str(OreX[i])+' '+str(OreY[i]))
next
f.Close()
end sub
sub GetOre(Type,X,Y,Z)
var mx, my, mz, i, j
mx = UO.GetX("self")
my = UO.GetY("self")
mz = UO.GetZ("self")
UO.DeleteJournal()
for i = mx-2 to mx+2
for j = my -2 to my+2
while not UO.Hidden()
UO.Warmode("0")
uo.print("pryachemsa...")
UO.UseSkill("Hiding")
wait(4000)
wend
UO.Print("kopaem v koord: "+str(mx-i)+" "+str(my-j))
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("Copper") and not UO.InJournal("Rusty Ore")
UO.DeleteJournal()
if uo.waiting() then
uo.canceltarget()
endif
UO.Waittargettile("1341", str(i), str(j), str(mz))
UO.Usetype(uo.GetGraphic("Pickaxe"))
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 (500)
if uo.injournal("heavy") or uo.dead() then
DisturbingSound(1)
DangerWait()
endif
wend
wend
UO.DeleteJournal()
next
next
return 0
end sub
sub WaitForChange()
var Text1=uo.GetName()+': You loosen some rocks but fail to find any useable
ore.'
var Text2='There is no ore here to mine.'
var Text3="You can't reach this."
var Text4="That is too far away."
var Text5="You can't do much in your current state."
var Text6="You have no line of sight to that location"
var Text7="You can't see the target"
var Text8="Try mining in rock."
var mess
for var i=0 to 200
mess=uo.Journal(0)
if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text6 or uo.Journal(0)==Text7 or uo.Journal(0)==Text8 then
return 1
end if
if uo.Journal(0)==Text1 then
wait(1000)
return 0
end if
if mess[0]=='Y' and mess[1]=='o' and mess[2]=='u' and mess[4]=='p' and mess[5] =='u' and mess[6]=='t' then
return 0
end if
wait(50)
next
return 0
end sub
sub Open(Container)
uo.DeleteJournal()
uo.UseObject(Container)
repeat
wait(500)
until uo.InJournal('Contains')
end sub
#####################################################
sub WalkN(x,y,Target)
VAR LastTimer
LastTimer=UO.Timer()
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"
uo.say('')
While Exit<>1 or not uo.injournal('You are too overloaded to move')
If Target<>"" Then
dx=UO.GetX(Target)-UO.GetX()
dy=UO.GetY(Target)-UO.GetY()
If UO.GetDistance(Target)<2 OR LastTimer+100<UO.Timer() Then
wait(1000)
return
Endif
Else
dx=x-UO.GetX()
dy=y-UO.GetY()
If dx==0 AND dy==0 OR LastTimer+100<UO.Timer() Then
return
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=405
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=405
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
#####################################################
sub InfoOre()
uo.Print('У вас всего '+str(uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count ('0x19B9')+uo.Count('0x19BA'))+' руды в сумке')
uo.Print('Из нее '+str(uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000') +uo.Count('0x19B9','0x0000')+uo.Count('0x19BA','0x0000'))+' железо и ' +str (uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA')- (uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000')+uo.Count ('0x19B9','0x0000')+uo.Count('0x19BA','0x0000')))+' цветмет')
end sub
sub ToHide()
while not uo.Hidden()
uo.Exec('warmode 0')
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(6000)
wend
wait(100)
end sub
sub ToRecall()
RecallToHome()
DropOre()
RecallToOre()
end sub
sub RecallToHome()
uo.Print('Прыгаем Домой.')
RunebookRecall(RuneToHome)
end sub
sub RecallToOre()
uo.Print('Прыгаем в Пещеру.')
RunebookRecall(RuneToMining)
end sub
sub RunebookRecall(n)
var OldX,OldY,Time
OldX=uo.GetX()
OldY=uo.GetY()
repeat
uo.Exec('warmode 0')
uo.UseObject('Runebook')
CheckLag()
uo.Lclick(135, n*15+55)
CheckLag()
Time=uo.Timer()
repeat
wait(500)
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') or uo.InJournal('fizzles') or (Time+200<uo.Timer())
uo.DeleteJournal()
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs')
end sub
sub DropOre()
var o,exit
dim Ore[14]
Ore[0]=0x19B9
Ore[1]=0x19B7
Ore[2]=0x19BA
Ore[3]=0x19B8
Ore[4]=0x0F11
Ore[5]=0x0F16
Ore[6]=0x0F18
Ore[7]=0x0F15
Ore[8]=0x0F10
Ore[9]=0x0F0F
Ore[10]=0x0F26
Ore[11]=0x1F4C
Ore[12]=0x0EED
Ore[13]=0x0F20
ToHide()
if uo.Waiting() then
uo.CancelTarget()
end if
uo.SetReceivingContainer('Chest')
wait(500)
for o=0 to 13
exit=0
repeat
uo.FindType(Ore[o])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
uo.UnSetReceivingContainer('Chest')
end sub
sub DropOnVip()
Walk(DropX,DropY,'')
DropOre()
end sub
sub ControlOfDanger()
var danger
var RecallPhysicalDanger=1
var RecallSeenDanger=0
var RecallBluePlayer=0
while 1
uo.DeleteJournal()
while not uo.InJournal(':')
wait(100)
wend
danger=uo.GetNotoriety(uo.JournalSerial(0))
if uo.InJournal('OOPS') then
if ElementalKill==1 then
uo.Exec('exec ElementalKill')
end if
if ElementalKill==0 then
uo.Exec('exec RecallRune')
end if
end if
if RecallPhysicalDanger==1 then
if uo.InJournal('attacking you') then
uo.Exec('exec RecallRune')
end if
end if
if RecallSeenDanger==1 then
if danger==6 and uo.JournalSerial(0)<>uo.GetSerial() then
uo.Exec('exec RecallRune')
end if
if danger==4 and uo.JournalSerial(0)<>uo.GetSerial() then
uo.Exec('exec RecallRune')
end if
end if
if RecallBluePlayer==1 then
if danger==1 and uo.JournalSerial(0)<>uo.GetSerial() then
uo.Exec('exec RecallRune')
end if
end if
wend
end sub
sub RecallRune()
var MX=uo.GetX('self')
var MY=uo.GetY('self')
Terminate()
uo.PlayWav(DisturbingSound)
uo.UseType('0x0F0E','0x0631')
wait(100)
Recall:
uo.DeleteJournal()
if uo.Waiting() then
uo.CancelTarget()
end if
uo.WaittargetObject('Rune')
wait(100)
uo.Cast('Recall')
wait(3000)
if not uo.GetX('self')<>MX and not uo.GetY('self')<>MY then
goto Recall
end if
repeat
uo.DeleteJournal()
uo.WaittargetObject('Rune')
uo.Cast('Mark')
if uo.InJournal('mana for this spell') then
ManaUp('Bottle')
wait(100)
end if
wait(3000)
until not uo.InJournal('spell fizzles')
if uo.Life<uo.STR then
LifeUp('Bottle')
wait(100)
end if
if CycleScript==1 then
uo.Exec('exec DangerWait')
end if
if CycleScript==0 then
uo.Exec('exec ExitUO')
end if
end sub
sub DisturbingSound(amount)
var i
for i=1 to amount
uo.PlayWav(DisturbingSound)
wait(1500)
next
end sub
sub DangerWait()
wait(DangerousTime)
ToRecall()
uo.Exec('exec Mining')
end sub
sub ExitUO()
wait(3000)
uo.CloseUO()
end sub
sub LifeUp(Mode)
if Mode=='Healing' then
while uo.Life<uo.STR
uo.Exec('bandageself')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Life<uo.STR then
uo.UseType('0x0F0E','0x09BB')
wait(100)
end if
end if
end sub
sub ManaUp(Mode)
if Mode=='Meditation' then
while uo.Mana<uo.INT
uo.Exec('useskill Meditation')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Mana<uo.INT then
uo.UseType('0x0F0E','0x09DF')
wait(100)
end if
end if
end sub
sub ElementalKill()
var Count,LastTimer,Elemental
var o,exit
dim Ore[13]
Ore[1]=0x19B9
Ore[2]=0x19B7
Ore[3]=0x19BA
Ore[4]=0x19B8
Ore[5]=0x0F11
Ore[6]=0x0F16
Ore[7]=0x0F18
Ore[8]=0x0F15
Ore[9]=0x0F10
Ore[10]=0x0F0F
Ore[11]=0x0F26
Ore[12]=0x1F4C
Ore[13]=0x0EED
Terminate()
uo.UseType('0x0F0E','0x0631') ## - Инвизка(тип,цвет).
while uo.STR<uo.Life+1
if uo.Mana>=50 then
uo.WaitMenu('What', 'Daemon')
uo.Cast('Polymorph')
wait(8000)
else
uo.UseType('0x0F0E','0x09DF') ## - Тотал Мана(тип,цвет).
wait(3000)
end if
wend
LastTimer=uo.Timer()
repeat
uo.BandageSelf()
wait(4000)
until uo.Life==uo.STR or LastTimer+300<uo.Timer()
uo.UseType('0x1B76') ## - Хеатер Щит(тип).
uo.DeleteJournal()
uo.Exec('warmode 1')
uo.FindType('0x0010',-1,'ground')
Elemental=uo.GetSerial('finditem')
uo.Attack(Elemental)
repeat
wait(1000)
if uo.Life<50>1 then
WalkN(0,0,Elemental)
end if
until uo.IsNPC(Elemental)==0
wait(3000)
uo.Exec('warmode 0')
wait(1000)
LastTimer=uo.Timer()
uo.DeleteJournal()
for o=1 to 13
exit=0
repeat
uo.FindType(Ore[o],-1,'ground')
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
### uo.Exec('warmode 1')
uo.Exec('warmode 0')
uo.Exec('exec Mining')
end sub
sub Reconnect()
var ReconnectTime,rflag
ReconnectTime='0'
rflag=1
repeat
while (uo.ObjAtLayer('Bpack')=='')
if rflag then
ReconnectTime=Time()
rflag=0
end if
wait(20000)
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.TextOpen()
uo.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
rflag=1
ReconnectTime='0'
end if
until false
end sub
sub Time()
var Date,nTime,uTime,i
uTime=str(uo.Time())
nTime=''
for i=0 to Len(uTime)
nTime=uTime[Len(uTime)-i]+nTime
if (i==2) or (i==4) then
nTime=':'+nTime
end if
next
uTime=str(uo.Date())
Date=''
for i=0 to Len(uTime)
Date=uTime[Len(uTime)-i]+Date
if (i==2) or (i==4) then
Date='.'+Date
end if
next
uTime=nTime+' @ '+Date
return uTime
end sub
sub Terminate()
uo.Exec('terminate Mining')
end sub
sub TerminateAll()
uo.Exec('terminate Mining')
uo.Exec('terminate ControlOfDanger')
uo.Exec('terminate Reconnect')
uo.Exec('terminate RecallRune')
uo.Exec('terminate DropOre')
uo.Exec('terminate DangerWait')
uo.Exec('terminate DangerWait')
end sub
sub CheckLag()
if uo.Waiting()>0 then
uo.Exec('canceltarget')
end if
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(50)
until uo.InJournal('backpack')
end sub
sub GoCorpse()
var Elemental='0x4000466F'
Walk(0,0,Elemental)
end sub
sub Walk(X,Y,Target)
var Targeting=''
var Result
var DX,DY,GLX,GLY
var DirW=0
var exit=0
while exit<>1
if Target<>'' then
Targeting=Target
DX=uo.GetX(Target)-uo.GetX()
DY=uo.GetY(Target)-uo.GetY()
if uo.GetDistance(Target)<2>0 and DY>0 then
DirW=9
end if
if DX>0 and DY<0 then
DirW=7
end if
if DX<0>0 then
DirW=3
end if
if DX<0 and DY<0 then
DirW=5
end if
if DX<0>0 then
DirW=8
else
DirW=4
end if
end if
if DX==0 and DY<0>0 then
DirW=2
else
DirW=6
end if
end if
Result=Go(DirW)
if Result==0 then
Result=Go(DirW-2)
if Result==0 then
Result=Go(DirW+2)
end if
end if
end if
wend
end sub
sub Go(dir)
var WalkWait=100
var Targeting=''
var X,Y,GLX,GLY
var check=1
var StartingDir=uo.GetDir()
X=uo.GetX()
Y=uo.GetY()
dim MoveKey[12]
MoveKey[0]=34
MoveKey[1]=40
MoveKey[2]=35
MoveKey[3]=37
MoveKey[4]=36
MoveKey[5]=38
MoveKey[6]=33
MoveKey[7]=39
MoveKey[8]=34
MoveKey[9]=40
MoveKey[10]=35
MoveKey[11]=37
dim StartDir[12]
StartDir[0]=2
StartDir[1]=3
StartDir[2]=4
StartDir[3]=5
StartDir[4]=6
StartDir[5]=7
StartDir[6]=0
StartDir[7]=1
StartDir[8]=2
StartDir[9]=3
StartDir[10]=4
StartDir[11]=5
while uo.GetDir()<>StartDir[dir]
uo.Press(MoveKey[dir])
wait(WalkWait)
if uo.GetDir()==StartingDir then
CheckLag()
end if
if (Targeting<>'' and uo.GetDistance(Targeting)<2) or (GLX==0 and GLY==0) then
return 1
end if
wend
uo.Press(MoveKey[dir])
wait(WalkWait)
if X==uo.GetX() and Y==uo.GetY() then
CheckLag()
uo.Press(MoveKey[dir])
wait(WalkWait)
end if
if X==uo.GetX() and Y==uo.GetY() then
return 0
else
return 1
end if
end sub
#########################################################
### Mining Mountains / Копание скалл v5.1.7 Full ###
#########################################################
### Шард Dragon World ###
#########################################################
### Внимание:
### Для работы скрипта нужна версия YokoInjection 4ZD.
### Скачать dll этой версии можно
### от сюда: http://www.swines.nm.ru/injection.zip
#########################################################
### Авторы:
### -Автор скрипта:"Аskaneli".
### -Редактировал и дополнял:"BETEPAH".
### -Идеи и редкатирование скрипта:"cOoler".
### -За помощь в доработке скрипта спасибо:"Legio".
### Спасибо всем кто каким либо образом помогал в
### разработке этого скрипта.
#########################################################
############################
### Описание и настройка ###
############################
### Обратите внимание на значки "]![" ими выделенны важные сообщения.
###
### Чар бегает от точки к точке (координаты точек берет из файла).
### Выкопает, бежит к следующей, при весе 600 стоунов в паке порталится домой
### скидывает руду в сундук,
### после реколится обратно бежит к последней точке копания и продолжает копать.
### Пример: В файле 100 точек копания, вы выкопав 74 дошли до придела в весе в
### 550 стоунов сработала система рекола
### и вы "порталитесь" домой и складываете руду в сундук, после вы реколитесь
### обратно к месту копаня и бежите к 75 точке.
### Дойдя до 100 точки (тоесть последней в списке) чар перейдет к 1ой точке.
### (Цикличность)
### ]![ Для корректной работы скрипта нужно замарчить не менее 80 точек. ]![
###
####################
### Нововведения ###
####################
### 1)Полностью изменены системы сброса руды и рекола по руне от пк(теперь
### физлить невозможно). [cOoler]
### 2)Временно удалены функции - речарж рунбуки и хаванья, в следующих версиях
### опять появяться!. [cOoler]
### 3)Доработана ходилка, теперь проверяет растояние от точки до чара при
### каждом шаге. [cOoler]
### 4)Теперь сундук для логов задается таргетом вместе с рунбукой и руной ...
### рекол на место копания происходит автоматом. [cOoler]
### ]![ ПРИ возникновении глюков .. ошибок и другой лабуды пишите в ICQ! ]![
###
###################################
### Режимы работы скрипта ###
###################################
### Работает в 2х режимах: ###
### 1)Маркировка ###
### 2)Копание ###
###################################
### Режим Первый - "Маркировка" ###
###################################
### Этот режим отвечает за Маркирование(записывание координат) точек копания.
### Включается переменной var GetFromFile=0 ## 1 - координаты деревьев будут
### считыватся из файла, 0 - собиратся из клиента.
### То есть если GetFromFile=1 координаты деревьев собиратся из клиента.
###
### Маркировка происходит так:
### Поставте переменную GetFromFile равную 0 (GetFromFile=1).
### Положите к себе в сумку Рунбук(с рунами домой и в лес), Руну(в безопастное
### место) и Кирку.
### Идите на место где вы хотите копать.
### Запустите Скрипт GoMining(), инжект попросит вас указать Рунбук
### (появится прицел,прицелом на него).
### Инжект сообщит вам что ('Собираем координаты руды в округе...').
### Инжект возьмет в руки Кирку.
### Теперь вы должны в любом порядке сами прицелом указать координаты
### (достаточно просто нажать прицелом на скалу или пол в шахте).
### ]![ Для марка точек капания требуется соблюдать расстояние больше чем 4
### тайла, т.е. чтобы чар не копал. ]![
### Если вы не промахнулись и "нажали" на подходящее для копания место, то
### инжект сообщит вам об этом(Найдена руда "координаты руды").
### Причем что если даже вы нажмете два раза на одно и тоже место то он
### не "запомнит" его повторно.
### Ходите и марчите точки копания.
### Для того чтобы остановить марк нажмите таргетом на себя.
### Инжект напишет вам сообщение ('Анализ закончен, координаты руды записаны в
### файл C:\Ore.dat') и создаст файл на диске
### С:\ куда запишет координаты точек копания.
### После этого чар пойдет по координатам и будет копать.
###
################################
### Режим Второй - "Копание" ###
################################
### Этот режим соответственно отвечает за Копание.
### Включается переменной var GetFromFile=0 ## 1 - координаты деревьев будут
### считыватся из файла, 0 - собиратся из клиента
### То есть если GetFromFile=1 координаты деревьев будут считыватся из файла.
### И вам не надо будет сново марчить точки копания.
###
### Копание происходит так:
### Поставте переменную GetFromFile равную 1 (GetFromFile=1).
### Положите к себе в сумку Кирку, Руну(в безопастное место) и Рунбук(с рунами
### домой и в лес).
### ]![ Внимание в скрипте номера рун в рунбуке настроены под ДРВ шард. ]![
###
#########################################
### Дополнительные функции скрипта ###
#########################################
### В скрипте 3 доп. функций: ###
### 1)Рекол при Атаке ###
### 2)Килл Элементала ###
### 3)Реконнект ###
##########################################
### Функция Первая - "Рекол при Атаке" ###
##########################################
### Этот режим соответственно отвечает за Рекол при атаке ентов и не только.
### Включается переменной var ControlOfDanger=0 ## 1 - Включить рекол по руне(в
### паке) при атаке, 0 - отключить рекол.
### То есть если ControlOfDanger=1 чар будет реколиться при атаке.
###
### Побег происходит так:
### Поставте переменную ControlOfDanger равную 1 (ControlOfDanger=1).
### Замарчите Руну в безопастном месте.
### Положите к себе в сумку
### Руну(которую замарчили в безопастном месте), Реагенты(Black Pearls,Blood
### Moss,Mandrake Root.)
### и Бутылки расчитывая на то сколько вы хотите рубить.(Invizible Potion,Mana
### Potion,Heal Potion).
### При атаке вы выпиваете Invizible Potion, автоматически телепортитесь на то
### место,
### где замаркана руна(в бакпаке).
### В это время записывается имя того кто вас атачил.
### После рекола руна маркается и проверяется ваша мана и здоровье, если чегото
### меньше,
### чар выпивает Mana Potion или Heal Potion в зависимости от надобности.
###
######################################
### Вариант Первый - "Цыкличность" ###
######################################
### Есди вы хотите чтобы скрипт не прекращал свою работу, то поставьте
### переменную CycleScript раную 1 (CycleScript=1).
### Теперь после рекола скрипт не будет выключаться, а будет ждать указанное
### время(DangerTime) и затем
### реколиться домой, речаржить рунбуку, есть и опять реколиться на место
### копания и копать.
###
#####################################
### Вариант Второй - "Выключение" ###
#####################################
### Есди вы хотите чтобы скрипт не прекращал свою работу, то поставьте
### переменную CycleScript раную 0 (CycleScript=0),
### Теперь после рекола скрипт выключится и закроет окно UO.
###
##########################################
### Функция Вторая - "Килл Элементала" ###
##########################################
### Этот режим соответственно отвечает за Килл Элементала при выкидывании с
### сервера.
### var ElementalKill=0 ## 1 - Вылючить килл элементала, 0 - отключить.
### То есть если ElementalKill=1 чар будет килять элема.
### Если вы поставите переменную ElementalKill равную 1 (ElementalKill=1), то
### чар будет килять элементала.
### Если вы поставите переменную ElementalKill равную 0 (ElementalKill=0), то
### чар будет реколиться от элементала.
###
### Реконнект происходит так:
### Поставте переменную ElementalKill равную 1 (ElementalKill=1).
### Положите к себе в сумку
### Реагенты и Бутылки расчитывая на то сколько вы хотите рубить.(Invizible
### Potion,Mana Potion,Heal Potion).
### После того как будет выкопан элементал, чар выпьет инвизку, морфнется в
### демона, возьмет в руки щит и будет пытаться
### кильнуть элеменала.
### После того как он кильнет элементала, будет произведен лут, после чего чар
### продолжит копать.
###
####################################
### Функция Третья - "Реконнект" ###
####################################
### Этот режим соответственно отвечает за Реконнект при выкидывании с сервера.
### Включается переменной var Reconnect=1 ## 1 - Включить реконнект на сервер
### если выкинет, 0 - отключить реконнект.
### То есть если Reconnect=1 чар будет реколиться при атаке.
###
### Реконнект происходит так:
### Поставте переменную Reconnect равную 1 (Reconnect=1).
### Если вдруг повиснет игровая сфера или вас выкинет по любой другой причине
### реконнектор законнектит ваc на сервер автоматически.
### Пишется время дисконнекта и коннекта на сервер.
###
### ]![ Настройте скрипт под себя при помощи переменных. ]![
###
##################
### Переменные ###
##################
################################################################################
###################
var FileName=('C:\ore.dat') ## - Путь к файлу в котором будут хранится
### координаты где копать.
###
var TryHiding=1 ## 1 - Перед тем как копать руду, будет пытаться уйти в хайд,
### 0 - не будет .
###
var TryRecall=1 ## 1 - После того как соберет достаточный вес, будет пытаться
### реколиться домой,
### складывать руду в сундук и реколиться обратно , 0 - не будет.(DropOnVip
### должно быть 0)
###
var RuneToHome=6 ## - Номер руны Домой,по счёту в рунбуке.(сейчас в 4ом
### слоте,можнnfv? ult rehcjh cnjbn b Дшту о менять от 1-9)
###
var RuneToMining=5 ## - Номер руны в место где копаем,по счёту в рунбуке.
### (сейчас в 5ом слоте,можно менять от 1-9)
###
var GetFromFile=1 ## 1 - Координаты где копать будут считыватся из файла, 0 -
### собиратся из клиента
### (сначала соберите а потом считывайте из файла).
###
var OreQty=600 ## - Максимальный вес, добыв который надо реколиться домой.
### (сейчас 600 стоунов)
###
var ControlOfDanger=0 ## 1 - Включить рекол по руне(в паке) при атаке, 0 -
### отключить рекол.
###
var ElementalKill=0 ## 1 - Вылючить килл элементала, 0 - отключить(рекол).
###
var DangerousTime=50000 ## - Время в секундах которое чар будет ждать(после
### рекола) пока уйдет ПК или Элемент.(сейчас 50 секунд)
###
var CycleScript=0 ## 1 - Скрипт не отключается после рекола от атакующего, 0 -
### отключаетсяи закрывает UO.
###
var Reconnect=1 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить
### реконнект.
###
var DisturbingSound=('C:\warning.wav') ## - Звук которы будет пригран при атаке.
### (замените на свой)
###
var DropX=2023 ## - Координата перед сундуком по X.
###
var DropY=414 ## - Координата перед сундуком по Y.
###
var DropOnVip=0 ## - Если в ВИП пещере пожходить к сундука и сбрасывать руду.
### (TryRecall должно быть 0)
################################################################################
###################
###
### После настройки:
### Идите в место где будем копать.
### Запустите cкрипт GoMining(), инжект попросит вас указать Кирку(появится
### прицел, прицелом на неё),
### Рунбук(появится прицел, прицелом на него) ,Руну(прицелом на нее) и Сундук
### для логов.
### После этого чар пойдет по координатам и будет копать руду.
###########
### Код ###
###########
sub GoMining()
uo.Print('Выбери Кирку: ')
uo.Exec('addobject Pickaxe')
while uo.Targeting()
wait(100)
wend
if TryRecall==1 then
uo.Print('Выбери PунБук: ')
uo.Exec('addobject Runebook')
while uo.Targeting()
wait(100)
wend
end if
if ControlOfDanger==1 then
uo.Print('Выбери Руну: ')
uo.Exec('addobject Rune')
while uo.Targeting()
wait(100)
wend
end if
uo.Print('Выбери Сундук: ')
uo.Exec('addobject Chest')
while uo.Targeting()
wait(100)
wend
if ControlOfDanger==1 then
uo.Exec('exec ControlOfDanger')
end if
if Reconnect==1 then
uo.Exec('exec Reconnect')
end if
if DropOnVip==0 then
RecallToOre()
end if
uo.Exec('exec Mining')
end sub
sub Mining()
var i=0,j=0,k=0,r=0,q=0,ii,jj,f
var TopX=324,TopY=65
dim OreX[5000],OreY[5000],OreT[5000]
dim OreTile[21]
var flag=0,OreCount=0,clicks=0,flag2=0
####################
### Графика руды ###
####################
OreTile[0]=1339
OreTile[1]=1355
OreTile[2]=1354
OreTile[3]=1359
OreTile[4]=1358
OreTile[5]=1357
OreTile[6]=1352
OreTile[7]=1341
OreTile[8]=1363
OreTile[9]=1359
OreTile[10]=1339
OreTile[11]=1354
OreTile[12]=1386
OreTile[13]=1353
OreTile[14]=2278
OreTile[15]=2282
OreTile[16]=2281
OreTile[17]=2277
OreTile[18]=2278
OreTile[19]=2275
OreTile[20]=1351
OreTile[21]=0
uo.FilterSpeech('on')
uo.FilterSpeech('add', 'Where do you want to use the pickaxe?')
#####################################
### Загружаем координаты из файла ###
#####################################
if GetFromFile==1 then
uo.Print('Загружаем координаты из файла...')
f=file(FileName)
f.Open()
OreCount=safe call f.ReadNumber()
for i=1 to OreCount
OreT[i]=safe call f.ReadNumber()
OreX[i]=safe call f.ReadNumber()
OreY[i]=safe call f.ReadNumber()
next
f.Close()
else
######################################
### Собираем координаты из клиента ###
######################################
uo.Print('Собираем координаты руды в округе...')
repeat
clicks=0
flag=0
uo.DeleteJournal()
#######################
### Кликаем на тайл ###
#######################
uo.UseObject('Pickaxe')
wait(500)
uo.DeleteJournal()
while uo.Targeting()
wait(100)
wend
###########################
### Проверяем то ли это ###
###########################
flag=0
for k=0 to 21
if uo.LastTile(0)==OreTile[k]+1 then
flag=2
end if
next
if flag==0 then
for k=0 to 21
if uo.LastTile(0)==OreTile[k] then
flag=1
end if
next
end if
if uo.Lasttile(1)==uo.GetX() and uo.Lasttile(2)==uo.Gety() then
flag=3
end if
########################
### Кликнули на тайл ###
########################
if flag==1 then
flag2=0
if OreCount>0 then
for ii=1 to OreCount
if OreX[ii]==uo.LastTile(1) and OreY[ii]==uo.LastTile(2) then
flag2=1
end if
next
end if
if flag2==0 then
OreCount=OreCount+1
OreX[OreCount]=uo.LastTile(1)
OreY[OreCount]=uo.LastTile(2)
OreT[OreCount]=uo.LastTile(0)
uo.Print('Найдена руда номер '+str(OreCount)+' : x='+str(uo.Lasttile(1))+'
y='+str(uo.LastTile(2)))
end if
end if
#####################
### Кликнули выше ###
#####################
if flag==2 then
flag2=0
if OreCount>0 then
for ii=1 to OreCount
if OreX[ii]==uo.LastTile(1) and OreY[ii]==uo.LastTile(2) then
flag2=1
end if
next
end if
if flag2==0 then
OreCount=OreCount+1
OreX[OreCount]=uo.LastTile(1)
OreY[OreCount]=uo.LastTile(2)
OreT[OreCount]=uo.LastTile(0)-1
uo.print('Найдена руда номер '+str(OreCount)+' : x='+str(uo.Lasttile(1))+'
y='+str(uo.LastTile(2)))
end if
end if
until (Flag==3) or (OreCount==5000)
uo.FilterSpeech('off')
uo.Print('Анализ закончен, координаты руды записаны в файл ' +FileName)
SaveToFile(OreCount,OreX,OreY,OreT)
end if
uo.Print('Координат найдено: '+str(OreCount))
wait(2000)
######################################
### Ходим по собранным координатам ###
######################################
while 1==1
if OreCount>0 then
for i=1 to OreCount
if TryRecall==1 and uo.Weight>OreQty then
ToRecall()
i=1
end if
if DropOnVip==1 and TryRecall==0 and uo.Weight>OreQty then
DropOnVip()
i=1
end if
j=i*2-1
if j>OreCount then
j=2*(OreCount-i+1)
end if
InfoOre()
flag=WalkN(OreX[j],OreY[j], '')
if TryHiding==1 then
ToHide()
end if
; if flag==1 then
GetOre(str(OreT[j]),str(OreX[j]),str(OreY[j]),str(uo.GetZ()))
; end if
next
end if
wend
end sub
sub SaveToFile(OreCount,OreX,OreY,OreT)
var s=0,i=0,f
f=file(FileName)
f.Open()
f.Create()
s=safe call f.Writeln(OreCount)
for i=1 to OreCount
s=safe call f.Writeln(str(OreT[i])+' '+str(OreX[i])+' '+str(OreY[i]))
next
f.Close()
end sub
sub GetOre(Type,X,Y,Z)
var mx, my, mz, i, j
mx = UO.GetX("self")
my = UO.GetY("self")
mz = UO.GetZ("self")
UO.DeleteJournal()
for i = mx-2 to mx+2
for j = my -2 to my+2
while not UO.Hidden()
UO.Warmode("0")
uo.print("pryachemsa...")
UO.UseSkill("Hiding")
wait(4000)
wend
UO.Print("kopaem v koord: "+str(mx-i)+" "+str(my-j))
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("Copper") and not UO.InJournal("Rusty Ore")
UO.DeleteJournal()
if uo.waiting() then
uo.canceltarget()
endif
UO.Waittargettile("1341", str(i), str(j), str(mz))
UO.Usetype(uo.GetGraphic("Pickaxe"))
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 (500)
if uo.injournal("heavy") or uo.dead() then
DisturbingSound(1)
DangerWait()
endif
wend
wend
UO.DeleteJournal()
next
next
return 0
end sub
sub WaitForChange()
var Text1=uo.GetName()+': You loosen some rocks but fail to find any useable
ore.'
var Text2='There is no ore here to mine.'
var Text3="You can't reach this."
var Text4="That is too far away."
var Text5="You can't do much in your current state."
var Text6="You have no line of sight to that location"
var Text7="You can't see the target"
var Text8="Try mining in rock."
var mess
for var i=0 to 200
mess=uo.Journal(0)
if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text6 or uo.Journal(0)==Text7 or uo.Journal(0)==Text8 then
return 1
end if
if uo.Journal(0)==Text1 then
wait(1000)
return 0
end if
if mess[0]=='Y' and mess[1]=='o' and mess[2]=='u' and mess[4]=='p' and mess[5] =='u' and mess[6]=='t' then
return 0
end if
wait(50)
next
return 0
end sub
sub Open(Container)
uo.DeleteJournal()
uo.UseObject(Container)
repeat
wait(500)
until uo.InJournal('Contains')
end sub
#####################################################
sub WalkN(x,y,Target)
VAR LastTimer
LastTimer=UO.Timer()
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"
uo.say('')
While Exit<>1 or not uo.injournal('You are too overloaded to move')
If Target<>"" Then
dx=UO.GetX(Target)-UO.GetX()
dy=UO.GetY(Target)-UO.GetY()
If UO.GetDistance(Target)<2 OR LastTimer+100<UO.Timer() Then
wait(1000)
return
Endif
Else
dx=x-UO.GetX()
dy=y-UO.GetY()
If dx==0 AND dy==0 OR LastTimer+100<UO.Timer() Then
return
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=405
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=405
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
#####################################################
sub InfoOre()
uo.Print('У вас всего '+str(uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count ('0x19B9')+uo.Count('0x19BA'))+' руды в сумке')
uo.Print('Из нее '+str(uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000') +uo.Count('0x19B9','0x0000')+uo.Count('0x19BA','0x0000'))+' железо и ' +str (uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA')- (uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000')+uo.Count ('0x19B9','0x0000')+uo.Count('0x19BA','0x0000')))+' цветмет')
end sub
sub ToHide()
while not uo.Hidden()
uo.Exec('warmode 0')
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(6000)
wend
wait(100)
end sub
sub ToRecall()
RecallToHome()
DropOre()
RecallToOre()
end sub
sub RecallToHome()
uo.Print('Прыгаем Домой.')
RunebookRecall(RuneToHome)
end sub
sub RecallToOre()
uo.Print('Прыгаем в Пещеру.')
RunebookRecall(RuneToMining)
end sub
sub RunebookRecall(n)
var OldX,OldY,Time
OldX=uo.GetX()
OldY=uo.GetY()
repeat
uo.Exec('warmode 0')
uo.UseObject('Runebook')
CheckLag()
uo.Lclick(135, n*15+55)
CheckLag()
Time=uo.Timer()
repeat
wait(500)
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') or uo.InJournal('fizzles') or (Time+200<uo.Timer())
uo.DeleteJournal()
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs')
end sub
sub DropOre()
var o,exit
dim Ore[14]
Ore[0]=0x19B9
Ore[1]=0x19B7
Ore[2]=0x19BA
Ore[3]=0x19B8
Ore[4]=0x0F11
Ore[5]=0x0F16
Ore[6]=0x0F18
Ore[7]=0x0F15
Ore[8]=0x0F10
Ore[9]=0x0F0F
Ore[10]=0x0F26
Ore[11]=0x1F4C
Ore[12]=0x0EED
Ore[13]=0x0F20
ToHide()
if uo.Waiting() then
uo.CancelTarget()
end if
uo.SetReceivingContainer('Chest')
wait(500)
for o=0 to 13
exit=0
repeat
uo.FindType(Ore[o])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
uo.UnSetReceivingContainer('Chest')
end sub
sub DropOnVip()
Walk(DropX,DropY,'')
DropOre()
end sub
sub ControlOfDanger()
var danger
var RecallPhysicalDanger=1
var RecallSeenDanger=0
var RecallBluePlayer=0
while 1
uo.DeleteJournal()
while not uo.InJournal(':')
wait(100)
wend
danger=uo.GetNotoriety(uo.JournalSerial(0))
if uo.InJournal('OOPS') then
if ElementalKill==1 then
uo.Exec('exec ElementalKill')
end if
if ElementalKill==0 then
uo.Exec('exec RecallRune')
end if
end if
if RecallPhysicalDanger==1 then
if uo.InJournal('attacking you') then
uo.Exec('exec RecallRune')
end if
end if
if RecallSeenDanger==1 then
if danger==6 and uo.JournalSerial(0)<>uo.GetSerial() then
uo.Exec('exec RecallRune')
end if
if danger==4 and uo.JournalSerial(0)<>uo.GetSerial() then
uo.Exec('exec RecallRune')
end if
end if
if RecallBluePlayer==1 then
if danger==1 and uo.JournalSerial(0)<>uo.GetSerial() then
uo.Exec('exec RecallRune')
end if
end if
wend
end sub
sub RecallRune()
var MX=uo.GetX('self')
var MY=uo.GetY('self')
Terminate()
uo.PlayWav(DisturbingSound)
uo.UseType('0x0F0E','0x0631')
wait(100)
Recall:
uo.DeleteJournal()
if uo.Waiting() then
uo.CancelTarget()
end if
uo.WaittargetObject('Rune')
wait(100)
uo.Cast('Recall')
wait(3000)
if not uo.GetX('self')<>MX and not uo.GetY('self')<>MY then
goto Recall
end if
repeat
uo.DeleteJournal()
uo.WaittargetObject('Rune')
uo.Cast('Mark')
if uo.InJournal('mana for this spell') then
ManaUp('Bottle')
wait(100)
end if
wait(3000)
until not uo.InJournal('spell fizzles')
if uo.Life<uo.STR then
LifeUp('Bottle')
wait(100)
end if
if CycleScript==1 then
uo.Exec('exec DangerWait')
end if
if CycleScript==0 then
uo.Exec('exec ExitUO')
end if
end sub
sub DisturbingSound(amount)
var i
for i=1 to amount
uo.PlayWav(DisturbingSound)
wait(1500)
next
end sub
sub DangerWait()
wait(DangerousTime)
ToRecall()
uo.Exec('exec Mining')
end sub
sub ExitUO()
wait(3000)
uo.CloseUO()
end sub
sub LifeUp(Mode)
if Mode=='Healing' then
while uo.Life<uo.STR
uo.Exec('bandageself')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Life<uo.STR then
uo.UseType('0x0F0E','0x09BB')
wait(100)
end if
end if
end sub
sub ManaUp(Mode)
if Mode=='Meditation' then
while uo.Mana<uo.INT
uo.Exec('useskill Meditation')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Mana<uo.INT then
uo.UseType('0x0F0E','0x09DF')
wait(100)
end if
end if
end sub
sub ElementalKill()
var Count,LastTimer,Elemental
var o,exit
dim Ore[13]
Ore[1]=0x19B9
Ore[2]=0x19B7
Ore[3]=0x19BA
Ore[4]=0x19B8
Ore[5]=0x0F11
Ore[6]=0x0F16
Ore[7]=0x0F18
Ore[8]=0x0F15
Ore[9]=0x0F10
Ore[10]=0x0F0F
Ore[11]=0x0F26
Ore[12]=0x1F4C
Ore[13]=0x0EED
Terminate()
uo.UseType('0x0F0E','0x0631') ## - Инвизка(тип,цвет).
while uo.STR<uo.Life+1
if uo.Mana>=50 then
uo.WaitMenu('What', 'Daemon')
uo.Cast('Polymorph')
wait(8000)
else
uo.UseType('0x0F0E','0x09DF') ## - Тотал Мана(тип,цвет).
wait(3000)
end if
wend
LastTimer=uo.Timer()
repeat
uo.BandageSelf()
wait(4000)
until uo.Life==uo.STR or LastTimer+300<uo.Timer()
uo.UseType('0x1B76') ## - Хеатер Щит(тип).
uo.DeleteJournal()
uo.Exec('warmode 1')
uo.FindType('0x0010',-1,'ground')
Elemental=uo.GetSerial('finditem')
uo.Attack(Elemental)
repeat
wait(1000)
if uo.Life<50>1 then
WalkN(0,0,Elemental)
end if
until uo.IsNPC(Elemental)==0
wait(3000)
uo.Exec('warmode 0')
wait(1000)
LastTimer=uo.Timer()
uo.DeleteJournal()
for o=1 to 13
exit=0
repeat
uo.FindType(Ore[o],-1,'ground')
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
### uo.Exec('warmode 1')
uo.Exec('warmode 0')
uo.Exec('exec Mining')
end sub
sub Reconnect()
var ReconnectTime,rflag
ReconnectTime='0'
rflag=1
repeat
while (uo.ObjAtLayer('Bpack')=='')
if rflag then
ReconnectTime=Time()
rflag=0
end if
wait(20000)
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.TextOpen()
uo.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
rflag=1
ReconnectTime='0'
end if
until false
end sub
sub Time()
var Date,nTime,uTime,i
uTime=str(uo.Time())
nTime=''
for i=0 to Len(uTime)
nTime=uTime[Len(uTime)-i]+nTime
if (i==2) or (i==4) then
nTime=':'+nTime
end if
next
uTime=str(uo.Date())
Date=''
for i=0 to Len(uTime)
Date=uTime[Len(uTime)-i]+Date
if (i==2) or (i==4) then
Date='.'+Date
end if
next
uTime=nTime+' @ '+Date
return uTime
end sub
sub Terminate()
uo.Exec('terminate Mining')
end sub
sub TerminateAll()
uo.Exec('terminate Mining')
uo.Exec('terminate ControlOfDanger')
uo.Exec('terminate Reconnect')
uo.Exec('terminate RecallRune')
uo.Exec('terminate DropOre')
uo.Exec('terminate DangerWait')
uo.Exec('terminate DangerWait')
end sub
sub CheckLag()
if uo.Waiting()>0 then
uo.Exec('canceltarget')
end if
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(50)
until uo.InJournal('backpack')
end sub
sub GoCorpse()
var Elemental='0x4000466F'
Walk(0,0,Elemental)
end sub
sub Walk(X,Y,Target)
var Targeting=''
var Result
var DX,DY,GLX,GLY
var DirW=0
var exit=0
while exit<>1
if Target<>'' then
Targeting=Target
DX=uo.GetX(Target)-uo.GetX()
DY=uo.GetY(Target)-uo.GetY()
if uo.GetDistance(Target)<2>0 and DY>0 then
DirW=9
end if
if DX>0 and DY<0 then
DirW=7
end if
if DX<0>0 then
DirW=3
end if
if DX<0 and DY<0 then
DirW=5
end if
if DX<0>0 then
DirW=8
else
DirW=4
end if
end if
if DX==0 and DY<0>0 then
DirW=2
else
DirW=6
end if
end if
Result=Go(DirW)
if Result==0 then
Result=Go(DirW-2)
if Result==0 then
Result=Go(DirW+2)
end if
end if
end if
wend
end sub
sub Go(dir)
var WalkWait=100
var Targeting=''
var X,Y,GLX,GLY
var check=1
var StartingDir=uo.GetDir()
X=uo.GetX()
Y=uo.GetY()
dim MoveKey[12]
MoveKey[0]=34
MoveKey[1]=40
MoveKey[2]=35
MoveKey[3]=37
MoveKey[4]=36
MoveKey[5]=38
MoveKey[6]=33
MoveKey[7]=39
MoveKey[8]=34
MoveKey[9]=40
MoveKey[10]=35
MoveKey[11]=37
dim StartDir[12]
StartDir[0]=2
StartDir[1]=3
StartDir[2]=4
StartDir[3]=5
StartDir[4]=6
StartDir[5]=7
StartDir[6]=0
StartDir[7]=1
StartDir[8]=2
StartDir[9]=3
StartDir[10]=4
StartDir[11]=5
while uo.GetDir()<>StartDir[dir]
uo.Press(MoveKey[dir])
wait(WalkWait)
if uo.GetDir()==StartingDir then
CheckLag()
end if
if (Targeting<>'' and uo.GetDistance(Targeting)<2) or (GLX==0 and GLY==0) then
return 1
end if
wend
uo.Press(MoveKey[dir])
wait(WalkWait)
if X==uo.GetX() and Y==uo.GetY() then
CheckLag()
uo.Press(MoveKey[dir])
wait(WalkWait)
end if
if X==uo.GetX() and Y==uo.GetY() then
return 0
else
return 1
end if
end sub