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

Скрипт на проходку к валакасу


Охотник

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

Всем привет. Скрипт под адреналин на проходку к валакасу. Название: Into the Flame. Стартовый уровень 60+

Данный скрипт делал специально под сервер HF x1 под физ чаров, но в целом можно и магом сделать просто пару строк на бафф поменять.

Работает вроде неплохо сделал данным скриптом всей пати квест. Как всегда примитивно, но и ладно)))

Да, чуть не забыл. Крякнутый адрик немного некорректно работает с квест айтемами и их проверкой, поэтому после запуска скрипта и когда бот начнет фармить мобов НЕЛЬЗЯ ОТКРЫВАТЬ ИНВЕНТАРЬ иначе будет вечно фармить мобов. На платном адрике работать будет без проблем)

Запускать можно в любой точки мира. Всем спасибо не откажусь от лайка)

Спойлер

var
obj: TL2NPC;
obj2: TL2Effect;
Enemy: TL2Live;
function CheckItemCount (const itemID: Integer; const quest: Boolean = False) : Integer;
var tempItem: TL2Item;
begin
    if quest then Inventory.Quest.ByID(itemID, tempItem)
    else Inventory.User.ByID(itemID, tempItem);
    Result := tempItem.Count;
end;

const
Bypass_Home = '_bbshome'; //открываем альтб
Bypass_Buff1 = '_bbsbuffer'; //открываем баффера
Bypass_Buff2 = '_bbsbufferbypass_giveBuffSet figher 0 0'; //Бафаемся на воина
Bypass_Buff3 = '_bbsbufferbypass_heal 0 0 0'; //Регеним ХП
Bypass_port1 = '_bbsteleport'; //открываем телепорт
Bypass_port2 = '_bbsteleport;page;epic'; //Выбираем epic
Bypass_port3 = '_bbsteleport;teleport; 183640 -114840 -3362 0'; //Портуемся к НПЦ входа валакаса
Bypass_port4 = '_bbsteleport;page;cities/goddard'; //выбираем локацию годдарта
Bypass_port5 = '_bbsteleport;teleport; 146603 -58858 -2973 0'; //портуемся в кузню

  
begin
delay(1500);
Engine.BypassToServer(Bypass_Home);
delay(1000);
Engine.BypassToServer(Bypass_Buff1);
delay(1000);
Engine.BypassToServer(Bypass_Buff2);
delay(1000);
Engine.BypassToServer(Bypass_Buff3);
delay(1000);
Engine.BypassToServer(Bypass_Home);
delay(1000);
Engine.BypassToServer(Bypass_port1);
delay(1000);
Engine.BypassToServer(Bypass_port2);
delay(1000);
Engine.BypassToServer(Bypass_port3);
delay(10000);
Engine.SetTarget(31540);   // Кляйн
delay(1500);
Engine.DlgOpen;
delay(1500);
Engine.BypassToServer('npc_268460888_Quest');
delay(2000);
Engine.BypassToServer('npc_268460888_Quest _618_IntoTheFlame');
delay(2000);
Engine.BypassToServer('Quest _618_IntoTheFlame 31540-03.htm');
delay(2000);
Engine.BypassToServer(Bypass_port1);
delay(1000);
Engine.BypassToServer(Bypass_port4);
delay(1000);
Engine.BypassToServer(Bypass_port5);
delay(10000);
Engine.MoveTo(146392, -58712, -2952);
delay(1500);
Engine.SetTarget(31271);   // Хильда
delay(1500);
Engine.DlgOpen;
delay(1500);
Engine.BypassToServer('npc_268445517_Quest');
delay(2000);
Engine.BypassToServer('npc_268445517_Quest _618_IntoTheFlame');
delay(2000);
Engine.BypassToServer('Quest _618_IntoTheFlame 31271-02.htm');
delay(2000);
Engine.MoveTo(146540, -58831, -2952);
delay(400);
Engine.MoveTo(146728, -58840, -2952);
delay(400);
Engine.MoveTo(146760, -58712, -2952);
delay(400);
Engine.MoveTo(146525, -58432, -2960);
delay(400);
Engine.MoveTo(145624, -57720, -2960);
delay(400);
Engine.MoveTo(144824, -57512, -2960);
delay(400);
Engine.MoveTo(144264, -57896, -2976);
delay(400);
Engine.MoveTo(143688, -58296, -3184);
delay(400);
Engine.MoveTo(143112, -58664, -3424);
delay(400);
Engine.MoveTo(142680, -58168, -3408);
delay(400);
Engine.MoveTo(142072, -56472, -3440);
delay(400);
Engine.MoveTo(141544, -55640, -3360);
delay(400);
Engine.MoveTo(141112, -55400, -3248);
delay(400);
Engine.MoveTo(140520, -54904, -3088);
delay(400);
Engine.MoveTo(139976, -54392, -2944);
delay(400);
Engine.MoveTo(138648, -53768, -3008);
delay(1000);
while CheckItemCount(7265, True) < 50 do begin
delay(1000);
Engine.FaceControl(0,true);
end;
delay(random(3000));
Engine.FaceControl(0,false);
delay(15000);
Engine.BypassToServer(Bypass_port1);
delay(1000);
Engine.BypassToServer(Bypass_port4);
delay(1000);
Engine.BypassToServer(Bypass_port5);
delay(10000);
Engine.SetTarget(31271);   // Хильда
delay(1500);
Engine.DlgOpen;
delay(1500);
Engine.BypassToServer('npc_268445517_Quest');
delay(2000);
Engine.BypassToServer('npc_268445517_Quest _618_IntoTheFlame');
delay(2000);
Engine.BypassToServer('Quest _618_IntoTheFlame 31271-05.htm');
delay(4000);
Engine.BypassToServer(Bypass_port1);
delay(1000);
Engine.BypassToServer(Bypass_port2);
delay(1000);
Engine.BypassToServer(Bypass_port3);
delay(10000);
Engine.SetTarget(31540);   // Кляйн
delay(1500);
Engine.DlgOpen;
delay(1500);
Engine.BypassToServer('npc_268460888_Quest');
delay(2000);
Engine.BypassToServer('npc_268460888_Quest _618_IntoTheFlame');
delay(2000);
Engine.BypassToServer('Quest _618_IntoTheFlame 31540-05.htm');
end.

 

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

В 27.11.2021 в 21:46, Охотник сказал:

Всем привет. Скрипт под адреналин на проходку к валакасу. Название: Into the Flame. Стартовый уровень 60+

Данный скрипт делал специально под сервер HF x1 под физ чаров, но в целом можно и магом сделать просто пару строк на бафф поменять.

Работает вроде неплохо сделал данным скриптом всей пати квест. Как всегда примитивно, но и ладно)))

Да, чуть не забыл. Крякнутый адрик немного некорректно работает с квест айтемами и их проверкой, поэтому после запуска скрипта и когда бот начнет фармить мобов НЕЛЬЗЯ ОТКРЫВАТЬ ИНВЕНТАРЬ иначе будет вечно фармить мобов. На платном адрике работать будет без проблем)

Запускать можно в любой точки мира. Всем спасибо не откажусь от лайка)

  Скрыть контент

var
obj: TL2NPC;
obj2: TL2Effect;
Enemy: TL2Live;
function CheckItemCount (const itemID: Integer; const quest: Boolean = False) : Integer;
var tempItem: TL2Item;
begin
    if quest then Inventory.Quest.ByID(itemID, tempItem)
    else Inventory.User.ByID(itemID, tempItem);
    Result := tempItem.Count;
end;

const
Bypass_Home = '_bbshome'; //открываем альтб
Bypass_Buff1 = '_bbsbuffer'; //открываем баффера
Bypass_Buff2 = '_bbsbufferbypass_giveBuffSet figher 0 0'; //Бафаемся на воина
Bypass_Buff3 = '_bbsbufferbypass_heal 0 0 0'; //Регеним ХП
Bypass_port1 = '_bbsteleport'; //открываем телепорт
Bypass_port2 = '_bbsteleport;page;epic'; //Выбираем epic
Bypass_port3 = '_bbsteleport;teleport; 183640 -114840 -3362 0'; //Портуемся к НПЦ входа валакаса
Bypass_port4 = '_bbsteleport;page;cities/goddard'; //выбираем локацию годдарта
Bypass_port5 = '_bbsteleport;teleport; 146603 -58858 -2973 0'; //портуемся в кузню

  
begin
delay(1500);
Engine.BypassToServer(Bypass_Home);
delay(1000);
Engine.BypassToServer(Bypass_Buff1);
delay(1000);
Engine.BypassToServer(Bypass_Buff2);
delay(1000);
Engine.BypassToServer(Bypass_Buff3);
delay(1000);
Engine.BypassToServer(Bypass_Home);
delay(1000);
Engine.BypassToServer(Bypass_port1);
delay(1000);
Engine.BypassToServer(Bypass_port2);
delay(1000);
Engine.BypassToServer(Bypass_port3);
delay(10000);
Engine.SetTarget(31540);   // Кляйн
delay(1500);
Engine.DlgOpen;
delay(1500);
Engine.BypassToServer('npc_268460888_Quest');
delay(2000);
Engine.BypassToServer('npc_268460888_Quest _618_IntoTheFlame');
delay(2000);
Engine.BypassToServer('Quest _618_IntoTheFlame 31540-03.htm');
delay(2000);
Engine.BypassToServer(Bypass_port1);
delay(1000);
Engine.BypassToServer(Bypass_port4);
delay(1000);
Engine.BypassToServer(Bypass_port5);
delay(10000);
Engine.MoveTo(146392, -58712, -2952);
delay(1500);
Engine.SetTarget(31271);   // Хильда
delay(1500);
Engine.DlgOpen;
delay(1500);
Engine.BypassToServer('npc_268445517_Quest');
delay(2000);
Engine.BypassToServer('npc_268445517_Quest _618_IntoTheFlame');
delay(2000);
Engine.BypassToServer('Quest _618_IntoTheFlame 31271-02.htm');
delay(2000);
Engine.MoveTo(146540, -58831, -2952);
delay(400);
Engine.MoveTo(146728, -58840, -2952);
delay(400);
Engine.MoveTo(146760, -58712, -2952);
delay(400);
Engine.MoveTo(146525, -58432, -2960);
delay(400);
Engine.MoveTo(145624, -57720, -2960);
delay(400);
Engine.MoveTo(144824, -57512, -2960);
delay(400);
Engine.MoveTo(144264, -57896, -2976);
delay(400);
Engine.MoveTo(143688, -58296, -3184);
delay(400);
Engine.MoveTo(143112, -58664, -3424);
delay(400);
Engine.MoveTo(142680, -58168, -3408);
delay(400);
Engine.MoveTo(142072, -56472, -3440);
delay(400);
Engine.MoveTo(141544, -55640, -3360);
delay(400);
Engine.MoveTo(141112, -55400, -3248);
delay(400);
Engine.MoveTo(140520, -54904, -3088);
delay(400);
Engine.MoveTo(139976, -54392, -2944);
delay(400);
Engine.MoveTo(138648, -53768, -3008);
delay(1000);
while CheckItemCount(7265, True) < 50 do begin
delay(1000);
Engine.FaceControl(0,true);
end;
delay(random(3000));
Engine.FaceControl(0,false);
delay(15000);
Engine.BypassToServer(Bypass_port1);
delay(1000);
Engine.BypassToServer(Bypass_port4);
delay(1000);
Engine.BypassToServer(Bypass_port5);
delay(10000);
Engine.SetTarget(31271);   // Хильда
delay(1500);
Engine.DlgOpen;
delay(1500);
Engine.BypassToServer('npc_268445517_Quest');
delay(2000);
Engine.BypassToServer('npc_268445517_Quest _618_IntoTheFlame');
delay(2000);
Engine.BypassToServer('Quest _618_IntoTheFlame 31271-05.htm');
delay(4000);
Engine.BypassToServer(Bypass_port1);
delay(1000);
Engine.BypassToServer(Bypass_port2);
delay(1000);
Engine.BypassToServer(Bypass_port3);
delay(10000);
Engine.SetTarget(31540);   // Кляйн
delay(1500);
Engine.DlgOpen;
delay(1500);
Engine.BypassToServer('npc_268460888_Quest');
delay(2000);
Engine.BypassToServer('npc_268460888_Quest _618_IntoTheFlame');
delay(2000);
Engine.BypassToServer('Quest _618_IntoTheFlame 31540-05.htm');
end.

 

Первое что бы хотелось отметить, зачем эти переменные?  Нет ни поиска целей (мобов, переменная TL2NPC, ни проверки на отсутствие баффа =) )

Спойлер

var
obj: TL2NPC;
obj2: TL2Effect;
Enemy: TL2Live;

Далее, константы. 
 

Спойлер

Bypass_Buff2 = '_bbsbufferbypass_giveBuffSet figher 0 0'; //Бафаемся на воина
Bypass_Buff3 = '_bbsbufferbypass_heal 0 0 0'; //Регеним ХП
Bypass_port3 = '_bbsteleport;teleport; 183640 -114840 -3362 0'; //Портуемся к НПЦ входа валакаса
Bypass_port5 = '_bbsteleport;teleport; 146603 -58858 -2973 0'; //портуемся в кузню

 

На данном серве, да и на многих, можно отправить байпас напрямую, без предшествующего пути, как показала практика... Тобишь все те байпасы с консты, что я удалил,  не нужны.

 

Далее,

Спойлер

Engine.MoveTo(146540, -58831, -2952);
delay(400);
Engine.MoveTo(146728, -58840, -2952);
delay(400);
Engine.MoveTo(146760, -58712, -2952);
delay(400);
Engine.MoveTo(146525, -58432, -2960);
delay(400);
Engine.MoveTo(145624, -57720, -2960);
delay(400);
Engine.MoveTo(144824, -57512, -2960);
delay(400);
Engine.MoveTo(144264, -57896, -2976);
delay(400);
Engine.MoveTo(143688, -58296, -3184);
delay(400);
Engine.MoveTo(143112, -58664, -3424);
delay(400);
Engine.MoveTo(142680, -58168, -3408);
delay(400);
Engine.MoveTo(142072, -56472, -3440);
delay(400);
Engine.MoveTo(141544, -55640, -3360);
delay(400);
Engine.MoveTo(141112, -55400, -3248);
delay(400);
Engine.MoveTo(140520, -54904, -3088);
delay(400);
Engine.MoveTo(139976, -54392, -2944);
delay(400);
Engine.MoveTo(138648, -53768, -3008);
delay(1000);

 

Первое, дилей не нужен. После каждого engine.moveTo, ибо дилей формально присутствует по умолчанию, точнее, пока перс не дойдёт до указанной точки, дополнительных действий не требуется. 

  В лучшем случае сделать конечно же массив. Как он будет выглядеть? Примерно так :

Спойлер

const rootToSpot: Array[0..15] of Array[0..2] of integer =  (
(146540, -58831, -2952),
(146728, -58840, -2952),
(146760, -58712, -2952),
(146525, -58432, -2960),
(145624, -57720, -2960),
(144824, -57512, -2960),
(144264, -57896, -2976),
(143688, -58296, -3184),
(143112, -58664, -3424),
(142680, -58168, -3408),
(142072, -56472, -3440),
(141544, -55640, -3360),
(141112, -55400, -3248),
(140520, -54904, -3088),
(139976, -54392, -2944),
(138648, -53768, -3008)
                                                                                           );

 

function moveToSpot(): void;
var i:integer;
begin
    for i:= 0 to 15 do begin
        Engine.MoveTo(rootToSpot[i][0], rootToSpot[i][1], rootToSpot[i][2]);
    end;
end;

 

Далее,

Спойлер

while CheckItemCount(7265, True) < 50 do begin

delay(1000);
Engine.FaceControl(0,true);
end;
delay(random(3000));
Engine.FaceControl(0,false);
delay(15000);

Данный цикл вызывает сомнения. Первое, каждую секунду после проверки, будет подаваться команда включения бота, рандом дилей вообще зачем? Дилей 15 сек? А если будет на тебе висеть в этот момент моб ? Выходит перс не сможет послать байпас, если не выйдет с боя... Я конечно не осуждаю, но этот скрипт мягко говоря, сырой... Моя "миссия" не обосрать, а скорее указать на ошибки, для того чтобы ты в дальнейшем постил халявные скрипты, которые будут работать))) Опять же, тот кто не шарит, тот пусть со-со, тот кто может склеить всё, пусть наслаждается очередным "минигайдом"... 

Правильный цикл будет выглядеть так:

Спойлер

engine.LoadZone('1.zmap'); // карта как костыль, с картой проще, просто выделяем зону с необходимыми мобами и просто бьем их пока не будет нужное кол-во айтемов. Либо прописываем поиск и убийство нужных мобов

         delay(300);

Engine.FaceControl(0,true);

         delay(500);

while CheckItemCount(7265, True) < 50 do delay(1000); // пока кол-во айтемов меньше 50-ти, ожидаем 1 секунду(выполняем предшествующую функцию(в данном случаем бьем мобов...))

     if CheckItemCount(7265, True) > 49 then begin // если кол-во айтемов больше 49-ти (то есть 50, для тупых...) делаем 
Engine.FaceControl(0,false); // только в случае если есть путь в город, если же ( тп альтб, скрол и т.д, нужна проверка на агроМоб, чтобы не залагал бот...)
 RunFromSpot; // Тут могут быть корды пути со спота, либо прописываем проверки на агро мобов в отдельной процедуре, чтобы не было загвоздок с висящими на вас мобами....( не знаем как? смотрим на форуме гайд "прокачка 1-85", есть готовые функции...)

end;

 

Лепим, пользуемся....

P/S То что я описал на базе того что было, это примитивно и работает. То что ты выкинул, не логично( речь о логике скрипта). 

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

В 27.11.2021 в 21:46, Охотник сказал:

Да, чуть не забыл. Крякнутый адрик немного некорректно работает с квест айтемами и их проверкой, поэтому после запуска скрипта и когда бот начнет фармить мобов НЕЛЬЗЯ ОТКРЫВАТЬ ИНВЕНТАРЬ иначе будет вечно фармить мобов. На платном адрике работать будет без проблем)

Чушь собачья, всё работает нормально, что там, что там. Перестань говнокодить и осознай, что тесты скрипта обычно занимают больше времени чем его написание...

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

  • 2 недели спустя...

hernesbird,  ну ты прям уничтожил человека. ))) Он же делал работу, старался. Нет его вины в том что он не учился программированию.

 

Охотник, молодец. Спасибо за скрипт.

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

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

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

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

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

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

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

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

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

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