Запесать таилы пищеры в фаил

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Irina E
Posts: 240
Joined: 2009-06-12 20:10:00
Location: Vasa Smerti(RASToMAN) DRW

Запесать таилы пищеры в фаил

Post by Irina E »

Буду признателен если поможете
значет так начнём есть скрипт на мининг мне надо чуток подругому чтобы было почти как на ламбер запесать таилы пещеры в файл а точнее переходить туда куда я указал когда записава тот координат тайла.
Этот кусок скрипт на записавание таиля долЖен быть одельна
набрасаю скрипт

Code: Select all

# 1# Mining Elemental hunter by Nmy a.k.a. Dark Enemy
var Pickaxe, Runehome, Blankrune, Runinetu, Nrune, flagpk, flaginvis
# Суть скрипта - мининг по рункам. Запускать надо только sub main(). Нечего другого.
# Если чар жив, при запуске надо иметь в бекпаке руну к сундуку,
# если чар мертв, тогда просто запускайте скрипт.
# После запуска скрипт ищет кирку или лопату - автоматически.
# Требования перед запуском - реги bp bm mr ns в сундуке,
# бланк руны в мешке BlankRunebag,
# замарченые руны в Runebag (Чем больше, тем лучше. У меня где то 59 спотов),
# руна домой Runehome, прямо у сундука,
# инвизки в сундуке для рекола от пк и фарма елемов,
# скролы на Energy Vortex для фарма елемов,
# куча кирок в сундуке.
# При запуске чар должен иметь готовую руну домой в бекпаке. Других рун в бекпаке не должно быть.
##
# Запускается скрипт у сундука и записывается руна домой.
# Советую покушать, этого нет в скрипте.
# Скрипт берет реги, 2 инвизки, скрол вортекса, если надо, кирку и улетает.
# Как только прилетел - идет проверка на елемов (3 тайла вокруг чара),
# если найден елем, он пьет инвизку,
# если елем выха, плут или обсид - убивает елема, Vas An Ort, лутает руду, улетает, выгружается, берет руну в следующею шахту,
# если не найден елем, становится в хайд и идет обкоп.
# Тщательно проверяется журнал на пк, исключая ('Elemental|Scorpion King|Giant Spider|Energy Vortex').
# Через каждый тайл идет проверка на елемов в 3 тайла,
# если найден елем, он пьет инвизку,
# если елем выха, плут или обсид - убивает елема, Vas An Ort, лутает руду, улетает, выгружается, берет руну в следующею шахту.
##
# Улетает от пк - пьет инвизку и делает рекол по рунбуке,
# открываетcя окно текста TextOpen и пишется Nick @ время @ дата, например:
# Roland @ 15:59:20 @ 9.09.18
##
# Track World Items должен быть включен.
# Reconnector - включается, он просто заходит обратно, нет гарантии что скрипт будет дальше работать,
# но шанс на успех все таки есть.
##
# Тотал маны скрипт не использует, пока нет такой нужды.
# Если чар прилетел и там найден елемент, но он не выха,
# по идее он пьет инвизку, и продолжает об коп. Если в процессе найден елем выхи, тогда нечего не меняется,
# чар уже под инвизкой и кастует вортекса, лутает, улетает.
##
# Добавлен выход из ситуации, когда чар зацикливается на You loosen some rocks..
# Добавлена цикличность на кастование вортекса. Видимо иногда не хватает одного вортекса, чтоб убить одного или больше елемов.
# Добавлена запасная бутылка инвиза для рекола от пк. Хоть это не дает 100% шанс, но улучшает возможность скрыться от дебилов.
# Добавлено TextPrint для елементов каторых мы фармим.
##
# Добавлен ресс в Миноке. Чар ресается, летит домой, маркает руну домой, ищет кирку в сундуке, запускает мейн скрипт.
# Добавлены переменные для хелп кнопки, т.к. папердолл у каждого может быть в разных местах.
# Undead можно включать, можно не включать.
##
# Добавлено проверка на кирку или лопату в процессе мининга. Если ее нету, тогда чар полетит домой.
# Если перед запуском у чара есть кирка, он будет копать ей, если нет, тогда возьмет из сундука одну.
# У скрипта пауза 100 секунд, если он улетел от пк, или если его убили.
##
# Теперь скрипт не берет руну в шахту, он ее кидает в Dropbag и там кастует рекал.
# Если заряды кончились, то он маркует руну и кидает ее в Dropbag.
# Если вы хотите чтоб чар поменял шахту (полетел домой, разгрузился, полетел в другую) -
# просто киньте кирку на пол. После рекала можно ее подобрать.
var Runebook='0x4022B604' # Для рекола от пк.
var Runenr='21' # Номер руны.
var Chest='0x4042617E' # Я лично поставил 2 сейфа рядом - 1 для ресурсов, 2й для руды.
var Orechest='0x40425509'
var Dropbag='0x403C6206' # Пустой мешок куда кидают руны после обкопа.
var Runebag='0x403C5FB7'
var Blankrunebag='0x405004D7'
var rune='0x1F14'
var food='0x097B'

var helpX=981 # Переменные без кавычек!
var helpY=53 # Переменные без кавычек!

  uo.set('norbcheck','1')
  uo.set('norbcalc','1')

sub main()
   var markflag
   uo.exec('exec Reconnector')
   if not uo.getglobal('flagRes')=='1' then
      uo.exec('exec Resurrector')
      uo.setglobal('flagRes','1')
   endif
   wait(1000)
   uo.filterspeech('clear')
   
   uo.msg('Dont forget track world items!')
   
   uo.findtype(rune,-1,'backpack')
   if uo.findcount() then
      Runehome=uo.getserial('finditem')
   else
      uo.msg('Runehome not found! Terminate.')
      uo.exec('terminate all')
   endif
   
   Open(Chest)
   GrabBlankRune()
   while not uo.dead()
      Open(Runebag)
      uo.findtype(rune,-1,Runebag)
      while uo.findcount()
         Nrune=uo.getserial('finditem')
         uo.moveitem('finditem',0,Dropbag)
         checklag()
         wait(700)
         RegCheck()
         grabinvis()
         GetPickaxe()
         grabvortex()
         toeat()
         RecallRune(Nrune)
         uo.ignorereset()
         flaginvis=0
         markflag=0
         flagpk=0
         if uo.injournal('The recall rune fades completely.') then
            markflag=1
         end if
         if not checkelem()==1 then
            if markflag==1 then
               Mark(Blankrune,0)
               Runinetu=1
            endif
            mining()
            checkelem()
         else
            if markflag==1 then
               Mark(Blankrune,0)
               Runinetu=1
            endif
         endif
         if flagpk==0 then
            RecallRune(Runehome)
         endif
         if uo.injournal('The recall rune fades completely.') then
            Open(Chest)
            if Runinetu==1 then
               GrabBlankRune()
            endif
            Mark(Blankrune,1)
            GrabBlankRune()
         endif
         Open(Chest)
         if Runinetu==1 then
            GrabBlankRune()
         endif
         if markflag==1 then
            uo.moveitem(Nrune,0,Dropbag)
            checklag()
            wait(700)
         endif
         Dropore()
         if flagpk==1 then
            wait(100000)
         endif
         Open(Runebag)
         uo.findtype(rune,-1,Runebag)
      wend
      DropbagCheck()
   wend
endsub
sub Resurrector()
   var oldX,oldY
   while 1
      if uo.dead() then
         uo.exec('terminate main')
         uo.exec('terminate Reconnector')
         uo.TextOpen()
         uo.TextPrint('- dead - @ '+MakeTime())
         wait(5000)
         oldX = Uo.GetX()
         oldY = Uo.GetY()
         uo.useobject('self')
         checklag()
         wait(700)
         repeat
            uo.lclick(helpX,helpY)
            checklag()
            wait(700)
            uo.lclick(269,307)
            checklag()
            wait(700)     
            uo.lclick(182,204)
            checklag()
            wait(5000)   
         until oldX<>UO.GetX() OR oldY<>UO.GetY()
         repeat
            uo.press(39)
            wait(2000)
         until UO.GetY()<534
         repeat
            uo.useobject('0x4001BDF0')
            wait(3000)
         until uo.life>0
         Open(uo.getserial('backpack'))
         wait(1000)
         oldX = Uo.GetX()
         oldY = Uo.GetY()         
         uo.recall(Runebook,Runenr)
         repeat
            wait(700)
         until oldX<>uo.getx('self') && oldY<>uo.gety('self')
         Open(Chest)
         RegCheck()
         GrabBlankRune()
         Mark(Blankrune,1)
         if uo.waiting() then
            uo.canceltarget()
         endif
         uo.exec('exec main')
      endif
      wait(5000)
   wend
endsub
sub GetPickaxe()
   var n
   dim instrument[4]
   instrument[1]='0x0F39'
   instrument[2]='0x0F3A'
   instrument[3]='0x0E86'
   instrument[4]='0x0E85'
   if uo.count('0x0F39')==0 and uo.count('0x0F3A')==0 and uo.count('0x0E86')==0 and uo.count('0x0E85')==0 then
      for n=1 to 4
         uo.findtype(instrument[n],-1,Chest)
         if uo.findcount() then
            pickaxe=uo.getserial('finditem')
            uo.moveitem('finditem',0,'backpack')
            checklag()
            wait(700)
            return
         endif
      next
   else
      for n=1 to 4
         uo.findtype(instrument[n],-1,'my')
         if uo.findcount() then
            pickaxe=uo.getserial('finditem')
            return
         endif
      next   
   endif
endsub
sub Tohide()
   while not uo.Hidden()
   uo.warmode(0)
uo.warmode(0)
      if uo.Journal(0)=='You are preoccupied with thoughts of battle.' then
         uo.warmode(0)
      endif
      uo.Print('Пытаемся уйти в хайд...')
      uo.DeleteJournal()
      uo.UseSkill('Stealth')
      wait(4000)
   wend
end sub
sub checkelem()
   var n, i
   var flagvortex, Elemental

   uo.set('finddistance','3')
   uo.findtype('0x0010',-1,'ground')
   while uo.findcount()
      Elemental=uo.getserial('finditem')
      invis()
      if checkcolor(Elemental)==1 then
         flagvortex=1
         castvortex()
         uo.textopen()
         uo.textprint(uo.getname(Elemental)+' @ '+MakeTime())
         for n=0 to 10
            wait(1000)
            checkpk()
            if flagpk==1 then
               return
            endif
         next
      else
         uo.ignore(Elemental)
      endif
      uo.findtype('0x0010',-1,'ground')
   wend
   if flagvortex==1 then
      repeat
         checklag()
         while uo.mana<22
            wait(500)
         wend
         uo.waittargetobject('self')
         uo.cast('Mass Dispel')
         WaitForMana()
         wait(1000)
      until not uo.injournal('The spell fizzles')
