Advertisement
CocBotTBC

Clash of Clans

Dec 18th, 2014
577
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 27.91 KB | None | 0 0
  1. #RequireAdmin
  2. #include <StaticConstants.au3>
  3. #include <ButtonConstants.au3>
  4. #include <ComboConstants.au3>
  5. #include <GuiComboBox.au3>
  6. #include <GUIConstantsEx.au3>
  7. #include <EditConstants.au3>
  8. #include <WindowsConstants.au3>
  9. #include <TrayConstants.au3>
  10. #include <Misc.au3>
  11. #include "Tesseract-OCR\Tesseract.au3"
  12.  
  13. Opt ("GUIOnEventMode", 1)
  14. Opt ("MouseClickDelay", 10)
  15. Opt ("MouseClickDownDelay", 10)
  16. Opt ("MouseCoordMode", 0)
  17. Opt ('PixelCoordMode', 0)
  18.  
  19. GUIRegisterMsg($WM_COMMAND, "GUIControl")
  20. GUIRegisterMsg($WM_SYSCOMMAND, "GUIControl")
  21.  
  22. Global $Title = "BlueStacks App Player"
  23. Global $HWnD = WinGetHandle (WinGetTitle($Title))
  24. WinActivate ($HWnD)
  25.  
  26. Global $RunState = False
  27. Global $Gold, $Elixir, $MinGold = 80000, $MinElixir = 80000, $SearchMode = 1, $SearchCheck = 0, $SearchCount = 0
  28.  
  29. Global $Attack = 0xF0E5D6, $FindAMatch = 0xF8E0A7
  30. Global $Config = @ScriptDir & "\config.ini"
  31. Global $Left = 50.23, $Top = 67.5, $Right = 613.95, $Bottom = 431.67
  32. Global $BSsize = WinGetClientSize($hWnd)
  33. Global $x_ratio = $BSsize[0]/800, $y_ratio = $BSsize[1]/600
  34.  
  35. Global $Troop[5][2] = [[60*$x_ratio,505*$y_ratio],[130*$x_ratio,505*$y_ratio],[200*$x_ratio,505*$y_ratio],[265*$x_ratio,505*$y_ratio],[372*$x_ratio,505*$y_ratio]]
  36. Global $Barbarian[2] = [0,0], $Archer[2] = [0,0], $Golbin[2] =[0,0], $Giant[2] = [0,0]
  37. Global $B1Pos[2] = [0,0], $B2Pos[2] = [0,0], $B3Pos[2] = [0,0], $B4Pos[2] = [0,0]
  38. Global $B1Troop, $B2Troop, $B3Troop, $B4Troop
  39.  
  40. Global $UpLeft[5][2] = [[350*$x_ratio,51*$y_ratio],[230*$x_ratio,100*$y_ratio],[186*$x_ratio,160*$y_ratio],[144*$x_ratio,187*$y_ratio],[125*$x_ratio,200*$y_ratio]]
  41. Global $UpRight[5][2] = [[460*$x_ratio,62*$y_ratio],[520*$x_ratio,97*$y_ratio],[570*$x_ratio,134*$y_ratio],[647*$x_ratio,186*$y_ratio],[692*$x_ratio,211*$y_ratio]]
  42. Global $LowLeft[5][2] = [[77*$x_ratio, 306*$y_ratio],[130*$x_ratio,353*$y_ratio],[181*$x_ratio,395*$y_ratio],[214*$x_ratio,415*$y_ratio],[250*$x_ratio,442*$y_ratio]]
  43. Global $LowRight[5][2] = [[734*$x_ratio,290*$y_ratio],[685*$x_ratio,318*$y_ratio],[630*$x_ratio,350*$y_ratio],[600*$x_ratio,369*$y_ratio],[535*$x_ratio,425*$y_ratio]]
  44.  
  45.  
  46.  
  47. #Region ##### GUI #####
  48. $BotGUI = GUICreate("Clash of Clans Bot", 300, 500)
  49. GUICtrlSetFont(-1, 10, 800, 0, "Calibri")
  50. GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate")
  51. $Button = GUICtrlCreateButton("START", 20, 450, 260, 40)
  52. GUICtrlSetOnEvent(-1, "Start")
  53. $LBButton = GUICtrlCreateButton("Locate Barrack", 20, 380, 85, 30)
  54. GUICtrlSetOnEvent(-1, "LB")
  55. $TrButton = GUICtrlCreateButton("Train", 110, 380, 80, 30)
  56. GUICtrlSetOnEvent(-1, "Tr")
  57. $AtkButton = GUICtrlCreateButton("Attack", 195, 380, 85, 30)
  58. GUICtrlSetOnEvent(-1, "Atk")
  59. $VSButton = GUICtrlCreateButton("VILLAGE SEARCH", 20, 415, 260, 30)
  60. GUICtrlSetOnEvent(-1, "SearchFunction")
  61. $MeetAll = GUICtrlCreateCheckbox("Meet all conditions", 30, 30, 140, 17)
  62. GUICtrlSetState(-1, $GUI_CHECKED)
  63. GUICtrlCreateLabel("Min Gold:", 30, 58, 58, 17)
  64. $MinGoldInput = GUICtrlCreateInput("", 80, 54, 55, 21, $ES_NUMBER)
  65. GUICtrlSetLimit(-1, 6)
  66. GUICtrlSetData(-1, $MinGold)
  67. GUICtrlCreateLabel("Min Elixir:", 30, 82, 57, 17)
  68. $MinElixirInput = GUICtrlCreateInput("", 80, 78, 55, 21, $ES_NUMBER)
  69. GUICtrlSetLimit(-1, 6)
  70. GUICtrlSetData(-1, $MinElixir)
  71. $Barrack01 = GUICtrlCreateCombo("Barrack 01", 175, 20, 80, 30, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
  72. GUICtrlSetData(-1, "Barbarian|Archer|Goblin|Giant")
  73. _GUICtrlComboBox_SelectString(-1, "Archer")
  74. $Barrack02 = GUICtrlCreateCombo("Barrack 02", 175, 46, 80, 30, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
  75. GUICtrlSetData(-1, "Barbarian|Archer|Goblin|Giant")
  76. _GUICtrlComboBox_SelectString(-1, "Archer")
  77. $Barrack03 = GUICtrlCreateCombo("Barrack 03", 175, 72, 80, 30, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
  78. GUICtrlSetData(-1, "Barbarian|Archer|Goblin|Giant")
  79. _GUICtrlComboBox_SelectString(-1, "Barbarian")
  80. $Barrack04 = GUICtrlCreateCombo("Barrack 04", 175, 98, 80, 30, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
  81. GUICtrlSetData(-1, "Barbarian|Archer|Goblin|Giant")
  82. _GUICtrlComboBox_SelectString(-1, "Barbarian")
  83. $Results = GUICtrlCreateEdit("", 20, 140, 260, 225, BitOR($SS_SUNKEN,$ES_READONLY, $SS_LEFT))
  84. GUISetState(@SW_SHOW)
  85. WinSetOnTop($BotGUI,"",1)
  86. #EndRegion ##### GUI #####
  87.  
  88. While 1
  89.    $Msg = GUIGetMsg()
  90. WEnd
  91.  
  92. Func GUIControl($hWind, $iMsg, $wParam, $lParam)
  93.    Local $nNotifyCode = BitShift($wParam, 16)
  94.    Local $nID = BitAND($wParam, 0x0000FFFF)
  95.    Local $hCtrl = $lParam
  96.    #forceref $hWind, $iMsg, $wParam, $lParam
  97.    Switch $iMsg
  98.       Case 273
  99.          Switch $nID
  100.             Case $Button
  101.                $RunState = Not $RunState
  102.                If $RunState = True Then
  103.                   GUICtrlSetData($Button,"STOP")
  104.                   GUICtrlSetData($Results, "Bot Started.." & @CRLF, -1)
  105.                ElseIf $RunState = False Then
  106.                   GUICtrlSetData($Button,"START")
  107.                   GUICtrlSetData($Results, "Bot Stopped" & @CRLF, -1)
  108.                EndIf
  109.             Case $LBButton
  110.                GUICtrlSetData($LBButton,"Locating...")
  111.             Case $TrButton
  112.                GUICtrlSetData($TrButton,"Training...")
  113.             Case $AtkButton
  114.                GUICtrlSetData($AtkButton,"Attacking...")
  115.             Case $VSButton
  116.                GUICtrlSetData($VSButton,"Searching...")
  117.          EndSwitch
  118.       Case 274
  119.          Switch $wParam
  120.             Case 0xf060
  121.                Exit
  122.          EndSwitch
  123.    EndSwitch
  124.    Return $GUI_RUNDEFMSG
  125. EndFunc
  126.  
  127. Func Start()
  128.    Sleep(1000)
  129.    While 1
  130.       If $RunState = False Then
  131.          ExitLoop
  132.       EndIf
  133.       MainScreen()  ;Check if main screen
  134.       If $RunState = False Then
  135.          ExitLoop
  136.       EndIf
  137.       GetInput()    ;Read user's input
  138.       If $RunState = False Then
  139.          ExitLoop
  140.       EndIf
  141.       ZoomOut()
  142.       If $RunState = False Then
  143.          ExitLoop
  144.       EndIf
  145.       LocateBarrack()   ;If barrack not located, ask user to manually click on barrack to locate position
  146.       If $RunState = False Then
  147.          ExitLoop
  148.       EndIf
  149.       If $RunState = False Then
  150.          ExitLoop
  151.       EndIf
  152.       Train()           ;Locate Barrack, Train Barrack
  153.       If $RunState = False Then
  154.          ExitLoop
  155.       EndIf
  156.       ClearBox()
  157.       ;Idle(900)
  158.       If $RunState = False Then
  159.          ExitLoop
  160.       EndIf
  161.       Attack()          ;Prepare Attack, Read Value, Compute Value, Compare Value, Search Village, Drop Troop, Return Home
  162.    WEnd
  163. EndFunc
  164.  
  165. Func GetInput()
  166.    $B1Troop = GUICtrlRead($Barrack01)
  167.    $B2Troop = GUICtrlRead($Barrack02)
  168.    $B3Troop = GUICtrlRead($Barrack03)
  169.    $B4Troop = GUICtrlRead($Barrack04)
  170.    $MinGold = Number(GUICtrlRead($MinGoldInput))
  171.    $MinElixir = Number(GUICtrlRead($MinElixirInput))
  172.    If GUICtrlRead($MeetAll) = $GUI_CHECKED Then
  173.       $SearchMode = 2
  174.    Else
  175.       $SearchMode = 1
  176.    EndIf
  177.    $B1Pos[0] = IniRead($Config, "Barrack 01", "X", "0")
  178.    $B1Pos[1] = IniRead($Config, "Barrack 01", "Y", "0")
  179.    $B2Pos[0] = IniRead($Config, "Barrack 02", "X", "0")
  180.    $B2Pos[1] = IniRead($Config, "Barrack 02", "Y", "0")
  181.    $B3Pos[0] = IniRead($Config, "Barrack 03", "X", "0")
  182.    $B3Pos[1] = IniRead($Config, "Barrack 03", "Y", "0")
  183.    $B4Pos[0] = IniRead($Config, "Barrack 04", "X", "0")
  184.    $B4Pos[1] = IniRead($Config, "Barrack 04", "Y", "0")
  185. EndFunc
  186.  
  187. #Region ##### TRAIN #####
  188. Func LocateBarrack()
  189.    Local $ClickCheck, $LocateCheck = 0
  190.    While 1
  191.       While 1
  192.          If $RunState = False Then
  193.             ExitLoop(2)
  194.          EndIf
  195.          If $B1Pos[0] = 0 Then
  196.             $ClickCheck = MsgBox(6+262144, "Locate first barrack", "Click Continue then click on your first barrack. Cancel if not available. Try again to start over.", 0, $BotGUI)
  197.             If $ClickCheck = 11 Then
  198.                WinActivate ($HWnD)
  199.                FindPos($B1Pos)
  200.                IniWrite ($Config, "Barrack 01", "X", $B1Pos[0])
  201.                IniWrite ($Config, "Barrack 01", "Y", $B1Pos[1])
  202.             ElseIf $ClickCheck = 10 Then
  203.                $B1Pos[0] = 0
  204.                $B2Pos[0] = 0
  205.                $B3Pos[0] = 0
  206.                $B4Pos[0] = 0
  207.                ExitLoop
  208.             EndIf
  209.             Sleep(500)
  210.          EndIf
  211.          If $RunState = False Then
  212.             ExitLoop(2)
  213.          EndIf
  214.          If $B2Pos[0] = 0 Then
  215.             $ClickCheck = MsgBox(6+262144, "Locate second barrack", "Click Continue then click on you second barrack. Cancel if not available. Try again to start over.", 0, $BotGUI)
  216.             If $ClickCheck = 11 Then
  217.                WinActivate ($HWnD)
  218.                FindPos($B2Pos)
  219.                IniWrite ($Config, "Barrack 02", "X", $B2Pos[0])
  220.                IniWrite ($Config, "Barrack 02", "Y", $B2Pos[1])
  221.             ElseIf $ClickCheck = 10 Then
  222.                $B1Pos[0] = 0
  223.                $B2Pos[0] = 0
  224.                $B3Pos[0] = 0
  225.                $B4Pos[0] = 0
  226.                ExitLoop
  227.             EndIf
  228.             Sleep(500)
  229.          EndIf
  230.          If $RunState = False Then
  231.             ExitLoop(2)
  232.          EndIf
  233.          If $B3Pos[0] = 0 Then
  234.             $ClickCheck = MsgBox(6+262144, "Locate third barrack", "Click Continue then click on your third barrack. Cancel if not available. Try again to start over.", 0, $BotGUI)
  235.             If $ClickCheck = 11 Then
  236.                WinActivate ($HWnD)
  237.                FindPos($B3Pos)
  238.                IniWrite ($Config, "Barrack 03", "X", $B3Pos[0])
  239.                IniWrite ($Config, "Barrack 03", "Y", $B3Pos[1])
  240.             ElseIf $ClickCheck = 10 Then
  241.                $B1Pos[0] = 0
  242.                $B2Pos[0] = 0
  243.                $B3Pos[0] = 0
  244.                $B4Pos[0] = 0
  245.                ExitLoop
  246.             EndIf
  247.             Sleep(500)
  248.          EndIf
  249.          If $RunState = False Then
  250.             ExitLoop(2)
  251.          EndIf
  252.          If $B4Pos[0] = 0 Then
  253.             $ClickCheck = MsgBox(6+262144, "Locate fourth barrack", "Click Continue then click on your fourth barrack. Cancel if not available. Try again to start over.", 0, $BotGUI)
  254.             If $ClickCheck = 11 Then
  255.                WinActivate ($HWnD)
  256.                FindPos($B4Pos)
  257.                IniWrite ($Config, "Barrack 04", "X", $B4Pos[0])
  258.                IniWrite ($Config, "Barrack 04", "Y", $B4Pos[1])
  259.             ElseIf $ClickCheck = 10 Then
  260.                $B1Pos[0] = 0
  261.                $B2Pos[0] = 0
  262.                $B3Pos[0] = 0
  263.                $B4Pos[0] = 0
  264.                ExitLoop
  265.             EndIf
  266.             Sleep(500)
  267.          EndIf
  268.          ExitLoop(2)
  269.       WEnd
  270.    WEnd
  271. EndFunc
  272.  
  273. Func TrainBarrack($x, $y, $z)
  274.    While 1
  275.       If $RunState = False Then
  276.          ExitLoop
  277.       EndIf
  278.       ControlClick ($HWnD, "","", "left", "1", $x, $y)
  279.       Sleep(1000)
  280.       ControlClick ($HWnD, "","", "left", "1", 560*$x_ratio, 490*$y_ratio)
  281.       Sleep(1000)
  282.       Select
  283.       Case $z = "Barbarian"
  284.          For $i = 1 To 65 Step 1
  285.             ControlClick ($HWnD, "","", "left", "1", 220*$x_ratio, 270*$y_ratio)
  286.             If $RunState = False Then
  287.                ExitLoop
  288.             EndIf
  289.             Sleep(50)
  290.          Next
  291.       Case $z = "Archer"
  292.          For $i = 1 To 65 Step 1
  293.             ControlClick ($HWnD, "","", "left", "1", 310*$x_ratio, 270*$y_ratio)
  294.             If $RunState = False Then
  295.                ExitLoop
  296.             EndIf
  297.             Sleep(50)
  298.          Next
  299.       Case $z = "Goblin"
  300.          For $i = 1 To 65 Step 1
  301.             ControlClick ($HWnD, "","", "left", "1", 490*$x_ratio, 270*$y_ratio)
  302.             If $RunState = False Then
  303.                ExitLoop
  304.             EndIf
  305.             Sleep(50)
  306.          Next
  307.       Case $z = "Giant"
  308.          For $i = 1 To 15 Step 1
  309.             ControlClick ($HWnD, "","", "left", "1", 400*$x_ratio, 270*$y_ratio)
  310.             If $RunState = False Then
  311.                ExitLoop
  312.             EndIf
  313.             Sleep(50)
  314.          Next
  315.       EndSelect
  316.       If $RunState = False Then
  317.          ExitLoop
  318.       EndIf
  319.       Sleep(1000)
  320.       ControlClick ($HWnD, "","", "left", "1", 656*$x_ratio, 113*$y_ratio)
  321.       Sleep(1000)
  322.       ExitLoop
  323.    WEnd
  324. EndFunc
  325.  
  326. Func Train()
  327.    If $B1Pos[0]*$B2Pos[0]*$B3Pos[0]*$B4Pos[0] <> 0 Then
  328.       GUICtrlSetData($Results, "Barracks' position loaded successfully" & @CRLF, -1)
  329.       GUICtrlSetData($Results, "Barrack 01: " & $B1Pos[0] & ", " & $B1Pos[1] & @CRLF, -1)
  330.       GUICtrlSetData($Results, "Barrack 02: " & $B2Pos[0] & ", " & $B2Pos[1] & @CRLF, -1)
  331.       GUICtrlSetData($Results, "Barrack 03: " & $B3Pos[0] & ", " & $B3Pos[1] & @CRLF, -1)
  332.       GUICtrlSetData($Results, "Barrack 04: " & $B4Pos[0] & ", " & $B4Pos[1] & @CRLF, -1)
  333.    EndIf
  334.    GUICtrlSetData($Results,"Begin training" & @CRLF, -1)
  335.    If $B1Pos[0] <> 0 Then
  336.       TrainBarrack($B1Pos[0],$B1Pos[1],$B1Troop)
  337.    EndIf
  338.    If $B2Pos[0] <> 0 Then
  339.       TrainBarrack($B2Pos[0],$B2Pos[1],$B2Troop)
  340.    EndIf
  341.    If $B3Pos[0] <> 0 Then
  342.       TrainBarrack($B3Pos[0],$B3Pos[1],$B3Troop)
  343.    EndIf
  344.    If $B4Pos[0] <> 0 Then
  345.       TrainBarrack($B4Pos[0],$B4Pos[1],$B4Troop)
  346.    EndIf
  347.    GUICtrlSetData($Results, "Training complete" & @CRLF, -1)
  348. EndFunc
  349. #EndRegion ##### TRAIN #####
  350.  
  351. #Region ##### ATTACK #####
  352. Func Attack()
  353.    While 1
  354.       If $RunState = False Then
  355.          ExitLoop
  356.       EndIf
  357.       AssignTroop()
  358.       If $RunState = False Then
  359.          ExitLoop
  360.       EndIf
  361.       PrepareAttack()
  362.       If $RunState = False Then
  363.          ExitLoop
  364.       EndIf
  365.       GUICtrlSetData($Results, "Attack started. Begin searching.." & @CRLF, -1)
  366.       VillageSearch()
  367.       If $RunState = False Then
  368.          ExitLoop
  369.       EndIf
  370.       Sleep(5000)
  371.       DropTroop()
  372.       If $RunState = False Then
  373.          ExitLoop
  374.       EndIf
  375.       ReturnHome()
  376.       ExitLoop
  377.    WEnd
  378. EndFunc
  379.  
  380. Func PrepareAttack()
  381.    While 1
  382.       If $RunState = False Then
  383.          ExitLoop
  384.       EndIf
  385.       ControlClick ($HWnD, "","", "left", "1", 50*$x_ratio, 500*$y_ratio) ;Click Attack
  386.       If $RunState = False Then
  387.          ExitLoop
  388.       EndIf
  389.       Sleep(2000)
  390.       ControlClick ($HWnD, "","", "left", "1", 190*$x_ratio, 420*$y_ratio) ;Click Find a Match
  391.       If $RunState = False Then
  392.          ExitLoop
  393.       EndIf
  394.       Sleep(2000)
  395.       ControlClick ($HWnD, "","", "left", "1", 470*$x_ratio, 330*$y_ratio) ;Click Break Shield
  396.       ExitLoop
  397.    WEnd
  398. EndFunc
  399.  
  400. Func CheckSearch()
  401.    $Pixel = PixelSearch(0,0,900,700,0xC00000,20,1,$HWnD) ;End Battle Button
  402.    While Not IsArray($Pixel)
  403.       $Pixel = PixelSearch(0,0,900,700,0xC00000,20,1,$HWnD) ;End Battle Button
  404.       Sleep(200)
  405.       If $RunState = False Then
  406.          ExitLoop
  407.       EndIf
  408.    WEnd
  409. EndFunc
  410.  
  411. Func VillageSearch()
  412.    While 1
  413.       If $RunState = False Then
  414.          ExitLoop
  415.       EndIf
  416.       CheckSearch()
  417.       If $RunState = False Then
  418.       ExitLoop
  419.       EndIf
  420.       ComputeValue()
  421.       If $RunState = False Then
  422.          ExitLoop
  423.       EndIf
  424.       CompareValue()
  425.       If $RunState = False Then
  426.          ExitLoop
  427.       EndIf
  428.       While $SearchCheck = 0
  429.          If $RunState = False Then
  430.             ExitLoop
  431.          EndIf
  432.          ControlClick ($HWnD, "","", "left", "1", 715*$x_ratio, 405*$y_ratio) ;Click Next
  433.          If $RunState = False Then
  434.             ExitLoop
  435.          EndIf
  436.          CheckSearch()
  437.          If $RunState = False Then
  438.             ExitLoop
  439.          EndIf
  440.          ComputeValue()
  441.          If $RunState = False Then
  442.             ExitLoop
  443.          EndIf
  444.          CompareValue()
  445.          If $RunState = False Then
  446.             ExitLoop
  447.          EndIf
  448.       WEnd
  449.       If $RunState = False Then
  450.          ExitLoop
  451.       EndIf
  452.       GUICtrlSetData($Results, "Enemy Found!" & @CRLF, -1)
  453.       TrayTip ("Enemy Found!","Requirement met:  Gold: " & $Gold & ". Elixir: " & $Elixir, 0, $TIP_ICONASTERISK)
  454.       ExitLoop
  455.    WEnd
  456. EndFunc
  457.  
  458. Func CheckTroop($a)
  459.    If $B1Troop = $a Or $B2Troop = $a Or $B3Troop = $a Or $B4Troop = $a Then
  460.       Return True
  461.    Else
  462.       Return False
  463.    EndIf
  464. EndFunc
  465.  
  466. Func AssignTroop()
  467.    If CheckTroop("Barbarian") Then
  468.       $Barbarian[0] = $Troop[0][0]
  469.       $Barbarian[1] = $Troop[0][1]
  470.       If CheckTroop("Archer") Then
  471.          $Archer[0] = $Troop[1][0]
  472.          $Archer[1] = $Troop[1][1]
  473.          If CheckTroop("Goblin") Then
  474.             $Goblin[0] = $Troop[2][0]
  475.             $Goblin[1] = $Troop[2][1]
  476.             If CheckTroop("Giant") Then
  477.                $Giant[0] = $Troop[3][0]
  478.                $Giant[1] = $Troop[3][1]
  479.                ;MsgBox(0,"","Barbarian, Archer, Goblin, Giant")
  480.             EndIf
  481.          ElseIf CheckTroop("Giant") Then
  482.             $Giant[0] = $Troop[2][0]
  483.             $Giant[1] = $Troop[2][1]
  484.             ;MsgBox(0,"","Barbarian, Archer, Giant")
  485.          EndIf
  486.       ElseIf CheckTroop("Goblin") Then
  487.          $Goblin[0] = $Troop[1][0]
  488.          $Goblin[1] = $Troop[1][1]
  489.          If CheckTroop("Giant") Then
  490.             $Giant[0] = $Troop[2][0]
  491.             $Giant[1] = $Troop[2][1]
  492.             ;MsgBox(0,"","Barbarian, Goblin, Giant")
  493.          EndIf
  494.       ElseIf CheckTroop("Giant") Then
  495.          $Giant[0] = $Troop[1][0]
  496.          $Giant[1] = $Troop[1][1]
  497.          ;MsgBox(0,"","Barbarian, Giant")
  498.       EndIf
  499.    ElseIf CheckTroop("Archer") Then
  500.       $Archer[0] = $Troop[0][0]
  501.       $Archer[1] = $Troop[0][1]
  502.       If CheckTroop("Goblin") Then
  503.          $Goblin[0] = $Troop[1][0]
  504.          $Goblin[1] = $Troop[1][1]
  505.          If CheckTroop("Giant") Then
  506.             $Giant[0] = $Troop[2][0]
  507.             $Giant[1] = $Troop[2][1]
  508.             ;MsgBox(0,"","Archer, Goblin, Giant")
  509.          EndIf
  510.       ElseIf CheckTroop("Giant") Then
  511.          $Giant[0] = $Troop[1][0]
  512.          $Giant[1] = $Troop[1][1]
  513.          ;MsgBox(0,"","Archer, Giant")
  514.       EndIf
  515.    ElseIf CheckTroop("Goblin") Then
  516.       $Goblin[0] = $Troop[0][0]
  517.       $Goblin[1] = $Troop[0][1]
  518.       If CheckTroop("Giant") Then
  519.          $Giant[0] = $Troop[1][0]
  520.          $Giant[1] = $Troop[1][1]
  521.          ;MsgBox(0,"","Goblin, Giant")
  522.       EndIf
  523.    ElseIf CheckTroop("Giant") Then
  524.       $Giant[0] = $Troop[0][0]
  525.       $Giant[1] = $Troop[0][1]
  526.       ;MsgBox(0,"","Giant")
  527.    EndIf
  528. EndFunc
  529.  
  530. Func DropTroop()
  531.    While 1
  532.       GUICtrlSetData($Results, "Start to drop troops" & @CRLF, -1)
  533.       If $RunState = False Then
  534.          ExitLoop
  535.       EndIf
  536.       DropCombo($UpLeft)
  537.       If $RunState = False Then
  538.          ExitLoop
  539.       EndIf
  540.       DropCombo($UpRight)
  541.       If $RunState = False Then
  542.          ExitLoop
  543.       EndIf
  544.       DropCombo($UpLeft)
  545.       If $RunState = False Then
  546.          ExitLoop
  547.       EndIf
  548.       DropCombo($UpRight)
  549.       If $RunState = False Then
  550.          ExitLoop
  551.       EndIf
  552.       ExitLoop
  553.    WEnd
  554. EndFunc
  555.  
  556. Func DropSingle($T, $W)
  557.    While 1
  558.       If $RunState = False Then
  559.          ExitLoop
  560.       EndIf
  561.       If CheckTroop($T) Then
  562.          Select
  563.          Case $T = "Giant"
  564.             ControlClick ($HWnD, "","", "left", "1", $Giant[0], $Giant[1])
  565.             Sleep(300)
  566.             For $i = 1 to 5 Step 1
  567.                ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  568.                Sleep(100)
  569.             Next
  570.             Sleep(300)
  571.          If $RunState = False Then
  572.             ExitLoop
  573.          EndIf
  574.          Case $T = "Barbarian"
  575.             ControlClick ($HWnD, "","", "left", "1", $Barbarian[0], $Barbarian[1])
  576.             Sleep(300)
  577.             For $x = 0 to 5 Step 1
  578.                For $i = 0 to 4 Step 1
  579.                   ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  580.                   Sleep(100)
  581.                Next
  582.             Next
  583.             Sleep(300)
  584.          If $RunState = False Then
  585.             ExitLoop
  586.          EndIf
  587.          Case $T = "Archer"
  588.             ControlClick ($HWnD, "","", "left", "1", $Archer[0], $Archer[1])
  589.             Sleep(300)
  590.             For $x = 0 to 5 Step 1
  591.                For $i = 0 to 4 Step 1
  592.                   ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  593.                   Sleep(100)
  594.                Next
  595.             Next
  596.             Sleep(300)
  597.          If $RunState = False Then
  598.             ExitLoop
  599.          EndIf
  600.          Case $T = "Goblin"
  601.             ControlClick ($HWnD, "","", "left", "1", $Goblin[0], $Goblin[1])
  602.             Sleep(300)
  603.             For $x = 0 to 5 Step 1
  604.                For $i = 0 to 4 Step 1
  605.                   ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  606.                   Sleep(100)
  607.                Next
  608.             Next
  609.             Sleep(300)
  610.          EndSelect
  611.       EndIf
  612.       ExitLoop
  613.    WEnd
  614. EndFunc
  615.  
  616. Func DropCombo($W)
  617.    While 1
  618.       If $RunState = False Then
  619.          ExitLoop
  620.       EndIf
  621.       If CheckTroop("Giant") Then
  622.          ControlClick ($HWnD, "","", "left", "1", $Giant[0], $Giant[1])
  623.          Sleep(500)
  624.          For $i = 1 to 5 Step 1
  625.             ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  626.             Sleep(500)
  627.          Next
  628.          Sleep(2000)
  629.       EndIf
  630.       If $RunState = False Then
  631.          ExitLoop
  632.       EndIf
  633.       If CheckTroop("Barbarian") Then
  634.          ControlClick ($HWnD, "","", "left", "1", $Barbarian[0], $Barbarian[1])
  635.          Sleep(300)
  636.          For $x = 0 to 7 Step 1
  637.             For $i = 0 to 4 Step 1
  638.                ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  639.                Sleep(100)
  640.             Next
  641.          Next
  642.          Sleep(500)
  643.       EndIf
  644.       If $RunState = False Then
  645.          ExitLoop
  646.       EndIf
  647.       If CheckTroop("Archer") Then
  648.          ControlClick ($HWnD, "","", "left", "1", $Archer[0], $Archer[1])
  649.          Sleep(300)
  650.          For $x = 0 to 7 Step 1
  651.             For $i = 0 to 4 Step 1
  652.                ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  653.                Sleep(100)
  654.             Next
  655.          Next
  656.          Sleep(500)
  657.       EndIf
  658.       If $RunState = False Then
  659.          ExitLoop
  660.       EndIf
  661.       If CheckTroop("Goblin") Then
  662.          ControlClick ($HWnD, "","", "left", "1", $Goblin[0], $Goblin[1])
  663.          Sleep(300)
  664.          For $x = 0 to 7 Step 1
  665.             For $i = 0 to 4 Step 1
  666.                ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  667.                Sleep(100)
  668.             Next
  669.          Next
  670.          Sleep(500)
  671.       EndIf
  672.       ExitLoop
  673.    WEnd
  674. EndFunc
  675.  
  676. Func ReadValue(ByRef $x, ByRef $y)
  677.    While 1
  678.       If $RunState = False Then
  679.          ExitLoop
  680.       EndIf
  681.       $Read = _TesseractWinCapture($HWnD,"",0,"",1,2,$Left*$x_ratio,$Top*$y_ratio,$Right*$x_ratio,$Bottom*$y_ratio,0)   ;Capture screen region with gold and elixir
  682.       $Read = StringRegExpReplace(StringRegExpReplace($Read, "(\v)+", @CRLF), "\A\v|\v\Z", "")  ;Strip whitespaces & blank lines and split into array
  683.       $Read = StringSplit($Read, @CRLF, 1)
  684.       If $RunState = False Then
  685.          ExitLoop
  686.       EndIf
  687.       While UBound($Read) < 5
  688.          If $RunState = False Then
  689.             ExitLoop
  690.          EndIf
  691.          $Read = _TesseractWinCapture($HWnD,"",0,"",1,2,$Left*$x_ratio,$Top*$y_ratio,$Right*$x_ratio,$Bottom*$y_ratio,0)    ;Capture screen region with gold and elixir
  692.          $Read = StringRegExpReplace(StringRegExpReplace($Read, "(\v)+", @CRLF), "\A\v|\v\Z", "")   ;Strip whitespaces & blank lines and split into array
  693.          $Read = StringSplit($Read, @CRLF, 1)
  694.       WEnd
  695.       If $RunState = False Then
  696.          ExitLoop
  697.       EndIf
  698.       $x = Number(StringRegExpReplace($Read[2], "[^[:digit:]]", ""))    ;Convert gold to number
  699.       $y = Number(StringRegExpReplace($Read[3], "[^[:digit:]]", ""))    ;Convert exlir to number
  700.       ExitLoop
  701.    WEnd
  702. EndFunc
  703.  
  704. Func ComputeValue()
  705.    While 1
  706.       Local $G[3],$E[3]
  707.       ReadValue($G[0], $E[0])
  708.       ReadValue($G[1], $E[1])
  709.       ReadValue($G[2], $E[2])
  710.       $Gold = _ArrayMin($G)
  711.       $Elixir = _ArrayMin($E)
  712.       If $RunState = False Then
  713.          ExitLoop
  714.       EndIf
  715.       GUICtrlSetData($Results, "(" & $SearchCount+1 & ") Gold: " & $Gold & ". Elixir: " & $Elixir & @CRLF, -1)
  716.       $SearchCount += 1 ; Counter for number of searches
  717.       ExitLoop
  718.    WEnd
  719. EndFunc
  720.  
  721. Func CompareValue()
  722.    If $Gold >= $MinGold Then
  723.       If $Elixir >= $MinElixir Then
  724.          ;MsgBox(0, "Gold & Elixir Check", "Gold: " & $Gold & @CR & "Elixir: " & $Elixir & @CR & "Requirement met.")
  725.          Select
  726.             Case $SearchMode = 1
  727.                $SearchCheck = 1
  728.             Case $SearchMode = 2
  729.                $SearchCheck = 1
  730.             Case Else
  731.                $SearchCheck = 0
  732.          EndSelect
  733.       Else
  734.          ;MsgBox(0, "Gold & Elixir Check", "Gold: " & $Gold & @CR & "Elixir: " & $Elixir & @CR &  "Not enough " & $MinElixir & " Elixir.")
  735.          Select
  736.             Case $SearchMode = 1
  737.                $SearchCheck = 1
  738.             Case $SearchMode = 2
  739.                $SearchCheck = 0
  740.             Case Else
  741.                $SearchCheck = 0
  742.          EndSelect
  743.       EndIf
  744.    Else
  745.       If $Elixir >= $MinElixir Then
  746.          ;MsgBox(0, "Gold & Elixir Check", "Gold: " & $Gold & @CR & "Elixir: " & $Elixir & @CR & "Not enough " & $MinGold & " Gold.")
  747.          Select
  748.             Case $SearchMode = 1
  749.                $SearchCheck = 1
  750.             Case $SearchMode = 2
  751.                $SearchCheck = 0
  752.             Case Else
  753.                $SearchCheck = 0
  754.          EndSelect
  755.       Else
  756.          ;MsgBox(0, "Gold & Elixir Check", "Gold: " & $Gold & @CR & "Elixir: " & $Elixir & @CR & "Not enough " & $MinGold & " Gold and " & $MinElixir & " Elixir." )
  757.          Select
  758.             Case $SearchMode = 1
  759.                $SearchCheck = 0
  760.             Case $SearchMode = 2
  761.                $SearchCheck = 0
  762.             Case Else
  763.                $SearchCheck = 0
  764.          EndSelect
  765.       EndIf
  766.    EndIf
  767. EndFunc
  768. #EndRegion ##### ATTACK #####
  769.  
  770. #Region ##### MINI FUNCTION #####
  771.  
  772. #cs
  773. Func MainScreen()
  774.    While 1
  775.       If $RunState = False Then
  776.          ExitLoop
  777.       EndIf
  778.       GUICtrlSetData($Results, "Waiting for Clash of Clans to load..." & @CRLF, -1)
  779.       $Pixel = PixelGetColor(630*$x_ratio, 390*$y_ratio, $HWnD)
  780.       If Hex($Pixel,6) = 282828 Or $Pixel = 2962704 Then
  781.          ControlClick ($HWnD, "","", "left", "1", 293*$x_ratio, 329*$y_ratio)
  782.          If $RunState = False Then
  783.             ExitLoop
  784.          EndIf
  785.          Sleep(5000)
  786.       EndIf
  787.       $Pixel = PixelSearch(0,0,900,700,0xF8ED90,0,1,$HWnD)
  788.       If IsArray($Pixel) Then
  789.          ControlClick ($HWnD, "","", "left", "1", 400*$x_ratio, 450*$y_ratio)
  790.          If $RunState = False Then
  791.             ExitLoop
  792.          EndIf
  793.          Sleep(5000)
  794.       EndIf
  795.       $Pixel = PixelSearch(0,0,900,700,$Attack,0,1,$HWnD)
  796.       While Not IsArray($Pixel)
  797.          $Pixel = PixelSearch(0,0,900,700,$Attack,0,1,$HWnD)
  798.          If $RunState = False Then
  799.             ExitLoop
  800.          EndIf
  801.          Sleep(200)
  802.       WEnd
  803.       GUICtrlSetData($Results, "In main screen" & @CRLF, -1)
  804.       ExitLoop
  805.    WEnd
  806. EndFunc
  807. #ce
  808. Func CheckScreenChange()
  809.    $Pixel = PixelChecksum(0.25*$BSsize[0],0.25*$BSsize[1], 0.75*$BSsize[0], 0.75*$BSsize[1], 2, $hWnD)
  810.    Sleep(500)
  811.    $Pixel1 = PixelChecksum(0.25*$BSsize[0],0.25*$BSsize[1], 0.75*$BSsize[0], 0.75*$BSsize[1], 2, $hWnD)
  812.    If $Pixel = $Pixel1 Then
  813.       Return False
  814.    Else
  815.       Return True
  816.    EndIf
  817. EndFunc
  818.  
  819. Func MainScreen()
  820.    If Not CheckScreenChange() Then
  821.       ControlClick ($HWnD, "","", "left", "1", 293*$x_ratio, 329*$y_ratio)
  822.       ControlClick ($HWnD, "","", "left", "1", 400*$x_ratio, 408*$y_ratio)
  823.       GUICtrlSetData($Results, "Waiting for Clash of Clans to load..." & @CRLF, -1)
  824.       Sleep(5000)
  825.    EndIf
  826.    While Not CheckScreenChange()
  827.       Sleep(1000)
  828.    WEnd
  829.    GUICtrlSetData($Results, "In main screen" & @CRLF, -1)
  830. EndFunc
  831.  
  832. Func Idle($s)
  833.    For $i = 1 to $s/60 Step 1
  834.       If $RunState = False Then
  835.          ExitLoop
  836.       EndIf
  837.       Train()
  838.       If $RunState = False Then
  839.          ExitLoop
  840.       EndIf
  841.       Sleep(45000)
  842.    Next
  843. EndFunc
  844.  
  845. Func ReturnHome()
  846.    #cs
  847.    While CheckScreenChange(0.25, 0.9, 0.75, 0.95)
  848.       Sleep(1000)
  849.    WEnd
  850.    GUICtrlSetData($Results, "Return Home" & @CRLF, -1)
  851.    ControlClick ($HWnD, "","", "left", "1", 400*$x_ratio, 450*$y_ratio)
  852.    #ce
  853.    $tStart = TimerInit()
  854.    $tStop = TimerDiff($tStart)
  855.    While $tStop < 160000
  856.       If $RunState = False Then
  857.          ExitLoop
  858.       EndIf
  859.       Sleep(1000)
  860.    WEnd
  861.    GUICtrlSetData($Results, "Return Home" & @CRLF, -1)
  862.    ControlClick ($HWnD, "","", "left", "1", 400*$x_ratio, 450*$y_ratio)
  863. EndFunc
  864.  
  865. Func ZoomOut()
  866.    GUICtrlSetData($Results, "Zoom Out" & @CRLF, -1)
  867.    For $i = 1 To 20 Step 1
  868.       ControlSend($HWnD, "", "", "{DOWN}", 0)
  869.       If $RunState = False Then
  870.          ExitLoop
  871.       EndIf
  872.       Sleep(500)
  873.    Next
  874. EndFunc
  875.  
  876. Func Button($hex)
  877.    $Count = 0
  878.    $Pixel = PixelSearch(0,0,900,700,$hex,0,1,$HWnD) ;Attack! button
  879.    While Not IsArray($Pixel) And $Count < 5
  880.       $Pixel = PixelSearch(0,0,900,700,$hex,0,1,$HWnD) ;Attack! button
  881.       Sleep(200)
  882.       $Count += 1
  883.    WEnd
  884.    If $Count < 5 Then
  885.       ControlClick ($HWnD, "","", "left", "1", $Pixel[0], $Pixel[1])
  886.    EndIf
  887.    Sleep(1000)
  888. EndFunc
  889.  
  890. Func Terminate()
  891.    Exit
  892. EndFunc
  893.  
  894. Func FindPos(ByRef $Pos)
  895.    Opt ("MouseCoordMode", 2)
  896.    Local $x = 1
  897.    While $x = 1
  898.       If _IsPressed("01") Then
  899.          $Pos = MouseGetPos()
  900.          $x = 0
  901.       EndIf
  902.    WEnd
  903.    Opt ("MouseCoordMode", 0)
  904. EndFunc
  905.  
  906. Func ClearBox()
  907.    GUICtrlDelete($Results)
  908.    $Results = GUICtrlCreateEdit("", 20, 140, 260, 225, BitOR($SS_SUNKEN,$ES_READONLY, $SS_LEFT))
  909. EndFunc
  910.  
  911. Func LB()
  912.    ClearBox()
  913.    $RunState = True
  914.    GUICtrlSetData($Button,"STOP")
  915.    MainScreen()
  916.    ZoomOut()
  917.    $B1Pos[0] = 0
  918.    $B2Pos[0] = 0
  919.    $B3Pos[0] = 0
  920.    $B4Pos[0] = 0
  921.    LocateBarrack()
  922.    GUICtrlSetData($LBButton,"Locate Barracks")
  923.    GUICtrlSetData($Results, "Barracks located" & @CRLF, -1)
  924.    GUICtrlSetData($Results, "Barrack 01: " & $B1Pos[0] & ", " & $B1Pos[1] & @CRLF, -1)
  925.    GUICtrlSetData($Results, "Barrack 02: " & $B2Pos[0] & ", " & $B2Pos[1] & @CRLF, -1)
  926.    GUICtrlSetData($Results, "Barrack 03: " & $B3Pos[0] & ", " & $B3Pos[1] & @CRLF, -1)
  927.    GUICtrlSetData($Results, "Barrack 04: " & $B4Pos[0] & ", " & $B4Pos[1] & @CRLF, -1)
  928.    $RunState = False
  929.    GUICtrlSetData($Button,"START")
  930. EndFunc
  931.  
  932. Func Tr()
  933.    ClearBox()
  934.    $RunState = True
  935.    GUICtrlSetData($Button,"STOP")
  936.    MainScreen()
  937.    GetInput()
  938.    ZoomOut()
  939.    Train()
  940.    $RunState = False
  941.    GUICtrlSetData($TrButton, "Train")
  942.    GUICtrlSetData($Button,"STOP")
  943. EndFunc
  944.  
  945. Func Atk()
  946.    ClearBox()
  947.    $RunState = True
  948.    GUICtrlSetData($Button,"STOP")
  949.    MainScreen()
  950.    GetInput()
  951.    ZoomOut()
  952.    Attack()
  953.    GUICtrlSetData($AtkButton, "Attack")
  954.    $RunState = False
  955.    GUICtrlSetData($Button,"START")
  956. EndFunc
  957.  
  958. Func SearchFunction()
  959.    ClearBox()
  960.    $RunState = True
  961.    GUICtrlSetData($Button,"STOP")
  962.    GetInput()
  963.    ControlClick ($HWnD, "","", "left", "1", 715*$x_ratio, 405*$y_ratio) ;Click Next
  964.    VillageSearch()
  965.    GUICtrlSetData($VSButton, "VILLAGE SEARCH")
  966.    $RunState = False
  967.    GUICtrlSetData($Button,"START")
  968. EndFunc
  969.  
  970. #cs
  971. Func Pause()
  972.    $Paused = NOT $Paused
  973.    While $Paused
  974.       Sleep(100)
  975.    TrayTip("Script Paused","SHIFT+1 to Unpause", 0, $TIP_ICONASTERISK)
  976.    WEnd
  977. EndFunc
  978.  
  979. Func Restart()
  980.    ControlClick ($HWnD, "","", "left", "1", 125, 575)
  981.    Sleep(2000)
  982.    ControlClick ($HWnD, "","", "left", "1", 125, 577)
  983.    Sleep(2000)
  984.    ControlClick ($HWnD, "","", "left", "1", 205, 575)
  985.    Sleep(2000)
  986.    MouseClickDrag("left", 700, 300, 700, 120)
  987.    Sleep(2000)
  988.    ControlClick ($HWnD, "","", "left", "1", 290, 160)
  989.    Sleep(50000)
  990. EndFunc
  991.  
  992. Func Initiate()
  993.    ControlClick ($HWnD, "","", "left", "1", 290, 150) ;Click BlueStacks
  994.    Sleep(60000)
  995.    ZoomOut()
  996.    Sleep(10000)
  997. EndFunc
  998. #ce
  999. #EndRegion ##### MINI FUNCTION ######
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement