farmwl

 Admin
  • Количество публикаций

    787
  • Зарегистрирован

  • Посещение


Все публикации пользователя farmwl

  1. farmwl добавил сообщение в теме Покупка   

    Все работает, отвечать на форуме на вопросы людей, которые не в состоянии прочитать несколько строчек инструкций (на которые ссылкается главная продающая, шапка форума, несколько закрепленных тем в соответствующих разделах) - уже устал. Вся информация необходимая уже давно опубликована, и все вопросы освечены, ожидать, что при покупке ключа Вам обязаны настроить все по удаленке, потому что "я не знаю как распаковать архив! что делать?! ДЕНЬГИ УПЛОЧЕНЫ НИХЕРА НЕ РАБОТАЕТ!" - как говорилось: "если человек тупой, то это надолго" (с)
  2. farmwl добавил тему в Scripting   

    [Урок 4] Процедуры и функции
    Статья еще надописана, ознакомиться с инфой по теме можете по ссылкам:
    http://learnpascal.ru/vvedenie-v-paskal/matematica-v-pasca.html
    http://learnpascal.ru/vvedenie-v-paskal/procedure-and-function-pascal.html
    Функции и процедуры - это фундамент любых скриптов \ программ. Для того, чтобы писать хорошие скрипты Вам обязательно нужно разбираться в данной теме. 
    Что это такое?
    Функции и процедуры - это мини программы, которые выполняют некоторую последовательность действий. Потом, чтобы вызвать в нужном месте выполнение некоторой функции\процедуры, Вам будет достаточно лишь вызвать ее по ее названию.
    В чем отличие процедуры от функции?
    Процедура просто выполняет действия, описанные в ней. А вот главная суть функции - в том, что она возвращает какой-нибудь результат (дает нам некоторый ответ).
    Ярким примером функции из жизни будет функция возведения числа в квадрат - мы берем некоторое число (аргумент), делаем что-то с ним, получаем ответ (результат).
    Процедура же в свою очередь просто выполняет некоторую последовательность действий.
    Чтобы было легче понять, вот вам несколько абстрактных примеров из игр (они могут не совпадать с реалиями скрипт движка, главное поймите идею):
    Процедуры: Воскреснуть, Пойти в некоторую точку, Использовать умение, Использовать предмет и тдФункции: Проверка смерти, Проверка кол-ва предметов в инвентаре, Проверка стадии квеста и тдТ.е. еще раз: в процедурах мы просто делаем что-нибудь, а в функциях нам важен некий результат действий.
    В описании скрипт движков ArcheBox и Adrenaline Вы как раз везде можете видеть ключевые слова procedure и function:

     
    Как этим пользоваться?
    Общая суть состоит в том, что вы выделяете некие отдельные блоки действий вот в такие подпрограммы, после чего вызываете их у себя в скрипте когда вам это нужно.
    Во-первых, это помогает экономить место, ведь часто некоторые действия повторяются очень часто, и благодаря функциям\процедурам Вам не нужно будет каждый раз дублировать код.
    Во-вторых, это помогает создавать некоторые универсальные блоки кода, которые будут делать почти одно и тоже, но с небольшими отличиями: например, Вам нужно найти ближайшего моба с нужным именем - Вы можете создать функцию, которая будет принимать аргумент - имя моба, и в зависимости от переданного ей имени будет находить ближайшего моба.
    Аргументы - это некоторый набор параметров, который мы передаем в функцию или процедуру. Помните пример с квадратом числа? Когда мы возводим число в квадрат мы должны знать, что это за число, ведь от этого зависит результат. Так, например, когда мы возводим в квадрат число 3, мы получаем ответ 9. В данном примере 3 - это подаваемый аргумент, а 9 - результат работы функции.
    • 0 ответов
    • 243 просмотра
  3. farmwl добавил файл в Скрипты \ Плагины [Lineage II]   

    [L2] Bard's Mandolin v1.2.1
    Скрипт для автоматического прохождения квеста Мандолина Барда. Запускается с помощью бота L2Adrenalin !
    Script for automatically making Bard's Mandolin quest. You need L2Adrenalin bot to start it !
    Цена (Price): 5$ \ мес  (5$ per month)
    Купить (Buy): http://www.oplata.info/asp2/pay_wm.asp?id_d=2193608&lang=en-US

    English description + instructions:
    Особенности:
    Движение основано на GPSСкрипт сбоеустойчив к дисконектамМожно перезапустить его в любой момент времени - он подхватит себяЛогирование действий скрипта в логи ботаИнструкции по запуску:
    Скачать с сайта последнюю версию скрипта (Bard's_Mandolin_v***.bin)Закинуть файл в отдельную папку, рекомендую: ..\Adrenalin\Scripts\Bard's_Mandolin\..Запустить скрипт 1 раз, он выдаст ошибку о том, что файл с ключом не найден и создаст его: key_bards_mandoline.txtЗакинуть в файл купленный ключЗапустить скрипт в Дионе
    • 58 скачиваний
    • 0 комментариев
    • 0 отзывов
  4. farmwl добавил сообщение в теме ASI WIN L2 NA палиться или нет?   

    Кодер говорит что все норм должно быть, я лично на NA не сижу, поэтому не могу утверждать что-либо
    share вообще не сидящий в L2 вообще не понимаю нахрена тут что-то комментирует, видимо разделом ошибся
  5. farmwl добавил сообщение в теме Win10 Runtime error   

    последний адейт вин 10 - не приоритетная задача
    апдейтов за последние дни уже было несколько, даты в апдейтере не меняются по понятным причинам
  6. farmwl добавил сообщение в теме Win10 Runtime error   

    Проблема в самом последнем обновлении вин 10, откатись просто. пока проблема не решится
  7. farmwl добавил тему в Scripting   

    [Урок 11] Потоки (имитации псевдопараллельной работы)
    Часто бывает так, что какие-то проверки лучше всего совершать постоянно, но код скрипта не всегда можно устроить таким образом.
     таких случаях можно использовать потоки (Thread) - подпрограммы, которые могут совершаться одновременно (параллельно) с основным кодом скрипта.
    Создать новый поток можно таким образом: 
    uses SysUtils; procedure check_smth(); begin print('что-то произошло'); end; begin Script.NewThread(@check_smth); delay(-1); end. Скрипт запустит параллельно с собой еще и процедуру. Но она выполнится только 1 раз, нам же как правило нужно крутить ее в цикле. Для этого просто делаем внутри процедуры, которая будет потоком, бесконечный цикл:
    uses SysUtils; procedure check_smth(); begin while delay(1000) do print('что-то произошло'); // Будет раз в 1 сек выводить сообщение end; begin Script.NewThread(@check_smth); delay(-1); end.И сразу за этим возникает вопрос - а как остановить этот поток? Скриптовые движки увы не предоставляют возможность досрочно останавливать поток некоторой командой, однако в нашем случае можно задать логическую (boolean) переменную, которую мы будем проверять в потоке, и как только она примнет определенное значение (в нашем случае true) то выходим из процедуры с помощью exit: 
    uses SysUtils; var i: integer; stop_thread: boolean = false; // Наш флаг-переключатель, по умолчанию false (выключен) procedure check_smth(); begin while delay(1111) do begin if (stop_thread) then exit; // Если флаг "включен", то выходим из потока print('i = '+inttostr(i)); end; end; begin i:= 0; Script.NewThread(@check_smth); while delay(1111) do begin inc(i); // Увеличиваем i на 1 if (i > 11) then flag:= true; // Если i > 11, то "включаем" флаг end; end. Разумеется, это не единственный вариант, иногда лучше внутри процедуры, которая будет выполняться в потоке сделать просто проверку на к-л условие, чтобы процедура не выполнялось когда это не требуется.
    Рассмотрим наиболее часто требующийся поток: проверку на дисконнект + торможение скрипта в случае вылета:
    uses SysUtils; var block_disconnect_thread: boolean = false; // переключатель для отключения работы (но не остановки!) потока procedure Check_Disconnect_Thread(); var was_disconnected: boolean; begin was_disconnected:= false; while delay(33) do begin if (block_disconnect_thread) then continue; if (Status <> lsOnline) then begin was_disconnected:= true; Print('Дисконнект, торможу скрипт'); Script.Suspend; while (Status <> lsOnline) do delay(11); end; if (block_disconnect_thread) then continue; if (Status = lsOnline) then begin if (was_disconnected) then begin was_disconnected:= false; Script.Resume; Print('Соединение восстановлено, продолжаю работу',); end; while (Status = lsOnline) do delay(11); end; end; end; begin Script.NewThread(@Check_Disconnect_Thread); end.Важно понимать, что данные потоки - это дочерние сущности скрипт движка, поэтому они достаточно безопасны в использовании, создавая свои потоки по средствам синтаксиса самого Delphi - Вы рискуете повесить самого бота
    Так же существует возможность подавать аргумент в функцию при запуске потока, пример можете найти тут
    • 13 ответов
    • 2 890 просмотров
  8. farmwl добавил тему в Scripting   

    [Урок 6] Работа с Unit'ами. Разбиение кода на части
    В скриптовом движке, как и в самом Delhi есть возможность разбивать код на так называемые Unit'ы (модули) - отдельные файлы, в которых могут быть описаны самодостаточные логические элементы (классы \ методы и тд).
    Для чего это нужно?
    Например вы пишите большой скрипт. Хранить весь код в одном файле, когда строк кода больше 3к - уже не очень удобно. Предположим, что наш воображаемый скрипт - для прокачки персонажа. Можно разбить его на части, 1-10, 10-20 и тд. Либо каждый обособленный кусок кода, который отвечает за какое-либо действие (например боевка или движение или просто набор вспомогательных функций, которые часто используются в коде). Таким образом каждый Unit будет отвечать за свой этап или блок действий. Это облегчает правку скрипта в будущем.
    Как это работает?
    Итак, если раньше у нас был только 1 файл - главный (который мы запускали), то теперь у нас будет несколько файлов: главный + юниты (как Вы поняли, их может быть несколько).
    Юниты нужно подключать к главному файлу, делается это просто - добавляем его в раздел uses:
    uses SysUtils, Classes, my_unit; // my_unit - название подключаемого юнитаЕсли юнитов несколько - просто перечисляйте их через запятую.
    ВАЖНО! название txt файла, должно совпадать с названием юнита, т.е. в данном случае это будет my_unit.txt
    Теперь перейдем к структуре юнита, она должна быть следующая:
    unit my_unit; interface uses // имена других модулей (юнитов), которые надо подключить к данному, // чтобы иметь доступ к классам, функциям, переменным, объектам и т.п. // этих модулей в области Interface и Implementation // Область Interface. Здесь находятся описания типов, объектов и процедур, которые БУДУТ ВПОСЛЕДСТВИИ ВИДНЫ в других // в других модулях, если к ним подключить данный type // описания типов и классов, к которым БУДЕТ ПРЕДОСТАВЛЕН доступ другим юнитам, если к ним подключить данный var // описания объектов и переменных, к которым БУДЕТ ПРЕДОСТАВЛЕН доступ другим юнитам, если к ним подключить данный implementation // Реализация uses // здесь могут быть перечислены имена юнитов, которые могут использоваться только в реализации классов или функций/процедур type // описания типов и классов, к которым НЕ БУДЕТ ПРЕДОСТАВЛЕН доступ другим юнитам, если к ним подключить данный var // описания объектов и переменных, к которым НЕ БУДЕТ ПРЕДОСТАВЛЕН доступ другим юнитам, если к ним подключить данный // Код юнита. Тут реализация классов, описанных выше в разделе type областей interface и implementation данного юнита end.Все, что описано в области interface, будет доступно из других модулей, если данный модуль к ним подключить. Здесь могут находиться описания классов (только описания!), описания процедур и функций (если они не являются методами класса, то тогда достаточно будет просто указать их заголовок с параметрами в области interface), переменные, объекты, константы. Вся реализация должна находиться после ключевого слова implementation (которое в переводе как раз и означает «реализация»). В «реализации» также могут находиться описания и других типов, классов, переменных, объектов, процедур, но только тогда они никак не могут быть доступными из других юнитов.
    Т.е. основная суть: чтобы сделать «что-то» доступным для других юнитов (при условии подключении данного юнита в разделе uses), необходимо описание «этого» поместить в область interface.
    • 2 ответа
    • 1 386 просмотров
  9. farmwl добавил тему в Scripting   

    [Урок 0] Основы. Структура скрипта. Определения.
    Прежде чем начать, нам нужно "определиться с определениями", хотя бы с основными. Изложены они будут кухонным языком, дабы вникнуть в них могли люди, которые совершенно не сталкивались с программированием прежде. Если после прочтения информация более-менее уложится в голове, то можно смело идти гуглить глубже.
     
    Для начала нужно ответить на вопрос, как это вообще устроено? 
    У нас есть скрипт - файл (в нашем случае как правило txt) в котором написан программный код. Сей программный код "говорит" компилятору, что нужно делать, т.е. представляет собой логическую или не очень последовательность действий. Компилятор -  грубо говоря и не вдаваясь в подробности это сама программа (Adrenalin или ASI WIN ArheAge). Софт "читает" ваш код, компилирует его (компиляция — это процесс создания исполняемого файла, основываясь на указанном компилятору программном коде) и выполняет то, что там написано. 
     
    Итак, давайте посмотрим, как будет выглядеть структура скрипта, в котором объявлены основные разделы:
    uses SysUtils; // раздел uses, тут подключаются библиотеки const // описание констант text = 'yo ku ya glad'; ID = 12494; var // описание переменных flag: boolean procedure wait(); // описание процедуры begin Delay(5555); end; begin // основной код скрипта Print(text); wait(); end.Итак, мы видим, что все разноцветное - это явление называется подстветка синтаксиса, нужна она для более удобной навигации Ваших глаз в коде.
    Обратите внимание на ключевые слова uses, const, var и тд. все они что-то "говорят" компилятору. Рассмотрим что здесь написано подробней:
    uses SysUtils; Раздел uses сообщает, что мы используем в нашем скрипте. А использовать мы можем библиотеки или модули (юниты). Каждая библиотека дает нам доступ к набору функций, например SysUtils содержит в себе функции, которые приводят численные значения к строковым и наоборот, Вам, поверьте мне, придется их очень часто использовать в будущем.
     
    Разделы const и var отвечают за объявление констант и переменных. Что значит объявление?
    Чтобы компилятор понимал запись вида tmp_string:= s1 + s2; нужно объяснить ему в начале, что эти переменные из себя представляют, какой это тип данных? строки \ цифры \ логические переменные? Потому что нельзя, например, сложить цифру "2" и строку "Вася". Подробнее об этом будет в других уроках, сейчас просто отметьте для себя, что прежде чем использовать какие-либо переменные, они должны быть объявлены (указан их тип).


    Далее как правило идет описание процедур и функций, ключевые слова procedure \ function. Что это такое? По сути и то и другое представляет собой небольшую подпрограмму, обособленную последовательность действий, которую потом можно вызвать просто написав ее название в скрипте. Нужно это например для того, чтобы не писать один и тот же код много раз.
    Предположим в ArcheAge после использования умения нужно ждать пока пройдет откат умения и ГКД:
    procedure wait_gcd; begin while (User.Cast.EndTime <> 0) or (User.GlobalCoolDown <> 0) do delay(1000); end;Описав один раз такую процедуру, можно будет в своем скрипте вызывать ее после каждого использования умения:
    if Engine.UseSkill('Ледяная стрела') then wait_gcd;Еще один важный вопрос: в чем отличие процедуры от функции? Функция возвращает результат после своего выполнения, а процедура нет. Все со школы должны помнить тригонометрические функции, например синус. sin(x) = чему-нибудь, т.е. в зависимости, что мы подадим на вход этой функции, мы будем получать разные результаты. Или функция сложения - в зависимости от того, какие слагаемые были поданы на вход, результат (их сумма) будет отличаться.
    А процедура это просто последовательность каких-нибудь действий без лишних заморочек.


    Ну и наконец основное тело скрипта - это все то, что заключено между begin и end. (заметьте, что у этого end на конце ставится именно точка, в отличие от остальных случаев, где мы видим точку с запятой). При запуске скрипта компилятор начнет выполнять код, написанный между этими begin \ end. используя инфу об объявленных ранее константах\переменных\процедурах\функциях.

    Надеюсь общее представление о том, как выглядит скрипт сложилось, поэтому переходите к следующим урокам
    • 4 ответа
    • 1 235 просмотров
  10. farmwl добавил сообщение в теме неработает бот   

    повторялось уже неоднократно: обновления защиты со стороны серверов - это не наша прихоть, мы бы и сами были только рады их отсутствию. у них на нас уходит обычно 2 недели, у нас на них 1-2 дня. в этот раз увы совпало так, что кодер в отъезде, поэтому апдейт затянут. время компенсируется
    Тестовая версия A.dll доступна в чате на главной (смарт)
  11. farmwl добавил сообщение в теме неработает бот   

    кодер в отъезде, как только так сразу
  12. farmwl добавил сообщение в теме неработает бот   

    да, это СГ тоже
    в скайпе часто добавляетя много народа, но сообщения видимо пишите еще до добавления в контакты, поэтому эти сообщения не отображаются у меня сразу. дублируйте их значит на всякий случай. можете 2 раза продублировать, если не ответил в течение нескольких часов
  13. farmwl добавил сообщение в теме неработает бот   

    смарт гвард обновлен, не удосужился даже прочитать FAQ?
  14. farmwl добавил сообщение в теме adri + asi Загрузка акка под определенным скриптом   

    Увы адреналин не умеет обращаться к оконке, чтобы получить название аккаунта в МА, или сервер\номер персонажа и тд
    Чтобы делать автозапуск скрипта, можно сделать как описано тут
    Так же, если у тебя нет огромной текучки ботов, то можно в интерфейсе настроить на определенные ники запуск скриптов: 

    Работает это так: у тебя при запуске окна, сначала подгружается конфиг с названием как ник персонажа.  В этом конфиге нужно указать какой скрипт запускать после входа в игру. В этом скрипте ты уже загружаешь нужные конфиги и тд
  15. farmwl добавил сообщение в теме Немного инфы об Engine.BypassToServer   

    если тебе нужно записывать выборы диалогов Alt + B, то можно HEX редакторами воспользоваться
    если просто диалоги с НПС - то Engine.DlgText содержит в себе всю необходимую информацию
  16. farmwl добавил сообщение в теме Вопрос по Sсript Recorder   

    запускаешь скрипт -> делаешь что-нибудь в игре, он записывает твои действия -> копируешь их в свой скрипт например
    для каких целей использовать запись каждый решает для себя сам. кому-то нужно записать маршрут для возврата на спот, кому-то спарсить диалоги через Alt+B
  17. farmwl добавил сообщение в теме Проблемы \ решения   

    Стоит понимать разницу между скрипт движком и стандартными функциями бота. Многие новые команды скрипт движка основаны уже именно на пакетах, в частности как раз аук функции. по этой же причине они вышли из строя с обновлением
  18. farmwl добавил сообщение в теме Как пользоваться Script_Recorder'ом для Адреналина?   

    Тебе следует для начала основы скриптописания освоить видимо, базовую инфу можно найти тут: http://asiwin.com/forum/53-scripting/
    А то, по-моему, ты не очень представляешь как оно вообще должно выглядеть и работать)
     
  19. farmwl добавил сообщение в теме Как пользоваться Script_Recorder'ом для Адреналина?   

    что там объяснять то? в инструкции описано подробно как запустить.
    если выдает ошибки при запуске - скачай последнюю версию, она там 1.3.1
  20. farmwl добавил сообщение в теме Проблемы \ решения   

    а ты уверен, что у тебя версия с волкером?
    оконка за 300р - это именно оконка, без волкера. для волкера ключи пооконные от адреналина подходят если что
  21. farmwl добавил тему в L2Adrenalin   

    Как узнать свои координаты? Запись маршрута в L2Adrenaline боте
    Существует 2 способа записи маршрута:
    Запись текущих (своих) координат.
    Тут все просто - Вы становитесь активным персонажем в нужную точку, переходите в многооконку, ставите курсор мыши в нужное место (в скрипте) и нажимаете сочетание клавиш Alt + V (это работает как с Ctrl+V, только Alt+V). Все, ASI записала текущие координаты туда, где был установлен курсор мыши.Запись маршрута встроенным рекордером.  
    Вы должны поставить курсор мыши в нужное место в скрипте и активировать функцию записи (красный кружок, расположен в закладке скрипт).
    Теперь Вам остается просто кликать мышкой в игре, каждый клик будет записываться рекордером, преобразуя координаты в готовые MoveTo. 
    • 0 ответов
    • 342 просмотра
  22. farmwl добавил тему в L2Adrenalin   

    Работа с динамическими bypass'ами. Парсинг. Регулярные выражения.
    Сейчас админы серверов изобретают различные методы противодействия ботам. В этой статье будет рассмотрено, какие методы защиты применяются в диалогах, направленные на то, чтобы затруднить ботам их работу, в то время как для обычных игроков подобные меры защиты скорей всего будут даже не заметны.
    Пока я разрабатывал и тестировал скрипт для Adrenalin'a на прохождение квестов на ТТ рецепты, я встретил несколько способов, которые и будут описаны ниже. Для удобства я буду рассматривать диалог с Джереми, у которого берутся эти квесты. Для удобного просмотра диалогов в процессе работы можно воспользоваться Script Recorder'ом.
    Динамически меняющийся bypass (например, на euro-pvp.com). Самый простой случай - сама фраза, которую мы хотим выбрать не меняется, но с каждым новым открытием диалога меняется bypass, который нужно отправить. Обычно данный способ комбинируют с каким-нибудь еще.
    <a action="bypass -h 0-739772929">[Доставка ликера (In progress)]</a><br> // 0-739772929 <a action="bypass -h 01784106480">[Доставка яиц (In progress)]</a><br> // 01784106480<a action="bypass -h 0-739859206">[Доставка ликера (In progress)]</a><br> // 0-739859206 <a action="bypass -h 01784133759">[Доставка яиц (In progress)]</a><br> // 01784133759 Замена одной или нескольких букв в строчке (например, на emerial.ru). Длина строки при этом не меняется. Как правило, в исходной строке заменяют пару букв, так что бегло взглянув это можно даже не заметить. Например, вместо "Доставка яиц" будет "Досrавка яиц". Этот способ как раз и используется в дополнение к предыдущему, т.е. при каждом новом открытии диалога меняется и строка ответа и bypass. Данный способ мешает нам искать bypass по заранее известной подстроке, <a action="bypass -h 01736714927">[Доставка ликdра]</a><br> // 01736714927 <a action="bypass -h 0-1931249600">[Дeставка яиц]</a><br> // 0-1931249600<a action="bypass -h 01736767322">[Доставка лdкера]</a><br> // 01736767322 <a action="bypass -h 0-1931186782">[Доставка aиц]</a><br> // 0-1931186782Использование "невидимых" нам спец. символов. Причем как внутри диалога, так и внутри bypass'a (например, на ketrawars.net). Фактически они присутствуют в диалоге, но при экранировании (т.е. когда нам показывают этот диалог) они не отображаются. Это связано с нестандартными кодировками, кому сильно интересно можете погуглить. По этой же причине я не могу, например, выложить на форум код этих строк (эти спец символы будут автоматически удалены), поэтому любуемся скриншотами:В обычном блокноте:

    В Sublime:

    Таким образом, длина искомой подстроки меняется каждый раз, однако последовательность символов в этой подстроке целиком сохранятся.
    Возможно есть еще другие виды защит именно на уровне всевозможных модификаций диалогов (вылезающие при открытии диалога каптчи - это отдельный разговор), но мне пока другие не встречались.
    Итак, теперь, когда ясна задача, можно думать над тем, как находить заветные bypass's для отправки. Вариантов опять таки несколько, можно решить это, не выходя за рамки функций Pos, Copy, Delete, Trim и тд. Однако проще и красивее будет использовать регулярные выражения (regular expressions). О том, что это и как они составляются можете погуглить. Если кратко, то это поиск по шалблонам, который позволяет нам парсить диалоги в разы проще.
    Как пользоваться регулярными выражениями?
    Тут все просто, подключаете модуль RegExpr в раздел uses и пользуетесь.
    Пример:
    uses SysUtils, Classes, RegExpr; // подключили модуль RegExpr procedure PrintAllTags(); // распечатать все конструкции с bypass'ами var RegExp: TRegExpr; begin RegExp:= TRegExpr.Create; RegExp.Expression:= '(<a *(.+?)</a>)|(<button *(.+?)>)'; if RegExp.Exec(Engine.DlgText) then repeat Print(RegExp.Match[0]); until (not RegExp.ExecNext); RegExp.Free; end; begin PrintAllTags(); end.Этот простой код найдет и распечатает нам все интересующие bypass'ы:

     
    uses SysUtils, Classes, RegExpr; // подключили модуль RegExpr function Bypass(dlg: string): boolean; var RegExp: TRegExpr; SL: TStringList; i: integer; bps: string; begin Result:= true; // задаем результат по умолчанию RegExp:= TRegExpr.Create; // инициализируем объекты для дальнейшей работы SL:= TStringList.Create; RegExp.Expression:= '(<a *(.+?)</a>)|(<button *(.+?)>)'; // задаем регэксп на поиск всех возможных bypass'ов if RegExp.Exec(Engine.DlgText) then // если нашлелся нужный шаблон, то repeat SL.Add(RegExp.Match[0]); // заполняем наш список такими совпадениями until (not RegExp.ExecNext); // пока не закончатся шаблоны for i:= 0 to SL.Count-1 do begin // теперь пробегаемся по нашему списку if (Pos(dlg, SL[ i ]) > 0) then begin // если в i-ой строке нашелся искомый текст, то RegExp.Expression:= '"bypass -h *(.+?)"'; // ищем шаблон текста c bypass'ом if RegExp.Exec(SL[ i ]) then // и если нашли, то копирем из него интересующий нас кусок bps:= TrimLeft(Copy(RegExp.Match[0], 12, Length(RegExp.Match[0])-12)); end; end; Print(bps); // распечатываем конечный вариант bypass'а if (Length(bps) > 0) then Engine.BypassToServer(bps); // если его длина > 0, то отправляем на сервер RegExp.Free; // не забываем освобождать память SL.Free; end; begin Bypass('Набор воина'); end.О правилах составления регулярных выражений полно инфы в инете, например тут
    Возможностей много, можете почитать исходники: RegExpr.txt
    Надеюсь, что распарсить полученные строчки не составит труда
    • 1 ответ
    • 1 398 просмотров
  23. farmwl добавил сообщение в теме Проблемы \ решения   

     > Бот не пакетный и не изменяет данные (c) http://asiwin.com/buy/adrenalin/
    Принцип работы бота иной, ему все равно на пакеты и изменение шифраций
  24. farmwl добавил тему в ArcheBox   

    Как запустить скрипт \ плагин в ASI WIN?
    Очень часто мне задают вопрос: "А как запустить скрипт?".
    Максимально наглядный ответ:

    • 2 ответа
    • 1 078 просмотров
  25. farmwl добавил тему в L2Adrenalin   

    Как запустить скрипт в Adrenaline bot без запуска клиента L2
    В Adrenaline для открытия \ редактирования \ запуска скрипта необходимо, чтобы в списке аккаунтов появился хотя бы 1 аккаунт.
    Как правило многие запускают клиент игры ради этого, но можно сделать проще. достаточно выделить поле редактирования скрипта и нажать сочетание Ctrl + P - появится "пустой" аккаунт. Теперь его можно выделить и работать со скриптами не прибегая к запуску игры.

    • 2 ответа
    • 463 просмотра