Играл я некоторое время на ВХ, и вот решил выложить скрипт на майнинг.
Code:
#########################################################
# World's Heart Mining #
# ver 1.03 #
# by Flake #
#########################################################
# Описание:
# Чар прилетает в шахту, обкапывается, затем делает 5 шагов на запад (W),
# и опять обкапывается. При перевесе летит к банку, и оттуда по руне домой.
# Дома выгружает руду, добирает реги, кушает и опять копать.
# На базе у чара 2 сундука, Sunduk - для выгруза руды, Sunduk2 - в него
# кладем реги, еду и всё остальное (см. ниже).
# Так же введена система анти-элем. Для этого вам понадобиться мощная животина,
# лучше всего Найтмар. При выкапывании элема чар будет спускать зашринкованного
# зверя на элема, ждать пока тот его убьет, затем он зашринкует зверя обратно и
# облутит труп элема. Чтобы включить эту систему, поставьте в переменной
# AntiElem значение 1 (При 0 система отключена, при 1 - включена.).
# Если хотите копать с антиэлемом, в Sunduk2 киньте бутылок инвиза и шринков.
# Так же необходимо в переменных Killer и KillerB прописать типы вашего
# зверя - убийцы в зашринкованном и обычном видах.
# В паке у чара должно быть: 6 рун в шахты, пару кирок, реги на рекал.
# В банке - руна домой.
# Руны необходимо маркать таким образом, чтобы у чара было места для 5
# шагов в направлении (W).
############################################################################
###########################################################################№
# Переменные:
VAR AntiElem = 0 ; Если 0 - систеа отключена. если 1 - включена.
VAR BankRune = '0x4048DEE9' ; ID руны, ведущей к банку
VAR HomeRune = '0x4048DF72' ; ID руны, которая лежит в банке и ведет к дому.
VAR Sunduk = '0x4051773C' ; ID сундука для разгрузки руды
VAR Sunduk2 = '0x404FAD09' ; ID сундука с регами и едой
VAR Food = '0x0C7F'
VAR Elem = '0x000E' ; тип элемента
VAR Killer = '0x0000' ; тип киллера в шринке
VAR KillerB = '0x0000' ; тип киллера
VAR ShrinkClr = '0x051B' ; цвет шринка
VAR InvisClr = '0x012B' ; цвет инвизки
VAR Bottle = '0x0F0E' ; тип бутылки
###########################################################################
###########################################################################
sub START_MINING()
VAR Kirka = '0x0E85'
VAR TileNum = '1339'
VAR MaxWeight = 580 ; Максимальный вес минус 30-40 стоунов
VAR x, y, t, k
VAR MaxTime = 7000
VAR ms1 = "There is nothing here to mine for"
VAR ms2 = "You can't use"
VAR ms3 = "You put the"
VAR ms4 = "loosen some rocks but fail"
VAR ms5 = "You can't use the %s where it is"
VAR ms6 = "Try mining in rock"
VAR ms7 = "Try mining elsewhere."
VAR ms8 = "no line of sight"
VAR tochka = 1
VAR flag = 0
Dim Runa[6]
Runa[1] = 0x40519685 ; вписать ID рун в шахты
Runa[2] = 0x4051958B
Runa[3] = 0x40519521
Runa[4] = 0x40519608
Runa[5] = 0x4051D7CE
Runa[6] = 0x4051D73E
UO.SetGlobal( 'alarm', 'off' )
RecallRune(Runa[tochka])
If AntiElem == 1 Then
ElemCheck()
EndIf
If UO.GetGlobal( 'alarm' ) == 'on' Then
GoTo JumpNext
EndIf
CheckHide()
Repeat
StartMine:
flag = flag + 1
For y=-2 to 2
For x=-2 to 2
k = 0
Repeat
UO.DeleteJournal()
t = UO.Timer()
k = k + 1
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
UO.UseType( Kirka )
Repeat
Wait(300)
Until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR UO.InJournal(ms8) OR ((t + MaxTime) < UO.Timer())
Until ( NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR UO.InJournal(ms7) OR UO.InJournal(ms8) OR (k > 10))
;--- --- --- Проверка на перевес и элема --- ---
If AntiElem == 1 Then
ElemCheck()
EndIf
If UO.Weight >= MaxWeight OR UO.GetGlobal( 'alarm') == 'on' Then
UO.Print( 'Перевес!' )
UnLoad()
RecallRune(Runa[tochka])
If AntiElem == 1 Then
ElemCheck()
EndIf
If UO.GetGlobal( 'alarm' ) == 'on' Then
GoTo JumpNext
EndIf
CheckHide()
flag = 0
tochka = tochka + 1
If tochka == 6 Then
tochka = 1
EndIf
Goto StartMine
EndIf
;--- --- --- --- --- --- --- --- --- ---
Next
Next
If flag < 2 Then
Walk()
GoTo StartMine
EndIf
JumpNext:
flag = 0
tochka = tochka + 1
If tochka == 6 Then
tochka = 1
EndIf
RecallRune(Runa[tochka])
If AntiElem == 1 Then
ElemCheck()
EndIf
If UO.GetGlobal( 'alarm' ) == 'on' Then
GoTo JumpNext
EndIf
CheckHide()
Until UO.Dead()
endsub
; --- Модуль разгрузки и добора регов.
Sub UnLoad()
VAR a, b
Dim Ore[4]
Ore[1]= 0x19B9 ; 4 and more ore
Ore[2]= 0x19B7 ; 1 ore
Ore[3]= 0x19BA ; 2 ore
Ore[4]= 0x19B8 ; 3 ore
Dim RecallReg[3]
RecallReg[1] = 0x0F7A
RecallReg[2] = 0x0F7B
RecallReg[3] = 0x0F86
; --- Прыгаем к банку
RecallRune(BankRune)
UO.MSG( 'Bank' )
Wait(100)
; --- Прыгаем домой
RecallRune(HomeRune)
; --- Разгрузка руды
For a = 1 to 4
UO.FindType( Ore[a] )
While UO.FindCount()
UO.MoveItem( 'finditem', '-1', Sunduk )
Wait(200)
CheckLag()
UO.FindType( Ore[a] )
Wend
Next
; --- Добор регов, еды и бутылок
For b = 1 to 3
UO.FindType( RecallReg[b] )
If UO.GetQuantity( 'finditem' ) < 20 Then
UO.FindType( RecallReg[b], '-1', Sunduk2 )
If UO.GetQuantity( 'finditem' ) > 20 Then
UO.Grab( '20', 'finditem' )
Wait(200)
CheckLag()
Else
UO.Print( 'Regs not found, script terminated' )
UO.Exec( 'terminate all' )
EndIf
EndIf
Next
UO.FindType( Food )
If UO.GetQuantity( 'finditem' ) < 10 Then
UO.FindType( Food, '-1', Sunduk2 )
UO.Grab( '10', 'finditem' )
Wait(200)
CheckLag()
EndIf
UO.DeleteJournal()
UO.FindType( Food )
If UO.FindCount() Then
Repeat
UO.UseType( Food )
Wait(200)
CheckLag()
Until UO.InJournal( 'simply too full' )
EndIf
If AntiElem == 1 Then
UO.FindType( Bottle, ShrinkClr, 'my' )
If UO.GetQuantity( 'finditem' ) < 6 Then
UO.FindType( Bottle, ShrinkClr, Sunduk2 )
If UO.FindCount() > 6 Then
UO.Grab( '6', 'finditem' )
Else
UO.Print( 'Bottles not found, script terminated' )
UO.Exec( 'terminate all' )
EndIf
EndIf
UO.FindType( Bottle, InvisClr, 'my' )
If UO.GetQuantity( 'finditem' ) < 6 Then
UO.FindType( Bottle, InvisClr, Sunduk2 )
If UO.FindCount() > 6 Then
UO.Grab( '6', 'finditem' )
Else
UO.Print( 'Bottles not found, script terminated' )
UO.Exec( 'terminate all' )
EndIf
EndIf
EndIf
endsub
; --- Процедура рекала по руне
Sub RecallRune(RuneId)
VAR MyX, MyY, t, i
If UO.Mana < UO.Int Then
UO.WarMode(0)
Repeat
UO.UseSkill( 'Meditation' )
Wait(1000)
Until UO.Mana == UO.Int
EndIf
i = 1
Cast:
MyX = UO.GetX()
MyY = UO.GetY()
t = 0
UO.Cast( 'Recall', RuneId )
UO.DeleteJournal()
If UO.GetGlobal( 'alarm' ) == 'on' AND i ==1 Then
Wait(150)
UO.UseType( Bottle, InvisClr )
i = 0
EndIf
Repeat
t = 1 + 1
If UO.InJournal( 'izzle' ) OR (t > 40) Then
GoTo Cast
Else
Wait(500)
EndIf
Until MyX <> UO.GetX() AND MyY <> UO.GetY()
endsub
; --- Функция Анти-Элемент.
Sub ElemCheck()
UO.Set( 'finddistance', '5' )
UO.FindType( Elem, '-1', 'ground' )
If UO.FindCount() == 1 Then
UO.Print( 'One Element found! Killing system activated!' )
UO.UseType( 'Killer' )
UO.WaitTargetObject( 'finditem' )
UO.MSG( 'all kill' )
UO.FindType( Elem, '-1', 'ground' )
While UO.FindCount()
Wait(1000)
UO.FindType( Elem, '-1', 'ground' )
Wend
UO.FindType( KillerB, '-1', 'ground' )
UO.WaitTargetObject( 'finditem' )
UO.UseType( Bottle, ShrinkClr )
Wait(200)
UO.FindType( Killer, '-1', 'ground' )
UO.Grab( '1', 'finditem' )
Wait(200)
UO.SetGlobal( 'alarm', 'off' )
LootElem()
Else
If UO.FindCount() > 1 Then
UO.SetGlobal( 'alarm', 'on' )
Else
UO.SetGlobal( 'alarm', 'off' )
EndIf
EndIf
endsub
; --- Функция Лута Элема
Sub LootElem()
VAR Cleaver = '0x0000'
VAR Kirka = '0x0E85'
VAR a
Dim Ore[4]
Ore[1]= 0x19B9 ; 4 and more ore
Ore[2]= 0x19B7 ; 1 ore
Ore[3]= 0x19BA ; 2 ore
Ore[4]= 0x19B8 ; 3 ore
If UO.GetDistance( 'lastcorpse' ) < 3 Then
UO.WaitTargetObject( 'lastcorpse' )
UO.UseType( Cleaver )
Wait(300)
UO.UseObject( 'lastcorpse' )
For a = 1 to 4
UO.FindType( Ore[a], '-1', 'lastcorpse' )
While UO.FindCount()
UO.Grab( '1', 'finditem' )
Wait(200)
CheckLag()
UO.FindType( Ore[a], '-1', 'lastcorpse' )
Wend
Next
UO.FindType( '0x0EED', '-1', 'lastcorpse' ) ; деньги
If UO.FindCount() Then
UO.Grab( '1', 'finditem' )
Wait(200)
EndIf
UO.UseType( Kirka )
Wait(200)
Else
UO.Print( 'The corpse is too far!' )
EndIf
endsub
; --- Процедура проверки и ухода в хайд.
Sub CheckHide()
VAR fail = "You can't seem to hide here."
If UO.Hidden() Then
UO.Print( 'Hidden!' )
Else
UO.Print( 'Now Hiding...' )
StartHide:
UO.WarMode(0)
UO.UseSkill( 'Hiding' )
DeleteJournal("You can't seem to hide here.")
Repeat
If UO.InJournal( fail ) Then
GoTo StartHide
Else
Wait(100)
EndIf
Until UO.Hidden()
UO.Print( 'Hidden!' )
EndIf
end sub
Sub Walk()
UO.Press(36)
UO.Press(36)
UO.Press(36)
UO.Press(36)
UO.Press(36)
Wait(1500)
CheckHide()
endsub
Sub CheckLag()
DeleteJournal( 'backpack' )
UO.Click('backpack')
Repeat
Wait(100)
Until UO.InJournal('backpack')
end sub
Sub DeleteJournal(msg)
var nom = UO.InJournal(msg)
If nom>0 Then
UO.SetJournalLine(Nom - 1," -- replaced -- ")
DeleteJournal(msg)
EndIf
endsub