Что нового

Автоматический вход в игру

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Nik сказал(а):
Лично меня заколебало каждый раз вручную вводить пароль для Евы и я решил сбацать программульку, которая сделала-бы это за меня.
Хочу сказать сразу несколько вещей:
1. Не надо в этой теме писать, что Вы - умнее меня и решили этот вопрос раньше, красивее, удобнее и т.п. Я рад за Вас. Правда-правда! Но в этом случае Вам в этой теме делать просто нечего Если только поглумиться
2. Готового EXEшника я прикладывать не буду! Не хочу отбрыкиваться от параноиков и доказывать, что программа не ворует пароли/устанавливает вирусы/форматирует винт и т.д.

Итак. Если кто-то еще хочет продолжать, то Вам нужно установить программу Auto It 3 , открыть нижеприложенный скрипт и выбрать Tools - Buid. На выходе Вы получите готовый исполняемый файл.

Использование: EveLauncher.exe <имя_чара_без_пробелов>
Ограничение - для каждого аккаунта у Вас должен быть отдельноустановленный клиент. Если-же Вы запускаете разные аккаунты из одной папки Евы, то имя аккаунта у Вас каждый раз будет разное и пароль не будет совпадать (ну, если у Вас для всех акков пароль совпадает - тогда будет работать нормально).
При первом запуске программа "грязно выругается", что нет файла настроек и начнет задавать вопросы:
1. Пароль
2. Полный путь к файлу eve.exe. Программа проверяет - существует-ли указанный путь, поэтому в случае опечатки не даст ввести откровенную чушь
3. Период ожидания. После запуска Евы сперва некоторое время висит splash заставка, Ева грузится. Посылать в это время пароль бессмысленно, он не будет принят. В зависимости от мощности компьютера загрузка занимает разное время. Поэкспериментируйте со временем. Я рекомендую ставить секунд 10-15. В это поле программа не даст ввести что-либо, кроме чисел
4. Использовать или нет дополнительные ключи /off /LUA:shok:FF? Если Вы не знаете, что это такое - говорите НЕ использовать.

Все, настройка завершена. Все данные сохранились в файлике <имя_чара>.ini, который можно открыть Блокнотом и подправить, в случае чего. Там все просто и понятно. К сожалению, сделать полноценную "защиту от дурака" - довольно сложно. Поэтому, если Вы вручную в поле времени ожидания введете слово вместо числа - программа вылетит с ошибкой. Скрипт я написал за 20 минут. Писал под себя. реализовывать bullet-proof защиту не хочу, т.к. сам дурью маяться не намерен

Best practics:
Лучше всего сделать ярлык на лаунчер и подправить его, дописав имя чара в поле запуска программы.

После запуска программа заодно изменит заголовок окна Евы со стандартного "EVE" на "EVE - имя_чара". При игре в оконном режиме с несколькими одновременно запущенными клиентами будет удобнее ориентироваться.

Ну а теперь, собственно, сам скрипт:
Код
Код:
#include
Local $oldtitle = "EVE"; старый заголовок Евы
; Программа запущена с параметром или нет?
If $CmdLine[0]=0 Then
    MsgBox(16, "Error", "Запустите программу с указанием имени чара!")
    Exit
EndIf
; имя аккаунта = первому переданному параметру. Поэтому имя акка надо указывать БЕЗ пробелов
$char = $CmdLine[1]
$ppp = "xxx"
If FileExists($char&'.ini')=0 Then; файла настроек нет, начинаем их создавать
    MsgBox(16, "Error", "Файл настроек для чара не найден! Нажмите ОК и программа произведет настройку")
    $p = InputBox("Запрос", "Введите пароль для чара")
    IniWrite($char&'.ini', "Settings", "Password",$p)
    $pp = InputBox("Запрос", "Введите полный путь до файла eve.exe (Например: d:\\games\\eve\\eve.exe)")
    While FileExists($pp)=0
        MsgBox(16, "Error", "Введенный путь неверен! Введите еще раз")
        $pp = InputBox("Запрос", "Введите полный путь до файла eve.exe (Например: d:\\games\\eve\\eve.exe)")
    WEnd
    IniWrite($char&'.ini', "Settings", "FilePath",$pp)
    $ppp = InputBox("Запрос", "Введите время ожидания в секундах до запуска клиента Евы. Программа будет выжидать этот период, прежде, чем попробует послать пароль")
    While StringIsDigit($ppp)=0
        MsgBox(16, "Error", "Нужно вводить ТОЛЬКО цифры!")
        $ppp = InputBox("Запрос", "Введите время ожидания в секундах до запуска клиента Евы. Программа будет выжидать этот период, прежде, чем попробует послать пароль")
    WEnd
    IniWrite($char&'.ini', "Settings", "TimeWait",$ppp)
    $pppp = SelectLua()
    IniWrite($char&'.ini', "Settings", "Lua",$pppp)
    MsgBox(48, "Info", "Файл настроек для чара создан! Запустите программу еще раз")
    Exit
