Перейти к содержанию

Квест на Б-вепон рецепты 60%


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

Квест берется с 46 по 54 уровень у тп спота Pavel ruins у нпс Gutenhagen. Квест партийный, т.е. хилами можно тоже брать. По квесту надо набить 500 айтемов. Падают примерно с шансом 50%. Т.е. если взять квест всей фулл пати, то надо будет убить порядка 9000 мобов. Мобы х1, респ довольно быстрый. У меня там стояли мили пати из 5-ти чаров. Квест набивали часов за 20. С 47 по 54 смогли сдать по 3 раза. Луками/магами должно быть быстрее.

Особенности скрипта.
- Перед запуском квест должен быть взят и бот выведен на один из двух спотов. На скрине правый и левый. На правом хорошо идут ЕВЦ и ЕАЦ. На левом точек меньше, но мобов больше, чуть быстрее набивают квест.
- Скрипт ждет пока у всех чаров в пати, у кого взят квест, не будет полного комплекта айтемов и только после этого идет сдавать.
- Квест сдается и берется заново всеми чарами в пати. Запускать на каждом не надо.
- Скрипт должен запускаться на том аккаунте в боте, по которому идет ассист и за которым вся пачка побежит (настроен фолоу).
- Скрипт запоминает, на каком споте стояла пачка: на левом или на правом. И после сдачи квеста и взятия его заново вернется на тот же спот.
- При выходе со спота бот отбивается от прицепившихся мобов. Отбивается тем чаром, на котором запущен. Поэтому важен ассист по нему.

const Quest_id: integer = 647;
var
  all_complete: boolean;
  cntr: TL2Control;
  right_spot: boolean;
  i: integer;
  
function QuestStage(E: TL2Control): integer;
var i: byte;
begin
  result:= 0;
  for i:= 1 to 32 do if E.QuestStatus(Quest_id, i) then result:= i;
end;

procedure MoveToSpot(right: boolean);
begin
  if right then begin
    Engine.MoveTo(91448, -117144, -3936);
    Engine.MoveTo(92088, -116904, -3968);
    Engine.MoveTo(93336, -116872, -4048);
    Engine.MoveTo(93096, -117816, -4152);
    Engine.MoveTo(93048, -118104, -4240);
    Engine.MoveTo(93112, -118600, -4360);
    Engine.MoveTo(93448, -119464, -4528);
  end;

  if not right then begin
    Engine.MoveTo(90360, -119896, -3840);
    Engine.MoveTo(90008, -120952, -3888);
    Engine.MoveTo(89752, -120952, -3960);
    Engine.MoveTo(88152, -120968, -4256);
  end;
end;

procedure Kill(Enemy: TL2Live);
begin
  if Enemy.dead then exit;
  Engine.SetTarget(Enemy);
  delay(300);
  while not Enemy.dead do begin
    Engine.Attack();
    delay(500);
  end;
end;

function IsAgr(E:TL2Control; Mob: TL2Npc): boolean;
begin
  result := (Mob.AtkOID = E.GetUser().OID) and (not Mob.Dead);
end;

function AttackedBy(E:TL2Control): TL2Npc;
var
  moblist: TNpcList;
  cnt: integer;
begin
  result := nil;
  moblist := E.GetNpcList();
  
  for cnt:= 0 to moblist.Count-1 do begin
    if IsAgr(E, moblist(cnt)) then begin
      result:= moblist(cnt);
      break;
    end;
  end;
end;

procedure BeatOff();
var
  Enemy: TL2Live;
  i: integer;
  E: TL2Control;
  HaveMobsOnParty: boolean;
begin
  HaveMobsOnParty := true;
  while HaveMobsOnParty do begin
    HaveMobsOnParty := false;

    Enemy := AttackedBy(Engine);
    if (Enemy <> nil) then begin
      Kill(Enemy);
      HaveMobsOnParty := true;
    end;
    
    for i := 0 to Engine.GetParty().chars.count - 1 do begin
      cntr := GetControl(Engine.GetParty().chars.items(i).name);
      if Assigned(cntr) and (cntr.status = lsOnline) then begin
        Enemy := AttackedBy(cntr);
        if (Enemy <> nil) then begin
          Kill(Enemy);
          HaveMobsOnParty := true;
        end;
      end;
    end;
    
    delay(500);
  end;
end;

procedure MoveFromSpot(right: boolean);
var
  i: integer;
begin
  Engine.SetTarget(Engine.GetUser());
  delay(300);
  if right then begin
    Engine.MoveTo(94024, -120760, -4544);
    Engine.MoveTo(93288, -118840, -4464);
    Engine.MoveTo(93016, -118120, -4240);
    Engine.MoveTo(93400, -116984, -4048);
  end;
  if not right then begin
    Engine.MoveTo(86888, -121400, -4384);
    Engine.MoveTo(88056, -120904, -4320);
    Engine.MoveTo(88952, -120872, -4080);
    Engine.MoveTo(90024, -121112, -3856);
  end;

  //beat off aggrs in 3 tries
  for i := 0 to 2 do begin
    delay(5000);
    BeatOff();
  end;
  
  if right then begin
    Engine.MoveTo(92664, -116664, -3984);
    Engine.MoveTo(91384, -117080, -3936);
    Engine.MoveTo(91352, -116920, -3928);
  end;
  if not right then begin
    Engine.MoveTo(90776, -118168, -3888);
    Engine.MoveTo(91352, -117000, -3936);
  end;

  delay(10000);
  //beat off
  BeatOff();
end;

procedure ReciveReward(E: TL2Control);
begin
  if (QuestStage(E) <> 2) then exit;
  
  E.SetTarget('Gutenhagen');
  delay(500);
  E.MoveTo(E.GetUser().Target);
  delay(1000);
  
  E.DlgOpen;
  delay(500);
  E.DlgSel(1);
  delay(1000);
  E.BypassToServer('Quest _647_InfluxOfMachines 32069-06.htm', true); 
  delay(1000);

  //take it again
  
  E.DlgOpen;
  delay(1000);
  E.DlgSel(1);
  delay(1000);
  E.BypassToServer('Quest _647_InfluxOfMachines 32069-02.htm', true);
  delay(1000);
end;

begin
while true do begin
  delay(1000);
  if (Engine.status <> lsOnline) then continue;
  
  all_complete := true;
  
  for i := 0 to Engine.GetParty().chars.count - 1 do begin
    cntr := GetControl(Engine.GetParty().chars.items(i).name);
    if Assigned(cntr) and (cntr.status = lsOnline) then begin
      if (QuestStage(cntr) = 1) then begin
        all_complete := false;
        break;
      end;
    end;
  end;
  if (engine.status = lsOnline) then begin
    if (QuestStage(Engine) = 1) then begin
      all_complete := false;
    end;
  end;

  if not all_complete then continue;

  //stop combat
  engine.FaceControl(0, false);
  delay(2000);
  
  //detect left or right spot
  right_spot := engine.getuser().InRange(93992, -122472, -4560, 2000, 500);
  
  //move to npc
  MoveFromSpot(right_spot);
  
  //dlg with npc
  delay(5000);

  ReciveReward(Engine);
  for i := 0 to Engine.GetParty().chars.count - 1 do begin
    cntr := GetControl(Engine.GetParty().chars.items(i).name);
    if Assigned(cntr) and (cntr.status = lsOnline) then begin
      cntr.FaceControl(0, false);
      delay(2000);
      ReciveReward(cntr);
      cntr.FaceControl(0, true);
    end;
  end;
  
  //move back to spot
  MoveToSpot(right_spot);
  //start combat
  engine.FaceControl(0, true);
end;
end.


 

 

Screenshot_2.jpg

  • Like 1
  • Thanks 1
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...