colore()
      return 1
   endif
endsub

sub colore()
   var n, i
   
   Dim ore[3]
   ore[1]='0x19B8'
   ore[2]='0x19B9'
   ore[3]='0x0EED'
   
   Dim color[22]
   color[1]='0x09DA' ; vulcan
   color[2]='0x0060' ; aqua
   color[3]='0x0BA7' ; eldar
   color[4]='0x09E6' ; elvin
   color[5]='0x09B9' ; acid
   color[6]='0x09D3' ; steel
   color[7]='0x008F' ; sand rock
   color[8]='0x09EC' ; blood crest
   color[9]='0x09F0' ; gorgan
   color[10]='0x010F' ; krynite
   color[11]='0x09A4' ; crystaline
   color[12]='0x0085' ; dragon
   color[13]='0x08AF' ; plutonium
   color[14]='0x0028' ; obsidian
   color[15]='0x0193' ; Agarite
   color[16]='0x052D' ; myuth
   color[17]='0x00CE' ; valorite
   color[18]='0x07D5' ; varite
   color[19]='0x0455' ; blakrock
   color[20]='0x04C2' ; bloodrock
   color[21]='0x0032' ; gold
   color[22]='0x0000' ; gp

   uo.set('finddistance','5')

      for n=1 to 3
for i=1 to 22
uo.findtype(ore[n],color[i],'ground')
while uo.findcount()>0
uo.moveitem('finditem','-1','backpack')
wait(700)
uo.findtype(ore[n],color[i],'ground')
wend
next
next
endsub

sub COL()
   var c
   Dim color[21]
   color[1]='0x09DA' ; vulcan
   color[2]='0x0060' ; aqua
   color[3]='0x0BA7' ; eldar
   color[4]='0x09E6' ; elvin
   color[5]='0x09B9' ; acid
   color[6]='0x09D3' ; steel
   color[7]='0x008F' ; sand rock
   color[8]='0x09EC' ; blood crest
   color[9]='0x09F0' ; gorgan
   color[10]='0x010F' ; krynite
   color[11]='0x09A4' ; crystaline
   color[12]='0x0085' ; dragon
   color[13]='0x08AF' ; plutonium
   color[14]='0x0028' ; obsidian
   color[15]='0x0193' ; Agarite
   color[16]='0x052D' ; myuth
   color[17]='0x00CE' ; valorite
   color[18]='0x07D5' ; varite
   color[19]='0x0455' ; blakrock
   color[20]='0x04C2' ; bloodrock
   color[21]='0x0032' ; gold

   for n=1 to 21
   endsub


sub checkcolor(obj)
   var n, c
   Dim color[21]
   color[1]='0x09DA' ; vulcan
   color[2]='0x0060' ; aqua
   color[3]='0x0BA7' ; eldar
   color[4]='0x09E6' ; elvin
   color[5]='0x09B9' ; acid
   color[6]='0x09D3' ; steel
   color[7]='0x008F' ; sand rock
   color[8]='0x09EC' ; blood crest
   color[9]='0x09F0' ; gorgan
   color[10]='0x010F' ; krynite
   color[11]='0x09A4' ; crystaline
   color[12]='0x0085' ; dragon
   color[13]='0x08AF' ; plutonium
   color[14]='0x0028' ; obsidian
   color[15]='0x0193' ; Agarite
   color[16]='0x052D' ; myuth
   color[17]='0x00CE' ; valorite
   color[18]='0x07D5' ; varite
   color[19]='0x0455' ; blakrock
   color[20]='0x04C2' ; bloodrock
   color[21]='0x0032' ; gold

   c=uo.getcolor(obj)
   for n=1 to 21
      if c == color[n] then
         return 1
      endif
   next
endsub
sub castvortex()
   repeat
      checklag()
      uo.waittargetobject('self')
      uo.findtype('0x1F66',-1,'backpack')
      if uo.findcount() then
         while uo.mana<13
            wait(500)
         wend
         uo.useobject('finditem')
      else
         while uo.mana<27
            wait(500)
         wend
         uo.cast('Energy Vortex')
      endif
      WaitForMana()
   until not uo.injournal('The spell fizzles')
endsub
sub WaitForMana()
   VAR w,m=uo.mana
   for w=0 to 150
      if uo.mana<m then
         return
      endif
      wait(500)
   next
endsub
sub grabvortex()
   var kol=5, q
   uo.findtype('0x1F66',-1,'backpack')
   if uo.getquantity('finditem')<kol then
      q=kol-uo.getquantity('finditem')
      uo.print('Ищем вортекс')
      uo.findtype('0x1F66',-1,Chest)
      if uo.findcount() then
         uo.moveitem('finditem',STR(q),'backpack')
         checklag()
         wait(700)
      endif
   endif
endsub

