Что нового

АвтоРелогин

McSkull

Знающий
Сообщения
66
Репутация
6
Частенько выбивает клиент...
Может кто-то подтолкнет на мысль как научить Бота отслеживать то, что клиент сделал логаут и нужно начать процедуру Автологина?
 

Kinex

Новичок
Сообщения
19
Репутация
2
Ну если ева работает в оконном режиме, то при вылете меняется местоположение окна на стандартное по центру. На данный момент у меня отслеживает так, либо релогинится при нескольких последовательных завершениях функции с еррорлевелом, отличным от нуля, тк бывают просто зависы без релогина. Несовершенство подобного решения понимаю, но ничего более элегантного в голову пока не пришло. Сам давно хотел поднять такую тему на форуме, может кто еще поделится своей реализацией или идеями на эту тему... :beer:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Дисконнекты отсутствуют как вид в принципе поэтому каких-то убер решений предложить не могу. А так в принципе достаточно просто. Заметили что интерфейс не соответствует тому который должен быть в текущий момент действия бота, попытались привести интерфейс в должный вид, не получилось - значит либо клиент повис либо дисконнект, так же у дискнутого окна есть туева хуча отличий от залогиненного по которым легко распознать что клиент выпал. Ну на крайняк просто следить за коннектом. А так в принципе веселых и смешных способов борьбы с дисконнектами можно напридумывать целый вагон
22.gif
.
Самый же актуальный на мой взгляд способ - проверять коннект.
 

Kinex

Новичок
Сообщения
19
Репутация
2
Ну где-то так и получается, если функция не нашла обратную связь от интерфейса, она релогинит клиент и идет по-новой. Попробую еще что-нибудь для проверки коннекта написать.
 
Автор
M

McSkull

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

hikki

Продвинутый
Сообщения
233
Репутация
99
Код:
$WinPos = WinGetPos("EVE - ")

в массиве $WinPos будут координаты окна
можно вызывать время от времени проверку этих цифирей и если они поменяются то начать логинится снова
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Негде ошибки не допустил?

Код:
Global $WinPos = WinGetPos("EVE") ;Получить Х и Y координаты левого верхнего угла окна EVE и записать их в переменные $WinPos[0] и $WinPos[1] соответственно

Func StatusKlienta() ; Проверяем находится ли координата окна Х в точке 0
		If $WinPos[0] = 0 Then ; Если координата окна Х=0 то клиент онлайн
		ToolTip("Онлайн", 440, 160)
	Else ; иначе слип на 15 сек. и запустить функцию Релогин.
		Sleep(15000)
		Relogin()
	EndIf
EndFunc


И еще такой вопросик.
Вот так сбоя не будет?

Код:
;-------------------Проверка входа в Док------------------

Func DokTest()
		$i = 0
    Do
        StatusKlienta() ; ИЛИ ТАК НЕ ПОЛУЧИТСЯ ВЫЙТИ ИЗ ЦИКЛА?
		Sleep(1000)
		PixelSearch($DokButonX, $DokButonY, $DokButonX+1, $DokButonY+1, 0xFFDB42, 10 )
        If NOT @error Then
        $i = 1
        EndIf
    Until $i = 1
    ToolTip("Стыковка завершена", 440, 160)
    Sleep(4000)
EndFunc
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Код:
Func StatusKlienta() ; Проверяем находится ли окно в координатах 0,0
	Global $WinPos = WinGetPos("EVE") ;Получить Х и Y координаты левого верхнего угла окна EVE и записать их в переменные $WinPos[0] и $WinPos[1] соответственно
		If $WinPos[0] = 0 Then 
		Return 1 ; Клиент онлайн
	Else 
		Return 0 ; Был дисконект
	EndIf
EndFunc

Вопрос остается открытым...
Если окно переместить то все работает... А когда при вылете оно исчезает и появляется снова почему то не работает... :(

Может есть что-то поинтересней чем
Код:
WinGetPos
для моих нужд?
Какой командой можно сразу положение окна по двум координатам Х и Y проверять?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
WinGetPos возвращает сразу же и X и Y в 0 и 1 индексы массива.
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Belfigor сказал(а):
WinGetPos возвращает сразу же и X и Y в 0 и 1 индексы массива.
То есть вот такая функция будет верной?

Код:
Func StatusKlienta()
        If WinGetPos("EVE") = (0,0) Then  ; Если верхний левый угол окна находится в координатах 0,0
        Return 1 ; Клиент онлайн
    Else
        Return 0 ; Был дисконект
    EndIf
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Нет, прежде чем использовать WinGetPos тебе нужно приравнять его к какой-то переменной, по успешному выполнению команды переменная будет конвертирована в массив где в 0 индексе будет значение X а в 1 индексе будет значение Y. Твой вариант не взлетит никогда.
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Вроде заработало. :smile:

Но почему то иногда выдает ошибку ругаясь на строку Sleep(500).

Функция у меня выполняется каждые 0,5 секунды с задержкой в самой функции Sleep(500) вот на этом слипе и вылетает ошибка... Почему так происходит?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
У меня такого небыло. Мб у тебя мощности железа не хватает для выполнения такой функции раз в секунду о_О
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
Кстати, вспомнил, а по каким параметрам отслеживать состояние дисконекта в полноэкранном режиме?
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
DJ_Tommy сказал(а):
Кстати, вспомнил, а по каким параметрам отслеживать состояние дисконекта в полноэкранном режиме?
При дисконекте клиент перезагружается... ;)
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
McSkull сказал(а):
DJ_Tommy сказал(а):
Кстати, вспомнил, а по каким параметрам отслеживать состояние дисконекта в полноэкранном режиме?
При дисконекте клиент перезагружается... ;)
Да что ты говоришь ..... а мы то и не знали ...
Я вообще то спрашивал по каким параметрам отслеживать ....
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Хотя бы по тем, что в не подключенном к серверу клиенте не действуют настройки темы и widescreen. Хотя я не знаю точно но я уверен что у неподключенного клиента объем трафика отправляемого на сервер в разы меньше чем у подключенного.
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
DJ_Tommy сказал(а):
Да что ты говоришь ..... а мы то и не знали ...
Я вообще то спрашивал по каким параметрам отслеживать ....
Ну я же сказал... :smile:

Читаем описание
Код:
WinGetPos


Failure: Returns 0 and sets @error to 1 if windows is not found.

Когда клиент перезагружается окно EVE закрывается и потом запускается... ;)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
А для того чтобы таких косяков небыло используется макрос @error.
If @error Then
...
If Not @error Then
...

Ты же использовал его в пиксельсерче, почему тут не поюзал? :smile:
 
Верх