by mcl » 02 May 2021, 13:21
Хм, вообще-то скрипт не должен давить на
E больше одного раза, если только не продолжать давить
Numpad1, перезапуская весь код с самого начала.
Я немного переделал ваш код, попробуйте.
1. В блоках с
if у вас по условию выполнится только одна строка − нажатие кнопки, а задержки уже не относятся к
if'ам − см. {
Blocks}. Из-за этого все задержки складываются, и до нажатия
Up может пройти больше полусекунды.
Я оставил одну задержку и перенёс её в начало цикла − так её и менять будет проще (если придётся).
2. У вас после найденной зелёной стрелки и нажатия клавиши проверки идут дальше, хотя двух зелёных стрелок быть не должно. Не страшно, но и пользы никакой.
В коде ниже после нажатия цикл сразу перезапускается заново. Если же ни одна зелёная стрелка не найдена − выполнение доходит до нажатия
E, запуская игру; затем скрипт ждёт, пока появятся стрелки, проверяя пиксель одной из них, пока он не станет белым или зелёным.
В документации к
PixelGetColor говорится, что пиксель должен быть виден („
The pixel must be visible“), чтобы его цвет определялся. Если ваш человек написал бота, работающего со свёрнутым окном, на AHK − я бы, с вашего позволения, ознакомился.
Code: Select all
Numpad1::
Loop {
Sleep 200
PixelGetColor, Color, 1077, 874
If (Color == 0x00ff00) {
Send {Down}
Continue
}
PixelGetColor, Color, 1018, 871
If (Color == 0x00ff00) {
Send {Left}
Continue
}
PixelGetColor, Color, 1142, 870
If (Color == 0x00ff00) {
Send {Right}
Continue
}
PixelGetColor, Color, 1074, 828
If (Color == 0x00ff00) {
Send {Up}
Continue
}
; Зелёные стрелки не найдены - жмём E и ждём появления стрелок
Send {e}
Loop {
Sleep 200
PixelGetColor, Color, 1077, 874
If (Color == 0x00ff00) || (Color == 0xffffff)
Break
}
}
Return
Numpad2::Pause
Хм, вообще-то скрипт не должен давить на [kbd]E[/kbd] больше одного раза, если только не продолжать давить [kbd]Numpad1[/kbd], перезапуская весь код с самого начала.
Я немного переделал ваш код, попробуйте.
1. В блоках с [c]if[/c] у вас по условию выполнится только одна строка − нажатие кнопки, а задержки уже не относятся к [c]if[/c]'ам − см. {[docs]Blocks[/docs]}. Из-за этого все задержки складываются, и до нажатия [kbd]Up[/kbd] может пройти больше полусекунды.
Я оставил одну задержку и перенёс её в начало цикла − так её и менять будет проще (если придётся).
2. У вас после найденной зелёной стрелки и нажатия клавиши проверки идут дальше, хотя двух зелёных стрелок быть не должно. Не страшно, но и пользы никакой.
В коде ниже после нажатия цикл сразу перезапускается заново. Если же ни одна зелёная стрелка не найдена − выполнение доходит до нажатия [kbd]E[/kbd], запуская игру; затем скрипт ждёт, пока появятся стрелки, проверяя пиксель одной из них, пока он не станет белым или зелёным.
В документации к [docs]PixelGetColor[/docs] говорится, что пиксель должен быть виден („[i]The pixel must be visible[/i]“), чтобы его цвет определялся. Если ваш человек написал бота, работающего со свёрнутым окном, на AHK − я бы, с вашего позволения, ознакомился.
[code]
Numpad1::
Loop {
Sleep 200
PixelGetColor, Color, 1077, 874
If (Color == 0x00ff00) {
Send {Down}
Continue
}
PixelGetColor, Color, 1018, 871
If (Color == 0x00ff00) {
Send {Left}
Continue
}
PixelGetColor, Color, 1142, 870
If (Color == 0x00ff00) {
Send {Right}
Continue
}
PixelGetColor, Color, 1074, 828
If (Color == 0x00ff00) {
Send {Up}
Continue
}
; Зелёные стрелки не найдены - жмём E и ждём появления стрелок
Send {e}
Loop {
Sleep 200
PixelGetColor, Color, 1077, 874
If (Color == 0x00ff00) || (Color == 0xffffff)
Break
}
}
Return
Numpad2::Pause
[/code]