Что нового

АвтоРелогин

Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Ну собственно у меня вот так сейчас проверяется... (проще некуда :smile:)

Код:
Func StatusKlienta() 
	WinGetPos("EVE") 
		If @error Then 
		Return 1 ; Дисконект
	Else 
		Return 0 ; Клиент онлайн
	EndIf
EndFunc


P.S.
Не хотел сразу код выкладывать... (просто намекнул на что можно обратить внимание)
Так как народ почему-то не очень охотно кодом делится... :(
Если бы не вы господин Belfigor то проект EVE Deve по моему давно бы себя изжил...

Я думаю так же не сложно заметить и такую простую вещь, что русскоговорящее комьюнити достаточно ленивое, "проще скачать или просить и выпрашивать чем сделать самому". Все маломальски интересные проекты затронутой ниже тематики, рождаются в 99.99% случаев за пределами рунета на буржуйских бордах, в этих проектах наблюдается минимальное, а зачастую и полное отсутствие участия со стороны русских разработчиков. Идет тотальное вырождение адекватных игроков и тем более девелоперов среди русскоговорящего играющего в ммо, населения страны. Достаточно легко заметить что разработка чего-либо на русских форумах, либо продвигается с минимальными темпами либо и вовсе отсутствует.

P.P.S.
Кстати во время размышлений как организовать Релогин я решил не изобретать велосипед...
Ведь люди уже давно придумали Демонов :whistle:


Добавлено:
Сообщение автоматически объединено:

И сразу вопросик.

Как запустить
Код:
RunWait("имя файла.au3")
скомпилированный ехе запускается а, скрипт не получается.
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
McSkull - у тебя поразительная способность не читать внимательно что пишут и перескакивать не вдаваясь в подробности.
Если глянешь внимательно в мой вопрос то там очень четко сформулирован вопрос. Попробуй повнимательнее вчитаться и подумай в чем ты не правильно ответил.
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
DJ_Tommy сказал(а):
McSkull - у тебя поразительная способность не читать внимательно что пишут и перескакивать не вдаваясь в подробности.
Если глянешь внимательно в мой вопрос то там очень четко сформулирован вопрос. Попробуй повнимательнее вчитаться и подумай в чем ты не правильно ответил.
Не пойму, что я не так написал?
Вы спросили:
Код:
А по каким параметрам отслеживать состояние дисконекта в полно экранном режиме?

Я ответил, что можно отслеживать перезагрузку клиента.
Когда происходит дисконект клиент перезагружается => окна EvE какое-то время нет.

Скрипт выложенный мною как раз и отслеживает этот момент. (собственно ему без разницы полно экранный режим или оконный...)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
McSkull сказал(а):
Как запустить
Код:
RunWait("имя файла.au3")
скомпилированный ехе запускается а, скрипт не получается.
Run распространяется только на EXE, BAT, COM и PIF.
P.S. Поверь по мимо меня тут есть еще Арчибальд и Лекс, которые вносят не меньший вклад, просто на форуме не часто появляются
5.gif
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Belfigor сказал(а):
Run распространяется только на EXE, BAT, COM и PIF.
Я где-то читал, что есть команда которая позволяет открыть приложения той программой которая используется Виндой по умолчанию...
Только не могу найти где я это читал. :(

P.S.
Сейчас я компилю скрипт бота в ехе файл и его перезапускает демон который отслеживает состояние клиента...
Но когда, что-то меняю в скрипте бота приходится снова перекомпиливать.
Запускать скрипт, а не ехе-файл из другого скрипта было бы удобнее... :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну в принципе да, я этим как-то не интерисовался, спроси в разделе для новичков, там сидит Кастер, он думаю должен знать ответ :smile:
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Нашел решение
Код:
RunWait(@COMSPEC & " /c Start myfile.msi")
кажись работает. :smile:

Пробовал
Код:
ShellExecuteWait

Но он почему-то открывает скрипт для редактирования... Хотя двойной клик мышью на файле запускает скрипт.
Существует лишь несколько запускных типов файлов, как правило, это EXE, BAT, COM, PIF.
Другие типы файлов, такие как TXT, MSI выполняются при помощи сторойнней программы.
Например, при двойном щелчке на “MyFile.msi” в фоновом режиме выполняется команда “msiexec.exe myfile.msi”.
Потому для запуска MSI файлов из AutoIt, вы можете использовать следующий код:
RunWait ( "Msiexec myfile.msi")
или использовать команду «Start», которая автоматически «поймёт» как запустить файл
RunWait(@COMSPEC & " /c Start myfile.msi")
или же воспользоваться функцией ShellExecuteWait которая запустит файл, так же, как если бы вы дважды щёлкнули по нему мышкой:
ShellExecuteWait("myfile.msi")
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
А так?
Код:
$Path_To_AutoIt = "C:\Program Files\AutoIt3\Autoit3.exe"
Run($Path_To_AutoIt & " " & @ScriptFullPath)
 

usrman

Новичок
Сообщения
13
Репутация
0
Belfigor сказал(а):
Хотя бы по тем, что в не подключенном к серверу клиенте не действуют настройки темы и widescreen. Хотя я не знаю точно но я уверен что у неподключенного клиента объем трафика отправляемого на сервер в разы меньше чем у подключенного.
Belf подскажи пожалуйста, каким образом можно получить этот самый объем трафика отправляемого на сервер.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
ну... замерить каким-нибудь трафик менеджером :smile:
 

bober

Новичок
Сообщения
13
Репутация
2
Код:
Func ActivirovatEVE()
;~ 	writelog("Начато выполнение функции ActivirovatEVE()")
	If ProcessExists("DWWIN.exe") Then
		$PID = ProcessExists("DWWIN.exe")
		ProcessClose($PID)
		Sleep(3000)
	EndIf
	If ProcessExists("ExeFile.exe") Then
		If WinExists("EVE") Then
			If Not WinActive("EVE") Then
				WinActivate("EVE")
				Sleep(1000)
				If Not WinActive("EVE") Then
					WinActivate("EVE")
				EndIf
			EndIf
;~ 			WinWaitActive("EVE", "", 1000)
			WinWaitActive("EVE")
		EndIf
	EndIf
;~ 	writelog("Конец выполнение функции ActivirovatEVE()")
EndFunc   ;==>ActivirovatEVE

Func proverkavstatusaclienta()
;~ 	writelog("*******  Начато выполнение функции proverkavstatusaclienta")
	$kill = 0
	ActivirovatEVE()
;~ 	writelog("начало выполнения проверки")
	If ProcessExists("ExeFile.exe") Then
;~ 		$statusprogrammi = 1
		alertwindow()
		If WinExists("EVE") Then
			$WinPos = WinGetPos("EVE")
;~ 			If $WinPos[0] > 0 Or ButtonLocator(123, 18, $ButPos, $xbutonpodkluchenia,$Ybutonpodkluchenia, 150, 25)=1 Then
			If $WinPos[0] > 0 Then
				$statusclienta = 0
;~ 				alertwindow()
				$PID = ProcessExists("ExeFile.exe")
				ProcessClose($PID)
				$file = FileOpen("istoria.txt", 1)
				FileWriteLine($file, "" & @MDAY & "." & @MON & "." & @YEAR & " - " & @HOUR & ":" & @MIN & ":" & @SEC & " Клиент отвалился!1" & @CRLF)
				FileClose($file)
			Else
				If ButtonLocator(123, 18, $ButPos, $xbutonpodkluchenia,$Ybutonpodkluchenia, 150, 25)=1 Then
					$statusclienta = 0
				Else
					$statusclienta = 1
				EndIf
			EndIf
		Else
			Sleep(60000)
			If WinExists("EVE") Then
				$WinPos = WinGetPos("EVE")
				alertwindow()
				If $WinPos[0] > 0  Then
					$statusclienta = 0
;~ 					$PID = ProcessExists("ExeFile.exe")
;~ 					ProcessClose($PID)
					$file = FileOpen("istoria.txt", 1)
					FileWriteLine($file, "" & @MDAY & "." & @MON & "." & @YEAR & " - " & @HOUR & ":" & @MIN & ":" & @SEC & " Клиент отвалился!2" & @CRLF)
					FileClose($file)
				Else
					If ButtonLocator(123, 18, $ButPos, $xbutonpodkluchenia,$Ybutonpodkluchenia, 150, 25)=1 Then
						$statusclienta = 0
					Else
						$statusclienta = 1
					EndIf
				EndIf
			Else
;~ 				$PID = ProcessExists("ExeFile.exe")
;~ 				ProcessClose($PID)
				$statusclienta = 0
				$statusprogrammi = 0
				$kill = 1
			EndIf
		EndIf
;~ 		If $kill = 0 Then $statusprogrammi = 1
	Else
		$statusprogrammi = 0
		$statusclienta = 0
		$file = FileOpen("istoria.txt", 1)
		FileWriteLine($file, "" & @MDAY & "." & @MON & "." & @YEAR & " - " & @HOUR & ":" & @MIN & ":" & @SEC & " Рухнула программа - ExeFile.exe не найден" & @CRLF)
		FileClose($file)
	EndIf
;~ 	writelog("Статус клиента="&$statusclienta)
;~ 	writelog("*******  Конец выполнение функции proverkavstatusaclienta")
EndFunc   ;==>proverkavstatusaclienta
 

usrman

Новичок
Сообщения
13
Репутация
0
Не плохая попытка, но что если клиент не один?
 

AllWay

Знающий
Сообщения
16
Репутация
9
Вот еще один вариант.
Цель : Определить "отвалился" клиент или нет.
Решение: Пингуем сервер (Пуск => Выполнить => ping 87.237.38.200 -t -l 1200)
Окно перемещается в верхний правый угол монитора (разрешение должно быть выше 1024х768) так чтобы был виден правый край за основным клиентом Евы
ping1r.jpg

Чтобы область поиска не сбивалась, в свойствах окна (ПКМ по шапке => Свойства) задаем нужную позицию (окно будет открываться с указанным размером и в указанных координатах)
ping3v.jpg

Скрипт запускается параллельно с основным и мониторит с интервалом 1 сек. в выделенной красным области наличие светлых пикселей (PixelSearch( , , , , 0xC0C0C0, 1))
При обрыве коннекта, в этой области (см."Подробнее")
ping2n.jpg
PixelSearch не найдет пикселов (появление 3-4 строчек с пустым полем достаточно для уверенности, что клиент 100% - "отвалился") и...
В моем случае, алгоритм останавливал выполнение основного скрипта, закрывал клиент и переходил в режим ожидания (появления пикселов в выделенной области). Если он их находил, то запускал скрипт LogIn.
PS
Этот метод можно использовать и при определении окончания ДТ
Если: сервер "пингуется" - запускаем клиент.
Если: в выделенной области (см."Подробнее") нет светлых пикселей надписи "Сервер не принимает соединения", - LogIn.
Иначе: ждем 5 минут и повторяем попытку.
ping4.jpg
 

Jonik Silver

Знающий
Сообщения
19
Репутация
11
AllWay сказал(а):
Вот еще один вариант.
Цель : Определить "отвалился" клиент или нет.
Решение: Пингуем сервер (Пуск => Выполнить => ping 87.237.38.200 -t -l 1200)
Окно перемещается в верхний правый угол монитора (разрешение должно быть выше 1024х768) так чтобы был виден правый край за основным клиентом Евы
...
Чтобы область поиска не сбивалась, в свойствах окна (ПКМ по шапке => Свойства) задаем нужную позицию (окно будет открываться с указанным размером и в указанных координатах)
А чем плоха функция Ping?
Код:
$var = Ping("87.237.38.200",250)


Кроме того наверняка есть методы определения готовности сервера к коннекту, которыми пользуются сайты, например Еве-ру, или проги вроде Евемоон.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Есть, апи запросы называются :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
$test = _EVERetrieveXML("/char/SkillInTraining.xml.aspx","pkaI6n3pptNagKHy5MwzNreDlSXC6LdkIQl7iHaFEJ4mRsYsa37PZXpRhbGx8iES","1746254")
ConsoleWrite(String($test))
;pkaI6n3pptNagKHy5MwzNreDlSXC6LdkIQl7iHaFEJ4mRsYsa37PZXpRhbGx8iES
;1746254
Func _EVERetrieveXML($path, $apikey = "", $userid = "", $charid = "")
    ConsoleWrite("Creating variables"&@CRLF)
    ; Dim variables.
    Dim $poststring
    Dim $apisite = "api.eve-online.com"
    Dim $csock
    Dim $contents
    
    ConsoleWrite("Constructing post string"&@CRLF)
    ; Constructs Post string.
    If $apikey = Not "" AND $userid = Not "" Then
        $poststring = "userID="&$userid&"&apiKey="&$apikey
        If $charid = Not "" Then
            $poststring &= "&characterID="&$charid
        EndIf
    Else
        $poststring = ""
    EndIf
;~     MsgBox(0,"","")
    ConsoleWrite("Poststing created:"&$poststring&@CRLF)
    
    ConsoleWrite("Opening socket to eve api site"&@CRLF)
    ; Open up socket to api site.
    TCPStartup()
    $csock = TCPConnect(TCPNameToIP($apisite), 80)
    If $csock = -1 Then 
        MsgBox(0,"","-")
        Exit
    EndIf
    MsgBox(0,"","+")
        
    
    ConsoleWrite("Requesting XML page"&@CRLF)
    ; Request XML.
    TCPSend($csock, "POST" & $path & "HTTP/1.0\r\n")
    TCPSend($csock, "Host: " & $apisite & "\r\n")
    TCPSend($csock, "Content-Type: application/x-www-form-urlencoded\r\n")
    TCPSend($csock, "User-Agent: AutoItEveApi\r\n")
    TCPSend($csock, "Content-Length: " & StringLen($poststring) & "\r\n")
    TCPSend($csock, "Connection: close\r\n\r\n")
    If $poststring <> "" Then
        TCPSend($csock, $poststring & "\r\n")
        ConsoleWrite("Poststring send"&@CRLF)
    EndIf
    
    ConsoleWrite("Retrieving contents"&@CRLF)
    ; Retrieve contents.
    While 1
        $contents &= TCPRecv($csock, 2048)
        If @error Then ExitLoop
    WEnd
    ConsoleWrite("Contents recieved"&@CRLF) 
    If $csock <> -1 Then TCPCloseSocket($csock)
    ConsoleWrite("Socket closed"&@CRLF)
    TCPShutdown()
    ConsoleWrite("TCPconnection shut down"&@CRLF)
    
    Return $contents
EndFunc

Под какую-то древнюю верисю апи, с тех пор структура апи изменялась неоднократно. Не помню как этот пример ко мне попал, сам я с апи не работаю.
 

Jonik Silver

Знающий
Сообщения
19
Репутация
11
Belfigor сказал(а):
Под какую-то древнюю верисю апи...
Спасибо, после некоторых танцев с бубнами, взлетело.
Спрашиваем:
Код:
$test = _EVERetrieveXML("/server/ServerStatus.xml.aspx")

Получаем в ответ:
HTTP/1.1 200 OK
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: application/xml; charset=utf-8
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 23 Aug 2010 07:56:08 GMT
Connection: close

111
<?xml version='1.0' encoding='UTF-8'?>
<eveapi version="2">
<currentTime>2010-08-23 07:56:09</currentTime>
<result>
<serverOpen>True</serverOpen>
<onlinePlayers>23133</onlinePlayers>
</result>
<cachedUntil>2010-08-23 07:59:09</cachedUntil>
</eveapi>
0
Для тех кто заинтересуется ссылка по АПИ http://wiki.eve-id.net/APIv2_Page_Index
И по запросам ХТТП http://ru.wikipedia.org/wiki/HTTP
 

Belfigor

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

Akenil

Новичок
Сообщения
9
Репутация
0
при частых запроса сервера на онлайн, скорее всего такие боты будут банить, т.к. перегружают сервер ненужными запросами.

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

Тишина - друг ботовода.
 
Верх