Что нового

помогите исправить логику бота или исполняемые функции

urrya

Новичок
Сообщения
159
Репутация
1
Всем привет.
При написании бота появилась проблемка.
Есть некий "ум" бота -

Код:
Select
Case $overvu = 1 And $bukvy = 1 And $osterdron = 0 And $gruz2 = 1 And $varpdvig11 = 1 And $price1 = 1
	MsgBox(0, "", "включить модуль 1 ")
	kopaty1()
Case $overvu = 1 And $strelka = 0 And $bukvy = 1 And $osterdron = 0 And $gruz2 = 1 And $varpdvig11 = 1 And $price1 = 1
	MsgBox(0, "", "включить модуль 2 ")
	kopaty2()
EndSelect


и есть те две функции, которые должны запускаться при совпадении "датчиков" -

Код:
Func kopaty1()
Local $mm1
Local $mm12
WinActivate($ImyPersa1)
WinMove($ImyPersa1,"", 0, -10, 1280, 1035)
$mm1 = Hex(PixelGetColor(289, 896), 6)
  Sleep(333)
  $mm12 = Hex(PixelGetColor(289, 896), 6)
	If $mm1 == $mm12 Then
	Sleep(Random(481, 723))
	 Send("{LEFT}")
	Sleep(Random(270, 511))
	Send('1', 1)
	Sleep(Random(481, 723))
	 MouseClick('left', Random(272, 955, 1), Random(278, 694, 1), 1, Random(5, 9))  ; рандомный клик в прямоугольник в комосе
Else
	Sleep(200)
EndIf
 EndFunc

Func kopaty2()
Local $mm2
Local $mm22
WinActivate($ImyPersa1)
WinMove($ImyPersa1,"", 0, -10, 1280, 1035)
 $mm2 = Hex(PixelGetColor(340, 896), 6)
  Sleep(333)
  $mm22 = Hex(PixelGetColor(340, 896), 6)
	If $mm2 == $mm22 Then
	Sleep(Random(481, 723))
    Send("{RIGHT}")
	Sleep(Random(270, 511))
	Send('2', 1)
	Sleep(Random(481, 723))
	 MouseClick('left', Random(272, 955, 1), Random(278, 694, 1), 1, Random(5, 9))  ; рандомный клик в прямоугольник в комосе
Else
	Sleep(200)
EndIf
EndFunc


