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

Встаньте мне пожалуйста на голову


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

Не для кого не секрет в ИТ есть комнаты в которых мобы респаются намного быстрее чем в остальных!  Ниже скрипт на фарма такой комнаты, на полном автомате и заходом после рестарта, вам нужно настроить основной баф и баф ЛС, а также выставить радиус для фарма комнаты по прибытию.
Если сохранить настроенный баф под именем SuperBuff , то бот после входа в игру попытается его бафнуть.

 

uses SysUtils, Classes;
var
  loggedIn:boolean;
  RestartByTime: boolean = false;
  RestartTime: TDateTime = StrToDateTime('15:01:00');
  RestartDelay: TDateTime = StrToDateTime('00:02:00');
 
function ShellExecuteW(hwnd: integer; lpOperation, lpFile, lpParameters, lpDirectory: PChar;  nShowCmd: integer): integer; stdcall;
  external 'Shell32.dll';
function keybd_event(bVk, bScan: byte; dwFlags, dwExtraInfo: integer): integer; stdcall;
  external 'user32.dll';
function ShowWindow(hwnd:cardinal; action:integer):boolean; stdcall;
external 'user32.dll';

procedure disconnectMonitor;
const
  login = 'LOGIN';      //<-- между '' пишем логин    
  password = 'PASSWORD';   //<-- пароль     
  gamePath = 'F:\L2_Interlude_L2KOT.RU_v4.1\system\l2.exe';   //<-- полный путь до l2.exe (например D:\Lineage\system\l2.exe)
begin
  while engine.Delay(5000) do begin 
	if (Time > RestartTime) and (Time < RestartTime + RestartDelay) then RestartByTime:= true;
    if (Engine.Status = lsOffline) or (Engine.Status = lsOff) or RestartByTime then begin
      loggedIn:=true;                           
      print('Disconnected');
      Engine.FaceControl(0, false);
      Delay(1000);                         
      Engine.GameClose;
      Delay(1000);
      if(RestartByTime) then begin
       while (Time < RestartTime + RestartDelay) do begin
         Delay(90000);
       end;
       RestartByTime:= false;
      end;	  
      ShellExecuteW(0, 'open', PChar(gamePath), nil, nil, 0);
      Delay(20000);   // тут можно увеличить, если игра не успевает прогрузиться до ввода данных
      enterText(login);
      Engine.UseKey('Tab');                       
      Delay(300);
      enterText(password);
      Delay(300);
      Engine.UseKey('Enter');
      Delay(2000);
      Engine.UseKey('Enter');
      Delay(2000);
      Engine.UseKey('Enter');                         
      Delay(2000);
      Engine.UseKey('Enter');
      Delay(20000);
      superBuff();
      Engine.FaceControl(0, true);
      Engine.FaceControl(1, true);
    end;
  end;
end;

procedure enterText(const text: string);
var
  i: cardinal;
  upperCase: boolean;
begin
  for i:= 1 to length(text) do begin
    if isDigit(text[i]) then
      Engine.UseKey(text[i])
    else begin
      upperCase:= text[i] = UpCase(text[i]);      
      if upperCase then begin
        keybd_event($A0, 0, 0, 0);          
      end;
      delay(20);      
      Engine.UseKey(text[i]);      
    end;
    delay(20);
    keybd_event($A0, 0, 2, 0);
    delay(50);
  end;
end;

// Thanks to Mariko (from l2kot.ru)
function isDigit(ch: char): boolean;
const digits = '0123456789';
var i: cardinal;
begin
  result:= true;
  for i:= 0 to length(digits)-1 do
    if digits[i] = ch then 
      exit;
  result:= false;
end;
// Thanks end

 // Возврат на спот
Procedure returnSpotIT;

Var obj: TL2NPC;
  Item: TL2Item;
  Enemy: TL2Live;