sub InfoOre()
uo.Print('У вас всего '+str(uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA'))+' руды в сумке')
uo.Print('Из нее '+str(uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000') +uo.Count('0x19B9','0x0000')+uo.Count('0x19BA','0x0000'))+' железо и ' +str (uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA')- (uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000')+uo.Count ('0x19B9','0x0000')+uo.Count('0x19BA','0x0000')))+' цветмет')
end sub


sub Open(what)
   uo.useobject(what)
   checklag()
   wait(700)
endsub
sub Dropore()
   var n
   Open(Orechest)
   Dim ore[11]
   ore[0]='0x19BA'
   ore[1]='0x19B7'
   ore[2]='0x19B8'
   ore[3]='0x19B9'
   ore[4]='0x0F18'
   ore[5]='0x0F10'
   ore[6]='0x0F15'
   ore[7]='0x0F11'
   ore[8]='0x0F0F'
   ore[9]='0x0F26'
   ore[10]='0x0F16'
   ore[11]='0x0EED'
   uo.warmode(0)
   uo.useskill('Stealth') 
   for n=0 to 11
      uo.findtype(ore[n],-1,'backpack')
      while uo.findcount()
         uo.moveitem('finditem',0,Orechest)
         checklag()
         wait(400)
         uo.findtype(ore[n],-1,'backpack')
      wend
   next
   uo.print('Dropore done.')
   Open(Chest)
endsub
sub Mark(RuneID,Place)
   repeat
      if uo.mana<33 then
         meditation()
      endif
      checklag()
      Uo.Cast('Mark',RuneID)
      WaitForMana()
   until not uo.injournal('The spell fizzles')
   if Place==0 then
      Nrune=uo.getserial(RuneID)
   else
      Runehome=uo.getserial(RuneID)
   endif
endsub
sub meditation()
   uo.findtype('0x0F0E','0x09DF','backpack')
   if uo.findcount() then
      uo.useobject('finditem')
      wait(700)
   else
      while uo.mana < uo.int
         if uo.Journal(0)=='You are preoccupied with thoughts of battle.' then
            uo.warmode(0)
         endif
         checklag()
         Uo.Useskill('Meditation')
         waitformed()
      wend
   endif
endsub
sub waitformed()
   var n
   for n=0 to 100
      if uo.injournal('You lose|at peace') then
         return
      endif
      wait(500)
   next
endsub
sub RecallRune(nowrune)
   uo.Print('улетаем по руне')
   var oldX,oldY
   oldX = Uo.GetX()
   oldY = Uo.GetY()
   repeat
      if uo.mana<20 then
         meditation()
      endif
      Uo.Cast('Recall',nowrune)
      WaitForMana()
      wait(1000)
   Until oldX<>UO.GetX() AND oldY<>UO.GetY()
endsub
sub grabinvis()
   uo.findtype('0x0F0E',-1,'backpack')
   while uo.findcount()
      uo.moveitem('finditem',0,Chest)
      checklag()
      wait(700)
      uo.findtype('0x0F0E',-1,'backpack')
   wend
   uo.findtype('0x0F0E','0x0631',Chest)
   if uo.findcount() then
      uo.print('Ищем инвизку')
      uo.moveitem('finditem','3','backpack')
      checklag()
      wait(700)
   endif
endsub
sub RegCheck()
   VAR i,q
   VAR kol=8
   Dim Regs[6]
   Regs[0]='0x0F7A'      ; Black Pearl
   Regs[1]='0x0F7B'      ; Bood Moss
   Regs[2]='0x0F86'      ; Mandrake Root
   Regs[3]='0x0F88'     ; Nightshade
   Regs[4]='0x0F8C'     ; Sulfurous Ash
   Regs[5]='0x0F84'     ; Garlic
   
   for i=0 to 5
      if uo.count(Regs[i])<>kol then
         q=kol-uo.count(Regs[i])
         if q<>0 then
            if q>0 then
               uo.findtype(Regs[i],-1,Chest)
               if uo.findcount() then
                  uo.moveitem('finditem',STR(q),'backpack',141,134,0)
                  checklag()
                  wait(700)
                  uo.print('Берем реги для рекола...')
               else
                  uo.msg('No regs')
                  return
               endif
            else
               q=q*-1           
               uo.findtype(Regs[i],-1,'my')   
               if uo.findcount() then
                  uo.moveitem('finditem',STR(q),Chest)
                  checklag()
                  wait(700)
                  uo.print('Регов больше чем надо. Кидаем лишнее в сундук')
               endif
            endif
         endif
      endif
   next
endsub
sub GrabBlankRune()
   Open(BlankRunebag)
   uo.findtype(rune,-1,BlankRunebag)
   if uo.findcount() then
      Blankrune=uo.getserial('finditem')
      uo.moveitem('finditem',0,'backpack')
      checklag()
      wait(700)
      uo.print('Взяли бланк руну')
      Runinetu=0
   else
      uo.print('Бланк рун больше нету! Скрипт остановлен.')
      uo.exec('terminate all')
   endif
endsub
sub DropbagCheck()
   uo.print('Проверяем мешок Dropbag')
   Open(Dropbag)
   uo.findtype(rune,-1,Dropbag)
   while uo.findcount()
      uo.moveitem('finditem',0,Runebag)
      checklag()
      wait(700)
      uo.print('Нашли руну. Кладем их в сумку Runebag.')
      uo.findtype(Rune,-1,Dropbag)
   wend
endsub
sub mining()
   var mx, my, mz, i, j, f
   mx = UO.GetX('self')
   my = UO.GetY('self')
   mz = UO.GetZ('self')
   while UO.Weight <= (UO.STR * 1)
   for i = mx-4 to mx+4
      for j = my -4 to my+4
         BEGIN:
         UO.Print('Копаем в координатах: '+str(mx-i)+' '+str(my-j))
         for f=1 to 10
            if uo.count('0x0F39')==0 and uo.count('0x0F3A')==0 and uo.count('0x0E86')==0 and uo.count('0x0E85')==0 then
               return
            endif
           InfoOre()         
            UO.DeleteJournal()
            Tohide()
            if uo.waiting() then
               uo.canceltarget()
            endif
            UO.Waittargettile('1341', str(i), str(j), str(mz))
            DigAhole(i,j,mz)         
            if waitforore()==1 then
               f=10
            endif
        uo.findtype('0x19B7','0x0000','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
        uo.findtype('0x19B7','0x0750','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
        uo.findtype('0x19B7','0x0193','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
        uo.findtype('0x19B7','0x0590','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
        uo.findtype('0x19B7','0x060A','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
        uo.findtype('0x19B7','0x0088','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
        uo.findtype('0x19B7','0x0488','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
        uo.findtype('0x19B7','0x0482','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
        uo.findtype('0x19B7','0x096B','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
        uo.findtype('0x19B7','0x0014','backpack') # Тип и цвет айрона
        uo.drophere('finditem')
            if flagpk==1 then
               return
            endif
            if uo.injournal('You have been revealed') and flaginvis==1 then
               flaginvis=0
               invis()
               return
            endif
         next
         if uo.journal(0)==uo.getname('self')+': You loosen some rocks but fail to find any useable ore.' then
            wait(10000)
            goto BEGIN
         endif
         if checkelem()==1 then
            return
         endif
      next
   next
   wend
endsub

sub DigAhole(i,j,mz)
   var f
   for f=0 to 10
      checklag()
      uo.waittargettile('1341',i,j,mz)
      uo.useobject(pickaxe)
      if waitforore()==1 then
         return
      endif
   next
endsub


sub waitforore()
   var n
   for n=0 to 50
      checkpk()
      if flagpk==1 then
         return
      endif
       if UO.InJournal('You put the Bloodrock Ore in your pack') then
         return
      endif
       if UO.InJournal('You put the Rose Ore in your pack') then
         return
      endif
       if UO.InJournal('You put the Agapite Ore in your pack') then
         return
      endif
       if UO.InJournal('You put the Gold Ore in your pack') then
         return
      endif
      if uo.injournal('no ore here|location|far away|in rock|You have been revealed|You put') then
         return 1
      endif
      if UO.InJournal('You put|heavy|but fail') then
         return
      endif
      wait(500)
      ws()
   next
endsub
sub checkpk()
   var n
   var ser
   var noto
   var me=uo.getserial('self')
   for n=0 to 9
      ser=uo.journalserial(n)
      noto=uo.getnotoriety(ser)
      if noto<>0 and noto<>1 and not uo.injournal('Elemental|Scorpion King|Giant Spider|Energy Vortex') and not ser==me then
         uo.TextOpen()
         uo.TextPrint(uo.getname(ser)+' @ '+MakeTime())
         gohome()
         flagpk=1
         return
      endif
   next
endsub

sub toeat()
   repeat
      uo.findtype(food,-1,Chest)
      if uo.findcount() then
         uo.moveitem('finditem','2','backpack')
         checklag()
         wait(600)
         repeat
            uo.usetype(food)
            wait(500)
         until uo.injournal('full to eat') or uo.count(food)==0
      endif
   until uo.injournal('full to eat')
   uo.findtype(food,-1,'backpack')
   if uo.findcount() then
      uo.moveitem('finditem',0,Chest)
      checklag()
      wait(600)
   endif   
endsub

sub gohome()
   var oldX=uo.getx('self')
   var oldY=uo.gety('self')
   invis()
 uo.recall(Runebook,Runenr)
   repeat
      wait(700)
      if uo.injournal('You have been revealed') then
         flaginvis=0
         invis()
      endif
   until oldX<>uo.getx('self') && oldY<>uo.gety('self')
endsub
sub invis()
   if flaginvis<>1 then
      uo.findtype('0x0F0E','0x0631','my')
      if uo.findcount() then
         uo.warmode(0)
         uo.useobject('finditem')
         flaginvis=1
         checklag()
      endif
   endif
endsub
sub mana()
   if flaginvis<>1 then
      uo.findtype('0x0F0E','0x09DF','my')
      if uo.findcount() then
         uo.warmode(0)
         uo.useobject('finditem')
         flaginvis=1
         checklag()
      endif
   endif
endsub
sub ws()
   if uo.journal(0)=='World is saving now...' then
      repeat
         wait(700)
      until uo.journal(0)<>'World is saving now...'
   endif
endsub
sub CheckLag()
   repeat
      UO.DeleteJournal()
      UO.Click('backpack')
   until backpack()==1
endsub
sub backpack()
   var n
   for n=0 to 200
      if uo.injournal('a backpack') then
         return 1
      endif
      wait(200)
   next
endsub

sub gohome1()
   var oldX=uo.getx('self')
   var oldY=uo.gety('self')
   invis()
 uo.recall(Runebook,Runenr)
   repeat
      wait(700)
      if uo.injournal('You have been revealed') then
         flaginvis=0
      endif
   until oldX<>uo.getx('self') && oldY<>uo.gety('self')
endsub

sub Reconnector()
   var ReconnectTime, RFlag
   ReconnectTime = '0'
   RFlag = 1
   Repeat
      While (UO.ObjAtLayer('Bpack') == '')
         if RFlag Then
            ReconnectTime = MakeTime()
            RFlag = 0
         endif
         Wait(70000) # WorldSave Protection
         UO.Say('vertijok1')
         Wait(3000)
         UO.Say('eegolcuf')
         Wait(3000)
         UO.Say('')
         Wait(3000)
         UO.LDblClick(357,164)
         UO.LClick(616,459)
         Wait(3000)
      WEnd
      Wait(3000)
      if (RFlag == 0) and (ReconnectTime <> '0') Then
         UO.Exec('exec gohome1')
         UO.TextOpen()
         UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
         RFlag = 1
         ReconnectTime = '0'
      endif
   Until false
end sub
sub MakeTime()
   VAR D, T, Ret, i
   Ret = STR(UO.Time())
   T = ""
   For i = 0 To Len(Ret)
      T = Ret[Len(Ret)-i] + T
      If (I == 2) OR (I == 4) Then
         T = ":" + T
      EndIf
   Next
   Ret = STR(UO.Date())
   D = ""
   For i = 0 To Len(Ret)
      D = Ret[Len(Ret)-i] + D
      If (I == 2) OR (I == 4) Then
         D = "." + D
      EndIf
   Next
   Ret = T + " @ " + D
   RETURN Ret
end sub

а это ходилка

Code: Select all

########################### ХОДИЛКА 3 ##########################
#var Prec=3 # Как близко следует подойти к цели (Precision)
#var MaxTraceDistance=15 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву.
#var Speed=2 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1.
#var StepTimeOut=400 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места.
#UO.SetGlobal("Logging","1")  # - показывать отладочные сообщения.
#UO.SetGlobal("BlindWalk","0") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ.
#В функции IsPass, содержиться список проходимых тайлов.

#Walker(X,Y,Prec) - идем к цели с координатами X,Y. Возвращает 1 в случае успешного достижения цели, и 0 - при невозможном обходе (путь не найден)
#Tracer(StartDir,Direction) - трассировка 1 шага. Возвращает направление по которому получилось сдвинуться с места. StartDir #- направление последнего движения, Direction (-1 или +1) направление обхода. -1 - по часовой стрелке, +1 против часовой #стрелки. Направления скрипт использует личного формата:
#1 - влево вниз
#2 - вниз
#3 - вправо вниз
#4 - вправо
#5 - вправо вверх
#6 - вверх
#7 - влево вверх
#8 - влево
#Tracer(StartDir,Direction) - идеально подходит для рыбалки вдоль берега так как она будет обходить берег бесконечно (1 #запуск функции = 1 шаг обхода).

#####################################################
# WW  W  WW   AA    LL     Kk KK  EE  EE  RRR       #
# WW  W  WW  AA A   LL     Kk K   EEE     R  R      #
# WW  W  WW  AA A   LL     KKK    EEEEE   R R       #
# WW WW  WW  AAAA   LL     KKK    EEE     RRR       #
#  WWW WWW  AA   A   LLLL  KK Kk  EE  EE  R  RR     #
#####################################################
   var MaxTraceDistance=10
   var TraceLoopIncrease=5 #Увеличение MaxTraceDistance при исчерпании количества ходов
   var LimitTrace=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
   var Speed=1
   var StepTimeOut=600  #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
                        # Для ходьбы - 500+Ping
                        # Для бега/ходьбы на лошади - 300+Ping
                        # Бег на лошади - 150 + Ping
   var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
   var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.

Sub Walker(GoX,GoY,Prec)
   UO.warmode(0)
   UO.SetGlobal("Logging","0")
   UO.SetGlobal("BlindWalk","0")
   var LastDir
   var MoveRes
   var TracerCnt
   UO.SetGlobal("GlobalGoX",str(GoX))
   UO.SetGlobal("GlobalGoY",str(GoY))
   while not IsEnd(GoX,GoY,Prec)
      TracerCnt = MaxTraceDistance
      repeat
         LogInfo('Just walking')
         LastDir=GoUntilHit(GoX,GoY,Prec)
         if IsEnd(GoX,GoY,Prec) then
            return 1
         endif
         LogInfo('Tracing')
         MoveRes = FullAroundTrace(LastDir,GoX,GoY,Prec,TracerCnt)
         if TracerCnt > LimitTrace then
            return 0
         endif
         TracerCnt = TracerCnt + TraceLoopIncrease
      until MoveRes == 1
   wend
   return 1
endsub

Sub FullAroundTrace(StartDir,GoX,GoY,Prec,MaxTrace)
   var LineX=UO.GetX()
   var LineY=UO.GetY()
   var CurDir=StartDir
   var Direction=CountDirection(GoX,GoY,CurDir,Prec)
   var StartX,StartY
   var MovesDone=0
   repeat
      StartX=UO.GetX()
      StartY=UO.GetY()
      CurDir=Tracer(CurDir,Direction,Prec)
      if (CurDir==GetDir(GoX,GoY,Prec)) then
         return 1
      endif
      if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir(),Prec),LineX,LineY,GoX,GoY,StartX,StartY,Prec) then
         return 1
      endif
      MovesDone=MovesDone+1
      CurDir=AddToDir(CurDir,-Direction,Prec)
   until MovesDone>MaxTrace
   return 0
endsub

Sub CountDirection(GoX,GoY,StartDir,Prec)
   var GoDir=GetDir(GoX,GoY,Prec)
   var MyX=UO.GetX()
   var MyY=UO.GetY()
   if GoDir<StartDir then
      return -1
   endif
   if GoDir>StartDir then
      return 1
   endif
   if Abs(MyX-GoX)>Abs(MyY-GoY) then
      if (GoDir==3 and GoY>MyY) OR (GoDir==7 and GoY<MyY) then
         return -1
       else
         return 1
      endif
    else
      if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then
         return -1
       else
         return 1
      endif
   endif
endsub

Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY,Prec)
   var x3,y3,x4,y4
   x3=StartX
   y3=StartY
   x4=StartX+(XFromDir(Dir)-StartX)*Speed
   y4=StartY+(YFromDir(Dir)-StartY)*Speed
   return LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
endsub

Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
   if x1==x3 and y1==y3 then
      return false
   endif
   var z1=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)
   var z2=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1)
   if z1*z2>0 then
      return false
    else
      LogInfo('Vector info:')
      LogInfo('x1= '+str(x1))
      LogInfo('y1= '+str(y1))
      LogInfo('x2= '+str(x2))
      LogInfo('y2= '+str(y2))
      LogInfo('x3= '+str(x3))
      LogInfo('y3= '+str(y3))
      LogInfo('x4= '+str(x4))
      LogInfo('y4= '+str(y4))
      return true
   endif
endsub

Sub IsDiap(X,X0,X1,Prec)
   if X<=X0+Prec and X>=X1-Prec OR X>=X0-Prec and X<=X1+Prec then
      return true
   endif
   return false
endsub

Sub GoUntilHit(GoX,GoY,Prec)
   var LastDir
   LastDir=GetDir(GoX,GoY,Prec)
   var CouldMove
   repeat
      LastDir=GetDir(GoX,GoY,Prec)
      if LastDir<>0 and not IsEnd(GoX,GoY,Prec) then
         CouldMove=TryDir(LastDir,Prec)
      endif
   until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove
   return LastDir
endsub

Sub IsEnd(GoX,GoY,Prec)
   if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then
      LogInfo('END FOUND')
      return true
    else
         if Abs(UO.GetX()-GoX)>=100 and Abs(UO.GetY()-GoY)>=100 then
            LogInfo('END FOUND')
            return true
          else
            return false
         endif
      #return false
   endif
endsub

Sub GetDir(GoX,GoY,Prec)
   var MyX=UO.GetX()
   var MyY=UO.GetY()
   var DiffX=Abs(UO.GetX()-GoX)
   var DiffY=Abs(UO.GetY()-GoY)
   var GoDir=0
   if (DiffX/(DiffY+0.1))>=2 then
      if (MyX>GoX) then
         GoDir=7
       else
         GoDir=3
      endif
    else
      if (DiffY/(DiffX+0.1))>=2 then
         if (MyY>GoY) then
            GoDir=5
          else
            GoDir=1
         endif
       else
         if (MyX>GoX) and (MyY>GoY) then
            GoDir=6
          else
            if (MyX>GoX) and (MyY<GoY) then
               GoDir=8
             else
               if (MyX<GoX) and (MyY>GoY) then
                  GoDir=4
                else
                  if (MyX<GoX) and (MyY<GoY) then
                     GoDir=2
                  endif
               endif
            endif
         endif
      endif
   endif
   return GoDir
endsub

Sub Tracer(StartDir,Direction,Prec)
   var CurDir=StartDir
   var Result
   repeat
      Result=TryDir(CurDir,Prec)
      if not Result then
         CurDir=AddToDir(CurDir,Direction,Prec)
      endif
   until Result
   return Result
endsub

Sub AddToDir(Dir,Cnt,Prec)
   var NewDir=Dir
   NewDir=NewDir+Cnt
   while NewDir>8
      NewDir=NewDir-8
   wend
   while NewDir<1
      NewDir=NewDir+8
   wend
   return NewDir
endsub

Sub TryDir(Dir,Prec)
   var BegX=UO.GetX() # Ia?aeuiia O
   var BegY=UO.GetY() # Ia?aeuiia Y
   var Counter=0
   var GoX=BegX
   var GoY=BegY
   GoX=XFromDir(Dir)
   GoY=YFromDir(Dir)
   if not IsPass(GoX,GoY) then
      LogInfo(str(GoX)+':'+str(GoY)+' is not passable')
      return false
   endif
   return TurnAndGoDir(Dir,Prec)
endsub

Sub XFromDir(Dir)
   if Dir==2 OR Dir==3 Or Dir==4 then
      return (UO.GetX()+1)
   endif
   if Dir==6 OR Dir==7 Or Dir==8 then
      return (UO.GetX()-1)
   endif
   return (UO.GetX())
endsub

Sub YFromDir(Dir)
   if Dir==8 OR Dir==1 Or Dir==2 then
      return (UO.GetY()+1)
   endif
   if Dir==4 OR Dir==5 Or Dir==6 then
      return (UO.GetY()-1)
   endif
   return (UO.GetY())
endsub

Sub TurnAndGoDir(Dir,Prec)
   var StartDir=GetDirToDir(UO.GetDir(),Prec)
   var StartX=UO.GetX()
   var StartY=UO.GetY()
   var EndDir
   var Counter=0
   var TestCounter=CheckCnt
   #Direction Test
   repeat
      Counter = 0
      LogInfo('Dir: '+str(StartDir)+' Counter: '+str(Counter))
      PressDir(Dir)
      repeat
         EndDir=GetDirToDir(UO.GetDir(),Prec)
         wait(DynamicPause)
         Counter=Counter+1
      until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
      TestCounter = TestCounter - 1
      LogInfo('Dir: '+str(EndDir)+' Counter: '+str(Counter))
   until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause
   if Counter>=StepTimeOut/DynamicPause  then
      LogInfo('Direction timeout reached')
      return 0
   endif
   #End direction Test
   if StartY<>UO.GetY() or StartX<>UO.GetX() then
      return Dir
   endif
   #Start Primary test
   TestCounter=CheckCnt
   repeat
      GoDir(Dir,Prec)
      Counter=0
      repeat
         wait(DynamicPause)
         Counter=Counter+1
      until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
      TestCounter = TestCounter - 1
   until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause
   #End primary test
   if Counter>=StepTimeOut/DynamicPause then
      LogInfo('Step timeout reached')
      return 0
    else
      return Dir
   endif
endsub

Sub GetDirToDir(GotDir,Prec)
   var ChangedDir=-GotDir
   ChangedDir=AddToDir(ChangedDir,5,Prec)
   return ChangedDir
endsub

Sub DirToInj(Dir)
   dim Dirs[9]
      Dirs[1]=1
      Dirs[2]=2
      Dirs[3]=3
      Dirs[4]=6
      Dirs[5]=9
      Dirs[6]=8
      Dirs[7]=7
      Dirs[8]=4
   return (Dirs[Dir])
endsub

Sub PressDir(Dir)
   dim Dirs[9]
      Dirs[1]=35
      Dirs[2]=40
      Dirs[3]=34
      Dirs[4]=39
      Dirs[5]=33
      Dirs[6]=38
      Dirs[7]=36
      Dirs[8]=37
   UO.Press(Dirs[Dir],1)
endsub

Sub GoDir(Dir,Prec)
   dim Dirs[9]
      Dirs[1]=35
      Dirs[2]=40
      Dirs[3]=34
      Dirs[4]=39
      Dirs[5]=33
      Dirs[6]=38
      Dirs[7]=36
      Dirs[8]=37
   var DistanceX=Abs(UO.GetX()-val(UO.GetGlobal("GlobalGoX")))
   var DistanceY=Abs(UO.GetY()-val(UO.GetGlobal("GlobalGoY")))
   var GoDistance
   if (DistanceX-Prec)<Speed then
      GoDistance=DistanceX-Prec
    else
      if (DistanceY-Prec)<Speed then
         GoDistance=DistanceY-Prec
       else
         GoDistance=Speed
      endif
   endif
   UO.Press(Dirs[Dir],GoDistance)
endsub

Sub IsPass(X,Y)
   if UO.GetGlobal("BlindWalk") then
      return true
   endif
   dim Types[60]
      Types[1]=3
      Types[2]=25
      Types[3]=51
      Types[4]=63
      Types[5]=113
      Types[6]=140
      Types[7]=172
      Types[8]=219
      Types[9]=232
      Types[10]=235
      Types[11]=239
      Types[12]=243
      Types[13]=248
      Types[14]=251
      Types[15]=264
      Types[16]=267
      Types[17]=282
      Types[18]=289
      Types[19]=321
      Types[20]=379
      Types[21]=420
      Types[22]=440
      Types[23]=476
      Types[24]=499
      Types[25]=513
      Types[26]=542
      Types[27]=578
      Types[28]=586
      Types[29]=622
      Types[30]=700
      Types[31]=804
      Types[32]=1740
      Types[33]=1758
      Types[34]=1770
      Types[35]=1779
      Types[36]=1779
      Types[37]=1881
      Types[38]=1886
      Types[39]=1801
      Types[40]=1805
      Types[41]=1813
      Types[42]=1820
      Types[43]=1831
      Types[44]=1833
      Types[45]=1843
      Types[46]=1850
      Types[47]=1873
      Types[48]=1876
      Types[49]=1885
      Types[50]=1888
      Types[51]=1946
      Types[52]=1969
      Types[53]=2500
      Types[54]=2539
   for var i=1 TO 53 STEP 2
      if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then
         return true
      endif
   next
   return false
endsub

Sub LogInfo(Line)
   if not UO.GetGlobal("Logging")=="0" then
      UO.TextOpen()
      UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line);
   endif
endsub

Sub Abs(X)
   if X>0 then
      return X
    else
      return (-X)
   endif
endsub
################################################################
# конец ходилки ################################################
################################################################

1)мне надо так чтобы я один раз взял кординаты таилов из пещеры и забыл про них

2)я зделал скрипт но есть одно но при убиства елема он не улетает а переходит на другой таил а мне недо чтобы он улетел .

3)я копаЮ -4 +4 после обкопку вокруг себя мне надо перехадить на следущий кординат и сново копал, задать одельный кусок скрипта с координатами не выходит потому что если придёт пк то он не улетит а передёт на следущий таил что мне не выгодна это

)потом вставить в Этот скрипт так чтобы дапустим при убиства елема и лута руды чтобы он улетал дамой скидавать а остальное так как есть тот кто знает в скриптов то поимёт что тут он не копает полностю руду с таила а токо один раз выкапал и всё переходит на другой тайл вот собствено и всё что я хотел чтобы вы помогли, да забыл шард ДРВ
Irina E
Posts: 240
Joined: 2009-06-12 20:10:00
Location: Vasa Smerti(RASToMAN) DRW

Re: Запесать таилы пищеры в фаил

Post by Irina E »

Что никто не поможет
Post Reply