Yoko

All sides of Injection
It is currently 2025-12-16 21:09:52

All times are UTC+02:00




Post new topic  Reply to topic  [ 1 post ] 
Author Message
PostPosted: 2005-08-12 15:18:26 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
Играл я некоторое время на ВХ, и вот решил выложить скрипт на майнинг.

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1 post ] 

All times are UTC+02:00


Who is online

Users browsing this forum: Bing [Bot] and 9 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited