Yoko http://forum.yoko.com.ua/ |
|
autoLumber - вырубка с автопоиском деревий http://forum.yoko.com.ua/viewtopic.php?f=15&t=12382 |
Page 1 of 8 |
Author: | Destruction [ 2007-08-29 23:35:52 ] |
Post subject: | autoLumber - вырубка с автопоиском деревий |
Давно не проскакивало хороших скриптов с автопоиском деревий, а ведь это неплохой по-сути дела скрипт получается.. Я собственно говоря набросал вкратце: Code: #Lumbjacking с автопоиском деревий (c) Destruction, v1.0 Для работы скрипта потребуется ходилка вида Walker( x, y, prec ), я использовал ходилку (c) Beyonder. Собственно это лишь набросок, если сюда прикрутить пару-тройку рун, то получится может весьма симпатичная штука... Ну или можно прикрутить авторазметку массива для другого скрипта, который больше нравится ![]() Описания нету, не писал.. У скрипта есть один минус перед скриптами с разметкой - я не придумал как корректно определить z-координату дерева, поэтому она не всегда верная получается, что не совсем порядочно.. Вернее определить её можно, но только после попытки вырубки.. вообще надо будет подумать.. Вкратце о работе скрипта: после запуска основной ф-ции autoLumber - скрипт начинает искать дерево в радиусе 24 тайлов (если его там не будет - будет весьма нехорошо...), найдя дерево - запускается ф-ция вырубки дерева, которая в первую очередь запускает процесс поиска следущего дерева в отдельном потоке и отправляется к дереву, подойдя к дереву - функция его вырубает до предела, если нужно - ждёт пока не будет найдено следущее дерево, как только следущее дерево найдено - функция вырубки начинается сначала. PS: Т.к. это только набросок, то не найдя дерева - скрипт зациклится.. Вобщем дописывать под свои нужды ![]() Ходилка (с) Beyonder - viewtopic.php?p=66813#66813 |
Author: | Grin [ 2007-08-30 01:36:53 ] |
Post subject: | |
если большое желание искать деревья в отдельном потоке, то было бы интересней если этот поток существовал всегда, и искал бы дерево по команде другого потока, это уменьшит кол-во глобальных переменых и постояные запуски новых тредов. замечено что uo.privategettile может давольнотаки быстро похоронить оперативку. По этому искать деревья есть смысл в диапозонах, но это если неважен тип дерева. Кооржината Z можно получить лишь подбором (не удачные попытки и тд), ну или используем асм или перл;) |
Author: | Destruction [ 2007-08-30 13:20:18 ] |
Post subject: | |
Ну, если ты внимательно посмотришь на то, как оно реализовано, то найдёшь башой минус в "аглоритме" поиска деревий.. Начав искать на дистанции 2, он так же обыщет на дистанции 1, что уже делал ранее.. Я незнаю, как правильно это реализовать.. Касательно постоянного поиска деревий - не совсем понял.. uo.asmMapGetZ не даёт нужную Z-координату, перл использовать не буду. Задумавшись о других ошибках в алгоритме, я пришёл к выводу, что когда я запускаю искать дерево в новом потоке - он ищет относительно своих координат, а лучше было бы искать относительно координат дерева.. В любом случае, если надо быстро нарубить логов на стрелы - скрипт сработает на ура ![]() Касательно привейтгеттайл - можно в целях экономии оперативки записать результат его работы в реестр, чем захламить реестр, но зато отличное кэширование результатов работы.. ![]() |
Author: | Grin [ 2007-08-30 13:50:03 ] |
Post subject: | |
Quote: Ну, если ты внимательно посмотришь на то, как оно реализовано, то найдёшь башой минус в "аглоритме" поиска деревий.. Начав искать на дистанции 2, он так же обыщет на дистанции 1, что уже делал ранее.. Я незнаю, как правильно это реализовать.. Касательно постоянного поиска деревий - не совсем понял.. Как раз для этого мы и оставляем поток поиска деревьев не тронутым, после нахождения дерева уходит в цикл по проверке глобальной переменной на ее изменение, извенилась ищим еще дерево, поиск можно о сущевствлять разными с пособами;) тот же поиск по квадрату. Quote: uo.asmMapGetZ не даёт нужную Z-координату, перл использовать не буду. а за чем тебе коррдинату получать? UO.asmWaitTargetMapTile(string LogicType, number X, number Y, number Map) UO.asmWaitTargetStaticTile(string LogicType, number X, number Y, number Map) ты тут Z видишь?;) Quote: Касательно привейтгеттайл - можно в целях экономии оперативки записать результат его работы в реестр, чем захламить реестр, но зато отличное кэширование результатов работы..
![]() Память жрется инжектом, причем тут где хранить результат? Поповоду памяти так не большое за мечание, это не говорит что от каманды надо о тказатся. |
Author: | Destruction [ 2007-08-30 14:11:06 ] |
Post subject: | |
Касательно реестра - ты не понял, фишка в том, что он хранит данные даже после перезапуска уо ![]() Я предлагаю после проверки привейтгеттайлом - записывать в реестр результат проверки, чем самым исключить проверку одного тайла дважды.. Один раз сожрёт память и больше не будет.. но хлам в реестре - тоже не круто ![]() Касательно поиска деревий - до сих пор не понял, измени ф-цию плз, чтобы нормально работало ![]() ![]() |
Author: | Grin [ 2007-08-30 14:53:23 ] |
Post subject: | |
Code: sub Init() смысл стал ясней?;) |
Author: | Destruction [ 2007-08-30 15:30:52 ] |
Post subject: | |
Ясней, будем думать, пасип ![]() А оно не будет пытаться рубить деревья, которые рубило пару минут назад?) |
Author: | Grin [ 2007-08-30 16:08:49 ] |
Post subject: | |
нет конечно... пока квадрат 24х24 не будет вырублен деревья не повторятся |
Author: | Destruction [ 2007-08-30 23:48:32 ] |
Post subject: | |
Grin wrote: нет конечно...
пока квадрат 24х24 не будет вырублен деревья не повторятся Не вариант.. Где я играю (да и ещё много где), респ дерева около 10 часов, а квадрат 24х24 вырубается за 10 минут.. |
Author: | Grin [ 2007-08-31 23:54:31 ] |
Post subject: | |
Так я ж тебе не вариант обхода деревьев предлогал;) А если думать об обходе то обход должен быть в границах прямоугольника (квадрат), и обход должен проходить змейкой... причем змея должна быть с логикой;) тоесть не во всех полосах могт быть деревья... ва в некоторых они слишком далеко что бы идти за ними и там всего 1 будет допустим... ну тд.. |
Author: | Edred [ 2007-09-01 11:14:43 ] |
Post subject: | |
Во многих моих ламберах и минингах был реализован автопоиск деревьев/тайлов. Опыт есть. И сразу даю совет: найденное запоминать, запоминать позицию чара, при повторном приходе в эту позицию - автопоиск на фиг, использовать ранее запомненное. Так быстрее на порядок. |
Author: | Grin [ 2007-09-01 13:03:49 ] |
Post subject: | |
при данном исполнении время на поиск невелируется проходом к дереву и его рубкой. Собственно при паралельном потоке поиска задержек между деревьями не будет, да и не будет ее даже если искать в томже потоке... Скорость обработки выше да и деревья относительно рядом ПС А вообе это из облости эксперементального скриптинга;) делать не фиг вот и страдаем;) |
Author: | Edred [ 2007-09-01 21:17:03 ] |
Post subject: | |
Если не фиг делать - сделай то, что собирался. Я про библиотеку для стелса. Помнишь? |
Author: | Grin [ 2007-09-02 04:27:07 ] |
Post subject: | |
Конечно помню. Там было как минимум 2 проблемы, библиотека грузилась и выгружалась после отрабатывания скрипта который ее вызвал (или после за вершения последнего вызываюшего). Сие гдето не страшно, гдето можно обойти... но конкретное решение, надо знать чего юзеры хотят. И ввторая трабла но то чно не вкурсе, скрипт паскаль както уж очень туго с укаателями работает. Через тип еще вродиб как то понимает, а получить или обратится по указателю вечно ругань;) СМобственно безделие на форуме приводит к эксперементальныму скриптингу тут, но в реале дела по другому обстоят |
Author: | Destruction [ 2007-09-02 15:23:29 ] |
Post subject: | |
Edred wrote: Во многих моих ламберах и минингах был реализован автопоиск деревьев/тайлов. Опыт есть. И сразу даю совет: найденное запоминать, запоминать позицию чара, при повторном приходе в эту позицию - автопоиск на фиг, использовать ранее запомненное. Так быстрее на порядок.
Я про это кажется говорил парой сообщений выше.. Спрашиваю я как-раз таки про другое, у меня сейчас работает примерно так: Code: var max_distance = 24 Вот если внимательно подумать - такая конструкция, рашсиряя каждую итерацию границу на 1 клетку - каждый раз обыскивает ряд клеток, которые были только, что обысканы! Безусловно запоминание результатов проверки каждой клетки - напорядок ускорит дело (лично я проблем со скоростью не имею, пока рублю дерево - он ищет новое, всё успевает), тем не менее хотелось бы начать с исправления данного недостатка, а там глядишь и научимся запоминать вырубленные деревья (не проблема), а потом ещё и забывать таковые (уже несколько интереснее). |
Author: | Grin [ 2007-09-02 15:35:54 ] |
Post subject: | |
ну вот... то про статику, то про динамику... Уже была когждато от тебя идея похожая, но интерпретирую юю сейчас по другому... Берешь ишешь все делевья в ограниченом квадрате (не большом), записываешь в масив, рубишь по этому масиву двигаешься в торону следующегго квадрата и тд... Кстати в перловом модуле есть функуия для работы с тайлами в указаной точке, на выходе список тайлов с сейрийниками если динамика, коринатой Z ну и с типом... ни каких вповторений ячеек сней нет;) |
Author: | Edred [ 2007-09-02 20:39:22 ] |
Post subject: | |
Destruction wrote: Code: var max_distance = 24 Вот если внимательно подумать - такая конструкция, рашсиряя каждую итерацию границу на 1 клетку - каждый раз обыскивает ряд клеток, которые были только, что обысканы! Неправильное понимание ситуации. Команда uo.findtype ничего ни в каких клетках не ищет. Она смотрит в памяти инжекта, к некоей табличке запомненных объектов, про которых пришла инфа в пакетах. Табличка индексирована, поэтому поиск фактически мгновенный. Найденный объект проверяется на соотвествие условиям поиска и либо отбрасывается, либо принимается за результат. Наиболее удобно на подобное посмотреть в стелсе - там эта табличка выводится на закладке worlds. Я, конечно, первый раз слышу про поиск деревьев через findtype, у вас на шарде, что, деревья в мире ГМы лочат, что ли? Если деревья на карте - findtype их найти не может по определению. |
Author: | Destruction [ 2007-09-03 18:34:11 ] |
Post subject: | |
Я привёл это как пример.. Деревья понятное дело оно не ищет, смотри первый скрипт - там ищет. Вообще грин хорошую идею подал - запоминать найденные деревья, тогда всё будет ок.. ![]() Вообще немного не так хотелось бы.. Кстате, Edred, если особо не вникать в то, что я пишу - как найти ближайшее дерево? |
Author: | Edred [ 2007-09-03 21:25:56 ] |
Post subject: | |
Destruction wrote: Кстате, Edred, если особо не вникать в то, что я пишу - как найти ближайшее дерево?
Перебором всех найденных деревьев. |
Author: | Destruction [ 2007-09-10 22:33:48 ] |
Post subject: | |
Edred, вариант с перебором всех найденных деревий - собственно говоря не совсем вариант, т.к. мне нужно НАЙТИ ближайшее дерево, для этого нужно циклично, начиная с координат персонажа (вернее с соседних, но можно и свои проверить, хотя и нежелательно) проверять тайлы дерево / не дерево. Проблема как раз-таки заключалаись в написании цикла, который будет проверять координаты по-порядку. Собственно говоря - я не просто так апаю, после некоторого анализа данных которые необходимо получить, я написал такой цикл: Code: sub main() Разница вся в том, что этот цикл пусть и делает то же, что и первый, но этот - не выводит одинаковые координаты, т.е. так оптимальнее, что собственно говоря я и просил помочь мне достичь. |
Page 1 of 8 | All times are UTC+02:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |