Page 4 of 8
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-06-02 18:32:01
by Destruction
reTry wrote:Destruction wrote:О чем речь? - Что вы хотите сделать?
скрипт запоминает вырубленные деревья, он у меня за 2-3 часа обходит местность и больше не рубает, пишет, что не находит деревья, если пере зайти в уо, все в порядке...Как сделать так, что бы он после 100 деревьев обнулял координаты вырубленных деревьев?
Никак. Проще по таймеру сбрасывать. О чем собственно говоря и идет речь на полторы страницы..
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-07-18 02:25:49
by Crach!
у меня была замечательная идея создания 2х амссивов на 100 единиц x и y , то есть циколм мы проверяем нахождение деревья в этих 2х массивах,и если это дерево етсь мы просто переходим к следущему

только лагает жутко,зато сброс легко сделать,если массив заполнен то циколм обнуляешь оба массива просто и все)
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-07-18 18:03:30
by Mirage
1) 100 деревьев рубятся на некоторых шардах за 20-30 минут. Респ несколько часов.
2) зачем делать отдельно массивы для х и для y если ты про координаты?
3) с чего бы ей лагать?
4) если идея не потерялась пиши - посмотрим. Может мозговой штурм решит проблему.
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-07-19 08:05:38
by Beyonder
Я тоже когда-то думал сделать вместо обычного поиска ближайших деревьев - прикрутить к ней оптимальный обход графа. Правда так как не силён в графах то не смог этого доделать (да и не надо/лень уже было).
Идея простая:
1) Кешируем деревья в определённом радиусе в массив.
2) Представляем весь массив в виде сильно связного полного графа (правда хз выдержит ли инжа такое издевательство если деревьев будет 1000+) где вес каждого ребра равен расстоянию между вершинами.
3) Ищем оптимальный полный обход полученного графа.
4) Сохраняем обход этого графа в файл (не обязательно, но очень полезно, т.к. пункт 2 и 3 будут долго работать).
5) Идём по графу и рубим деревья.
Если-бы кто сделал - был-бы отменный скрипт на ламбер

Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-07-22 13:31:20
by Crach!
по поводу мозгового штурма...ну щас посмотрю,перепишу кое что,что давно хотел переписать и выложу)
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-10-22 07:47:06
by GMX
Кстати, чтобы ходилка нормально работала, при помощи Tiledata patcher'а следует отредактировать свойства всяких кустов, камней, колючек, ну и (конечно) деревьев.
В частности поставить в свойствах тайлов "unpassable". Тогда будет их нормально обходить, а не застревать...
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-10-22 17:39:55
by Mirage
GMX wrote:Кстати, чтобы ходилка нормально работала, при помощи Tiledata patcher'а следует отредактировать свойства всяких кустов, камней, колючек, ну и (конечно) деревьев.
В частности поставить в свойствах тайлов "unpassable". Тогда будет их нормально обходить, а не застревать...
если со стороны сервера стоит что их проходить нельзя значит проходить не получится хоть как ломай вердату. Если проходить получается значит на сервере админы несколько криворуки. И таким макаром можно замутить всякие выбегалки из крестов и прохождении сквозь заборы.
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-11-04 13:26:43
by GMX
Mirage wrote:GMX wrote:Кстати, чтобы ходилка нормально работала, при помощи Tiledata patcher'а следует отредактировать свойства всяких кустов, камней, колючек, ну и (конечно) деревьев.
В частности поставить в свойствах тайлов "unpassable". Тогда будет их нормально обходить, а не застревать...
если со стороны сервера стоит что их проходить нельзя значит проходить не получится хоть как ломай вердату. Если проходить получается значит на сервере админы несколько криворуки. И таким макаром можно замутить всякие выбегалки из крестов и прохождении сквозь заборы.
Наоборот! Когда на сервере стоит, что их проходить нельзя, а в тайлдата такого свойства нет, то получается, что тебя "отбрасывает", а когда в тайлдата указано, что их нельзя проходить, то тогда ходилка (в частности от Бейондера) обходит их хорошо.
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-11-08 14:46:23
by Beyonder
В теории она должна проходить даже если тебя отбрасывает, т.к. там 2 уровня проверки: проверка по тайлдате и по результату действия. Но не ручаюсь так как писал её очень давно.
Плюс, если слегка подправить метод по сканированию тайла (в самом низу скрипта), то можно в сам скрипт добавить массив с типами кустов и другого мусора.
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2010-12-03 12:38:46
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-ному дереву
Всем спасибо

Сделал в одном потоке и все проблеммы исчезли
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-03-23 13:30:45
by Swip
Танцевал с бубном вокруг бродилки от Beyonder'a и данного скрипта, но так и не получилось заставить персонажа хайдиться больше одного раза. Направьте меня советом, пожалуйста

Хочется сделать так, чтобы он хотя бы перед каждой рубкой дерева делал чекхайд и, если персонаж не в инвизе, хайдился. Постоянно быть в хайде нет нужды, поэтому хайд пытался прикрутить больше не к бродилке (её вообще трогать страшно - до такого кода по-моему, не будучи профессиональным разработчиком ПО, не дорасти), а именно к данному ламбер-скрипту.
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-03-23 13:41:01
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 с хайдом.
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-03-23 19:12:08
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
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-05-27 12:14:00
by Incorrect User
Mirage wrote:Переписать сообщения в журнале, добавить таймеры.
Ну меня собственно и интересует в чем сама проблема а не как ее решить. А в чем она я в упор не видел. "Сообщения в журнале" это всмысле мсг сферы указанные в скрипте?
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-05-27 13:48:03
by Mirage
тоесть ты просишь решение проблемы не ознакомившись с самой проблемой?
Сообщения на любом типе серверов (sphere/POL/RunUO/прочие) хранятся в текстовом файле. Который админы имеют привычку править. Инжект в меру своей обыденности не может сопоставить фразу
You pushed the ballс фразой
Вы ударили по мечу.
Хотя вроде бы одно и тоже.
Самый злобные и коварные админы идут дальше. Они заменяют ряд букв (как правило гласных) на аналогичнонаписательные но на другом языке
деревo - буква
o на английском.
И бедный инжект не понимает чего от него хочет бедный игрок пытаясь найти слово "дерево" (
о - русское) в журнале - слова то такого нет! Потому скрипты и не работают.
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-05-27 14:34:38
by Incorrect User
Вот оно че Михалыч. Только я не понял в каком журнале сообщения переписывать. Из журнала инжекта после того как он получит нужные с сервера, копировать в скрипт? Не совсем понятно

И почему из за того что неправильное сообщение, чар может неделать ничего вообще, не идти к дереву, даже топор не юзать? Ведь сообщения он получает уже после рубки.
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-05-27 20:26:43
by ZeroDX
Incorrect User wrote:Вот оно че Михалыч. Только я не понял в каком журнале сообщения переписывать. Из журнала инжекта после того как он получит нужные с сервера, копировать в скрипт? Не совсем понятно

И почему из за того что неправильное сообщение, чар может неделать ничего вообще, не идти к дереву, даже топор не юзать? Ведь сообщения он получает уже после рубки.
Именно с журнала инжекта. Команда ,showjournal. А если не находит деревья, то проверь типы статики
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-05-27 21:04:01
by Incorrect User
Сейчас такая тема, если просто вставить скрипт ламбера то пишет not found ABS. Вставляю скрипт ходилки, ошибки больше нет но при запуске процедуры searchTree она просто включается и моментально выключается. То есть в окне списка запущеных процедур она просто появляеться и сразу исчезает. При этом нет никаких сообщений об ошибках, и сообщений из самого скрипта в клиенте тоже нету никаких.
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-05-28 00:06:44
by ZeroDX
А как ты ходилку прикрутил?
Re: autoLumber - вырубка с автопоиском деревий
Posted: 2011-05-28 00:42:41
by Incorrect User
Просто скопипастил.