Guest User

CoC

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