Что нового

[World of Tanks] рандомная отправка сообщений в игре.

Сообщения
47
Репутация
-1
вот код на рандомну отправку =>
Код:
;отправка сообщений рандомно в 60 секунд**************************
	Case PixelGetColor(208,542) = 0x006A00
	;If GUICtrlRead($message)=$GUI_CHECKED Then
	If BitAND(GUICtrlRead($message), $GUI_CHECKED) Then
		$rnd=Random(1,4,1) 
        Else
		$rnd=GUICtrlRead($message)
	EndIf
	If $rnd=1 Then
		Send('{Enter}')
		Send(GUICtrlRead($1txt))
		sleep(1000)
		Send('{Enter}')
		Sleep(60000)
	ElseIf $rnd=2 Then
		Send('{Enter}')
		Send(GUICtrlRead($2txt))
		sleep(1000)
		Send('{Enter}')
		Sleep(60000)
	ElseIf $rnd=3 Then
		Send('{Enter}')
		Send(GUICtrlRead($3txt))
		sleep(1000)
		Send('{Enter}')
		Sleep(60000)
	ElseIf $rnd=4 Then
		Send('{Enter}')
		Send(GUICtrlRead($4txt))
		sleep(1000)
		Send('{Enter}')
		Sleep(60000)
	EndIf
;*****************************************************************
он отправляет не зависимо стоит ли галка или нет.
хотя в другом аналогичном коде, только на движение, проверка чекбокса срабатывает.
как еще можно сделать проверку на чекбокс?
или может все дело в "Send", тогда на что ее можно заменить?

*******************************************************************
P/S уважаемый модератор Belfigor, надеюсь теперь тема названа правильно?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Дак ты просто месседж боксом проверь что видит скрипт при включенной галке а что при выключенной.
 
Автор
V
Сообщения
47
Репутация
-1
подскажите как? а то мои знания в этой области весьма скромные

как проверить в этом коде чекбокс через ControlCommand ???
Код:
;отправка сообщений рандомно в 60 секунд**************************
	Case PixelGetColor(206,546) = 0x006C00
   ;If GUICtrlRead($message)=$GUI_CHECKED Then
    If BitAND(GUICtrlRead($message), $GUI_CHECKED) Then
		$rnd=Random(1,4,1)
	Else
		$rnd=GUICtrlRead($message)
	EndIf
	If $rnd=1 Then
		Send('{Enter}')
		Send(GUICtrlRead($1txt))
		sleep(1000)
		Send('{Enter}')
		Sleep(60000)
	ElseIf $rnd=2 Then
		Send('{Enter}')
		Send(GUICtrlRead($2txt))
		sleep(1000)
		Send('{Enter}')
		Sleep(60000)
	ElseIf $rnd=3 Then
		Send('{Enter}')
		Send(GUICtrlRead($3txt))
		sleep(1000)
		Send('{Enter}')
		Sleep(60000)
	ElseIf $rnd=4 Then
		Send('{Enter}')
		Send(GUICtrlRead($4txt))
		sleep(1000)
		Send('{Enter}')
		Sleep(60000)
	EndIf
;*****************************************************************

************************************************

может стоит изменить send на ControlSetText ?


вот нашел немного другой, но он в игре не работает
я запутался, он отправляет только в блокноте, а в игре нехочит. подправте скрипт пожалуйста

Код:
If ControlCommand ("","","Button6","IsChecked","")=1 Then
Dim $stext[4] ; объявляем массив
$stext[0] = GUICtrlRead($1txt)
$stext[1] = GUICtrlRead($2txt)
$stext[2] = GUICtrlRead($3txt)
$stext[3] = GUICtrlRead($4txt)
$iArray = Random (0, 4, 0) ; выбираем случайное число от 0 до 4
;MsgBox (0, "", $stext[$iArray])
sleep(500)	
Send("{ENTER}")
ControlSetText("", "","Edit1", $stext[$iArray])
sleep(300)
Send("{ENTER}")
sleep(1000)
EndIf
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
Example()

Func Example()
    Local $checkCN, $msg, $but1
    GUICreate("My GUI Checkbox")  ; will create a dialog box that when displayed is centered

    $checkCN = GUICtrlCreateCheckbox("CHECKBOX 1", 10, 10, 120, 20)
    $but1 = GUICtrlCreateButton("test", 50, 50, 50, 50)
    GUISetState()       ; will display an  dialog box with 1 checkbox

    ; Run the GUI until the dialog is closed
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then
            ExitLoop
        ElseIf $msg = $but1 Then
            MsgBox(0,0,GUICtrlRead($checkCN))
        EndIf

    WEnd
EndFunc   ;==>Example

Вот так можно проверить что видит скрипт при различных состояниях чекбокса
 
