Перейти к содержимому

Фотография
- - - - -

Помогите допилить фарм рифта



  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1
MEIDAN

MEIDAN
  • 46
    7
    Чертик
    • Lvl 24
    • Пользователь
    Город
    Грехов

Всем доброго времени суток. Прошу вашей помощи допилить скрипт на фарм РБ в рифте.

То что я сделал на скорую руку, в принципе работает, без проблем и ошибок, НО, смог реализовать только 1 прыжок в рифт, т.е. если с первого раза не попадает к РБ, то выходит с рифта и го репит (снова только 1 прыжок).

Но, этот код хочется усовершенствовать, а тут уже навыков совсем не хватает.

 

Чего очень хотелось бы добавить:
1. Что бы велся подсчет прыжка между комнатами, если 1 прыжок сделали, то го 2, если не в зоне с РБ, выход и репит.

2. С майн румы бежать к нпц 2-3 маршрутами (на выбор рандомно)

3. Вести подсчет минуты и секунды что нам потребовались, на то чтобы убить РБ начиная от входа в комнату с ним и заканчивая его смертью.

 

Буду благодарен на все готовые решения, или наводки на способы реализации данных фич.

Спасибо за внимание

uses  SysUtils, Classes, RegExpr;             
var   Fight_Flag:Boolean;               
      Item:    TL2Item;                
      obj:     TL2Npc;    
      Npc:     TL2Npc;
      obj2:    TL2Effect;
var   L2Skill: TL2Skill;      
      Enemy:   TL2Live;
var   i, n:    Integer;
var   Buff: TL2Buff;

function Bypass(dlg: string): boolean; //автоматический парсер байпасса
var
RegExp: TRegExpr;
SL: TStringList;
i: integer;
bps: string;

begin
Result:= true; 
RegExp:= TRegExpr.Create; 
SL:= TStringList.Create;
RegExp.Expression:= '(<a *(.+?)</a>)|(<button *(.+?)>)'; 

if RegExp.Exec(Engine.DlgText) then 
repeat SL.Add(RegExp.Match[0]);
until (not RegExp.ExecNext); 
for i:= 0 to SL.Count-1 do begin 

if (Pos(dlg, SL[i]) > 0) then begin 
RegExp.Expression:= '"bypass -h *(.+?)"'; 

if RegExp.Exec(SL[i]) then 
bps:= TrimLeft(Copy(RegExp.Match[0], 12, Length(RegExp.Match[0])-12));
end;
end;

Print(bps); 
if (Length(bps) > 0) then Engine.BypassToServer(bps); 
RegExp.Free; 
SL.Free;
end;
 
function MobInZone: boolean; //чек мобов в зоне фарма
var
mob: integer;
MobCaunt: Integer;

begin
  MobCaunt:= 0;
  result:= False;
  for mob:=0 to npclist.count-1 do begin
   if npclist.items(mob).inzone and not npclist.items(mob).dead then begin
     if npclist.items(mob).z > (user.z-400) then begin
      if npclist.items(mob).z < (user.z+400) then begin
      result:= true;
      end;
     end; 
   end;
  end;
end;
 
procedure find_rb;
begin
if User.InRange(-114791, -180581, -6749, 300, 300) then begin //майн рума
Engine.MoveTo(-114791, -180581, -6749);
Engine.MoveTo(-114911, -181008, -6749);
Engine.MoveTo(-114906, -181507, -6749);
Engine.MoveTo(-114869, -181839, -6749);
Engine.MoveTo(-114828, -182064, -6749);
delay(222);
Engine.SetTarget(31493);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to go to the inner space of the rift."'); //входим в рифт
delay(2000);

if User.InRange(-114792, -183080, -6752, 300, 300) then begin //1 комната
delay(666);
Engine.SetTarget(31914);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to give up."'); //выходим
delay(2000);
end;

if User.InRange(-114813, -184772, -6749, 300, 300) then begin //2 комната
delay(666);
Engine.SetTarget(31917);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to give up."'); //выходим
delay(2000);
end;

if User.InRange(-115731, -185257, -6749, 300, 300) then begin //3 комната
delay(666);
Engine.SetTarget(31911);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to give up."'); //выходим
delay(2000);
end;

if User.InRange(-115732, -184378, -6749, 300, 300) then begin //4 комната
delay(666);
Engine.SetTarget(31910);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to give up."'); //выходим
delay(2000);
end;

if User.InRange(-113851, -184765, -6752, 300, 300) then begin //5 комната
delay(666);
Engine.SetTarget(31915);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to give up."'); //выходим
delay(2000);
end;

if User.InRange(-113865, -186065, -6749, 300, 300) then begin //6 комната
delay(666);
Engine.SetTarget(31912);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to give up."'); //выходим
delay(2000);
end;

if User.InRange(-113860, -186939, -6749, 300, 300) then begin //7 комната
delay(666);
Engine.SetTarget(31913);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to give up."'); //выходим
delay(2000);
end;

if User.InRange(-115720, -186552, -6752, 300, 300) then begin //8 комната
delay(666);
Engine.SetTarget(31916);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to give up."'); //выходим
delay(2000);
end;

