Advertisement
Guest User

Clash of Clans

a guest
Dec 17th, 2014
647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 24.31 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. WinActivate($BotGUI)
  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.       Idle(900)
  141.       If $RunState = False Then
  142.          ExitLoop
  143.       EndIf
  144.       Attack()          ;Prepare Attack, Read Value, Compute Value, Compare Value, Search Village, Drop Troop, Return Home
  145.       If $RunState = False Then
  146.          ExitLoop
  147.       EndIf
  148.    WEnd
  149. EndFunc
  150.  
  151. Func GetInput()
  152.    $B1Troop = GUICtrlRead($Barrack01)
  153.    $B2Troop = GUICtrlRead($Barrack02)
  154.    $B3Troop = GUICtrlRead($Barrack03)
  155.    $B4Troop = GUICtrlRead($Barrack04)
  156.    $MinGold = Number(GUICtrlRead($MinGoldInput))
  157.    $MinElixir = Number(GUICtrlRead($MinElixirInput))
  158.    If GUICtrlRead($MeetAll) = $GUI_CHECKED Then
  159.       $SearchMode = 2
  160.    Else
  161.       $SearchMode = 1
  162.    EndIf
  163.    $B1Pos[0] = IniRead($Config, "Barrack 01", "X", "0")
  164.    $B1Pos[1] = IniRead($Config, "Barrack 01", "Y", "0")
  165.    $B2Pos[0] = IniRead($Config, "Barrack 02", "X", "0")
  166.    $B2Pos[1] = IniRead($Config, "Barrack 02", "Y", "0")
  167.    $B3Pos[0] = IniRead($Config, "Barrack 03", "X", "0")
  168.    $B3Pos[1] = IniRead($Config, "Barrack 03", "Y", "0")
  169.    $B4Pos[0] = IniRead($Config, "Barrack 04", "X", "0")
  170.    $B4Pos[1] = IniRead($Config, "Barrack 04", "Y", "0")
  171.    GUICtrlSetData($Results, "Barracks' position loaded successfully" & @CRLF & "Barrack 01: " & $B1Pos[0] & ", " & $B1Pos[1] & @CRLF, -1)
  172.    GUICtrlSetData($Results, "Barrack 02: " & $B2Pos[0] & ", " & $B2Pos[1] & @CRLF, -1)
  173.    GUICtrlSetData($Results, "Barrack 03: " & $B3Pos[0] & ", " & $B3Pos[1] & @CRLF, -1)
  174.    GUICtrlSetData($Results, "Barrack 04: " & $B4Pos[0] & ", " & $B4Pos[1] & @CRLF, -1)
  175. EndFunc
  176.  
  177. #Region ##### TRAIN #####
  178. Func LocateBarrack()
  179.    Local $ClickCheck, $LocateCheck = 0
  180.    While 1
  181.       While 1
  182.          If $RunState = False Then
  183.             ExitLoop(2)
  184.          EndIf
  185.          If $B1Pos[0] = 0 Then
  186.             $ClickCheck = MsgBox(6+65536, "Locate first barrack", "Click Continue then click on your first barrack. Cancel if not available. Try again to start over.", 0, $BotGUI)
  187.             If $ClickCheck = 11 Then
  188.                WinActivate ($HWnD)
  189.                FindPos($B1Pos)
  190.                IniWrite ($Config, "Barrack 01", "X", $B1Pos[0])
  191.                IniWrite ($Config, "Barrack 01", "Y", $B1Pos[1])
  192.             ElseIf $ClickCheck = 10 Then
  193.                $B1Pos[0] = 0
  194.                $B2Pos[0] = 0
  195.                $B3Pos[0] = 0
  196.                $B4Pos[0] = 0
  197.                ExitLoop
  198.             EndIf
  199.             Sleep(500)
  200.          EndIf
  201.          If $RunState = False Then
  202.             ExitLoop(2)
  203.          EndIf
  204.          If $B2Pos[0] = 0 Then
  205.             $ClickCheck = MsgBox(6+65536, "Locate second barrack", "Click Continue then click on you second barrack. Cancel if not available. Try again to start over.", 0, $BotGUI)
  206.             If $ClickCheck = 11 Then
  207.                WinActivate ($HWnD)
  208.                FindPos($B2Pos)
  209.                IniWrite ($Config, "Barrack 02", "X", $B2Pos[0])
  210.                IniWrite ($Config, "Barrack 02", "Y", $B2Pos[1])
  211.             ElseIf $ClickCheck = 10 Then
  212.                $B1Pos[0] = 0
  213.                $B2Pos[0] = 0
  214.                $B3Pos[0] = 0
  215.                $B4Pos[0] = 0
  216.                ExitLoop
  217.             EndIf
  218.             Sleep(500)
  219.          EndIf
  220.          If $RunState = False Then
  221.             ExitLoop(2)
  222.          EndIf
  223.          If $B3Pos[0] = 0 Then
  224.             $ClickCheck = MsgBox(6+65536, "Locate third barrack", "Click Continue then click on your third barrack. Cancel if not available. Try again to start over.", 0, $BotGUI)
  225.             If $ClickCheck = 11 Then
  226.                WinActivate ($HWnD)
  227.                FindPos($B3Pos)
  228.                IniWrite ($Config, "Barrack 03", "X", $B3Pos[0])
  229.                IniWrite ($Config, "Barrack 03", "Y", $B3Pos[1])
  230.             ElseIf $ClickCheck = 10 Then
  231.                $B1Pos[0] = 0
  232.                $B2Pos[0] = 0
  233.                $B3Pos[0] = 0
  234.                $B4Pos[0] = 0
  235.                ExitLoop
  236.             EndIf
  237.             Sleep(500)
  238.          EndIf
  239.          If $RunState = False Then
  240.             ExitLoop(2)
  241.          EndIf
  242.          If $B4Pos[0] = 0 Then
  243.             $ClickCheck = MsgBox(6+65536, "Locate fourth barrack", "Click Continue then click on your fourth barrack. Cancel if not available. Try again to start over.", 0, $BotGUI)
  244.             If $ClickCheck = 11 Then
  245.                WinActivate ($HWnD)
  246.                FindPos($B4Pos)
  247.                IniWrite ($Config, "Barrack 04", "X", $B4Pos[0])
  248.                IniWrite ($Config, "Barrack 04", "Y", $B4Pos[1])
  249.             ElseIf $ClickCheck = 10 Then
  250.                $B1Pos[0] = 0
  251.                $B2Pos[0] = 0
  252.                $B3Pos[0] = 0
  253.                $B4Pos[0] = 0
  254.                ExitLoop
  255.             EndIf
  256.             Sleep(500)
  257.          EndIf
  258.          ExitLoop(2)
  259.       WEnd
  260.    WEnd
  261. EndFunc
  262.  
  263. Func TrainBarrack($x, $y, $z)
  264.    While 1
  265.       If $RunState = False Then
  266.          ExitLoop
  267.       EndIf
  268.       ControlClick ($HWnD, "","", "left", "1", $x, $y)
  269.       Sleep(1000)
  270.       ControlClick ($HWnD, "","", "left", "1", 560*$x_ratio, 490*$y_ratio)
  271.       Sleep(1000)
  272.       Select
  273.       Case $z = "Barbarian"
  274.          For $i = 1 To 65 Step 1
  275.             ControlClick ($HWnD, "","", "left", "1", 220*$x_ratio, 270*$y_ratio)
  276.             If $RunState = False Then
  277.                ExitLoop
  278.             EndIf
  279.             Sleep(50)
  280.          Next
  281.       Case $z = "Archer"
  282.          For $i = 1 To 65 Step 1
  283.             ControlClick ($HWnD, "","", "left", "1", 310*$x_ratio, 270*$y_ratio)
  284.             If $RunState = False Then
  285.                ExitLoop
  286.             EndIf
  287.             Sleep(50)
  288.          Next
  289.       Case $z = "Goblin"
  290.          For $i = 1 To 65 Step 1
  291.             ControlClick ($HWnD, "","", "left", "1", 490*$x_ratio, 270*$y_ratio)
  292.             If $RunState = False Then
  293.                ExitLoop
  294.             EndIf
  295.             Sleep(50)
  296.          Next
  297.       Case $z = "Giant"
  298.          For $i = 1 To 15 Step 1
  299.             ControlClick ($HWnD, "","", "left", "1", 400*$x_ratio, 270*$y_ratio)
  300.             If $RunState = False Then
  301.                ExitLoop
  302.             EndIf
  303.             Sleep(50)
  304.          Next
  305.       EndSelect
  306.       If $RunState = False Then
  307.          ExitLoop
  308.       EndIf
  309.       Sleep(1000)
  310.       ControlClick ($HWnD, "","", "left", "1", 656*$x_ratio, 113*$y_ratio)
  311.       Sleep(1000)
  312.       ExitLoop
  313.    WEnd
  314. EndFunc
  315.  
  316. Func Train()
  317.    GUICtrlSetData("Begin training" & @CRLF, -1)
  318.    If $B1Pos[0] <> 0 Then
  319.       TrainBarrack($B1Pos[0],$B1Pos[1],$B1Troop)
  320.    EndIf
  321.    If $B2Pos[0] <> 0 Then
  322.       TrainBarrack($B2Pos[0],$B2Pos[1],$B2Troop)
  323.    EndIf
  324.    If $B3Pos[0] <> 0 Then
  325.       TrainBarrack($B3Pos[0],$B3Pos[1],$B3Troop)
  326.    EndIf
  327.    If $B4Pos[0] <> 0 Then
  328.       TrainBarrack($B4Pos[0],$B4Pos[1],$B4Troop)
  329.    EndIf
  330. EndFunc
  331. #EndRegion ##### TRAIN #####
  332.  
  333. #Region ##### ATTACK #####
  334. Func Attack()
  335.    While 1
  336.       If $RunState = False Then
  337.          ExitLoop
  338.       EndIf
  339.       AssignTroop()
  340.       If $RunState = False Then
  341.          ExitLoop
  342.       EndIf
  343.       PrepareAttack()
  344.       If $RunState = False Then
  345.          ExitLoop
  346.       EndIf
  347.       GUICtrlSetData("Attack started. Begin searching.." & @CRLF, -1)
  348.       VillageSearch()
  349.       If $RunState = False Then
  350.          ExitLoop
  351.       EndIf
  352.       GUICtrlSetData("Enemy Found! Prepare to drop troops" & @CRLF, -1)
  353.       DropTroop()
  354.       If $RunState = False Then
  355.          ExitLoop
  356.       EndIf
  357.       ReturnHome()
  358.       ExitLoop
  359.    WEnd
  360. EndFunc
  361.  
  362. Func PrepareAttack()
  363.    While 1
  364.       If $RunState = False Then
  365.          ExitLoop
  366.       EndIf
  367.       Button($Attack)
  368.       If $RunState = False Then
  369.          ExitLoop
  370.       EndIf
  371.       Button($FindAMatch)
  372.       If $RunState = False Then
  373.          ExitLoop
  374.       EndIf
  375.       Sleep(2000)
  376.       ControlClick ($HWnD, "","", "left", "1", 470*$x_ratio, 330*$y_ratio) ;Click Break Shield
  377.       ExitLoop
  378.    WEnd
  379. EndFunc
  380.  
  381. Func CheckSearch()
  382.    $Pixel = PixelSearch(0,0,900,700,0x0D355B,0,1,$HWnD) ;End Battle Button
  383.    While Not IsArray($Pixel)
  384.       $Pixel = PixelSearch(0,0,900,700,0x0D355B,0,1,$HWnD) ;End Battle Button
  385.       Sleep(200)
  386.       If $RunState = False Then
  387.          ExitLoop
  388.       EndIf
  389.    WEnd
  390. EndFunc
  391.  
  392. Func VillageSearch()
  393.    While 1
  394.       If $RunState = False Then
  395.          ExitLoop
  396.       EndIf
  397.       CheckSearch()
  398.       If $RunState = False Then
  399.       ExitLoop
  400.       EndIf
  401.       ComputeValue()
  402.       If $RunState = False Then
  403.          ExitLoop
  404.       EndIf
  405.       CompareValue()
  406.       If $RunState = False Then
  407.          ExitLoop
  408.       EndIf
  409.       While $SearchCheck = 0
  410.          If $RunState = False Then
  411.             ExitLoop
  412.          EndIf
  413.          ControlClick ($HWnD, "","", "left", "1", 715*$x_ratio, 405*$y_ratio) ;Click Next
  414.          If $RunState = False Then
  415.             ExitLoop
  416.          EndIf
  417.          CheckSearch()
  418.          If $RunState = False Then
  419.             ExitLoop
  420.          EndIf
  421.          ComputeValue()
  422.          If $RunState = False Then
  423.             ExitLoop
  424.          EndIf
  425.          CompareValue()
  426.       WEnd
  427.       TrayTip ("Enemy Found!","Requirement met:  Gold: " & $Gold & ". Elixir: " & $Elixir, 0, $TIP_ICONASTERISK)
  428.       Sleep(5000)
  429.       ExitLoop
  430.    WEnd
  431. EndFunc
  432.  
  433. Func CheckTroop($a)
  434.    If $B1Troop = $a Or $B2Troop = $a Or $B3Troop = $a Or $B4Troop = $a Then
  435.       Return True
  436.    Else
  437.       Return False
  438.    EndIf
  439. EndFunc
  440.  
  441. Func AssignTroop()
  442.    If CheckTroop("Barbarian") Then
  443.       $Barbarian[0] = $Troop[0][0]
  444.       $Barbarian[1] = $Troop[0][1]
  445.       If CheckTroop("Archer") Then
  446.          $Archer[0] = $Troop[1][0]
  447.          $Archer[1] = $Troop[1][1]
  448.          If CheckTroop("Goblin") Then
  449.             $Goblin[0] = $Troop[2][0]
  450.             $Goblin[1] = $Troop[2][1]
  451.             If CheckTroop("Giant") Then
  452.                $Giant[0] = $Troop[3][0]
  453.                $Giant[1] = $Troop[3][1]
  454.                ;MsgBox(0,"","Barbarian, Archer, Goblin, Giant")
  455.             EndIf
  456.          ElseIf CheckTroop("Giant") Then
  457.             $Giant[0] = $Troop[2][0]
  458.             $Giant[1] = $Troop[2][1]
  459.             ;MsgBox(0,"","Barbarian, Archer, Giant")
  460.          EndIf
  461.       ElseIf CheckTroop("Goblin") Then
  462.          $Goblin[0] = $Troop[1][0]
  463.          $Goblin[1] = $Troop[1][1]
  464.          If CheckTroop("Giant") Then
  465.             $Giant[0] = $Troop[2][0]
  466.             $Giant[1] = $Troop[2][1]
  467.             ;MsgBox(0,"","Barbarian, Goblin, Giant")
  468.          EndIf
  469.       ElseIf CheckTroop("Giant") Then
  470.          $Giant[0] = $Troop[1][0]
  471.          $Giant[1] = $Troop[1][1]
  472.          ;MsgBox(0,"","Barbarian, Giant")
  473.       EndIf
  474.    ElseIf CheckTroop("Archer") Then
  475.       $Archer[0] = $Troop[0][0]
  476.       $Archer[1] = $Troop[0][1]
  477.       If CheckTroop("Goblin") Then
  478.          $Goblin[0] = $Troop[1][0]
  479.          $Goblin[1] = $Troop[1][1]
  480.          If CheckTroop("Giant") Then
  481.             $Giant[0] = $Troop[2][0]
  482.             $Giant[1] = $Troop[2][1]
  483.             ;MsgBox(0,"","Archer, Goblin, Giant")
  484.          EndIf
  485.       ElseIf CheckTroop("Giant") Then
  486.          $Giant[0] = $Troop[1][0]
  487.          $Giant[1] = $Troop[1][1]
  488.          ;MsgBox(0,"","Archer, Giant")
  489.       EndIf
  490.    ElseIf CheckTroop("Goblin") Then
  491.       $Goblin[0] = $Troop[0][0]
  492.       $Goblin[1] = $Troop[0][1]
  493.       If CheckTroop("Giant") Then
  494.          $Giant[0] = $Troop[1][0]
  495.          $Giant[1] = $Troop[1][1]
  496.          ;MsgBox(0,"","Goblin, Giant")
  497.       EndIf
  498.    ElseIf CheckTroop("Giant") Then
  499.       $Giant[0] = $Troop[0][0]
  500.       $Giant[1] = $Troop[0][1]
  501.       ;MsgBox(0,"","Giant")
  502.    EndIf
  503. EndFunc
  504.  
  505. Func DropTroop()
  506.    While 1
  507.       If $RunState = False Then
  508.          ExitLoop
  509.       EndIf
  510.       DropCombo($UpLeft)
  511.       If $RunState = False Then
  512.          ExitLoop
  513.       EndIf
  514.       DropCombo($UpRight)
  515.       If $RunState = False Then
  516.          ExitLoop
  517.       EndIf
  518.       DropCombo($UpLeft)
  519.       If $RunState = False Then
  520.          ExitLoop
  521.       EndIf
  522.       DropCombo($UpRight)
  523.       If $RunState = False Then
  524.          ExitLoop
  525.       EndIf
  526.       DropSingle("Giant",$UpLeft)
  527.       If $RunState = False Then
  528.          ExitLoop
  529.       EndIf
  530.       DropSingle("Giant",$UpRight)
  531.       If $RunState = False Then
  532.          ExitLoop
  533.       EndIf
  534.       DropSingle("Barbarian",$UpLeft)
  535.       If $RunState = False Then
  536.          ExitLoop
  537.       EndIf
  538.       DropSingle("Archer",$UpLeft)
  539.       If $RunState = False Then
  540.          ExitLoop
  541.       EndIf
  542.       DropSingle("Barbarian",$UpRight)
  543.       If $RunState = False Then
  544.          ExitLoop
  545.       EndIf
  546.       DropSingle("Barbarian",$UpLeft)
  547.       If $RunState = False Then
  548.          ExitLoop
  549.       EndIf
  550.       DropSingle("Archer",$UpRight)
  551.       ExitLoop
  552.    WEnd
  553. EndFunc
  554.  
  555. Func DropSingle($T, $W)
  556.    While 1
  557.       If $RunState = False Then
  558.          ExitLoop
  559.       EndIf
  560.       If CheckTroop($T) Then
  561.          Select
  562.          Case $T = "Giant"
  563.             ControlClick ($HWnD, "","", "left", "1", $Giant[0], $Giant[1])
  564.             Sleep(300)
  565.             For $i = 1 to 3 Step 1
  566.                ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  567.                Sleep(100)
  568.             Next
  569.             Sleep(300)
  570.          If $RunState = False Then
  571.             ExitLoop
  572.          EndIf
  573.          Case $T = "Barbarian"
  574.             ControlClick ($HWnD, "","", "left", "1", $Barbarian[0], $Barbarian[1])
  575.             Sleep(300)
  576.             For $x = 0 to 2 Step 1
  577.                For $i = 0 to 4 Step 1
  578.                   ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  579.                   Sleep(100)
  580.                Next
  581.             Next
  582.             Sleep(300)
  583.          If $RunState = False Then
  584.             ExitLoop
  585.          EndIf
  586.          Case $T = "Archer"
  587.             ControlClick ($HWnD, "","", "left", "1", $Archer[0], $Archer[1])
  588.             Sleep(300)
  589.             For $x = 0 to 2 Step 1
  590.                For $i = 0 to 4 Step 1
  591.                   ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  592.                   Sleep(100)
  593.                Next
  594.             Next
  595.             Sleep(300)
  596.          If $RunState = False Then
  597.             ExitLoop
  598.          EndIf
  599.          Case $T = "Goblin"
  600.             ControlClick ($HWnD, "","", "left", "1", $Goblin[0], $Goblin[1])
  601.             Sleep(300)
  602.             For $x = 0 to 2 Step 1
  603.                For $i = 0 to 4 Step 1
  604.                   ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  605.                   Sleep(100)
  606.                Next
  607.             Next
  608.             Sleep(300)
  609.          EndSelect
  610.       EndIf
  611.       ExitLoop
  612.    WEnd
  613. EndFunc
  614.  
  615. Func DropCombo($W)
  616.    While 1
  617.       If $RunState = False Then
  618.          ExitLoop
  619.       EndIf
  620.       If CheckTroop("Giant") Then
  621.          ControlClick ($HWnD, "","", "left", "1", $Giant[0], $Giant[1])
  622.          Sleep(500)
  623.          For $i = 1 to 3 Step 1
  624.             ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  625.             Sleep(500)
  626.          Next
  627.          Sleep(500)
  628.       EndIf
  629.       If $RunState = False Then
  630.          ExitLoop
  631.       EndIf
  632.       If CheckTroop("Barbarian") Then
  633.          ControlClick ($HWnD, "","", "left", "1", $Barbarian[0], $Barbarian[1])
  634.          Sleep(300)
  635.          For $x = 0 to 2 Step 1
  636.             For $i = 0 to 4 Step 1
  637.                ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  638.                Sleep(100)
  639.             Next
  640.          Next
  641.          Sleep(500)
  642.       EndIf
  643.       If $RunState = False Then
  644.          ExitLoop
  645.       EndIf
  646.       If CheckTroop("Archer") Then
  647.          ControlClick ($HWnD, "","", "left", "1", $Archer[0], $Archer[1])
  648.          Sleep(300)
  649.          For $x = 0 to 2 Step 1
  650.             For $i = 0 to 4 Step 1
  651.                ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  652.                Sleep(100)
  653.             Next
  654.          Next
  655.          Sleep(500)
  656.       EndIf
  657.       If $RunState = False Then
  658.          ExitLoop
  659.       EndIf
  660.       If CheckTroop("Goblin") Then
  661.          ControlClick ($HWnD, "","", "left", "1", $Goblin[0], $Goblin[1])
  662.          Sleep(300)
  663.          For $x = 0 to 2 Step 1
  664.             For $i = 0 to 4 Step 1
  665.                ControlClick ($HWnD, "","", "left", "1", $W[$i][0], $W[$i][1])
  666.                Sleep(100)
  667.             Next
  668.          Next
  669.          Sleep(500)
  670.       EndIf
  671.       ExitLoop
  672.    WEnd
  673. EndFunc
  674.  
  675. Func ReadValue(ByRef $x, ByRef $y)
  676.    $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
  677.    $Read = StringRegExpReplace(StringRegExpReplace($Read, "(\v)+", @CRLF), "\A\v|\v\Z", "") ;Strip whitespaces & blank lines and split into array
  678.    $Read = StringSplit($Read, @CRLF, 1)
  679.    While UBound($Read) < 5
  680.       If $RunState = False Then
  681.          ExitLoop
  682.       EndIf
  683.       $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
  684.       $Read = StringRegExpReplace(StringRegExpReplace($Read, "(\v)+", @CRLF), "\A\v|\v\Z", "")  ;Strip whitespaces & blank lines and split into array
  685.       $Read = StringSplit($Read, @CRLF, 1)
  686.    WEnd
  687.    $x = Number(StringRegExpReplace($Read[2], "[^[:digit:]]", ""))   ;Convert gold to number
  688.    $y = Number(StringRegExpReplace($Read[3], "[^[:digit:]]", ""))   ;Convert exlir to number
  689. EndFunc
  690.  
  691. Func ComputeValue()
  692.    Local $G[3],$E[3]
  693.    ReadValue($G[0], $E[0])
  694.    ReadValue($G[1], $E[1])
  695.    ReadValue($G[2], $E[2])
  696.    $Gold = _ArrayMin($G)
  697.    $Elixir = _ArrayMin($E)
  698.    GUICtrlSetData($Results, "(" & $SearchCount+1 & ") Gold: " & $Gold & ". Elixir: " & $Elixir & @CRLF, -1)
  699.    $SearchCount += 1 ; Counter for number of searches
  700. EndFunc
  701.  
  702. Func CompareValue()
  703.    If $Gold >= $MinGold Then
  704.       If $Elixir >= $MinElixir Then
  705.          ;MsgBox(0, "Gold & Elixir Check", "Gold: " & $Gold & @CR & "Elixir: " & $Elixir & @CR & "Requirement met.")
  706.          Select
  707.             Case $SearchMode = 1
  708.                $SearchCheck = 1
  709.             Case $SearchMode = 2
  710.                $SearchCheck = 1
  711.             Case Else
  712.                $SearchCheck = 0
  713.          EndSelect
  714.       Else
  715.          ;MsgBox(0, "Gold & Elixir Check", "Gold: " & $Gold & @CR & "Elixir: " & $Elixir & @CR &  "Not enough " & $MinElixir & " Elixir.")
  716.          Select
  717.             Case $SearchMode = 1
  718.                $SearchCheck = 1
  719.             Case $SearchMode = 2
  720.                $SearchCheck = 0
  721.             Case Else
  722.                $SearchCheck = 0
  723.          EndSelect
  724.       EndIf
  725.    Else
  726.       If $Elixir >= $MinElixir Then
  727.          ;MsgBox(0, "Gold & Elixir Check", "Gold: " & $Gold & @CR & "Elixir: " & $Elixir & @CR & "Not enough " & $MinGold & " Gold.")
  728.          Select
  729.             Case $SearchMode = 1
  730.                $SearchCheck = 1
  731.             Case $SearchMode = 2
  732.                $SearchCheck = 0
  733.             Case Else
  734.                $SearchCheck = 0
  735.          EndSelect
  736.       Else
  737.          ;MsgBox(0, "Gold & Elixir Check", "Gold: " & $Gold & @CR & "Elixir: " & $Elixir & @CR & "Not enough " & $MinGold & " Gold and " & $MinElixir & " Elixir." )
  738.          Select
  739.             Case $SearchMode = 1
  740.                $SearchCheck = 0
  741.             Case $SearchMode = 2
  742.                $SearchCheck = 0
  743.             Case Else
  744.                $SearchCheck = 0
  745.          EndSelect
  746.       EndIf
  747.    EndIf
  748. EndFunc
  749. #EndRegion ##### ATTACK #####
  750.  
  751. #Region ##### MINI FUNCTION #####
  752. Func MainScreen()
  753.    While 1
  754.       If $RunState = False Then
  755.          ExitLoop
  756.       EndIf
  757.       GUICtrlSetData($Results, "Waiting for Clash of Clans to load..." & @CRLF, -1)
  758.       $Pixel = PixelGetColor(630*$x_ratio, 390*$y_ratio, $HWnD)
  759.       If Hex($Pixel,6) = 282828 Or $Pixel = 2962704 Then
  760.          ControlClick ($HWnD, "","", "left", "1", 293*$x_ratio, 329*$y_ratio)
  761.          If $RunState = False Then
  762.             ExitLoop
  763.          EndIf
  764.          Sleep(5000)
  765.       EndIf
  766.       $Pixel = PixelSearch(0,0,900,700,0xF8ED90,0,1,$HWnD)
  767.       If IsArray($Pixel) Then
  768.          ControlClick ($HWnD, "","", "left", "1", 400*$x_ratio, 450*$y_ratio)
  769.          If $RunState = False Then
  770.             ExitLoop
  771.          EndIf
  772.          Sleep(5000)
  773.       EndIf
  774.       $Pixel = PixelSearch(0,0,900,700,$Attack,0,1,$HWnD)
  775.       While Not IsArray($Pixel)
  776.          $Pixel = PixelSearch(0,0,900,700,$Attack,0,1,$HWnD)
  777.          If $RunState = False Then
  778.             ExitLoop
  779.          EndIf
  780.          Sleep(200)
  781.       WEnd
  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("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.    Local $x = 1
  841.    While $x = 1
  842.       If _IsPressed("01") Then
  843.          $Pos = MouseGetPos()
  844.          $x = 0
  845.       EndIf
  846.    WEnd
  847. EndFunc
  848.  
  849. #cs
  850. Func Pause()
  851.    $Paused = NOT $Paused
  852.    While $Paused
  853.       Sleep(100)
  854.    TrayTip("Script Paused","SHIFT+1 to Unpause", 0, $TIP_ICONASTERISK)
  855.    WEnd
  856. EndFunc
  857.  
  858. Func Restart()
  859.    ControlClick ($HWnD, "","", "left", "1", 125, 575)
  860.    Sleep(2000)
  861.    ControlClick ($HWnD, "","", "left", "1", 125, 577)
  862.    Sleep(2000)
  863.    ControlClick ($HWnD, "","", "left", "1", 205, 575)
  864.    Sleep(2000)
  865.    MouseClickDrag("left", 700, 300, 700, 120)
  866.    Sleep(2000)
  867.    ControlClick ($HWnD, "","", "left", "1", 290, 160)
  868.    Sleep(50000)
  869. EndFunc
  870.  
  871. Func Initiate()
  872.    ControlClick ($HWnD, "","", "left", "1", 290, 150) ;Click BlueStacks
  873.    Sleep(60000)
  874.    ZoomOut()
  875.    Sleep(10000)
  876. EndFunc
  877. #ce
  878. #EndRegion ##### MINI FUNCTION ######
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement