autoLumber - вырубка с автопоиском деревий

Good scripts, not reviewed and checked yet

Moderators: Murderator+, Murderator

Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Re: autoLumber - вырубка с автопоиском деревий

Post by Destruction »

reTry wrote:
Destruction wrote:О чем речь? - Что вы хотите сделать?

скрипт запоминает вырубленные деревья, он у меня за 2-3 часа обходит местность и больше не рубает, пишет, что не находит деревья, если пере зайти в уо, все в порядке...Как сделать так, что бы он после 100 деревьев обнулял координаты вырубленных деревьев?

Никак. Проще по таймеру сбрасывать. О чем собственно говоря и идет речь на полторы страницы..
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Crach!
Posts: 30
Joined: 2009-08-04 14:16:41
Location: SPB
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by Crach! »

у меня была замечательная идея создания 2х амссивов на 100 единиц x и y , то есть циколм мы проверяем нахождение деревья в этих 2х массивах,и если это дерево етсь мы просто переходим к следущему :D только лагает жутко,зато сброс легко сделать,если массив заполнен то циколм обнуляешь оба массива просто и все)
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by Mirage »

1) 100 деревьев рубятся на некоторых шардах за 20-30 минут. Респ несколько часов.
2) зачем делать отдельно массивы для х и для y если ты про координаты?
3) с чего бы ей лагать?
4) если идея не потерялась пиши - посмотрим. Может мозговой штурм решит проблему.
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by Beyonder »

Я тоже когда-то думал сделать вместо обычного поиска ближайших деревьев - прикрутить к ней оптимальный обход графа. Правда так как не силён в графах то не смог этого доделать (да и не надо/лень уже было).

Идея простая:
1) Кешируем деревья в определённом радиусе в массив.
2) Представляем весь массив в виде сильно связного полного графа (правда хз выдержит ли инжа такое издевательство если деревьев будет 1000+) где вес каждого ребра равен расстоянию между вершинами.
3) Ищем оптимальный полный обход полученного графа.
4) Сохраняем обход этого графа в файл (не обязательно, но очень полезно, т.к. пункт 2 и 3 будут долго работать).
5) Идём по графу и рубим деревья.

Если-бы кто сделал - был-бы отменный скрипт на ламбер :)
Last edited by Beyonder on 2010-07-23 11:41:42, edited 1 time in total.
Crach!
Posts: 30
Joined: 2009-08-04 14:16:41
Location: SPB
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by Crach! »

по поводу мозгового штурма...ну щас посмотрю,перепишу кое что,что давно хотел переписать и выложу)
GMX
Posts: 75
Joined: 2010-10-01 16:47:41
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by GMX »

Кстати, чтобы ходилка нормально работала, при помощи Tiledata patcher'а следует отредактировать свойства всяких кустов, камней, колючек, ну и (конечно) деревьев.
В частности поставить в свойствах тайлов "unpassable". Тогда будет их нормально обходить, а не застревать...
Все мы славные ребята, простые русские парни, железные люди с деревянными головами...
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by Mirage »

GMX wrote:Кстати, чтобы ходилка нормально работала, при помощи Tiledata patcher'а следует отредактировать свойства всяких кустов, камней, колючек, ну и (конечно) деревьев.
В частности поставить в свойствах тайлов "unpassable". Тогда будет их нормально обходить, а не застревать...

если со стороны сервера стоит что их проходить нельзя значит проходить не получится хоть как ломай вердату. Если проходить получается значит на сервере админы несколько криворуки. И таким макаром можно замутить всякие выбегалки из крестов и прохождении сквозь заборы.
GMX
Posts: 75
Joined: 2010-10-01 16:47:41
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by GMX »

Mirage wrote:
GMX wrote:Кстати, чтобы ходилка нормально работала, при помощи Tiledata patcher'а следует отредактировать свойства всяких кустов, камней, колючек, ну и (конечно) деревьев.
В частности поставить в свойствах тайлов "unpassable". Тогда будет их нормально обходить, а не застревать...

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

Наоборот! Когда на сервере стоит, что их проходить нельзя, а в тайлдата такого свойства нет, то получается, что тебя "отбрасывает", а когда в тайлдата указано, что их нельзя проходить, то тогда ходилка (в частности от Бейондера) обходит их хорошо.
Все мы славные ребята, простые русские парни, железные люди с деревянными головами...
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by Beyonder »

В теории она должна проходить даже если тебя отбрасывает, т.к. там 2 уровня проверки: проверка по тайлдате и по результату действия. Но не ручаюсь так как писал её очень давно.
Плюс, если слегка подправить метод по сканированию тайла (в самом низу скрипта), то можно в сам скрипт добавить массив с типами кустов и другого мусора.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by ZeroDX »

