The Bytecode Club
Log inJoin the club
Video Game Reverse Engineering

struggling with camp total capacity

Started by Henk500 · Feb 9, 2015

4 replies70,615 views
Feb 9, 2015#1

Hi,
i want to use rewrite the getGold.au3 to read the camp capacity. so the bot knows how much troops it has build. this way you can better train troops and start faster to attack, and train the next wave of troops, so troops train while u attack.
for some reason im missing something with the pixels or the coords of the pixels.
ive added the screenshot of the _captureregion that im taking. I presume that the first pixel in the left corner is x=1 and y=1 ? is that correct?
im traying to locate that first digit, the 1
Ive created a new fullCamp.au3 file (which is the same as getGold.au3)
and
ive added my test scripts.
wiztest.au3 is the file you need to run. it opens the bot gui
then in bluestacks open a camp (preferable with 1xx troops)
then press the "u"
in the log screen of the bot you'll see that its not finding the pixel with color 0x606060
Yes, i know im searching 3 times for the same pixelcolor (im using $c1 in all the 3 pixels)
Local $pixel1[3] = [$x + 2, $y + 2, $c1], $pixel2[3] = [$x + 2, $y + 2, $c1], $pixel3[3] = [$x + 2, $y + 2, $c1]
ive adjusted _captureregion with the following lines so i could see the "bitmap" its looking at.

_ScreenCapture_SaveImage("C:\COC-Bot-master\images\GdiPlus_Screen.bmp", $hHBitmap)
_GDIPlus_ImageSaveToFile($hBitmap,"C:\COC-Bot-master\images\hBitmap.bmp")

that gives me this picture
http://minus.com/i/NZrJncWvP0I6

I appreciate any help on how to do a decent digit search
functions\read text\getCamp.au3

;==============================================================================================================
;===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
;cause our picture is not the complete bs window, reset x and y
$x = 0
$y = 0
;Search for digit 1
$width = 4
Select
Case $type = "Gold"
Local $c1 = Hex(0x606060, 6), $c2 = Hex(0x1c5600, 10), $c3 = Hex(0xd7d7d7, 6)
Case $type = "Elixir"
Local $c1 = Hex(0x968895, 6), $c2 = Hex(0x312D31, 6), $c3 = Hex(0xD8C4D6, 6)
Case $type = "DarkElixir"
Local $c1 = Hex(0x8F8F8F, 6), $c2 = Hex(0x2F2F2F, 6), $c3 = Hex(0xCDCDCD, 6)
Case Else
Local $c1 = Hex(0x969696, 6), $c2 = Hex(0x313131, 6), $c3 = Hex(0xD8D8D8, 6)
EndSelect
Local $pixel1[3] = [$x + 2, $y + 2, $c1], $pixel2[3] = [$x + 2, $y + 2, $c1], $pixel3[3] = [$x + 2, $y + 2, $c1]
;= [$x +1 , $y + 8, $c2], $pixel3[3] = [$x + 4, $y + 9, $c3]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
setlog("Jaaaaaaaaa het is 1")
Return 1
Else
$x += 1
setlog("neee 1e else" & $x)
Local $pixel1[3] = [$x + 2, $y + 2, $c1],$pixel2[3] = [$x + 2, $y + 2, $c1], $pixel3[3] = [$x + 2, $y + 2, $c1]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 1
Else
$x += 2
setlog("neee 2e else" & $x)
Local $pixel1[3] = [$x + 2, $y + 2, $c1], $pixel2[3] = [$x + 2, $y + 2, $c1], $pixel3[3] = [$x + 2, $y + 2, $c1]
If boolPixelSearch($pixel1, $pixel2, $pixel3) Then
$x += $width
Return 1
Else
$x -= 1
EndIf
EndIf
EndIf
Return ""
EndFunc ;==>getDigit

functions\read text\fullCamp.au3

Func fullCamp($x_start, $y_start)
_CaptureRegion($x_start, $y_start, $x_start + 20, $y_start + 12)
;-----------------------------------------------------------------------------
Local $x = 1, $y = 0
Local $Gold, $i = 0
While getCamp($x, $y + $i, "Gold") = ""
If $i >= 15 Then ExitLoop
$i += 1
WEnd
$x = $x_start
$Gold &= getCamp($x, $y + $i, "Gold")
$Gold &= getCamp($x, $y + $i, "Gold")
$Gold &= getCamp($x, $y + $i, "Gold")
$x += 6
$Gold &= getCamp($x, $y + $i, "Gold")
$Gold &= getCamp($x, $y + $i, "Gold")
$Gold &= getCamp($x, $y + $i, "Gold")
Return $Gold
EndFunc

and in root the wiztest.au3

#RequireAdmin
#AutoIt3Wrapper_UseX64=n
$sBotVersion = "5.5"
$sBotTitle = "COC Bot v" & $sBotVersion
#include "COCBot\Global Variables.au3"
#include "COCBot\GUI Design.au3"
#include "COCBot\GUI Control.au3"
#include "COCBot\Functions.au3"
#include "COCBot\functions\Read Text\fullCamp.au3"
#include "COCBot\functions\Read Text\getCamp.au3"
#include-once
global $hBitmap
HotKeySet("p", "checkDeadBases")
HotKeySet("o", "pixelColor")
HotkeySet("i", "getLoot")
HotkeySet("u", "getdigits")
func getdigits()
$ichkBackground = 1
setLog("lets get camp")
local $result = fullCamp(589, 193)
setLog("getCamp is " & $result)
EndFunc
while 1
sleep(200)
WEnd
Feb 10, 2015#2

i finally figured it out. The tool Control viewer gave me a lot of info on (correct) location en pixel colors.

i can now tell troop capacity by clikcing on camp
this will make troop training much more efficient

Feb 10, 2015#3

@Henk500

Thanks for developing this bot ..

Feb 19, 2015#4

@Henk500

There is a need to create an additional getDigit function of GKevinOD to accommodate smaller numbers as found in the camp. I tried editing it but I only have about 85%+ accuracy. I'll post it here when I get 100%. It's useless if bugged LOL.

Feb 20, 2015#5

@Henk500

There is a need to create an additional getDigit function of GKevinOD to accommodate smaller numbers as found in the camp. I tried editing it but I only have about 85%+ accuracy. I'll post it here when I get 100%. It's useless if bugged LOL.

ive posted the function in a new thread. it works 100% for me
it is never wrong in troop amounts.

I did a test from 0 troops to 200
it had it correct all the time

Got something to add?

Log in to post a reply.

Join the conversation