1 (изменено: beka7723, 2021-01-13 10:42:05)

Тема: Вопрос по скрипту

Всем доброго времени суток. Вопрос такой. Имеется скрипт, на мультиплеер по игре ГТА 5. Данный скрипт ловит рыбу. Суть в том, что скрипт должен кликать мышкой когда горит зеленый "сигнал", и не кликать когда горит красный. Все работает нормально, но периодически бот кликает при "красном сигнале". Помогите пожалуйста найти где именно заложена проблема и как ее можно исправить. Улучшить скорость считывание цвета может быть. Вообщем нужно сделать так чтобы скрипт не кликал в красной зоне. Также помогите найти пожалуйста интервал между нажатиями мышкой. Код выкладываю ниже:

WinActivate, RAGЕ Мultiplayer     ahk_class 60826
Numpad4:: Pause, Off
Numpad3:: Pause, On
Numpad1::
Loop{
Label1:
BlockInput, SendAndMouse
SendInput, {sc17}
Label2:
MouseGetPos, 1242, 420
PixelGetColor, color, 1242, 420, alt
Var4 = %color%
if ( var4 = 0xFFFFFF  )
{
sleep 500
MouseGetPos, 1580, 440
PixelGetColor, color, 1580, 440, alt
Var1 = %color%
if ( var1 = 0x2A68FC  ) | ( var1 = 0x1C5FFC  ) | ( var1 = 0x1C60FC  ) | ( var1 = 0x1C61FC  )
{
SendInput, {Numpad3}
BlockInput, Default
}
else
{
Click Left 550,394 ,
sleep, 200
Click Left 550, 520,
BlockInput, Default
sleep 5000
Label3:
MouseGetPos, 1051, 898
PixelGetColor, color, 1051, 898, alt
Var2 = %color%
if ( var2 = 0x0000FF  )
{
Send {Click}
Send {Click}
Send {Click}
Send {Click}
Send {Click}
Send {Click}
Goto, Label3
}
else
{         
MouseGetPos, 624, 1024
PixelGetColor, color, 624, 1024, alt
Var3 = %color%
if ( var3 = 0x00FF4E  )
{
Goto, Label1
}
else
{
Goto, Label3
}

}
}
}
else
{
Goto, Label2
}
}
return

2

Re: Вопрос по скрипту

Если есть какие либо предложения по оптимизации кода, буду рад выслушать! Спасибо!

3 (изменено: pixel75, 2021-01-13 20:12:32)

Re: Вопрос по скрипту

Не претендую на истину в последней инстанции, потому вставлю 5 копеек лишь по поводу того, что лежит в плоскости моего понимания. Во-первых, мною осталось непостижимым множественное применение MouseGetPos, который в сущности даёт текущую позицию курсора, тогда зачем там прописаны координаты, немного недогоняю. Во-вторых, предложил бы Вам не насиловать процессор событиями без минимальных пауз между ними, а равно посылать не просто мгновенные нажатия, а прописывать именно зажатие и отпускание клавиш, что, как показывает практика, в играх гораздо надёжнее. Большинство игр, фокусов с мгновенными многократными нажатиями не любит и разработчики выписывают баны за макросы, если пинг существенно не влияет на обмен с сервером, особенно если курсор из точки в точку перемещается мгновенно, что Вы тоже должны учесть. Скрипт иногда жмёт вместо зеленого пикселя красный, скорее всего потому, что кликает в найденный цвет лишь через 500мс, вероятно за это время цвет у Вас и сменяется иногда. Вопрос использования дурацких Goto-скачков на множество меток, оставлю за скобками, ибо построение удобоваримых структур наверное само приходит с опытом, которым, увы, я тоже похвастать не могу. Короче первое, что пришло в голову(Ваши MouseGetPos я просто закомментировал, вдруг я просто по скудоумию  чего то не знаю):


WinActivate, RAGЕ Мultiplayer     ahk_class 60826
Numpad4:: Pause, Off
Numpad3:: Pause, On
Numpad1::
Loop
{
	Label1:
	BlockInput, SendAndMouse
	SendInput, {sc17}
	Sleep, 30
	Label2:
;	MouseGetPos, 1242, 420
	PixelGetColor, color, 1242, 420, alt
	Var4 = %color%
	if ( var4 = 0xFFFFFF )
	{
		Sleep 500
;		MouseGetPos, 1580, 440
		PixelGetColor, color, 1580, 440, alt
		var1 = %color%
		if ( var1 = 0x2A68FC  ) | ( var1 = 0x1C5FFC  ) | ( var1 = 0x1C60FC  ) | ( var1 = 0x1C61FC  )
		{
			SendInput, {Numpad3}
			Sleep, 30
			BlockInput, Default
		}
		else
		{
			Random, R, 15, 40
			MouseMove, 550,394, R
			Sleep, 30
			Click Left 550,394
			Sleep, 200
			Random, R, 15, 40
			MouseMove, 550,520, R
			Sleep, 30			
			MouseClick, Left, 550, 520
			BlockInput, Default
			Sleep, 5000
			Label3:
;			MouseGetPos, 1051, 898
			PixelGetColor, color, 1051, 898, alt
			Var2 = %color%
			if ( var2 = 0x0000FF )
			{
				Loop, 6
				{
					Send {Click Down}
					Sleep, 30
					Send {Click Up}
					Sleep, 30
				}
				Goto, Label3
			}
			else
			{         
;				MouseGetPos, 624, 1024
				PixelGetColor, color, 624, 1024, alt
				Var3 = %color%
				if ( var3 = 0x00FF4E )
				{
					Goto, Label1
				}
				else
				{
					Goto, Label3
				}		
			}
		}
	}
	else
	{
		Goto, Label2
	}
}
Return