hernesbird Опубликовано 23 ноября, 2021 Поделиться Опубликовано 23 ноября, 2021 (изменено) Предисловие Взглянув на данный форум, решил составить небольшой гайд с примерами реализации скрипта на прокачку с любого до любого лвла. Главное что хотелось бы сообщить, готовый скрипт не собираюсь выкладывать, те кто привык вставлять готовые скрипты без вложения собственных сил и времени в их написание, -Идут лесом!!! Мой пример реализации Начнём с главного, проверки и логика скрипта. Спойлер procedure lvlUp; // Заключаем логику скрипта с проверками в отдельную процедуру, чтобы потом скрипт мог её выключать при определенных условиях. begin while (user.level <= 40) do begin // цикл позволяющий задать условие исполнения вплоть до 40-го лвла, в данном примере, может быть хоть 85 delay(1000); if user.level > 39 then begin break; end; if user.level >35 then begin //Обязательно два условия проверки соответствия для исполнения необходимой функции if user.level < 40 then begin teleToSpotTwo(); // Функция end; end; if user.level > 33 then begin // Когда проверка будет соответствовать двум условиям, начнется исполнение функции if user.level < 37 then begin teleToSpotOne(); // Функция end; end; end; end; Далее рассмотрим пример функции которая будет содержать в себе действия. Спойлер function teleToSpotOne(): void; begin if user.level >33 then begin isinSpotTwo := true; // Наша собственная переменная Engine.BypassToServer('_bbsteleport;teleport; 00000 00000 0000 0'); // Байпас для телепорта через альт+б, тут может быть процедура с заключенными в ней координатами пути к локе и т.п delay(3000); engine.LoadZone('1.zmap'); delay(500); // обязательный дилей после команды выше engine.FaceControl(0,true); end; while (user.level <37) do delay(1000); // дополнительное условие для того чтобы скрипт ожидал условия поставленного дальше ( банально апал лвл) if user.level >35 then begin // если достиг значения в 36 лвл engine.LoadZone('2.zmap'); // это костыль который избавит нас от написания еще нескольких процедур с дополнительными проверками, но можно и реализовать как положено delay(500); State(); // процедура которая позволит нам завершить кач в указанной зоне отбиться от агров и свалить в следующую локу end; end; Переменная isinSpotTwo := true; var isinSpotTwo: boolean; Процедура State procedure State(); begin while (HaveAgroMobs) do delay(555); // Пока на вас висят агры, ждем( то есть, отбиваемся от мобов) while (User.InCombat) do delay(555); // Пока перс в бою, ждем engine.FaceControl(0,false); // Два условия прошли, выключаем интерфейс // тут может быть ваш код, либо байпас с телепортом в безопасное место, либо юз сое( в этом случае, нужна дополнительная процедура на отход в безопасное место) end; Функции используемые в процедуре 'State'. Спойлер uses SysUtils, Classes; // без комментариев function HaveAgroMobs(): boolean; // функция проверяет, висят ли на нас агромобы var i: integer; begin result:= false; for i:= 0 to NpcList.Count-1 do begin if (IsAgr(NpcList(i))) then begin result:= true; break; end; end; end; function IsAgr(Mob: TL2Npc): boolean; // Без комментариев, кто не умеет читать код, либо учится этому, идёт сам знает куда... begin result:= (Mob.AtkOID = User.OID) and (not Mob.Dead); end; На этом моменте мы имеем необходимые знания и по сути, готовые инструменты для прокачки персонажа. Но тут возникает вопрос, а как же быть в случае смерти перса? Тут возникает очередная дилемма, можно ведь было указать в основном коде дополнительные условия, наплодить переменных и еще два км кода, но мы поступим проще. Как это так, проще? -Да вот так, легко! С помощью модулей подпрограммы. Тут нам поможет знание базовых возможностей делфи. Как это реализовать? А тут во избежание использования данного гайда различными лентяями, я оставлю шапку модуля с минимальными комментариями. Спойлер unit lvlup_thread; // объявляем имя модуля interface procedure lvlUp; // указываем процедуру которая будет использоваться извне исполняющим скриптом var Terminated :boolean = false; // создаем переменную для отключения всего модуля, дабы запустить его снова при определенных условиях ( смерть или другие events ;) ) implementation // реализация кода внутри модуля uses SysUtils, Classes; // без комментариев var ??; // включаем голову, ответы выше // ваш код end. // внимательнее с синтаксисом У нас есть шапка модуля, код самого модуля, осталось только собрать его в отдельный файл и назвать так же как и сам модуль... Ничего не понятно? Читай заново, включай голову. Перед тем как сохранить модуль, проверяем тестовым запуском, если код скомпилился без ошибок, значит всё сделано верно и модуль рабочий, если адрик выдал ошибки, смотрим код ошибки в консоли бота и разбираемся, что вы сделали не так... И так, у нас есть готовый модуль, который не выдаёт ошибок. Найс, первая победа, идём дальше. Создаём исполняющий файл скрипта... Прежде всего объявляем все используемые модули или\и библиотеки, переменные и т.д Спойлер uses SysUtils, lvlup_thread; // внимание вот он модуль... Не забываем соблюдать синтаксис языка... // Тут мы реализуем основные функции скрипта, для некоторых можно сделать отдельные модуле по примеру выше. Как кому удобно... procedure Buff; begin// тут наш бафф с путём к бафферу или иным другим способам на пример : Engine.BypassToServer('_bbsbufferbypass 0 0 0'); delay(1000); end; function Dead(): void; // Отдельная функция на случай смерти begin Engine.FaceControl(0, false); delay(500); lvlup_thread.Terminated :=true; // раз перс умер, вырубаем модуль с помощью нашей переменной delay(6000); engine.GoHome; delay(7000); Buff(); end; procedure reThread; // Процедура запускающая поток с нашим модулем begin lvlup_thread.Terminated :=false; Script.NewThread(@lvlUp); // Функция из модуля в поток... end; procedure Checker; begin while true do begin // бесконечный цикл delay(5000); // без комментариев if User.Dead then // если сдохли begin Dead; // Без комментариев reThread; end; end; end; // И тут то что даст нашему скрипту работать begin engine.LoadConfig('Test.xml'); // Имя конфига перса если нужно подгрузить с другого перса( к примеру если мы качаем академиков или персов конфиг на которых уже есть. Если не такой необходимости, про не указываем. delay(1000); Script.NewThread(@Checker); // Запускаем проверку на смерть в потоке lvlUp; // единоразово включаем процедуру из модуля end. Заключение и выводы В сухом остатке мы имеем все необходимые инструменты для того чтобы написать свой собственный скрипт на прокачку персонажа с любого до любого уровня. При этом, мы можем реализовать любые сценарии исполнения, создавать отдельные модули с определенными алгоритмами, которые мы можем смело убрать в отдельные файлы и не засорять наш скрипт километрами говно-кода в которых мы точно уверенны. На пример : если это интерлюды( то еще убожество, ИМХО), Спойлер то после смерти мы летим в город и на нужно добежать до гк в определенном городе, что мы делаем? Создаем отдельный модуль с проверками на точку респавна, и после смерти прогоняемся по списку точек респавна движемся к гк и тпшимся уже куда нам нужно ( звучит вроде запутанно, но на деле всего лишь куча строчек с координатами ну или для опытных или не лентяев проверка будет через массив, что снимет нагрузку с процессора, ведь мы знаем, если скрипт написан криво - кудахтер может напрячься(процессор на пк). Каждому кто заморочился и хочет научиться писать скрипты правильно и реализовывать всё на что только хватит фантазии, использовать все возможности скриптового движка адрика и не быть нытиком выпрашивающим скрипты на форумах ( которых кстати практически не осталось) рекомендую начинать понемногу изучать различные ЯП, если навыки кодерства нужны только для написания скриптов под адрик и это потолок, то просто учим понемногу Delphi, эти знания лишними не будут если в какой-то момент захотите освоить какой-то новый ЯП. Так же не забываем, что в стандартных функциях самого адрика можно реализовать много чего, избегая лишних "костылей" в скрипте. Что так же важно знать, в кряк адрике не весь функционал из APi бота работает( в силу того что он устаревший) но в целом, даже он способен практически на всё! Всё упирается в ваши знания, навыки и фантазию... Желаю удачи и успехов! P/S Я не Pro, просто на опыте, гуру себя не считаю и многого не знаю, но кое-что всё таки умею. Гуру пилят своих ботов с нуля и торгуют ими за норм бабки в приват, про работают скриптописцами и программистами. Для тех кто захочет задать тривиальны вопросы, рекомендую прочесть содержимое спойлера ниже... Спойлер Для того чтобы пользоваться и писать скрипты под себя на боте adrenaline, Вам понадобится: 1) Не быть кретином который считает что ему все чем-то обязаны, только потому что он попросил 2) Уметь гуглить 3) Базовые знания английского языка или\и Не быть кретинов и пользоваться банальным google translator. 4) Adrenaline bot APi (Что это? См. пункт 2) 5) Начальные знания в программировании на Delphi. ( Да, да да, наш излюбленный бот AK "адрик" написан на делфи, собственно и его скриптовый движок работает на нём же, использует некоторые библиотеки оного ЯП ( язык программирования). Перечень базовых аспектов языка для ознакомления: 1. Синтаксис 2. Функции и процедуры. 3. Массивы 4. ООП Этого будет достаточно чтобы начать писать маломальски юзабельные скрипты. О говне вроде while 1<>2 do begin с указанием неиспользуемых в скрипте классов и переменных в расчёт не берем... P\S : Для тех кто будет кукарекать, пункты выставлены по нарастающей спецом. Если нагуглил, но не в состоянии сам подкорректировать под себя скрипт. Или если выдернул с APi примеры и не знаешь что сделать, лезь в изучение основ делфи и паскаля, а не идти на форум просить чтобы для тебя "переделали". Ведь как показывает практика, это равноценно написанию скрипта. А кому это нужно за спасибо? Тут и возникает дилемма, либо плати людям которые пишут скрипты за заказ, либо учи основы и пиши сам, не завися ни от кого, не унижаясь и не попрошайничая по форумам. Опытные и "гуру", охотнее подскажут тебе как правильно сделать ту или иную процедуру, направят и помогут. А чайки : - Дай дай скрипт, а как его запустить? Посаны вот нашел скрипт но он не работает! ( Хотя тупо взял пример реализации с апи, не понимая даже что в коде) будут игнорироваться любым адекватным челом. Не хочешь думать сам, плати тем кто умеет. Нет бабла и нет желания учиться - с*с*. Изменено 26 ноября, 2021 пользователем hernesbird правки 0 Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
HouseMD Опубликовано 11 декабря, 2021 Поделиться Опубликовано 11 декабря, 2021 Часть кода целиком тянута с офсайта бота. Помечать надо где своё а где нет. 0 Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
iNoj Опубликовано 12 декабря, 2021 Поделиться Опубликовано 12 декабря, 2021 23 часа назад, HouseMD сказал: Часть кода целиком тянута с офсайта бота. Помечать надо где своё а где нет. та что с него взять, чувак самоутверждается как может 0 Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
hernesbird Опубликовано 26 января, 2022 Автор Поделиться Опубликовано 26 января, 2022 В 11.12.2021 в 16:52, HouseMD сказал: Часть кода целиком тянута с офсайта бота. Помечать надо где своё а где нет. Для того и нужен апи бота, чтобы брать код с него. Помечать? Не удивлюсь если части моего кода уплывут куда-нить, собственно глубоко наплевать. Для того я его его и публикую в открытый доступ. Целиком, хахаха, тобишь если бы я сменил названия процедур, то всё, он бы уже был авторским? хДД Или 4 строки примитивного кода уже требуют авторства указание первоисточника со ссылками? И да, если бы ты внимательней читал всё что написано, ты бы увидел, что я упоминаю апи адрика. Шах и МатЬ, шалашоФка 0 Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.