Вот собственно сам скрипт:
Code: Select all
#########################################################
# 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 = '0x4015CCDB' ; ID ðóíû, âåäóùåé ê áàíêó
VAR HomeRune = '0x4015AFE2' ; ID ðóíû, êîòîðàÿ ëåæèò â áàíêå è âåäåò ê äîìó.
VAR Sunduk = '0x40198702' ; ID ñóíäóêà äëÿ ðàçãðóçêè ðóäû
VAR Sunduk2 = '0x401C8135' ; ID ñóíäóêà ñ ðåãàìè è åäîé
VAR Food = '0x1608'
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 = 750 ; Ìàêñèìàëüíûé âåñ ìèíóñ 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] = 0x4026346E ; âïèñàòü ID ðóí â øàõòû
Runa[2] = 0x402636C7
Runa[3] = 0x40263AA1
Runa[4] = 0x4025E5A8
Runa[5] = 0x4025E52E
Runa[6] = 0x4025E3A8
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( '1', '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