Вот чуть поковырял скрипт

Code: Select all

Sub SearchTree()
  var i, x, y, t, stp, max_search = 24, RespawnTime = 9000
  var MaxX = 755, MinX = 200, MaxY = 1030, MinY = 867
  var cx = UO.GetX()
  var cy = UO.GetY()
  For i = 1 to max_search
    For x = -i to i
      stp = 1
      If not i == Abs(x) then
        stp = Abs(i) * 2
      Endif
      For y = -i to i step stp
        If (x + cx) < MaxX and (x + cx) > MinX and (y + cy) < MaxY and (y + cy) > MinY then
          If val(UO.GetEasyUO(val(str(x + cx) + str(y + cy)))) + RespawnTime > UO.Timer() and not UO.GetEasyUO(val(str(x + cx) + str(y + cy))) == 'empty' then
            t = IsTreeTile(x + cx, y + cy)
            If not t == false then
              UO.SetEasyUO(1, str(x + cx))
              UO.SetEasyUO(2, str(y + cy))
              UO.SetEasyUO(3, str(t))
              Return false
             else
              UO.SetEasyUO(val(str(x + cx) + str(y + cy)), 'empty')
            Endif
          Endif
         else
          Wait(100)
        Endif
      Next
    Next
  Next
Endsub

Sub DoMineTree()
  var x, y, t, Time, k
  var end = 'appears immune|nothing here|reach this'
  var try = 'I put|fail'
  Repeat
    x = val(UO.GetEasyUO(1))
    y = val(UO.GetEasyUO(2))
    t = val(UO.GetEasyUO(3))
    UO.SetEasyUO(val(str(x) + str(y)), str(UO.Timer()))
    If Walker(x, y, 1) > 0 then
      UO.Exec('exec SearchTree')
      k = 0
      Repeat
        k = k + 1
        If UO.Waiting() then
          UO.CancelTarget()
        Endif
        DelJournal(try + '|' + end)
        UO.WaitTargetTile(str(t), str(x), str(y), str(UO.GetZ()))
        UO.UseType(Hatchet)
        Time = UO.Timer()
        Repeat
          Wait(100)
        Until UO.InJournal(try + '|' + end) or Time + 100 < UO.Timer()
      Until UO.InJournal(end) or k > 7
    Endif
    While val(UO.GetEasyUO(1)) == x && val(UO.GetEasyUO(2)) == y
      Wait(100)
    Wend
  Until false
Endsub


Проблемма в том, что ни чего не делает)
Думаю, что виноват этот кусочек

Code: Select all

If val(UO.GetEasyUO(val(str(x + cx) + str(y + cy)))) + RespawnTime > UO.Timer() and not UO.GetEasyUO(val(str(x + cx) + str(y + cy))) == 'empty' then


Подскажите, что не так
Эту проблемму решил

теперь unhandled exeption in parser вылетает после подхода к n-ному дереву

Всем спасибо :lol: Сделал в одном потоке и все проблеммы исчезли
Swip
Posts: 5
Joined: 2006-06-08 15:51:51

Re: autoLumber - вырубка с автопоиском деревий

Post by Swip »

Танцевал с бубном вокруг бродилки от Beyonder'a и данного скрипта, но так и не получилось заставить персонажа хайдиться больше одного раза. Направьте меня советом, пожалуйста :) Хочется сделать так, чтобы он хотя бы перед каждой рубкой дерева делал чекхайд и, если персонаж не в инвизе, хайдился. Постоянно быть в хайде нет нужды, поэтому хайд пытался прикрутить больше не к бродилке (её вообще трогать страшно - до такого кода по-моему, не будучи профессиональным разработчиком ПО, не дорасти), а именно к данному ламбер-скрипту.
Swip
Posts: 5
Joined: 2006-06-08 15:51:51

Re: autoLumber - вырубка с автопоиском деревий

Post by Swip »

Code: Select all

Sub doMineTree()
   var x, y, t
   var end = "appears immune|to chop|reach this|destroer|in work!"
   var try = "You put|fail"
   repeat
      x = val( uo.getGlobal( "tree_x" ) )
      y = val( uo.getGlobal( "tree_y" ) )
      t = val( uo.getGlobal( "tree_t" ) )
      uo.setGlobal( 't:' + str( x ) + "," + str( y ), "empty" )
      Walker( x, y, 1 )
      uo.exec( "exec searchTree" )
      repeat
         if uo.waiting() then
            uo.canceltarget()
         endif
         deljournal( try + "|" + end )
         uo.waittargettile( str( t ), str( x ), str( y ), str( uo.getZ() ) )
         uo.usetype( hatchet )
         repeat
            wait( 100 )
         until uo.injournal( try + "|" + end )
      until uo.injournal( end )
      while uo.getGlobal( "tree_x" ) == str( x ) && uo.getGlobal( "tree_y" ) == str( y )
         wait( 100 )
      wend
   until false
endsub


Насколько я понял, имплементировать хайд необходимо в эту часть скрипт, но я не понимаю, почему куда бы я не засовывал проверку на хайд, чар хайдится только 1 раз перед рубкой, после чего перестает хайдиться и полностью игнорирует while с хайдом.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by Mirage »

Code: Select all

Sub doMineTree()
   var x, y, t
   var end = "appears immune|to chop|reach this|destroer|in work!"
   var try = "You put|fail"
   repeat
      x = val( uo.getGlobal( "tree_x" ) )
      y = val( uo.getGlobal( "tree_y" ) )
      t = val( uo.getGlobal( "tree_t" ) )
      uo.setGlobal( 't:' + str( x ) + "," + str( y ), "empty" )
      Walker( x, y, 1 )
      uo.exec( "exec searchTree" )
      repeat
         Hide()         ;  <-------------------
         if uo.waiting() then
            uo.canceltarget()
         endif
         deljournal( try + "|" + end )
         uo.waittargettile( str( t ), str( x ), str( y ), str( uo.getZ() ) )
         uo.usetype( hatchet )
         repeat
            wait( 100 )
         until uo.injournal( try + "|" + end )
      until uo.injournal( end )
      while uo.getGlobal( "tree_x" ) == str( x ) && uo.getGlobal( "tree_y" ) == str( y )
         wait( 100 )
      wend
   until false
endsub
sub Hide()
   If Not UO.Hidden() Then
      if Uo.WarMode()==1 then
         Uo.WarMode('0')
      endif
         UO.UseSkill("Hiding")
         Wait( 2000 ) ; пауза на использование скилла (изменить или удалить)
   endif
end sub

Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: autoLumber - вырубка с автопоиском деревий

Post by Incorrect User »

Mirage wrote:Переписать сообщения в журнале, добавить таймеры.

Ну меня собственно и интересует в чем сама проблема а не как ее решить. А в чем она я в упор не видел. "Сообщения в журнале" это всмысле мсг сферы указанные в скрипте?
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by Mirage »

тоесть ты просишь решение проблемы не ознакомившись с самой проблемой? :D

Сообщения на любом типе серверов (sphere/POL/RunUO/прочие) хранятся в текстовом файле. Который админы имеют привычку править. Инжект в меру своей обыденности не может сопоставить фразу
You pushed the ball
с фразой
Вы ударили по мечу.
Хотя вроде бы одно и тоже. :roll:
Самый злобные и коварные админы идут дальше. Они заменяют ряд букв (как правило гласных) на аналогичнонаписательные но на другом языке
деревo - буква o на английском.
И бедный инжект не понимает чего от него хочет бедный игрок пытаясь найти слово "дерево" (о - русское) в журнале - слова то такого нет! Потому скрипты и не работают.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: autoLumber - вырубка с автопоиском деревий

Post by Incorrect User »

Вот оно че Михалыч. Только я не понял в каком журнале сообщения переписывать. Из журнала инжекта после того как он получит нужные с сервера, копировать в скрипт? Не совсем понятно :? И почему из за того что неправильное сообщение, чар может неделать ничего вообще, не идти к дереву, даже топор не юзать? Ведь сообщения он получает уже после рубки.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by ZeroDX »

Incorrect User wrote:Вот оно че Михалыч. Только я не понял в каком журнале сообщения переписывать. Из журнала инжекта после того как он получит нужные с сервера, копировать в скрипт? Не совсем понятно :? И почему из за того что неправильное сообщение, чар может неделать ничего вообще, не идти к дереву, даже топор не юзать? Ведь сообщения он получает уже после рубки.


Именно с журнала инжекта. Команда ,showjournal. А если не находит деревья, то проверь типы статики
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: autoLumber - вырубка с автопоиском деревий

Post by Incorrect User »

Сейчас такая тема, если просто вставить скрипт ламбера то пишет not found ABS. Вставляю скрипт ходилки, ошибки больше нет но при запуске процедуры searchTree она просто включается и моментально выключается. То есть в окне списка запущеных процедур она просто появляеться и сразу исчезает. При этом нет никаких сообщений об ошибках, и сообщений из самого скрипта в клиенте тоже нету никаких.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: autoLumber - вырубка с автопоиском деревий

Post by ZeroDX »

А как ты ходилку прикрутил?
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: autoLumber - вырубка с автопоиском деревий

Post by Incorrect User »

Просто скопипастил.
Post Reply