autoLumber - вырубка с автопоиском деревий
Moderators: Murderator+, Murderator
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Игрока.
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
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
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
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
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
-
- Posts: 5
- Joined: 2009-11-07 14:37:03
Ммм.. Скрипт очень хороший, слишком уж геморно каждый раз на новых шардах перемаркивать деревья и т.п.
Я вот что хотел бы узнать и предложить
:
1. Скрипт циклится когда неможет подойти к дереву (допустим дерево за забором) и он неможет подойти, но пытается. Как сделать что бы через какое-то время добавлял это дерево в игнор и шел к другому?
2. Я что-то так и не понял, как заставить деревья обновлятся?
3. Скорее вопрос по ходитлке.
Как сделать так что бы чар постоянно прятался? Допустим он нашел новое дерево, идет к нему и вышел из хайда, что бы неостанавливая движение сделать так что бы он прятался. Ну и стандартно что бы прятался у дерева когда рубит. (это я сделал)
Теперь предложение:
1.Можно было бы сделать универсальный скрипт что бы допусти берем координату, по ней добовляем насколько чар может отойти в тайлах (достаточно большой квадрат) и заставляем пробежатся "змейкой" в этом квадрате находя деревья и записывая найденое в файл. (причем как я понял неважно будет это гост или нет).
2. Потом просто загружаем файл и ходим по собраным координатам с автоудалением координата вырубленого дерева + что бы это уже было не змойкой, а рандомно.
п.с. ну и так же игнор всего что за забором.. допустим что бы чар (гост который собирает координаты в файл) искал деревья в радиусе 1-2 клетки.
Я вот что хотел бы узнать и предложить

1. Скрипт циклится когда неможет подойти к дереву (допустим дерево за забором) и он неможет подойти, но пытается. Как сделать что бы через какое-то время добавлял это дерево в игнор и шел к другому?
2. Я что-то так и не понял, как заставить деревья обновлятся?
3. Скорее вопрос по ходитлке.

Теперь предложение:

1.Можно было бы сделать универсальный скрипт что бы допусти берем координату, по ней добовляем насколько чар может отойти в тайлах (достаточно большой квадрат) и заставляем пробежатся "змейкой" в этом квадрате находя деревья и записывая найденое в файл. (причем как я понял неважно будет это гост или нет).
2. Потом просто загружаем файл и ходим по собраным координатам с автоудалением координата вырубленого дерева + что бы это уже было не змойкой, а рандомно.
п.с. ну и так же игнор всего что за забором.. допустим что бы чар (гост который собирает координаты в файл) искал деревья в радиусе 1-2 клетки.

