Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Автоматический логин после рестарта сервера

Рег
21 Окт 2016
Сообщения
2
Реакции
0
Здрасте.

Подкорректировал и сделал себе такой скрипт для авто логина, ну он работает только если игру закрыты или выпадает ошибка. Скрипт не работает если перезагрузка сервера виде такого окна: http://imgur.com/a/L5DRD, (не работает патаму што игра не закрыта, а если она не закрыта, новое окно загрузится не может.)

Как проверить что мы вылетели из сервера ? Можете есть. какая нибудь. команда, для закрытия игры ? Было бы интересно узнать как обойти сервер рестарт. p.s. Может как то надо менять данный код ?


Спасибо за ответы.)
Код:
uses SysUtils;

var
loggedIn:boolean;
 
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 = 'arbuzas222';
  password = 'herbasbas';
  gamePath = 'C:\Program Files (x86)\Lineage II\system\l2.exe';
begin
  while engine.Delay(3000) do begin  
    if (Engine.Status = lsOffline) or (Engine.Status = lsOff) then begin
      loggedIn:=true;
      print('Disconnected');
      Engine.FaceControl(0, false);
      Delay(1000);
      Engine.GameClose;
      Delay(1000);
      ShellExecuteW(0, 'open', PChar(gamePath), nil, nil, 0);
      Delay(5000);
      enterText(login);
      Engine.UseKey('Tab');
      Delay(300);
      enterText(password);
      Delay(300);
      Engine.UseKey('Enter');
      Delay(1000);
      Engine.UseKey('Enter');
      Delay(1000);
      Engine.UseKey('Enter');
      Delay(1000);
      Engine.UseKey('Enter');
      Delay(10000);
      ShowWindow(engine.gamewindow, 6);
    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(20, 0, 1, 0);
          keybd_event(20, 0, 2, 0);
          Engine.UseKey(text[i]);
          delay(10);
          keybd_event(20, 0, 1, 0);
          keybd_event(20, 0, 2, 0);
      end else
        Engine.UseKey(text[i]);
    end;
    Delay(50);
  end;
end;

function isDigit(ch: char): boolean;
const
  digits = '013456789';
var
  i: cardinal;
begin
  result:= false;
  for i:= 0 to length(digits) do
    if digits[i] = ch then begin
      result:= true;
      exit;
    end;
end;
                        
begin
if engine.status <> lsonline then loggedIn:= true else loggedIn:= false;
  Script.NewThread(@disconnectMonitor);
end.
 
Infed написал(а):
Можете есть. какая нибудь. команда, для закрытия игры ?
Код:
TaskKill /IM L2.EXE* /T /F
посмотри хелп, можно не по имени образа, а по его pId
 
легче было бы разобраться как такой скрипт должен работать. Я понимаю что должен делать "TaskKill /IM L2.EXE* /T /F", ну так же, если не ошибаюсь "Engine.GameClose;" делает тоже самое.
-
Мне надо понять. Как проверить падругому мой персонаж вы игре или нет ? если "if (Engine.Status = lsOffline) or (Engine.Status = lsOff) then begin"
не работает. Какой другой путь проверки может быть ?
-
 
@Infed, я с пакетами не дружу, поэтому могу предложить только "костыли".
Не получаешь сообщения чата + систем чата + не кастуешь + не перемещаешься + что-то еще = вылетел. Таймер поможет. =)
 
@Krickt, Можешь подсказать как добавить условие к етому:

if (Engine.Status = lsOffline) or (Engine.Status = lsOff) then begin

например если не двигаетса больше 60 секунд ,то

Engine.GameClose;
Зарание спасибо.
 
@Krickt, наверное больше пользы написать решение для всех чем делать скрин моей подписи.
 
Назад
Сверху