EndIf
;======================
$title="EVE - " & $char ; новый заголовок Евы
;======================
; начинаем читать файл настроек
$pass = IniRead($char&'.ini',"Settings","Password","###")
If $pass="###" Then
    MsgBox(16, "Error", "Не могу открыть INI файл или прочитать значение пароля!")
    Exit
EndIf
$path = IniRead($char&'.ini',"Settings","FilePath","###")
If $path="###" Then
    MsgBox(16, "Error", "Не могу открыть INI файл или прочитать путь до файла Евы!")
    Exit
EndIf
$time = IniRead($char&'.ini',"Settings","TimeWait","999999")
If $time=999999 Then
    MsgBox(16, "Error", "Не могу открыть INI файл или прочитать время ожидания! Будет использовано время ожидания по умолчанию - 10 секунд")
    $time=10
EndIf
$lua = IniRead($char&'.ini',"Settings","Lua","999999")
If $lua=999999 Then
    MsgBox(16, "Error", "Не могу открыть INI файл или прочитать - использовать LUA или нет? Параметр LUA будет использован по-умолчанию")
    $lua=1
EndIf
Select
    Case $lua = 1
        $EVE = $path & " /end /LUA:OFF"
    Case $lua = 0
        $EVE = $path
EndSelect
Run($EVE); запускаем Еву
sleep($time); ждем положенное время
WinSetTitle($oldtitle,"",$title); меняем заголовок
WinWaitActive($title); активируем окно
Send($pass&"{ENTER}"); посылаем пароль и программно жмем Энтер
;============================================
;============================================
Func SelectLua()
    Local $radio1, $radio2, $msg, $Button_1, $res
    GUICreate("My GUI radio", 230, 170); will create a dialog box that when displayed is centered
    GUICtrlCreateLabel("Выберите режим запуска клиента", 10, 25)
    $radio1 = GUICtrlCreateRadio("С ключем LUA", 10, 50)
    $radio2 = GUICtrlCreateRadio("Без ключа LUA", 10, 75)
    $Button_1 = GUICtrlCreateButton("OK", 10, 115, 90)
    GUICtrlSetState($radio1, $GUI_CHECKED)
    GUICtrlSetState($Button_1, $GUI_DEFBUTTON)
    $res=1
    GUISetState()
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE
                Return $res
                ExitLoop
            Case $msg = $Button_1
                ExitLoop
            Case $msg = $radio1 And BitAND(GUICtrlRead($radio1), $GUI_CHECKED) = $GUI_CHECKED
                $res=1;с LUA
            Case $msg = $radio2 And BitAND(GUICtrlRead($radio2), $GUI_CHECKED) = $GUI_CHECKED
                $res=0;без LUA
        EndSelect
    WEnd
    Return $res
EndFunc
 

garrul

Знающий
Сообщения
16
Репутация
10
Re: Автологин

сам пользуюсь вот такой конструкцией:

Код:
Opt ("MouseCoordMode", 0)
Opt("PixelCoordMode", 0)
Opt("SendKeyDownDelay", 200)
#include <ImageSearch.au3>
Global $xok = 0, $yok = 0

StartGame()

Func StartGame()
		If Not ProcessExists("ExeFile.exe") Then
			Run("D:\Games\Eve\eve.exe /end /LUA:OFF", "D:\Games\Eve") ;Пишем тут свой путь
			Sleep(8000) ; Выставляем задержку по мощности компа
		EndIf
		WinActivate("EVE")
		WinWaitActive("EVE")
		WinMove("EVE","",0,0)
		Global $WinPos = WinGetPos("EVE")
		LoginOrNot()
	EndFunc
	
	Func LoginOrNot()
		$unknow = 0
		Do 
			If _ImageSearchArea("connect.bmp", 1, $WinPos[0], $WinPos[1], $WinPos[2], $WinPos[3], $xok, $yok, 10) Then			
				ToolTip("Логина нет", 0,0) 
				ButtonScan()
				Sleep(300)
				MouseClick("left", 548, 705, 1, 20)
				Sleep(300)
				Send("^a", 0)
				Sleep(300)
				Send("наша_лопатко")
				Sleep(300)
				MouseClick("left", 558, 730, 1, 20)
				Sleep(300)
				Send("^a", 0)
				Sleep(300)
				Send("парольчег")
				Sleep(300)
				MouseClick("left", 511, 753, 1, 20)
				Sleep(10000)
			Else
				$unknow = 1
				ToolTip("Логин есть", 0,0) 
				Sleep(3000)
				ButtonScan()
				Sleep(3000)
				ButtonScan()
			EndIf
		Until $unknow = 1
	EndFunc
	
	Func ButtonScan() ; Ищет кнопку и нажимает её
		If _ImageSearchArea("ok.bmp", 1, $WinPos[0], $WinPos[1], $WinPos[2], $WinPos[3], $xok, $yok, 10) Then
			ToolTip("Обнаружена кнопка Ок", $WinPos[0],$WinPos[1])
			Sleep(Random(300,900))
			MouseClick("left",$xok,$yok,1)
		EndIf
		If _ImageSearchArea("okshutt.bmp", 1, $WinPos[0], $WinPos[1], $WinPos[2], $WinPos[3], $xok, $yok, 10) Then
			ToolTip("Shutdown грядёт :)", $WinPos[0],$WinPos[1])
			Sleep(Random(300,900))
			MouseClick("left",$xok,$yok,1)
		EndIf
		If _ImageSearchArea("oktrial.bmp", 1, $WinPos[0], $WinPos[1], $WinPos[2], $WinPos[3], $xok, $yok, 10) Then
			ToolTip("Всё ещё триал?", $WinPos[0],$WinPos[1])
			Sleep(Random(300,900))
			MouseClick("left",$xok,$yok,1)
			Sleep(6000)
		EndIf
		If _ImageSearchArea("enter.bmp", 1, $WinPos[0], $WinPos[1], $WinPos[2], $WinPos[3], $xok, $yok, 10) Then
			ToolTip("Энтэр зи гейм :)", $WinPos[0],$WinPos[1])
			Sleep(Random(300,900))
			MouseClick("left",$xok,$yok,1)
		EndIf
	EndFunc


она правда на основе всеми нелюбимого имаджсёрча, но хз, у меня как то работает :smile:
 
Автор
Belfigor

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Автологин

В данный момент мы потихоньку решаем проблему с имадж серчем и думаем над алгоритмом который позволит миновать имадж серч но все равно будет позволять сравнивать изображения друг с другом, мб выложим :smile:
 

demon_m

Новичок
Сообщения
15
Репутация
0
Re: Автологин

Респект Модератору!
Поправить нуна в коде:
в первой строке инклюдина потерялась
в предзапусковом слипе $time*1000, а то больно быстро)))
Проект супер!
С уважением...
 
Автор
Belfigor

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Автологин

Автологин выложенный тут - не наш, это с еве-ру кто-то писал, так что то что там должно быть в инклудах - остаеться только догадываться. Теоретически предполагаю что это <GUIConstantsEx.au3>
 

demon_m

Новичок
Сообщения
15
Репутация
0
Re: Автологин

а где взять имаджсерч? у меня в инклюд-папке его нет(, хочется скрипт посмотреть
 
Автор
Belfigor

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Автологин

Вот, создал отдельную тему в общем ботоводческом разделе. Думаю уместно продолжить обсуждение и обмен опытом в той теме ;)
http://autoit-script.ru/index.php/topic,175.0.html
 

Jonik Silver

Знающий
Сообщения
19
Репутация
11
Re: Автологин