Begin
  While engine.Delay(10000) Do
    Begin

      If User.Dead Then

        Begin
          delay (5000);
          Engine.FaceControl(1,false);
          Engine.gohome;
          delay(1000);
          Engine.gohome;
          delay(30000);

          //Телепорт Alt+B///
          engine.bypasstoserver('_bbsloc');
          delay(2000);
          engine.bypasstoserver( '_bbstop;51');
          delay(2000);
          engine.bypasstoserver('_bbstop;517');
          delay(2000);
          engine.bypasstoserver('_bbsteleport;teleport; 147725 -56517 -2780 5000');

          delay(10000);
        End;
      If user.inrange(147725, -56517, -2976, 2780, 300)

        Then
        Begin
          Engine.FaceControl(0,false);
          Engine.FaceControl(1,false);
          Engine.MoveTo(147936, -55368, -2760);
        End;

      If User.inrange(147944, -55224, -2712, 250, 150) Then
        Begin
          delay(500);

          Engine.MoveTo(147944, -55224, -2712);

          Engine.SetTarget(31275);
          Engine.DlgOpen();
          delay(550);
          Engine.DlgSel(3) ;
          delay(550);
          Engine.DlgSel(2) ;
          delay(550);
          Engine.DlgSel(11) ;
          delay(15000);
          Engine.MoveTo(186568,-75560,-2824);
          Engine.MoveTo(186264,-75560,-2728);
          Engine.MoveTo(185176,-75640,-2728);
          Engine.MoveTo(184808,-76344,-2728);
          Engine.MoveTo(184648,-78712,-2728);
          Engine.MoveTo(182216,-78680,-2728);
          Engine.MoveTo(181416,-78264,-2728);
          Engine.MoveTo(181336,-75320,-2728);
          Engine.MoveTo(177896,-75336,-2728);
          Engine.MoveTo(177896,-75864,-2728);
          Engine.MoveTo(177912,-77720,-3376);
          Engine.MoveTo(177912,-78632,-3376);
          Engine.MoveTo(177944,-79352,-3608);
          Engine.MoveTo(177960,-80728,-4024);
          Engine.FaceControl(0,true);
          Engine.FaceControl(1,true);
        End;
    End;
End;

 procedure superBuff;
  begin
   engine.bypasstoserver('_bbshome');          
   delay(1000);
   engine.bypasstoserver('_bbsbuff;restore;SuperBuff');
   delay(1000);
   engine.bypasstoserver('_bbsbuff;heal;70'); 
end;

procedure CheckStuckThread(sec: integer);
var Timer: int64;  X, Y, Z: integer;
begin
  while (Engine.Status <> lsOnline) do delay(555);    // ожидаем входа в игру
  X:= User.X;  Y:= User.Y;  Z:= User.Z;               // запоминаем текущие координаты
  Timer:= GetTickCount + sec*1000;                    // запоминаем время
  while Engine.delay(555) do begin                           // запускаем бесконечный цикл
    if (Engine.Status = lsOnline) then begin          // если мы в игре, то 
      if (User.Cast.EndTime = 0)                      // если мы ничего не кастуем в данный момент
      and (not User.Sitting)                          // и не сидим регенимся
      and (Abs(User.X-X) < 100)                        // (значение 10 можно менять) 
      and (Abs(User.Y-Y) < 100) then begin             // и наши координаты почти не изменились, тогда        // пишем в логи (эту строчку можно закоментировать)
        if (GetTickCount > Timer) then begin          // если прошло больше указанного времени, то                            // тормозим скрипт
          Print('Кажется я застрял');                 // пишем в логи (эту строчку можно закоментировать)
          if Engine.UseItem(736) then begin           // используем SoE
            while (User.Cast.EndTime <> 0) do delay(555); // ждем окончания каста
            delay(5555);                              // и ждем еще немного, чтобы прогрузиться
          end;
           //Телепорт Alt+B///
              engine.bypasstoserver('_bbsloc');
              delay(2000);
              engine.bypasstoserver( '_bbstop;51');
              delay(2000);
              engine.bypasstoserver('_bbstop;517');
              delay(2000);
              engine.bypasstoserver('_bbsteleport;teleport; 147725 -56517 -2780 5000'); // Goddard
            delay(10000);
        end;
      end else begin                                  // если же мы ничего не кастуем, и наши координаты поменялись, то
        X:= User.X;  Y:= User.Y;  Z:= User.Z;         // запоминаем новые координаты
        Timer:= GetTickCount + sec*1000;              // обновляем таймер
      end;
    end;
  end;
end;

begin
Script.NewThread(@returnSpotIT);
if engine.status <> lsonline then loggedIn:= true else loggedIn:= false;
  Script.NewThread(@disconnectMonitor);
  Script.NewThread(@CheckStuckThread(120));
end.
end.


 

Изменено пользователем Selivar
  • Like 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

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