Перейти к содержанию
LineaAge II Forum L2Corvet

Прокачка 1-85 (гайд по написанию)


Рекомендуемые сообщения

Предисловие

Взглянув на данный форум, решил составить небольшой гайд с примерами реализации скрипта на прокачку с любого до любого лвла. Главное что хотелось бы сообщить, готовый скрипт не собираюсь выкладывать, те кто привык вставлять готовые скрипты без вложения собственных сил и времени в их написание, -Идут лесом!!!

Мой пример реализации 

Начнём с главного, проверки и логика скрипта. 

Спойлер

 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 примеры и не знаешь что сделать, лезь в изучение основ делфи и паскаля, а не идти на форум просить чтобы для тебя "переделали". Ведь как показывает практика, это равноценно написанию  скрипта. А кому это нужно за спасибо?

 Тут и возникает дилемма, либо плати людям которые пишут скрипты за заказ, либо учи основы и пиши сам, не завися ни от кого, не унижаясь и не попрошайничая по форумам. Опытные и "гуру", охотнее подскажут тебе как правильно сделать ту или иную процедуру, направят и помогут. А чайки : - Дай дай скрипт, а как его запустить? Посаны вот нашел скрипт но он не работает! ( Хотя тупо взял пример реализации с апи, не понимая даже что в коде) будут игнорироваться любым адекватным челом. Не хочешь думать сам, плати тем кто умеет. Нет бабла  и нет желания учиться - с*с*.

 

Изменено пользователем hernesbird
правки
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...