Попробовал сделать по автологину нечто свое и пришел к следующим результатам:
При загрузке игра для начала, некоторое время демонстрирует логотип текущего экспаншена, а затем собственно само окно. Само окно тоже появляется не сразу, и некоторое время имеет "радикально черный цвет". Называется окно во время процесса запуска одинаково, но во время демонстрации ллоготипа и показа собственно самого окна, имеет разные размеры. Так же оказалось что кнопка "коннект" может иметь разную контрольную сумму пикселей, но в готовом к употреблении состоянии имеет белую рамку. Проверялись эти факты вот такой конструкцией:
Код:
WinActivate("EVE")
$size = wingetclientsize("EVE")
$EVE = WinGetHandle("EVE")
ConsoleWrite($size[0] & " x " & $size[1] & @CRLF)
ConsoleWrite(PixelChecksum($Button1[0],$Button1[1], $Button2[0],$Button2[1]) & @CRLF)
ConsoleWrite(PixelGetColor($Border[0],$Border[1], $EVE) & @CRLF)
ConsoleWrite($EVE & @CRLF)

Размер лого получился равен 720 x 460 пикселей. Контрольная сумма бралась по прямоугольнику с кнопкой внутри (на прилагаемом рисунке прямоугольник 3). Во время показа лого и загрузки окна, эта контрольная сумма у меня получилась равной:
Код:
Const $ConnectChs = 495452161

Поэтому, когда выполняется условие:
Код:
($size[0] = $FullWindowSize[0]) And (PixelGetColor($Border[0],$Border[1], $EVE) = 0xffffff) And Not(PixelChecksum($Button1[0],$Button1[1], $Button2[0],$Button2[1]) = $ConnectChs)

То можно считать, что окно EVE прогрузилось полностью и можно логиниться. Логин проходит соответственно дабл-кликами и вводом нужного (в позиции 1 и 2 на рисунке). Дабл-клик делается для того, чтобы выделить текст в поле, если таковой там окажется, чтобы ввод из скрипта это затер.
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Re: Автологин

Всё несколько проще.
Алгоритм примерно следующий.
Запускаем клиент, ждём пока появится окно евы.
Код:
if WinActive("EVE") then
   $WinPos=WinGetPos("EVE")
   if $WinPos[2]>1000 then
       ; окно евы загружено и развёрнуто.
   endif
endif


Хотя до ввода я тоже проверяю наличие кнопки, просто по наличию четырёх ярко-белых точек, по одной на каждой стороне кнопки.
 

Jonik Silver

Знающий
Сообщения
19
Репутация
11
Re: Автологин

Конечно, достаточно и двух проверок на размер окна, и цвет бордюра кнопки. Для проверки на белый цвет, впрочем достаточно и одной точки.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Re: Автологин

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Как правильно называть темы

[Автологин] это неприемлемое название темы, переименуйте тему иначе она будет закрыта.

С уважением, Администратор форума.
 

luhta

Новичок
Сообщения
8
Репутация
0
Использование: EveLauncher.exe <имя_чара_без_пробелов>
так и непонял как прописать имя чара есле в ехе после писать имя чара меняетса разширение файла
чуствую что я явно нето далаю
 

snaugrim

Новичок
Сообщения
16
Репутация
1
luhta сказал(а):
Использование: EveLauncher.exe <имя_чара_без_пробелов>
так и непонял как прописать имя чара есле в ехе после писать имя чара меняетса разширение файла
чуствую что я явно нето далаю

В командной строке пишете, а сам файл переименовывать не надо. Также можно создать ярлык к файлу, в свойствах которого и прописать имя чара после самого EXEшника.
 

luhta

Новичок
Сообщения
8
Репутация
0
В свойствах ярлыка прописал имя чара но серовно после запуска выдает сначала что первая строчка иналаудер ошибка удаляеш ее выдает запустите программу с указанием имени чара винда стоит 7 может она что виновата
свойства ярлыка-ярлык-обект C:\EVE\eve.exe 111
 

snaugrim

Новичок
Сообщения
16
Репутация
1
luhta сказал(а):
В свойствах ярлыка прописал имя чара но серовно после запуска выдает сначала что первая строчка иналаудер ошибка удаляеш ее выдает запустите программу с указанием имени чара винда стоит 7 может она что виновата
свойства ярлыка-ярлык-обект C:\EVE\eve.exe 111

Вам нужно скомпилировать предоставленную чуть выше программу и использовать её для запуска евы. Должно получиться нечто вроде C:\EVE\EveLauncher.exe 111
 
Верх