Что нового

[Ошибки] Неправильная конструкция if'ов.

Gzzk

Новичок
Сообщения
104
Репутация
1
Исходник:
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=D:\icon.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Include <WinAPIEx.au3>
Global $flag=0,$sClsCrd,$sBtnCrd,$sBtnClr,$sLT,$sRL,$sLkClr,$aClsCrd,$ClsCrd, $BtnCrd , $BtnClr , $LT , $RL , $LkClr ,$aClsCrd, $aBtnCrd , $sBtnClr , $aLT , $aRL , $sLkClr ,$i = 0,$Count = 0,$Error= 0,$sSerial = _WinAPI_UniqueHardwareID()
$sUS = "{0787586E-E792-3A20-B7E5-55E2D21F91BE}"
if $sUS = $sSerial then 
	MsgBox(64, "Всё гут..","Всё гут.")
Else
	MsgBox(64, "Атата распространять сей бот.","Хочешь заполучить - skype:ars117")
EndIf
$sIniFile = @ScriptDir & '\conf.ini'
_Load()
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#Region ### START Koda GUI section ###
$Form1_1 = GUICreate("Olike bot by ars117", 301, 190, 189, 112)
$Label1 = GUICtrlCreateLabel("Красный крестик второй вкладки(закрыть):", 8, 8, 228, 17)
$ClsCrd = GUICtrlCreateInput($sClsCrd, 240, 8, 57, 21)
$Label2 = GUICtrlCreateLabel("Координаты голубой кнопки:", 8, 40, 151, 17)
$BtnCrd = GUICtrlCreateInput($sBtnCrd, 160, 40, 49, 21)
$Label3 = GUICtrlCreateLabel("Цвет:", 216, 40, 32, 17)
$BtnClr = GUICtrlCreateInput($sBtnClr, 248, 40, 49, 21)
$Label4 = GUICtrlCreateLabel("Левая верхняя координта:", 8, 72, 139, 17)
$LT = GUICtrlCreateInput($sLT, 160, 72, 49, 21)
$Label5 = GUICtrlCreateLabel("Правая нижняя координата:", 8, 104, 148, 17)
$RL = GUICtrlCreateInput($sRL, 160, 104, 49, 21)
$Label6 = GUICtrlCreateLabel("^Цвет лайка^", 216, 104, 74, 17)
$LkClr = GUICtrlCreateInput($sLkClr, 224, 72, 73, 21)
$Start = GUICtrlCreateButton("Start", 8, 128, 289, 25)
GUICtrlSetFont(-1, 14, 400, 0, "Times New Roman")
GUICtrlSetColor(-1, 0x000000)
$Save = GUICtrlCreateButton("Save", 8, 160, 291, 25)
GUICtrlSetFont(-1, 14, 400, 0, "Times New Roman")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Start
            _Start()  
		Case $Save
			_Convert()
			_Save()

    EndSwitch
WEnd

Func _Start()
_Convert()
HotKeySet('^s', '_Quit')
Sleep(3000)
While 1
    Sleep(10)
    if PixelGetColor($aBtnCrd[0], $aBtnCrd[1])=$sBtnClr then
        MouseClick("left",$aBtnCrd[0], $aBtnCrd[1])
		$i = $i + 1
        like()
    EndIf
WEnd
EndFunc
Func _Quit()
    MsgBox(64, 'Отчет', 'Открыто страниц: ' & $i & @CR & 'Поставлено лайков: ' & $Count & @CR & 'Страницы,где лайки не были поставлены:' & $Error)
    Exit
EndFunc   ;==>_Quit
Func like()
	$q = 0
While 1
		$aCoord = PixelSearch($aLT[0],$aLT[1] ,$aRL[0], $aRL[1], $sLkClr)
			If Not @error Then
				Sleep(25)
				MouseClick("left", $aCoord[0], $aCoord[1])
				if $flag=1 Then
					_Bps()
				Else
					if mod($i,10)=0 Then
					Sleep(1000)
					_Bps()
				EndIf
				EndIf
				MouseClick("left", $aClsCrd[0], $aClsCrd[1])
				Sleep(25)
				MouseMove(686, 477)
				$Count=$Count +1
				ExitLoop
				EndIf
If $q > 60 then 
MouseClick("left", $aClsCrd[0], $aClsCrd[1])
MouseMove(686, 477)
$Error=$Error +1
ExitLoop 
EndIf
 WEnd
 EndFunc
Func _Save()
IniWrite($sIniFile, "", "ClsCrd", $aClsCrd[0] & ", " & $aClsCrd[1])
IniWrite($sIniFile, "", "BtnCrd", $aBtnCrd[0] & ", " & $aBtnCrd[1])
IniWrite($sIniFile, "", "BtnClr", $sBtnClr)
IniWrite($sIniFile, "", "LT", $aLT[0] & ", " & $aLT[1])
IniWrite($sIniFile, "", "RL", $aRL[0] & ", " & $aRL[1])
IniWrite($sIniFile, "", "LkClr", $sLkClr)
EndFunc	
Func _Convert()
	$aCoord ='0,0'
   $sClsCrd = GUICtrlRead($ClsCrd)
   $sBtnCrd = GUICtrlRead($BtnCrd)
   $sBtnClr = GUICtrlRead($BtnClr)
   $sLT = GUICtrlRead($LT)
   $sRL = GUICtrlRead($RL)
   $sLkClr = GUICtrlRead($LkClr) 
$aClsCrd = StringRegExp($sClsCrd, '\b(\d+)\b', 3)
If UBound($aClsCrd) <> 2 Then Exit 13
$aBtnCrd = StringRegExp($sBtnCrd, '\b(\d+)\b', 3)
If UBound($aBtnCrd) <> 2 Then Exit 13
$aLT = StringRegExp($sLT,'\b(\d+)\b', 3)
If UBound($aLT) <> 2 Then Exit 13
$aRL = StringRegExp($sRL,'\b(\d+)\b', 3)
If UBound($aRL) <> 2 Then Exit 13
EndFunc
Func _Load()
$sClscrd=IniRead($sIniFile, "", "ClsCrd","0, 0")
$sBtnCrd=IniRead($sIniFile, "", "BtnCrd","0, 0")
$sBtnClr=IniRead($sIniFile, "", "BtnClr",0)
$sLT=IniRead($sIniFile, "", "LT","0, 0")
$sRL=IniRead($sIniFile, "", "RL","0, 0")
$sLkClr=IniRead($sIniFile, "", "LkClr",0)
EndFunc
Func _Bps()
if Not PixelGetColor(114, 99)=0xFFFFFF Then
$flag=1
Send("{F5}")
like()
EndIf
EndFunc
Проблема в том,что один участок кода никогда не выполняется.
Участок,который не выполняется.
Код:
if $flag=1 Then
					_Bps()
				Else
					if mod($i,10)=0 Then
					Sleep(1000)
					_Bps()
Пробовал ждать,когда пока $i станет равно 10,но всё равно не срабатывало,хотя даже если $i=0 должно.
Помогите!
 

beve

Осваивающий
Сообщения
104
Репутация
31
1. Сначала вы должны проверить, что функция like() у вас в процессе работы скрипта вызывается.
Если вызывается то значит сдесь:
Код:
While 1
	$aCoord = PixelSearch($aLT[0],$aLT[1] ,$aRL[0], $aRL[1], $sLkClr)
	If Not @error Then
	;....

от выполнения функции PixelSearch() всегда у вас возвращается ошибка ( @error=1).

Вы проверте, что хоть когда то заданный вами для поиска пиксель находится правильно (в $aCoord появляются координаты), тогда уже легче будет ответить вам конкретней, а так из вашего описания не совсем ясно, где проблемма.
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Это:
Код:
if $flag=1 Then
                    _Bps()
                Else
                    if mod($i,10)=0 Then
                    Sleep(1000)
                    _Bps()
Должно выполнятся,если выполняется это:
Код:
$aCoord = PixelSearch($aLT[0],$aLT[1] ,$aRL[0], $aRL[1], $sLkClr)
            If Not @error Then
                Sleep(25)
                MouseClick("left", $aCoord[0], $aCoord[1])