if User.InRange(-114801, -186442, -6749, 750, 300) then begin //комната с РБ
delay(666);
print('Обнаружен РБ, фармим');
delay(666);
farm;
end;
end;
end;

procedure farm;
begin
if User.InRange(-114801, -186442, -6749, 750, 300) then begin //фарм
delay(666);
Engine.LoadZone('rift_rb');
delay(666);
Engine.SetTarget(25338);
delay(666);
Engine.FaceControl(0, true);
delay(666);
if User.Target.Dead then begin
delay(1111);
print('Убили РБ, уходим');
delay(666);
Engine.FaceControl(0, false); 
delay(666);
Engine.UseSkill(337); //выключить Аркану повер
delay(666);
Engine.MoveTo(-114801, -186442, -6749);
delay(666);
Engine.SetTarget(31918);
delay(666);
Engine.MoveToTarget(-70);
delay(666);
Engine.DlgOpen;
delay(666);
Bypass('"I want to give up."'); //выходим
delay(3000);
find_rb; //повторяем скрипт
end;
end;
end;

begin // ГЛАВНЫЙ БЕГИН
Print('Стартую скрипт');
engine.loadconfig('Raid1');
Print('Гружу конфиг Raid1');
delay(1000);
while true do begin 
while (engine.status = lsOnline) do begin 
delay(1000);
find_rb;
farm;
end;
end;
end. 

  • 1

#2
Lapeno

Lapeno
  • 13
    2
    В страхе
    • Lvl 10
    • Пользователь

Добавь переменную, к прмеру назовем ее Jump: integer; при старте скрипта присвой ей Jump:=0; а когда попал в не ту руму то if Jump = 0 то строка СМЕНЫ румы и задавай Jump:=1; а если опять попал не в ту руму то if jump=1 then строка гив ап и Jump:=0; и на новый заход ))


Сообщение отредактировал Lapeno: 23 Июнь 2019 - 16:28

  • 0

#3
MEIDAN

MEIDAN
  • 46
    7
    Чертик
    • Lvl 24
    • Пользователь
    Город
    Грехов

Lapeno, там еще неудобство выходит в том, что у каждого гк внутри комнат, разный ИД...


  • 0

#4
Lapeno

Lapeno
  • 13
    2
    В страхе
    • Lvl 10
    • Пользователь

а при чем тут ИД ? просто для каждой не нужной комнаты прописуй новые строки
 

if User.InRange(-115720, -186552, -6752, 300, 300) //8 комната
then begin 
     delay(666);
     Engine.SetTarget(31916);
     delay(666);
     Engine.DlgOpen;
     delay(666);
     if Jump = 1
     then begin
          Bypass('"I want to give up."'); //выходим
          end;
     if Jump = 0 
     then begin
          // меняю руму
          Jump:=1;
          end;
     delay(2000);
     end;

 както так.


Сообщение отредактировал Lapeno: 23 Июнь 2019 - 18:59

  • 1

#5
MEIDAN

MEIDAN
  • 46
    7
    Чертик
    • Lvl 24
    • Пользователь
    Город
    Грехов

Lapeno, мысль подхватил. Сейчас напишу...


  • 0

#6
MEIDAN

MEIDAN
  • 46
    7
    Чертик
    • Lvl 24
    • Пользователь
    Город
    Грехов

Разобрал этот код. В принципе теперь все отлично, именно то что я хотел.

https://rawr.pro/top...arm-rifta-kozy/

 

Единственное, еще хочу добавить секундомер времени в бою и его принтом в систем чат бота ( сколько понадобилось времени что бы убить РБ )  с обнулением этого секундомера после смерти РБ


  • 0

#7
BreadfanLock

BreadfanLock

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

delay(...);
Engine.MoveTo(...);
delay(...);
Engine.SetTarget(...);
delay(...);
Engine.MoveToTarget(...);
delay(...);
Engine.DlgOpen;
delay(...);

Сообщение отредактировал BreadfanLock: 24 Июнь 2019 - 21:30

  • 0
Не изготавливаю готовый код...

#8
MEIDAN

MEIDAN
  • 46
    7
    Чертик
    • Lvl 24
    • Пользователь
    Город
    Грехов


а зачем вы вообще проверяете координаты. проверьте нпс, что появились возле вас.
дождался появления рядом с собой нпс-телепортера, проверил какие мобы появились рядом, и решай - куда дальше. и - выкинул кучу делеев, т.к. первые же лаги сбивают эту стройную картину из
delay(...);
Engine.MoveTo(...);
delay(...);
Engine.SetTarget(...);
delay(...);
Engine.MoveToTarget(...);
delay(...);
Engine.DlgOpen;
delay(...);


Абсолютно согласен. Но, так как я не особо хорошо понимаю в условиях и в основном решаю свои вопросы на примерах с других тем, для начала было важно запилить рабочий вариант так, как я умею и понимаю.
Сейчас в принципе все работает отлично и без сбоев.
Ну а потом потихоньку можно усовершенствовать скрипт и когда-нибудь доведу его до идеала)
  • 1



Темы с аналогичным тегами наработки

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Rawr.pro - Сделано с для игроков.