Автор
V
Сообщения
47
Репутация
-1
а как в конкретном моем примере можно еще проверить чекбокс? кроме
Код:
If GUICtrlRead($message)=$GUI_CHECKED Then и
If BitAND(GUICtrlRead($message), $GUI_CHECKED) Then
через ControlCommand я не понял как сделать
 
Автор
V
Сообщения
47
Репутация
-1
как грамотно соединить это между собою?
Код:
Case PixelGetColor(678,657) = 0x6B6959
	If GUICtrlRead($Tank4)=$GUI_CHECKED Then
		Sleep(3000)
		MouseClick("",785,657,2)
        EndIf  
        if PixelGetColor(466,37,1) = 0xC32318 Then
                Sleep(2000)
		MouseClick('left',466,37,2)
                sleep(3000)
        EndIf 
 
с этим =======================================

        Case PixelGetColor(278,657) = 0x654959
	If GUICtrlRead($Tank4)=$GUI_CHECKED Then
		Sleep(3000)
		MouseClick("",785,657,2)
        EndIf  
        if PixelGetColor(446,37,1) = 0xC78318 Then
                Sleep(2000)
		MouseClick('left',466,37,2)
                sleep(3000)
        EndIf
чтобы один case не ждал пока выполнится другой?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Такого не получится. Case действуют последовательно. При первом совпадении следующие условия не проверяются.
 
Автор
V
Сообщения
47
Репутация
-1
Такого не получится. Case действуют последовательно. При первом совпадении следующие условия не проверяются.
а оно действует пока у первого case не закончится условие выполнения, и тогда будет проверятся следующий case? я правильно понял?

а тогда с помощью чего сделать чтобы цвет постоянно проверялся на совпадение? к примеру в этом коде
Код:
;********************выбор танка по порядку**********************************************
;выбор 1 танка***************************************************************************
    Case PixelGetColor(809,41,1) = 0xBC6004               ;*   Видит золотые монеты    ;*
	If GUICtrlRead($AutoTank)=$GUI_CHECKED Then           ;*   Проверяем чекбокс       ;*
        sleep(2000)                                       ;*   Пауза 2 сек             ;*
        MouseClick('left',315, 640,2)                     ;*   Выбор 1ого танка        ;*
		Sleep(3000)                                       ;*   Пауза 3 сек             ;*
        MouseClick('left',320, 640,2)                     ;*   Выбор 1ого танка        ;*
        Sleep(1000)                                       ;*   Пауза 1 сек             ;*
EndIf
	If PixelGetColor(466,37,1) = 0xC32318 Then            ;*   Активно в бой           ;*
		Sleep(2000)                                       ;*   Пауза 2 сек             ;*
		MouseClick('left',466,37,2)                       ;*   Вход в бой              ;*
		sleep(3000)                                       ;*   Пауза 3 сек             ;*
		MouseClick('left',467,37,2)                       ;*   Вход в бой              ;*
		MouseClick('left',467,37,2)                       ;*   Вход в бой              ;*
		Sleep(1000)                                       ;*   Пауза 1 сек             ;*
EndIf
;****************************************************************************************
;выбор 2 танка***************************************************************************
    If PixelGetColor(466,37,1) = 0x696D58 Then            ;*   Неактивно в бой         ;*
        Sleep(2000)                                       ;*   Пауза 2 сек             ;*
        MouseClick('left',480, 640,2)                     ;*   Выбор 2ого танка        ;*
		Sleep(3000)                                       ;*   Пауза 3 сек             ;*
		MouseClick('left',485, 640,2)                     ;*   Выбор 2ого танка        ;*
        Sleep(1000)                                       ;*   Пауза 1 сек             ;*
EndIf
    If PixelGetColor(466,37,1) = 0xC32318 Then            ;*   Активно в бой           ;*
        Sleep(2000)                                       ;*   Пауза 2 сек             ;*
		MouseClick('left',466,37,2)                       ;*   Вход в бой              ;*
        sleep(3000)                                       ;*   Пауза 3 сек             ;*
        MouseClick('left',467,37,2)                       ;*   Вход в бой              ;*
		MouseClick('left',467,37,2)                       ;*   Вход в бой              ;*
		Sleep(1000)                                       ;*   Пауза 1 сек             ;*
EndIf
;****************************************************************************************
;выбор 3 танка***************************************************************************
	If PixelGetColor(466,37,1) = 0x696D58 Then            ;*   Неактивно в бой         ;*
        Sleep(2000)                                       ;*   Пауза 2 сек             ;*
        MouseClick('left',655, 640,2)                     ;*   Выбор 3го танка         ;*
		Sleep(3000)                                       ;*   Пауза 3 сек             ;*
		MouseClick('left',660, 640,2)                     ;*   Выбор 3го танка         ;*
        Sleep(1000)                                       ;*   Пауза 1 сек             ;*
