Meteor 0 Опубликовано 14 февраля, 2022 Жалоба Поделиться Опубликовано 14 февраля, 2022 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'; зачем эта функция? я ее нигде больше не видел в коде, только в начале при объявлении. Ссылка на сообщение Поделиться на другие сайты
Intervence 51 Опубликовано 5 марта, 2022 Автор Жалоба Поделиться Опубликовано 5 марта, 2022 Уф, решил заглянуть на огонек спустя год 😃 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). Как писал вначале, код изначально не мой, я только правки вносил. Могу лишь предположить, что она нужна для одного из вызовов других функций Ссылка на сообщение Поделиться на другие сайты
Xuker 0 Опубликовано 2 февраля, 2023 Жалоба Поделиться Опубликовано 2 февраля, 2023 On 05.03.2022 at 12:23, Intervence said: Уф, решил заглянуть на огонек спустя год 😃 Time - встроенная функция, которая возвращает текущее время в твоей таймзоне, ее объявление не нужно эта функция подключает функцию ShowWindow из внешней библиотеки user32.dll (стандартная WinApi). Как писал вначале, код изначально не мой, я только правки вносил. Могу лишь предположить, что она нужна для одного из вызовов других функций а есть по проще скрипт, на такой мудренный с процедурами и т.д. ? просто скрипт, чтоб при дисконекте или рестарте сервера заходил заново.а потом включал мой скрипт, где уже все прописано куда бежать и что делать ? а то ваш скрипт капец мудренный, фиг разберешся Ссылка на сообщение Поделиться на другие сайты
TORMO3 1 Опубликовано 6 февраля Жалоба Поделиться Опубликовано 6 февраля Всем привет, подскажите какой командой свернуть окно игры после загрузки? Т.к. много развернутых окон - проблема для компа Спасибо! Ссылка на сообщение Поделиться на другие сайты
Николай 2 Опубликовано 6 февраля Жалоба Поделиться Опубликовано 6 февраля 57 minutes ago, TORMO3 said: Всем привет, подскажите какой командой свернуть окно игры после загрузки? Т.к. много развернутых окон - проблема для компа Спасибо! Воспользоваться функцией ShowWindow. Мануал: https://learn.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-showwindow Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти