SurikenTSD
Новичок
- Сообщения
- 67
- Репутация
- 1
Снова я!.. :stars:
Перед вами 3 куска моего скрипта. Все работает хорошо. НО! Такое жирное, толстое НО.
Обратил внимание, что функции MouseClick \ MouseMove вводят скрипт в ступор, не могут выполниться в том случае, если во время нажатия на кнопку Автобаф в GUI моего скрипта и на момент начала выполнения функции AutoBuff вплоть до перехода первой строчке, использующей функцию MouseMove\MouseClick, мышка находится за пределами окна, в котором скрипт должен работать.
Как это себя проявляет: для начала скажу, что скрипт работает с браузерным окном. Яркий пример: если браузер свернуть в окно и растянуть на половину (левую) экрана, а в правой развернуть окошко с GUI и нажать на кнопку автобаф (тут окно с GUI сворачивается и активируется окно браузера), то изначально позиция мышки будет находиться вне окна браузера на момент начала работы. Скрипт доходит до первой строчки, в которой есть функция MouseClick\Move (пробовал с обоими вариантами) и скрипт зависает на глухо до тех пор, пока я не сделаю своими руками "драг анд дроп" (передвину часть флеш объекта в браузере). Затем все идет нормально.
Дополнительно: сейчас тестировал подобно тому, как описывал выше. Если запускать из SciTE - такой глюк редко появляется. Если запускать скомпилированную версию скрипта, то такой глюк возникает наиболее часто. В последние несколько раз он даже не зависел от того, находится ли мышка над окном браузера момент начала скрипта или нет.
Так же у тестера подобный глюк встречался. Я ему когда в первый раз дал скрипт (он даже был тогда раза 2 короче и меньше функций использовалось в нем), он у него сразу не работал, он его так же "реанимировал" драг энд дроп действием. Потом он сделал то, сам не знает что, с тех пор он не жаловался на данный глюк.
Кто-нибудь подобные моменты замечал? Есть возможность с ними бороться? Может быть что-то следует поменять в принципе написания скрипта для сведения к минимуму подобных глюков?
Код:
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)
Код:
Func AutoBuff()
While Not $STOP
Local $year = IniRead($BuffListPath, "Last Buff Time", "Year", 00001)
Local $month = IniRead($BuffListPath, "Last Buff Time", "Month", 00001)
Local $day = IniRead($BuffListPath, "Last Buff Time", "Day", 00001)
Local $hour = IniRead($BuffListPath, "Last Buff Time", "Hour", 00001)
Local $min = IniRead($BuffListPath, "Last Buff Time", "Min", 00001)
Local $nodate = False
Local $iDiff
If $year = 00001 or $month = 00001 or $day = 00001 or $hour = 00001 or $min = 00001 Then
$nodate = True
EndIf
$sOldDate = StringFormat('%s/%s/%s %s:%s:00', $year, $month, $day, $hour, $min)
$iDiff = _DateDiff('n', $sOldDate, _NowCalc())
Select
Case $iDiff > 360 Or $nodate = True
WinActivate($GameWindowName)
If WinActivate ($GameWindowName) Then
$S = 1
While $S <= 9 And Not $STOP
$spotscrd = IniReadSection($BuffListPath, "Sector "&$S)
If Not @error Then
Send ($S)
Sleep (1000)
Local $i = 1
$cnt = 0
While $cnt < $spotscrd[0][0] / 2 And Not $STOP
CheckBuff()
Switch $checkbuff
Case False
UseBasketBuff()
Case True
If Not $STOP Then
MouseClick( "left", $spotscrd[$i][1], $spotscrd[$i+1][1], 1, $MouseSpeed)
$i = $i + 2
$cnt = $cnt + 1
Sleep (2500)
EndIf
EndSwitch
WEnd
EndIf
$S = $S + 1
If $S = 10 Then
LastBuff()
EndIf
WEnd
Else
MsgBox(0, $err, $gwnf)
EndIf
Case Else
While $iDiff < 360 and Not $STOP
Sleep(200)
$iDiff = _DateDiff('n', $sOldDate, _NowCalc())
WEnd
EndSelect
WEnd
EndFunc
Код:
Func UseBasketBuff()
Local $i = 0
Local $buff
Local $x = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu X", 00001)
Local $y = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu Y", 00001)
Local $x2 = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu Effects X", 00001)
Local $y2 = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu Effects Y", 00001)
Local $smbx1 = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu Box Left Corner X", 00001)
Local $smby1 = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu Box Left Corner Y", 00001)
Local $smbx2 = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu Box Right Corner X", 00001)
Local $smby2 = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu Box Right Corner Y", 00001)
Local $x3 = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu Arrow Down X", 00001)
Local $y3 = IniRead($GameInfoIniPath, "Coordinates of Objects", "Star Menu Arrow Down Y", 00001)
If $x = 00001 Or $y = 00001 Or $x2 = 00001 Or $y2 = 00001 Or $smbx1 = 00001 Or $smby1 = 00001 Or $smbx2 = 00001 Or $smby2 = 00001 or $x3 = 00001 or $y3 = 00001 Then
MsgBox(0, $err, $crgi)
_Stop()
Else
If Not $STOP Then
MouseClick("left", $x, $y, 1, $MouseSpeed)
Sleep (250)
MouseClick("left", $x2, $y2, 1, $MouseSpeed)
Sleep (250)
EndIf
Do
Local $buffcrd = ImgSearch($smbx1, $smby1, $smbx2, $smby2, 0x8DA02A, 1, 3)
If @error and Not $STOP Then
$buff = False
MouseClick("left", $x3, $y3, 1, $MouseSpeed)
Sleep (250)
Else
If Not $STOP Then
$buff = True
MouseClick("left", $buffcrd[0], $buffcrd[1], 1, $MouseSpeed)
Sleep (1000)
EndIf
EndIf
$i = $i + 1
Until $i >= 15 Or $buff = True Or $STOP = True
If $Stop = True Then
$buff = True
EndIf
If $buff = False Then
MsgBox(0, $err, $nobuff)
_Stop()
EndIf
EndIf
Перед вами 3 куска моего скрипта. Все работает хорошо. НО! Такое жирное, толстое НО.
Обратил внимание, что функции MouseClick \ MouseMove вводят скрипт в ступор, не могут выполниться в том случае, если во время нажатия на кнопку Автобаф в GUI моего скрипта и на момент начала выполнения функции AutoBuff вплоть до перехода первой строчке, использующей функцию MouseMove\MouseClick, мышка находится за пределами окна, в котором скрипт должен работать.
Как это себя проявляет: для начала скажу, что скрипт работает с браузерным окном. Яркий пример: если браузер свернуть в окно и растянуть на половину (левую) экрана, а в правой развернуть окошко с GUI и нажать на кнопку автобаф (тут окно с GUI сворачивается и активируется окно браузера), то изначально позиция мышки будет находиться вне окна браузера на момент начала работы. Скрипт доходит до первой строчки, в которой есть функция MouseClick\Move (пробовал с обоими вариантами) и скрипт зависает на глухо до тех пор, пока я не сделаю своими руками "драг анд дроп" (передвину часть флеш объекта в браузере). Затем все идет нормально.
Дополнительно: сейчас тестировал подобно тому, как описывал выше. Если запускать из SciTE - такой глюк редко появляется. Если запускать скомпилированную версию скрипта, то такой глюк возникает наиболее часто. В последние несколько раз он даже не зависел от того, находится ли мышка над окном браузера момент начала скрипта или нет.
Так же у тестера подобный глюк встречался. Я ему когда в первый раз дал скрипт (он даже был тогда раза 2 короче и меньше функций использовалось в нем), он у него сразу не работал, он его так же "реанимировал" драг энд дроп действием. Потом он сделал то, сам не знает что, с тех пор он не жаловался на данный глюк.
Кто-нибудь подобные моменты замечал? Есть возможность с ними бороться? Может быть что-то следует поменять в принципе написания скрипта для сведения к минимуму подобных глюков?