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

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


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

On 21.06.2021 at 22:55, Intervence said:

Выкладываю скрипт, которым пользуюсь сам. автор не я, ник к сожалению не вспомню (правки делал Mariko). Я лишь вносил мелкие правки, чтобы бот не долбился в выключенный сервер и не откидывался раньше времени.

Скрипт автоматически запускает клиент, вводит данные и перед рестартом в 15-00 по МСК выходит из игры


uses SysUtils;
var
  loggedIn:boolean;
  RestartByTime: boolean = false;
  RestartTime: TDateTime = StrToDateTime('14:55:00');
  RestartDelay: TDateTime = StrToDateTime('00:05: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 = '';      //<-- между '' пишем логин    
  password = '';   //<-- пароль     
  gamePath = '';   //<-- полный путь до 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(60000);
       end;
       RestartByTime:= false;
      end;	  
      ShellExecuteW(0, 'open', PChar(gamePath), nil, nil, 0);
      Delay(10000);   // тут можно увеличить, если игра не успевает прогрузиться до ввода данных
      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(10000);                                  
      Engine.FaceControl(0, 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          
                         
begin
if engine.status <> lsonline then loggedIn:= true else loggedIn:= false;
  Script.NewThread(@disconnectMonitor);
end.
end.

 

function ShowWindow(hwnd:cardinal; action:integer):boolean; stdcall;
external 'user32.dll';

зачем эта функция? я ее нигде больше не видел в коде, только в начале при объявлении.

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

Уф, решил заглянуть на огонек спустя год 😃

 

On 14.02.2022 at 16:09, Meteor said:

А где объявление "Time"? Это что(переменная, функия или процедура)?  Я так понимаю она должна возвращать текущее время и проверять условие в этой строке:  if (Time > RestartTime) and (Time < RestartTime + RestartDelay) then RestartByTime:= true; 

Time - встроенная функция, которая возвращает текущее время в твоей таймзоне, ее объявление не нужно 

On 14.02.2022 at 19:31, Meteor said:

function ShowWindow(hwnd:cardinal; action:integer):boolean; stdcall;
external 'user32.dll';

зачем эта функция? я ее нигде больше не видел в коде, только в начале при объявлении.

эта функция подключает функцию ShowWindow из внешней библиотеки user32.dll (стандартная WinApi). Как писал вначале, код изначально не мой, я только правки вносил. Могу лишь предположить, что она нужна для одного из вызовов других функций

Ссылка на сообщение
Поделиться на другие сайты
  • 10 месяцев спустя...
On 05.03.2022 at 12:23, Intervence said:

Уф, решил заглянуть на огонек спустя год 😃

 

Time - встроенная функция, которая возвращает текущее время в твоей таймзоне, ее объявление не нужно 

эта функция подключает функцию ShowWindow из внешней библиотеки user32.dll (стандартная WinApi). Как писал вначале, код изначально не мой, я только правки вносил. Могу лишь предположить, что она нужна для одного из вызовов других функций

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

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...
57 minutes ago, TORMO3 said:

Всем привет, подскажите какой командой свернуть окно игры после загрузки? Т.к. много развернутых окон - проблема для компа

Спасибо!

Воспользоваться функцией ShowWindow. Мануал: https://learn.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-showwindow

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

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

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

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

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

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

Войти

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

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