парни помогите пожалуста !

Ask for help

Moderators: Murderator+, Murderator

Post Reply
kosrk
Posts: 20
Joined: 2010-12-02 23:00:07

парни помогите пожалуста !

Post by kosrk »

Понять не могу почему не рекалится в лес :( хотя домои рекалится все выгружает тви галочка стоит не могу понять что еще нада :(

Помогите подправить плиз :cry:

Code: Select all

###############################################################
###                  Инструкции по применению               ###
###############################################################
### Во время работы скрипта рекомендуется не говорить,
### это будет тормозить его выполнение, хотя и не смертельно.
### Вердату желательно иметь нормальную, не с пеньками вместо
### деревьев.
###
### 1. До запуска скрипта в бэкпаке должно быть: любой топор,
### кирка (a pickaxe); если надо, чтобы чар реколился домой и
### складывал логи, то еще две руны и спеллбук с реколом, либо рунбука.
### 2. Марчим одну руну куда-нить в безопасное место (например,
### в дом), вторую туда, где хотим рубить. Идем туда, врубаем
### скрипт. Руны засовывать в рунбук в следующем порядке:
### руну к сейфу в 3 слот, руну в лес в пятый слот
### 3. Появится прицел и мессага "Выберите топор". Кликаем на
### топор. Если переменная TryRecall=1 то так же выбираем
### сначала руну домой, потом руну в лес. Если вы рекалитесь с рунбуки то указать рунбуку.
### Нужно обязательно проверить, хватает ли регов или свитков,
### иначе чар застрянет посреди леса.
### 4. Если переменная GetFromFile=1, то скрипт считает из файла
### координаты деревьев и сразу побежит к первому дереву. Если
### GetFromFile=0, то начнется анализ территории. ВО ВРЕМЯ АНАЛИЗА
### ОКНО КЛИЕНТА ДОЛЖНО БЫТЬ АКТИВНО, И КУРСОР ДОЛЖЕН НАХОДИТЬСЯ
### НА ИГРОВОМ ПОЛЕ!!! Можно менять переменную Area от 1 до 4,
### чтобы увеличивать/уменьшать размер территории для анализа.
### Сколько выбирать, зависит от густоты леса и скилла Ламбера,
### пробуй сам.
### 5. Когда база загрузится, появится соответствующая мессага,
### и начнется бесконечный цикл на обход деревьев. Он происходит
### так: идем к дереву; если переменная TryHiding=1 то пытаемся
### уйти в хайд; начинаем рубить логи, пока все не вырубим, или
### пока не кончится таймер (30 ударов); если переменная
### TryRecall=1 и логов больше чем переменная LogsQty, то
### реколимся домой, складываем логи на пол, реколимся обратно;
### идем к следующему дереву и все повторяется сначала.
### Руну к сейфу нужно марчить так, чтобы после рекола он имел сейф в прямой досягаемости
### Вот собственно и все! Enjoy it!
### Для нормального анализа вердата должна быть не с пеньками а с полноценными деревьями
### Айдишник сейфа прописывать в процедуре Unload()
###############################################################



sub Lumber()
  var i=0,j=0,k=0,r=0,q=0,ii,jj, a=0
  var TopX=324,TopY=65
  dim TreeX[300], TreeY[300],TreeT[300]
  dim TreeTile[300]
  var flag=0,treeCount=0,clicks=0,flag2=0
  var f=file("C:\trees2.dat")
 
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;
  var Area=1         ## Размер обрабатываемой территории, можно менять от 1 до 4.
 
  var TryHiding=1     ## 1 - перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет
 
  var TryRecall=1  ## 1 - после того как соберет LogsQty логов, будет пытаться реколиться домой,                  # складывать логи на пол и реколиться обратно (нужно выбрать две руны), 0 - не будет.
 
  var LogsQty=1700    ## Количество логов, добыв которое надо реколиться домой.
 
  var RecallFromScroll=1 ## 1 - с рун, 0 - из рунбука
 
  var GetFromFile=1 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента
 
  var Const=1 ## во сколько раз увеличивать размер тестовой территории (коэффициент)
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;
 
  #Графика деревьев
  TreeTile[0]=3283
  TreeTile[1]=3277
  TreeTile[2]=3293
  TreeTile[3]=3296
  TreeTile[4]=3302
  TreeTile[5]=3299
  TreeTile[6]=3290
  TreeTile[7]=3288
  TreeTile[8]=3286
  TreeTile[9]=3280
 
  uo.exec("filterspeech on")
  uo.exec("filterspeech add 'Where do you want to use the pickaxe?'")
 
  uo.print('Выбери топор: ')
  uo.exec('addobject axe')
  wait(5000)
 
  if TryRecall==1 then
   
    uo.print('Выбери Рунбуку:' )
    uo.exec('addobject Runebook')
    wait(5000)
   
    if RecallFromScroll==1 then
      uo.print('Выбери руну домой: ')
      uo.exec('addobject runeHome')
      wait(5000)
      uo.print('Выбери руну в лес: ')
      uo.exec('addobject runeLumber')
      wait(5000)
    end if
  end if
 
  #Загружаем координаты из файла
  if GetFromFile==1 then
    uo.print('Загружаем координаты из файла...')
    f.open()
    TreeCount=safe call f.readNumber()
    for i=1 to TreeCount
      TreeT[i]=safe call f.ReadNumber()
      TreeX[i]=safe call f.ReadNumber()
      TreeY[i]=safe call f.ReadNumber()
    next
    f.close()
  else
    #Собираем координаты из клиента
    uo.print('Собираем координаты деревьев в округе...')
    for a=1 to Const
      for q=1 to Area
        if q==2 then
          gotoxy(uo.getx()+20,uo.gety()-10)
        end if
        if q==3 then
          gotoxy(uo.getx(),uo.gety()+20)
        end if
        if q==4 then
          gotoxy(uo.getx()-20,uo.gety())
        end if
        for r=0 to 3
          if r==1 then
            gotoxy(uo.getx()+10,uo.gety())
          end if
          if r==2 then
            gotoxy(uo.getx(),uo.gety()+10)
          end if
          if r==3 then
            gotoxy(uo.getx()-10,uo.gety())
          end if
          for j=0 to 8
            for i=0 to 8
              clicks=0
              flag=0
              uo.DeleteJournal()
              #Кликаем на тайл
              uo.usetype('0x0e85')
              waitForTarget()
              uo.DeleteJournal()
              uo.LClick(TopX+i*21-j*21,TopY+i*21+j*21)
              WaitForTryRock()
              #Проверяем дерево ли это
              flag=0
              for k=0 to 9
                if uo.LastTile(0)==TreeTile[k]+1 then
                  flag=2
                end if
              next
              if flag==0 then
                for k=0 to 9
                  if uo.LastTile(0)==TreeTile[k] then
                    flag=1
                  end if
                next
              end if
              #Кликнули на ствол
              if flag==1 then
                flag2=0
                if treeCount>0 then
                  for ii=1 to treeCount
                    if treeX[ii]==uo.lastTile(1) AND treeY[ii]==uo.lastTile(2) then
                      flag2=1
                    end if
                  next
                end if
                if flag2==0    then
                  treeCount=treeCount+1
                  TreeX[treeCount]=uo.LastTile(1)
                  treeY[treeCount]=uo.lastTile(2)
                  TreeT[treeCount]=uo.LastTile(0)
                  uo.print('Найдено дерево: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2)))
                end if
              end if
              #Кликнули по листве
              if flag==2 then
                flag2=0
                if treeCount>0 then
                  for ii=1 to treeCount
                    if treeX[ii]==uo.lastTile(1) AND treeY[ii]==uo.lastTile(2) then
                      flag2=1
                    end if
                  next
                end if
                if flag2==0    then
                  treeCount=treeCount+1
                  TreeX[treeCount]=uo.LastTile(1)
                  treeY[treeCount]=uo.LastTile(2)
                  TreeT[treeCount]=uo.LastTile(0)-1
                  uo.print('Найдено дерево: x='+str(uo.lasttile(1))+' y='+str(uo.lastTile(2)))
                end if
              end if
            next
          next
        next
      next
    next
    uo.exec("filterspeech off")
    uo.print('Анализ закончен, координаты деревьев записаны в файл C:\trees2.dat')
    SaveToFile(treeCount,TreeX,TreeY,TreeT)
  end if
  uo.print('Деревьев найдено: '+str(treeCount))
  wait(2000)
  #Ходим по собранным координатам
  while 1==1
    if treeCount>0 then
      for i=1 to treeCount
        if TryRecall==1 AND uo.Count('ZLK')>=LogsQty then
          ToRecall(RecallFromScroll)
        end if
        uo.print('Идем к дереву '+str(i)+': x='+str(treex[i])+' y='+str(treey[i]))
        flag=gotoxy(treex[i],treey[i])
        if flag==1 then
          if TryHiding==1 then
            ToHide()
          end if
          GetTree(str(treeT[i]),str(treeX[i]),str(TreeY[i]),str(uo.getz()))
        end if
      next
    end if
  wend
end sub

sub GetTree(type,x,y,z)
  var i
  uo.print('Начинаем рубку дерева...')
  for i=0 to 30
    if uo.warmode()==1 then
      return 0
    end if
    wait(200)
    uo.deletejournal()
    uo.waittargettile(type,x,y,z)
    uo.useobject('axe')
    if WaitForChange()==1 then
      return 1
    end if
  next
  return 0
end sub

sub ToRecall(FromScroll)
  RecallToHome(FromScroll)
  wait(1000)
  Unload()
  wait(1000)
  RecallToLumber(FromScroll)
end sub


sub RecallToHome(FromScroll)
  var i
  uo.print('Реколимся домой...')
  for i=1 to 10
    uo.deletejournal()
    if FromScroll==0 then
      RecallRunebookhome()
    else
      uo.waittargetobject('runeHome')
      uo.cast('Recall')
    end if
    if WaitForRecall()==1 then
      return 1
    end if
  next
  return 0
end sub


sub RecallToLumber(FromScroll)
  var i
  uo.print('Реколимся обратно...')
  for i=1 to 10
    uo.deletejournal()
    if FromScroll==0 then
      RecallRunebookles()
    else
      uo.waittargetobject('runeLumber')
      uo.cast('Recall')
    end if
    if waitForRecall()==1 then
      return 1
    end if
  next
  return 0
end sub

sub ToHide()
  var i
  uo.print('Пытаемся уйти в хайд...')
  for i=1 to 15
    uo.deletejournal()
    uo.useskill('Hiding')
    if WaitForHide()==1 then
      return 1
    end if
  next
  return 0
end sub

sub WaitForRecall()
  var Text1=uo.getname()+": The spell fizzles."
  var mess='',lastX=uo.getX(),lastY=uo.getY()
  for var i=0 to 400
    mess=uo.journal(0)
    if uo.Journal(0)==Text1 then
      return 0
    end if
    if uo.getX()<>lastX OR uo.getY()<>LastY then
      return 1
    end if
    wait(50)
  next
  return 0
end sub

sub WaitForHide()
  var Text1=uo.getname()+": You have hidden yourself well"
  var Text2=uo.getname()+": You can't seem to hide here."
  var mess
  for var i=0 to 200
    mess=uo.journal(0)
    if uo.Journal(0)==Text1 then
      return 1
    end if
    if uo.Journal(0)==Text2 then
      return 0
    end if
    wait(50)
  next
  return 0
end sub

sub WaitForChange()
  var Text1=uo.getname()+': You hack at the tree for a while, but fail to produce any useable wood.'
  var Text2='There is nothing here to chop.'
  var Text3="You can't reach this."
  var mess
  for var i=0 to 200
    mess=uo.journal(0)
    if uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 then
      return 1
    end if
    if uo.Journal(0)==Text1 then
      return 0
    end if
    if mess[0]=='Y' AND mess[1]=='o' AND mess[2]=='u' AND mess[4]=='p' AND mess[5]=='u' AND mess[6]=='t' then
      return 0
    end if
    wait(50)
  next
  return 0
end sub

sub WaitForTryRock()
  var Text1="That is too far away."
  var Text2="Try mining in rock."
  var Text3="There is no ore here to mine."
  var Text4="You have no line of sight to that location"
  var Text5="You can't see the target"
  for var i=0 to 50
    if uo.Journal(0)==Text1 OR uo.Journal(0)==Text2 OR uo.Journal(0)==Text3 OR uo.Journal(0)==Text4 OR uo.Journal(0)==Text5 then
      return 1
    end if
    wait(200)
  next
  return 0
end sub

sub WaitForTarget()
  for var i=0 to 50
    if uo.Targeting()==1 then
      return 1
    end if
    wait(200)
  next
  return 0
end sub

sub WaitForChangeXY(myX,myY,lastX,lastY)
  for var i=1 to 50
    if lastX<>myX OR lastY<>myY then
      return 1
    end if
    wait(200)
  next
  return 0
end sub

sub gotoXY(x,y)
  var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0
  for i=1 to 60
    MyX=uo.getX();
    MyY=uo.getY();
    if LastX==MyX AND LastY==MyY then
      halt=halt+1
    else
      halt=0
    end if
    if halt>=10 then
      if uo.GetDir()==1 then
        for z=0 to 8
          uo.press(40)
        next
      end if
      if uo.GetDir()==3 then
        for z=0 to 8
          uo.press(37)
        next
      end if
      if uo.GetDir()==5 then
        for z=0 to 8
          uo.press(38)
        next
      end if
      if uo.GetDir()==7 then
        for z=0 to 8
          uo.press(39)
        next
      end if
      halt=15
    end if
    if abs(x-myX)<=1 AND abs(y-myY)<=2 then
      return 1
    end if
    if x<=MyX then
      if y<=MyY then
        for z=0 to 3
          uo.press(38)
        next
      else
        for z=0 to 3
          uo.press(37)
        next
      end if
    else
      if y<=MyY then
        for z=0 to 3
          uo.press(39)
        next
      else
        for z=0 to 3
          uo.press(40)
        next
      end if
    end if
    lastX=myX
    lastY=myY
    wait(200)
  next
  return 0
end sub

sub abs(num)
  if num>=0 then
    return num
  else
    return num*(-1)
  end if
end sub

sub SaveToFile(TreeCount,TreeX,TreeY,TreeT)
  var f=file("C:\trees.dat")
  var s=0,i=0
  f.open()
  f.create()
  s=safe call f.writeln(TreeCount)
  for i=1 to TreeCount
    s=safe call f.writeln(str(TreeT[i])+' '+str(treeX[i])+' '+str(TreeY[i]))
  next
  f.close()
end sub

sub main()
  Lumber()
end sub

sub Unload()
  var UnloadCont='0x40B8A4FD' #айди сейфа
  ToHide()
  VAR Exit, i
  DIM Ore[5]
  Ore[0]=0x1bdd
  Ore[1]=0x1bdd
  Ore[2]=0x1bdd
  Ore[3]=0x1bdd
 
  UO.SetReceivingContainer(UnloadCont); storecontainer
  wait(500)
 
 
  For i=0 to 3
    Exit=0
    repeat
      UO.FindType(Ore[i])
      if UO.GetQuantity('finditem')>0 then
        UO.Grab('0','finditem')
        CheckLag()
        wait(1500)
      Else
        Exit=1
      endif
    until Exit==1
  Next
 
  UO.UnSetReceivingContainer()
end sub

sub CheckLag()
  UO.DeleteJournal()
  UO.Click('backpack')
 
  repeat
    wait(500)
  until UO.InJournal('backpack')
end sub

sub RecallRunebookhome()
  ToHide()
  UO.UseObject('Runebook')
  wait(500)
  UO.LClick(135,99)
  wait(1000)
end sub

sub RecallRunebookles()
  ToHide()
  Uo.UseObject('Runebook')
  wait(500)
  UO.LClick(135,129)
  wait(1000)
end sub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: парни помогите пожалуста !

Post by Mirage »

убери букву b в слове backpack

Code: Select all

sub CheckLag()
UO.DeleteJournal()
UO.Click('backpack')
repeat
wait(500)
until UO.InJournal('ackpack')  ; вот так
end sub
kosrk
Posts: 20
Joined: 2010-12-02 23:00:07

Re: парни помогите пожалуста !

Post by kosrk »

Блин все поменял один фиг не рекалится :( в лес :( В чем еще загвоздка может быть ? Пожалуста подскажите

Или может есть у кого ни буть срубка с реколом ?
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: парни помогите пожалуста !

Post by Mirage »

попробуй закоментировать строку
CheckLag()
НЕ sub CheckLag()
kosrk
Posts: 20
Joined: 2010-12-02 23:00:07

Re: парни помогите пожалуста !

Post by kosrk »

Сделал как тый сказал выдает ошибку:(
Makarov
Posts: 62
Joined: 2010-04-07 14:43:26

Re: парни помогите пожалуста !

Post by Makarov »

Хз, ты вот что, проверь такие вещи как:
1)

Code: Select all

Руны засовывать в рунбук в следующем порядке:
### руну к сейфу в 3 слот, руну в лес в пятый слот


2) С чего ты реколишься - руна, рунбука, свиток - проверь наличие всего этого.
3) Может быть просто не получиться заклинание даже с рунбуки если магери маленькое значение (у нубских персов не маго на ДРВ во всяком случае такое есть).

4) В коде после возникновения условия при котором вызывается реколл поставь код вида:

Code: Select all

UO.Print('Test 1')


вот к примеру в этих функциях:

Code: Select all

sub RecallToLumber(FromScroll)
  var i
  uo.print('Реколимся обратно...')
  for i=1 to 10
    uo.deletejournal()
    if FromScroll==0 then
             UO.Print('Test 1') ; Тест1 <----------------------------------
      RecallRunebookles()
    else
          UO.Print('Test 2'); Тест2 <----------------------------------
      uo.waittargetobject('runeLumber')
      uo.cast('Recall')
    end if
    if waitForRecall()==1 then
      return 1
    end if
  next
  return 0
end sub



Code: Select all

sub ToRecall(FromScroll)
  RecallToHome(FromScroll)
  wait(1000)
  Unload()
           UO.Print('Test 3') ; Тест3 <----------------------------------
  wait(1000)
  RecallToLumber(FromScroll)
end sub


Понял, да? Везде где наступает событие для рекола, до условия или после - ставь такие тесты рядом с реколом - может быть такое что условие сработало как задумано и код правильный, но реколл не пошёл потому что сфизлился или ещё что. А может быть логическая ошибка - так просматривая текст очень трудно понять без теста.
Post Reply