Что нового

[Автоматизация] Зациклить скрипт и пауза для некоторых функций

Автор
B

be4hoctb

Новичок
Сообщения
38
Репутация
0
Astel064 сказал(а):
be4hoctb [?]
Вроде так работает, попробую немного потестить, спасибо.

Не за что, если нужно таймеры на несколько функций поставить - скажите.
Надо еще на 2 похожие функции поставить такой же таймер. Это надо в остальные функции перед отправкой почты поставить эту строку?
Код:
If $h_MonahiTimer <> -1 AND TimerDiff($h_MonahiTimer) < 60000*5 Then Return 0
		_Send_Email_('____', '_____')
		$h_MonahiTimer = TimerInit()
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Желательно для каждой функции создать свою переменную, в которой будет таймер.

Код ниже выполнит функции _Monahi() и _Razvedka() сразу после запуска, а потом только после истечения таймера.
Код:
Global $h_MonahiTimer = -1
Global $h_RazvedkaTimer = -1

While 1
_Monahi()
_Razvedka()
_Ataka()
Wend

Func _Monahi()
If $h_MonahiTimer <> -1 AND TimerDiff($h_MonahiTimer) < 60000*30 Then Return 0
; Ваш код отправки письма на почту
$h_MonahiTimer = TimerInit()
EndFunc

Func _Razvedka()
If $h_RazvedkaTimer <> -1 AND TimerDiff($h_RazvedkaTimer) < 60000*30 Then Return 0
; Какой-то код
$h_RazvedkaTimer = TimerInit()
EndFunc



Код ниже выполнит функцию _Monahi() сразу после запуска, а потом только после истечения таймера.
Функцию _Razvedka() он выполнит только после истечению таймера. Аналогично можно экспериментировать.
Код:
Global $h_MonahiTimer = -1
Global $h_RazvedkaTimer = TimerInit()

While 1
_Monahi()
_Razvedka()
_Ataka()
Wend

Func _Monahi()
If $h_MonahiTimer <> -1 AND TimerDiff($h_MonahiTimer) < 60000*30 Then Return 0
; Ваш код отправки письма на почту
$h_MonahiTimer = TimerInit()
EndFunc

Func _Razvedka()
If $h_RazvedkaTimer <> -1 AND TimerDiff($h_RazvedkaTimer) < 60000*30 Then Return 0
; Какой-то код
$h_RazvedkaTimer = TimerInit()
EndFunc


Просто, если создать одну переменную таймера для разных функций, то функция с меньшим таймером будет начинать таймер заново, а функция с большим таймером выполняться не будет вообще.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
be4hoctb
Вот ваш код с минимум доработок.
Код:
#cs http://autoit-script.ru/index.php?topic=17652.0
   Если одна из функций (_Monahi(), _Razvedka(), _Ataka()) выполняют условие и отправляют
   сообщение то она больше не должна отправлять сообщение в течении 30 мин.
#ce
#RequireAdmin
#include <ScreenCapture.au3>

Global $iPause[3]
HotKeySet('{ESC}', '_Exit')

WinActivate("Stronghold Kingdoms - Europe 1")
$hWnd = WinGetHandle("Stronghold Kingdoms - Europe 1") ; Это для скрина только окна игры
$sFileName_1 = @DesktopDir&'\Monahi.bmp' ; Путь\Имя для Монахов
$sFileName_2 = @DesktopDir&'\Ataka.bmp' ; Путь\Имя для aтаки
Sleep (1000)

Opt ( "MouseClickDelay", 1000)
AdlibRegister("_Check", 1000)

While 1
   _Monahi()
   _Razvedka()
   _Ataka()
   Sleep(250)
WEnd

Func _Monahi()
    Local $hBmp
    MouseClick('Left', 1244,90, 1) ; Переход по основной вкладке
    MouseClick('Left', 1089, 136, 1) ; Переход по второстепенно вкладке
    $coord = PixelSearch(1047, 465, 1107, 475, 0x312836) ; Если поле найдено
    If Not @error Then
	  $hBmp = _ScreenCapture_CaptureWnd('', $hWnd)
	  _ScreenCapture_SaveImage($sFileName_1, $hBmp)
	  If Not $iPause[0] Then _Send_Email_Monahi ('На деревню идет монах', 'Монах')
    EndIf
 EndFunc;==>_Monahi

Func _Razvedka()
   $coord = PixelSearch(1250, 80, 1262, 92, 0xFFFFF0) ; Если появились два меча
   If Not @error Then
	  MouseClick('Left', 1244,90, 1) ; Переход по основной вкладке
	  MouseClick('Left', 895, 134, 1) ; Переход по второстепенно вкладке
	  $coord = PixelSearch(1047, 465, 1107, 475, 0x312836) ; Если есть поле отправка
	  If Not @error Then
		 If Not $iPause[1] Then
			_Send_Email_Razvedka ('Разведка вашей деревни', 'Разведка')
			_Ataka()
		 EndIf
	  EndIf
   EndIf
EndFunc;==>_Razvedka

