Ребят, привет.
Собсно о себе.
Скрипты не писал ранее, поэтому прошу треш не разводить о качестве написанного.
Взялся за это не благодарное дело, по просьбе товарищей.
Нашел 1 квесты у Маркелы, малец переделал (как правильно), вышло не плохо, бегает проходит.
Уверившись в своих силах , решил продолжить самописку 2го квеста.
Все шло хорошо, даже встроенный компилятор не ругнулся ни разу.
Ну думал все, гуру Pascal и Delphi, но не тут то было:
Во-первых, по какой-то причине в функции woodenset в конце, когда после получения нового обмундирования скрипт ему говорит одеться - Но inGame он одевает вещи и тут же снимает. - Пол беды. Если подскажите, буду признателен.
Во-вторых, так же, по не понятным мне причинам, в конце функции wooden он должен прибежать на место, а уж потом включить конфиг. Но бот, сразу после того как портнулся на место "Алтарь золота", включает конфиг, и бьет мобов на ТП, не доходя до заданных координат.
P.s. Извините за мат в комметах кода......
Собсно о себе.
Скрипты не писал ранее, поэтому прошу треш не разводить о качестве написанного.
Взялся за это не благодарное дело, по просьбе товарищей.
Нашел 1 квесты у Маркелы, малец переделал (как правильно), вышло не плохо, бегает проходит.
Уверившись в своих силах , решил продолжить самописку 2го квеста.
Все шло хорошо, даже встроенный компилятор не ругнулся ни разу.
Ну думал все, гуру Pascal и Delphi, но не тут то было:
Во-первых, по какой-то причине в функции woodenset в конце, когда после получения нового обмундирования скрипт ему говорит одеться - Но inGame он одевает вещи и тут же снимает. - Пол беды. Если подскажите, буду признателен.
Во-вторых, так же, по не понятным мне причинам, в конце функции wooden он должен прибежать на место, а уж потом включить конфиг. Но бот, сразу после того как портнулся на место "Алтарь золота", включает конфиг, и бьет мобов на ТП, не доходя до заданных координат.
P.s. Извините за мат в комметах кода......
Код:
var
Npc: TL2Npc;
shot: TL2Item;
Item: TL2Item;
qItem: TL2Item;
shw: TL2Item;
Quest: TItemList;
function CheckStatus: Boolean;
begin
Result:=true;
if User.Dead then begin
Print('Dead. Pressing to village.');
Delay(1000);
Engine.FaceControl(0,false);
Engine.GoHome;
Delay(3000);
end;
Result:=false;
end;
procedure start;
begin
Engine.Settarget('Newbie Helper');
Engine.Settarget('Помощник новичков');
Delay(1500);
Engine.DlgOpen;
Delay(1500);
Engine.Loadconfig('atack'); //меняем на свое
Engine.FaceControl(0, true);
end;
procedure kamael;
begin
Engine.FaceControl(0, false);
Engine.Settarget('Newbie Helper');
Engine.Settarget('Помощник новичков');
Delay(3000);
Engine.DlgOpen;
Delay(3000);
Engine.UseItem(12753);
Delay(30000);
end;
function woodenset: boolean;
begin
Engine.MoveTo(-119752, 44504, 376);//Бежим к нубигиду
Engine.Settarget(32135);//Таргет на него
Delay(1500);
Engine.Dlgopen;// Открываем диалог
Delay(1500);
Engine.MoveTo(-119640, 45784, 400);
Engine.MoveTo(-119512, 47816, 400);
Engine.MoveTo(-119384, 49192, 32); // Бежим к МАркелле
Engine.Settarget(32173);// Таргет на нее
Delay(1500);
Engine.Dlgopen;// Открываем диалог
Delay(2000);
Engine.DlgSel(3);// Выбираем Quest
Delay(1500);
Engine.DlgSel(1);// Выбираем 1 квест
Delay(1500);
Engine.DlgSel(1);// Выбираем нужну строку квеста
Delay(1500);
Engine.BypassToServer('00');
Delay(1500);
Engine.MoveTo(-119416, 47928, 400);
Engine.MoveTo(-119320, 46920, 376);
Engine.MoveTo(-116824, 45784, 376);
Engine.MoveTo(-115992, 45560, 520);
Engine.MoveTo(-115208, 44632, 528);
Engine.MoveTo(-115000, 44648, 528);
Engine.Settarget(32170); // Бежим по квесту
Engine.Dlgopen;
Delay(1500);
Engine.DlgSel(5);
Delay(1500);
Engine.MoveTo(-115560, 44728, 512);
Engine.MoveTo(-118888, 46888, 376);
Engine.MoveTo(-119350, 47038, 381);
Engine.MoveTo(-119416, 48552, 248);
Engine.MoveTo(-119368, 49208, 24);
Engine.Settarget(32173); // ВОзвращаемся к Маркеле
Engine.Dlgopen;
Delay(1500);
Engine.DlgSel(3);
Delay(1500);
Engine.DlgSel(1);
Delay(1500);
Engine.MoveTo(-119381, 47992, 378);
Engine.MoveTo(-119336, 47016, 376);
Engine.MoveTo(-117192, 47640, 472);
Engine.MoveTo(-117144, 47976, 472);
Engine.Settarget(32167); // Бежим по квесту
Engine.Dlgopen;
Delay(1500);
Engine.DlgSel(3);
Delay(1500);
Engine.MoveTo(-117176, 47640, 472);
Engine.MoveTo(-117606, 47446, 462);
Engine.MoveTo(-119240, 47688, 464);
Engine.MoveTo(-119368, 47944, 392);
Engine.MoveTo(-119368, 49192, 32);
Engine.Settarget(32173); // ВОзвращаемся к Маркеле
Engine.Dlgopen;
Delay(1500);
Engine.DlgSel(3);
Delay(1500);
Engine.DlgSel(1);
Delay(1500);
Engine.BypassToServer('00');
Delay(1500);
Engine.UseItem(23); //Одеваем новый шмот (сука не одевается)
Delay(500);
Engine.UseItem(2386);//Одеваем новый шмот (сука не одевается)
Delay(500);
Engine.UseItem(43);//Одеваем новый шмот (сука не одевается)
Delay(500);
Engine.UseItem(37);//Одеваем новый шмот (сука не одевается)
Delay(500);
Engine.UseItem(49);//Одеваем новый шмот (сука не одевается)
Delay(500);
Engine.MoveTo(-119400, 49576, -48); //Отходим от Маркелы чтобы выполнилось условие if (user.level >=6) and user.inrange(-119400, 49576, -48, 50) then Script.Newthread(@shots);
end;
function shots: boolean;
begin
Engine.Settarget(32173); // Таргет на МАркелле
Delay(1500);
Engine.BypassToServer('00');
Delay(1500);
Engine.MoveTo(-119400, 47960, 384);
Engine.MoveTo(-119672, 44632, 376);
Engine.Settarget(32135); // Бежим к нубигиду и выделяем в таргет
Engine.Dlgopen;
Delay(2500);
Engine.DlgSel(6);// Выбираем строки диалога
Delay(1500);
Engine.DlgSel(1);// Выбираем строки диалога
Delay(1500);
Engine.Dlgopen;
Delay(2500);
Engine.DlgSel(6);// Выбираем строки диалога
Delay(1500);
Engine.DlgSel(2);// Выбираем строки диалога
Delay(1500);
Engine.NpcExchange(10477,1); //маг пуха 10474 - Сейчас выбирает кастеты
Delay(1500);
Engine.UseItem(10477); //Одевает кастеты
Engine.Settarget(32135);//выделяем в таргет
Engine.Dlgopen;
Delay(2500);
Engine.DlgSel(5);
Delay(1500);
Engine.DlgSel(1); // Баффаемся
Delay(1500);
Engine.MoveTo(-119640, 45784, 400);
Engine.MoveTo(-119512, 47816, 400);
Engine.MoveTo(-119384, 49192, 32);
Engine.Settarget(32173);// Ебашим опять к маркеле
Delay(1500);
Engine.Dlgopen;
Delay(2000);
Engine.DlgSel(3);// Выбираем Quest
Delay(1500);
Engine.DlgSel(2);// Выбираем 2 Quest
Delay(1500);
Engine.DlgSel(1);
Delay(1500);
Engine.MoveTo(-119416, 47944, 392);
Engine.MoveTo(-119320, 46984, 376);
Engine.MoveTo(-117672, 46776, 368);
Engine.MoveTo(-116936, 46600, 368);
Engine.Settarget(32163); //Пиздуем к телепорту и зводим диалог
Delay(1500);
Engine.Dlgopen;
Delay(2000);
Engine.DlgSel(1);// Выбираем "Телепорт"
Delay(2000);
Engine.DlgSel(9);//Выбираем "Алтарь золота"
Delay(2000);
Engine.MoveTo(-122460, 78275, -3208); // После порта должно пиздовать в эту точку, но сука включается функция attack (я хз чо делать) и он начинает бить мобов с респа.
end;
function attack :boolean;
begin
Engine.Loadconfig('atack'); //меняем на свое
Engine.FaceControl(0, true); // Включает управление интерфейсом
end;
function return: boolean; // Вот тут должно отработать условие if Inventory.Quest.ByID(9796, item) and (item.count >=1) then Script.Newthread(@return), после того как он убил гоблинов и получил итем.
begin
Engine.FaceControl(0, false);// Выключает управление интерфейсом
Delay(1500);
Engine.UseItem(12753);// Юзает СОЕ в камаель
Delay(25000);
Engine.MoveTo(-119640, 45784, 400);
Engine.MoveTo(-119512, 47816, 400);
Engine.MoveTo(-119384, 49192, 32);
Engine.Settarget(32173); // Пиздует к маркеле
Engine.Delay(1500);
Engine.Dlgopen;
Delay(2000);
Engine.DlgSel(3); // Выбирает Quest
Delay(2000);
Engine.DlgSel(2);//Выбирает 2 строку квеста
Delay(2000);
Engine.DlgSel(1); // Выбирать "Обменять на Adena"
Engine.BypassToServer('00');
Delay(1500);
Engine.MoveTo(-119400, 47960, 384);
Engine.MoveTo(-119672, 44632, 376);
Engine.Settarget(32135); // Возвращается к нубигиду
Engine.Dlgopen;
Delay(2500);
end;
function close: boolean;
begin
end;
begin
if (user.level = 1) then Script.Newthread(@start);
while Engine.Status = lsOnline do
begin
delay(1500);
if Inventory.User.ByID(6353, item) and (item.count >=1)and (user.level >=2) then kamael;
if (user.level =1) and user.inrange(-120000, 44500, 368, 200) then Script.Newthread(@woodenset);
if (user.level >=6) and user.inrange(-119400, 49576, -48, 50) then Script.Newthread(@shots);
if user.inrange(-122460, 78275, -3208, 2) then attack; // Вот тут основная засада. Бот начинает атаковать раньше, чем прибежит в конечные координаты, описанные в функции shots
if Inventory.Quest.ByID(9796, item) and (item.count >=1) then Script.Newthread(@return);
end;
end.