Играл я некоторое время на ВХ, и вот решил выложить скрипт на майнинг.
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
|