| Yoko http://forum.yoko.com.ua/ |
|
| Переделанный скрипт на ламбер. http://forum.yoko.com.ua/viewtopic.php?f=20&t=16171 |
Page 1 of 1 |
| Author: | Weee [ 2011-01-31 12:10:25 ] |
| Post subject: | Переделанный скрипт на ламбер. |
Прекрасно понимаю, что разбираться в этом врядли кому-то захочется, да и кое что тут реализовано через задний проход, но вот переделанный скрипт (оригинал был версия 3.7, реавтор ВЕТЕРАН, шард ДРВ) под абисс и личные предпочтения (работа с рунами из сундука, пополнение регов, реколл скроллов, работа с несколькими файлами, модернизированный уход от пк). На данный момент я взялся за то, чтобы реализовать похожий скрипт на изиуо (либо найти и изменить готовый), но может кому-то резко броситься в глаза что-то, что вызывает краши именно определенных функций. В моем случае крашит CheckingPlayers (проверка на игроков или НПЦ в виде людей) чаще всего. Также иногда (но гораздо реже) крашит и основа для ламбера. Я постарался оставить как можно больше комментариев в скрипте, чтобы было попроще разобраться. Кое что тут совсем сырое, прошу не пинать, вот версия без записи координат деревьев в файлы (все личные ID заменены на 0х00000000) : Code: sub Main() Вот, пожалуй, и все. Надеюсь кто-нибудь сможет разобраться - я попытался объяснить все наиболее доходчиво. Без координат на вырубку оно не заработает. Тестить такой скрипт думаю займет слишком много времени, поэтому просто вопрос в основном по CheckingPlayers(). Что в нем не так? Может кто-то видит, что тут может вызывать краш "Unhandled exception in parser"? У меня было подозрение на слишком большой finddistance (30), но я поставил 15 и все осталось по прежнему. Менял галки в самом инжекте. Оставлял только необходимое TUS bb-fix, No client hung message, Version 1.26.4, пробовал включать-выключать Track world items. Также инжект работает через 1 ядро (а точней так настроены работать ylaunch и ilaunch). Пробовал включать/выключать anticrash. Все равно падает. Теперь есть подозрение на то, что слишком часто ведется поиск на игроков. И через время скрипт вываливается, хотя вчера он у меня проработал часа 3-4 без остановки, в итоге я не дождался краша и выключил его, пошел спать. Еще хочу заметить, что краш происходит только в лесу. Ниразу не было краша в реколке. И из всех функций отключается только CheckingPlayers. После чего инжа не может нормально ничего делать и приходится перезапускать УО. |
|
| Author: | Mirage [ 2011-02-01 08:25:20 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Данная ошибка часто возникает на >1 ядерных процессорах. Вот здесь один из способов уменьшить вероятность ее словить Нужно задать соответствие любому из ядер процессора клиенту игры. Радиус максимально доступный игроку = 28 тайлов. Есть специально модифицированные клиенты (там пару строк поменять нужно) с расширенным углом обзора. Максимальная дистанция до статики и игроков = 28 тайлов. Типов деревьев немного больше чем задействовано в скрипте. Хотя это может зависеть от шарда и вердаты. На нашем было 29 тайлов, у знакомых рубились 34 вида деревьев. Снять типы можно в программе InsideUO. Так же можно попробовать уменьшить выпадение ошибки если сканер ПК не зацикливать в параллельно запущенной функции а запускать в ключевых местах как 1 разовую проверку. Хотел спросить зачем такая сложная система разгрузки? 3 раза в цикле запускать одну и ту же функцию? Достаточно найти тип логов в паке и перемещать их пока тип есть в паке - 1 цикл. |
|
| Author: | Weee [ 2011-02-01 10:53:40 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Mirage wrote: Данная ошибка часто возникает на >1 ядерных процессорах. Вот здесь один из способов уменьшить вероятность ее словить Нужно задать соответствие любому из ядер процессора клиенту игры. Радиус максимально доступный игроку = 28 тайлов. Есть специально модифицированные клиенты (там пару строк поменять нужно) с расширенным углом обзора. Максимальная дистанция до статики и игроков = 28 тайлов. Типов деревьев немного больше чем задействовано в скрипте. Хотя это может зависеть от шарда и вердаты. На нашем было 29 тайлов, у знакомых рубились 34 вида деревьев. Снять типы можно в программе InsideUO. Так же можно попробовать уменьшить выпадение ошибки если сканер ПК не зацикливать в параллельно запущенной функции а запускать в ключевых местах как 1 разовую проверку. Хотел спросить зачем такая сложная система разгрузки? 3 раза в цикле запускать одну и ту же функцию? Достаточно найти тип логов в паке и перемещать их пока тип есть в паке - 1 цикл. Отлично! Спасибо за советы, попробую. Я думал надо задавать соответствие инжектолаунчеру. Обязательно попробую с клииентом. По поводу угла обзора - это про разрешение? Оно увеличено, но я знаю, что эти 28 тайлов зависят от сервера. Спасибо за точную цифру, буду знать. По поводу типов деревьев тоже посмотрю, но врядли это вызывает краш, скорее наоборот. Вердата у меня стоит где все деревья = пеньки. Не знаю влияет ли это на инжект. Вот по поводу проверки на ПК - тоже об этом думал. Наверное крашей станет в разы меньше, т.к. будет, соответственно, меньше проверок и запросов на findtype. Но бывает приятно, когда чар бежит от дерева к дереву, и на ходу реколится от ПК, если вдруг кто-то выскакивает Честно говоря это мой первый блин, который вышел комом. Система разгрузки, вроде бы, была такая в оригинальном скрипте - я её не изменял. Проверил, работает, оставил как есть. Из-за неё ниразу не крашило. Сегодня ночь провел за вспоминанием LUA (еще со времен ворлд оф варкрафта) и мучаньем различными командами OpenEUO. Заодно потихоньку сел переписывать одну за другой функции, все по порядку... Переделал схему, по которой все зациклено, додумал многое другое, да и вообще поаккуратней сделал Так что вот так. Попробую еще помучать этот скрипт на инже, может заодно почищу его. Начну, пожалуй, с соответствия. |
|
| Author: | Mirage [ 2011-02-01 11:51:07 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Комом это когда не работает. А так - просто оптимизация кода У меня выгрузка сделана следующим образом: Code: ;put(log,logcont) ; скинуть тип логов в сундук А насчет типов деревьев - если будут учтены все типы то рубить больше деревьев будет. |
|
| Author: | Weee [ 2011-02-01 13:33:05 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Mirage wrote: Комом это когда не работает. А так - просто оптимизация кода У меня выгрузка сделана следующим образом: Code: ;put(log,logcont) ; скинуть тип логов в сундук А насчет типов деревьев - если будут учтены все типы то рубить больше деревьев будет. Да, я уловил суть еще в том посте - так, конечно же, логичней. Сейчас пока вроде не крашит, пробую старый скрипт. Но т.к. потратил прилично времени на изю - очень хочется заставить её работать. Я обращаюсь командами через клиент (UO.Msg в изи) к инжекту, чтобы выполнять различные действия, записывать объекты, реколиться по руне в банке, рубить деревья. Но очень сильно мешает антифлуд, встроенный в клиент. Не знаешь, может можно как-то выключить его? Или может есть способ использовать команды инжекта из изи по другому? На данный момент у меня это выглядит так: UO.Msg(",addobject HomeRune"..HomeRuneID.."; addobject axe"..string.char(13)) while UO.TargCurs == true do wait(100) end Одной строчкой добавляет объект с айди домашней руны и добавляет топор, потом ждет, пока игрок не выберет его. Я бы сделал все мне необходимое через ";", но в ультиме ограничение на количество символов, в одной строчке А задержки делать по 2 сек тоже как-то некошерно. Еще раз извиняюсь, что совсем с другим вопросом. З.Ы. - пока еще не крашнуло. |
|
| Author: | Mirage [ 2011-02-01 19:17:48 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Вот тут тема GMX. Он там придумал нормальное обхождения антимаксроса на Абиссе. Я к сожалению такими вопросами не занимался ибо не играл на таких шардах и лень было просто так заморачиваться Антифлуд обойти никак не получится если сфера либо 56b, либо на <56b прописаны нормальные скрипты со стороны сервера. Топор прописывается по универсальному типу - у него может быть всего 2 типа. Code: ;******************************** В изе можно запускать максрос с нажатия кнопки (топорный метод но в принципе...) Code: Initevents На F - хоткей exec lumber например, в конце рубки чар пишет в uo.print('END'). Принт журналом отлавливается и цикл в изе перещелкивается. Хотя в изе сам ламбер пишется вроде даже лучше чем на инжекте (с ее встроенной pathfind 5958 1432 ). А еще если делать в инжекте то мне всегда больше нравилось не тыкать в каждое дерево а искать их через uo.privategettile. Вот примерно такая функция вырубит все окружающие деревья до которых дотянется чар. И надо пометить только координаты где будет стоять чар (сокращения раз в 7 количества точек) Code:
Но это мое ИМХО. |
|
| Author: | Weee [ 2011-02-03 11:23:20 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Да, один из чаров уже взял 90+ ламбера, буду на нем сегодня тестить антимакро от GMX С антифлудом уже понял. Плюнул на изиуо, понял, что инжа больше не крашит (какое офигенное чувство), и решил за вечер переписать скрипт по аналогии с предыдущими с нуля. Теперь вроде ничего лишнего, прикрутил твою разгрузку, организовал работу всего двух потоков: Main, Checkingplayers. В мейн вызываются все основные функции, инициализация, старт, потом основной луп со сменой локаций. И там банально проверки на глобальный флаг (как ты и говорил), который изменяется в checkingplayers при нахождении пк. пока этот флаг = 1 (т.е. пк нашелся) в чекинг плеерс идет бесконечный луп, с вейтом. Потом в итоге основная часть скрипта возвращает значение в 0 и можно продолжать рубить-копать и дальше искать пк Попробую прикрутить антимакрос и интегрировать реконнектер получше, чтобы скрипт останавливался на том же месте. Еще хочу создать какой-то файл типа "для памяти" (реестр засорять не хочу) - чтоб скрипт запоминал где он последний раз рубил и его можно было безболезненно перезапустить Топор я специально использую не по типу на случай, если буду рубить плюсовыми топориками. И это в каком-то роде небольшая пауза перед тем, чтобы скрипт самовольно никуда не улетел. Конечно, топорик можно оставлять всего 1 в паке и тогда оно будет его и использовать, но я не знаю ломаются ли тут некоторые топоры. Если так, то таргет все равно нужен будет, чтобы брать тип и цвет топора, а потом делать автодобор. Про макрос с кнопки не понял, запутался А вот по поводу uo.privategettile - чистейшей воды вин! Хочу попробовать. Только сразу придумалось, чтобы чар как-то сканировал не только ограниченный круг вокруг себя, а весь экран и как-то сортировал координаты тайлов-деревьев и потом бежал уже по ним, чтобы вырубать. Вот бы продумать как такое сделать, чтобы чар как-то нормально по очереди вырубал то, что видит на экране, потом переходил на следующий, еще дальше и так вырубал по несколько квадратов (1 квадрат = 4 экрана). В итоге достаточно было бы просто замарчить несколько рун в глуши. |
|
| Author: | Mirage [ 2011-02-03 11:50:05 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
MaxRange = 3 - радиус поиска. Чуть изменить вышеприведенный скрипт он сперва сканил теже 28 тайлов, если тайл совпадает с заданным и расстояние больше 1 тайла то чар перемещается к объекту. Если чар за отрезок времени не может подойти к объекту переходит к следующему. Можно попробовать. PS гдето на форуме был пример помечалки деревьев таким принципом, чар бегал по большому квадрату в несколько экранов и собирал все тайлы стволов, Потом уже по координатам ходил и рубил. Точно такая тема была на форуме стелс-клиента. PS если с паскалем "на ты" то самые лучшие добывающие скирпты все таки на стелсе делаются - минимум нагрузки, одновременный запуск неограниченного количества клиентов, при должной праработке скрипта можно голосом полностью контролировать стелсбота из клиента игры. |
|
| Author: | Weee [ 2011-02-03 12:03:27 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Попробую разобраться. Если что, то и правда запишу просто координаты куда бегать. Не подскажешь кстати, чем удобней записывать именно координаты? просто по вызову функции записывать настоящие координаты чара или таргетом кликать каким-то? По координатам чара как-то надежней выглядит. наверное так и попробую. Да паскаль и в школе и в универе был, разобраться не составило бы труда, но стелс клиент не работает на абиcce. у меня инжект вроде переделанный, который от Грина. там прикручена crypt.dll. только так получается законнектится. а стелс клиент не работает. я написал там на форуме, чтоб помогли разобраться, отозвался один из девелоперов, сказал, что через месяц приедет - тогда если будет время посмотрит. Правда еще минус у стелса - гмы. На абиcce летают гмы и проверяют на ненаблюдаемых макросеров. Приходится следить и отвечать в случае чего. Потому что мейнам за это сроки дают. |
|
| Author: | Weee [ 2011-02-18 00:37:45 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Мираж, не подскажешь в чем тут может быть проблема? Code: sub CheckingPlayers() # Проверка на игроков (ПК). Оно отвечает за детект ПК, гмов, уменьшения хп или сообщения об атаке: Code: var gtfomsg="attacking you*|blade spirit|energy vortex|elemental|Kal Vas|Vas Corp|In Vas Por|Flam Kal|Ort Sanct|In Sanct Grav|Vas Ort Grav|Wis Quas|In Ex Grav|Vas Ort Flam|Corp Por|Kal Xen|An Ex Por|Por Corp Wis|Kal In Ex|In Jux Hur|Ort Rel|Por Ort Grav|An Mani|In Flam Grav|In Sanct Ylem|In Nox|Vas Flam|In Por Ylem|[criminal]" TWI включен. Все работает, но иногда почему-то не уходит от красных игроков, хотя стоит проверка на notoriety > 3. Иногда уходит, иногда нет. По уменьшению хп уходит всегда. На гмов пищит всегда (хотя иногда пищит совсем не в тему, когда кто-то, например, качает алхимию неподалеку или еще что-то). Думаю пищалка на гмов глючит из-за uo.injournal("You see|GM"), всмысле из-за част с You see, но почему-то просто на GM, Seer и т.д. срабатывало криво, а сейчас лучше гораздо. Притом когда просто кто-то появляется - оно не срабатывает. А вот если кто-то спамит скиллы - срабатывает. А вот по поводу ухода от красных игроков - не пойму что не так. Видел другие детектилки пк - там ноториети определялся как-то из журнала, но тут хотелось бы, чтоб журнал лишний раз не чистился. |
|
| Author: | Mirage [ 2011-02-18 10:15:54 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Заметил интересную штуку про которую видимо знает очень мало народу. Code: sub test1() Запускаем этот скрипт. Кликаем в 4 предмета: 1) стул (You see: стул) 2) НПС Вася (You see: Вася) 3) тайл с камнем (You see: rock) 4) НПС Admin (You see: Admin) Скрипт останавливается только в последнем случае. Вывод лога журнала подтвердил подозрения: 1) надпись You see не логируется журналом и не распознается 2) тайлы статики расставленные не админами так же не распознаются через журнал (хотя в нем присутствуют) Соответственно проверку нужно делать только на ники либо на названия вещей установленных игроками либо админами. Следующий момент Code: sub test2() Проверка сработает только на чара с ником Admin с соответствующим ID. Что приводит к следующим выводам: 1) плохо то что когда ты видишь кого то в журнале и тебе пишут "You see: Admin" серийник этого сообщения не равен системным сообщениям. Он равен ID чара чей ник высвечивается. 2) нужно отловить ID стафа и переписать их в проверку чтобы тот же Вася бегая вокруг чара на скрипте не сбивал его крича "GM Admin Seer СДОХНИ СЦУКО!!!" 3) можно сделать проверку на uo.getnotoriety через uo.JournalSerial PS я как то ваял от нечего делать вот такую штуку, может пригодится Code: sub main1() Попробуй это на рынке запустить где присутствуют чары всех направлений. |
|
| Author: | Weee [ 2011-02-19 20:14:46 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
Вот оно как. Появилось несколько соображений на этот счет. Может лучше будет теперь определять. Недавно прилетел гм на проверку, благо я заметил, но почему-то проверка моя с You see|GM не сработала. Хотя до этого работала. Попробую убрать You see. По поводу пк анти-скриптеров, которые орут все подряд, чтобы скрипт зафакапить - против них можно продумать примерно то, что я написал в скрипте повыше. Проверка на касты, на attacking you и на уменьшение хп. Если они кастуют что-то плохое - чар улетает. Если хп уменьшается - чар улетает. В первом случае пк офигевают, когда скрипт улетает при виде por ort grav. Вылазят из стелса с кастом и скрипт тут же улетучивается. Во втором случае пк офигевают, когда всаживают на -80 из стелса, а чар на скрипте реколится до того, как они успевают прожать лайт или что-нибудь еще. Если к этому делу добавить инвизки, то вообще может быть шикарно. У меня проверка специально на красных. Обычно если бежит серый крим или красный пк, то они точно будут убивать. Поэтому чар сваливает не раздумывая. Если в итоге кто-то подберется близко, спамя GM или что-то еще, то чар все равно улетит, т.к. скрипт не сбивается, а продолжает поиск пк. Улетит по хп или по касту. Одна проблема - getnotoriety у меня глючит. Поэтому и спросил делать ли через журнал. В твоем последнем примере используется getserial('finditem'), и уже от этого значения getnotoriety. Так лучше? Надо попробовать. У меня все-таки напрямую. Тоже срабатывает, но иногда почему-то не хочет. |
|
| Author: | Mirage [ 2011-02-19 22:51:46 ] |
| Post subject: | Re: Переделанный скрипт на ламбер. |
uo.JournalSerial(msg) = ID чара или вещи с именем из журнала. Получил ID - можно использовать if uo.getnotoriety(ID) == 6 then |
|
| Page 1 of 1 | All times are UTC+02:00 |
| Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |
|