EndIf
    If PixelGetColor(466,37,1) = 0xC32318 Then            ;*   Активно в бой           ;*
        Sleep(2000)                                       ;*   Пауза 2 сек             ;*
		MouseClick('left',466,37,2)                       ;*   Вход в бой              ;*
        sleep(3000)                                       ;*   Пауза 3 сек             ;*
        MouseClick('left',467,37,2)                       ;*   Вход в бой              ;*
		MouseClick('left',467,37,2)                       ;*   Вход в бой              ;*
		Sleep(1000)                                       ;*   Пауза 1 сек             ;*
EndIf
;****************************************************************************************
;выбор 4 танка***************************************************************************
	If PixelGetColor(466,37,1) = 0x696D58 Then            ;*   Неактивно в бой         ;*
        Sleep(2000)                                       ;*   Пауза 2 сек             ;*
        MouseClick('left',830, 640,2)                     ;*   Выбор 4го танка         ;*
		Sleep(3000)                                       ;*   Пауза 3 сек             ;*
		MouseClick('left',835, 640,2)                     ;*   Выбор 4го танка         ;*
        Sleep(1000)                                       ;*   Пауза 1 сек             ;*
EndIf
    If PixelGetColor(466,37,1) = 0xC32318 Then            ;*   Активно в бой           ;*
        Sleep(2000)                                       ;*   Пауза 2 сек             ;*
		MouseClick('left',466,37,2)                       ;*   Вход в бой              ;*
        sleep(3000)                                       ;*   Пауза 3 сек             ;*
        MouseClick('left',467,37,2)                       ;*   Вход в бой              ;*
		MouseClick('left',467,37,2)                       ;*   Вход в бой              ;*
		Sleep(1000)                                       ;*   Пауза 1 сек             ;*
EndIf
;****************************************************************************************
почему то выбирает только первый танк, остальные не хочит. цвет 100% правильно
как сделать чтобы выполнялся полностью и постоянно проверялся цвет?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Попробуй использоваться PixelSearch, команда PixelGetColor убога.
 
Автор
V
Сообщения
47
Репутация
-1
что то я савсем с этим PixelSearch запутался. помогите пожалуйста его вставить в мой пример
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
запускаешь пример из справки и потихоньку разбираешься, не вижу ничего сложного.
 
Автор
V
Сообщения
47
Репутация
-1
найти бы еще где этот пример взять, было бы вообще замечательно.

он будет постоянно искать пиксель или пока первый не выполнится второй не начнеет искать?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
пример в справке по F1
PixelSearch ищет заданный цвет с заданной погрешностью и заданным шагом в заданной области, просматривает 1 раз и возвращает результат, нашел\не нашел и если нашел то где.
 
Автор
V
Сообщения
47
Репутация
-1
как это между собою соединить?

Код:
PixelSearch(436,523,455,535,0xCB2724,10)
                    If @error=0 Then
                        Sleep(1000)
                        MouseClick("",512,540,2)
                     EndIf

                    PixelSearch(437,30,477,60,0xB02518,10)
                    If @error=0 Then
                        Sleep(1000)
                        MouseClick("",505,45,2)
                    EndIf
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
вопрос поставлен не корректно
Ответ на него - не вижу смысла соединять это.
 
Автор
V
Сообщения
47
Репутация
-1
ну не между собою, а последовательно в виде цикла
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
ну можешь например использовать While
 
Автор
V
Сообщения
47
Репутация
-1
чето я не то делаю,а вот что ?
Код:
Case $StartBot
            WinActivate("[TITLE:W.o.T. Client]","")
            While 1
            Select
                Case WinActive("[TITLE:W.o.T. Client]","") = 0
                    MsgBox(0,"Сообщение","Окно игры не активно, бот остановлен")
                    ExitLoop
                Case Not WinActive("[TITLE:W.o.T. Client]","") = 0
                    PixelSearch(436,523,455,535,0xCB2724,10)
                    If @error=0 Then
                        Sleep(1000)
                        MouseClick("",512,540,2)
                    EndIf
                    PixelSearch(437,30,477,60,0xB02518,10)
                    If @error=0 Then
                        Sleep(1000)
                        MouseClick("",505,45,2)
                    EndIf
                Case Not WinActive("[TITLE:W.o.T. Client]","") = 0
                    PixelSearch(0,0,500,500,0x000000,100)
                    If @error=0 Then
                        Sleep(3000)
                        MouseClick("",510,372,5)
                    EndIf
                Case Not WinActive("[TITLE:W.o.T. Client]","") = 0
                    Sleep(3000)
                    MouseClick("",510,372,5)
            EndSelect
            WEnd
    EndSwitch
WEnd
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Не знаю, а что не работает то? Проблема кода зачастую в том что он делает не то что подразумевал автор, а то что автор сказал коду делать.
Если при запуске интерпритатор не выдает тебе ошибок, значит код работает правильно.
 
Верх