farmwl

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

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

  • Посещение


Изменения репутации

  1. CMAK понравилось сообщение в теме от farmwl в [Урок 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. используя инфу об объявленных ранее константах\переменных\процедурах\функциях.

    Надеюсь общее представление о том, как выглядит скрипт сложилось, поэтому переходите к следующим урокам
  2. ringswind понравилось сообщение в теме от farmwl в Работа с динамическими 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
    Надеюсь, что распарсить полученные строчки не составит труда
  3. iNet понравилось сообщение в теме от farmwl в [Урок 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 - Вы рискуете повесить самого бота
    Так же существует возможность подавать аргумент в функцию при запуске потока, пример можете найти тут
  4. Dr.Pipetka понравилось сообщение в теме от farmwl в Как запустить скрипт в Adrenaline bot без запуска клиента L2   
    В Adrenaline для открытия \ редактирования \ запуска скрипта необходимо, чтобы в списке аккаунтов появился хотя бы 1 аккаунт.
    Как правило многие запускают клиент игры ради этого, но можно сделать проще. достаточно выделить поле редактирования скрипта и нажать сочетание Ctrl + P - появится "пустой" аккаунт. Теперь его можно выделить и работать со скриптами не прибегая к запуску игры.

  5. mikserok понравилось сообщение в теме от farmwl в Запись видео с экрана   
    Ну тогда в догонку еще: https://getsharex.com/
  6. mikserok понравилось сообщение в теме от farmwl в Delphi 10 Lite   
    Версия отлично подойдет для работы с плагинами в ASI WIN AA
     
    Скачать можно с торрентов: http://rutracker.org/forum/viewtopic.php?t=4436627
     
  7. mikserok понравилось сообщение в теме от farmwl в Сервис управления ключами   
    1. в паблик код выкладывать не благоразумно
    2. перепривязка происходит автоматически когда пользователь попытается запустить ключ с нового ПК, в админ панели лишь включается-выключается эта возможность. Т.е. просто если пользователь запускает свой ключ с другого ПК то ему либо будет отказано в доступе, либо будет доступ, но -1 сутки ключа. 
    3. ключи несут лишь ответ о том, разрешен доступ или нет (в различных вариантах), контроль и проверки на кол-во запущенных сессий - это уже без проблем можно защить в самом скрипте. ключи можно пооконными делать - насчитал 4 валидных ключа из 10 - дал доступ только к 4ем сессиям скрипта
  8. paul88 понравилось сообщение в теме от farmwl в Настройка спойла \ свипа   

    В дополнение можно добавить и другие скилы, если требуется
    Аналогичным образом можно настроить массовый спойл и масс свип:

  9. paul88 понравилось сообщение в теме от farmwl в Авто крафт сосок \ ресурсов   
    Вам достаточно указать лишь номер рецепта (через запятую, если их несколько):

    Пауза по умолчнаю = 1 сек (1000мс), ее можно немного уменьшить
  10. RaNokl понравилось сообщение в теме от farmwl в Skype чат ботоводов по ArcheAge   
    Если Вы хотите добавиться в чат по ArcheAge для наших пользователей, то Вам нужно:
    Что обсуждается в скайп чате?
    Все, что связано с нашим ремеслом: новости игры, баны, скрипты, способы фарма и прочее.
    Так же в чате Вы можете получить актуальную информацию об обновлениях софта.
    А чего делать не стоит?
    Запрещена реклама в любом ее проявлении. Если Вы хотите продавать \ покупать что-то связанное с игрой, то создайте тему в торговом разделе и постите ссылку на нее в чат с указанием заголовка (например: Продам чаров 50+ на EU + ссылка, где уже описаны подробности)Запрещено обсуждение любого аналогично софта с указанием его названия \ ссылок на нихГлупый флуд и оскорбления - получите read only. Контролируйте свою речь \ фильтруйте базар Так же запрещены любые политические срачи, за это будет кик без особых разбирательств кто прав, кто виноват. Если чье-то высказывание и показалось Вам излишним, не стоит вступать в споры, как говорится: "когда споришь с бараном нужно прежде всего убедиться, что твой опоннент не делает того же". Помните, ботовод - сущность безнациональная. 
    Настройка чата:
    Прежде всего стоит отключить уведомления, для этого в наберите команду /alertsoff прямо в чатСсылки на важные файлы Вы можете получить, набрав в чат команду /get giudelines или нажав на название чата
      
  11. Z0rik понравилось сообщение в теме от farmwl в [Урок 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. используя инфу об объявленных ранее константах\переменных\процедурах\функциях.

    Надеюсь общее представление о том, как выглядит скрипт сложилось, поэтому переходите к следующим урокам
  12. kvant понравилось сообщение в теме от farmwl в Цена на ASI WIN   
    да, пока уточняем статистическую инфу
  13. Сергей1988 понравилось сообщение в теме от farmwl в Цена на ASI WIN   
    в планах ввести новый тип ключей, на 5 окон за 500р, которые будут суммироваться:
    1 ключ = 500р = 5 окон
    2 ключа = 1000р = 10 окон
    3 ключа = 1500р = 15 окон
    и тд
    Цена на безлимитную версию будет так же 20$
  14. Adprom понравилось сообщение в теме от farmwl в Цена на ASI WIN   
    в планах ввести новый тип ключей, на 5 окон за 500р, которые будут суммироваться:
    1 ключ = 500р = 5 окон
    2 ключа = 1000р = 10 окон
    3 ключа = 1500р = 15 окон
    и тд
    Цена на безлимитную версию будет так же 20$
  15. Adprom понравилось сообщение в теме от farmwl в Проблема с ошибкой 7703   
    за обновлением обращайтесь в скайп
  16. RaNokl понравилось сообщение в теме от farmwl в Проблема с ошибкой 7703   
    как уже неоднократно говорил и повторю еще раз - апдейты на стороне сервера - не наша прихоть, мы бы только рады были их остутствию. не нужно, знаешь ли, по расписанию каждую неделю быть прикованным к ПК
  17. Сергей1988 понравилось сообщение в теме от farmwl в Проблема с ошибкой 7703   
    обнова была да, ждите фикса, скоро будет
    Вообще впредь, если увидите подобную ошибку - не ломитесь в игру, ждите спокойно обновку с нашей стороны.
    Мы всегда в курсе появления такой проблемы, можете о ней не отписывать, а то потом 100+ сообщений об одном и том же читать приходится =)
  18. RaNokl понравилось сообщение в теме от farmwl в Проблема с ошибкой 7703   
    обнова была да, ждите фикса, скоро будет
    Вообще впредь, если увидите подобную ошибку - не ломитесь в игру, ждите спокойно обновку с нашей стороны.
    Мы всегда в курсе появления такой проблемы, можете о ней не отписывать, а то потом 100+ сообщений об одном и том же читать приходится =)
  19. Tony Stark817 понравилось сообщение в теме от farmwl в Процесс работы над ботом Black Desert   
    скрипт двиг будет давать возможность написать вообще что угодно, интерфейсы в первую очередь на самое востребованное будут написаны
  20. arara понравилось сообщение в теме от farmwl в [Урок 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.
  21. Brokker понравилось сообщение в теме от farmwl в Продажи/поддержка остановлены?   
    а прежде чем писать что-то на форум, ЛС проверять не пробовал? ты написал ЛС в пятницу и ответ был дан чуть меньше чем через полтора часа...

    При обращении в скайпе желательно свой ник на форуме указывать.
  22. farmwl понравилось сообщение в теме от Krickt в Запуск аккаунта   
    var Account: TAccount; begin if (Accounts.ByLogin('Логин аккаунта', Account)) then // находим в списке аккаунтов по логину нужный аккаунт и сохраняем его в переменную Account.Start; // запускаем, если нашли end.
  23. йунный_падаван понравилось сообщение в теме от farmwl в Проблемы \ решения   
    о проблеме известно, подождите апдейт
  24. ac2007d понравилось сообщение в теме от farmwl в Проблемы \ решения   
    о проблеме известно, подождите апдейт
  25. GreedyDwarf понравилось сообщение в теме от farmwl в Уроки по Delphi с нуля [Cybern.ru]   
    Очень годные мануалы для изучения с абсолютного нуля: http://cybern.ru/category/delphilessons/begin
    Так же есть видео вариант уроков: http://youtu.be/onRhDSpHZOA?list=PLDDB9D4A0E37B4953

    Если Вы хотите освоить скриптинг на нормальном уровне, то следует посмотреть уроки взапой, закусывая тестовыми уроками (т.к. там освящаются доп. темы, которых нет в видео варианте)