jemxx / autobot

Autobot for TSO
3 stars 2 forks source link

Ошибка в работе этой функции #71

Open BasilMas opened 2 years ago

BasilMas commented 2 years ago

https://github.com/jemxx/autobot/blob/9a65a6e73d6b71e7137b4f81e8cd6910e2e0c0b8/globalfuncWAR.au3#L1087

Ее автор пытался избавиться от лишних листаний, но в итоге функция неверно обрабатывает ситуацию, если нужный генерал находится на последнем экране - функция такого генерала просто не видит. Я так и не смог разобраться в логике автора - лечится либо полной заменой на рабочий вариант, но с лишними листаниями, либо увеличением дефолтного числа генералов на один полный экран в звезде - с 50ти до 150, например.

У меня вот такой вариант работает без проблем

Func generali($general, $nomergenerala)
    Sleep(1000 * $tormoza)
    Local $ty = 0, $tx = 0, $search = 0, $i = 0, $t = 0, $ii = 0
    Local $general1x = 0, $general1y = 0, $general2x = 0, $general2y = 0
    ;If _imagesearch($general, 1, $tx, $ty, 20) = 0 Then Return 0
    While 1
        If _imagesearcharea($general, 1, $zvezda_area[0], $zvezda_area[1], $zvezda_area[2], $zvezda_area[3], $tx, $ty, 30) = 1 Then ExitLoop

        $ii = $ii + 1
        zvezdamovepolzunokdown(0)
        zvezdamovepolzunokdown(0)

        Sleep(Random(500, 1000, 1) * $tormoza)
        If $ii > 8 Then
            If haveimagearea("media\zvezda_polzunok_ewe_mojno_vniz.bmp", 70, $zvezda_area[0] + 385, $zvezda_area[1] + 200, $zvezda_area[2] + 25, $zvezda_area[3] + 25) = 0 Then
                Return 1
            EndIf
        EndIf
    WEnd
    If $nomergenerala = 1 Then
        While $i < 10
            MouseMove($tx, $ty, 10 * $tormoza)
            Sleep(500 * $tormoza)
            MouseClick("left", $tx + Random(1, 2, 1) - 2, $ty + Random(1, 2, 1) - 2, 1)
            go5()
            sleepwhile("media\zadacha_geni.bmp", 30, 10)
            If haveimage("media\zadacha_geni.bmp", 30) = 1 Then Return 1
            $i = $i + 1
        WEnd
        Return 0
    EndIf
    If $nomergenerala = -1 Then
        $i = 0
        While $i < 100
            If _imagesearcharea($general, 1, $tx, $ty - 50, @DesktopWidth, @DesktopHeight, $tx, $ty, 20) = 1 Then
                $general2x = $tx
                $general2y = $ty
            ElseIf _imagesearcharea($general, 1, 0, $ty, @DesktopWidth, @DesktopHeight, $tx, $ty, 20) = 1 Then
                $general2x = $tx
                $general2y = $ty
            Else
                While $t < 10
                    MouseMove($tx, $ty, 10 * $tormoza)
                    Sleep(500 * $tormoza)
                    MouseClick("left", $tx + Random(1, 2, 1) - 2, $ty + Random(1, 2, 1) - 2, 1)
                    go5()
                    sleepwhile("media\zadacha_geni.bmp", 30, 10)
                    If haveimage("media\zadacha_geni.bmp", 30) = 1 Then Return 1
                    $t = $t + 1
                WEnd
            EndIf
            $tx = $general2x
            $ty = $general2y
            $i = $i + 1
        WEnd
        Return 0
    EndIf
    $i = 1
    While $i < $nomergenerala
        $i = $i + 1
        If _imagesearcharea($general, 1, $tx, $ty - 50, @DesktopWidth, @DesktopHeight, $tx, $ty, 20) = 1 Then
            $general2x = $tx
            $general2y = $ty
            If $i = $nomergenerala Then
                MouseMove($general2x, $general2y, 10 * $tormoza)
                Sleep(100 * $tormoza)
                MouseClick("left", $general2x + Random(1, 2, 1) - 2, $general2y + Random(1, 2, 1) - 2, 1)
                go5()
                sleepwhile("media\zadacha_geni.bmp", 30, 10)
                If haveimage("media\zadacha_geni.bmp", 30) = 1 Then Return 1
            EndIf
        ElseIf _imagesearcharea($general, 1, 0, $ty, @DesktopWidth, @DesktopHeight, $tx, $ty, 20) = 1 Then
            $general2x = $tx
            $general2y = $ty
            If $i = $nomergenerala Then
                MouseMove($general2x, $general2y, 10 * $tormoza)
                Sleep(100 * $tormoza)
                MouseClick("left", $general2x + Random(1, 2, 1) - 2, $general2y + Random(1, 2, 1) - 2, 1)
                go5()
                sleepwhile("media\zadacha_geni.bmp", 30, 10)
                If haveimage("media\zadacha_geni.bmp", 30) = 1 Then Return 1
            EndIf
        Else
            Return 0
        EndIf
        $tx = $general2x
        $ty = $general2y
    WEnd
    Return 0
EndFunc

Проверить мои слова легко - достаточно задать число генералов равным 50 и попробовать что-то набрать в генерала, который в звезде находится на 2м экране.

Ноги этой ошибки растут вот отсюда https://github.com/jemxx/autobot/blob/9a65a6e73d6b71e7137b4f81e8cd6910e2e0c0b8/globalfuncWAR.au3#L1466 и отсюда https://github.com/jemxx/autobot/blob/9a65a6e73d6b71e7137b4f81e8cd6910e2e0c0b8/globalfuncWAR.au3#L1505

надо убрать из обоих строк вычитание "-1"

BasilMas commented 1 year ago

поправлено и проверено в этом релизе https://github.com/jemxx/autobot/issues/86#issue-1600980615