-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
1. Это вопрос к ходилке, чтобы она отрубалась, если нельзя пройти.
2. Ну.. Изначально у меня были довольно-таки кривые реализации.
В целом алгоритм должен выглядеть так:
- Знаем через сколько часов нужно дать возможность вырубить заного.
- В строке: указываем время вырубки
- В строке: ставим соответственно проверку на прошедшее время с момента вырубки.
Править совершенно лень.
3. Напиши обертку для ходилки, которая будет в отдельном потоке прятаться. Это много проще, чем править саму ходилку.
-----------
1. Вы не знаете как ползают змеи. Цель этого скрипта как раз-таки избежать разметки, но если вам так хочется - можете юзать его для разметки, изменений просто минимум.
2. Зачем оно нужно, если можно искать автоматом?
Переписывать нужно только те деревья, до которых нельзя добраться, остальное скрипт найдет автоматически.
2. Ну.. Изначально у меня были довольно-таки кривые реализации.
В целом алгоритм должен выглядеть так:
- Знаем через сколько часов нужно дать возможность вырубить заного.
- В строке:
Code: Select all
uo.setGlobal( 't:' + str( x ) + "," + str( y ), "empty" )
- В строке:
Code: Select all
if NOT uo.getGlobal( 't:' + str( x + cx ) + "," + str( y + cy ) ) == "empty"
Править совершенно лень.
3. Напиши обертку для ходилки, которая будет в отдельном потоке прятаться. Это много проще, чем править саму ходилку.
-----------
1. Вы не знаете как ползают змеи. Цель этого скрипта как раз-таки избежать разметки, но если вам так хочется - можете юзать его для разметки, изменений просто минимум.
2. Зачем оно нужно, если можно искать автоматом?
Переписывать нужно только те деревья, до которых нельзя добраться, остальное скрипт найдет автоматически.
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
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
1) Нужно поиграть с параметрами ходилки. Если не получилось обойти препятствие - она возвращает 0. Если получилось - 1.
Для конкретно этого скрипта я думаю оптимальные параметры такие:
Или для еще меньших препятствий, можно попробовать параметры [3,3,5]. Может быть для леса это даже лучше.
В результате ходилка будет вести себя так:
Идём 5 ходов в одну сторону, если не обошли - идём 5+10 в обратную сторону. Если не вышло (5+10 > 14) - возвращаем 0 и заканчиваем поиски пути.
И в самом скрипте добавить:
if (walker(...) == 0) then
...помечаем дерево недосягаемым
endif
3) Добавь в начало функции TryDir проверку на спрятанность. Эта функция отвечает за шаги, тоесть твоя проверка будет срабатывать при каждом шаге.
Для конкретно этого скрипта я думаю оптимальные параметры такие:
Code: Select all
var MaxTraceDistance=5 #Большие препятствия мы обходить не собираемся
var TraceLoopIncrease=10
var LimitTrace=14
Или для еще меньших препятствий, можно попробовать параметры [3,3,5]. Может быть для леса это даже лучше.
В результате ходилка будет вести себя так:
Идём 5 ходов в одну сторону, если не обошли - идём 5+10 в обратную сторону. Если не вышло (5+10 > 14) - возвращаем 0 и заканчиваем поиски пути.
И в самом скрипте добавить:
if (walker(...) == 0) then
...помечаем дерево недосягаемым
endif
3) Добавь в начало функции TryDir проверку на спрятанность. Эта функция отвечает за шаги, тоесть твоя проверка будет срабатывать при каждом шаге.
Re: autoLumber - вырубка с автопоиском деревий
Скрипт будет в теории иногда падать (в чём я убедился на практике).
Проблема в UO.GetGlobal и UO.SetGlobal. Эти функции не синхронизированы с потоками, тоесть если два потока одновременно запустят эти функции на одной переменной - клиент умрёт. А у тебя очень редко но это случается. Т.к. ты в отдельном потоке запускаешь поиск дерева, а потом в другом потоке считываешь координату UO.GetGlobal-ом. Если текущее дерево было вырублено и компьютер тормознулся, клиент умирает.
Поэтому простой способ - убрать потоки, много ты времени там не экономишь.
Второй способ - сделать через SetEasyUO и GetEasyUO.
Проблема в UO.GetGlobal и UO.SetGlobal. Эти функции не синхронизированы с потоками, тоесть если два потока одновременно запустят эти функции на одной переменной - клиент умрёт. А у тебя очень редко но это случается. Т.к. ты в отдельном потоке запускаешь поиск дерева, а потом в другом потоке считываешь координату UO.GetGlobal-ом. Если текущее дерево было вырублено и компьютер тормознулся, клиент умирает.
Поэтому простой способ - убрать потоки, много ты времени там не экономишь.
Второй способ - сделать через SetEasyUO и GetEasyUO.
-
- Expert!
- Posts: 1205
- Joined: 2004-04-04 11:13:54
- Location: Балаково, Саратовская обл.
- Contact:
Re: autoLumber - вырубка с автопоиском деревий
Заявленные функции скрипт выполняет. А именно "немного порубить на стрелы". Я на нём качнул гм боу и 93 ламбера. Конечно парит перегружать клиент (чтоб сброслись глобалки). Но коли лениво что то настраивать своё, это скрипт вполне пригоден к использованию.
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Re: autoLumber - вырубка с автопоиском деревий
Savage wrote:Заявленные функции скрипт выполняет. А именно "немного порубить на стрелы". Я на нём качнул гм боу и 93 ламбера. Конечно парит перегружать клиент (чтоб сброслись глобалки). Но коли лениво что то настраивать своё, это скрипт вполне пригоден к использованию.
Можно легко установить время жизни глобалок.
Записываем в переменную не тупо строку, а что-нибудь типа uo.timer() и когда в следующий раз идет проверка этой клетки - смотрим uo.timer() - global > N.
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
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
Re: autoLumber - вырубка с автопоиском деревий
Destruction wrote:Savage wrote:Заявленные функции скрипт выполняет. А именно "немного порубить на стрелы". Я на нём качнул гм боу и 93 ламбера. Конечно парит перегружать клиент (чтоб сброслись глобалки). Но коли лениво что то настраивать своё, это скрипт вполне пригоден к использованию.
Можно легко установить время жизни глобалок.
Записываем в переменную не тупо строку, а что-нибудь типа uo.timer() и когда в следующий раз идет проверка этой клетки - смотрим uo.timer() - global > N.
А можно поподробнее плиз

