The Bytecode Club

Full Version: Made a function to get exact amount of troops in camp
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
NB: camp location is hard coded!!! this need to be changed to locate camp and use those coords!

this is for the devs that want to use this in their bot version
enclosed files reads the exact amount of troops in camp. this way you can start when troop in camp is >95%
nb: in the last script the camp location is hard coded. this need to be changed to do a locate, just like barracks
I've tested it, it works 100% for me
functions\Read Text\getCamp.au3
Code:
;==============================================================================================================
;===Get Digit=============================================================================================
;--------------------------------------------------------------------------------------------------------------
;Finds pixel color pattern of specific X and Y values, returns digit if pixel color pattern found.
;--------------------------------------------------------------------------------------------------------------
Func getCamp(ByRef $x, $y, $type)
Local $width = 0
;Search for digit 1
$width = 5
Select
Case $type = "Gold"
Local $c1 = Hex(0x070706, 6), $c2 = Hex(0xbebebe, 6), $c3 = Hex(0x9c9c9c, 6)
EndSelect
Local $pixel1[3] = [$x + 1, $y , $c1], $pixel2[3] = [$x + 2, $y + 3, $c2], $pixel3[3] = [$x + 2, $y + 9, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 1
Else ;Solves the problem when the spaces between the middle goes from 6 to 5 pixels
Local $pixel1[3] = [$x , $y , $c1], $pixel2[3] = [$x + 1, $y + 3, $c2], $pixel3[3] = [$x + 1, $y + 9, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 1
EndIf
EndIf
;Search for digit 2
$width = 8
Select
Case $type = "Gold"
Local $c1 = Hex(0x9f9f9f, 6), $c2 = Hex(0x010101, 6), $c3 = Hex(0x060606, 6)
EndSelect
Local $pixel1[3] = [$x + 4, $y + 7 , $c1], $pixel2[3] = [$x + 6, $y + 7, $c2], $pixel3[3] = [$x + 2, $y + 3, $c3]
;= [$x +1 , $y + 8, $c2], $pixel3[3] = [$x + 4, $y + 9, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 2
Else ;Solves the problem when the spaces between the middle goes from 6 to 5 pixels
Local $pixel1[3] = [$x + 3, $y + 7 , $c1], $pixel2[3] = [$x + 5, $y + 7, $c2], $pixel3[3] = [$x + 1, $y + 3, $c3]
;= [$x +1 , $y + 8, $c2], $pixel3[3] = [$x + 4, $y + 9, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 2
EndIf
EndIf
;Search for digit 3
$width = 8
Select
Case $type = "Gold"
Local $c1 = Hex(0x0e0e0e, 6), $c2 = Hex(0x000000, 6), $c3 = Hex(0x191919, 6)
EndSelect
Local $pixel1[3] = [$x + 4, $y + 3 , $c1], $pixel2[3] = [$x + 2, $y + 5, $c2], $pixel3[3] = [$x + 4, $y + 7, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 3
Else
Local $pixel1[3] = [$x + 3, $y + 3 , $c1], $pixel2[3] = [$x + 1, $y + 5, $c2], $pixel3[3] = [$x + 3, $y + 7, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 3
EndIf
EndIf
;Get digit 4
$width = 9
Select
Case $type = "Gold"
Local $c1 = Hex(0xb0b0b0, 6), $c2 = Hex(0xc9c9c9, 6), $c3 = Hex(0x7b7b7b, 6)
EndSelect
Local $pixel1[3] = [$x + 3, $y + 2, $c1], $pixel2[3] = [$x + 2, $y + 4, $c2], $pixel3[3] = [$x + 1, $y + 7, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 4
Else
Local $pixel1[3] = [$x + 2, $y + 2, $c1], $pixel2[3] = [$x + 1, $y + 4, $c2], $pixel3[3] = [$x , $y + 7, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 4
EndIf
EndIf
;Digit is 5
$width = 8
Select
Case $type = "Gold"
Local $c1 = Hex(0xb7b7b7, 6), $c2 = Hex(0x404040, 6), $c3 = Hex(0xa6a6a6, 6)
EndSelect
Local $pixel1[3] = [$x + 2, $y + 8 , $c1], $pixel2[3] = [$x + 1, $y + 1, $c2], $pixel3[3] = [$x + 4, $y + 6, $c3]
;= [$x +1 , $y + 8, $c2], $pixel3[3] = [$x + 4, $y + 9, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 5
Else
Local $pixel1[3] = [$x + 1, $y + 8 , $c1], $pixel2[3] = [$x , $y + 1, $c2], $pixel3[3] = [$x + 3, $y + 6, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 5
EndIf
EndIf
;Digit is 6
$width = 9
Select
Case $type = "Gold"
Local $c1 = Hex(0xa6a6a6, 6), $c2 = Hex(0x040404, 6), $c3 = Hex(0x030303, 6)
EndSelect
Local $pixel1[3] = [$x + 4, $y + 3 , $c1], $pixel2[3] = [$x + 5, $y + 7, $c2], $pixel3[3] = [$x + 7, $y + 3, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 6
Else
Local $pixel1[3] = [$x + 3, $y + 3 , $c1], $pixel2[3] = [$x + 4, $y + 7, $c2], $pixel3[3] = [$x + 6, $y + 3, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 6
EndIf
EndIf
;Digit is 7
$width = 8
Select
Case $type = "Gold"
Local $c1 = Hex(0xbfbfbf, 6), $c2 = Hex(0xcfcfcf, 6), $c3 = Hex(0xcfcfcf, 6)
EndSelect
Local $pixel1[3] = [$x + 4, $y + 2 , $c1], $pixel2[3] = [$x + 7, $y + 3, $c2], $pixel3[3] = [$x + 6, $y + 5, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 7
Else
Local $pixel1[3] = [$x + 3, $y + 2 , $c1], $pixel2[3] = [$x + 6, $y + 3, $c2], $pixel3[3] = [$x + 5, $y + 5, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 7
EndIf
EndIf
;Digit is 8
$width = 9
Select
Case $type = "Gold"
Local $c1 = Hex(0xd0d0d0, 6), $c2 = Hex(0x6f6f6f, 6), $c3 = Hex(0x040404, 6)
EndSelect
Local $pixel1[3] = [$x + 5, $y + 4 , $c1], $pixel2[3] = [$x + 5, $y + 2, $c2], $pixel3[3] = [$x + 5, $y + 7, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 8
Else
Local $pixel1[3] = [$x + 4, $y + 4 , $c1], $pixel2[3] = [$x + 4, $y + 2, $c2], $pixel3[3] = [$x + 4, $y + 7, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 8
EndIf
EndIf
;Digit is 9
$width = 9
Select
Case $type = "Gold"
Local $c1 = Hex(0xbfbfbf, 6), $c2 = Hex(0x4d4d4d, 6), $c3 = Hex(0x070707, 6)
EndSelect
Local $pixel1[3] = [$x + 5, $y + 6 , $c1], $pixel2[3] = [$x + 5, $y + 7, $c2], $pixel3[3] = [$x + 5, $y + 3, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 9
Else
Local $pixel1[3] = [$x + 4, $y + 6 , $c1], $pixel2[3] = [$x + 4, $y + 7, $c2], $pixel3[3] = [$x + 4, $y + 3, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 9
EndIf
EndIf
;Digit is 0
$width = 10
Select
Case $type = "Gold"
Local $c1 = Hex(0x050505, 6), $c2 = Hex(0x080808, 6), $c3 = Hex(0xbdbdbd, 6)
EndSelect
Local $pixel1[3] = [$x + 5, $y + 4 , $c1], $pixel2[3] = [$x + 6, $y + 6, $c2], $pixel3[3] = [$x + 4, $y + 6, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 0
Else
Local $pixel1[3] = [$x + 4, $y + 4 , $c1], $pixel2[3] = [$x + 5, $y + 6, $c2], $pixel3[3] = [$x + 3, $y + 6, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 0
EndIf
EndIf
Return ""
EndFunc ;==>getDigit
functions\Read Text\fullCamp.au3
Code:
Func fullCamp($x_start, $y_start)
_CaptureRegion($x_start, $y_start, $x_start + 30, $y_start + 12)
;-----------------------------------------------------------------------------
;cause our picture is not the complete bs window, reset x and y
Local $x = 2, $y = 1
Local $Gold, $tests,$kweet, $tweede, $derde, $i = 0
$Gold = getCamp($x, $y, "Gold")
While $Gold = ""
If $i >= 4 Then ExitLoop
$i += 1
$x += 1
$Gold &= getCamp($x, $y, "Gold")
WEnd
;$x = 1
;while $x < 10
            ;   $tests = _GetPixelColor($x, $y)
            ;   setlog("y = 1 en x " & $x & " en " & $tests)
             ;  $tests = _GetPixelColor($x, $y + 1)
            ;   setlog("y = 2 en x " & $x & " en " & $tests)
            ;   $x += 1
           ; WEnd

            ;$x = 1
            $Gold &= getCamp($x, $y, "Gold")
            $Gold &= getCamp($x, $y, "Gold")
            ;$Gold &= getCamp($x, $y, "Gold")
            ;$Gold &= getCamp($x, $y, "Gold")
         setlog("final waarde " & $Gold )

    Return $Gold
EndFunc


and the final function to run it all
NB: the camp location need to be fixed. in this script its hard coded and need to be change to locate camp just like barracks,
functions\Village\CheckFullArmy.au3
Code:
;checks camp to see how much troops are in it. if troops > 95% we attack
Func CheckFullArmy()

   ClickP($TopLeftClient)
   Sleep(1000)
    Click(506,462)  ;need to make this the same as barracks, locate 1 camp!
    sleep(2000)
    Click(380,600)
    sleep(2000)
    local $result = fullCamp(586, 192)
    if ($result / $icmbTroopCap * 100) > 95 Then
       $fullArmy = true
       Setlog("Lets Attack! " & $result & " of total " & $icmbTroopCap & " Troops")
       ClickP($TopLeftClient)
       return True
    Else
      Setlog("Not Enough troops " & $result & " of total " & $icmbTroopCap & " Troops")
      $fullArmy = false
      ClickP($TopLeftClient)
      sleep(500)
      ClickP($TopLeftClient)
      return false
   EndIf

EndFunc
btw, i tested it with troops from 0 to 200
it was correct 100% of the time.

let me know if it works for you
Hi Henk, Looks great could you up-load the files for me and I will try it out. Thx and all the best!
you can copy paste all the code and name it as stated just before i add the code...

this is more for developpers so the can check fullarmy
will do n i'm back within short. thx
1. How do you use this?, im still new here, you just replace existing?

2. Also, can someone explain what it does iim of kinda slow lol. From what I understand it starts attack when army is > 95% so if i want a 100% army I jusy change to =100%?.

3. Will this solve the bug. When i donate the bot doesnt build new army and gets stuck. Lol..

4. Thank you guys for investing your time on this.
Because it will automatically detect if there is a miss and you can actually use the screenshot for debug reference.

ex:
reading per troop then calculate total.

80 archers x1 =80
+
80 barbs x1 =80
+
8 giants x5= 40
----------------
Total as Calculated =200

Camp as read =200

if not equal then bot takes screenshot.

I'll test it all day once maintenance is over.
Pages: 1 2