Но не выполняется,хотя $flag изначально равен 0.Функция вызывается.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
напишите в стол заказов, может быть кто нибудь исправит ваш "код".
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Для начала задай ключ Opt("MustDeclareVars") и далее от места которое по твоему мнению работает неправильно (чего быть не может в принципе т.к. скрипт не выдает ошибку => ошибка не в скрипте а в твоей логике), начинаю отладку последовательно проверяя чему у тебя равна каждая переменная в определенном куске кода.
P.S. Тебе вообще не стыдно писать на продажу такое корявое дерьмо?
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Пока что это самое быстрое кликерное дерьмо в своей сфере.
По поводу дерьма хочется поподробнее,что именно не так?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Слушай, Gzzk,
ты в 4 сообщениях пишешь "помогите, мой скрипт не работает",
а в 5-ом сообщении спрашиваешь "что вам не так с моим самым-самым скриптом?".
Ты уж определись что же у тебя вышло там.
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Я не говорю,что он самый-самый.Просто мой бот лучше,чем у конкурентов.
Предыдущая версия вполне адекватно работает.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Меня например вымораживает сама возможность писать ботов которые должны опираться на сложную логику, не используя MustDeclareVars, что имеет большой шанс привести к страшным косякам уже у конечных пользователей т.к. баги которые могут закрадываться в момент разработки, так же могут всплыть лишь в далеком будущем. Идентично я отношусь и к PixelGetColor
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Можно как-то по другому проверить её наличие на странице?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Так же, вот эта конструкция:
Код:
if $flag=1 Then
                    _Bps()
                Else
                    if mod($i,10)=0 Then
                    Sleep(1000)
                    _Bps()
                EndIf

При любом раскладе будет вызывать функцию _Bps => ошибка не в конструкции. Функция же _Bps содержит внутри себя непонятно зачем глобальную переменную $flag. Которая при этом, не известно именно в ней ли, изменяется или же нет => переменная $flag может где-то каждый раз принудительно обнуляться, что приведет к тому что у тебя не срабатывает приведенная выше конструкция.

Но при этом, следует учесть что если мы отбросим возможность ошибочного обнуления $flag где либо вообще, и её значение всегда является верным для конкретного момента времени (пусть то 0 или 1), мы увидим, что эта функция присваивает переменной $flag значение 1, только если результат функции PixelGetColor не равен 0xFFFFFF, что само по себе является истинно белым цветом. Отклоняясь от темы и вспоминая что PixelGetColor по своему ущербна, на определенных операционных системах, видео картах да бох весть чем еще, истинно белого цвета в том месте может не быть и в природе, а быть какой-нибудь 0xFFFFFE. При таком раскладе, сюда уже закралась совершенно другая ошибка. Функция _Bps, будет собственноручно каждый раз присваивать переменной $flag значение 1, нужно это или нет.

А если пойти еще дальше в поиске действительно того места где у тебя закрался баг, выполни следующие команды (в моем случае они выполняются так же на область истинно белого цвета)
Команда номер раз
Код:
MsgBox(0,0,PixelGetColor(2148, 1194))

Команда номер два
Код:
MsgBox(0,0,Hex(PixelGetColor(2148, 1194),6))

Команда номер три
Код:
MsgBox(0,0,"0x"&Hex(PixelGetColor(2148, 1194),6))


Теперь сравни что тебе выводится и подумай, можно ли сравнивать результаты PGC так как сравниваешь ты, или же надо делать это одним из этих способов:
Код:
Hex(PixelGetColor(1924, 1242),6) = "FFFFFF"

или
Код:
"0x"&Hex(PixelGetColor(1924, 1242),6) = "0xFFFFFF"

или
Код:
"0x"&Hex(PixelGetColor(1924, 1242),6) = 0xFFFFFF

Но в случае непробиваемой убежденности в необходимости использовать PGC, не смотря на то что возможности ложэного срабатывания при небольшом различии цвета это не исключит совсем
Код:
Func _Bps()
	Local $var = "0x"&Hex(PixelGetColor(1924, 1242),6) = 0xFFFFFF
	If $var <> 0xFFFFFF Then
		Send("{F5}")
		Return 1 ;ссылки функций друг на друга нужно изкоренять
	Else
		SetError(1)
		Return 0
	EndIf
EndIf


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