Re:
Beyonder wrote:1) Нужно поиграть с параметрами ходилки. Если не получилось обойти препятствие - она возвращает 0. Если получилось - 1.
Для конкретно этого скрипта я думаю оптимальные параметры такие:Code: Select all
var MaxTraceDistance=5 #Большие препятствия мы обходить не собираемся
var TraceLoopIncrease=10
var LimitTrace=14
Или для еще меньших препятствий, можно попробовать параметры [3,3,5]. Может быть для леса это даже лучше.
В результате ходилка будет вести себя так:
Идём 5 ходов в одну сторону, если не обошли - идём 5+10 в обратную сторону. Если не вышло (5+10 > 14) - возвращаем 0 и заканчиваем поиски пути.
И в самом скрипте добавить:
if (walker(...) == 0) then
...помечаем дерево недосягаемым
endif
3) Добавь в начало функции TryDir проверку на спрятанность. Эта функция отвечает за шаги, тоесть твоя проверка будет срабатывать при каждом шаге.
Почему то какие значения не выставлял для валкера все равно застревает в одном и том же месте (
Re:
Destruction wrote:2. Ну.. Изначально у меня были довольно-таки кривые реализации.
В целом алгоритм должен выглядеть так:
- Знаем через сколько часов нужно дать возможность вырубить заного.
- В строке:указываем время вырубкиCode: Select all
uo.setGlobal( 't:' + str( x ) + "," + str( y ), "empty" )
- В строке:ставим соответственно проверку на прошедшее время с момента вырубки.Code: Select all
if NOT uo.getGlobal( 't:' + str( x + cx ) + "," + str( y + cy ) ) == "empty"
Можно поподробнее?
Чтобы не подумали, что я лентяй, я, используя Ваш АвтоЛамбер, написал еще сброс логов домой и проверку на ПК.
Но вот со сбросом запомненного так и не разобрался. Пытался понять Ваш скрипт на сброс "каких угодно параметров", но тоже туговато. Можно объяснить что и где подправить надо?
Заранее большое спасибо.
Re: autoLumber - вырубка с автопоиском деревий
Вопрос к автору. Реально ли приделать какие-либо ограничения на перемещение в пространстве? А то у меня недалеко от домика монстры гуляют, и я думаю что автопоиск может найти мне такое счастье, как ресать лесоруба... Был бы благодарен за готовое решение, но можно и указать суть, сам попробую написать.
Re: autoLumber - вырубка с автопоиском деревий
чтобы не убредал далеко надо использовать ходилку с координатами 
Ну или проверку чтото типо
если getx('self')>1234 и gety('self')>1234 тогда
томаем в точку с координатами 12 12

Ну или проверку чтото типо
если getx('self')>1234 и gety('self')>1234 тогда
томаем в точку с координатами 12 12
Re: autoLumber - вырубка с автопоиском деревий
Дестр посиди и сделай сброс деревьев... Уже вон скоко запросов. А то парит каждый раз переключать его. 

Re: autoLumber - вырубка с автопоиском деревий
Mirage wrote:чтобы не убредал далеко надо использовать ходилку с координатами
Ну или проверку чтото типо
если getx('self')>1234 и gety('self')>1234 тогда
томаем в точку с координатами 12 12
Проверку это идея. Вот только не в ходилку, а в поиск
Code: Select all
If (x + cx) < MaxX and (x + cx) > MinX and (y + cy) < MaxY and (y + cy) > MinY
If val(UO.GetGlobal('t:' + str(x + cx) + ',' + str(y + cy))) < UO.Timer() - RespawnTime and not UO.GetGlobal('t:' + str(x + cx) + ',' + str(y + cy)) == 'empty' then
t = IsTreeTile(x + cx, y + cy)
If not t == false then
UO.SetGlobal('tree_x', str(x + cx))
UO.SetGlobal('tree_y', str(y + cy))
UO.SetGlobal('tree_t', str(t))
Return false
else
UO.SetGlobal('t:' + str(x + cx) + ',' + str(y + cy), 'empty')
Endif
Endif
else
Wait(100)
Endif
По идее если тайл не в коробочке, он скипнется. Но в моем случае оптимальнее будет сделать коробочку, в которую нельзя соваться.
Re: autoLumber - вырубка с автопоиском деревий
подскажите какой командой можно обнулить данные деревьев полученные этим скриптом?
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Re: autoLumber - вырубка с автопоиском деревий
kostjan wrote:Дестр посиди и сделай сброс деревьев... Уже вон скоко запросов. А то парит каждый раз переключать его.
Не думаю, что я вам что-либо должен, хотя из того как вы построили свое предложение - следует совершенно обратное.
reTry wrote:подскажите какой командой можно обнулить данные деревьев полученные этим скриптом?
О чем речь? - Что вы хотите сделать?
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
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
Re: autoLumber - вырубка с автопоиском деревий
Destruction wrote:О чем речь? - Что вы хотите сделать?
скрипт запоминает вырубленные деревья, он у меня за 2-3 часа обходит местность и больше не рубает, пишет, что не находит деревья, если пере зайти в уо, все в порядке...Как сделать так, что бы он после 100 деревьев обнулял координаты вырубленных деревьев?