Что нового

[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 595
Репутация
938
Дак ты просто месседж боксом проверь что видит скрипт при включенной галке а что при выключенной.
 
Автор
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 595
Репутация
938
Код:
#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 я не понял как сделать
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
{CodeWarn}
 
Автор
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 595
Репутация
938
Такого не получится. 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 595
Репутация
938
Попробуй использоваться PixelSearch, команда PixelGetColor убога.
 
Автор
V
Сообщения
47
Репутация
-1
что то я савсем с этим PixelSearch запутался. помогите пожалуйста его вставить в мой пример
 

Belfigor

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

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

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
пример в справке по 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 595
Репутация
938
вопрос поставлен не корректно
Ответ на него - не вижу смысла соединять это.
 
Автор
V
Сообщения
47
Репутация
-1
ну не между собою, а последовательно в виде цикла
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
ну можешь например использовать 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 595
Репутация
938
Не знаю, а что не работает то? Проблема кода зачастую в том что он делает не то что подразумевал автор, а то что автор сказал коду делать.
Если при запуске интерпритатор не выдает тебе ошибок, значит код работает правильно.
 
Верх