проблема в том, что запускается только первая функция, при этом зацикливаясь по кругу, не давая "мозгу"
скрипта продолжить работу :(

Помогите пожалуйста с этой проблемкой :blink:
 

Mdsanta

Новичок
Сообщения
13
Репутация
0
Добавь в первое условие значение $strelka

У тебя первым выполняется проверка на него. Все указанные там переменные у тебя одинаковы в обоих случаях
 
Автор
urrya

urrya

Новичок
Сообщения
159
Репутация
1
Mdsanta
Спасибо за ответ, но с "датчиками" перепробовал уже все варианты - не помогает :(

Проблемку решил дополнительной функцией. которая вызывается непосредственно из второй с этого примера, а вторая вызывается из первой -

Код:
Func kopaty1()
WinActivate($ImyPersa1)
WinMove($ImyPersa1,"", 0, -10, 1280, 1035)
$mm1 = Hex(PixelGetColor(289, 896), 6)
  Sleep(333)
  $mm12 = Hex(PixelGetColor(289, 896), 6)
	If $mm1 == $mm12 Then
	Sleep(Random(481, 723))
	 Send("{LEFT}")
	Sleep(Random(270, 511))
	Send('1', 1)
	Sleep(Random(481, 723))
	 MouseClick('left', Random(272, 955, 1), Random(278, 694, 1), 1, Random(5, 9))  ; рандомный клик в прямоугольник в комосе
	kopaty2()
Else
	kopaty2()
EndIf
 EndFunc

Func kopaty2()
WinActivate($ImyPersa1)
WinMove($ImyPersa1,"", 0, -10, 1280, 1035)
 $mm2 = Hex(PixelGetColor(340, 896), 6)
  Sleep(333)
  $mm22 = Hex(PixelGetColor(340, 896), 6)
	If $mm2 == $mm22 Then
	Sleep(Random(481, 723))
    Send("{RIGHT}")
	Sleep(Random(270, 511))
	Send('2', 1)
	Sleep(Random(481, 723))
	 MouseClick('left', Random(272, 955, 1), Random(278, 694, 1), 1, Random(5, 9))  ; рандомный клик в прямоугольник в комосе
	raspredelvyxodov()
Else
	raspredelvyxodov()
EndIf
EndFunc


переменные объявил глобально зачем то =)
но это не то что хотелось бы :scratch:




Добавлено:
Сообщение автоматически объединено:

к стати по поводу датчиков, обе функции должны вызываться по одинаковым условиям "датчиков", это и было изначально в скрипте, но затем я зачем то не много изменил условия, хотя по сути это то же самое (стрелка - дубль др. условия нужное для вызова ещё одной функции).
Да и вообще если даже делать просто вызов по одному и тому же условию. функция виснет в цикл, что первая, что вторая(если закомментировать первую)


Добавлено:
Сообщение автоматически объединено:

и "виснет в цикл" именно из-за -

Код:
$mm1 = Hex(PixelGetColor(289, 896), 6)
  Sleep(333)
  $mm12 = Hex(PixelGetColor(289, 896), 6)
    If $mm1 == $mm12 Then
 

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
urrya [?]
обе функции должны вызываться по одинаковым условиям "датчиков"
Из справки по ключевому слову Select
Код:
Если более, чем одно из выражений Case истинно, выполняется только первый блок.
Другими словами, у вас выполняется первый Case и происходит выход из Select. Возможно, вам поможет следующее
Код:
Select
  Case $overvu = 1 And $bukvy = 1 And $osterdron = 0 And $gruz2 = 1 And $varpdvig11 = 1 And $price1 = 1
    If $strelka <> 0 Then
      MsgBox(0, "", "включить модуль 1 ")
      kopaty1()
    Else
      MsgBox(0, "", "включить модуль 2 ")
      kopaty2()
    EndIf
EndSelect
 
Автор
urrya

urrya

Новичок
Сообщения
159
Репутация
1
InnI

Спасибо, Ваш пример сейчас сделаю и отпишусь, думаю он поможет =)


Добавлено:
Сообщение автоматически объединено:

InnI

К сожалению нет, не помог Ваш совет, при таком раскладе зацикливание происходит уже не на 1ой функции, а на второй :(


Добавлено:
Сообщение автоматически объединено:

я же не зря(судя по примеру со справки приведённым выше) изменил одинаковые условия на не одинаковые, добавив переменную
Код:
$strelka

:scratch:

по прежнему работает с "костылём" в виде дополнительной функции -

Код:
raspredelvyxodov()

:blink:
 

InnI

AutoIT Гуру
Сообщения
4,923
Репутация
1,432
urrya [?]
не помог Ваш совет, при таком раскладе зацикливание происходит уже не на 1ой функции, а на второй
Тогда осмелюсь предположить, что $strelka всегда равна нулю. Когда она станет отличной от нуля - сработает первая функция.

изменил одинаковые условия на не одинаковые, добавив переменную
Ещё раз объясняю ваш первый пример. Когда все условия выполняются - выполняется первый Case. После этого второй (да и все последующие) Case даже не проверяются.
Попробуйте поменять Case местами: там, где проверяется $strelka = 0 поставьте раньше того, где эта переменная отсутствует.


Добавлено:
Сообщение автоматически объединено:

urrya [?]
обе функции должны вызываться по одинаковым условиям "датчиков", это и было изначально в скрипте
А если так
Код:
Select
  Case $overvu = 1 And $bukvy = 1 And $osterdron = 0 And $gruz2 = 1 And $varpdvig11 = 1 And $price1 = 1
    kopaty1()
    kopaty2()
    raspredelvyxodov()
EndSelect
Case может включать больше одной функции ;)
 
Верх