Yoko
http://forum.yoko.com.ua/

Майнинг на ВХ.
http://forum.yoko.com.ua/viewtopic.php?f=20&t=4786
Page 1 of 1

Author:  flake [ 2005-08-12 15:18:26 ]
Post subject:  Майнинг на ВХ.

Играл я некоторое время на ВХ, и вот решил выложить скрипт на майнинг.

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

Page 1 of 1 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/