Func _Ataka()
   ;$coord = PixelSearch(1250, 80, 1262, 92, 0xFFFFF0); Если появились два меча
   ;If Not @error Then
   Local $hBmp1
   MouseClick('Left', 1244,90, 1) ; Переход по основной вкладке
   MouseClick('Left', 830, 137, 1) ; Переход по второстепенно вкладке
   $coord = PixelSearch(1047, 465, 1107, 475, 0x312836) ; Если есть поле отправка
   If Not @error Then
	  $hBmp1 = _ScreenCapture_CaptureWnd('', $hWnd)
	  _ScreenCapture_SaveImage($sFileName_2, $hBmp1)
	  If Not $iPause[2] Then _Send_Email_Ataka('Ваша деревня атакована', 'Атака')
   EndIf
EndFunc;==>_Ataka

Func _Send_Email_Monahi($Body, $Subject)
$FromAddress = '[email protected]' ; Адрес отправителя
$ToAddress = '[email protected]' ; Адрес получателя
$Username = '[email protected]' ; Логин отправителя
$Password = "1234" ; Пароль почты отправителя
$SMTPServer = 'smtp.gmail.com' ; SMTP-сервер
$Port = 465 ; Порт сервера
$SSL = 1 ; SSL
$AddAttachment = ('C:\Users\Администратор\Desktop\Monahi.bmp');отправляем файл

$conf = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = $FromAddress
        .To = $ToAddress
        .Subject = $Subject
        .TextBody = $Body
        .AddAttachment ('C:\Users\Администратор\Desktop\Monahi.bmp')
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($conf & "sendusing") = 2
        .Item ($conf & "smtpauthenticate") = 1
        .Item ($conf & "sendusername") = $Username
        .Item ($conf & "sendpassword") = $Password
        .Item ($conf & "smtpserver") = $SMTPServer
        .Item ($conf & "smtpserverport") = $Port
        .Item ($conf & "smtpusessl") = $SSL
        .Update
    EndWith
$hMAIL.Send
$iPause[0] = 30
;MsgBox(64, 'На деревню идет монах', 'Монах', 1)
EndFunc;==>_Send_Email_Monahi

Func _Send_Email_Razvedka($Body, $Subject)
$FromAddress = '[email protected]' ; Адрес отправителя
$ToAddress = '[email protected]' ; Адрес получателя
$Username = '[email protected]' ; Логин отправителя
$Password = "1234" ; Пароль почты отправителя
$SMTPServer = 'smtp.gmail.com' ; SMTP-сервер
$Port = 465 ; Порт сервера
$SSL = 1 ; SSL


$conf = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = $FromAddress
        .To = $ToAddress
        .Subject = $Subject
        .TextBody = $Body

    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($conf & "sendusing") = 2
        .Item ($conf & "smtpauthenticate") = 1
        .Item ($conf & "sendusername") = $Username
        .Item ($conf & "sendpassword") = $Password
        .Item ($conf & "smtpserver") = $SMTPServer
        .Item ($conf & "smtpserverport") = $Port
        .Item ($conf & "smtpusessl") = $SSL
        .Update
    EndWith
$hMAIL.Send
$iPause[1] = 30
;MsgBox(64, 'Разведка вашей деревни', 'Разведка', 1)
EndFunc;==>_Send_Email_Razvedka

Func _Send_Email_Ataka($Body, $Subject)
$FromAddress = '[email protected]' ; Адрес отправителя
$ToAddress = '[email protected]' ; Адрес получателя
$Username = '[email protected]' ; Логин отправителя
$Password = "1234" ; Пароль почты отправителя
$SMTPServer = 'smtp.gmail.com' ; SMTP-сервер
$Port = 465 ; Порт сервера
$SSL = 1 ; SSL
$AddAttachment = ('C:\Users\Администратор\Desktop\Ataka.bmp');отправляем файл

$conf = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = $FromAddress
        .To = $ToAddress
        .Subject = $Subject
        .TextBody = $Body
        .AddAttachment ('C:\Users\Администратор\Desktop\Ataka.bmp')
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($conf & "sendusing") = 2
        .Item ($conf & "smtpauthenticate") = 1
        .Item ($conf & "sendusername") = $Username
        .Item ($conf & "sendpassword") = $Password
        .Item ($conf & "smtpserver") = $SMTPServer
        .Item ($conf & "smtpserverport") = $Port
        .Item ($conf & "smtpusessl") = $SSL
        .Update
    EndWith
$hMAIL.Send
$iPause[2] = 30
;MsgBox(64, 'Ваша деревня атакована', 'Атака', 1)
EndFunc;==>_Send_Email_Ataka

Func _Check()

   If $iPause[0] Then $iPause[0] -= 1
   If $iPause[1] Then $iPause[1] -= 1
   If $iPause[2] Then $iPause[2] -= 1
   ;ConsoleWrite(StringFormat('_Monahi pause %d\r\n_Razvedka pause %d\r\n_Ataka pause %d\r\n\n', $iPause[0], $iPause[1], $iPause[2]))
EndFunc;==>_Check

Func _Exit()
   AdlibUnRegister("_Check")
   Exit
EndFunc;==>_Exit
 
Верх