From 9d357157c076fcaa92389386984f4e155201ab9f Mon Sep 17 00:00:00 2001 From: cosote Date: Fri, 14 Dec 2018 23:45:02 +0100 Subject: [PATCH] * **V7.6.5** * Add Ice Golem Support @ViperZ * Add Bat Spell Support @ViperZ * Add Stone Slammer Support @ViperZ * Fixed Snow Theme Detection (December 2018 Update) * Fixed Request Clan Castle (December 2018 Update) * Fixed Edit/Remove Army (December 2018 Update) * Fixed Clan Games not opening due to snow (December 2018 Update) * Fixed Switch Account (December 2018 Update) * Fixed Laboratory (December 2018 Update) * Fixed Collectors Level 13 Snow Theme (December 2018 Update) * Fixed Laboratory Time Position Change, reported/fixed by Fahid.Mahmood (October 2018 Update) * Fixed new elixir collector level 13 (October 2018 Update) * Fixed new dark elixir drill level 7 (October 2018 Update) * Fixed error "Cannot open Army Overview window" when "Wait for Clan Castle" enabled and Castle is not full, fixed by @Demen * Fixed switch account never switch back to the account in personal break, fixed by @Demen * Fixed clan chat did not open when donating CC, fixed by @Demen * Fixed Nox 6.2.5.3 in DirectX rendering mode * Improved clan games, new challenges added * Improved the attack bar getting spells levels and quantities when exist heroes or not * Improved Laboratory, updates selected troop to max possible If no further upgrade possible, or "Any" selected, cheapest upgrade will be done next 1 Dark Elixir is worth 50 Elixir in comparism context * Increased Android Launch Timout to 10 min --- CHANGELOG | 29 +- .../GUI/MBR GUI Control Attack Scripted.au3 | 1 + COCBot/GUI/MBR GUI Control BOT Options.au3 | 21 +- COCBot/GUI/MBR GUI Control Child Army.au3 | 21 +- COCBot/GUI/MBR GUI Control Collectors.au3 | 6 +- COCBot/GUI/MBR GUI Control Tab Village.au3 | 4 +- ...esign Child Attack - Activebase-Attack.au3 | 14 +- ... Design Child Attack - Deadbase-Attack.au3 | 16 +- ...ign Child Attack - Deadbase-Collectors.au3 | 135 +- .../MBR GUI Design Child Attack - Troops.au3 | 169 +- .../GUI/MBR GUI Design Child Bot - Stats.au3 | 54 +- ...MBR GUI Design Child VIllage - Upgrade.au3 | 9 +- .../MBR GUI Design Child Village - Donate.au3 | 257 ++- .../MBR GUI Design Child Village - Misc.au3 | 5 +- COCBot/MBR Functions.au3 | 1 + COCBot/MBR GUI Control Variables.au3 | 19 +- COCBot/MBR GUI Control.au3 | 1 + COCBot/MBR Global Variables.au3 | 265 +-- COCBot/MBR References.au3 | 6 + .../Android/Android Status & Information.txt | 2 +- COCBot/functions/Android/Android.au3 | 6 +- COCBot/functions/Android/AndroidEmbed.au3 | 16 +- COCBot/functions/Android/AndroidNox.au3 | 12 +- COCBot/functions/Android/getBSPos.au3 | 9 +- .../Attack Algorithms/AttackFromCSV.au3 | 2 +- .../Attack/Attack Algorithms/SmartFarm.au3 | 7 +- .../Attack Algorithms/THAttackTypes.au3 | 2 +- .../Attack/Attack Algorithms/algorithmTH.au3 | 4 +- .../Attack Algorithms/algorithm_AllTroops.au3 | 10 +- .../Attack/AttackCSV/DropTroopFromINI.au3 | 8 +- .../ParseAttackCSV_Settings_variables.au3 | 4 +- COCBot/functions/Attack/PrepareAttack.au3 | 34 +- COCBot/functions/Attack/ReturnHome.au3 | 4 +- .../Attack/Troops/CheckHeroesHealth.au3 | 15 +- .../Attack/Troops/GetXPosOfArmySlot.au3 | 11 +- .../functions/Attack/Troops/NameOfTroop.au3 | 6 + COCBot/functions/Config/ImageDirectories.au3 | 3 + COCBot/functions/Config/ScreenCoordinates.au3 | 46 +- COCBot/functions/Config/applyConfig.au3 | 12 +- COCBot/functions/Config/readConfig.au3 | 22 +- COCBot/functions/Config/saveConfig.au3 | 9 +- COCBot/functions/CreateArmy/DoubleTrain.au3 | 30 +- .../functions/CreateArmy/SmartWait4Train.au3 | 2 +- COCBot/functions/CreateArmy/TrainIt.au3 | 10 +- COCBot/functions/CreateArmy/TrainSiege.au3 | 15 +- COCBot/functions/CreateArmy/TrainSystem.au3 | 61 +- .../getArmyCCSpells/getArmyCCSpell.au3 | 2 +- .../getArmyCCTroops/getArmyCCTroops.au3 | 2 +- .../getArmySpells/getArmySpellCount.au3 | 4 +- .../getArmySpells/getArmySpells.au3 | 2 +- .../getArmyTroops/getArmyTroops.au3 | 2 +- .../functions/Image Search/checkDeadBase.au3 | 4 +- .../Image Search/imglocAttackBar.au3 | 319 ++- .../Image Search/imglocAuxiliary.au3 | 8 + COCBot/functions/Other/Click.au3 | 2 + COCBot/functions/Read Text/getOcr.au3 | 2 +- .../functions/Search/IsSearchModeActive.au3 | 1 + .../Village/BuilderBase/CleanBBYard.au3 | 62 + COCBot/functions/Village/CheckImageType.au3 | 23 +- .../Village/Clan Games/ClanGames.au3 | 50 +- COCBot/functions/Village/DonateCC.au3 | 59 +- COCBot/functions/Village/Laboratory.au3 | 585 +++--- COCBot/functions/Village/RequestCC.au3 | 14 +- COCBot/functions/Village/SwitchAccount.au3 | 4 +- .../Village/SwitchAccountVariablesReload.au3 | 8 +- COCBot/functions/Village/UpgradeHeroes.au3 | 64 +- COCBot/functions/Village/UpgradeWall.au3 | 9 +- Languages/Arabic.ini | Bin 189504 -> 208172 bytes Languages/English.ini | 27 +- Languages/German.ini | Bin 228652 -> 232112 bytes MyBot.run.MiniGui.exe | Bin 1049088 -> 1050112 bytes MyBot.run.MiniGui_stripped.au3 | 100 +- MyBot.run.Watchdog.exe | Bin 925184 -> 925184 bytes MyBot.run.Watchdog_stripped.au3 | 4 +- MyBot.run.Wmi.exe | Bin 906240 -> 906240 bytes MyBot.run.Wmi_stripped.au3 | 55 +- MyBot.run.au3 | 21 +- MyBot.run.exe | Bin 2151424 -> 2156544 bytes MyBot.run.version.au3 | 4 +- MyBot.run_stripped.au3 | 1870 ++++++++++------- .../SiegeMachines/StoneS_100_92.xml | 1 + imgxml/ArmyOverview/Spells/BtSpell_100_91.xml | 1 + .../TroopQueued/BtSpell_100_90.xml | 1 + .../ArmyOverview/TroopQueued/IceG_100_92.xml | 1 + imgxml/ArmyOverview/Troops/IceG_100_90.xml | 1 + imgxml/AttackBar/AmountX_0_92.xml | 1 + imgxml/AttackBar/BtSpell_100_92.xml | 1 + imgxml/AttackBar/IceG_100_90.xml | 1 + imgxml/AttackBar/SkSpell_100_88.xml | 1 - imgxml/AttackBar/SkSpell_100_89.xml | 1 + imgxml/AttackBar/StoneS_100_89.xml | 1 + .../DonateCC/SiegeMachines/StoneS_100_91.xml | 1 + imgxml/DonateCC/Spells/BtSpell_100_92.xml | 1 + imgxml/DonateCC/Troops/IceG_100_90.xml | 1 + .../DonateCC/donateccwbl/iunderstand_0_95.xml | 1 + .../MainLoop/Caravan/SnowCaravan_0_90.xml | 1 + imgxml/Resources/ObstaclesBB/BTree_100_95.xml | 1 + .../Resources/ObstaclesBB/Groove_100_92.xml | 1 + imgxml/Resources/ObstaclesBB/STree_100_95.xml | 1 + imgxml/Resources/ObstaclesBB/Stump_100_92.xml | 1 + imgxml/SnowTheme/Snow_100_90.xml | 2 +- .../Collectors_Snow/Collector_13_100_90.xml | 1 + imgxml/Storages/Drills/Drill_7_90.xml | 1 + imgxml/Storages/Drills/Level/Drill_7_92.xml | 1 + imgxml/Storages/Mines_Snow/Mine_13_100_90.xml | 1 + .../Siege/SiegeAttacBtn_0_90.xml | 1 + .../Siege/SiegeAttacBtn_0_92.xml | 1 - .../StoneSlammer/StoneSlammer_100_89.xml | 1 + imgxml/Train/Spell_Train/BtSpell_100_92.xml | 1 + imgxml/Train/Train_Train/IceG_100_90.xml | 1 + ...rA_12_100_89.xml => elixirA_12_100_88.xml} | 0 .../deadbase/elix/lvl/elixir_13_1000_87.xml | 1 + ...toneNox-124-475-63,25963776642856_0_95.xml | 1 + ...iTools-124-475-63,25963776642856_0_95.xml} | 0 ...Stacks2A-605-129-55,675933536059_0_92.xml} | 0 .../stoneBlueStacks2A-151-492-52_0_95.xml | 1 - ..._95.xml => stoneNox-289-612-86,4_0_95.xml} | 0 ...5_0_92.xml => treeNox-773-244-55_0_92.xml} | 0 lib/MBRBot.dll | Bin 7653376 -> 8092160 bytes lib/listSymbols_coc-t-b.xml | 2 +- ...trainwindow-SiegesInQueue-bundle.imglocdat | 2 +- ...trainwindow-SpellsInQueue-bundle.imglocdat | 2 +- lib/trainwindow-TrainTroops-bundle.imglocdat | 2 +- 123 files changed, 2698 insertions(+), 2046 deletions(-) create mode 100644 COCBot/functions/Village/BuilderBase/CleanBBYard.au3 create mode 100644 imgxml/ArmyOverview/SiegeMachines/StoneS_100_92.xml create mode 100644 imgxml/ArmyOverview/Spells/BtSpell_100_91.xml create mode 100644 imgxml/ArmyOverview/TroopQueued/BtSpell_100_90.xml create mode 100644 imgxml/ArmyOverview/TroopQueued/IceG_100_92.xml create mode 100644 imgxml/ArmyOverview/Troops/IceG_100_90.xml create mode 100644 imgxml/AttackBar/AmountX_0_92.xml create mode 100644 imgxml/AttackBar/BtSpell_100_92.xml create mode 100644 imgxml/AttackBar/IceG_100_90.xml delete mode 100644 imgxml/AttackBar/SkSpell_100_88.xml create mode 100644 imgxml/AttackBar/SkSpell_100_89.xml create mode 100644 imgxml/AttackBar/StoneS_100_89.xml create mode 100644 imgxml/DonateCC/SiegeMachines/StoneS_100_91.xml create mode 100644 imgxml/DonateCC/Spells/BtSpell_100_92.xml create mode 100644 imgxml/DonateCC/Troops/IceG_100_90.xml create mode 100644 imgxml/DonateCC/donateccwbl/iunderstand_0_95.xml create mode 100644 imgxml/Resources/ClanGamesImages/MainLoop/Caravan/SnowCaravan_0_90.xml create mode 100644 imgxml/Resources/ObstaclesBB/BTree_100_95.xml create mode 100644 imgxml/Resources/ObstaclesBB/Groove_100_92.xml create mode 100644 imgxml/Resources/ObstaclesBB/STree_100_95.xml create mode 100644 imgxml/Resources/ObstaclesBB/Stump_100_92.xml create mode 100644 imgxml/Storages/Collectors_Snow/Collector_13_100_90.xml create mode 100644 imgxml/Storages/Drills/Drill_7_90.xml create mode 100644 imgxml/Storages/Drills/Level/Drill_7_92.xml create mode 100644 imgxml/Storages/Mines_Snow/Mine_13_100_90.xml create mode 100644 imgxml/SwitchSiegeMachines/Siege/SiegeAttacBtn_0_90.xml delete mode 100644 imgxml/SwitchSiegeMachines/Siege/SiegeAttacBtn_0_92.xml create mode 100644 imgxml/SwitchSiegeMachines/StoneSlammer/StoneSlammer_100_89.xml create mode 100644 imgxml/Train/Spell_Train/BtSpell_100_92.xml create mode 100644 imgxml/Train/Train_Train/IceG_100_90.xml rename imgxml/deadbase/elix/fill/{elixirA_12_100_89.xml => elixirA_12_100_88.xml} (100%) create mode 100644 imgxml/deadbase/elix/lvl/elixir_13_1000_87.xml create mode 100644 imgxml/village/NormalVillage/2stoneNox-124-475-63,25963776642856_0_95.xml rename imgxml/village/NormalVillage/{stoneiTools-124-475-63,25963776642856_0_95.xml => 2stoneiTools-124-475-63,25963776642856_0_95.xml} (100%) rename imgxml/village/NormalVillage/{treeBlueStacks2A-605-129-55,675933536059_0_92.xml => 2treeBlueStacks2A-605-129-55,675933536059_0_92.xml} (100%) delete mode 100644 imgxml/village/NormalVillage/stoneBlueStacks2A-151-492-52_0_95.xml rename imgxml/village/NormalVillage/{2stoneNox-289-612-86,4_0_95.xml => stoneNox-289-612-86,4_0_95.xml} (100%) rename imgxml/village/NormalVillage/{2treeNox-773-244-55_0_92.xml => treeNox-773-244-55_0_92.xml} (100%) diff --git a/CHANGELOG b/CHANGELOG index 0f8adef46..d3d9658a2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,28 @@ +* **V7.6.5** +* Add Ice Golem Support @ViperZ +* Add Bat Spell Support @ViperZ +* Add Stone Slammer Support @ViperZ +* Fixed Snow Theme Detection (December 2018 Update) +* Fixed Request Clan Castle (December 2018 Update) +* Fixed Edit/Remove Army (December 2018 Update) +* Fixed Clan Games not opening due to snow (December 2018 Update) +* Fixed Switch Account (December 2018 Update) +* Fixed Laboratory (December 2018 Update) +* Fixed Collectors Level 13 Snow Theme (December 2018 Update) +* Fixed Laboratory Time Position Change, reported/fixed by Fahid.Mahmood (October 2018 Update) +* Fixed new elixir collector level 13 (October 2018 Update) +* Fixed new dark elixir drill level 7 (October 2018 Update) +* Fixed error "Cannot open Army Overview window" when "Wait for Clan Castle" enabled and Castle is not full, fixed by @Demen +* Fixed switch account never switch back to the account in personal break, fixed by @Demen +* Fixed clan chat did not open when donating CC, fixed by @Demen +* Fixed Nox 6.2.5.3 in DirectX rendering mode +* Improved clan games, new challenges added +* Improved the attack bar getting spells levels and quantities when exist heroes or not +* Improved Laboratory, updates selected troop to max possible + If no further upgrade possible, or "Any" selected, cheapest upgrade will be done next + 1 Dark Elixir is worth 50 Elixir in comparism context +* Increased Android Launch Timout to 10 min + * **V7.6.4** * October Update Fixed Drop Trophies , Now the slots are not selected by default * October Update Fixed Heroes Recover timer when is boosted @@ -29,7 +54,7 @@ * Improved double train with less open & close army window * **V7.6.2** -* Fixed Bluestacks 4.x and CoC PB message , different font and place. +* Fixed Bluestacks 4.x and CoC PB message , different font and place. * Fixed Siege Build when queued empty and camp is full, making a double sieges. * Fixed Conflict with Balloons and siege on attack bar, reported by @Black-sTyle-Vii * Fixed Donate only - Switch account and a second train army reported by @hrishikesh @@ -83,7 +108,7 @@ * Added Telegram - Shutdown , Hibernate and Standby with a confirm message, just to avoid user errors * Added Telegram and invalid commands * Added Profile button to save current setting without having to start bot -* Fixed Reset last command on Telegram +* Fixed Reset last command on Telegram * Fixed UI Responsiveness when the telegram is checked * Fixed Forced PBT for Normal Switch * Fixed Some issues in switch from-to Builder base - Main Village, Get village measuring and zoomout diff --git a/COCBot/GUI/MBR GUI Control Attack Scripted.au3 b/COCBot/GUI/MBR GUI Control Attack Scripted.au3 index 1e1d57159..2d31859d3 100644 --- a/COCBot/GUI/MBR GUI Control Attack Scripted.au3 +++ b/COCBot/GUI/MBR GUI Control Attack Scripted.au3 @@ -509,6 +509,7 @@ Func AttackNow() Local $tempSieges = $g_aiCurrentSiegeMachines $g_aiCurrentSiegeMachines[$eSiegeWallWrecker] = 1 $g_aiCurrentSiegeMachines[$eSiegeBattleBlimp] = 1 + $g_aiCurrentSiegeMachines[$eSiegeStoneSlammer] = 1 $g_aiAttackAlgorithm[$LB] = 1 ; Select Scripted Attack $g_sAttackScrScriptName[$LB] = GuiCtrlRead($g_hCmbScriptNameAB) ; Select Scripted Attack File From The Combo Box, Cos it wasn't refreshing until pressing Start button $g_iMatchMode = $LB ; Select Live Base As Attack Type diff --git a/COCBot/GUI/MBR GUI Control BOT Options.au3 b/COCBot/GUI/MBR GUI Control BOT Options.au3 index 0769a4e0c..8fd8e6150 100644 --- a/COCBot/GUI/MBR GUI Control BOT Options.au3 +++ b/COCBot/GUI/MBR GUI Control BOT Options.au3 @@ -87,10 +87,7 @@ Func chkDisableNotifications() EndFunc ;==>chkDisableNotifications Func chkUseRandomClick() - $g_bRunState = True - getArmySiegeMachines() - $g_bRunState = False - ;$g_bUseRandomClick = (GUICtrlRead($g_hChkUseRandomClick) = $GUI_CHECKED) + $g_bUseRandomClick = (GUICtrlRead($g_hChkUseRandomClick) = $GUI_CHECKED) EndFunc ;==>chkUseRandomClick #cs Func chkUpdatingWhenMinimized() @@ -519,11 +516,11 @@ Func btnTestDonateCC() Return False EndIf SetLog("Detecting Troops...") - DetectSlotTroop($eBowl) + DetectSlotTroop($eIceG) SetLog("Detecting Sieges...") - DetectSlotSiege($eSiegeBattleBlimp) + DetectSlotSiege($eSiegeStoneSlammer) SetLog("Detecting Spells...") - DetectSlotSpell($eSkSpell) + DetectSlotSpell($eBtSpell) SetLog(_PadStringCenter(" Test DonateCC end ", 54, "="), $COLOR_INFO) ShellExecute($g_sProfileTempDebugPath & "donateCC_") @@ -561,6 +558,12 @@ Func btnTestAttackBar() $g_bDebugImageSave = True $g_bRunState = True + If MsgBox($MB_YESNO, "Screenshot or Live Image", "Do you want to use a Screenshot instead of a Live Image?") = $IDYES Then + Local $sImageFile = BeginImageTest() ; get image for testing + If $sImageFile = False Then $sImageFile = "Live Screenshot" + EndIf + + SetLog(_PadStringCenter(" Begin AttackBar Detection", 54, "="), $COlOR_INFO) Local $aAttackBar = StringSplit(AttackBarCheck(False, $DB, True), "|", $STR_NOCOUNT) @@ -570,11 +573,13 @@ Func btnTestAttackBar() SetLog("Found " & UBound($aAttackBar, 1) & " Slots", $COlOR_SUCCESS) For $i = 0 To UBound($aAttackBar, 1) - 1 $aTroop = StringSplit($aAttackBar[$i], "#", $STR_NOCOUNT) - If IsArray($aTroop) And UBound($aTroop, 1) = 3 Then SetLog("- Slot " & $aTroop[1] & ": " & $aTroop[2] & " " & GetTroopName($aTroop[0], $aTroop[2]), $COLOR_SUCCESS) + If IsArray($aTroop) And UBound($aTroop, 1) = 4 Then SetLog("- Slot " & $aTroop[1] & ": " & $aTroop[2] & " " & GetTroopName($aTroop[0], $aTroop[2]), $COLOR_SUCCESS) Next EndIf SetLog(_PadStringCenter(" End AttackBar Detection ", 54, "="), $COlOR_INFO) + EndImageTest() ; clear test image handle + $g_bDebugOcr = $bCurrentOCR $g_bDebugImageSave = $bCurrentDebugImage $g_bRunState = $bCurrentRunState diff --git a/COCBot/GUI/MBR GUI Control Child Army.au3 b/COCBot/GUI/MBR GUI Control Child Army.au3 index fe2491cc3..14d65af2c 100644 --- a/COCBot/GUI/MBR GUI Control Child Army.au3 +++ b/COCBot/GUI/MBR GUI Control Child Army.au3 @@ -122,7 +122,7 @@ Func lblTotalCountTroop2() Local $TotalTotalTimeTroop = 0 Local $NbrOfBarrack = 4 ;For the moment fix to 4 until fine detect level of each Barrack Local $NbrOfDarkBarrack = 2 ;For the moment fix to 2 until fine detect level of each Barrack - For $i = $eTroopBarbarian To $eTroopElectroDragon + For $i = $eTroopBarbarian To $eTroopIceGolem Local $NbrOfTroop = GUICtrlRead($g_ahTxtTrainArmyTroopCount[$i]) Local $LevOfTroop = $g_aiTrainArmyTroopLevel[$i] @@ -136,7 +136,7 @@ Func lblTotalCountTroop2() EndIf Next - For $i = $eTroopMinion To $eTroopBowler + For $i = $eTroopMinion To $eTroopIceGolem Local $NbrOfTroop = GUICtrlRead($g_ahTxtTrainArmyTroopCount[$i]) Local $LevOfTroop = $g_aiTrainArmyTroopLevel[$i] @@ -187,7 +187,7 @@ Func lblTotalCountSiege() GUICtrlSetData($g_hLblTotalTimeSiege, CalculTimeTo($iTotalTotalTimeSiege)) GUICtrlSetData($g_hLblCountTotalSiege, $g_iTotalTrainSpaceSiege) - GUICtrlSetBkColor($g_hLblCountTotalSiege, $g_iTotalTrainSpaceSiege <= 2 ? $COLOR_MONEYGREEN : $COLOR_RED) + GUICtrlSetBkColor($g_hLblCountTotalSiege, $g_iTotalTrainSpaceSiege <= 3 ? $COLOR_MONEYGREEN : $COLOR_RED) CalCostSiege() ; prepared for some new TH level !! @@ -219,7 +219,7 @@ Func TotalSpellCountClick() If $g_iTownHallLevel > 5 Or $g_iTownHallLevel = 0 Then _GUI_Value_STATE("SHOW", $g_aiTrainArmySpellLevel[$eSpellHeal] > 0 ? $groupHeal : $groupIcnHeal) Else - For $i = $eSpellRage To $eSpellSkeleton + For $i = $eSpellRage To $eSpellBat GUICtrlSetData($g_ahTxtTrainArmySpellCount[$i], 0) GUICtrlSetData($g_ahLblTrainArmySpellLevel[$i], 0) Next @@ -228,7 +228,7 @@ Func TotalSpellCountClick() If $g_iTownHallLevel > 6 Or $g_iTownHallLevel = 0 Then _GUI_Value_STATE("SHOW", $g_aiTrainArmySpellLevel[$eSpellRage] > 0 ? $groupRage : $groupIcnRage) Else - For $i = $eSpellJump To $eSpellSkeleton + For $i = $eSpellJump To $eSpellBat GUICtrlSetData($g_ahTxtTrainArmySpellCount[$i], 0) GUICtrlSetData($g_ahLblTrainArmySpellLevel[$i], 0) Next @@ -243,11 +243,13 @@ Func TotalSpellCountClick() GUICtrlSetData($g_ahTxtTrainArmySpellCount[$eSpellClone], 0) GUICtrlSetData($g_ahTxtTrainArmySpellCount[$eSpellHaste], 0) GUICtrlSetData($g_ahTxtTrainArmySpellCount[$eSpellSkeleton], 0) + GUICtrlSetData($g_ahTxtTrainArmySpellCount[$eSpellBat], 0) GUICtrlSetData($g_ahLblTrainArmySpellLevel[$eSpellJump], 0) GUICtrlSetData($g_ahLblTrainArmySpellLevel[$eSpellFreeze], 0) GUICtrlSetData($g_ahLblTrainArmySpellLevel[$eSpellClone], 0) GUICtrlSetData($g_ahLblTrainArmySpellLevel[$eSpellHaste], 0) GUICtrlSetData($g_ahLblTrainArmySpellLevel[$eSpellSkeleton], 0) + GUICtrlSetData($g_ahLblTrainArmySpellLevel[$eSpellBat], 0) EndIf If $g_iTownHallLevel > 8 Or $g_iTownHallLevel = 0 Then @@ -255,6 +257,7 @@ Func TotalSpellCountClick() _GUI_Value_STATE("SHOW", $g_aiTrainArmySpellLevel[$eSpellFreeze] > 0 ? $groupFreeze : $groupIcnFreeze) _GUI_Value_STATE("SHOW", $g_aiTrainArmySpellLevel[$eSpellHaste] > 0 ? $groupHaste : $groupIcnHaste) _GUI_Value_STATE("SHOW", $g_aiTrainArmySpellLevel[$eSpellSkeleton] > 0 ? $groupSkeleton : $groupIcnSkeleton) + _GUI_Value_STATE("SHOW", $g_aiTrainArmySpellLevel[$eSpellBat] > 0 ? $groupSkeleton : $groupIcnBat) Else GUICtrlSetData($g_ahTxtTrainArmySpellCount[$eSpellClone], 0) GUICtrlSetData($g_ahLblTrainArmySpellLevel[$eSpellClone], 0) @@ -516,7 +519,7 @@ Func BtnSpellsOrderSet() Local $bMissingTroop = False ; flag for when troops are not assigned by user Local $aiBrewOrder[$eSpellCount] = [ _ $eSpellLightning, $eSpellHeal, $eSpellRage, $eSpellJump, $eSpellFreeze, $eSpellClone, _ - $eSpellPoison, $eSpellEarthquake, $eSpellHaste, $eSpellSkeleton] + $eSpellPoison, $eSpellEarthquake, $eSpellHaste, $eSpellSkeleton, $eSpellBat] ; check for duplicate combobox index and take action For $i = 0 To UBound($g_ahCmbSpellsOrder) - 1 @@ -603,7 +606,7 @@ Func BtnTroopOrderSet() Local $aiUsedTroop[$eTroopCount] = [ _ $eTroopBarbarian, $eTroopArcher, $eTroopGiant, $eTroopGoblin, $eTroopWallBreaker, $eTroopBalloon, $eTroopWizard, _ $eTroopHealer, $eTroopDragon, $eTroopPekka, $eTroopBabyDragon, $eTroopMiner, $eTroopElectroDragon, $eTroopMinion, $eTroopHogRider, _ - $eTroopValkyrie, $eTroopGolem, $eTroopWitch, $eTroopLavaHound, $eTroopBowler] + $eTroopValkyrie, $eTroopGolem, $eTroopWitch, $eTroopLavaHound, $eTroopBowler, $eTroopIceGolem] ; check for duplicate combobox index and take action For $i = 0 To UBound($g_ahCmbTroopOrder) - 1 @@ -974,7 +977,7 @@ Func CalCostCamp() $iElixirCostCamp += $g_aiArmyCompTroops[$i] * $g_aiTroopCostPerLevel[$i][$g_aiTrainArmyTroopLevel[$i]] Next - For $i = $eTroopMinion To $eTroopBowler + For $i = $eTroopMinion To $eTroopIceGolem $iDarkCostCamp += $g_aiArmyCompTroops[$i] * $g_aiTroopCostPerLevel[$i][$g_aiTrainArmyTroopLevel[$i]] Next @@ -989,7 +992,7 @@ Func CalCostSpell() $iElixirCostSpell += $g_aiArmyCompSpells[$i] * $g_aiSpellCostPerLevel[$i][$g_aiTrainArmySpellLevel[$i]] Next - For $i = $eSpellPoison To $eSpellSkeleton + For $i = $eSpellPoison To $eSpellBat $iDarkCostSpell += $g_aiArmyCompSpells[$i] * $g_aiSpellCostPerLevel[$i][$g_aiTrainArmySpellLevel[$i]] Next diff --git a/COCBot/GUI/MBR GUI Control Collectors.au3 b/COCBot/GUI/MBR GUI Control Collectors.au3 index f73782359..363180cb4 100644 --- a/COCBot/GUI/MBR GUI Control Collectors.au3 +++ b/COCBot/GUI/MBR GUI Control Collectors.au3 @@ -16,7 +16,7 @@ Func checkCollectors($log = False, $showLabel = True) Local $anyCollectorsEnabled = 0 - For $i = 6 To 12 + For $i = 6 To 13 If $g_abCollectorLevelEnabled[$i] Then $anyCollectorsEnabled = 1 ExitLoop @@ -38,7 +38,7 @@ Func checkCollectors($log = False, $showLabel = True) EndFunc ;==>checkCollectors Func chkDBCollector() - For $i = 6 To 12 + For $i = 6 To 13 If $g_ahChkDBCollectorLevel[$i] = @GUI_CtrlId Then If $i = 6 Then $g_abCollectorLevelEnabled[6] = False @@ -54,7 +54,7 @@ Func chkDBCollector() EndFunc ;==>chkDBCollector Func cmbDBCollector() - For $i = 6 To 12 + For $i = 6 To 13 If $g_ahCmbDBCollectorLevel[$i] = @GUI_CtrlId Then $g_aiCollectorLevelFill[$i] = _GUICtrlComboBox_GetCurSel($g_ahCmbDBCollectorLevel[$i]) ExitLoop diff --git a/COCBot/GUI/MBR GUI Control Tab Village.au3 b/COCBot/GUI/MBR GUI Control Tab Village.au3 index b4ebc53ab..ee66e5a73 100644 --- a/COCBot/GUI/MBR GUI Control Tab Village.au3 +++ b/COCBot/GUI/MBR GUI Control Tab Village.au3 @@ -86,8 +86,8 @@ EndFunc ;==>CmbClanCastleTroop Func CmbClanCastleSpell() For $i = 0 To UBound($g_ahCmbClanCastleSpell) - 1 - If _GUICtrlComboBox_GetCurSel($g_ahCmbClanCastleSpell[$i]) = $eCSpell - $eLSpell Then _GUICtrlComboBox_SetCurSel($g_ahCmbClanCastleSpell[$i], $eSkSpell - $eLSpell + 1) - If _GUICtrlComboBox_GetCurSel($g_ahCmbClanCastleSpell[$i]) <= $eSkSpell - $eLSpell Then + If _GUICtrlComboBox_GetCurSel($g_ahCmbClanCastleSpell[$i]) = $eCSpell - $eLSpell Then _GUICtrlComboBox_SetCurSel($g_ahCmbClanCastleSpell[$i], $eBtSpell - $eLSpell + 1) + If _GUICtrlComboBox_GetCurSel($g_ahCmbClanCastleSpell[$i]) <= $eBtSpell - $eLSpell Then GUICtrlSetState($g_ahTxtClanCastleSpell[$i], $GUI_ENABLE) Else GUICtrlSetState($g_ahTxtClanCastleSpell[$i], $GUI_DISABLE) diff --git a/COCBot/GUI/MBR GUI Design Child Attack - Activebase-Attack.au3 b/COCBot/GUI/MBR GUI Design Child Attack - Activebase-Attack.au3 index e668af7cb..81252a098 100644 --- a/COCBot/GUI/MBR GUI Design Child Attack - Activebase-Attack.au3 +++ b/COCBot/GUI/MBR GUI Design Child Attack - Activebase-Attack.au3 @@ -17,11 +17,11 @@ ; Attack with Global $g_hCmbABAlgorithm = 0, $g_hCmbABSelectTroop = 0, $g_hChkABKingAttack = 0, $g_hChkABQueenAttack = 0, $g_hChkABWardenAttack = 0, $g_hChkABDropCC = 0 Global $g_hChkABLightSpell = 0, $g_hChkABHealSpell = 0, $g_hChkABRageSpell = 0, $g_hChkABJumpSpell = 0, $g_hChkABFreezeSpell = 0, $g_hChkABCloneSpell = 0, _ - $g_hChkABPoisonSpell = 0, $g_hChkABEarthquakeSpell = 0, $g_hChkABHasteSpell = 0, $g_hChkABSkeletonSpell = 0 + $g_hChkABPoisonSpell = 0, $g_hChkABEarthquakeSpell = 0, $g_hChkABHasteSpell = 0, $g_hChkABSkeletonSpell = 0, $g_hChkABBatSpell = 0 Global $g_hGrpABAttack = 0, $g_hPicABKingAttack = 0, $g_hPicABQueenAttack = 0, $g_hPicABWardenAttack = 0, $g_hPicABDropCC = 0 Global $g_hPicABLightSpell = 0, $g_hPicABHealSpell = 0, $g_hPicABRageSpell = 0, $g_hPicABJumpSpell = 0, $g_hPicABFreezeSpell = 0, $g_hPicABCloneSpell = 0, _ - $g_hPicABPoisonSpell = 0, $g_hPicABEarthquakeSpell = 0, $g_hPicABHasteSpell = 0, $g_hPicABSkeletonSpell = 0 + $g_hPicABPoisonSpell = 0, $g_hPicABEarthquakeSpell = 0, $g_hPicABHasteSpell = 0, $g_hPicABSkeletonSpell = 0, $g_hPicABBatSpell = 0 ; TH Snipe Global $g_hChkTHSnipeBeforeLBEnable = 0, $g_hTxtTHSnipeBeforeLBTiles = 0, $g_hCmbTHSnipeBeforeLBScript = 0 @@ -160,6 +160,13 @@ Func CreateAttackSearchActiveBaseAttack() _GUICtrlSetTip(-1, $sTxtTip) $g_hChkABSkeletonSpell = GUICtrlCreateCheckbox("", $x + 27, $y, 17, 17) _GUICtrlSetTip(-1, $sTxtTip) + + $x += 46 + $g_hPicABBatSpell = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBatSpell, $x, $y, 24, 24) + $sTxtTip = GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Chk-Use-Bat_Info_01", -1) + _GUICtrlSetTip(-1, $sTxtTip) + $g_hChkABBatSpell = GUICtrlCreateCheckbox("", $x + 27, $y, 17, 17) + _GUICtrlSetTip(-1, $sTxtTip) GUICtrlCreateGroup("", -99, -99, 1, 1) Local $x = 10, $y = 268 @@ -195,7 +202,8 @@ Func CreateAttackSearchActiveBaseAttack() $g_hCmbABSiege = GUICtrlCreateCombo("", $x, $y + 14, 130, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) GUICtrlSetData(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_01", -1) & "|" & _ GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_02", -1) & "|" & _ - GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_03", -1), GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_01", -1)) + GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_03", -1) & "|" & _ + GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_04", "Stone Slammer"), GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_01", -1)) GUICtrlSetOnEvent(-1, "cmbABSiege") GUICtrlCreateGroup("", -99, -99, 1, 1) diff --git a/COCBot/GUI/MBR GUI Design Child Attack - Deadbase-Attack.au3 b/COCBot/GUI/MBR GUI Design Child Attack - Deadbase-Attack.au3 index 38a2dfe6e..3ec9b1719 100644 --- a/COCBot/GUI/MBR GUI Design Child Attack - Deadbase-Attack.au3 +++ b/COCBot/GUI/MBR GUI Design Child Attack - Deadbase-Attack.au3 @@ -17,11 +17,11 @@ ; Attack with Global $g_hCmbDBAlgorithm = 0, $g_hCmbDBSelectTroop = 0, $g_hChkDBKingAttack = 0, $g_hChkDBQueenAttack = 0, $g_hChkDBWardenAttack = 0, $g_hChkDBDropCC = 0 Global $g_hChkDBLightSpell = 0, $g_hChkDBHealSpell = 0, $g_hChkDBRageSpell = 0, $g_hChkDBJumpSpell = 0, $g_hChkDBFreezeSpell = 0, $g_hChkDBCloneSpell = 0, _ - $g_hChkDBPoisonSpell = 0, $g_hChkDBEarthquakeSpell = 0, $g_hChkDBHasteSpell = 0, $g_hChkDBSkeletonSpell = 0 + $g_hChkDBPoisonSpell = 0, $g_hChkDBEarthquakeSpell = 0, $g_hChkDBHasteSpell = 0, $g_hChkDBSkeletonSpell = 0, $g_hChkDBBatSpell = 0 Global $g_hPicDBKingAttack = 0, $g_hPicDBQueenAttack = 0, $g_hPicDBWardenAttack = 0, $g_hPicDBDropCC = 0 Global $g_hPicDBLightSpell = 0, $g_hPicDBHealSpell = 0, $g_hPicDBRageSpell = 0, $g_hPicDBJumpSpell = 0, $g_hPicDBFreezeSpell = 0, $g_hPicDBCloneSpell = 0, _ - $g_hPicDBPoisonSpell = 0, $g_hPicDBEarthquakeSpell = 0, $g_hPicDBHasteSpell = 0, $g_hPicDBSkeletonSpell = 0 + $g_hPicDBPoisonSpell = 0, $g_hPicDBEarthquakeSpell = 0, $g_hPicDBHasteSpell = 0, $g_hPicDBSkeletonSpell = 0, $g_hPicDBBatSpell = 0 ; TH Snipe Global $g_hChkTHSnipeBeforeDBEnable = 0, $g_hTxtTHSnipeBeforeDBTiles = 0, $g_hCmbTHSnipeBeforeDBScript = 0 @@ -158,10 +158,17 @@ Func CreateAttackSearchDeadBaseAttack() $x += 46 $g_hPicDBSkeletonSpell = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnSkeletonSpell, $x, $y, 24, 24) - $sTxtTip = GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Chk-Use-Skeleton_Info_01", "Use your Skeletons Spells when Attacking...") + $sTxtTip = GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Chk-Use-Skeleton_Info_01", "Use your Bats Spells when Attacking...") _GUICtrlSetTip(-1, $sTxtTip) $g_hChkDBSkeletonSpell = GUICtrlCreateCheckbox("", $x + 27, $y, 17, 17) _GUICtrlSetTip(-1, $sTxtTip) + + $x += 46 + $g_hPicDBBatSpell = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBatSpell, $x, $y, 24, 24) + $sTxtTip = GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Chk-Use-Bat_Info_01", "Use your Bats Spells when Attacking...") + _GUICtrlSetTip(-1, $sTxtTip) + $g_hChkDBBatSpell = GUICtrlCreateCheckbox("", $x + 27, $y, 17, 17) + _GUICtrlSetTip(-1, $sTxtTip) GUICtrlCreateGroup("", -99, -99, 1, 1) Local $x = 10, $y = 268 @@ -197,7 +204,8 @@ Func CreateAttackSearchDeadBaseAttack() $g_hCmbDBSiege = GUICtrlCreateCombo("", $x, $y + 14, 130, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) GUICtrlSetData(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_01", "Castle only") & "|" & _ GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_02", "Wall Wrecker") & "|" & _ - GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_03", "Battle Blimp"), GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_01", -1)) + GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_03", "Battle Blimp")& "|" & _ + GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_04", "Stone Slammer"), GetTranslatedFileIni("MBR GUI Design Child Attack - Attack", "Cmb-Siege_Item_01", -1)) GUICtrlSetOnEvent(-1, "cmbDBSiege") GUICtrlCreateGroup("", -99, -99, 1, 1) diff --git a/COCBot/GUI/MBR GUI Design Child Attack - Deadbase-Collectors.au3 b/COCBot/GUI/MBR GUI Design Child Attack - Deadbase-Collectors.au3 index bd0be0f64..f1e7dd2de 100644 --- a/COCBot/GUI/MBR GUI Design Child Attack - Deadbase-Collectors.au3 +++ b/COCBot/GUI/MBR GUI Design Child Attack - Deadbase-Collectors.au3 @@ -15,8 +15,8 @@ #include-once Global $g_hChkDBDisableCollectorsFilter = 0 -Global $g_ahChkDBCollectorLevel[13] = [-1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0] ; elements 0 thru 5 are never referenced -Global $g_ahCmbDBCollectorLevel[13] = [-1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0] ; elements 0 thru 5 are never referenced +Global $g_ahChkDBCollectorLevel[14] = [-1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0] ; elements 0 thru 5 are never referenced +Global $g_ahCmbDBCollectorLevel[14] = [-1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0] ; elements 0 thru 5 are never referenced Global $g_hCmbMinCollectorMatches = 0, $g_hSldCollectorTolerance = 0, $g_hLblCollectorWarning = 0 Func CreateAttackSearchDeadBaseCollectors() @@ -31,119 +31,24 @@ Func CreateAttackSearchDeadBaseCollectors() GUICtrlSetState(-1, $GUI_UNCHECKED) _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "ChkDisableCollectorsFilter_Info_01", "Disable Collector Filter CHANGES DeadBase into another ActiveBase search")) - $y += 40 - $g_ahChkDBCollectorLevel[6] = GUICtrlCreateCheckbox("", $x, $y, 18, 18) - $sTxtTip = $s_TxtTip1 & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "ChkCollectorLevel6_Info_01", "for level 6 elixir collectors during dead base detection.") - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlSetState(-1, BitOR($GUI_UNCHECKED, $GUI_DISABLE)) - GUICtrlSetOnEvent(-1, "chkDBCollector") - _GUICtrlCreateIcon($g_sLibIconPath, $eIcnCollector, $x + 20, $y, 16, 16) - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel6", "Lvl 6. Must be >"), $x + 40, $y + 3, -1, -1) - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlSetState(-1, $GUI_DISABLE) - $g_ahCmbDBCollectorLevel[6] = GUICtrlCreateCombo("", $x + 125, $y, 75, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel6_Info_01", 'Select how full a level 6 collector needs to be for it to be marked "dead"')) - GUICtrlSetState(-1, $GUI_DISABLE) - GUICtrlSetData(-1, "50%|100%", "50%") - GUICtrlSetOnEvent(-1, "cmbDBCollector") - GUICtrlCreateLabel($g_hTxtFull, $x + 205, $y + 3) - - $y += 25 - $g_ahChkDBCollectorLevel[7] = GUICtrlCreateCheckbox("", $x, $y, 18, 18) - $sTxtTip = $s_TxtTip1 & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "ChkCollectorLevel7_Info_01", "for level 7 elixir collectors during dead base detection.") - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlSetState(-1, $GUI_CHECKED) - GUICtrlSetOnEvent(-1, "chkDBCollector") - _GUICtrlCreateIcon($g_sLibIconPath, $eIcnCollector, $x + 20, $y, 16, 16) - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel7", "Lvl 7. Must be >"), $x + 40, $y + 3, -1, -1) - _GUICtrlSetTip(-1, $sTxtTip) - $g_ahCmbDBCollectorLevel[7] = GUICtrlCreateCombo("", $x + 125, $y, 75, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel7_Info_01", 'Select how full a level 7 collector needs to be for it to be marked "dead"')) - GUICtrlSetData(-1, "50%|100%", "50%") - GUICtrlSetOnEvent(-1, "cmbDBCollector") - GUICtrlCreateLabel($g_hTxtFull, $x + 205, $y + 3) - - $y += 25 - $g_ahChkDBCollectorLevel[8] = GUICtrlCreateCheckbox("", $x, $y, 18, 18) - $sTxtTip = $s_TxtTip1 & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "ChkCollectorLevel8_Info_01", "for level 8 elixir collectors during dead base detection.") - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlSetState(-1, $GUI_CHECKED) - GUICtrlSetOnEvent(-1, "chkDBCollector") - _GUICtrlCreateIcon($g_sLibIconPath, $eIcnCollector, $x + 20, $y, 16, 16) - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel8", "Lvl 8. Must be >"), $x + 40, $y + 3, -1, -1) - _GUICtrlSetTip(-1, $sTxtTip) - $g_ahCmbDBCollectorLevel[8] = GUICtrlCreateCombo("", $x + 125, $y, 75, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel8_Info_01", 'Select how full a level 8 collector needs to be for it to be marked "dead"')) - GUICtrlSetData(-1, "50%|100%", "50%") - GUICtrlSetOnEvent(-1, "cmbDBCollector") - GUICtrlCreateLabel($g_hTxtFull, $x + 205, $y + 3) - - $y += 25 - $g_ahChkDBCollectorLevel[9] = GUICtrlCreateCheckbox("", $x, $y, 18, 18) - $sTxtTip = $s_TxtTip1 & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "ChkCollectorLevel9_Info_01", "for level 9 elixir collectors during dead base detection.") - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlSetState(-1, $GUI_CHECKED) - GUICtrlSetOnEvent(-1, "chkDBCollector") - _GUICtrlCreateIcon($g_sLibIconPath, $eIcnCollector, $x + 20, $y, 16, 16) - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel9", "Lvl 9. Must be >"), $x + 40, $y + 3, -1, -1) - _GUICtrlSetTip(-1, $sTxtTip) - $g_ahCmbDBCollectorLevel[9] = GUICtrlCreateCombo("", $x + 125, $y, 75, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel9_Info_01", 'Select how full a level 9 collector needs to be for it to be marked "dead"')) - GUICtrlSetData(-1, "50%|100%", "50%") - GUICtrlSetOnEvent(-1, "cmbDBCollector") - GUICtrlCreateLabel($g_hTxtFull, $x + 205, $y + 3) - - $y += 25 - $g_ahChkDBCollectorLevel[10] = GUICtrlCreateCheckbox("", $x, $y, 18, 18) - $sTxtTip = $s_TxtTip1 & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "ChkCollectorLevel10_Info_01", "for level 10 elixir collectors during dead base detection.") - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlSetState(-1, $GUI_CHECKED) - GUICtrlSetOnEvent(-1, "chkDBCollector") - _GUICtrlCreateIcon($g_sLibIconPath, $eIcnCollector, $x + 20, $y, 16, 16) - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel10", "Lvl 10. Must be >"), $x + 40, $y + 3, -1, -1) - _GUICtrlSetTip(-1, $sTxtTip) - $g_ahCmbDBCollectorLevel[10] = GUICtrlCreateCombo("", $x + 125, $y, 75, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel10_Info_01", 'Select how full a level 10 collector needs to be for it to be marked "dead"')) - GUICtrlSetData(-1, "50%|100%", "50%") - GUICtrlSetOnEvent(-1, "cmbDBCollector") - GUICtrlCreateLabel($g_hTxtFull, $x + 205, $y + 3) - - $y += 25 - $g_ahChkDBCollectorLevel[11] = GUICtrlCreateCheckbox("", $x, $y, 18, 18) - $sTxtTip = $s_TxtTip1 & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "ChkCollectorLevel11_Info_01", "for level 11 elixir collectors during dead base detection.") - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlSetState(-1, $GUI_CHECKED) - GUICtrlSetOnEvent(-1, "chkDBCollector") - _GUICtrlCreateIcon($g_sLibIconPath, $eIcnCollector, $x + 20, $y, 16, 16) - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel11", "Lvl 11. Must be >"), $x + 40, $y + 3, -1, -1) - _GUICtrlSetTip(-1, $sTxtTip) - $g_ahCmbDBCollectorLevel[11] = GUICtrlCreateCombo("", $x + 125, $y, 75, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel11_Info_01", 'Select how full a level 11 collector needs to be for it to be marked "dead"')) - GUICtrlSetData(-1, "50%|100%", "50%") - GUICtrlSetOnEvent(-1, "cmbDBCollector") - GUICtrlCreateLabel($g_hTxtFull, $x + 205, $y + 3) - - $y += 25 - $g_ahChkDBCollectorLevel[12] = GUICtrlCreateCheckbox("", $x, $y, 18, 18) - $sTxtTip = $s_TxtTip1 & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "ChkCollectorLevel12_Info_01", "for level 12 elixir collectors during dead base detection.") - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlSetState(-1, $GUI_CHECKED) - GUICtrlSetOnEvent(-1, "chkDBCollector") - _GUICtrlCreateIcon($g_sLibIconPath, $eIcnCollector, $x + 20, $y, 16, 16) - _GUICtrlSetTip(-1, $sTxtTip) - GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel12", "Lvl 12. Must be >"), $x + 40, $y + 3, -1, -1) - _GUICtrlSetTip(-1, $sTxtTip) - $g_ahCmbDBCollectorLevel[12] = GUICtrlCreateCombo("", $x + 125, $y, 75, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel12_Info_01", 'Select how full a level 12 collector needs to be for it to be marked "dead"')) - GUICtrlSetData(-1, "50%|100%", "50%") - GUICtrlSetOnEvent(-1, "cmbDBCollector") - GUICtrlCreateLabel($g_hTxtFull, $x + 205, $y + 3) + $y += 15 + For $i = 6 To 13 + $y += 25 + $g_ahChkDBCollectorLevel[$i] = GUICtrlCreateCheckbox("", $x, $y, 18, 18) + $sTxtTip = $s_TxtTip1 & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "ChkCollectorLevel" & $i & "_Info_01", "for level " & $i & " elixir collectors during dead base detection.") + _GUICtrlSetTip(-1, $sTxtTip) + GUICtrlSetState(-1, ($i = 6 ? GUICtrlSetState(-1, BitOR($GUI_UNCHECKED, $GUI_DISABLE)) : $GUI_CHECKED)) + GUICtrlSetOnEvent(-1, "chkDBCollector") + _GUICtrlCreateIcon($g_sLibIconPath, $eIcnCollector, $x + 20, $y, 16, 16) + _GUICtrlSetTip(-1, $sTxtTip) + GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel" & $i, "Lvl " & $i & ". Must be >"), $x + 40, $y + 3, -1, -1) + _GUICtrlSetTip(-1, $sTxtTip) + $g_ahCmbDBCollectorLevel[$i] = GUICtrlCreateCombo("", $x + 125, $y, 75, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) + _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblCollectorLevel" & $i & "_Info_01", "Select how full a level " & $i & ' collector needs to be for it to be marked "dead"')) + GUICtrlSetData(-1, "50%|100%", "50%") + GUICtrlSetOnEvent(-1, "cmbDBCollector") + GUICtrlCreateLabel($g_hTxtFull, $x + 205, $y + 3) + Next $y += 25 GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Deadbase-Collectors", "LblMinCollectorMatches", "Collectors required"), $x, $y + 3, -1, -1) diff --git a/COCBot/GUI/MBR GUI Design Child Attack - Troops.au3 b/COCBot/GUI/MBR GUI Design Child Attack - Troops.au3 index e60ee2bf6..a8e38197f 100644 --- a/COCBot/GUI/MBR GUI Design Child Attack - Troops.au3 +++ b/COCBot/GUI/MBR GUI Design Child Attack - Troops.au3 @@ -19,18 +19,18 @@ Global $g_hGUI_TRAINARMY_TAB = 0, $g_hGUI_TRAINARMY_TAB_ITEM1 = 0, $g_hGUI_TRAIN ; Troops/Spells sub-tab Global $g_hChkUseQuickTrain = 0, $g_ahChkArmy[3] = [0, 0, 0] -Global $g_ahTxtTrainArmyTroopCount[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_ahLblTrainArmyTroopLevel[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_ahTxtTrainArmySpellCount[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_ahLblTrainArmySpellLevel[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_ahTxtTrainArmySiegeCount[$eSiegeMachineCount] = [0, 0] -Global $g_ahLblTrainArmySiegeLevel[$eSiegeMachineCount] = [0, 0] +Global $g_ahTxtTrainArmyTroopCount[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahLblTrainArmyTroopLevel[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahTxtTrainArmySpellCount[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahLblTrainArmySpellLevel[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahTxtTrainArmySiegeCount[$eSiegeMachineCount] = [0, 0, 0] +Global $g_ahLblTrainArmySiegeLevel[$eSiegeMachineCount] = [0, 0, 0] Global $g_hTxtFullTroop = 0, $g_hChkTotalCampForced = 0, $g_hTxtTotalCampForced = 0, $g_hChkForceBrewBeforeAttack = 0 Global $g_hChkDoubleTrain = 0 Global $g_hGrpTrainTroops = 0 -Global $g_ahPicTrainArmyTroop[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_ahPicTrainArmySpell[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahPicTrainArmyTroop[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahPicTrainArmySpell[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Global $g_ahPicTrainArmySiege[$eSiegeMachineCount] = [0, 0] Global $g_hLblTotalTimeCamp = 0, $g_hLblElixirCostCamp = 0, $g_hLblDarkCostCamp = 0, $g_hCalTotalTroops = 0, $g_hLblTotalProgress = 0, $g_hLblCountTotal = 0, _ $g_hTxtTotalCountSpell = 0, $g_hLblTotalTimeSpell = 0, $g_hLblElixirCostSpell = 0, $g_hLblDarkCostSpell = 0, _ @@ -65,12 +65,13 @@ Func LoadTranslatedTrainTroopsOrderList() GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGolems", "Golems"), _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWitches", "Witches"), _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtLavaHounds", "Lava Hounds"), _ - GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBowlers", "Bowlers")] + GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBowlers", "Bowlers"), _ + GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtIceGolems", "Ice Golems")] EndFunc ;==>LoadTranslatedTrainTroopsOrderList Global $g_hChkCustomTrainOrderEnable = 0 -Global $g_ahCmbTroopOrder[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_ahImgTroopOrder[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahCmbTroopOrder[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahImgTroopOrder[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Global $g_hBtnTroopOrderSet = 0, $g_ahImgTroopOrderSet = 0 Global $g_hBtnRemoveTroops @@ -87,12 +88,13 @@ Func LoadTranslatedBrewSpellsOrderList() GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortPoisonSpells", "Poison"), _ GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortEarthquakeSpells", "EarthQuake"), _ GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortHasteSpells", "Haste"), _ - GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortSkeletonSpells", "Skeleton")] + GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortSkeletonSpells", "Skeleton"), _ + GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortBatSpells", "Bat")] EndFunc ;==>LoadTranslatedBrewSpellsOrderList Global $g_hChkCustomBrewOrderEnable = 0 -Global $g_ahCmbSpellsOrder[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_ahImgSpellsOrder[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahCmbSpellsOrder[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_ahImgSpellsOrder[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Global $g_hBtnSpellsOrderSet = 0, $g_ahImgSpellsOrderSet = 0 Global $g_hBtnRemoveSpells @@ -162,7 +164,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 3) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Giants Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGiants", "Giants") $g_ahPicTrainArmyTroop[$eTroopGiant] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnGiant, $x, $y - 5, 32, 32) @@ -177,7 +179,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; WallBreakers Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWallBreakers", "Wall Breakers") $g_ahPicTrainArmyTroop[$eTroopWallBreaker] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnWallBreaker, $x, $y - 5, 32, 32) @@ -192,7 +194,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 3) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Wizards Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWizards", "Wizards") $g_ahPicTrainArmyTroop[$eTroopWizard] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnWizard, $x, $y - 5, 32, 32) @@ -207,7 +209,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Dragon Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtDragons", "Dragons") $g_ahPicTrainArmyTroop[$eTroopDragon] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDragon, $x, $y - 5, 32, 32) @@ -222,7 +224,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; BDragon Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBabyDragons", "Baby Dragons") $g_ahPicTrainArmyTroop[$eTroopBabyDragon] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBabyDragon, $x, $y - 5, 32, 32) @@ -237,7 +239,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 45 + $x += 40 ; Electro Dragon Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtElectroDragons", "Electro Dragons") $g_ahPicTrainArmyTroop[$eTroopElectroDragon] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnElectroDragon, $x, $y - 5, 32, 32) @@ -252,7 +254,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Minions Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtMinions", "Minions") $g_ahPicTrainArmyTroop[$eTroopMinion] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnMinion, $x, $y - 5, 32, 32) @@ -267,7 +269,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 3) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Valkyries Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtValkyries", "Valkyries") $g_ahPicTrainArmyTroop[$eTroopValkyrie] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnValkyrie, $x, $y - 5, 32, 32) @@ -282,7 +284,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Witches Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWitches", "Witches") $g_ahPicTrainArmyTroop[$eTroopWitch] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnWitch, $x, $y - 5, 32, 32) @@ -296,21 +298,36 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetState(-1, $GUI_HIDE) GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - - $x += 38 - ; Wall Wrecker - Local $sSiegeName = GetTranslatedFileIni("MBR Global GUI Design Names Siege Machines", "TxtWallWrecker", "Wall Wrecker") - $g_ahPicTrainArmySiege[$eSiegeWallWrecker] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnWallW, $x, $y - 5, 32, 32) + + $x += 35 + ; Lavas + Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtLavaHounds", "Lava Hounds") + $g_ahPicTrainArmyTroop[$eTroopLavaHound] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnLavaHound, $x, $y - 5, 32, 32) + _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR Global GUI Design", "Level", -1) & " " & $sTroopName & ":" & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Troops", "Mouse_Left_Click", -1)) + GUICtrlSetOnEvent(-1, "TrainTroopLevelClick") + $g_ahLblTrainArmyTroopLevel[$eTroopLavaHound] = GUICtrlCreateLabel("0", $x + 2, $y + 14, 6, 11) + GUICtrlSetBkColor(-1, $COLOR_WHITE) + GUICtrlSetFont(-1, 7, 400) + $g_ahTxtTrainArmyTroopCount[$eTroopLavaHound] = GUICtrlCreateInput("0", $x + 1, $y + 29, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) + _GUICtrlSetTip(-1, $sTxtSetPerc & " " & $sTroopName & " " & $sTxtSetPerc2) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetLimit(-1, 2) + GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") + + $x += 35 + ; Battle Blimp + Local $sSiegeName = GetTranslatedFileIni("MBR Global GUI Design Names Siege Machines", "TxtBattleBlimp", "Battle Blimp") + $g_ahPicTrainArmySiege[$eSiegeBattleBlimp] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBattleB, $x, $y - 5, 32, 32) _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR Global GUI Design", "Level", -1) & " " & $sSiegeName & ":" & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Troops", "Mouse_Left_Click", -1)) GUICtrlSetOnEvent(-1, "TrainSiegeLevelClick") - $g_ahLblTrainArmySiegeLevel[$eSiegeWallWrecker] = GUICtrlCreateLabel("0", $x + 2, $y + 14, 6, 11) + $g_ahLblTrainArmySiegeLevel[$eSiegeBattleBlimp] = GUICtrlCreateLabel("0", $x + 2, $y + 14, 6, 11) GUICtrlSetBkColor(-1, $COLOR_WHITE) GUICtrlSetFont(-1, 7, 400) - $g_ahTxtTrainArmySiegeCount[$eSiegeWallWrecker] = GUICtrlCreateInput("0", $x + 1, $y + 29, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) + $g_ahTxtTrainArmySiegeCount[$eSiegeBattleBlimp] = GUICtrlCreateInput("0", $x + 1, $y + 29, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) _GUICtrlSetTip(-1, $sTxtSetPerc & " " & $sSiegeName & " " & $sTxtSetPerc2) GUICtrlSetState(-1, $GUI_HIDE) GUICtrlSetLimit(-1, 2) - GUICtrlSetOnEvent(-1, "TrainSiegeCountEdit") + GUICtrlSetOnEvent(-1, "TrainSiegeCountEdit") ; Next Row $x = $iStartX @@ -330,7 +347,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 3) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Goblins Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGoblins", "Goblins") $g_ahPicTrainArmyTroop[$eTroopGoblin] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnGoblin, $x, $y - 5, 32, 32) @@ -345,7 +362,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 3) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Balloons Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBalloons", "Balloons") $g_ahPicTrainArmyTroop[$eTroopBalloon] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBalloon, $x, $y - 5, 32, 32) @@ -360,7 +377,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Healers Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtHealers", "Healers") $g_ahPicTrainArmyTroop[$eTroopHealer] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnHealer, $x, $y - 5, 32, 32) @@ -375,7 +392,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Pekkas Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtPekkas", "Pekkas") $g_ahPicTrainArmyTroop[$eTroopPekka] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnPekka, $x, $y - 5, 32, 32) @@ -390,7 +407,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Miners Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtMiners", "Miners") $g_ahPicTrainArmyTroop[$eTroopMiner] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnMiner, $x, $y - 5, 32, 32) @@ -405,7 +422,22 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 45 + $x += 40 + ; IceGolems + Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtIceGolems", "IceGolems") + $g_ahPicTrainArmyTroop[$eTroopIceGolem] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnIceGolem, $x, $y - 5, 32, 32) + _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR Global GUI Design", "Level", -1) & " " & $sTroopName & ":" & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Troops", "Mouse_Left_Click", -1)) + GUICtrlSetOnEvent(-1, "TrainTroopLevelClick") + $g_ahLblTrainArmyTroopLevel[$eTroopIceGolem] = GUICtrlCreateLabel("0", $x + 2, $y + 14, 6, 11) + GUICtrlSetBkColor(-1, $COLOR_WHITE) + GUICtrlSetFont(-1, 7, 400) + $g_ahTxtTrainArmyTroopCount[$eTroopIceGolem] = GUICtrlCreateInput("0", $x + 1, $y + 29, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) + _GUICtrlSetTip(-1, $sTxtSetPerc & " " & $sTroopName & " " & $sTxtSetPerc2) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetLimit(-1, 2) + GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") + + $x += 35 ; Bowlers Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBowlers", "Bowlers") $g_ahPicTrainArmyTroop[$eTroopBowler] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBowler, $x, $y - 5, 32, 32) @@ -420,7 +452,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Hogs Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtHogRiders", "Hog Riders") $g_ahPicTrainArmyTroop[$eTroopHogRider] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnHogRider, $x, $y - 5, 32, 32) @@ -435,7 +467,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 + $x += 35 ; Golems Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGolems", "Golems") $g_ahPicTrainArmyTroop[$eTroopGolem] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnGolem, $x, $y - 5, 32, 32) @@ -450,35 +482,35 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - $x += 38 - ; Lavas - Local $sTroopName = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtLavaHounds", "Lava Hounds") - $g_ahPicTrainArmyTroop[$eTroopLavaHound] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnLavaHound, $x, $y - 5, 32, 32) - _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR Global GUI Design", "Level", -1) & " " & $sTroopName & ":" & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Troops", "Mouse_Left_Click", -1)) - GUICtrlSetOnEvent(-1, "TrainTroopLevelClick") - $g_ahLblTrainArmyTroopLevel[$eTroopLavaHound] = GUICtrlCreateLabel("0", $x + 2, $y + 14, 6, 11) - GUICtrlSetBkColor(-1, $COLOR_WHITE) - GUICtrlSetFont(-1, 7, 400) - $g_ahTxtTrainArmyTroopCount[$eTroopLavaHound] = GUICtrlCreateInput("0", $x + 1, $y + 29, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) - _GUICtrlSetTip(-1, $sTxtSetPerc & " " & $sTroopName & " " & $sTxtSetPerc2) - GUICtrlSetState(-1, $GUI_HIDE) - GUICtrlSetLimit(-1, 2) - GUICtrlSetOnEvent(-1, "TrainTroopCountEdit") - - $x += 38 - ; Battle Blimp - Local $sSiegeName = GetTranslatedFileIni("MBR Global GUI Design Names Siege Machines", "TxtBattleBlimp", "Battle Blimp") - $g_ahPicTrainArmySiege[$eSiegeBattleBlimp] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBattleB, $x, $y - 5, 32, 32) + $x += 35 + ; Wall Wrecker + Local $sSiegeName = GetTranslatedFileIni("MBR Global GUI Design Names Siege Machines", "TxtWallWrecker", "Wall Wrecker") + $g_ahPicTrainArmySiege[$eSiegeWallWrecker] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnWallW, $x, $y - 5, 32, 32) _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR Global GUI Design", "Level", -1) & " " & $sSiegeName & ":" & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Troops", "Mouse_Left_Click", -1)) GUICtrlSetOnEvent(-1, "TrainSiegeLevelClick") - $g_ahLblTrainArmySiegeLevel[$eSiegeBattleBlimp] = GUICtrlCreateLabel("0", $x + 2, $y + 14, 6, 11) + $g_ahLblTrainArmySiegeLevel[$eSiegeWallWrecker] = GUICtrlCreateLabel("0", $x + 2, $y + 14, 6, 11) GUICtrlSetBkColor(-1, $COLOR_WHITE) GUICtrlSetFont(-1, 7, 400) - $g_ahTxtTrainArmySiegeCount[$eSiegeBattleBlimp] = GUICtrlCreateInput("0", $x + 1, $y + 29, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) + $g_ahTxtTrainArmySiegeCount[$eSiegeWallWrecker] = GUICtrlCreateInput("0", $x + 1, $y + 29, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) _GUICtrlSetTip(-1, $sTxtSetPerc & " " & $sSiegeName & " " & $sTxtSetPerc2) GUICtrlSetState(-1, $GUI_HIDE) GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainSiegeCountEdit") + + $x += 35 + ; Stone Slammer + Local $sSiegeName = GetTranslatedFileIni("MBR Global GUI Design Names Siege Machines", "TxtStoneSlammer", "Stone Slammer") + $g_ahPicTrainArmySiege[$eSiegeStoneSlammer] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnStoneS, $x, $y - 5, 32, 32) + _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR Global GUI Design", "Level", -1) & " " & $sSiegeName & ":" & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Troops", "Mouse_Left_Click", -1)) + GUICtrlSetOnEvent(-1, "TrainSiegeLevelClick") + $g_ahLblTrainArmySiegeLevel[$eSiegeStoneSlammer] = GUICtrlCreateLabel("0", $x + 2, $y + 14, 6, 11) + GUICtrlSetBkColor(-1, $COLOR_WHITE) + GUICtrlSetFont(-1, 7, 400) + $g_ahTxtTrainArmySiegeCount[$eSiegeStoneSlammer] = GUICtrlCreateInput("0", $x + 1, $y + 29, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) + _GUICtrlSetTip(-1, $sTxtSetPerc & " " & $sSiegeName & " " & $sTxtSetPerc2) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetLimit(-1, 2) + GUICtrlSetOnEvent(-1, "TrainSiegeCountEdit") $x = 210 @@ -544,7 +576,7 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetBkColor(-1, $COLOR_RED) GUICtrlSetState(-1, BitOR($GUI_DISABLE, $GUI_HIDE)) - $x += 38 + $x += 35 GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child Attack - Troops", "LblCountTotal", "Total"), $x + 295, $y + 7, -1, -1, $SS_RIGHT) $g_hLblCountTotal = GUICtrlCreateLabel(0, $x + 330, $y + 5, 30, 15, $SS_CENTER) _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Attack - Troops", "LblCountTotal_Info_01", "The total Units of Troops should equal Total Army Camps.")) @@ -712,6 +744,21 @@ Func CreateTroopsSpellsSubTab() GUICtrlSetState(-1, $GUI_HIDE) GUICtrlSetLimit(-1, 2) GUICtrlSetOnEvent(-1, "TrainSpellCountEdit") + + $x += 38 + ; Bat + Local $sSpellName = GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtBatSpells", "Bat Spell") + $g_ahPicTrainArmySpell[$eSpellBat] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBatSpell, $x, $y + 10, 32, 32) + _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR Global GUI Design", "Level", -1) & " " & $sSpellName & ":" & @CRLF & GetTranslatedFileIni("MBR GUI Design Child Attack - Troops", "Mouse_Left_Click", -1)) + GUICtrlSetOnEvent(-1, "TrainSpellLevelClick") + $g_ahLblTrainArmySpellLevel[$eSpellBat] = GUICtrlCreateLabel("0", $x + 2, $y + 29, 6, 11) + GUICtrlSetBkColor(-1, $COLOR_WHITE) + GUICtrlSetFont(-1, 7, 400) + $g_ahTxtTrainArmySpellCount[$eSpellBat] = GUICtrlCreateInput("0", $x + 1, $y + 44, 30, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) + _GUICtrlSetTip(-1, $sTxtSetPerc & " " & $sSpellName & " " & $sTxtSetPerc2) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetLimit(-1, 2) + GUICtrlSetOnEvent(-1, "TrainSpellCountEdit") $y += 53 $x = 17 diff --git a/COCBot/GUI/MBR GUI Design Child Bot - Stats.au3 b/COCBot/GUI/MBR GUI Design Child Bot - Stats.au3 index 178c95c49..2cbf51932 100644 --- a/COCBot/GUI/MBR GUI Design Child Bot - Stats.au3 +++ b/COCBot/GUI/MBR GUI Design Child Bot - Stats.au3 @@ -38,9 +38,9 @@ Global $g_hLblNbrOfDetectedMines[$g_iModeCount + 3] = [0, 0, 0, 0, 0, 0], $g_hLb $g_hLblNbrOfDetectedDrills[$g_iModeCount + 3] = [0, 0, 0, 0, 0, 0], $g_hLblSmartZap = 0, $g_hLblSmartLightningUsed = 0, $g_hLblSmartEarthQuakeUsed = 0 ; Donations -Global $g_hLblDonTroop[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_hLblDonSpell[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_hLblDonSiegel[$eSiegeMachineCount] = [0, 0] +Global $g_hLblDonTroop[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_hLblDonSpell[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_hLblDonSiegel[$eSiegeMachineCount] = [0, 0, 0] Global $g_hLblTotalTroopsQ = 0, $g_hLblTotalTroopsXP = 0, $g_hLblTotalSpellsQ = 0, $g_hLblTotalSpellsXP = 0 ; Multi Stats @@ -1113,6 +1113,17 @@ Func CreateDonationsSubTab() GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) GUICtrlSetColor(-1, $COLOR_BLACK) _GUICtrlSetTip(-1, $sTxtTip) + + ; SIEGE + _GUICtrlCreateIcon($g_sLibIconPath, $eIcnWallW, $x + 145, $y, 24, 24) + $sTxtTip = "" + _GUICtrlSetTip(-1, $sTxtTip) + GUICtrlCreateLabel(":", $x + 175, $y + 4, -1, 17) + GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) + $g_hLblDonSiegel[$eSiegeWallWrecker] = GUICtrlCreateLabel("0", $x + 165, $y + 4, 50, 17, $SS_RIGHT) + GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) + GUICtrlSetColor(-1, $COLOR_BLACK) + _GUICtrlSetTip(-1, $sTxtTip) $y += 28 _GUICtrlCreateIcon($g_sLibIconPath, $eIcnWallBreaker, $x - 10, $y, 24, 24) @@ -1135,17 +1146,18 @@ Func CreateDonationsSubTab() GUICtrlSetColor(-1, $COLOR_BLACK) _GUICtrlSetTip(-1, $sTxtTip) - ; SIEGE - _GUICtrlCreateIcon($g_sLibIconPath, $eIcnWallW, $x + 145, $y, 24, 24) + + ; SIEGE + _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBattleB, $x + 145, $y, 24, 24) $sTxtTip = "" _GUICtrlSetTip(-1, $sTxtTip) GUICtrlCreateLabel(":", $x + 175, $y + 4, -1, 17) GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) - $g_hLblDonSiegel[$eSiegeWallWrecker] = GUICtrlCreateLabel("0", $x + 165, $y + 4, 50, 17, $SS_RIGHT) + $g_hLblDonSiegel[$eSiegeBattleBlimp] = GUICtrlCreateLabel("0", $x + 165, $y + 4, 50, 17, $SS_RIGHT) GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) GUICtrlSetColor(-1, $COLOR_BLACK) _GUICtrlSetTip(-1, $sTxtTip) - + $y += 28 _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBalloon, $x - 10, $y, 24, 24) $sTxtTip = "" @@ -1166,17 +1178,17 @@ Func CreateDonationsSubTab() GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) GUICtrlSetColor(-1, $COLOR_BLACK) _GUICtrlSetTip(-1, $sTxtTip) - + ; SIEGE - _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBattleB, $x + 145, $y, 24, 24) + _GUICtrlCreateIcon($g_sLibIconPath, $eIcnStoneS, $x + 145, $y, 24, 24) $sTxtTip = "" _GUICtrlSetTip(-1, $sTxtTip) GUICtrlCreateLabel(":", $x + 175, $y + 4, -1, 17) GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) - $g_hLblDonSiegel[$eSiegeBattleBlimp] = GUICtrlCreateLabel("0", $x + 165, $y + 4, 50, 17, $SS_RIGHT) + $g_hLblDonSiegel[$eSiegeStoneSlammer] = GUICtrlCreateLabel("0", $x + 165, $y + 4, 50, 17, $SS_RIGHT) GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) GUICtrlSetColor(-1, $COLOR_BLACK) - _GUICtrlSetTip(-1, $sTxtTip) + _GUICtrlSetTip(-1, $sTxtTip) GUICtrlCreateGroup("", -99, -99, 1, 1) @@ -1214,6 +1226,16 @@ Func CreateDonationsSubTab() GUICtrlSetColor(-1, $COLOR_BLACK) _GUICtrlSetTip(-1, $sTxtTip) + _GUICtrlCreateIcon($g_sLibIconPath, $eIcnIceGolem, $x + 95, $y, 24, 24) + $sTxtTip = "" + _GUICtrlSetTip(-1, $sTxtTip) + GUICtrlCreateLabel(":", $x + 122, $y + 4, -1, 17) + GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) + $g_hLblDonTroop[$eTroopIceGolem] = GUICtrlCreateLabel("0", $x + 100, $y + 4, 70, 17, $SS_RIGHT) + GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) + GUICtrlSetColor(-1, $COLOR_BLACK) + _GUICtrlSetTip(-1, $sTxtTip) + $y += 28 _GUICtrlCreateIcon($g_sLibIconPath, $eIcnValkyrie, $x - 10, $y, 24, 24) $sTxtTip = "" @@ -1351,6 +1373,16 @@ Func CreateDonationsSubTab() GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) GUICtrlSetColor(-1, $COLOR_BLACK) _GUICtrlSetTip(-1, $sTxtTip) + + _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBatSpell, $x + 95, $y, 24, 24) + $sTxtTip = "" + _GUICtrlSetTip(-1, $sTxtTip) + GUICtrlCreateLabel(":", $x + 122, $y + 4, -1, 17) + GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) + $g_hLblDonSpell[$eSpellBat] = GUICtrlCreateLabel("0", $x + 115, $y + 4, 70, 17, $SS_RIGHT) + GUICtrlSetFont(-1, 9, $FW_BOLD, Default, "Arial", $CLEARTYPE_QUALITY) + GUICtrlSetColor(-1, $COLOR_BLACK) + _GUICtrlSetTip(-1, $sTxtTip) $y += 28 _GUICtrlCreateIcon($g_sLibIconPath, $eIcnEarthQuakeSpell, $x - 10, $y, 24, 24) diff --git a/COCBot/GUI/MBR GUI Design Child VIllage - Upgrade.au3 b/COCBot/GUI/MBR GUI Design Child VIllage - Upgrade.au3 index 58096ac7e..fed5e61d8 100644 --- a/COCBot/GUI/MBR GUI Design Child VIllage - Upgrade.au3 +++ b/COCBot/GUI/MBR GUI Design Child VIllage - Upgrade.au3 @@ -74,7 +74,7 @@ Func CreateVillageUpgrade() EndFunc ;==>CreateVillageUpgrade Func CreateLaboratorySubTab() - Local $sTxtNames = GetTranslatedFileIni("MBR Global GUI Design", "None", "None") & "|" & _ + Local $sTxtNames = GetTranslatedFileIni("MBR Global GUI Design", "Any", "Any") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBarbarians", "Barbarians") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtArchers", "Archers") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGiants", "Giants") & "|" & _ @@ -98,6 +98,7 @@ Func CreateLaboratorySubTab() GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtEarthQuakeSpells", "EarthQuake Spell") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtHasteSpells", "Haste Spell") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtSkeletonSpells", "Skeleton Spell") & "|" & _ + GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtBatSpells", "Bat Spell") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtMinions", "Minions") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtHogRiders", "Hog Riders") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtValkyries", "Valkyries") & "|" & _ @@ -105,8 +106,10 @@ Func CreateLaboratorySubTab() GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWitches", "Witches") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtLavaHounds", "Lava Hounds") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBowlers", "Bowlers") & "|" & _ + GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtIceGolems", "Ice Golems") & "|" & _ GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWallWreckers", "Wall Wreckers") & "|" & _ - GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBattleBlimps", "Battle Blimps") + GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBattleBlimps", "Battle Blimps") & "|" & _ + GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtStoneSlammers", "Stone Slammers") Local $x = 25, $y = 45 GUICtrlCreateGroup(GetTranslatedFileIni("MBR GUI Design Child VIllage - Upgrade_Laboratory", "Group_01", "Laboratory"), $x - 20, $y - 20, $g_iSizeWGrpTab3, $g_iSizeHGrpTab3) @@ -117,7 +120,7 @@ Func CreateLaboratorySubTab() $g_hLblNextUpgrade = GUICtrlCreateLabel(GetTranslatedFileIni("MBR GUI Design Child VIllage - Upgrade_Laboratory", "LblNextUpgrade", "Next one") & ":", $x + 80, $y + 38, 50, -1) GUICtrlSetState(-1, $GUI_DISABLE) $g_hCmbLaboratory = GUICtrlCreateCombo("", $x + 135, $y + 35, 140, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL, $WS_VSCROLL)) - GUICtrlSetData(-1, $sTxtNames, GetTranslatedFileIni("MBR Global GUI Design", "None", "None")) + GUICtrlSetData(-1, $sTxtNames, GetTranslatedFileIni("MBR Global GUI Design", "Any", "Any")) _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child VIllage - Upgrade_Laboratory", "CmbLaboratory_Info_01", "Select the troop type to upgrade with this pull down menu") & @CRLF & _ GetTranslatedFileIni("MBR GUI Design Child VIllage - Upgrade_Laboratory", "CmbLaboratory_Info_02", "The troop icon will appear on the right.") & @CRLF & _ GetTranslatedFileIni("MBR GUI Design Child VIllage - Upgrade_Laboratory", "CmbLaboratory_Info_03", "Any Dark Spell/Troop have priority over Upg Heroes!")) diff --git a/COCBot/GUI/MBR GUI Design Child Village - Donate.au3 b/COCBot/GUI/MBR GUI Design Child Village - Donate.au3 index bac277a21..880032f48 100644 --- a/COCBot/GUI/MBR GUI Design Child Village - Donate.au3 +++ b/COCBot/GUI/MBR GUI Design Child Village - Donate.au3 @@ -29,21 +29,21 @@ Global $g_ahCmbClanCastleSpell[2], $g_ahTxtClanCastleSpell[2] ; Donate Global $g_hChkExtraAlphabets = 0, $g_hChkExtraChinese = 0, $g_hChkExtraKorean = 0, $g_hChkExtraPersian = 0 -Global $g_ahChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] -Global $g_ahChkDonateAllTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] -Global $g_ahTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] -Global $g_ahTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] -Global $g_ahGrpDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] -Global $g_ahLblDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] -Global $g_ahBtnDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] - -Global $g_ahChkDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0] ; element $eSpellClone (5) is unused -Global $g_ahChkDonateAllSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0] ; element $eSpellClone (5) is unused -Global $g_ahTxtDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0] ; element $eSpellClone (5) is unused -Global $g_ahTxtBlacklistSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0] ; element $eSpellClone (5) is unused -Global $g_ahGrpDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0] ; element $eSpellClone (5) is unused -Global $g_ahLblDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0] ; element $eSpellClone (5) is unused -Global $g_ahBtnDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0] ; element $eSpellClone (5) is unused +Global $g_ahChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] +Global $g_ahChkDonateAllTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] +Global $g_ahTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] +Global $g_ahTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] +Global $g_ahGrpDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] +Global $g_ahLblDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] +Global $g_ahBtnDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] + +Global $g_ahChkDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0] ; element $eSpellClone (5) is unused +Global $g_ahChkDonateAllSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0] ; element $eSpellClone (5) is unused +Global $g_ahTxtDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0] ; element $eSpellClone (5) is unused +Global $g_ahTxtBlacklistSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0] ; element $eSpellClone (5) is unused +Global $g_ahGrpDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0] ; element $eSpellClone (5) is unused +Global $g_ahLblDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0] ; element $eSpellClone (5) is unused +Global $g_ahBtnDonateSpell[$eSpellCount] = [0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0] ; element $eSpellClone (5) is unused Global $g_ahCmbDonateCustomA[3] = [0, 0, 0], $g_ahTxtDonateCustomA[3] = [0, 0, 0], $g_ahPicDonateCustomA[3] = [0, 0, 0] Global $g_ahCmbDonateCustomB[3] = [0, 0, 0], $g_ahTxtDonateCustomB[3] = [0, 0, 0], $g_ahPicDonateCustomB[3] = [0, 0, 0] @@ -337,12 +337,14 @@ Func CreateDonateSubTab() Local $sTxtWitches = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWitches", "Witches") Local $SetLog = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtLavaHounds", "Lava Hounds") Local $sTxtBowlers = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBowlers", "Bowlers") + Local $sTxtIceGolems = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtIceGolems", "Ice Golems") Local $sTxtBabyDragons = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBabyDragons", "Baby Dragons") Local $sTxtMiners = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtMiners", "Miners") Local $sTxtElectroDragons = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtElectroDragons", "Electro Dragons") Local $sTxtWallWreckers = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWallWreckers", "Wall Wreckers") Local $sTxtBattleBlimps = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBattleBlimps", "Battle Blimps") + Local $sTxtStoneSlammers = GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtStoneSlammers", "Stone Slammers") Local $sTxtLightningSpells = GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortLightningSpells", "Lightning") Local $sTxtHealSpells = GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortHealSpells", "Heal") @@ -353,6 +355,7 @@ Func CreateDonateSubTab() Local $sTxtEarthquakeSpells = GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortEarthquakeSpells", "EarthQuake") Local $sTxtHasteSpells = GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortHasteSpells", "Haste") Local $sTxtSkeletonSpells = GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortSkeletonSpells", "Skeleton") + Local $sTxtBatSpells = GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtShortBatSpells", "Bat") Local $x = $xStart Local $y = $yStart @@ -505,19 +508,21 @@ Func CreateDonateSubTab() _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnBowler, 1) GUICtrlSetOnEvent(-1, "btnDonateTroop") $x += $Offx - $g_ahLblDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeWallWrecker] = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) + $g_ahLblDonateTroop[$eTroopIceGolem] = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetState(-1, $GUI_DISABLE) - $g_ahBtnDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeWallWrecker] = GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) - _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnWallW, 1) - GUICtrlSetOnEvent(-1, "btnDonateTroop") - $x += $Offx - $g_ahLblDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeBattleBlimp] = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) + $g_ahBtnDonateTroop[$eTroopIceGolem] = GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) + _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnIceGolem, 1) + GUICtrlSetOnEvent(-1, "btnDonateTroop") + $x += $Offx + ; Button Not Active - future expansion? + $lblBtnCustomE = GUICtrlCreateLabel("", $x + 2, $y - 2, $Offx + 2, $Offx + 2) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetState(-1, $GUI_DISABLE) - $g_ahBtnDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeBattleBlimp] = GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) - _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnBattleB, 1) - GUICtrlSetOnEvent(-1, "btnDonateTroop") + GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) + GUICtrlSetState(-1, $GUI_DISABLE) +;~ _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnTroops, 0) +;~ GUICtrlSetOnEvent(-1, "btnDonateCustomE") ;$x += $Offx ;$g_hLblDonateTroopTBD3 = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) @@ -604,49 +609,15 @@ Func CreateDonateSubTab() _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnSkeletonSpell, 1) GUICtrlSetOnEvent(-1, "btnDonateSpell") $x += $Offx - ; Button Not Active - future expansion? - $g_hLblDonateSpellTBD1 = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) + $g_ahLblDonateSpell[$eSpellBat] = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetState(-1, $GUI_DISABLE) - GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) - GUICtrlSetState(-1, $GUI_DISABLE) -;~ _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnTroops, 0) -;~ GUICtrlSetOnEvent(-1, "btnDonateNameOfSpell") + $g_ahBtnDonateSpell[$eSpellBat] = GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) + _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnBatSpell, 1) + GUICtrlSetOnEvent(-1, "btnDonateSpell") $x = $xStart - 18 $y += 40 - GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) - GUICtrlSetState(-1, $GUI_DISABLE) -;~ _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnDonBlacklist, 1) -;~ GUICtrlSetOnEvent(-1, "btnDonateBlacklist") - $x += $Offx - ; Button Not Active - future expansion? - $g_hLblDonateTroopCustomF = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) - GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) - GUICtrlSetState(-1, $GUI_DISABLE) - GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) - GUICtrlSetState(-1, $GUI_DISABLE) -;~ _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnTroops, 0) -;~ GUICtrlSetOnEvent(-1, "btnDonateCustomF") - $x += $Offx - ; Button Not Active - future expansion? - $g_hLblDonateTroopCustomG = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) - GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) - GUICtrlSetState(-1, $GUI_DISABLE) - GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) - GUICtrlSetState(-1, $GUI_DISABLE) -;~ _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnDonCustom, 1) -;~ GUICtrlSetOnEvent(-1, "btnDonateCustomG") - $x += $Offx - ; Button Not Active - future expansion? - $g_hLblDonateTroopCustomH = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) - GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) - GUICtrlSetState(-1, $GUI_DISABLE) - GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) - GUICtrlSetState(-1, $GUI_DISABLE) -;~ _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnDonCustomB, 1) -;~ GUICtrlSetOnEvent(-1, "btnDonateCustomH") - $x += $Offx ;;; Custom Combination Donate #1 by ChiefM3, edit my MonkeyHunter $g_ahLblDonateTroop[$eCustomA] = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) @@ -662,8 +633,6 @@ Func CreateDonateSubTab() $g_ahBtnDonateTroop[$eCustomB] = GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnDonCustomB, 1) GUICtrlSetOnEvent(-1, "btnDonateTroop") - - $x += 4 $x += $Offx ;;; Custom Combination Donate #3 ~ Additional Custom Donate by NguyenAnhHD $g_ahLblDonateTroop[$eCustomC] = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) @@ -680,18 +649,48 @@ Func CreateDonateSubTab() GUICtrlSetState(-1, $GUI_DISABLE) $g_ahBtnDonateTroop[$eCustomD] = GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) _GUICtrlSetImage (-1, $g_sLibIconPath, $eIcnDonCustomB, 1) - GUICtrlSetOnEvent(-1, "btnDonateTroop") - + GUICtrlSetOnEvent(-1, "btnDonateTroop") $x += $Offx ; Button Not Active - future expansion? - $g_hLblDonateTroopCustomC = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) + $g_hLblDonateTroopCustomH = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) + GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) + GUICtrlSetState(-1, $GUI_DISABLE) + GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) + GUICtrlSetState(-1, $GUI_DISABLE) +;~ _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnDonCustomB, 1) +;~ GUICtrlSetOnEvent(-1, "btnDonateCustomH") + $x += $Offx + ; Button Not Active - future expansion? + $g_hLblDonateTroopCustomF = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetState(-1, $GUI_DISABLE) - GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) GUICtrlSetState(-1, $GUI_DISABLE) ;~ _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnTroops, 0) -;~ GUICtrlSetOnEvent(-1, "btnDonateCustomC") +;~ GUICtrlSetOnEvent(-1, "btnDonateCustomF") + + $x += 4 + $x += $Offx + $g_ahLblDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeWallWrecker] = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) + GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) + GUICtrlSetState(-1, $GUI_DISABLE) + $g_ahBtnDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeWallWrecker] = GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) + _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnWallW, 1) + GUICtrlSetOnEvent(-1, "btnDonateTroop") + $x += $Offx + $g_ahLblDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeBattleBlimp] = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) + GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) + GUICtrlSetState(-1, $GUI_DISABLE) + $g_ahBtnDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeBattleBlimp] = GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) + _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnBattleB, 1) + GUICtrlSetOnEvent(-1, "btnDonateTroop") + $x += $Offx + $g_ahLblDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = GUICtrlCreateLabel("", $x, $y - 2, $Offx + 2, $Offx + 2) + GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) + GUICtrlSetState(-1, $GUI_DISABLE) + $g_ahBtnDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = GUICtrlCreateButton("", $x + 2, $y, $Offx - 2, $Offx - 2, $BS_ICON) + _GUICtrlSetImage(-1, $g_sLibIconPath, $eIcnStoneS, 1) + GUICtrlSetOnEvent(-1, "btnDonateTroop") $x += $Offx ; Button Not Active - future expansion? @@ -1518,6 +1517,38 @@ Func CreateDonateSubTab() _GUICtrlSetTip(-1, $sTxtKeywordsNoTip & " " & $sTxtBowlers) GUICtrlCreateGroup("", -99, -99, 1, 1) + $x = $xStart + $y = $Offy + $g_ahGrpDonateTroop[$eTroopIceGolem] = GUICtrlCreateGroup($sTxtIceGolems, $x - 20, $y - 20, $g_iSizeWGrpTab3, 169) + $x -= 10 + $y -= 4 + GUICtrlSetState(-1, $GUI_HIDE) + _GUICtrlCreateIcon($g_sLibIconPath, $eIcnIceGolem, $x + 215, $y, 64, 64, $BS_ICON) + GUICtrlSetState(-1, $GUI_HIDE) + $g_ahChkDonateTroop[$eTroopIceGolem] = GUICtrlCreateCheckbox($sTxtDonate & " " & $sTxtIceGolems, $x + 285, $y, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + _GUICtrlSetTip(-1, $sTxtDonateTip & " " & $sTxtIceGolems & " " & $sTxtDonateTipTroop) + GUICtrlSetOnEvent(-1, "chkDonateTroop") + $g_ahChkDonateAllTroop[$eTroopIceGolem] = GUICtrlCreateCheckbox($sTxtDonateAll, $x + 285, $y + 20, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + _GUICtrlSetTip(-1, $sTxtDonateTip & " " & $sTxtIceGolems & " " & $sTxtDonateTipAll & @CRLF & $sTxtIgnoreAll) + GUICtrlSetOnEvent(-1, "chkDonateAllTroop") + GUICtrlCreateLabel($sTxtKeywords & " " & $sTxtIceGolems & ":" , $x - 5, $y + 5, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + $g_ahTxtDonateTroop[$eTroopIceGolem] = GUICtrlCreateEdit("", $x - 5, $y + 20, 205, 125, BitOR($ES_WANTRETURN, $ES_CENTER, $ES_AUTOVSCROLL)) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetData(-1, StringFormat(GetTranslatedFileIni("MBR GUI Design Child Village - Donate", "TxtDonateTroop_Item_35", "ice golem\r\nice golems"))) + _GUICtrlSetTip(-1, $sTxtKeywords & " " & $sTxtIceGolems) + GUICtrlCreateLabel($sTxtKeywordsNo & ":", $x + 215, $y + 70, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + $g_ahTxtBlacklistTroop[$eTroopIceGolem] = GUICtrlCreateEdit("", $x + 215, $y + 85, 200, 60, BitOR($ES_WANTRETURN, $ES_CENTER, $ES_AUTOVSCROLL)) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetBkColor(-1, 0x505050) + GUICtrlSetColor(-1, $COLOR_WHITE) + GUICtrlSetData(-1, StringFormat(GetTranslatedFileIni("MBR GUI Design Child Village - Donate", "TxtBlacklistTroop_Item_36", "no ice golem\r\nice golem no"))) + _GUICtrlSetTip(-1, $sTxtKeywordsNoTip & " " & $sTxtIceGolems) + GUICtrlCreateGroup("", -99, -99, 1, 1) + ; SIEGE - $sTxtBattleBlimps $x = $xStart $y = $Offy @@ -1582,6 +1613,38 @@ Func CreateDonateSubTab() GUICtrlSetData(-1, StringFormat(GetTranslatedFileIni("MBR GUI Design Child Village - Donate", "TxtBlacklistTroop_Item_33", "no blimps\r\nsiege no"))) _GUICtrlSetTip(-1, $sTxtKeywordsNoTip & " " & $sTxtBattleBlimps) GUICtrlCreateGroup("", -99, -99, 1, 1) + + $x = $xStart + $y = $Offy + $g_ahGrpDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = GUICtrlCreateGroup($sTxtStoneSlammers, $x - 20, $y - 20, $g_iSizeWGrpTab3, 169) + $x -= 10 + $y -= 4 + GUICtrlSetState(-1, $GUI_HIDE) + _GUICtrlCreateIcon($g_sLibIconPath, $eIcnStoneS, $x + 215, $y, 64, 64, $BS_ICON) + GUICtrlSetState(-1, $GUI_HIDE) + $g_ahChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = GUICtrlCreateCheckbox($sTxtDonate & " " & $sTxtStoneSlammers, $x + 285, $y, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + _GUICtrlSetTip(-1, $sTxtDonateTip & " " & $sTxtStoneSlammers & " " & $sTxtDonateTipTroop) + GUICtrlSetOnEvent(-1, "chkDonateTroop") + ;$g_ahChkDonateAllTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = GUICtrlCreateCheckbox($sTxtDonateAll, $x + 285, $y + 30, -1, -1) + ;GUICtrlSetState(-1, $GUI_HIDE) + ;_GUICtrlSetTip(-1, $sTxtDonateTip & " " & $sTxtStoneSlammers & " " & $sTxtDonateTipAll & @CRLF & $sTxtIgnoreAll) + ;GUICtrlSetOnEvent(-1, "chkDonateAllTroop") + GUICtrlCreateLabel($sTxtKeywords & " " & $sTxtStoneSlammers & ":" , $x - 5, $y + 5, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + $g_ahTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = GUICtrlCreateEdit("", $x - 5, $y + 20, 205, 125, BitOR($ES_WANTRETURN, $ES_CENTER, $ES_AUTOVSCROLL)) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetData(-1, StringFormat(GetTranslatedFileIni("MBR GUI Design Child Village - Donate", "TxtDonateTroop_Item_32", "stone slammers\r\nsieges\r\nslammers"))) + _GUICtrlSetTip(-1, $sTxtKeywords & " " & $sTxtStoneSlammers) + GUICtrlCreateLabel($sTxtKeywordsNo & ":", $x + 215, $y + 70, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + $g_ahTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = GUICtrlCreateEdit("", $x + 215, $y + 85, 200, 60, BitOR($ES_WANTRETURN, $ES_CENTER, $ES_AUTOVSCROLL)) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetBkColor(-1, 0x505050) + GUICtrlSetColor(-1, $COLOR_WHITE) + GUICtrlSetData(-1, StringFormat(GetTranslatedFileIni("MBR GUI Design Child Village - Donate", "TxtBlacklistTroop_Item_35", "no slammers\r\nsiege no"))) + _GUICtrlSetTip(-1, $sTxtKeywordsNoTip & " " & $sTxtStoneSlammers) + GUICtrlCreateGroup("", -99, -99, 1, 1) $x = $xStart $y = $Offy @@ -1710,6 +1773,38 @@ Func CreateDonateSubTab() GUICtrlSetData(-1, StringFormat(GetTranslatedFileIni("MBR GUI Design Child Village - Donate", "TxtBlacklistTroop_Item_28", "no skeleton\r\nskeleton no\r\nno skel"))) _GUICtrlSetTip(-1, $sTxtKeywordsNoTip & " " & $sTxtSkeletonSpells) GUICtrlCreateGroup("", -99, -99, 1, 1) + + $x = $xStart + $y = $Offy + $g_ahGrpDonateSpell[$eSpellBat] = GUICtrlCreateGroup($sTxtBatSpells, $x - 20, $y - 20, $g_iSizeWGrpTab3, 169) + $x -= 10 + $y -= 4 + GUICtrlSetState(-1, $GUI_HIDE) + _GUICtrlCreateIcon($g_sLibIconPath, $eIcnBatSpell, $x + 215, $y, 64, 64, $BS_ICON) + GUICtrlSetState(-1, $GUI_HIDE) + $g_ahChkDonateSpell[$eSpellBat] = GUICtrlCreateCheckbox($sTxtDonate & " " & $sTxtBatSpells, $x + 285, $y, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + _GUICtrlSetTip(-1, $sTxtDonateTip & " " & $sTxtBatSpells & " " & $sTxtDonateTipTroop) + GUICtrlSetOnEvent(-1, "chkDonateSpell") + $g_ahChkDonateAllSpell[$eSpellBat] = GUICtrlCreateCheckbox($sTxtDonateAll, $x + 285, $y + 20, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + _GUICtrlSetTip(-1, $sTxtDonateTip & " " & $sTxtBatSpells & " " & $sTxtDonateTipAll & @CRLF & $sTxtIgnoreAll) + GUICtrlSetOnEvent(-1, "chkDonateAllSpell") + GUICtrlCreateLabel($sTxtKeywords & " " & $sTxtBatSpells & ":" , $x - 5, $y + 5, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + $g_ahTxtDonateSpell[$eSpellBat] = GUICtrlCreateEdit("", $x - 5, $y + 20, 205, 125, BitOR($ES_WANTRETURN, $ES_CENTER, $ES_AUTOVSCROLL)) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetData(-1, StringFormat(GetTranslatedFileIni("MBR GUI Design Child Village - Donate", "TxtDonateTroop_Item_34", "Bat"))) + _GUICtrlSetTip(-1, $sTxtKeywords & " " & $sTxtBatSpells) + GUICtrlCreateLabel($sTxtKeywordsNo & ":", $x + 215, $y + 70, -1, -1) + GUICtrlSetState(-1, $GUI_HIDE) + $g_ahTxtBlacklistSpell[$eSpellBat] = GUICtrlCreateEdit("", $x + 215, $y + 85, 200, 60, BitOR($ES_WANTRETURN, $ES_CENTER, $ES_AUTOVSCROLL)) + GUICtrlSetState(-1, $GUI_HIDE) + GUICtrlSetBkColor(-1, 0x505050) + GUICtrlSetColor(-1, $COLOR_WHITE) + GUICtrlSetData(-1, StringFormat(GetTranslatedFileIni("MBR GUI Design Child Village - Donate", "TxtBlacklistTroop_Item_34", "no bat\r\nbat no"))) + _GUICtrlSetTip(-1, $sTxtKeywordsNoTip & " " & $sTxtBatSpells) + GUICtrlCreateGroup("", -99, -99, 1, 1) $x = $xStart $y = $Offy @@ -1740,7 +1835,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomA[0] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonWizard, $x + 25, $y, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomA[0] = GUICtrlCreateCombo("", $x + 60, $y, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtWizards) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtWizards) GUICtrlSetOnEvent(-1, "cmbDonateCustomA") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomA[0] = GUICtrlCreateInput("2", $x + 165, $y, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1752,7 +1847,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomA[1] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonArcher, $x + 25, $y + 25, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomA[1] = GUICtrlCreateCombo("", $x + 60, $y + 25, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtArchers) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtArchers) GUICtrlSetOnEvent(-1, "cmbDonateCustomA") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomA[1] = GUICtrlCreateInput("3", $x + 165, $y + 25, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1764,7 +1859,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomA[2] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonBarbarian, $x + 25, $y + 50, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomA[2] = GUICtrlCreateCombo("", $x + 60, $y + 50, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtBarbarians) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtBarbarians) GUICtrlSetOnEvent(-1, "cmbDonateCustomA") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomA[2] = GUICtrlCreateInput("1", $x + 165, $y + 50, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1810,7 +1905,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomB[0] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonBabyDragon, $x + 25, $y, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomB[0] = GUICtrlCreateCombo("", $x + 60, $y, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtBabyDragons) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtBabyDragons) GUICtrlSetOnEvent(-1, "cmbDonateCustomB") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomB[0] = GUICtrlCreateInput("1", $x + 165, $y, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1822,7 +1917,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomB[1] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonBalloon, $x + 25, $y + 25, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomB[1] = GUICtrlCreateCombo("", $x + 60, $y + 25, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtBalloons) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtBalloons) GUICtrlSetOnEvent(-1, "cmbDonateCustomB") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomB[1] = GUICtrlCreateInput("3", $x + 165, $y + 25, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1834,7 +1929,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomB[2] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonMinion, $x + 25, $y + 50, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomB[2] = GUICtrlCreateCombo("", $x + 60, $y + 50, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtMinions) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtMinions) GUICtrlSetOnEvent(-1, "cmbDonateCustomB") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomB[2] = GUICtrlCreateInput("5", $x + 165, $y + 50, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1880,7 +1975,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomC[0] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonWizard, $x + 25, $y, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomC[0] = GUICtrlCreateCombo("", $x + 60, $y, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtWizards) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtWizards) GUICtrlSetOnEvent(-1, "cmbDonateCustomC") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomC[0] = GUICtrlCreateInput("1", $x + 165, $y, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1892,7 +1987,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomC[1] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonArcher, $x + 25, $y + 25, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomC[1] = GUICtrlCreateCombo("", $x + 60, $y + 25, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtArchers) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtArchers) GUICtrlSetOnEvent(-1, "cmbDonateCustomC") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomC[1] = GUICtrlCreateInput("3", $x + 165, $y + 25, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1904,7 +1999,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomC[2] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonBarbarian, $x + 25, $y + 50, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomC[2] = GUICtrlCreateCombo("", $x + 60, $y + 50, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtBarbarians) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtBarbarians) GUICtrlSetOnEvent(-1, "cmbDonateCustomC") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomC[2] = GUICtrlCreateInput("5", $x + 165, $y + 50, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1950,7 +2045,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomD[0] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonBabyDragon, $x + 25, $y, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomD[0] = GUICtrlCreateCombo("", $x + 60, $y, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtBabyDragons) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtBabyDragons) GUICtrlSetOnEvent(-1, "cmbDonateCustomD") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomD[0] = GUICtrlCreateInput("1", $x + 165, $y, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1962,7 +2057,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomD[1] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonBalloon, $x + 25, $y + 25, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomD[1] = GUICtrlCreateCombo("", $x + 60, $y + 25, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtBalloons) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtBalloons) GUICtrlSetOnEvent(-1, "cmbDonateCustomD") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomD[1] = GUICtrlCreateInput("3", $x + 165, $y + 25, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) @@ -1974,7 +2069,7 @@ Func CreateDonateSubTab() $g_ahPicDonateCustomD[2] = _GUICtrlCreateIcon($g_sLibIconPath, $eIcnDonMinion, $x + 25, $y + 50, 24, 24) GUICtrlSetState(-1, $GUI_HIDE) $g_ahCmbDonateCustomD[2] = GUICtrlCreateCombo("", $x + 60, $y + 50, 95, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL)) - GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtNothing, $sTxtMinions) + GUICtrlSetData(-1, $sTxtBarbarians & "|" & $sTxtArchers & "|" & $sTxtGiants & "|" & $sTxtGoblins & "|" & $sTxtWallBreakers & "|" & $sTxtBalloons & "|" & $sTxtWizards & "|" & $sTxtHealers & "|" & $sTxtDragons & "|" & $sTxtPekkas & "|" & $sTxtBabyDragons & "|" & $sTxtMiners & "|" & $sTxtElectroDragons & "|" & $sTxtMinions & "|" & $sTxtHogRiders & "|" & $sTxtValkyries & "|" & $sTxtGolems & "|" & $sTxtWitches & "|" & $SetLog & "|" & $sTxtBowlers & "|" & $sTxtIceGolems & "|" & $sTxtNothing, $sTxtMinions) GUICtrlSetOnEvent(-1, "cmbDonateCustomD") GUICtrlSetState(-1, $GUI_HIDE) $g_ahTxtDonateCustomD[2] = GUICtrlCreateInput("5", $x + 165, $y + 50, 30, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) diff --git a/COCBot/GUI/MBR GUI Design Child Village - Misc.au3 b/COCBot/GUI/MBR GUI Design Child Village - Misc.au3 index 51c89e5ca..11baaa5d9 100644 --- a/COCBot/GUI/MBR GUI Design Child Village - Misc.au3 +++ b/COCBot/GUI/MBR GUI Design Child Village - Misc.au3 @@ -24,7 +24,7 @@ Global $g_hBtnLocateKingAltar = 0, $g_hBtnLocateQueenAltar = 0, $g_hBtnLocateWar Global $g_hChkTreasuryCollect = 0, $g_hTxtTreasuryGold = 0, $g_hTxtTreasuryElixir = 0, $g_hTxtTreasuryDark = 0 , $g_hChkFreeMagicItems = 0 Global $g_alblBldBaseStats[4] = ["", "", ""] -Global $g_hChkCollectBuilderBase = 0, $g_hChkStartClockTowerBoost = 0, $g_hChkCTBoostBlderBz = 0 +Global $g_hChkCollectBuilderBase = 0, $g_hChkStartClockTowerBoost = 0, $g_hChkCTBoostBlderBz = 0, $g_hChkCleanBBYard = 0 Global $g_hChkCollectBldGE = 0, $g_hChkCollectBldGems = 0, $g_hChkActivateClockTower = 0 Global $g_hChkBBSuggestedUpgrades = 0, $g_hChkBBSuggestedUpgradesIgnoreGold = 0 , $g_hChkBBSuggestedUpgradesIgnoreElixir , $g_hChkBBSuggestedUpgradesIgnoreHall = 0 Global $g_hChkPlacingNewBuildings = 0 @@ -341,6 +341,9 @@ Func CreateMiscBuilderBaseSubTab() GUICtrlCreateIcon($g_sLibIconPath, $eIcnGemMine, $x + 57, $y, 24, 24) $g_hChkCollectBuilderBase = GUICtrlCreateCheckbox(GetTranslatedFileIni("MBR GUI Design Child Village - Misc", "ChkCollectBuilderBase", "Collect Ressources"), $x + 100, $y + 4, -1, -1) _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Village - Misc", "ChkCollectBuildersBase_Info_01", "Check this to collect Ressources on the Builder Base")) + $g_hChkCleanBBYard = GUICtrlCreateCheckbox(GetTranslatedFileIni("MBR GUI Design Child Village - Misc", "ChkCleanBBYard", "Remove Obstacles"), $x + 260, $y + 4, -1, -1) + _GUICtrlSetTip(-1, GetTranslatedFileIni("MBR GUI Design Child Village - Misc", "ChkCleanBBYard_Info_01", "Check this to automatically clear Yard from Trees, Trunks, etc.")) + GUICtrlSetState (-1, $GUI_ENABLE) $y += 32 GUICtrlCreateIcon($g_sLibIconPath, $eIcnClockTower, $x + 32, $y, 24, 24) diff --git a/COCBot/MBR Functions.au3 b/COCBot/MBR Functions.au3 index 8c13c53cd..e4308a300 100644 --- a/COCBot/MBR Functions.au3 +++ b/COCBot/MBR Functions.au3 @@ -296,6 +296,7 @@ #include "functions\Village\BuilderBase\StartClockTowerBoost.au3" #include "functions\Village\BuilderBase\BuilderBaseReport.au3" #include "functions\Village\BuilderBase\SuggestedUpgrades.au3" +#include "functions\Village\BuilderBase\CleanBBYard.au3" #include "functions\Other\Api.au3" #include "functions\Other\ApiClient.au3" diff --git a/COCBot/MBR GUI Control Variables.au3 b/COCBot/MBR GUI Control Variables.au3 index b199760ff..00dff4631 100644 --- a/COCBot/MBR GUI Control Variables.au3 +++ b/COCBot/MBR GUI Control Variables.au3 @@ -32,7 +32,7 @@ Global $g_aGroupLightning = "", $groupHeal = "", $groupRage = "", $groupJumpSpel ;Dark Spell Global $g_aGroupPoison = "", $groupEarthquake = "", $groupHaste = "", $groupSkeleton = "", $groupIcnPoison = "", $groupIcnEarthquake = "", $groupIcnHaste = "", _ - $groupIcnSkeleton = "", $groupListSpells = "" + $groupIcnSkeleton = "", $groupIcnBat = "", $groupListSpells = "" ;TH Level Global $g_aGroupListTHLevels = "" @@ -89,25 +89,25 @@ Func InitializeControlVariables() ;Attack $g_aGroupAttackDB = $g_hCmbDBAlgorithm&"#"&$g_hCmbDBSelectTroop&"#"&$g_hChkDBKingAttack&"#"&$g_hChkDBQueenAttack&"#"&$g_hChkDBWardenAttack&"#"&$g_hChkDBDropCC&"#"& _ $g_hChkDBLightSpell&"#"&$g_hChkDBHealSpell&"#"&$g_hChkDBRageSpell&"#"&$g_hChkDBJumpSpell&"#"&$g_hChkDBFreezeSpell&"#"&$g_hChkDBCloneSpell&"#"& _ - $g_hChkDBPoisonSpell&"#"&$g_hChkDBEarthquakeSpell&"#"&$g_hChkDBHasteSpell&"#"&$g_hChkDBSkeletonSpell + $g_hChkDBPoisonSpell&"#"&$g_hChkDBEarthquakeSpell&"#"&$g_hChkDBHasteSpell&"#"&$g_hChkDBSkeletonSpell&"#"&$g_hChkDBBatSpell $g_aGroupAttackDBSpell = $g_hChkDBLightSpell&"#"&$g_hChkDBHealSpell&"#"&$g_hChkDBRageSpell&"#"&$g_hChkDBJumpSpell&"#"&$g_hChkDBFreezeSpell&"#"&$g_hChkDBCloneSpell&"#"& _ - $g_hChkDBPoisonSpell&"#"&$g_hChkDBEarthquakeSpell&"#"&$g_hChkDBHasteSpell&"#"&$g_hChkDBSkeletonSpell + $g_hChkDBPoisonSpell&"#"&$g_hChkDBEarthquakeSpell&"#"&$g_hChkDBHasteSpell&"#"&$g_hChkDBSkeletonSpell&"#"&$g_hChkDBBatSpell $groupIMGAttackDB = $g_hPicDBKingAttack&"#"&$g_hPicDBQueenAttack&"#"&$g_hPicDBWardenAttack&"#"&$g_hPicDBDropCC&"#"& _ $g_hPicDBLightSpell&"#"&$g_hPicDBHealSpell&"#"&$g_hPicDBRageSpell&"#"&$g_hPicDBJumpSpell&"#"&$g_hPicDBFreezeSpell&"#"&$g_hPicDBCloneSpell&"#"& _ - $g_hPicDBPoisonSpell&"#"&$g_hPicDBEarthquakeSpell&"#"&$g_hPicDBHasteSpell&"#"&$g_hPicDBSkeletonSpell + $g_hPicDBPoisonSpell&"#"&$g_hPicDBEarthquakeSpell&"#"&$g_hPicDBHasteSpell&"#"&$g_hPicDBSkeletonSpell&"#"&$g_hPicDBBatSpell $groupIMGAttackDBSpell = $g_hPicDBLightSpell&"#"&$g_hPicDBHealSpell&"#"&$g_hPicDBRageSpell&"#"&$g_hPicDBJumpSpell&"#"&$g_hPicDBFreezeSpell&"#"&$g_hPicDBCloneSpell&"#"& _ - $g_hPicDBPoisonSpell&"#"&$g_hPicDBEarthquakeSpell&"#"&$g_hPicDBHasteSpell&"#"&$g_hPicDBSkeletonSpell + $g_hPicDBPoisonSpell&"#"&$g_hPicDBEarthquakeSpell&"#"&$g_hPicDBHasteSpell&"#"&$g_hPicDBSkeletonSpell&"#"&$g_hPicDBBatSpell $groupAttackAB = $g_hCmbDBAlgorithm&"#"&$g_hCmbABSelectTroop&"#"&$g_hChkABKingAttack&"#"&$g_hChkABQueenAttack&"#"&$g_hChkABWardenAttack&"#"&$g_hChkABDropCC&"#"& _ $g_hChkABLightSpell&"#"&$g_hChkABHealSpell&"#"&$g_hChkABRageSpell&"#"&$g_hChkABJumpSpell&"#"&$g_hChkABFreezeSpell&"#"&$g_hChkABCloneSpell&"#"& _ - $g_hChkABPoisonSpell&"#"&$g_hChkABEarthquakeSpell&"#"&$g_hChkABHasteSpell&"#"&$g_hChkABSkeletonSpell + $g_hChkABPoisonSpell&"#"&$g_hChkABEarthquakeSpell&"#"&$g_hChkABHasteSpell&"#"&$g_hChkABSkeletonSpell&"#"&$g_hChkABBatSpell $groupAttackABSpell = $g_hChkABLightSpell&"#"&$g_hChkABHealSpell&"#"&$g_hChkABRageSpell&"#"&$g_hChkABJumpSpell&"#"&$g_hChkABFreezeSpell&"#"&$g_hChkABCloneSpell&"#"& _ - $g_hChkABPoisonSpell&"#"&$g_hChkABEarthquakeSpell&"#"&$g_hChkABHasteSpell&"#"&$g_hChkABSkeletonSpell + $g_hChkABPoisonSpell&"#"&$g_hChkABEarthquakeSpell&"#"&$g_hChkABHasteSpell&"#"&$g_hChkABSkeletonSpell&"#"&$g_hChkABBatSpell $groupIMGAttackAB = $g_hPicABKingAttack&"#"&$g_hPicABQueenAttack&"#"&$g_hPicABWardenAttack&"#"&$g_hPicABDropCC&"#"& _ $g_hPicABLightSpell&"#"&$g_hPicABHealSpell&"#"&$g_hPicABRageSpell&"#"&$g_hPicABJumpSpell&"#"&$g_hPicABFreezeSpell&"#"&$g_hPicABCloneSpell&"#"& _ - $g_hPicABPoisonSpell&"#"&$g_hPicABEarthquakeSpell&"#"&$g_hPicABHasteSpell&"#"&$g_hPicABSkeletonSpell + $g_hPicABPoisonSpell&"#"&$g_hPicABEarthquakeSpell&"#"&$g_hPicABHasteSpell&"#"&$g_hPicABSkeletonSpell&"#"&$g_hPicABBatSpell $groupIMGAttackABSpell = $g_hPicABLightSpell&"#"&$g_hPicABHealSpell&"#"&$g_hPicABRageSpell&"#"&$g_hPicABJumpSpell&"#"&$g_hPicABFreezeSpell&"#"&$g_hPicABCloneSpell&"#"& _ - $g_hPicABPoisonSpell&"#"&$g_hPicABEarthquakeSpell&"#"&$g_hPicABHasteSpell&"#"&$g_hPicABSkeletonSpell + $g_hPicABPoisonSpell&"#"&$g_hPicABEarthquakeSpell&"#"&$g_hPicABHasteSpell&"#"&$g_hPicABSkeletonSpell&"#"&$g_hPicABBatSpell $groupAttackTS = $g_hGrpABAttack&"#"&$g_hLblAttackTHType&"#"&$g_hCmbAttackTHType&"#"&$g_hLblTSSelectTroop&"#"&$g_hCmbTSSelectTroop&"#"& _ $g_hLblTSSelectSpecialTroop&"#"&$g_hChkTSKingAttack&"#"&$g_hChkTSQueenAttack&"#"&$g_hChkTSWardenAttack&"#"&$g_hChkTSDropCC&"#"&$g_hChkTSLightSpell&"#"& _ @@ -272,6 +272,7 @@ Func InitializeControlVariables() $oAlwaysEnabledControls($g_hBtnAndroidAdbShell) = 1 $oAlwaysEnabledControls($g_hBtnAndroidHome) = 1 $oAlwaysEnabledControls($g_hBtnAndroidBack) = 1 + $oAlwaysEnabledControls($g_hBtnPullSharedPrefs) = 1 $oAlwaysEnabledControls($g_hBtnMakeScreenshot) = 1 $oAlwaysEnabledControls($g_hDivider) = 1 diff --git a/COCBot/MBR GUI Control.au3 b/COCBot/MBR GUI Control.au3 index f3239dca1..3c29c688d 100644 --- a/COCBot/MBR GUI Control.au3 +++ b/COCBot/MBR GUI Control.au3 @@ -1038,6 +1038,7 @@ Func BotShrinkExpandToggleExecute() ;_SendMessage($g_hFrmBotBottom, $WM_SETREDRAW, False, 0) GUISetState(@SW_HIDE, $g_hFrmBotEx) GUISetState(@SW_HIDE, $g_hFrmBotBottom) + Local $iSteps = 10 Local $fStep = $_GUI_MAIN_WIDTH / $iSteps Local $bGetAnimationSpeed = True diff --git a/COCBot/MBR Global Variables.au3 b/COCBot/MBR Global Variables.au3 index 136ab936b..e6a2a69a9 100644 --- a/COCBot/MBR Global Variables.au3 +++ b/COCBot/MBR Global Variables.au3 @@ -250,9 +250,10 @@ Global $__Droid4X_Window[3][3] = _ ; Alternative window sizes (array must be ord ["0.10.0", $g_iDEFAULT_WIDTH + 6, $g_iDEFAULT_HEIGHT + 53], _ ["0.8.6", $g_iDEFAULT_WIDTH + 10, $g_iDEFAULT_HEIGHT + 50] _ ] -Global $__Nox_Config[1][2] = _ ; Alternative Nox Control ID (array must be ordered by version descending!) +Global $__Nox_Config[2][3] = _ ; Alternative Nox Control ID (array must be ordered by version descending!) [ _ ; Version|$g_sAppClassInstance - ["3.3.0", "[CLASS:subWin; INSTANCE:1]|[TEXT:QWidgetClassWindow; CLASS:Qt5QWindowIcon]"] _ ; use multiple index as during undock it can change + ["6.2.1", "[CLASS:subWin; INSTANCE:1]|[CLASS:AnglePlayer_0; INSTANCE:1]", True], _ ; subWin is used for OpenGL and AnglePlayer_0 for DirectX, $g_bAndroidControlUseParentPos is set to True to support DirectX when docked + ["3.3.0", "[CLASS:subWin; INSTANCE:1]|[TEXT:QWidgetClassWindow; CLASS:Qt5QWindowIcon]", False] _ ; use multiple index as during undock it can change ] ; 0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 @@ -351,7 +352,7 @@ Global $g_avAndroidProgramFileVersionInfo = 0 ; Array of _WinAPI_VerQueryValue F Global $g_bAndroidHasSystemBar = False ; BS2 System Bar can be entirely disabled in Windows Registry Global $g_iAndroidClientWidth_Configured = 0 ; Android configured Screen Width Global $g_iAndroidClientHeight_Configured = 0 ; Android configured Screen Height -Global $g_iAndroidLaunchWaitSec = 240 ; Seconds to wait for launching Android Simulator +Global $g_iAndroidLaunchWaitSec = 600 ; Seconds to wait for launching Android Simulator Global $g_sAndroidPicturesPath = "" ; Android mounted path to pictures on host Global $g_sAndroidPicturesHostPath = "" ; Windows host path to mounted pictures in android @@ -393,6 +394,7 @@ Global $g_bForceCapture = False ; Force android ADB screencap to run and not pro Global $g_hAndroidWindow = 0 ; Handle for Android window Global $g_hAndroidWindowDpiAware = 0 ; Handle for Android window when bot set DPI Awareness Global $g_hAndroidControl = 0 ; Handle for Android Screen Control +Global $g_bAndroidControlUseParentPos = False ; If true, control pos is used from parent control (only used to fix docking for Nox in DirectX mode) Global $g_bInitAndroid = True ; Used to cache android config, is set to False once initialized, new emulator window handle resets it to True @@ -534,7 +536,7 @@ Global Enum $eIcnArcher = 1, $eIcnDonArcher, $eIcnBalloon, $eIcnDonBalloon, $eIc $eIcnCCSpells, $eIcnSpellsGroup, $eBahasaIND, $eChinese_S, $eChinese_T, $eEnglish, $eFrench, $eGerman, $eItalian, $ePersian, _ $eRussian, $eSpanish, $eTurkish, $eMissingLangIcon, $eWall12, $ePortuguese, $eIcnDonPoisonSpell, $eIcnDonEarthQuakeSpell, $eIcnDonHasteSpell, $eIcnDonSkeletonSpell, $eVietnamese, $eKorean, $eAzerbaijani, _ $eArabic, $eIcnBuilderHall, $eIcnClockTower, $eIcnElixirCollectorL5, $eIcnGemMine, $eIcnGoldMineL5, $eIcnElectroDragon, $eIcnTH12, $eHdV12, $eWall13, $eIcnGrayShield, $eIcnBlueShield, $eIcnGreenShield, $eIcnRedShield, _ - $eIcnBattleB , $eIcnWallW, $eIcnSiegeCost, $eIcnBoostPotion + $eIcnBattleB , $eIcnWallW, $eIcnSiegeCost, $eIcnBoostPotion, $eIcnBatSpell, $eIcnStoneS, $eIcnIceGolem Global $eIcnDonBlank = $eIcnDonBlacklist Global $eIcnOptions = $eIcnDonBlacklist @@ -591,8 +593,8 @@ Global Const $DROPLINE_DROPPOINTS_ONLY = 4 ;-------------------------------------------------------------------------- ; Complete list of all deployable/trainable objects Global Enum $eBarb, $eArch, $eGiant, $eGobl, $eWall, $eBall, $eWiza, $eHeal, $eDrag, $ePekk, $eBabyD, $eMine, $eEDrag, _ - $eMini, $eHogs, $eValk, $eGole, $eWitc, $eLava, $eBowl, $eKing, $eQueen, $eWarden, $eCastle, _ - $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eWallW, $eBattleB, $eArmyCount + $eMini, $eHogs, $eValk, $eGole, $eWitc, $eLava, $eBowl, $eIceG, $eKing, $eQueen, $eWarden, $eCastle, _ + $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell, $eWallW, $eBattleB, $eStoneS, $eArmyCount ; Attack types Global Enum $DB, $LB, $TS, $MA, $TB, $DT ; DeadBase, ActiveBase, TownhallSnipe, Milking Attack, TownhallBully, DropTrophy @@ -604,23 +606,23 @@ Global Const $g_asModeText[6] = ["Dead Base", "Live Base", "TH Snipe", "Milking Global Enum $eTroopBarbarian, $eTroopArcher, $eTroopGiant, $eTroopGoblin, $eTroopWallBreaker, $eTroopBalloon, _ $eTroopWizard, $eTroopHealer, $eTroopDragon, $eTroopPekka, $eTroopBabyDragon, $eTroopMiner, $eTroopElectroDragon, _ $eTroopMinion, $eTroopHogRider, $eTroopValkyrie, $eTroopGolem, $eTroopWitch, _ - $eTroopLavaHound, $eTroopBowler, $eTroopCount + $eTroopLavaHound, $eTroopBowler, $eTroopIceGolem, $eTroopCount Global Const $g_asTroopNames[$eTroopCount] = [ _ "Barbarian", "Archer", "Giant", "Goblin", "Wall Breaker", "Balloon", "Wizard", "Healer", "Dragon", "Pekka", "Baby Dragon", "Miner", "Electro Dragon", _ - "Minion", "Hog Rider", "Valkyrie", "Golem", "Witch", "Lava Hound", "Bowler"] + "Minion", "Hog Rider", "Valkyrie", "Golem", "Witch", "Lava Hound", "Bowler", "Ice Golem"] Global Const $g_asTroopNamesPlural[$eTroopCount] = [ _ "Barbarians", "Archers", "Giants", "Goblins", "Wall Breakers", "Balloons", "Wizards", "Healers", "Dragons", "Pekkas", "Baby Dragons", "Miners", "Electro Dragons", _ - "Minions", "Hog Riders", "Valkyries", "Golems", "Witches", "Lava Hounds", "Bowlers"] + "Minions", "Hog Riders", "Valkyries", "Golems", "Witches", "Lava Hounds", "Bowlers", "Ice Golems"] Global Const $g_asTroopShortNames[$eTroopCount] = [ _ "Barb", "Arch", "Giant", "Gobl", "Wall", "Ball", "Wiza", "Heal", "Drag", "Pekk", "BabyD", "Mine", "EDrag", _ - "Mini", "Hogs", "Valk", "Gole", "Witc", "Lava", "Bowl"] + "Mini", "Hogs", "Valk", "Gole", "Witc", "Lava", "Bowl", "IceG"] Global Const $g_aiTroopSpace[$eTroopCount] = [ _ 1, 1, 5, 1, 2, 5, 4, 14, 20, 25, 10, 6, 30, _ - 2, 5, 8, 30, 12, 30, 6] + 2, 5, 8, 30, 12, 30, 6, 15] Global Const $g_aiTroopTrainTime[$eTroopCount] = [ _ 20, 24, 120, 28, 60, 120, 120, 480, 720, 720, 360, 120, 1440, _ - 36, 90, 180, 600, 360, 600, 120] + 36, 90, 180, 600, 360, 600, 120, 180] ; Zero element contains number of levels, elements 1 thru n contain cost of that level troop Global Const $g_aiTroopCostPerLevel[$eTroopCount][10] = [ _ [8, 25, 40, 60, 100, 150, 200, 250, 300], _ ; Barbarian @@ -642,16 +644,17 @@ Global Const $g_aiTroopCostPerLevel[$eTroopCount][10] = [ _ [8, 300, 375, 450, 525, 600, 675, 750, 825], _ ; Golem [4, 175, 225, 275, 325], _ ; Witch [5, 390, 450, 510, 570, 630], _ ; Lavahound - [4, 110, 130, 150, 170]] ; Bowler -Global Const $g_aiTroopDonateXP[$eTroopCount] = [1, 1, 5, 1, 2, 5, 4, 14, 20, 25, 10, 6, 30, 2, 5, 8, 30, 12, 30, 6] + [4, 110, 130, 150, 170], _ ; Bowler + [4, 220, 240, 260, 280]] ; IceGolem +Global Const $g_aiTroopDonateXP[$eTroopCount] = [1, 1, 5, 1, 2, 5, 4, 14, 20, 25, 10, 6, 30, 2, 5, 8, 30, 12, 30, 6, 15] ; Spells Global Enum $eSpellLightning, $eSpellHeal, $eSpellRage, $eSpellJump, $eSpellFreeze, $eSpellClone, _ - $eSpellPoison, $eSpellEarthquake, $eSpellHaste, $eSpellSkeleton, $eSpellCount -Global Const $g_asSpellNames[$eSpellCount] = ["Lightning", "Heal", "Rage", "Jump", "Freeze", "Clone", "Poison", "Earthquake", "Haste", "Skeleton"] -Global Const $g_asSpellShortNames[$eSpellCount] = ["LSpell", "HSpell", "RSpell", "JSpell", "FSpell", "CSpell", "PSpell", "ESpell", "HaSpell", "SkSpell"] -Global Const $g_aiSpellSpace[$eSpellCount] = [2, 2, 2, 2, 1, 3, 1, 1, 1, 1] -Global Const $g_aiSpellTrainTime[$eSpellCount] = [360, 360, 360, 360, 360, 720, 180, 180, 180, 180] + $eSpellPoison, $eSpellEarthquake, $eSpellHaste, $eSpellSkeleton, $eSpellBat, $eSpellCount +Global Const $g_asSpellNames[$eSpellCount] = ["Lightning", "Heal", "Rage", "Jump", "Freeze", "Clone", "Poison", "Earthquake", "Haste", "Skeleton", "Bat"] +Global Const $g_asSpellShortNames[$eSpellCount] = ["LSpell", "HSpell", "RSpell", "JSpell", "FSpell", "CSpell", "PSpell", "ESpell", "HaSpell", "SkSpell", "BtSpell"] +Global Const $g_aiSpellSpace[$eSpellCount] = [2, 2, 2, 2, 1, 3, 1, 1, 1, 1, 1] +Global Const $g_aiSpellTrainTime[$eSpellCount] = [360, 360, 360, 360, 360, 720, 180, 180, 180, 180, 180] ; Zero element contains number of levels, elements 1 thru n contain cost of that level spell Global Const $g_aiSpellCostPerLevel[$eSpellCount][8] = [ _ [7, 15000, 16500, 18000, 20000, 22000, 24000, 26000], _ ;LightningSpell @@ -663,22 +666,25 @@ Global Const $g_aiSpellCostPerLevel[$eSpellCount][8] = [ _ [5, 95, 110, 125, 140, 155], _ ;PoisonSpell [4, 125, 140, 160, 180], _ ;EarthquakeSpell [4, 80, 85, 90, 95], _ ;HasteSpell - [5, 110, 120, 130, 140, 150]] ;SkeletonSpell -Global Const $g_aiSpellDonateXP[$eSpellCount] = [10, 10, 10, 10, 10, 0, 5, 5, 5, 5] + [5, 110, 120, 130, 140, 150], _ ;SkeletonSpell + [5, 110, 120, 130, 140, 150]] ;BatSpell +Global Const $g_aiSpellDonateXP[$eSpellCount] = [10, 10, 10, 10, 10, 0, 5, 5, 5, 5, 5] ;Siege Machines -Global Enum $eSiegeWallWrecker, $eSiegeBattleBlimp, $eSiegeMachineCount +Global Enum $eSiegeWallWrecker, $eSiegeBattleBlimp, $eSiegeStoneSlammer, $eSiegeMachineCount -Global Const $g_asSiegeMachineNames[$eSiegeMachineCount] = ["Wall Wrecker", "Battle Blimp"] -Global Const $g_asSiegeMachineShortNames[$eSiegeMachineCount] = ["WallW", "BattleB"] -Global Const $g_aiSiegeMachineSpace[$eSiegeMachineCount] = [1, 1] +Global Const $g_asSiegeMachineNames[$eSiegeMachineCount] = ["Wall Wrecker", "Battle Blimp", "Stone Slammer"] +Global Const $g_asSiegeMachineShortNames[$eSiegeMachineCount] = ["WallW", "BattleB", "StoneS"] +Global Const $g_aiSiegeMachineSpace[$eSiegeMachineCount] = [1, 1, 1] Global Const $g_aiSiegeMachineTrainTimePerLevel[$eSiegeMachineCount][4] = [ _ - [3, 1200, 1500, 1800], _ ; Wall Wrecker - [3, 1200, 1500, 1800]] ; Battle Blimp + [3, 1200, 1200, 1200], _ ; Wall Wrecker + [3, 1200, 1200, 1200], _ ; Battle Blimp + [3, 1200, 1200, 1200]] ; Stone Slammer Global Const $g_aiSiegeMachineCostPerLevel[$eSiegeMachineCount][4] = [ _ [3, 100000, 100000, 100000], _ ; Wall Wrecker - [3, 100000, 100000, 100000]] ; Battle Blimp -Global Const $g_aiSiegeMachineDonateXP[$eSiegeMachineCount] = [30, 30] + [3, 100000, 100000, 100000], _ ; Battle Blimp + [3, 100000, 100000, 100000]] ; Stone Slammer +Global Const $g_aiSiegeMachineDonateXP[$eSiegeMachineCount] = [30, 30, 30] ; Hero Bitmaped Values Global Enum $eHeroNone = 0, $eHeroKing = 1, $eHeroQueen = 2, $eHeroWarden = 4 @@ -761,13 +767,13 @@ EndFunc ;==>TroopIndexLookup ; and returns the full name. ;-------------------------------------------------------------------------- Func GetTroopName(Const $iIndex, $iQuantity = 1) - If $iIndex >= $eBarb And $iIndex <= $eBowl Then + If $iIndex >= $eBarb And $iIndex <= $eIceG Then Return $iQuantity > 1 ? $g_asTroopNamesPlural[$iIndex] : $g_asTroopNames[$iIndex] - ElseIf $iIndex >= $eLSpell And $iIndex <= $eSkSpell Then + ElseIf $iIndex >= $eLSpell And $iIndex <= $eBtSpell Then Return $iQuantity > 1 ? $g_asSpellNames[$iIndex - $eLSpell] & "Spells" : $g_asSpellNames[$iIndex - $eLSpell] & "Spell" ElseIf $iIndex >= $eKing And $iIndex <= $eWarden Then Return $g_asHeroNames[$iIndex - $eKing] - ElseIf $iIndex >= $eWallW And $iIndex <= $eBattleB Then + ElseIf $iIndex >= $eWallW And $iIndex <= $eStoneS Then Return $g_asSiegeMachineNames[$iIndex - $eWallW] ElseIf $iIndex = $eCastle Then Return "Clan Castle" @@ -806,7 +812,7 @@ Global $g_iTxtTreasuryGold = 0 Global $g_iTxtTreasuryElixir = 0 Global $g_iTxtTreasuryDark = 0 -Global $g_bChkCollectBuilderBase = False, $g_bChkStartClockTowerBoost = False, $g_bChkCTBoostBlderBz = False +Global $g_bChkCollectBuilderBase = False, $g_bChkStartClockTowerBoost = False, $g_bChkCTBoostBlderBz = False, $g_bChkCleanBBYard = False ; <><><><> Village / Donate - Request <><><><> Global $g_bRequestTroopsEnable = False @@ -814,28 +820,28 @@ Global $g_sRequestTroopsText = "" Global $g_abRequestCCHours[24] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] Global $g_abRequestType[3] = [True, True, False] ; (0 = Troop, 1 = Spell, 2 = Siege Machine) Global $g_iRequestCountCCTroop = 0, $g_iRequestCountCCSpell = 0 -Global $g_aiCCTroopsExpected[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiCCSpellsExpected[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiCCTroopsExpected[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiCCSpellsExpected[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Global $g_aiClanCastleTroopWaitType[3], $g_aiClanCastleTroopWaitQty[3] Global $g_aiClanCastleSpellWaitType[2], $g_aiClanCastleSpellWaitQty[2] ; <><><><> Village / Donate - Donate <><><><> Global $g_bChkDonate = True Global $g_abChkDonateQueueOnly[2] -Global $g_aiQueueTroopFirstSlot[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiQueueSpellFirstSlot[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiQueueTroopFirstSlot[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiQueueSpellFirstSlot[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Global Enum $eCustomA = $eTroopCount, $eCustomB = $eTroopCount + 1 Global Enum $eCustomC = $eTroopCount + 2, $eCustomD = $eTroopCount + 3 Global Const $g_iCustomDonateConfigs = 4 -Global $g_abChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] -Global $g_abChkDonateAllTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] -Global $g_asTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] ; array of pipe-delimited list of strings to match to a request string -Global $g_asTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] ; array of pipe-delimited list of strings to prevent a match to a request string +Global $g_abChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] +Global $g_abChkDonateAllTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] +Global $g_asTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] ; array of pipe-delimited list of strings to match to a request string +Global $g_asTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] ; array of pipe-delimited list of strings to prevent a match to a request string -Global $g_abChkDonateSpell[$eSpellCount] = [False, False, False, False, False, False, False, False, False, False] ; element $eSpellClone (5) is unused -Global $g_abChkDonateAllSpell[$eSpellCount] = [False, False, False, False, False, False, False, False, False, False] ; element $eSpellClone (5) is unused -Global $g_asTxtDonateSpell[$eSpellCount] = ["", "", "", "", "", "", "", "", "", ""] ; element $eSpellClone (5) is unused -Global $g_asTxtBlacklistSpell[$eSpellCount] = ["", "", "", "", "", "", "", "", "", ""] ; element $eSpellClone (5) is unused +Global $g_abChkDonateSpell[$eSpellCount] = [False, False, False, False, False, False, False, False, False, False, False] ; element $eSpellClone (5) is unused +Global $g_abChkDonateAllSpell[$eSpellCount] = [False, False, False, False, False, False, False, False, False, False, False] ; element $eSpellClone (5) is unused +Global $g_asTxtDonateSpell[$eSpellCount] = ["", "", "", "", "", "", "", "", "", "", ""] ; element $eSpellClone (5) is unused +Global $g_asTxtBlacklistSpell[$eSpellCount] = ["", "", "", "", "", "", "", "", "", "", ""] ; element $eSpellClone (5) is unused Global $g_aiDonateCustomTrpNumA[3][2] = [[0, 0], [0, 0], [0, 0]], $g_aiDonateCustomTrpNumB[3][2] = [[0, 0], [0, 0], [0, 0]] Global $g_aiDonateCustomTrpNumC[3][2] = [[0, 0], [0, 0], [0, 0]], $g_aiDonateCustomTrpNumD[3][2] = [[0, 0], [0, 0], [0, 0]] @@ -943,12 +949,12 @@ Global $g_abNotifyScheduleWeekDays[7] = [False, False, False, False, False, Fals ; <><><><> Attack Plan / Train Army / Troops/Spells <><><><> Global $g_bQuickTrainEnable = False Global $g_bQuickTrainArmy[3] = [True, False, False] -Global $g_aiArmyCompTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiArmyCompSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiArmyCompSiegeMachine[$eSiegeMachineCount] = [0, 0] -Global $g_aiTrainArmyTroopLevel[$eTroopCount] = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiTrainArmySpellLevel[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiTrainArmySiegeMachineLevel[$eSiegeMachineCount] = [0, 0] +Global $g_aiArmyCompTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiArmyCompSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiArmyCompSiegeMachine[$eSiegeMachineCount] = [0, 0, 0] +Global $g_aiTrainArmyTroopLevel[$eTroopCount] = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiTrainArmySpellLevel[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiTrainArmySiegeMachineLevel[$eSiegeMachineCount] = [0, 0, 0] Global $g_iTrainArmyFullTroopPct = 100 Global $g_bTotalCampForced = False, $g_iTotalCampForcedValue = 200 Global $g_bForceBrewSpells = False @@ -960,49 +966,49 @@ Global $g_iCmbBoostBarracks = 0, $g_iCmbBoostSpellFactory = 0, $g_iCmbBoostBarba Global $g_abBoostBarracksHours[24] = [True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True] ; <><><><> Attack Plan / Train Army / Train Order <><><><> -Global Const $g_aiTroopOrderIcon[22] = [ _ +Global Const $g_aiTroopOrderIcon[23] = [ _ $eIcnOptions, $eIcnBarbarian, $eIcnArcher, $eIcnGiant, $eIcnGoblin, $eIcnWallBreaker, $eIcnBalloon, _ $eIcnWizard, $eIcnHealer, $eIcnDragon, $eIcnPekka, $eIcnBabyDragon, $eIcnMiner, $eIcnElectroDragon, $eIcnMinion, _ - $eIcnHogRider, $eIcnValkyrie, $eIcnGolem, $eIcnWitch, $eIcnLavaHound, $eIcnBowler] -Global $g_bCustomTrainOrderEnable = False, $g_aiCmbCustomTrainOrder[$eTroopCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] + $eIcnHogRider, $eIcnValkyrie, $eIcnGolem, $eIcnWitch, $eIcnLavaHound, $eIcnBowler, $eIcnIceGolem] +Global $g_bCustomTrainOrderEnable = False, $g_aiCmbCustomTrainOrder[$eTroopCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] Global $g_aiTrainOrder[$eTroopCount] = [ _ $eTroopArcher, $eTroopGiant, $eTroopWallBreaker, $eTroopBarbarian, $eTroopGoblin, $eTroopHealer, _ $eTroopPekka, $eTroopBalloon, $eTroopWizard, $eTroopDragon, $eTroopBabyDragon, $eTroopMiner, $eTroopElectroDragon, _ $eTroopMinion, $eTroopHogRider, $eTroopValkyrie, $eTroopGolem, $eTroopWitch, $eTroopLavaHound, _ - $eTroopBowler] + $eTroopBowler, $eTroopIceGolem] ; Spells Brew Order -Global Const $g_aiSpellsOrderIcon[12] = [ _ +Global Const $g_aiSpellsOrderIcon[13] = [ _ $eIcnOptions, $eIcnLightSpell, $eIcnHealSpell,$eIcnRageSpell, $eIcnJumpSpell, $eIcnFreezeSpell, $eIcnCloneSpell, _ - $eIcnPoisonSpell, $eIcnEarthQuakeSpell, $eIcnHasteSpell, $eIcnSkeletonSpell] + $eIcnPoisonSpell, $eIcnEarthQuakeSpell, $eIcnHasteSpell, $eIcnSkeletonSpell, $eIcnBatSpell] -Global $g_bCustomBrewOrderEnable = False, $g_aiCmbCustomBrewOrder[$eSpellCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] +Global $g_bCustomBrewOrderEnable = False, $g_aiCmbCustomBrewOrder[$eSpellCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] Global $g_aiBrewOrder[$eSpellCount] = [ _ $eSpellLightning, $eSpellHeal, $eSpellRage, $eSpellJump, $eSpellFreeze, $eSpellClone, _ - $eSpellPoison, $eSpellEarthquake, $eSpellHaste, $eSpellSkeleton] + $eSpellPoison, $eSpellEarthquake, $eSpellHaste, $eSpellSkeleton, $eSpellBat] ; Drop Order Troops Global Enum $eTroopBarbarianS, $eTroopArcherS, $eTroopGiantS, $eTroopGoblinS, $eTroopWallBreakerS, $eTroopBalloonS, _ $eTroopWizardS, $eTroopHealerS, $eTroopDragonS, $eTroopPekkaS, $eTroopBabyDragonS, $eTroopMinerS, $eTroopElectroDragons, _ $eTroopMinionS, $eTroopHogRiderS, $eTroopValkyrieS, $eTroopGolemS, $eTroopWitchS, _ - $eTroopLavaHoundS, $eTroopBowlerS, $eHeroeS, $eCCS, $eDropOrderCount + $eTroopLavaHoundS, $eTroopBowlerS, $eTroopIceGolemS, $eHeroeS, $eCCS, $eDropOrderCount Global Const $g_asDropOrderNames[$eDropOrderCount] = [ _ "Barbarians", "Archers", "Giants", "Goblins", "Wall Breakers", "Balloons", "Wizards", "Healers", "Dragons", "Pekkas", "Baby Dragons", "Miners", "Electro Dragons", _ - "Minions", "Hog Riders", "Valkyries", "Golems", "Witches", "Lava Hounds", "Bowlers", _ + "Minions", "Hog Riders", "Valkyries", "Golems", "Witches", "Lava Hounds", "Bowlers", "Ice Golems", _ "Clan Castle", "Heroes"] -Global Const $g_aiDropOrderIcon[24] = [ _ +Global Const $g_aiDropOrderIcon[25] = [ _ $eIcnOptions, $eIcnBarbarian, $eIcnArcher, $eIcnGiant, $eIcnGoblin, $eIcnWallBreaker, $eIcnBalloon, _ $eIcnWizard, $eIcnHealer, $eIcnDragon, $eIcnPekka, $eIcnBabyDragon, $eIcnMiner, $eIcnElectroDragon, $eIcnMinion, _ - $eIcnHogRider, $eIcnValkyrie, $eIcnGolem, $eIcnWitch, $eIcnLavaHound, $eIcnBowler, $eIcnCC, $eIcnHeroes] -Global $g_bCustomDropOrderEnable = False, $g_aiCmbCustomDropOrder[$eDropOrderCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] + $eIcnHogRider, $eIcnValkyrie, $eIcnGolem, $eIcnWitch, $eIcnLavaHound, $eIcnBowler, $eIcnIceGolem, $eIcnCC, $eIcnHeroes] +Global $g_bCustomDropOrderEnable = False, $g_aiCmbCustomDropOrder[$eDropOrderCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] Global $g_aiDropOrder[$eDropOrderCount] = [ _ $eTroopBarbarianS, $eTroopArcherS, $eTroopGiantS, $eTroopGoblinS, $eTroopWallBreakerS, $eTroopBalloonS, _ $eTroopWizardS, $eTroopHealerS, $eTroopDragonS, $eTroopPekkaS, $eTroopBabyDragonS, $eTroopMinerS, $eTroopElectroDragonS, $eTroopMinionS, _ - $eTroopHogRiderS, $eTroopValkyrieS, $eTroopGolemS, $eTroopWitchS, $eTroopLavaHoundS, $eTroopBowlerS, _ + $eTroopHogRiderS, $eTroopValkyrieS, $eTroopGolemS, $eTroopWitchS, $eTroopLavaHoundS, $eTroopBowlerS, $eTroopIceGolem, _ $eHeroeS, $eCCS] ; <><><><> Attack Plan / Train Army / Options <><><><> @@ -1044,7 +1050,7 @@ Global $g_aiAttackAlgorithm[$g_iModeCount] = [0, 0, 0], $g_aiAttackTroopSelectio Global $g_abAttackUseLightSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseHealSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseRageSpell[$g_iModeCount] = [0, 0, 0], _ $g_abAttackUseJumpSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseFreezeSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseCloneSpell[$g_iModeCount] = [0, 0, 0], _ $g_abAttackUsePoisonSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseEarthquakeSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseHasteSpell[$g_iModeCount] = [0, 0, 0], _ - $g_abAttackUseSkeletonSpell[$g_iModeCount] = [0, 0, 0] + $g_abAttackUseSkeletonSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseBatSpell[$g_iModeCount] = [0, 0, 0] Global $g_bTHSnipeBeforeEnable[$g_iModeCount] = [False, False, False], $g_iTHSnipeBeforeTiles[$g_iModeCount] = [0, 0, 0], $g_iTHSnipeBeforeScript[$g_iModeCount] = [0, 0, 0] ; Attack - Standard Global $g_aiAttackStdDropOrder[$g_iModeCount + 1] = [0, 0, 0, 0], $g_aiAttackStdDropSides[$g_iModeCount + 1] = [3, 3, 0, 1], $g_aiAttackStdUnitDelay[$g_iModeCount + 1] = [4, 4, 0, 4], _ @@ -1100,8 +1106,8 @@ Global $g_iPercentageDamage = 0 ; <<< nothing here - all in common Search & Attack grouping >>> ; <><><><> Attack Plan / Search & Attack / Deadbase / Collectors <><><><> -Global $g_abCollectorLevelEnabled[13] = [-1, -1, -1, -1, -1, -1, True, True, True, True, True, True, True] ; elements 0 thru 5 are never referenced -Global $g_aiCollectorLevelFill[13] = [-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1] ; elements 0 thru 5 are never referenced +Global $g_abCollectorLevelEnabled[14] = [-1, -1, -1, -1, -1, -1, True, True, True, True, True, True, True, True] ; elements 0 thru 5 are never referenced +Global $g_aiCollectorLevelFill[14] = [-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1] ; elements 0 thru 5 are never referenced Global $g_bCollectorFilterDisable = False Global $g_iCollectorMatchesMin = 3 Global $g_iCollectorToleranceOffset = 0 @@ -1287,7 +1293,7 @@ Global $g_bFullArmySpells = False ; true when $g_iTotalTrainSpaceSpell = $iTotal Global $g_CurrentCampUtilization = 0, $g_iTotalCampSpace = 0 ; Upgrading - Lab -Global $g_iLaboratoryElixirCost = 0 +Global $g_iLaboratoryElixirCost = 0, $g_iLaboratoryDElixirCost = 0 Global $g_iFirstTimeLab = 0 Global $g_sLabUpgradeTime = "" @@ -1338,23 +1344,23 @@ Global Const $g_aaiTopRightDropPoints[5][2] = [[466, 60], [556, 120], [622, 170] Global Const $g_aaiBottomLeftDropPoints[5][2] = [[81, 390], [174, 475], [235, 521], [299, 570], [390, 610]] Global Const $g_aaiBottomRightDropPoints[5][2] = [[466, 600], [554, 555], [615, 510], [678, 460], [765, 394]] Global Const $g_aaiEdgeDropPoints[4] = [$g_aaiBottomRightDropPoints, $g_aaiTopLeftDropPoints, $g_aaiBottomLeftDropPoints, $g_aaiTopRightDropPoints] -Global Const $g_aiUseAllTroops[35] = [$eBarb, $eArch, $eGiant, $eGobl, $eWall, $eBall, $eWiza, $eHeal, $eDrag, $ePekk, $eBabyD, $eMine, $eEDrag, $eMini, $eHogs, $eValk, $eGole, $eWitc, $eLava, $eBowl, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eWallW, $eBattleB] -Global Const $g_aiUseBarracks[27] = [$eBarb, $eArch, $eGiant, $eGobl, $eWall, $eBall, $eWiza, $eHeal, $eDrag, $ePekk, $eBabyD, $eMine, $eEDrag, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] -Global Const $g_aiUseBarbs[15] = [$eBarb, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] -Global Const $g_aiUseArchs[15] = [$eArch, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] -Global Const $g_aiUseBarcher[16] = [$eBarb, $eArch, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] -Global Const $g_aiUseBarbGob[16] = [$eBarb, $eGobl, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] -Global Const $g_aiUseArchGob[16] = [$eArch, $eGobl, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] -Global Const $g_aiUseBarcherGiant[17] = [$eBarb, $eArch, $eGiant, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] -Global Const $g_aiUseBarcherGobGiant[18] = [$eBarb, $eArch, $eGiant, $eGobl, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] -Global Const $g_aiUseBarcherHog[17] = [$eBarb, $eArch, $eHogs, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] -Global Const $g_aiUseBarcherMinion[17] = [$eBarb, $eArch, $eMini, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] +Global Const $g_aiUseAllTroops[38] = [$eBarb, $eArch, $eGiant, $eGobl, $eWall, $eBall, $eWiza, $eHeal, $eDrag, $ePekk, $eBabyD, $eMine, $eEDrag, $eMini, $eHogs, $eValk, $eGole, $eWitc, $eLava, $eBowl, $eIceG, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eBtSpell, $eWallW, $eBattleB, $eStoneS] +Global Const $g_aiUseBarracks[28] = [$eBarb, $eArch, $eGiant, $eGobl, $eWall, $eBall, $eWiza, $eHeal, $eDrag, $ePekk, $eBabyD, $eMine, $eEDrag, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] +Global Const $g_aiUseBarbs[16] = [$eBarb, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] +Global Const $g_aiUseArchs[16] = [$eArch, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] +Global Const $g_aiUseBarcher[17] = [$eBarb, $eArch, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] +Global Const $g_aiUseBarbGob[17] = [$eBarb, $eGobl, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] +Global Const $g_aiUseArchGob[17] = [$eArch, $eGobl, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] +Global Const $g_aiUseBarcherGiant[18] = [$eBarb, $eArch, $eGiant, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] +Global Const $g_aiUseBarcherGobGiant[19] = [$eBarb, $eArch, $eGiant, $eGobl, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] +Global Const $g_aiUseBarcherHog[18] = [$eBarb, $eArch, $eHogs, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] +Global Const $g_aiUseBarcherMinion[18] = [$eBarb, $eArch, $eMini, $eKing, $eQueen, $eWarden, $eCastle, $eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] Global Const $g_aaiTroopsToBeUsed[12] = [$g_aiUseAllTroops, $g_aiUseBarracks, $g_aiUseBarbs, $g_aiUseArchs, $g_aiUseBarcher, $g_aiUseBarbGob, $g_aiUseArchGob, $g_aiUseBarcherGiant, $g_aiUseBarcherGobGiant, _ $g_aiUseBarcherHog, $g_aiUseBarcherMinion] Global $g_bTHSnipeUsedKing = False Global $g_bTHSnipeUsedQueen = False Global $g_bTHSnipeUsedWarden = False -Global $g_avAttackTroops[22][2] ;11 Slots of troops - Name, Amount (+ 11 extended slots Slot11+) +Global $g_avAttackTroops[22][3] ;11 Slots of troops - Name, Amount, x-coord (+ 11 extended slots Slot11+) Global $g_bFullArmy = False ;Check for full army or not Global $g_iKingSlot = -1, $g_iQueenSlot = -1, $g_iWardenSlot = -1, $g_iClanCastleSlot = -1 Global $g_iTotalAttackSlot = 10, $g_bDraggedAttackBar = False ; Slot11+ @@ -1454,63 +1460,66 @@ Global Enum $ArmyTAB, $TrainTroopsTAB, $BrewSpellsTAB, $QuickTrainTAB Global $g_bCheckSpells = False Global $g_bCheckClanCastleTroops = False ; Array to hold Laboratory Troop information [LocX of upper left corner of image, LocY of upper left corner of image, PageLocation, Troop "name", Icon # in DLL file] -Global $g_avLabTroops[33][5] +Global $g_avLabTroops[36][5] Func TranslateTroopNames() - Dim $g_avLabTroops[33][5] = [ _ + Dim $g_avLabTroops[36][5] = [ _ [-1, -1, -1, GetTranslatedFileIni("MBR Global GUI Design", "None", "None"), $eIcnBlank], _ - [120, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBarbarians", "Barbarians"), $eIcnBarbarian], _ - [120, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtArchers", "Archers"), $eIcnArcher], _ - [227, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGiants", "Giants"), $eIcnGiant], _ - [227, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGoblins", "Goblins"), $eIcnGoblin], _ - [334, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWallBreakers", "Wall Breakers"), $eIcnWallBreaker], _ - [334, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBalloons", "Balloons"), $eIcnBalloon], _ - [440, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWizards", "Wizards"), $eIcnWizard], _ - [440, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtHealers", "Healers"), $eIcnHealer], _ - [547, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtDragons", "Dragons"), $eIcnDragon], _ - [547, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtPekkas", "Pekkas"), $eIcnPekka], _ - [654, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBabyDragons", "Baby Dragons"), $eIcnBabyDragon], _ - [654, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtMiners", "Miners"), $eIcnMiner], _ - [220, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtElectroDragons", "Electro Dragons"), $eIcnElectroDragon], _ - [220, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtLightningSpells", "Lightning Spell"), $eIcnLightSpell], _ - [327, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtHealingSpells", "Healing Spell"), $eIcnHealSpell], _ - [327, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtRageSpells", "Rage Spell"), $eIcnRageSpell], _ - [433, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtJumpSpells", "Jump Spell"), $eIcnJumpSpell], _ - [433, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtFreezeSpells", "Freeze Spell"), $eIcnFreezeSpell], _ - [540, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtCloneSpells", "Clone Spell"), $eIcnCloneSpell], _ - [540, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtPoisonSpells", "Poison Spell"), $eIcnPoisonSpell], _ - [113, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtEarthQuakeSpells", "EarthQuake Spell"), $eIcnEarthQuakeSpell], _ - [113, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtHasteSpells", "Haste Spell"), $eIcnHasteSpell], _ - [220, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtSkeletonSpells", "Skeleton Spell"), $eIcnSkeletonSpell], _ - [220, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtMinions", "Minions"), $eIcnMinion], _ - [327, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtHogRiders", "Hog Riders"), $eIcnHogRider], _ - [327, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtValkyries", "Valkyries"), $eIcnValkyrie], _ - [433, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGolems", "Golems"), $eIcnGolem], _ - [433, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWitches", "Witches"), $eIcnWitch], _ - [540, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtLavaHounds", "Lava Hounds"), $eIcnLavaHound], _ - [540, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBowlers", "Bowlers"), $eIcnBowler], _ - [647, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWallWreckers", "Wall Wreckers"), $eIcnWallW], _ - [647, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBattleBlimps", "Battle Blimps"), $eIcnBattleB]] + [114, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBarbarians", "Barbarians"), $eIcnBarbarian], _ + [114, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtArchers", "Archers"), $eIcnArcher], _ + [221, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGiants", "Giants"), $eIcnGiant], _ + [221, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGoblins", "Goblins"), $eIcnGoblin], _ + [327, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWallBreakers", "Wall Breakers"), $eIcnWallBreaker], _ + [327, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBalloons", "Balloons"), $eIcnBalloon], _ + [434, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWizards", "Wizards"), $eIcnWizard], _ + [434, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtHealers", "Healers"), $eIcnHealer], _ + [541, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtDragons", "Dragons"), $eIcnDragon], _ + [541, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtPekkas", "Pekkas"), $eIcnPekka], _ + [647, 337 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBabyDragons", "Baby Dragons"), $eIcnBabyDragon], _ + [647, 444 + $g_iMidOffsetY, 0, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtMiners", "Miners"), $eIcnMiner], _ + [114, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtElectroDragons", "Electro Dragons"), $eIcnElectroDragon], _ + [114, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtLightningSpells", "Lightning Spell"), $eIcnLightSpell], _ + [221, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtHealingSpells", "Healing Spell"), $eIcnHealSpell], _ + [221, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtRageSpells", "Rage Spell"), $eIcnRageSpell], _ + [327, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtJumpSpells", "Jump Spell"), $eIcnJumpSpell], _ + [327, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtFreezeSpells", "Freeze Spell"), $eIcnFreezeSpell], _ + [434, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtCloneSpells", "Clone Spell"), $eIcnCloneSpell], _ + [434, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtPoisonSpells", "Poison Spell"), $eIcnPoisonSpell], _ + [541, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtEarthQuakeSpells", "EarthQuake Spell"), $eIcnEarthQuakeSpell], _ + [541, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtHasteSpells", "Haste Spell"), $eIcnHasteSpell], _ + [647, 337 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtSkeletonSpells", "Skeleton Spell"), $eIcnSkeletonSpell], _ + [647, 444 + $g_iMidOffsetY, 1, GetTranslatedFileIni("MBR Global GUI Design Names Spells", "TxtBatSpells", "Bat Spell"), $eIcnBatSpell], _ + [114, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtMinions", "Minions"), $eIcnMinion], _ + [114, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtHogRiders", "Hog Riders"), $eIcnHogRider], _ + [221, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtValkyries", "Valkyries"), $eIcnValkyrie], _ + [221, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtGolems", "Golems"), $eIcnGolem], _ + [327, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWitches", "Witches"), $eIcnWitch], _ + [327, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtLavaHounds", "Lava Hounds"), $eIcnLavaHound], _ + [434, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBowlers", "Bowlers"), $eIcnBowler], _ + [434, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtIceGolems", "Ice Golems"), $eIcnIceGolem], _ + [541, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtWallWreckers", "Wall Wreckers"), $eIcnWallW], _ + [541, 444 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtBattleBlimps", "Battle Blimps"), $eIcnBattleB], _ + [647, 337 + $g_iMidOffsetY, 2, GetTranslatedFileIni("MBR Global GUI Design Names Troops", "TxtStoneSlammers", "Stone Slammer"), $eIcnStoneS]] EndFunc ;==>TranslateTroopNames ; Donate Global Const $g_aiDonateTroopPriority[$eTroopCount] = [ _ - $eTroopLavaHound, $eTroopElectroDragon, $eTroopGolem, $eTroopPekka, $eTroopDragon, $eTroopWitch, $eTroopHealer, $eTroopBabyDragon, _ + $eTroopLavaHound, $eTroopElectroDragon, $eTroopGolem, $eTroopIceGolem, $eTroopPekka, $eTroopDragon, $eTroopWitch, $eTroopHealer, $eTroopBabyDragon, _ $eTroopValkyrie, $eTroopBowler, $eTroopMiner, $eTroopGiant, $eTroopBalloon, $eTroopHogRider, $eTroopWizard, _ $eTroopWallBreaker, $eTroopMinion, $eTroopArcher, $eTroopBarbarian, $eTroopGoblin] Global Const $g_aiDonateSpellPriority[$eSpellCount] = [ _ $eSpellLightning, $eSpellHeal, $eSpellRage, $eSpellJump, $eSpellFreeze, $eSpellClone, $eSpellPoison, $eSpellEarthquake, _ - $eSpellHaste, $eSpellSkeleton] -Global $g_aiDonateStatsTroops[$eTroopCount][2] = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]] -Global $g_aiDonateStatsSpells[$eSpellCount][2] = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]] -Global $g_aiDonateStatsSieges[$eSiegeMachineCount][2] = [[0, 0], [0, 0]] + $eSpellHaste, $eSpellSkeleton, $eSpellBat] +Global $g_aiDonateStatsTroops[$eTroopCount][2] = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]] +Global $g_aiDonateStatsSpells[$eSpellCount][2] = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]] +Global $g_aiDonateStatsSieges[$eSiegeMachineCount][3] = [[0, 0], [0, 0], [0, 0]] Global $g_iTotalDonateStatsTroops = 0, $g_iTotalDonateStatsTroopsXP = 0 Global $g_iTotalDonateStatsSpells = 0, $g_iTotalDonateStatsSpellsXP = 0 Global $g_iTotalDonateStatsSiegeMachines = 0, $g_iTotalDonateStatsSiegeMachinesXP = 0 Global $g_iActiveDonate = -1 ; -1 means not set yet -Global $g_aiDonateTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiDonateSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiDonateSiegeMachines[$eSiegeMachineCount] = [0, 0] -Global $g_aiCurrentTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiCurrentSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiCurrentSiegeMachines[$eSiegeMachineCount] = [0, 0] -Global $g_aiCurrentCCTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiCurrentCCSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiCurrentCCSiegeMachines[$eSiegeMachineCount] = [0, 0] +Global $g_aiDonateTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiDonateSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiDonateSiegeMachines[$eSiegeMachineCount] = [0, 0, 0] +Global $g_aiCurrentTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiCurrentSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiCurrentSiegeMachines[$eSiegeMachineCount] = [0, 0, 0] +Global $g_aiCurrentCCTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiCurrentCCSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], $g_aiCurrentCCSiegeMachines[$eSiegeMachineCount] = [0, 0, 0] Global $g_bDonationEnabled = True Global $g_iTroopsDonated = 0 Global $g_iTroopsReceived = 0 @@ -1556,9 +1565,9 @@ Global $g_iLSpellLevel = 1 Global $g_iESpellLevel = 1 Global Const $g_fDarkStealFactor = 0.75 Global Const $g_fDarkFillLevel = 0.70 -; Array to hold Total HP of DE Drills at each level (1-6) +; Array to hold Total HP of DE Drills at each level (1-7) Global Const $g_aDrillLevelHP[7] = [800, 860, 920, 980, 1060, 1160, 1280] -; Array to hold Total Amount of DE available from Drill at each level (1-6) +; Array to hold Total Amount of DE available from Drill at each level (1-7) Global Const $g_aDrillLevelTotal[7] = [160, 300, 540, 840, 1280, 1800, 2400] ; Array to hold Total Damage of Lightning Spell at each level (1-7) Global Const $g_aLSpellDmg[7] = [300, 360, 420, 480, 540, 600, 660] @@ -1727,4 +1736,8 @@ Global $g_sLeague = Null Global $g_sBonusGold = Null Global $g_sBonusElixir = Null Global $g_sBonusDE = Null -Global $g_sPercentagesResources = Null \ No newline at end of file +Global $g_sPercentagesResources = Null + +Func _ArrayIndexValid(Const ByRef $a, Const $idx) + Return $idx >= 0 And $idx < UBound($a) +EndFunc \ No newline at end of file diff --git a/COCBot/MBR References.au3 b/COCBot/MBR References.au3 index 6ab545268..1ee320279 100644 --- a/COCBot/MBR References.au3 +++ b/COCBot/MBR References.au3 @@ -503,6 +503,7 @@ Func ReferenceGlobals() $a1 = $eTroopLavaHound $a1 = $eTroopBowler + $a1 = $eTroopIceGolem $a1 = $eTroopCount $a1 = $eSpellLightning $a1 = $eSpellHeal @@ -515,6 +516,7 @@ Func ReferenceGlobals() $a1 = $eSpellEarthquake $a1 = $eSpellHaste $a1 = $eSpellSkeleton + $a1 = $eSpellBat $a1 = $eSpellCount $a1 = $eBarb $a1 = $eArch @@ -536,6 +538,7 @@ Func ReferenceGlobals() $a1 = $eWitc $a1 = $eLava $a1 = $eBowl + $a1 = $eIceG $a1 = $eKing $a1 = $eQueen $a1 = $eWarden @@ -551,6 +554,7 @@ Func ReferenceGlobals() $a1 = $eESpell $a1 = $eHaSpell $a1 = $eSkSpell + $a1 = $eBtSpell $a1 = $aTrainBarb $a1 = $aTrainArch @@ -571,6 +575,7 @@ Func ReferenceGlobals() $a1 = $aTrainWitc $a1 = $aTrainLava $a1 = $aTrainBowl + $a1 = $aTrainIceG $a1 = $aTrainLSpell $a1 = $aTrainHSpell $a1 = $aTrainRSpell @@ -581,6 +586,7 @@ Func ReferenceGlobals() $a1 = $aTrainESpell $a1 = $aTrainHaSpell $a1 = $aTrainSkSpell + $a1 = $aTrainBtSpell $a1 = $aTrainArmy $a1 = $aLoginWithSupercellID diff --git a/COCBot/functions/Android/Android Status & Information.txt b/COCBot/functions/Android/Android Status & Information.txt index 52f4ab921..d5dd9c3a2 100644 --- a/COCBot/functions/Android/Android Status & Information.txt +++ b/COCBot/functions/Android/Android Status & Information.txt @@ -8,7 +8,7 @@ The once listed here have been tested and do work. Nox === http://en.bignox.com/ -Versions 6.2.0.0, 6.0.1.0, 6.0.0.0, 5.2.1.0, 5.1.0.0, 5.0.0.1, 5.0.0.0, 3.8.1.3, 3.8.0.x, 3.7.6.x, 3.7.5.1, 3.7.5, 3.7.3, 3.7.1, 3.7.0, 3.6.0, 3.5.1, 3.3.0, 3.1.0, 3.0.0 +Versions 6.2.5.3, 6.2.0.0, 6.0.1.0, 6.0.0.0, 5.2.1.0, 5.1.0.0, 5.0.0.1, 5.0.0.0, 3.8.1.3, 3.8.0.x, 3.7.6.x, 3.7.5.1, 3.7.5, 3.7.3, 3.7.1, 3.7.0, 3.6.0, 3.5.1, 3.3.0, 3.1.0, 3.0.0 MyBot Command Line Key: Nox Default Instance Key: nox Second Instance Key: Nox_1 diff --git a/COCBot/functions/Android/Android.au3 b/COCBot/functions/Android/Android.au3 index 39b762416..28d9067f7 100644 --- a/COCBot/functions/Android/Android.au3 +++ b/COCBot/functions/Android/Android.au3 @@ -73,6 +73,7 @@ Func InitAndroidConfig($bRestart = False) $g_bAndroidBackgroundLaunch = $g_bAndroidBackgroundLaunchEnabled = True ; Enabled Android Background launch using Windows Scheduled Task $g_bAndroidBackgroundLaunched = False ; True when Android was launched in headless mode without a window $g_bUpdateAndroidWindowTitle = False ; If Android has always same title (like LeapDroid) instance name will be added + $g_bAndroidControlUseParentPos = False ; If true, control pos is used from parent control (only used to fix docking for Nox in DirectX mode) ; screencap might have disabled backgroundmode If $g_bAndroidAdbScreencap Then ; update background checkbox @@ -540,15 +541,18 @@ Func _WinGetAndroidHandle($bFindByTitle = False) If IsArray($aWinList) = 0 Then Local $aWinList2 = _WinAPI_EnumProcessWindows($pid, True) If IsArray($aWinList2) = 1 And $aWinList2[0][0] > 0 Then - Local $aWinList[$aWinList2[0][0] + 1][2] + Local $aWinList[$aWinList2[0][0] + 1][3] $aWinList[0][0] = $aWinList2[0][0] For $i = 1 To $aWinList2[0][0] $aWinList[$i][0] = WinGetTitle($aWinList2[$i][0]) $aWinList[$i][1] = $aWinList2[$i][0] + $aWinList[$i][2] = $aWinList2[$i][1] + SetDebugLog("Found Android window: " & $aWinList[$i][0] & ", " & $aWinList[$i][1] & ", " & $aWinList[$i][2]) Next EndIf EndIf If IsArray($aWinList) = 1 Then + SetDebugLog("Found " & $aWinList[0][0] & " windows, searching for '" & $g_sAppPaneName & "' with class '" & $g_sAppClassInstance & "'") For $i = 1 To $aWinList[0][0] $t = $aWinList[$i][0] $hWin = $aWinList[$i][1] diff --git a/COCBot/functions/Android/AndroidEmbed.au3 b/COCBot/functions/Android/AndroidEmbed.au3 index 9c8f586ae..79e5f4e6d 100644 --- a/COCBot/functions/Android/AndroidEmbed.au3 +++ b/COCBot/functions/Android/AndroidEmbed.au3 @@ -119,6 +119,8 @@ Func _AndroidEmbed($Embed = True, $CallWinGetAndroidHandle = True, $bForceEmbed Local $hThumbnail = $g_aiAndroidEmbeddedCtrlTarget[9] Local $targetIsHWnD = $hCtrlTarget = $g_hAndroidWindow + Local $botStyle = _WinAPI_GetWindowLong($g_hFrmBot, $GWL_STYLE) + #cs Local $HWND_MESSAGE = HWnd(-3) Local $WM_CHANGEUISTATE = 0x127 @@ -250,6 +252,9 @@ Func _AndroidEmbed($Embed = True, $CallWinGetAndroidHandle = True, $bForceEmbed $g_hProcShieldInput[3] = False + ; ensure bot style wasn't changed + _WinAPI_SetWindowLong($g_hFrmBot, $GWL_STYLE, $botStyle) + Return True EndIf updateBtnEmbed() @@ -532,9 +537,12 @@ Func _AndroidEmbed($Embed = True, $CallWinGetAndroidHandle = True, $bForceEmbed ;update Android Window If $g_iAndroidEmbedMode = 0 Then WinMove2($hCtrlTarget, "", 0, 0, $aPosCtl[2] - 1, $aPosCtl[3] - 1, $HWND_BOTTOM, 0, False) ; trigger window change (required for iTools and probably others) - WinMove2($hCtrl, "", 0, 0, $aPosCtl[2] - 1, $aPosCtl[3] - 1, $HWND_BOTTOM) WinMove2($hCtrlTarget, "", 0, 0, $aPosCtl[2], $aPosCtl[3], $HWND_BOTTOM, 0, False) - WinMove2($hCtrl, "", 0, 0, $aPosCtl[2], $aPosCtl[3], $HWND_BOTTOM) ; ensure control is position at 0,0 + If $targetIsHWnD Then + ; BlueStack can have a problem, so move control + WinMove2($hCtrl, "", 0, 0, $aPosCtl[2] - 1, $aPosCtl[3] - 1, $HWND_BOTTOM) + WinMove2($hCtrl, "", 0, 0, $aPosCtl[2], $aPosCtl[3], $HWND_BOTTOM) ; ensure control is position at 0,0 + EndIf EndIf ;CheckRedrawControls(True) @@ -546,6 +554,10 @@ Func _AndroidEmbed($Embed = True, $CallWinGetAndroidHandle = True, $bForceEmbed $g_hProcShieldInput[3] = False $g_hProcShieldInput[4] = 0 + + ; for some reason the border is sometimes not refresh, so redraw bot window border now + _WinAPI_RedrawWindow($g_hFrmBot, 0, 0, BitOR($RDW_FRAME, $RDW_UPDATENOW, $RDW_INVALIDATE)) + AndroidShield("AndroidEmbed dock", Default, $CallWinGetAndroidHandle, 100) Return True diff --git a/COCBot/functions/Android/AndroidNox.au3 b/COCBot/functions/Android/AndroidNox.au3 index 68af1d7d0..a6cc49979 100644 --- a/COCBot/functions/Android/AndroidNox.au3 +++ b/COCBot/functions/Android/AndroidNox.au3 @@ -255,6 +255,7 @@ Func InitNox($bCheckOnly = False) If $v >= $v2 Then SetDebugLog("Using Android Config of " & $g_sAndroidEmulator & " " & $__Nox_Config[$i][0]) $g_sAppClassInstance = $__Nox_Config[$i][1] + $g_bAndroidControlUseParentPos = $__Nox_Config[$i][2] $g_avAndroidAppConfig[$g_iAndroidConfig][3] = $g_sAppClassInstance ExitLoop EndIf @@ -454,14 +455,19 @@ Func EmbedNox($bEmbed = Default, $hHWndAfter = Default) Next If $hToolbar = 0 Then - SetDebugLog("EmbedNox(" & $bEmbed & "): toolbar Window not found, list of windows:" & $c, Default, True) + SetDebugLog("EmbedNox(" & $bEmbed & "): toolbar Window not found, list of windows:" & $c) ;, Default, True For $i = 1 To UBound($aWin) - 1 Local $h = $aWin[$i][0] Local $c = $aWin[$i][1] - SetDebugLog("EmbedNox(" & $bEmbed & "): Handle = " & $h & ", Class = " & $c, Default, True) + Local $aPos = WinGetPos($h) + If UBound($aPos) > 3 Then + SetDebugLog("EmbedNox(" & $bEmbed & "): Handle = " & $h & ", Class = " & $c & ", width=" & $aPos[2] & ", height=" & $aPos[3]) ;, Default, True + Else + SetDebugLog("EmbedNox(" & $bEmbed & "): Handle = " & $h & ", Class = " & $c) ;, Default, True + EndIf Next Else - SetDebugLog("EmbedNox(" & $bEmbed & "): $hToolbar=" & $hToolbar, Default, True) + SetDebugLog("EmbedNox(" & $bEmbed & "): $hToolbar=" & $hToolbar) ;, Default, True If $bEmbed Then WinMove2($hToolbar, "", -1, -1, -1, -1, $HWND_NOTOPMOST, $SWP_HIDEWINDOW, False, False) Else diff --git a/COCBot/functions/Android/getBSPos.au3 b/COCBot/functions/Android/getBSPos.au3 index 26259ed32..23b5496aa 100644 --- a/COCBot/functions/Android/getBSPos.au3 +++ b/COCBot/functions/Android/getBSPos.au3 @@ -136,7 +136,14 @@ EndFunc ;==>getBSPos Func getAndroidPos($FastCheck = False, $RetryCount1 = 0, $RetryCount2 = 0, $bWidthFirst = Default) Static $asControlSize[6][4] - Local $aControlSize = ControlGetPos(GetCurrentAndroidHWnD(), $g_sAppPaneName, GetAndroidControlClass(True)) + If $g_bAndroidControlUseParentPos Then + ; If true, control pos is used from parent control (only used to fix docking for Nox in DirectX mode) + Local $hCtrl = ControlGetHandle(GetCurrentAndroidHWnD(), $g_sAppPaneName, GetAndroidControlClass(True)) + Local $hCtrlParent = _WinAPI_GetParent($hCtrl) + Local $aControlSize = ControlGetPos(GetCurrentAndroidHWnD(), "", $hCtrlParent) + Else + Local $aControlSize = ControlGetPos(GetCurrentAndroidHWnD(), $g_sAppPaneName, GetAndroidControlClass(True)) + EndIf Local $aControlSizeInitial = $aControlSize ;If Not $g_bRunState Or $FastCheck Then Return $aControlSize diff --git a/COCBot/functions/Attack/Attack Algorithms/AttackFromCSV.au3 b/COCBot/functions/Attack/Attack Algorithms/AttackFromCSV.au3 index 04997c251..1fb8140b7 100644 --- a/COCBot/functions/Attack/Attack Algorithms/AttackFromCSV.au3 +++ b/COCBot/functions/Attack/Attack Algorithms/AttackFromCSV.au3 @@ -779,7 +779,7 @@ Func Algorithm_AttackCSV($testattack = False, $captureredarea = True) EndIf ; 14 - LAUNCH PARSE FUNCTION ------------------------------------------------------------- - SetSlotSpecialTroops() + SetSlotSpecialTroops() If _Sleep($DELAYRESPOND) Then Return ; If TestCapture() = True Then diff --git a/COCBot/functions/Attack/Attack Algorithms/SmartFarm.au3 b/COCBot/functions/Attack/Attack Algorithms/SmartFarm.au3 index 3820bd5db..8c074c7c3 100644 --- a/COCBot/functions/Attack/Attack Algorithms/SmartFarm.au3 +++ b/COCBot/functions/Attack/Attack Algorithms/SmartFarm.au3 @@ -562,7 +562,7 @@ Func AttackSmartFarm($Nside, $SIDESNAMES) [MatchTroopDropName(20), $nbSides, MatchTroopWaveNb(20), 1, MatchSlotsPerEdge(20)], _ [MatchTroopDropName(21), $nbSides, MatchTroopWaveNb(21), 1, MatchSlotsPerEdge(21)]] Else - Local $listInfoDeploy[22][5] = [[$eGole, $nbSides, 1, 1, 2] _ + Local $listInfoDeploy[23][5] = [[$eGole, $nbSides, 1, 1, 2] _ , [$eLava, $nbSides, 1, 1, 2] _ , [$eGiant, $nbSides, 1, 1, $g_iSlotsGiants] _ , [$eDrag, $nbSides, 1, 1, 0] _ @@ -572,6 +572,7 @@ Func AttackSmartFarm($Nside, $SIDESNAMES) , [$eHogs, $nbSides, 1, 1, 1] _ , [$eValk, $nbSides, 1, 1, 0] _ , [$eBowl, $nbSides, 1, 1, 0] _ + , [$eIceG, $nbSides, 1, 1, 0] _ , [$eMine, $nbSides, 1, 1, 0] _ , [$eEDrag, $nbSides, 1, 1, 0] _ , [$eWall, $nbSides, 1, 1, 1] _ @@ -607,7 +608,7 @@ Func AttackSmartFarm($Nside, $SIDESNAMES) If $g_bDebugSetlog Then SetDebugLog("No Wast time... exit, no troops usable left", $COLOR_DEBUG) ExitLoop ;Check remaining quantities EndIf - For $i = $eBarb To $eBowl ; launch all remaining troops + For $i = $eBarb To $eIceG ; launch all remaining troops If LaunchTroop($i, $nbSides, 1, 1, 1) Then CheckHeroesHealth() If _Sleep($DELAYALGORITHM_ALLTROOPS5) Then Return @@ -720,7 +721,7 @@ Func LaunchTroopSmartFarm($listInfoDeploy, $iCC, $iKing, $iQueen, $iWarden, $SID If $g_bDebugSetlog Then SetDebugLog("Deploy CC $g_aaiBottomRightDropPoints") EndIf - If ($g_bIsCCDropped = False And $infoTroopListArrPixel[0] = "CC") Then + If ($g_bIsCCDropped = False And $infoTroopListArrPixel[0] = "CC" And $i = $numberSidesDropTroop - 1) Then dropCC($pixelRandomDropcc[0], $pixelRandomDropcc[1], $iCC) $g_bIsCCDropped = True ElseIf ($g_bIsHeroesDropped = False And $infoTroopListArrPixel[0] = "HEROES" And $i = $numberSidesDropTroop - 1) Then diff --git a/COCBot/functions/Attack/Attack Algorithms/THAttackTypes.au3 b/COCBot/functions/Attack/Attack Algorithms/THAttackTypes.au3 index 77abcd196..ec43000b2 100644 --- a/COCBot/functions/Attack/Attack Algorithms/THAttackTypes.au3 +++ b/COCBot/functions/Attack/Attack Algorithms/THAttackTypes.au3 @@ -59,7 +59,7 @@ Func AttackTHParseCSV($test = False) SetLog($acommand[8], $COLOR_INFO) - Case StringInStr(StringUpper("-Barb-Arch-Giant-Gobl-Wall-Ball-Wiza-Heal-Drag-Pekk-BabyD-Mine-EDrag-Mini-Hogs-Valk-Gole-Witc-Lava-Bowl"), "-" & $command & "-") > 0 + Case StringInStr(StringUpper("-Barb-Arch-Giant-Gobl-Wall-Ball-Wiza-Heal-Drag-Pekk-BabyD-Mine-EDrag-Mini-Hogs-Valk-Gole-Witc-Lava-Bowl-IceG"), "-" & $command & "-") > 0 If $g_bDebugSetlog Then SetDebugLog(">> AttackTHGrid($e" & $command & ", Random (" & Int($acommand[2]) & "," & Int($acommand[3]) & ",1), Random(" & Int($acommand[4]) & "," & Int($acommand[5]) & ",1), Random(" & Int($acommand[6]) & "," & Int($acommand[7]) & ",1) )") Local $iNbOfSpots diff --git a/COCBot/functions/Attack/Attack Algorithms/algorithmTH.au3 b/COCBot/functions/Attack/Attack Algorithms/algorithmTH.au3 index 6f34b62bf..78912dbab 100644 --- a/COCBot/functions/Attack/Attack Algorithms/algorithmTH.au3 +++ b/COCBot/functions/Attack/Attack Algorithms/algorithmTH.au3 @@ -115,7 +115,7 @@ Func AttackTHGrid($troopKind, $iNbOfSpots = 1, $iAtEachSpot = 1, $Sleep = Random EndIf ; All Barracks Troops - If $troopKind >= $eBarb And $troopKind <= $eBowl Then + If $troopKind >= $eBarb And $troopKind <= $eIceG Then $troopNb = $iNbOfSpots * $iAtEachSpot If $troopNb > 1 Then $plural = 1 $name = NameOfTroop($troopKind, $plural) @@ -139,7 +139,7 @@ Func AttackTHGrid($troopKind, $iNbOfSpots = 1, $iAtEachSpot = 1, $Sleep = Random DeployTHNormal($iAtEachSpot, $iNbOfSpots) - If $troopKind >= $eBarb And $troopKind <= $eBowl Then + If $troopKind >= $eBarb And $troopKind <= $eIceG Then If $TroopCountBeg <> Number(ReadTroopQuantity($THtroop)) Then $NumTroopDeployed = $TroopCountBeg - Number(ReadTroopQuantity($THtroop)) SetLog("Deployment of " & $NumTroopDeployed & " " & $name & " was Successful!") diff --git a/COCBot/functions/Attack/Attack Algorithms/algorithm_AllTroops.au3 b/COCBot/functions/Attack/Attack Algorithms/algorithm_AllTroops.au3 index 9ea7ce38e..649ab4787 100644 --- a/COCBot/functions/Attack/Attack Algorithms/algorithm_AllTroops.au3 +++ b/COCBot/functions/Attack/Attack Algorithms/algorithm_AllTroops.au3 @@ -116,7 +116,7 @@ Func algorithm_AllTroops() ;Attack Algorithm for all existing troops [MatchTroopDropName(20), MatchSidesDrop(20), MatchTroopWaveNb(20), 1, MatchSlotsPerEdge(20)], _ [MatchTroopDropName(21), MatchSidesDrop(21), MatchTroopWaveNb(21), 1, MatchSlotsPerEdge(21)]] Else - Local $listInfoDeploy[22][5] = [[$eGole, $nbSides, 1, 1, 2] _ + Local $listInfoDeploy[23][5] = [[$eGole, $nbSides, 1, 1, 2] _ , [$eLava, $nbSides, 1, 1, 2] _ , [$eGiant, $nbSides, 1, 1, $g_iSlotsGiants] _ , [$eDrag, $nbSides, 1, 1, 0] _ @@ -137,6 +137,7 @@ Func algorithm_AllTroops() ;Attack Algorithm for all existing troops , [$eGobl, $nbSides, 1, 1, 0] _ , [$eHeal, $nbSides, 1, 1, 1] _ , [$ePekk, $nbSides, 1, 1, 1] _ + , [$eIceG, $nbSides, 1, 1, 0] _ , ["HEROES", 1, 2, 1, 1] _ ] EndIf @@ -192,7 +193,7 @@ Func algorithm_AllTroops() ;Attack Algorithm for all existing troops [MatchTroopDropName(20), MatchSidesDrop(20), MatchTroopWaveNb(20), 1, MatchSlotsPerEdge(20)], _ [MatchTroopDropName(21), MatchSidesDrop(21), MatchTroopWaveNb(21), 1, MatchSlotsPerEdge(21)]] Else - Local $listInfoDeploy[22][5] = [[$eGole, $nbSides, 1, 1, 2] _ + Local $listInfoDeploy[23][5] = [[$eGole, $nbSides, 1, 1, 2] _ , [$eLava, $nbSides, 1, 1, 2] _ , [$eGiant, $nbSides, 1, 1, $g_iSlotsGiants] _ , [$eDrag, $nbSides, 1, 1, 0] _ @@ -202,6 +203,7 @@ Func algorithm_AllTroops() ;Attack Algorithm for all existing troops , [$eHogs, $nbSides, 1, 1, 1] _ , [$eValk, $nbSides, 1, 1, 0] _ , [$eBowl, $nbSides, 1, 1, 0] _ + , [$eIceG, $nbSides, 1, 1, 0] _ , [$eMine, $nbSides, 1, 1, 0] _ , [$eEDrag, $nbSides, 1, 1, 0] _ , [$eBarb, $nbSides, 1, 1, 0] _ @@ -276,7 +278,7 @@ Func algorithm_AllTroops() ;Attack Algorithm for all existing troops If $g_bDebugSetlog Then SetDebugLog("No Wast time... exit, no troops usable left", $COLOR_DEBUG) ExitLoop ;Check remaining quantities EndIf - For $i = $eBarb To $eBowl ; launch all remaining troops + For $i = $eBarb To $eIceG ; launch all remaining troops If LaunchTroop($i, $nbSides, 1, 1, 1) Then CheckHeroesHealth() If _Sleep($DELAYALGORITHM_ALLTROOPS5) Then Return @@ -296,7 +298,7 @@ Func SetSlotSpecialTroops() $g_iWardenSlot = -1 For $i = 0 To UBound($g_avAttackTroops) - 1 - If $g_avAttackTroops[$i][0] = $eCastle Or $g_avAttackTroops[$i][0] = $eWallW Or $g_avAttackTroops[$i][0] = $eBattleB Then + If $g_avAttackTroops[$i][0] = $eCastle Or $g_avAttackTroops[$i][0] = $eWallW Or $g_avAttackTroops[$i][0] = $eBattleB Or $g_avAttackTroops[$i][0] = $eStoneS Then $g_iClanCastleSlot = $i ElseIf $g_avAttackTroops[$i][0] = $eKing Then $g_iKingSlot = $i diff --git a/COCBot/functions/Attack/AttackCSV/DropTroopFromINI.au3 b/COCBot/functions/Attack/AttackCSV/DropTroopFromINI.au3 index 59ae67233..19798ba39 100644 --- a/COCBot/functions/Attack/AttackCSV/DropTroopFromINI.au3 +++ b/COCBot/functions/Attack/AttackCSV/DropTroopFromINI.au3 @@ -123,6 +123,8 @@ Func DropTroopFromINI($vectors, $indexStart, $indexEnd, $indexArray, $qtaMin, $q If $g_abAttackUseHasteSpell[$g_iMatchMode] = False Then $usespell = False Case $eSkSpell If $g_abAttackUseSkeletonSpell[$g_iMatchMode] = False Then $usespell = False + Case $eBtSpell + If $g_abAttackUseBatSpell[$g_iMatchMode] = False Then $usespell = False EndSwitch If $troopPosition = -1 Or $usespell = False Then @@ -181,7 +183,7 @@ Func DropTroopFromINI($vectors, $indexStart, $indexEnd, $indexArray, $qtaMin, $q EndIf Switch $iTroopIndex - Case $eBarb To $eBowl ; drop normal troops + Case $eBarb To $eIceG ; drop normal troops If $debug = True Then SetLog("AttackClick( " & $pixel[0] & ", " & $pixel[1] & " , " & $qty2 & ", " & $delayPoint & ",#0666)") Else @@ -205,13 +207,13 @@ Func DropTroopFromINI($vectors, $indexStart, $indexEnd, $indexArray, $qtaMin, $q Else dropHeroes($pixel[0], $pixel[1], -1, -1, $troopPosition) ; was $g_iWardenSlot, Slot11+ EndIf - Case $eCastle, $eWallW, $eBattleB + Case $eCastle, $eWallW, $eBattleB, $eStoneS If $debug = True Then SetLog("dropCC(" & $pixel[0] & ", " & $pixel[1] & ", " & $troopPosition & ")") Else dropCC($pixel[0], $pixel[1], $troopPosition) EndIf - Case $eLSpell To $eSkSpell + Case $eLSpell To $eBtSpell If $debug = True Then SetLog("Drop Spell AttackClick( " & $pixel[0] & ", " & $pixel[1] & " , " & $qty2 & ", " & $delayPoint & ",#0666)") Else diff --git a/COCBot/functions/Attack/AttackCSV/ParseAttackCSV_Settings_variables.au3 b/COCBot/functions/Attack/AttackCSV/ParseAttackCSV_Settings_variables.au3 index 2c878d959..fe92a398c 100644 --- a/COCBot/functions/Attack/AttackCSV/ParseAttackCSV_Settings_variables.au3 +++ b/COCBot/functions/Attack/AttackCSV/ParseAttackCSV_Settings_variables.au3 @@ -99,10 +99,10 @@ Func ParseAttackCSV_Settings_variables(ByRef $aiCSVTroops, ByRef $aiCSVSpells, B ContinueLoop ; discard TRAIN commands due to the invalid troop amount/setting ex. int(chars)=0, negative #. "0" won't get alerted EndIf Switch $iTroopIndex - Case $eBarb To $eBowl + Case $eBarb To $eIceG $aiCSVTroops[$iTroopIndex] = int($asCommand[$iTHCol]) If int($asCommand[$iFlexCol]) > 0 Then $iFlexTroopIndex = $iTroopIndex - Case $eLSpell To $eSkSpell + Case $eLSpell To $eBtSpell $aiCSVSpells[$iTroopIndex - $eLSpell] = int($asCommand[$iTHCol]) Case $eKing To $eWarden Local $iHeroRadioItem = int(StringLeft($asCommand[$iTHCol], 1)) diff --git a/COCBot/functions/Attack/PrepareAttack.au3 b/COCBot/functions/Attack/PrepareAttack.au3 index 7cda5adca..80971d4fe 100644 --- a/COCBot/functions/Attack/PrepareAttack.au3 +++ b/COCBot/functions/Attack/PrepareAttack.au3 @@ -47,15 +47,16 @@ Func PrepareAttack($pMatchMode, $Remaining = False, $DebugSiege = False) ;Assign Local $hStarttime = _Timer_Init() - - ; JULY 2018 @PROMAC - ; Lets Select The CC Or Siege Machine ; $eCastle , $eWallW , $eBattleB - Local $aPaths = [$g_sImgSwitchSiegeCastle, $g_sImgSwitchSiegeWallWrecker, $g_sImgSwitchSiegeBattleBlimp] + ; Lets Select The CC Or Siege Machine ; $eCastle , $eWallW , $eBattleB, $eStoneS + Local $aPaths = [$g_sImgSwitchSiegeCastle, $g_sImgSwitchSiegeWallWrecker, $g_sImgSwitchSiegeBattleBlimp, $g_sImgSwitchSiegeStoneSlammer] Local $ToUse = $eCastle, $iDa = 0 If ($pMatchMode = $DB Or $pMatchMode = $LB Or $pMatchMode = $TS) And Not $Remaining Then ; Default is CC ,let's check Siege Machines , if is to be used and exist. - If $g_abAttackDropCC[$pMatchMode] And $g_aiAttackUseSiege[$pMatchMode] = 2 And ($g_aiCurrentSiegeMachines[$eSiegeBattleBlimp] > 0 Or $g_aiCurrentCCSiegeMachines[$eSiegeBattleBlimp] > 0) Then + If $g_abAttackDropCC[$pMatchMode] And $g_aiAttackUseSiege[$pMatchMode] = 3 And ($g_aiCurrentSiegeMachines[$eSiegeStoneSlammer] > 0 Or $g_aiCurrentCCSiegeMachines[$eSiegeStoneSlammer] > 0) Then + $ToUse = $eStoneS + $iDa = 3 + ElseIf $g_abAttackDropCC[$pMatchMode] And $g_aiAttackUseSiege[$pMatchMode] = 2 And ($g_aiCurrentSiegeMachines[$eSiegeBattleBlimp] > 0 Or $g_aiCurrentCCSiegeMachines[$eSiegeBattleBlimp] > 0) Then $ToUse = $eBattleB $iDa = 2 ElseIf $g_abAttackDropCC[$pMatchMode] And $g_aiAttackUseSiege[$pMatchMode] = 1 And ($g_aiCurrentSiegeMachines[$eSiegeWallWrecker] > 0 Or $g_aiCurrentCCSiegeMachines[$eSiegeWallWrecker] > 0) Then @@ -80,7 +81,7 @@ Func PrepareAttack($pMatchMode, $Remaining = False, $DebugSiege = False) ;Assign Local $compFor2Sieges = 50 If _Sleep(1250) Then Return ; Lets detect the CC & Sieges and click - Local $HowMany = QuickMIS("CX", $aPaths[$iDa], $lastX - $compFor2Sieges, 540, $LastX1, 560, True, False) + Local $HowMany = QuickMIS("CX", $aPaths[$iDa], $lastX - $compFor2Sieges, 530, $LastX1, 560, True, False) If $g_bDebugSetlog Then SetDebugLog("Benchmark Switch Siege HowMany: " & StringFormat("%.2f", _Timer_Diff($hStarttime)) & "'ms") If $g_bDebugSetlog Then SetDebugLog("Sleeps : " & 750 & "'ms") @@ -174,27 +175,30 @@ Func PrepareAttack($pMatchMode, $Remaining = False, $DebugSiege = False) ;Assign For $i = 0 To UBound($g_avAttackTroops) - 1 $g_avAttackTroops[$i][0] = -1 $g_avAttackTroops[$i][1] = 0 + $g_avAttackTroops[$i][2] = 0 Next Local $Plural = 0 Local $result = AttackBarCheck($Remaining, $pMatchMode) ; adding $pMatchMode for not checking Slot11+ when DropTrophy attack If $g_bDebugSetlog Then SetDebugLog("DLL Troopsbar list: " & $result, $COLOR_DEBUG) Local $aTroopDataList = StringSplit($result, "|") - Local $aTemp[22][3] ; Slot11+ + Local $aTemp[22][4] ; Slot11+ If $result <> "" Then ; example : 0#0#92|1#1#108|2#2#8|22#3#1|20#4#1|21#5#1|26#5#0|23#6#1|24#7#2|25#8#1|29#10#1 ; [0] = Troop Enum Cross Reference [1] = Slot position [2] = Quantities For $i = 1 To $aTroopDataList[0] Local $troopData = StringSplit($aTroopDataList[$i], "#", $STR_NOCOUNT) - $aTemp[Number($troopData[1])][0] = $troopData[0] - $aTemp[Number($troopData[1])][1] = Number($troopData[2]) - $aTemp[Number($troopData[1])][2] = Number($troopData[1]) + $aTemp[Number($troopData[1])][0] = $troopData[0] ; troop name + $aTemp[Number($troopData[1])][1] = Number($troopData[2]) ; amount + $aTemp[Number($troopData[1])][2] = Number($troopData[1]) ; index + $aTemp[Number($troopData[1])][3] = Number($troopData[3]) ; x-coord Next EndIf For $i = 0 To UBound($aTemp) - 1 If $aTemp[$i][0] = "" And $aTemp[$i][1] = "" Then $g_avAttackTroops[$i][0] = -1 $g_avAttackTroops[$i][1] = 0 + $g_avAttackTroops[$i][2] = 0 Else Local $troopKind = $aTemp[$i][0] If $troopKind < $eKing Then @@ -203,12 +207,14 @@ Func PrepareAttack($pMatchMode, $Remaining = False, $DebugSiege = False) ;Assign If $g_bDebugSetlog Then SetDebugLog("Discard use of troop " & $troopKind & " " & NameOfTroop($troopKind), $COLOR_ERROR) $g_avAttackTroops[$i][0] = -1 $g_avAttackTroops[$i][1] = 0 + $g_avAttackTroops[$i][2] = 0 $troopKind = -1 Else ;use troop ;Setlog ("troopsnumber = " & $troopsnumber & "+ " & Number( $aTemp[$i][1])) $g_avAttackTroops[$i][0] = $aTemp[$i][0] $g_avAttackTroops[$i][1] = $aTemp[$i][1] + $g_avAttackTroops[$i][2] = $aTemp[$i][3] $troopsnumber += $aTemp[$i][1] EndIf @@ -219,6 +225,7 @@ Func PrepareAttack($pMatchMode, $Remaining = False, $DebugSiege = False) ;Assign ;Setlog ("troopsnumber = " & $troopsnumber & "+1") $g_avAttackTroops[$i][0] = $aTemp[$i][0] $g_avAttackTroops[$i][1] = $aTemp[$i][1] + $g_avAttackTroops[$i][2] = $aTemp[$i][3] If $g_avAttackTroops[$i][0] = $eKing Or $g_avAttackTroops[$i][0] = $eQueen Or $g_avAttackTroops[$i][0] = $eWarden Then $g_avAttackTroops[$i][1] = 1 $troopKind = $g_avAttackTroops[$i][1] $troopsnumber += 1 @@ -230,12 +237,13 @@ Func PrepareAttack($pMatchMode, $Remaining = False, $DebugSiege = False) ;Assign $Plural = 0 If $aTemp[$i][1] > 1 Then $Plural = 1 - If $troopKind <> -1 Then SetLog($aTemp[$i][2] & " » " & $g_avAttackTroops[$i][1] & " " & NameOfTroop($g_avAttackTroops[$i][0], $Plural), $COLOR_SUCCESS) + If $troopKind <> -1 Then SetLog($aTemp[$i][2] & " » " & $g_avAttackTroops[$i][1] & " " & NameOfTroop($g_avAttackTroops[$i][0], $Plural) & ", x: " & $g_avAttackTroops[$i][2], $COLOR_SUCCESS) EndIf Next ;ResumeAndroid() + SetSlotSpecialTroops() If $g_bDebugSetlog Then SetDebugLog("troopsnumber = " & $troopsnumber) Return $troopsnumber @@ -295,10 +303,14 @@ Func IsSpecialTroopToBeUsed($pMatchMode, $pTroopType) If $g_abAttackUseCloneSpell[$iTempMode] Then Return True Case $eSkSpell If $g_abAttackUseSkeletonSpell[$iTempMode] Then Return True + Case $eBtSpell + If $g_abAttackUseBatSpell[$iTempMode] Then Return True Case $eWallW If $g_abAttackDropCC[$iTempMode] Then Return True Case $eBattleB If $g_abAttackDropCC[$iTempMode] Then Return True + Case $eStoneS + If $g_abAttackDropCC[$iTempMode] Then Return True Case Else Return False EndSwitch diff --git a/COCBot/functions/Attack/ReturnHome.au3 b/COCBot/functions/Attack/ReturnHome.au3 index 9a3a60ab7..def5d862d 100644 --- a/COCBot/functions/Attack/ReturnHome.au3 +++ b/COCBot/functions/Attack/ReturnHome.au3 @@ -109,7 +109,7 @@ Func ReturnHome($TakeSS = 1, $GoldChangeCheck = True) ;Return main screen TrayTip($g_sBotTitle, "", BitOR($TIP_ICONASTERISK, $TIP_NOSOUND)) ; clear village search match found message - CheckAndroidReboot(False) + If CheckAndroidReboot() Then Return If $GoldChangeCheck Then If IsAttackPage() Then @@ -177,7 +177,7 @@ Func ReturnHome($TakeSS = 1, $GoldChangeCheck = True) ;Return main screen EndFunc ;==>ReturnHome Func ReturnHomeMainPage() - If IsMainPage(1) Then + If IsMainPage(2) Then SetLogCentered(" BOT LOG ", Default, Default, True) Return True EndIf diff --git a/COCBot/functions/Attack/Troops/CheckHeroesHealth.au3 b/COCBot/functions/Attack/Troops/CheckHeroesHealth.au3 index e822eb737..aa98bf822 100644 --- a/COCBot/functions/Attack/Troops/CheckHeroesHealth.au3 +++ b/COCBot/functions/Attack/Troops/CheckHeroesHealth.au3 @@ -40,10 +40,9 @@ Func CheckHeroesHealth() EndIf If $g_iActivateQueen = 0 Or $g_iActivateQueen = 2 Then - Local $aQueenHealthCopy = $aQueenHealth ; copy ScreenCoordinates array to modify locally with dynamic X coordinate from slotposition - $aQueenHealthCopy[0] = GetXPosOfArmySlot($TempQueenSlot, 68) + 3 ; Slot11+ - If $g_bCheckQueenPower Then + Local $aQueenHealthCopy = $aQueenHealth ; copy ScreenCoordinates array to modify locally with dynamic X coordinate from slotposition + $aQueenHealthCopy[0] = GetXPosOfArmySlot($TempQueenSlot, 68) + $aQueenHealthCopy[4] ; Slot11+ Local $QueenPixelColor = _GetPixelColor($aQueenHealthCopy[0], $aQueenHealthCopy[1], $g_bCapturePixel) If $g_bDebugSetlog Then SetDebugLog(" Queen _GetPixelColor(" & $aQueenHealthCopy[0] & "," & $aQueenHealthCopy[1] & "): " & $QueenPixelColor, $COLOR_DEBUG) If Not _CheckPixel2($aQueenHealthCopy, $QueenPixelColor, "Red+Blue") Then @@ -75,10 +74,9 @@ Func CheckHeroesHealth() EndIf If $g_iActivateKing = 0 Or $g_iActivateKing = 2 Then - Local $aKingHealthCopy = $aKingHealth ; copy ScreenCoordinates array to modify locally with dynamic X coordinate from slotposition - $aKingHealthCopy[0] = GetXPosOfArmySlot($TempKingSlot, 68) + 2 ; Slot11+ - If $g_bCheckKingPower Then + Local $aKingHealthCopy = $aKingHealth ; copy ScreenCoordinates array to modify locally with dynamic X coordinate from slotposition + $aKingHealthCopy[0] = GetXPosOfArmySlot($TempKingSlot, 68) + $aKingHealthCopy[4] ; Slot11+ Local $KingPixelColor = _GetPixelColor($aKingHealthCopy[0], $aKingHealthCopy[1], $g_bCapturePixel) If $g_bDebugSetlog Then SetDebugLog(" King _GetPixelColor(" & $aKingHealthCopy[0] & "," & $aKingHealthCopy[1] & "): " & $KingPixelColor, $COLOR_DEBUG) If Not _CheckPixel2($aKingHealthCopy, $KingPixelColor, "Red+Blue") Then @@ -110,10 +108,9 @@ Func CheckHeroesHealth() EndIf If $g_iActivateWarden = 0 Or $g_iActivateWarden = 2 Then - Local $aWardenHealthCopy = $aWardenHealth - $aWardenHealthCopy[0] = GetXPosOfArmySlot($TempWardenSlot, 68) ; Slot11+ - If $g_bCheckWardenPower Then + Local $aWardenHealthCopy = $aWardenHealth + $aWardenHealthCopy[0] = GetXPosOfArmySlot($TempWardenSlot, 68) + $aWardenHealthCopy[4] ; Slot11+ Local $WardenPixelColor = _GetPixelColor($aWardenHealthCopy[0], $aWardenHealthCopy[1], $g_bCapturePixel) If $g_bDebugSetlog Then SetDebugLog(" Grand Warden _GetPixelColor(" & $aWardenHealthCopy[0] & "," & $aWardenHealthCopy[1] & "): " & $WardenPixelColor, $COLOR_DEBUG) If Not _CheckPixel2($aWardenHealthCopy, $WardenPixelColor, "Red+Blue") Then diff --git a/COCBot/functions/Attack/Troops/GetXPosOfArmySlot.au3 b/COCBot/functions/Attack/Troops/GetXPosOfArmySlot.au3 index b34300dfb..95efbbf07 100644 --- a/COCBot/functions/Attack/Troops/GetXPosOfArmySlot.au3 +++ b/COCBot/functions/Attack/Troops/GetXPosOfArmySlot.au3 @@ -16,6 +16,15 @@ Func GetXPosOfArmySlot($slotNumber, $xOffsetFor11Slot) + If $slotNumber < 0 Or $slotNumber + 1 > UBound($g_avAttackTroops) Then + ; invalid slot + Return 0 + EndIf + + ; use x-cord from $g_avAttackTroops + Return $g_avAttackTroops[$slotNumber][2] + + #cs Local $CheckSlot12, $SlotPixelColorTemp, $SlotPixelColor1 $xOffsetFor11Slot -= 8 @@ -43,5 +52,5 @@ Func GetXPosOfArmySlot($slotNumber, $xOffsetFor11Slot) Else Return $xOffsetFor11Slot + $SlotComp + ($slotNumber * 72) - 13 EndIf - + #ce EndFunc ;==>GetXPosOfArmySlot diff --git a/COCBot/functions/Attack/Troops/NameOfTroop.au3 b/COCBot/functions/Attack/Troops/NameOfTroop.au3 index ba2a98cf6..38f225517 100644 --- a/COCBot/functions/Attack/Troops/NameOfTroop.au3 +++ b/COCBot/functions/Attack/Troops/NameOfTroop.au3 @@ -57,6 +57,8 @@ Func NameOfTroop($iKind, $iPlural = 0) $sTroopname = "Lava Hound" Case $eBowl $sTroopname = "Bowler" + Case $eIceG + $sTroopname = "Ice Golem" Case $eKing $sTroopname = "King" $iPlural = 0 ; safety reset, $sTroopname of $eKing cannot be plural @@ -89,10 +91,14 @@ Func NameOfTroop($iKind, $iPlural = 0) $sTroopname = "Haste Spell" Case $eSkSpell $sTroopname = "Skeleton Spell" + Case $eBtSpell + $sTroopname = "Bat Spell" Case $eWallW $sTroopname = "Wall Wrecker" Case $eBattleB $sTroopname = "Battle Blimp" + Case $eStoneS + $sTroopname = "Stone Slammer" Case Else Return "" ; error or unknown case EndSwitch diff --git a/COCBot/functions/Config/ImageDirectories.au3 b/COCBot/functions/Config/ImageDirectories.au3 index 2aad30b26..5ad4ea2dd 100644 --- a/COCBot/functions/Config/ImageDirectories.au3 +++ b/COCBot/functions/Config/ImageDirectories.au3 @@ -47,6 +47,7 @@ Global $g_sImgCollectRessourcesBB = @ScriptDir & "\imgxml\Resources\BuildersBase Global $g_sImgBoatBB = @ScriptDir & "\imgxml\Boat\BoatBuilderBase_0_89.xml" Global $g_sImgZoomOutDirBB = @ScriptDir & "\imgxml\village\BuilderBase\" Global $g_sImgStartCTBoost = @ScriptDir & "\imgxml\Resources\BuildersBase\ClockTower\ClockTowerAvailable*.xml" +Global $g_sImgCleanBBYard = @ScriptDir & "\imgxml\Resources\ObstaclesBB" #EndRegion #Region DonateCC @@ -55,6 +56,7 @@ Global $g_sImgDonateSpells = @ScriptDir & "\imgxml\DonateCC\Spells\" Global $g_sImgDonateSiege = @ScriptDir & "\imgxml\DonateCC\SiegeMachines\" Global $g_sImgChatDivider = @ScriptDir & "\imgxml\DonateCC\donateccwbl\chatdivider_0_98.xml" Global $g_sImgChatDividerHidden = @ScriptDir & "\imgxml\DonateCC\donateccwbl\chatdividerhidden_0_98.xml" +Global $g_sImgChatIUnterstand = @ScriptDir & "\imgxml\DonateCC\donateccwbl\iunderstand_0_95.xml" #EndRegion #Region Auto Upgrade Normal Village @@ -92,6 +94,7 @@ Global $g_sImgSwitchSiegeMachine = @ScriptDir & "\imgxml\SwitchSiegeMachines\Sie Global $g_sImgSwitchSiegeCastle = @ScriptDir & "\imgxml\SwitchSiegeMachines\Castle" Global $g_sImgSwitchSiegeWallWrecker = @ScriptDir & "\imgxml\SwitchSiegeMachines\WallWrecker" Global $g_sImgSwitchSiegeBattleBlimp = @ScriptDir & "\imgxml\SwitchSiegeMachines\BattleBlimp" +Global $g_sImgSwitchSiegeStoneSlammer = @ScriptDir & "\imgxml\SwitchSiegeMachines\StoneSlammer" #EndRegion #Region Search diff --git a/COCBot/functions/Config/ScreenCoordinates.au3 b/COCBot/functions/Config/ScreenCoordinates.au3 index efb9a6846..2a31e8844 100644 --- a/COCBot/functions/Config/ScreenCoordinates.au3 +++ b/COCBot/functions/Config/ScreenCoordinates.au3 @@ -55,7 +55,7 @@ Global $aArmyCampSize[2] = [110, 136 + $g_iMidOffsetY] ; Training Window, Overvi Global $aSiegeMachineSize[2] = [755, 136 + $g_iMidOffsetY] ; Training Window, Overview screen, Current Number/Total Number Global $aArmySpellSize[2] = [99, 284 + $g_iMidOffsetY] ; Training Window Overviewscreen, current number/total capacity Global $g_aArmyCCSpellSize[2] = [473, 438 + $g_iMidOffsetY] ; Training Window, Overview Screen, Current CC Spell number/total cc spell capacity -Global $aArmyCCRemainTime[2] = [782, 540 + $g_iMidOffsetY] ; Training Window Overviewscreen, Minutes & Seconds remaining till can request again +Global $aArmyCCRemainTime[2] = [782, 552 + $g_iMidOffsetY] ; Training Window Overviewscreen, Minutes & Seconds remaining till can request again Global $aIsCampNotFull[4] = [149, 150 + $g_iMidOffsetY, 0x761714, 20] ; Training Window, Overview screen Red pixel in Exclamation mark with camp is not full Global $aIsCampFull[4] = [128, 151 + $g_iMidOffsetY, 0xFFFFFF, 10] ; Training Window, Overview screen White pixel in check mark with camp IS full (can not test for Green, as it has trees under it!) Global $aBarrackFull[4] = [388, 154 + $g_iMidOffsetY, 0xE84D50, 20] ; Training Window, Barracks Screen, Red pixel in Exclamation mark with Barrack is full @@ -101,9 +101,6 @@ Global $aAttackForTreasury[4] = [88, 619 + $g_iMidOffsetY, 0xF0EBE8, 5] ; Red pi Global $aAtkHasDarkElixir[4] = [ 31, 144, 0x282020, 10] ; Attack Page, Check for DE icon Global $aVillageHasDarkElixir[4] = [837, 134, 0x3D2D3D, 10] ; Main Page, Base has dark elixir storage -;Global $aKingHealth = [ -1, 572 + $g_iBottomOffsetY, 0x4FD404,110] ; Attack Screen, Check King's Health, X coordinate is dynamic, not used from array -;Global $aQueenHealth = [ -1, 573 + $g_iBottomOffsetY, 0x4FD404,110] ; Attack Screen, Check Queen's Health, X coordinate is dynamic, not used from array - Global $aCheckTopProfile[4] = [200, 166, 0x868CAC, 5] Global $aCheckTopProfile2[4] = [220, 355, 0x4E4D79, 5] @@ -111,13 +108,12 @@ Global $aIsTabOpen[4] = [0, 145, 0xEAEAE3, 25];Check if specific Tab is opened, Global $aRecievedTroops[4] = [200 ,215 ,0xFFFFFF, 20] ; Y of You have recieved blabla from xx! -; Check healthy color RGB ( 220,255,19~27) ; the king and queen haves the same Y , but warden is a little lower ... -; King Crown ; background pixel not at green bar -Global $aKingHealth = [-1, 569 + $g_iBottomOffsetY, 0x00D500, 15] ; Attack Screen, Check King's Health, X coordinate is dynamic, not used from array ; -> with slot compensation 0xbfb29e -; Queen purple between crown ; background pixel not at green bar -Global $aQueenHealth = [-1, 569 + $g_iBottomOffsetY, 0x00D500, 15] ; Attack Screen, Check Queen's Health, X coordinate is dynamic, not used from array ; -> with slot compensation 0xe08227 -; Warden hair ; background pixel not at green bar -Global $aWardenHealth = [-1, 569 + $g_iBottomOffsetY, 0x00D500, 15] ; Attack Screen, Check Warden's Health, X coordinate is dynamic, not used from array ; -> with slot compensation 0xe08227 +; King Health Bar, check at the middle of the bar, index 4 is x-offset added to middle of health bar +Global $aKingHealth = [-1, 569 + $g_iBottomOffsetY, 0x00D500, 15, 13] +; Queen Health Bar, check at the middle of the bar, index 4 is x-offset added to middle of health bar +Global $aQueenHealth = [-1, 569 + $g_iBottomOffsetY, 0x00D500, 15, 8] +; Warden Health Bar, check at the middle of the bar, index 4 is x-offset added to middle of health bar +Global $aWardenHealth = [-1, 569 + $g_iBottomOffsetY, 0x00D500, 15, 3] ; attack report... stars won Global $aWonOneStarAtkRprt[4] = [325, 180 + $g_iMidOffsetY, 0xC8CaC4, 30] ; Center of 1st Star reached attacked village @@ -126,10 +122,11 @@ Global $aWonThreeStarAtkRprt[4] = [534, 180 + $g_iMidOffsetY, 0xC8CAC7, 30] ; Ce ; pixel color: location information BS 850MB (Reg GFX), BS 500MB (Med GFX) : location Global $NextBtn[4] = [780, 546 + $g_iBottomOffsetY, 0xD34300, 20] ; Next Button +Global $a12OrMoreSlots[4] = [16, 670, 0x5C93C8, 25] ; Attackbar Check if 12+ Slots exist ; Someone asking troops : Color 0xD0E978 in x = 121 -; 1 - Dark Gray : Castle filled/No Castle | 2 - Dark Green : Available or Already made | 3 - White : Available or Castle filled/No Castle -Global $aRequestTroopsAO[6] = [761, 580, 0x919191, 0x6DB630, 0xFFFFFE, 15] ; Button Request Troops in Army Overview (x,y, Gray - Full/No Castle, Green - Available or Already, White - Available or Full) +; 1 - Dark Gray : Castle filled/No Castle | 2 - Light Green : Available or Already made | 3 - White : Available or Castle filled/No Castle +Global $aRequestTroopsAO[6] = [761, 592, 0x565656, 0x3C6C27, 0xFFFFFE, 25] ; Button Request Troops in Army Overview (x,y, Gray - Full/No Castle, Green - Available or Already, White - Available or Full) Global Const $aOpenChatTab[4] = [19, 335 + $g_iMidOffsetY, 0xE88D27, 20] Global Const $aCloseChat[4] = [331, 330 + $g_iMidOffsetY, 0xF0951D, 20] ; duplicate with $aChatTab above, need to rename and fix all code to use one? @@ -176,19 +173,25 @@ Global $aButtonSetting[4] = [820, 550 + $g_iMidOffsetY, 0xFFFFFF, 10] ; Setting Global $aIsSettingPage[4] = [753, 75 + $g_iMidOffsetY, 0xFF8F95, 10] ; Main Screen, Setting page open - left upper corner of x button ;Google Play -Global $aButtonConnected[4] = [430, 380 + $g_iMidOffsetY, 0xD8F480, 20] ; Setting screen, Connected button -Global $aButtonDisconnected[4] = [430, 380 + $g_iMidOffsetY, 0xFF7C81, 20] ; Setting screen, Disconnected button +Global $aButtonConnected[4] = [602, 374 + $g_iMidOffsetY, 0xDAF481, 20] ; Setting screen, Connected button +Global $aButtonDisconnected[4] = [602, 374 + $g_iMidOffsetY, 0xFF7E82, 20] ; Setting screen, Disconnected button Global $aListAccount[4] = [635, 210 + $g_iMidOffsetY, 0xFFFFFF, 10] ; Accounts list google, White Global $aButtonVillageLoad[4] = [515, 411 + $g_iMidOffsetY, 0x6EBD1F, 20] ; Load button, Green Global $aTextBox[4] = [320, 160 + $g_iMidOffsetY, 0xFFFFFF, 10] ; Text box, White Global $aButtonVillageOkay[4] = [500, 170 + $g_iMidOffsetY, 0x81CA2D, 20] ; Okay button, Green + ;SuperCell ID -Global $aButtonConnectedSCID[4] = [430, 205 + $g_iMidOffsetY, 0x6EB730, 20] ; Setting creen, Supercell ID Connected button -Global $aButtonLogOutSCID[4] = [700, 285 + $g_iMidOffsetY, 0x308AFB, 20] ; Supercell ID, Log Out button -Global $aButtonConfirmSCID[4] = [460, 410 + $g_iMidOffsetY, 0x328AFB, 20] ; Supercell ID, Confirm button +Global $aButtonConnectedSCID[4] = [453, 513 + $g_iMidOffsetY, 0x72BB2F, 20] ; Setting screen, Supercell ID Connected button +Global $aButtonLogOutSCID[4] = [615, 270 + $g_iMidOffsetY, 0x308AFB, 20] ; Supercell ID, Log Out button +Global $aButtonConfirmSCID[4] = [475, 420 + $g_iMidOffsetY, 0x2C88FA, 20] ; Supercell ID, Confirm button Global $aListAccountSCID[4] = [490, 185 + $g_iMidOffsetY, 0x000000, 10] ; Supercell ID, Black check in word "ID" Global $aCloseTabSCID[4] = [732, 145] ; Button Close Supercell ID tab +;Train +Global $aButtonEditArmy[4] = [800, 542, 0xDDF685, 25] +Global $aButtonRemoveTroopsOK1[4] = [778, 563, 0xDAF582, 25] +Global $aButtonRemoveTroopsOK2[4] = [508, 428, 0xFFFFFF, 30] + Global $aTrainBarb[4] = [-1, -1, -1, -1] Global $aTrainArch[4] = [-1, -1, -1, -1] Global $aTrainGiant[4] = [-1, -1, -1, -1] @@ -209,6 +212,7 @@ Global $aTrainGole[4] = [-1, -1, -1, -1] Global $aTrainWitc[4] = [-1, -1, -1, -1] Global $aTrainLava[4] = [-1, -1, -1, -1] Global $aTrainBowl[4] = [-1, -1, -1, -1] +Global $aTrainIceG[4] = [-1, -1, -1, -1] Global $aTrainLSpell[4] = [-1, -1, -1, -1] Global $aTrainHSpell[4] = [-1, -1, -1, -1] Global $aTrainRSpell[4] = [-1, -1, -1, -1] @@ -219,10 +223,12 @@ Global $aTrainPSpell[4] = [-1, -1, -1, -1] Global $aTrainESpell[4] = [-1, -1, -1, -1] Global $aTrainHaSpell[4] = [-1, -1, -1, -1] Global $aTrainSkSpell[4] = [-1, -1, -1, -1] +Global $aTrainBtSpell[4] = [-1, -1, -1, -1] +Global $aTrain[4] = [-1, -1, -1, -1] Global $aTrainArmy[$eArmyCount] = [$aTrainBarb, $aTrainArch, $aTrainGiant, $aTrainGobl, $aTrainWall, $aTrainBall, $aTrainWiza, $aTrainHeal, $aTrainDrag, $aTrainPekk, $aTrainBabyD, $aTrainMine, $aTrainEDrag, _ - $aTrainMini, $aTrainHogs, $aTrainValk, $aTrainGole, $aTrainWitc, $aTrainLava, $aTrainBowl, 0, 0, 0, 0, $aTrainLSpell, $aTrainHSpell, $aTrainRSpell, $aTrainJSpell, $aTrainFSpell, $aTrainCSpell, _ - $aTrainPSpell, $aTrainESpell, $aTrainHaSpell, $aTrainSkSpell] + $aTrainMini, $aTrainHogs, $aTrainValk, $aTrainGole, $aTrainWitc, $aTrainLava, $aTrainBowl, $aTrainIceG, 0, 0, 0, 0, $aTrainLSpell, $aTrainHSpell, $aTrainRSpell, $aTrainJSpell, $aTrainFSpell, $aTrainCSpell, _ + $aTrainPSpell, $aTrainESpell, $aTrainHaSpell, $aTrainSkSpell, $aTrainBtSpell] ;Change Language To English Global $aButtonLanguage[4] = [210, 375 + $g_iMidOffsetY, 0xD0E978, 20] Global $aListLanguage[4] = [110, 90 + $g_iMidOffsetY, 0xFFFFFF, 10] diff --git a/COCBot/functions/Config/applyConfig.au3 b/COCBot/functions/Config/applyConfig.au3 index 6a390df3c..9a450632e 100644 --- a/COCBot/functions/Config/applyConfig.au3 +++ b/COCBot/functions/Config/applyConfig.au3 @@ -302,6 +302,7 @@ Func ApplyConfig_600_6($TypeReadSave) GUICtrlSetData($g_hTxtTreasuryDark, $g_iTxtTreasuryDark) GUICtrlSetState($g_hChkCollectBuilderBase, $g_bChkCollectBuilderBase ? $GUI_CHECKED : $GUI_UNCHECKED) + GUICtrlSetState($g_hChkCleanBBYard, $g_bChkCleanBBYard ? $GUI_CHECKED : $GUI_UNCHECKED) GUICtrlSetState($g_hChkStartClockTowerBoost, $g_bChkStartClockTowerBoost ? $GUI_CHECKED : $GUI_UNCHECKED) GUICtrlSetState($g_hChkCTBoostBlderBz, $g_bChkCTBoostBlderBz ? $GUI_CHECKED : $GUI_UNCHECKED) chkStartClockTowerBoost() @@ -360,6 +361,7 @@ Func ApplyConfig_600_6($TypeReadSave) $g_iTxtTreasuryDark = GUICtrlRead($g_hTxtTreasuryDark) $g_bChkCollectBuilderBase = (GUICtrlRead($g_hChkCollectBuilderBase) = $GUI_CHECKED) + $g_bChkCleanBBYard = (GUICtrlRead($g_hChkCleanBBYard) = $GUI_CHECKED) $g_bChkStartClockTowerBoost = (GUICtrlRead($g_hChkStartClockTowerBoost) = $GUI_CHECKED) $g_bChkCTBoostBlderBz = (GUICtrlRead($g_hChkCTBoostBlderBz) = $GUI_CHECKED) $g_iChkBBSuggestedUpgrades = (GUICtrlRead($g_hChkBBSuggestedUpgrades) = $GUI_CHECKED) ? 1 : 0 @@ -1340,6 +1342,7 @@ Func ApplyConfig_600_29_DB($TypeReadSave) GUICtrlSetState($g_hChkDBEarthquakeSpell, $g_abAttackUseEarthquakeSpell[$DB] ? $GUI_CHECKED : $GUI_UNCHECKED) GUICtrlSetState($g_hChkDBHasteSpell, $g_abAttackUseHasteSpell[$DB] ? $GUI_CHECKED : $GUI_UNCHECKED) GUICtrlSetState($g_hChkDBSkeletonSpell, $g_abAttackUseSkeletonSpell[$DB] ? $GUI_CHECKED : $GUI_UNCHECKED) + GUICtrlSetState($g_hChkDBBatSpell, $g_abAttackUseBatSpell[$DB] ? $GUI_CHECKED : $GUI_UNCHECKED) GUICtrlSetState($g_hChkTHSnipeBeforeDBEnable, $g_bTHSnipeBeforeEnable[$DB] ? $GUI_CHECKED : $GUI_UNCHECKED) chkTHSnipeBeforeDBEnable() GUICtrlSetData($g_hTxtTHSnipeBeforeDBTiles, $g_iTHSnipeBeforeTiles[$DB]) @@ -1366,6 +1369,7 @@ Func ApplyConfig_600_29_DB($TypeReadSave) $g_abAttackUseHasteSpell[$DB] = (GUICtrlRead($g_hChkDBHasteSpell) = $GUI_CHECKED) $g_abAttackUseCloneSpell[$DB] = (GUICtrlRead($g_hChkDBCloneSpell) = $GUI_CHECKED) $g_abAttackUseSkeletonSpell[$DB] = (GUICtrlRead($g_hChkDBSkeletonSpell) = $GUI_CHECKED) + $g_abAttackUseBatSpell[$DB] = (GUICtrlRead($g_hChkDBBatSpell) = $GUI_CHECKED) $g_bTHSnipeBeforeEnable[$DB] = (GUICtrlRead($g_hChkTHSnipeBeforeDBEnable) = $GUI_CHECKED) $g_iTHSnipeBeforeTiles[$DB] = GUICtrlRead($g_hTxtTHSnipeBeforeDBTiles) $g_iTHSnipeBeforeScript[$DB] = GUICtrlRead($g_hCmbTHSnipeBeforeDBScript) @@ -1609,6 +1613,7 @@ Func ApplyConfig_600_29_LB($TypeReadSave) GUICtrlSetState($g_hChkABEarthquakeSpell, $g_abAttackUseEarthquakeSpell[$LB] ? $GUI_CHECKED : $GUI_UNCHECKED) GUICtrlSetState($g_hChkABHasteSpell, $g_abAttackUseHasteSpell[$LB] ? $GUI_CHECKED : $GUI_UNCHECKED) GUICtrlSetState($g_hChkABSkeletonSpell, $g_abAttackUseSkeletonSpell[$LB] ? $GUI_CHECKED : $GUI_UNCHECKED) + GUICtrlSetState($g_hChkABBatSpell, $g_abAttackUseBatSpell[$LB] ? $GUI_CHECKED : $GUI_UNCHECKED) GUICtrlSetState($g_hChkTHSnipeBeforeLBEnable, $g_bTHSnipeBeforeEnable[$LB] ? $GUI_CHECKED : $GUI_UNCHECKED) chkTHSnipeBeforeLBEnable() GUICtrlSetData($g_hTxtTHSnipeBeforeLBTiles, $g_iTHSnipeBeforeTiles[$LB]) @@ -1635,6 +1640,7 @@ Func ApplyConfig_600_29_LB($TypeReadSave) $g_abAttackUseEarthquakeSpell[$LB] = (GUICtrlRead($g_hChkABEarthquakeSpell) = $GUI_CHECKED) $g_abAttackUseHasteSpell[$LB] = (GUICtrlRead($g_hChkABHasteSpell) = $GUI_CHECKED) $g_abAttackUseSkeletonSpell[$LB] = (GUICtrlRead($g_hChkABSkeletonSpell) = $GUI_CHECKED) + $g_abAttackUseBatSpell[$LB] = (GUICtrlRead($g_hChkABBatSpell) = $GUI_CHECKED) $g_bTHSnipeBeforeEnable[$LB] = (GUICtrlRead($g_hChkTHSnipeBeforeLBEnable) = $GUI_CHECKED) $g_iTHSnipeBeforeTiles[$LB] = GUICtrlRead($g_hTxtTHSnipeBeforeLBTiles) $g_iTHSnipeBeforeScript[$LB] = GUICtrlRead($g_hCmbTHSnipeBeforeLBScript) @@ -1882,9 +1888,9 @@ Func ApplyConfig_600_31($TypeReadSave) ; <><><><> Attack Plan / Search & Attack / Deadbase / Collectors <><><><> Switch $TypeReadSave Case "Read" - For $i = 6 To 12 + For $i = 6 To 13 GUICtrlSetState($g_ahChkDBCollectorLevel[$i], $g_abCollectorLevelEnabled[$i] ? $GUI_CHECKED : $GUI_UNCHECKED) - GUICtrlSetState($g_ahCmbDBCollectorLevel[$i], $g_abCollectorLevelEnabled[$i] ? $GUI_ENABLE : $GUI_DISABLE) + GUICtrlSetState($g_ahCmbDBCollectorLevel[$i], $g_abCollectorLevelEnabled[$i] ? $GUI_ENABLE : $GUI_DISABLE) _GUICtrlComboBox_SetCurSel($g_ahCmbDBCollectorLevel[$i], $g_aiCollectorLevelFill[$i]) Next GUICtrlSetState($g_hChkDBDisableCollectorsFilter, $g_bCollectorFilterDisable ? $GUI_CHECKED : $GUI_UNCHECKED) @@ -1892,7 +1898,7 @@ Func ApplyConfig_600_31($TypeReadSave) GUICtrlSetData($g_hSldCollectorTolerance, $g_iCollectorToleranceOffset) checkCollectors() Case "Save" - For $i = 6 To 12 + For $i = 6 To 13 $g_abCollectorLevelEnabled[$i] = (GUICtrlRead($g_ahChkDBCollectorLevel[$i]) = $GUI_CHECKED) $g_aiCollectorLevelFill[$i] = _GUICtrlComboBox_GetCurSel($g_ahCmbDBCollectorLevel[$i]) Next diff --git a/COCBot/functions/Config/readConfig.au3 b/COCBot/functions/Config/readConfig.au3 index 4332f70e8..b7c56a3e2 100644 --- a/COCBot/functions/Config/readConfig.au3 +++ b/COCBot/functions/Config/readConfig.au3 @@ -400,6 +400,7 @@ Func ReadConfig_600_6() IniReadS($g_iTxtTreasuryDark, $g_sProfileConfigPath, "other", "minTreasurydark", 0, "int") IniReadS($g_bChkCollectBuilderBase, $g_sProfileConfigPath, "other", "ChkCollectBuildersBase", False, "Bool") + IniReadS($g_bChkCleanBBYard, $g_sProfileConfigPath, "other", "ChkCleanBBYard", False, "Bool") IniReadS($g_bChkStartClockTowerBoost, $g_sProfileConfigPath, "other", "ChkStartClockTowerBoost", False, "Bool") IniReadS($g_bChkCTBoostBlderBz, $g_sProfileConfigPath, "other", "ChkCTBoostBlderBz", False, "Bool") IniReadS($g_iChkBBSuggestedUpgrades, $g_sProfileConfigPath, "other", "ChkBBSuggestedUpgrades", $g_iChkBBSuggestedUpgrades, "Int") @@ -457,7 +458,7 @@ Func ReadConfig_600_11() For $i = 0 To 2 $g_aiClanCastleTroopWaitType[$i] = Int(IniRead($g_sProfileConfigPath, "donate", "cmbClanCastleTroop" & $i, "20")) $g_aiClanCastleTroopWaitQty[$i] = Int(IniRead($g_sProfileConfigPath, "donate", "txtClanCastleTroop" & $i, "0")) - If $g_aiClanCastleTroopWaitType[$i] < $eTroopCount Then ; barb - bowl + If $g_aiClanCastleTroopWaitType[$i] < $eTroopCount Then ; barb - IceG $g_aiCCTroopsExpected[$g_aiClanCastleTroopWaitType[$i]] += $g_aiClanCastleTroopWaitQty[$i] EndIf Next @@ -482,7 +483,7 @@ Func ReadConfig_600_12() IniReadS($g_abChkDonateQueueOnly[1], $g_sProfileConfigPath, "donate", "chkDonateQueueOnly[1]", True, "Bool") For $i = 0 To $eTroopCount - 1 + $g_iCustomDonateConfigs Local $sIniName = "" - If $i >= $eTroopBarbarian And $i <= $eTroopBowler Then + If $i >= $eTroopBarbarian And $i <= $eTroopIceGolem Then $sIniName = StringReplace($g_asTroopNamesPlural[$i], " ", "") ElseIf $i = $eCustomA Then $sIniName = "CustomA" @@ -557,6 +558,9 @@ Func ReadConfig_600_12() $g_asTxtDonateTroop[$eTroopBowler] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateBowlers", "bowler|bowl"), "|", @CRLF) $g_asTxtBlacklistTroop[$eTroopBowler] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistBowlers", "no bowler|bowl no"), "|", @CRLF) + + $g_asTxtDonateTroop[$eTroopIceGolem] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateIceGolems", "ice golem|ice golems"), "|", @CRLF) + $g_asTxtBlacklistTroop[$eTroopIceGolem] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistIceGolems", "no ice golem|ice golem no"), "|", @CRLF) $g_asTxtDonateTroop[$eCustomA] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateCustomA", "ground support|ground"), "|", @CRLF) $g_asTxtBlacklistTroop[$eCustomA] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistCustomA", "no ground|ground no|nonly"), "|", @CRLF) @@ -604,6 +608,9 @@ Func ReadConfig_600_12() $g_asTxtDonateSpell[$eSpellSkeleton] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateSkeletonSpells", "skeleton"), "|", @CRLF) $g_asTxtBlacklistSpell[$eSpellSkeleton] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistSkeletonSpells", "no skeleton|skeleton no"), "|", @CRLF) + + $g_asTxtDonateSpell[$eSpellBat] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateBatSpells", "bat"), "|", @CRLF) + $g_asTxtBlacklistSpell[$eSpellBat] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistBatSpells", "no bat|bat no"), "|", @CRLF) For $i = $eSiegeWallWrecker to $eSiegeMachineCount - 1 Local $index = $eTroopCount + $g_iCustomDonateConfigs @@ -616,6 +623,9 @@ Func ReadConfig_600_12() $g_asTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeBattleBlimp] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateBattleB", "Blimp|siege"), "|", @CRLF) $g_asTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeBattleBlimp] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistBattleB", "no Blimp|siege no"), "|", @CRLF) + + $g_asTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateStoneS", "Slammer|siege"), "|", @CRLF) + $g_asTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistStoneS", "no Slammer|siege no"), "|", @CRLF) $g_aiDonateCustomTrpNumA[0][0] = Int(IniRead($g_sProfileConfigPath, "donate", "cmbDonateCustomA1", 6)) @@ -670,6 +680,8 @@ Func ReadConfig_600_14() IniReadS($g_bAutoLabUpgradeEnable, $g_sProfileBuildingPath, "upgrade", "upgradetroops", False, "Bool") IniReadS($g_iCmbLaboratory, $g_sProfileBuildingPath, "upgrade", "upgradetroopname", 0, "int") $g_sLabUpgradeTime = IniRead($g_sProfileBuildingPath, "upgrade", "upgradelabtime", "") + IniReadS($g_iLaboratoryElixirCost, $g_sProfileBuildingPath, "upgrade", "upgradelabelexircost", 0, "int") + IniReadS($g_iLaboratoryDElixirCost, $g_sProfileBuildingPath, "upgrade", "upgradelabdelexircost", 0, "int") EndFunc ;==>ReadConfig_600_14 Func ReadConfig_600_15() @@ -978,6 +990,7 @@ Func ReadConfig_600_29_DB() IniReadS($g_abAttackUseHasteSpell[$DB], $g_sProfileConfigPath, "attack", "DBHasteSpell", False, "Bool") IniReadS($g_abAttackUseCloneSpell[$DB], $g_sProfileConfigPath, "attack", "DBCloneSpell", False, "Bool") IniReadS($g_abAttackUseSkeletonSpell[$DB], $g_sProfileConfigPath, "attack", "DBSkeletonSpell", False, "Bool") + IniReadS($g_abAttackUseBatSpell[$DB], $g_sProfileConfigPath, "attack", "DBBatSpell", False, "Bool") IniReadS($g_bTHSnipeBeforeEnable[$DB], $g_sProfileConfigPath, "attack", "THSnipeBeforeDBEnable", False, "Bool") IniReadS($g_iTHSnipeBeforeTiles[$DB], $g_sProfileConfigPath, "attack", "THSnipeBeforeDBTiles", 0, "int") IniReadS($g_iTHSnipeBeforeScript[$DB], $g_sProfileConfigPath, "attack", "THSnipeBeforeDBScript", "bam") @@ -1061,6 +1074,7 @@ Func ReadConfig_600_29_LB() IniReadS($g_abAttackUseHasteSpell[$LB], $g_sProfileConfigPath, "attack", "ABHasteSpell", False, "Bool") IniReadS($g_abAttackUseCloneSpell[$LB], $g_sProfileConfigPath, "attack", "ABCloneSpell", False, "Bool") IniReadS($g_abAttackUseSkeletonSpell[$LB], $g_sProfileConfigPath, "attack", "ABSkeletonSpell", False, "Bool") + IniReadS($g_abAttackUseBatSpell[$LB], $g_sProfileConfigPath, "attack", "ABBatSpell", False, "Bool") IniReadS($g_bTHSnipeBeforeEnable[$LB], $g_sProfileConfigPath, "attack", "THSnipeBeforeLBEnable", False, "Bool") IniReadS($g_iTHSnipeBeforeTiles[$LB], $g_sProfileConfigPath, "attack", "THSnipeBeforeLBTiles", 0, "int") IniReadS($g_iTHSnipeBeforeScript[$LB], $g_sProfileConfigPath, "attack", "THSnipeBeforeLBScript", "bam") @@ -1166,10 +1180,10 @@ EndFunc ;==>ReadConfig_600_30_TS Func ReadConfig_600_31() ; <><><><> Attack Plan / Search & Attack / Deadbase / Collectors <><><><> $g_abCollectorLevelEnabled[6] = 0 - For $i = 7 To 12 + For $i = 7 To 13 IniReadS($g_abCollectorLevelEnabled[$i], $g_sProfileConfigPath, "collectors", "lvl" & $i & "Enabled", True, "Bool") Next - For $i = 6 To 12 + For $i = 6 To 13 IniReadS($g_aiCollectorLevelFill[$i], $g_sProfileConfigPath, "collectors", "lvl" & $i & "fill", 0, "int") If $g_aiCollectorLevelFill[$i] > 1 Then $g_aiCollectorLevelFill[$i] = 1 Next diff --git a/COCBot/functions/Config/saveConfig.au3 b/COCBot/functions/Config/saveConfig.au3 index 9a1900721..3eb6468f9 100644 --- a/COCBot/functions/Config/saveConfig.au3 +++ b/COCBot/functions/Config/saveConfig.au3 @@ -116,6 +116,8 @@ Func SaveBuildingConfig() _Ini_Add("upgrade", "upgradetroops", $g_bAutoLabUpgradeEnable ? 1 : 0) _Ini_Add("upgrade", "upgradetroopname", $g_iCmbLaboratory) _Ini_Add("upgrade", "upgradelabtime", $g_sLabUpgradeTime) + _Ini_Add("upgrade", "upgradelabelexircost", $g_iLaboratoryElixirCost) + _Ini_Add("upgrade", "upgradelabdelexircost", $g_iLaboratoryDElixirCost) ; <><><><> Village / Upgrade - Buildings <><><><> ApplyConfig_600_16(GetApplyConfigSaveAction()) @@ -345,6 +347,7 @@ Func SaveConfig_600_6() _Ini_Add("other", "minTreasurydark", $g_iTxtTreasuryDark) _Ini_Add("other", "ChkCollectBuildersBase", $g_bChkCollectBuilderBase ? 1 : 0) + _Ini_Add("other", "ChkCleanBBYard", $g_bChkCleanBBYard ? 1 : 0) _Ini_Add("other", "ChkStartClockTowerBoost", $g_bChkStartClockTowerBoost ? 1 : 0) _Ini_Add("other", "ChkCTBoostBlderBz", $g_bChkCTBoostBlderBz ? 1 : 0) _Ini_Add("other", "ChkBBSuggestedUpgrades", $g_iChkBBSuggestedUpgrades) @@ -426,7 +429,7 @@ Func SaveConfig_600_12() For $i = 0 To $eTroopCount - 1 + $g_iCustomDonateConfigs Local $sIniName = "" - If $i >= $eTroopBarbarian And $i <= $eTroopBowler Then + If $i >= $eTroopBarbarian And $i <= $eTroopIceGolem Then $sIniName = StringReplace($g_asTroopNamesPlural[$i], " ", "") ElseIf $i = $eCustomA Then $sIniName = "CustomA" @@ -802,6 +805,7 @@ Func SaveConfig_600_29_DB() _Ini_Add("attack", "DBHasteSpell", $g_abAttackUseHasteSpell[$DB] ? 1 : 0) _Ini_Add("attack", "DBCloneSpell", $g_abAttackUseCloneSpell[$DB] ? 1 : 0) _Ini_Add("attack", "DBSkeletonSpell", $g_abAttackUseSkeletonSpell[$DB] ? 1 : 0) + _Ini_Add("attack", "DBBatSpell", $g_abAttackUseBatSpell[$DB] ? 1 : 0) _Ini_Add("attack", "THSnipeBeforeDBEnable", $g_bTHSnipeBeforeEnable[$DB] ? 1 : 0) _Ini_Add("attack", "THSnipeBeforeDBTiles", $g_iTHSnipeBeforeTiles[$DB]) _Ini_Add("attack", "THSnipeBeforeDBScript", $g_iTHSnipeBeforeScript[$DB]) @@ -913,6 +917,7 @@ Func SaveConfig_600_29_LB() _Ini_Add("attack", "ABEarthquakeSpell", $g_abAttackUseEarthquakeSpell[$LB] ? 1 : 0) _Ini_Add("attack", "ABHasteSpell", $g_abAttackUseHasteSpell[$LB] ? 1 : 0) _Ini_Add("attack", "ABSkeletonSpell", $g_abAttackUseSkeletonSpell[$LB] ? 1 : 0) + _Ini_Add("attack", "ABBatSpell", $g_abAttackUseBatSpell[$LB] ? 1 : 0) _Ini_Add("attack", "THSnipeBeforeLBEnable", $g_bTHSnipeBeforeEnable[$LB] ? 1 : 0) _Ini_Add("attack", "THSnipeBeforeLBTiles", $g_iTHSnipeBeforeTiles[$LB]) _Ini_Add("attack", "THSnipeBeforeLBScript", $g_iTHSnipeBeforeScript[$LB]) @@ -1033,7 +1038,7 @@ EndFunc ;==>SaveConfig_600_30_TS Func SaveConfig_600_31() ; <><><><> Attack Plan / Search & Attack / Deadbase / Collectors <><><><> ApplyConfig_600_31(GetApplyConfigSaveAction()) - For $i = 6 To 12 + For $i = 6 To 13 _Ini_Add("collectors", "lvl" & $i & "Enabled", $g_abCollectorLevelEnabled[$i] ? 1 : 0) _Ini_Add("collectors", "lvl" & $i & "fill", $g_aiCollectorLevelFill[$i]) Next diff --git a/COCBot/functions/CreateArmy/DoubleTrain.au3 b/COCBot/functions/CreateArmy/DoubleTrain.au3 index 6ef3da318..c2bd6e70a 100644 --- a/COCBot/functions/CreateArmy/DoubleTrain.au3 +++ b/COCBot/functions/CreateArmy/DoubleTrain.au3 @@ -359,7 +359,7 @@ Func CheckQueueSpellAndTrainRemain($ArmyCamp, $bDebug) Local $iTotalQueue = 0 If $bDebug Then SetLog("Checking spell queue: " & $ArmyCamp[0] & "/" & $ArmyCamp[1] * 2, $COLOR_DEBUG) - Local $XQueueStart = 835 + Local $XQueueStart = 839 For $i = 0 To 10 If _ColorCheck(_GetPixelColor(825 - $i * 70, 186, True), Hex(0xD7AFA9, 6), 20) Then ; Pink background found $XQueueStart -= 70.5 * $i @@ -417,10 +417,10 @@ Func DoubleTrainSiege($bDebug) If Not OpenSiegeMachinesTab(True, "DoubleTrainSiege()") Then Return If _Sleep(500) Then Return - Local $checkPixel[4] = [58, 556, 0x47717E, 10] ; WallW = 58 (BlimpB = 229) + Local $checkPixel[4] = [58, 556, 0x47717E, 10] ; WallW = 58, BlimpB = 229, Slammer = 400 ; build 1st Army For $i = $eSiegeWallWrecker To $eSiegeMachineCount - 1 - If $i = $eSiegeBattleBlimp Then $checkPixel[0] = 229 + $checkPixel[0] = 58 + $i * 171 ; 58 + 1 * 171 = 229, 58 + 2 * 171 = 400 If _CheckPixel($checkPixel, True, Default, $g_asSiegeMachineNames[$i]) Then If $g_aiCurrentSiegeMachines[$i] < $g_aiArmyCompSiegeMachine[$i] Then Local $HowMany = $g_aiArmyCompSiegeMachine[$i] - $g_aiCurrentSiegeMachines[$i] @@ -431,20 +431,28 @@ Func DoubleTrainSiege($bDebug) EndIf Next ; build 2nd Army - If $g_aiArmyCompSiegeMachine[$eSiegeWallWrecker] > 0 And $g_aiArmyCompSiegeMachine[$eSiegeBattleBlimp] > 0 Then ; train both types of siege - If $bDebug Then SetLog("Army has both types of siege. Double train siege might cause unbalance.", $COLOR_DEBUG) - Else - Local $iSiege = $g_aiArmyCompSiegeMachine[$eSiegeWallWrecker] > 0 ? $eSiegeWallWrecker : $eSiegeBattleBlimp ; 0 or 1 - $checkPixel[0] = 58 + $iSiege * 171 ; 58 + 1 * 171 = 229 + Local $iTotalSiegeTypeToBuild = 0, $iSiegeType = -1 + For $i = $eSiegeWallWrecker To $eSiegeMachineCount - 1 + If $g_aiArmyCompSiegeMachine[$i] > 0 Then + $iTotalSiegeTypeToBuild += 1 + $iSiegeType = $i + EndIf + If $iTotalSiegeTypeToBuild >= 2 Then ExitLoop + Next + + If $iTotalSiegeTypeToBuild >= 2 Then ; train more than 1 type of siege $eSiegeStoneSlammer + If $bDebug Then SetLog("Army has more than 1 type of siege. Double train siege might cause unbalance.", $COLOR_DEBUG) + ElseIf $iSiegeType >= $eSiegeWallWrecker And $iSiegeType <= $eSiegeMachineCount - 1 Then + $checkPixel[0] = 58 + $iSiegeType * 171 ; 58 + 1 * 171 = 229, 58 + 2 * 171 = 400 Local $iTotalMachineBuilt = 0 - For $i = 1 To _Min(Number($g_aiArmyCompSiegeMachine[$iSiege]), 2) ; Maximum workshop space is 2 - If _CheckPixel($checkPixel, True, Default, $g_asSiegeMachineNames[$iSiege]) Then + For $i = 1 To _Min(Number($g_aiArmyCompSiegeMachine[$iSiegeType]), 3) ; Maximum workshop space is 3 + If _CheckPixel($checkPixel, True, Default, $g_asSiegeMachineNames[$iSiegeType]) Then PureClick($checkPixel[0], $checkPixel[1], 1, $g_iTrainClickDelay) $iTotalMachineBuilt += 1 If _Sleep(250) Then Return EndIf Next - If $iTotalMachineBuilt > 0 Then Setlog("Build " & $iTotalMachineBuilt & " " & $g_asSiegeMachineNames[$iSiege] & ($iTotalMachineBuilt >= 2 ? "s" : ""), $COLOR_SUCCESS) + If $iTotalMachineBuilt > 0 Then Setlog("Build " & $iTotalMachineBuilt & " " & $g_asSiegeMachineNames[$iSiegeType] & ($iTotalMachineBuilt >= 2 ? "s" : ""), $COLOR_SUCCESS) EndIf If _Sleep(250) Then Return EndFunc ;==>DoubleTrainSiege diff --git a/COCBot/functions/CreateArmy/SmartWait4Train.au3 b/COCBot/functions/CreateArmy/SmartWait4Train.au3 index 7e98f7b3a..0f1bc5404 100644 --- a/COCBot/functions/CreateArmy/SmartWait4Train.au3 +++ b/COCBot/functions/CreateArmy/SmartWait4Train.au3 @@ -25,7 +25,7 @@ Func SmartWait4Train($iTestSeconds = Default) Local $iExitCount = 0 If _Sleep($DELAYSMARTWAIT) Then Return ; first start 500ms so no false "**Main Window FAIL**" pops up - While IsMainPage(1) = False ; check & wait for main page to ensure can read shield information properly + While IsMainPage(2) = False ; check & wait for main page to ensure can read shield information properly If _Sleep($DELAYIDLE1) Then Return $iExitCount += 1 If $iExitCount > 25 Then ; 5 seconds before have error? diff --git a/COCBot/functions/CreateArmy/TrainIt.au3 b/COCBot/functions/CreateArmy/TrainIt.au3 index 94c3b492f..f9fde7492 100644 --- a/COCBot/functions/CreateArmy/TrainIt.au3 +++ b/COCBot/functions/CreateArmy/TrainIt.au3 @@ -18,7 +18,7 @@ Func TrainIt($iIndex, $iQuantity = 1, $iSleep = 400) If $g_bDebugSetlogTrain Then SetLog("Func TrainIt $iIndex=" & $iIndex & " $howMuch=" & $iQuantity & " $iSleep=" & $iSleep, $COLOR_DEBUG) - Local $bDark = ($iIndex >= $eMini And $iIndex <= $eBowl) + Local $bDark = ($iIndex >= $eMini And $iIndex <= $eIceG) Local $iErrors = 0 For $i = 1 To 5 ; Do @@ -91,7 +91,7 @@ Func GetTrainPos(Const $iIndex) Return $aTrainPos Else ; Get the Image path to search - If $iIndex >= $eBarb And $iIndex <= $eBowl Then + If $iIndex >= $eBarb And $iIndex <= $eIceG Then Local $sFilter = String($g_asTroopShortNames[$iIndex]) & "*" Local $asImageToUse = _FileListToArray($g_sImgTrainTroops, $sFilter, $FLTA_FILES, True) If $g_bDebugSetlogTrain Then SetLog("$asImageToUse Troops: " & $asImageToUse[1]) @@ -100,7 +100,7 @@ Func GetTrainPos(Const $iIndex) Return $aTrainPos EndIf - If $iIndex >= $eLSpell And $iIndex <= $eSkSpell Then + If $iIndex >= $eLSpell And $iIndex <= $eBtSpell Then Local $sFilter = String($g_asSpellShortNames[$iIndex - $eLSpell]) & "*" Local $asImageToUse = _FileListToArray($g_sImgTrainSpells, $sFilter, $FLTA_FILES, True) If $g_bDebugSetlogTrain Then SetLog("$asImageToUse Spell: " & $asImageToUse[1]) @@ -117,12 +117,12 @@ EndFunc ;==>GetTrainPos Func GetFullName(Const $iIndex, Const $aTrainPos) If $g_bDebugSetlogTrain Then SetLog("GetFullName($iIndex=" & $iIndex & ")", $COLOR_DEBUG) - If $iIndex >= $eBarb And $iIndex <= $eBowl Then + If $iIndex >= $eBarb And $iIndex <= $eIceG Then Local $sTroopType = ($iIndex >= $eMini ? "Dark" : "Normal") Return GetFullNameSlot($aTrainPos, $sTroopType) EndIf - If $iIndex >= $eLSpell And $iIndex <= $eSkSpell Then + If $iIndex >= $eLSpell And $iIndex <= $eBtSpell Then Return GetFullNameSlot($aTrainPos, "Spell") EndIf diff --git a/COCBot/functions/CreateArmy/TrainSiege.au3 b/COCBot/functions/CreateArmy/TrainSiege.au3 index b2929dccd..ec74f0f0e 100644 --- a/COCBot/functions/CreateArmy/TrainSiege.au3 +++ b/COCBot/functions/CreateArmy/TrainSiege.au3 @@ -29,15 +29,16 @@ Func TrainSiege() Local $aCheckIsFilled[4] = [802, 186, 0xD7AFA9, 10] Local $aCheckIsAvailableSiege[4] = [58, 556, 0x47717E, 10] Local $aCheckIsAvailableSiege1[4] = [229, 556, 0x47717E, 10] + Local $aCheckIsAvailableSiege2[4] = [400, 556, 0x47717E, 10] - Local $ToMake[2], $g_aiQueuedSiege[2] + Local $ToMake[3], $g_aiQueuedSiege[3] ; $ToMake[$eSiegeWallWrecker] = $g_aiArmyCompSiegeMachine[$eSiegeWallWrecker] - ($g_aiCurrentSiegeMachines[$eSiegeWallWrecker] + $g_aiCurrentCCSiegeMachines[$eSiegeWallWrecker] + $g_aiQueuedSiege[$eSiegeWallWrecker]) ; $ToMake[$eSiegeBattleBlimp] = $g_aiArmyCompSiegeMachine[$eSiegeBattleBlimp] - ($g_aiCurrentSiegeMachines[$eSiegeBattleBlimp] + $g_aiCurrentCCSiegeMachines[$eSiegeBattleBlimp]+ $g_aiQueuedSiege[$eSiegeBattleBlimp]) ; If $g_abChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeWallWrecker] ; Donate WallWrecker ; If $g_abChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeBattleBlimp] ; Donate BattleBlimp - Local $TextToUse = ["Clan Castle", $g_asSiegeMachineNames[0], $g_asSiegeMachineNames[1]] + Local $TextToUse = ["Clan Castle", $g_asSiegeMachineNames[0], $g_asSiegeMachineNames[1], $g_asSiegeMachineNames[2]] If $g_bDebugSetlogTrain Then For $iSiegeIndex = $eSiegeWallWrecker To $eSiegeMachineCount - 1 @@ -56,7 +57,10 @@ Func TrainSiege() For $iSiegeIndex = $eSiegeWallWrecker To $eSiegeMachineCount - 1 If $g_aiArmyCompSiegeMachine[$iSiegeIndex] = 0 Then ContinueLoop ; Check if is available to make - Local $checkPixel = $iSiegeIndex = $eSiegeWallWrecker ? $aCheckIsAvailableSiege : $aCheckIsAvailableSiege1 + Local $checkPixel + If $iSiegeIndex = $eSiegeWallWrecker Then $checkPixel = $aCheckIsAvailableSiege + If $iSiegeIndex = $eSiegeBattleBlimp Then $checkPixel = $aCheckIsAvailableSiege1 + If $iSiegeIndex = $eSiegeStoneSlammer Then $checkPixel = $aCheckIsAvailableSiege2 If _CheckPixel($checkPixel, True, Default, $g_asSiegeMachineNames[$iSiegeIndex]) Then ; ::: Just making the Siege to use ::: If ($g_aiAttackUseSiege[$DB] = $iSiegeIndex + 1 Or $g_aiAttackUseSiege[$LB] = $iSiegeIndex + 1) And $g_aiCurrentCCSiegeMachines[$iSiegeIndex] = 0 Then @@ -96,7 +100,10 @@ Func TrainSiege() If $g_aiArmyCompSiegeMachine[$iSiegeIndex] = 0 Then ContinueLoop If $g_aiCurrentSiegeMachines[$iSiegeIndex] < $g_aiArmyCompSiegeMachine[$iSiegeIndex] Then Local $HowMany = $g_aiArmyCompSiegeMachine[$iSiegeIndex] - $g_aiCurrentSiegeMachines[$iSiegeIndex] - Local $checkPixel = $iSiegeIndex = $eSiegeWallWrecker ? $aCheckIsAvailableSiege : $aCheckIsAvailableSiege1 + Local $checkPixel + If $iSiegeIndex = $eSiegeWallWrecker Then $checkPixel = $aCheckIsAvailableSiege + If $iSiegeIndex = $eSiegeBattleBlimp Then $checkPixel = $aCheckIsAvailableSiege1 + If $iSiegeIndex = $eSiegeStoneSlammer Then $checkPixel = $aCheckIsAvailableSiege2 If _CheckPixel($checkPixel, True, Default, $g_asSiegeMachineNames[$iSiegeIndex]) Then PureClick($checkPixel[0], $checkPixel[1], $HowMany, $g_iTrainClickDelay) Local $sSiegeName = $HowMany >= 2 ? $g_asSiegeMachineNames[$iSiegeIndex] & "s" : $g_asSiegeMachineNames[$iSiegeIndex] & "" diff --git a/COCBot/functions/CreateArmy/TrainSystem.au3 b/COCBot/functions/CreateArmy/TrainSystem.au3 index 964bf23f9..39bae099a 100644 --- a/COCBot/functions/CreateArmy/TrainSystem.au3 +++ b/COCBot/functions/CreateArmy/TrainSystem.au3 @@ -674,6 +674,9 @@ Func IsGUICheckedForSpell($Spell, $Mode) Case $eSkSpell $sSpell = "Skeleton" $aVal = $g_abAttackUseSkeletonSpell + Case $eBtSpell + $sSpell = "Bat" + $aVal = $g_abAttackUseBatSpell EndSwitch If IsArray($aVal) Then Return $aVal[$Mode] @@ -732,7 +735,7 @@ EndFunc ;==>IsElixirTroop Func IsDarkTroop($Troop) Local $iIndex = TroopIndexLookup($Troop, "IsDarkTroop") - If $iIndex >= $eMini And $iIndex <= $eBowl Then Return True + If $iIndex >= $eMini And $iIndex <= $eIceG Then Return True Return False EndFunc ;==>IsDarkTroop @@ -744,13 +747,13 @@ EndFunc ;==>IsElixirSpell Func IsDarkSpell($Spell) Local $iIndex = TroopIndexLookup($Spell, "IsDarkSpell") - If $iIndex >= $ePSpell And $iIndex <= $eSkSpell Then Return True + If $iIndex >= $ePSpell And $iIndex <= $eBtSpell Then Return True Return False EndFunc ;==>IsDarkSpell Func IsSpellToBrew($sName) Local $iIndex = TroopIndexLookup($sName, "IsSpellToBrew") - If $iIndex >= $eLSpell And $iIndex <= $eSkSpell Then Return True + If $iIndex >= $eLSpell And $iIndex <= $eBtSpell Then Return True Return False EndFunc ;==>IsSpellToBrew @@ -760,11 +763,11 @@ Func CalcNeededSpace($Troop, $Quantity) Local $iIndex = TroopIndexLookup($Troop, "CalcNeededSpace") If $iIndex = -1 Then Return -1 - If $iIndex >= $eBarb And $iIndex <= $eBowl Then + If $iIndex >= $eBarb And $iIndex <= $eIceG Then Return Number($g_aiTroopSpace[$iIndex] * $Quantity) EndIf - If $iIndex >= $eLSpell And $iIndex <= $eSkSpell Then + If $iIndex >= $eLSpell And $iIndex <= $eBtSpell Then Return Number($g_aiSpellSpace[$iIndex - $eLSpell] * $Quantity) EndIf @@ -841,12 +844,13 @@ Func RemoveExtraTroops($toRemove) EndIf EndIf - If Not _ColorCheck(_GetPixelColor(806, 516, True), Hex(0xCEEF76, 6), 25) Then ; If no 'Edit Army' Button found in army tab to edit troops + If Not _CheckPixel($aButtonEditArmy, True) Then ; If no 'Edit Army' Button found in army tab to edit troops SetLog("Cannot find/verify 'Edit Army' Button in Army tab", $COLOR_WARNING) Return False ; Exit function EndIf - Click(Random(725, 825, 1), Random(507, 545, 1)) ; Click on Edit Army Button + ClickP($aButtonEditArmy, 1) ; Click Edit Army Button + If _Sleep(500) Then Return ; Loop through troops needed to get removed $CounterToRemove = 0 @@ -874,34 +878,31 @@ Func RemoveExtraTroops($toRemove) Next EndIf - If _Sleep(150) Then Return - - If Not _ColorCheck(_GetPixelColor(806, 567, True), Hex(0xCEEF76, 6), 25) Then ; If no 'Okay' button found in army tab to save changes + If _Sleep(500) Then Return + If Not _CheckPixel($aButtonRemoveTroopsOK1, True) Then; If no 'Okay' button found in army tab to save changes SetLog("Cannot find/verify 'Okay' Button in Army tab", $COLOR_WARNING) ClickP($aAway, 2, 0, "#0346") ; Click Away, Necessary! due to possible errors/changes If _Sleep(400) Then OpenArmyOverview(True, "RemoveExtraTroops()") ; Open Army Window AGAIN Return False ; Exit Function EndIf - If _Sleep(700) Then Return If Not $g_bRunState Then Return - Click(Random(730, 815, 1), Random(558, 589, 1)) ; Click on 'Okay' button to save changes + ClickP($aButtonRemoveTroopsOK1, 1) ; Click on 'Okay' button to save changes If _Sleep(1200) Then Return - - If Not _ColorCheck(_GetPixelColor(508, 428, True), Hex(0xFFFFFF, 6), 30) Then ; If no 'Okay' button found to verify that we accept the changes + If Not _CheckPixel($aButtonRemoveTroopsOK2, True) Then; If no 'Okay' button found to verify that we accept the changes SetLog("Cannot find/verify 'Okay #2' Button in Army tab", $COLOR_WARNING) ClickP($aAway, 2, 0, "#0346") ;Click Away Return False ; Exit function EndIf - Click(Random(445, 580, 1), Random(402, 455, 1)) ; Click on 'Okay' button to Save changes... Last button + ClickP($aButtonRemoveTroopsOK2, 1) ; Click on 'Okay' button to Save changes... Last button SetLog("All Extra troops removed", $COLOR_SUCCESS) If _Sleep(200) Then Return If $iResult = 0 Then $iResult = 1 Else ; If No extra troop found - SetLog("No extra troop to remove, Great", $COLOR_SUCCESS) + SetLog("No extra troop to remove, great", $COLOR_SUCCESS) $iResult = 3 EndIf @@ -1061,8 +1062,8 @@ EndFunc ;==>GetSlotRemoveBtnPosition Func GetSlotNumber($bSpells = False) Select Case $bSpells = False - Local Const $Orders[20] = [$eBarb, $eArch, $eGiant, $eGobl, $eWall, $eBall, $eWiza, $eHeal, $eDrag, $ePekk, $eBabyD, $eMine, $eEDrag, _ - $eMini, $eHogs, $eValk, $eGole, $eWitc, $eLava, $eBowl] ; Set Order of troop display in Army Tab + Local Const $Orders = [$eBarb, $eArch, $eGiant, $eGobl, $eWall, $eBall, $eWiza, $eHeal, $eDrag, $ePekk, $eBabyD, $eMine, $eEDrag, _ + $eMini, $eHogs, $eValk, $eGole, $eWitc, $eLava, $eBowl, $eIceG] ; Set Order of troop display in Army Tab Local $allCurTroops[UBound($Orders)] @@ -1084,7 +1085,7 @@ Func GetSlotNumber($bSpells = False) Case $bSpells = True ; Set Order of Spells display in Army Tab - Local Const $SpellsOrders[10] = [$eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell] + Local Const $SpellsOrders = [$eLSpell, $eHSpell, $eRSpell, $eJSpell, $eFSpell, $eCSpell, $ePSpell, $eESpell, $eHaSpell, $eSkSpell, $eBtSpell] Local $allCurSpells[UBound($SpellsOrders)] @@ -1311,8 +1312,14 @@ Func CheckQueueTroops($bGetQuantity = True, $bSetLog = True, $x = 839, $bQtyWSlo For $i = 0 To (UBound($aQuantities) - 1) $aQuantities[$i][0] = $aSearchResult[$i][0] $aQuantities[$i][1] = $aSearchResult[$i][3] - If $bSetLog Then SetLog(" - " & $g_asTroopNames[TroopIndexLookup($aQuantities[$i][0], "CheckQueueTroops")] & ": " & $aQuantities[$i][1] & "x", $COLOR_SUCCESS) - $aQueueTroop[TroopIndexLookup($aQuantities[$i][0])] += $aQuantities[$i][1] + Local $iTroopIndex = TroopIndexLookup($aQuantities[$i][0]) + If $iTroopIndex >= 0 And $iTroopIndex < $eTroopCount Then + If $bSetLog Then SetLog(" - " & $g_asTroopNames[TroopIndexLookup($aQuantities[$i][0], "CheckQueueTroops")] & ": " & $aQuantities[$i][1] & "x", $COLOR_SUCCESS) + $aQueueTroop[$iTroopIndex] += $aQuantities[$i][1] + Else + ; TODO check what to do with others + SetDebugLog("Unsupport troop index: " & $iTroopIndex) + EndIf Next If $bQtyWSlot Then Return $aQuantities Return $aQueueTroop @@ -1322,7 +1329,7 @@ Func CheckQueueTroops($bGetQuantity = True, $bSetLog = True, $x = 839, $bQtyWSlo Return $aResult EndFunc ;==>CheckQueueTroops -Func CheckQueueSpells($bGetQuantity = True, $bSetLog = True, $x = 835, $bQtyWSlot = False) +Func CheckQueueSpells($bGetQuantity = True, $bSetLog = True, $x = 839, $bQtyWSlot = False) Local $aResult[1] = [""], $sImageDir = "trainwindow-SpellsInQueue-bundle" ;$hTimer = TimerInit() If $bSetLog Then SetLog("Checking Spells Queue...", $COLOR_INFO) @@ -1729,7 +1736,11 @@ Func MakingDonatedTroops($sType = "All") If $g_aiDonateSiegeMachines[$iSiegeIndex] > 0 Then Local $aCheckIsAvailableSiege[4] = [58, 556, 0x47717E, 10] Local $aCheckIsAvailableSiege1[4] = [229, 556, 0x47717E, 10] - Local $checkPixel = $iSiegeIndex = $eSiegeWallWrecker ? $aCheckIsAvailableSiege : $aCheckIsAvailableSiege1 + Local $aCheckIsAvailableSiege2[4] = [400, 556, 0x47717E, 10] + Local $checkPixel + If $iSiegeIndex = $eSiegeWallWrecker Then $checkPixel = $aCheckIsAvailableSiege + If $iSiegeIndex = $eSiegeBattleBlimp Then $checkPixel = $aCheckIsAvailableSiege1 + If $iSiegeIndex = $eSiegeStoneSlammer Then $checkPixel = $aCheckIsAvailableSiege2 Local $HowMany = $g_aiDonateSiegeMachines[$iSiegeIndex] If _CheckPixel($checkPixel, True, Default, $g_asSiegeMachineNames[$iSiegeIndex]) Then ;PureClick($pos[0], $pos[1], $howMuch, 500) @@ -1937,9 +1948,9 @@ Func CheckValuesCost($Troop = "Arch", $troopQuantity = 1, $DebugLogs = 0) Local $iTroopIndex = TroopIndexLookup($Troop, "CheckValuesCost") ; Return the Cost of Troops or Spells - If $iTroopIndex >= $eBarb And $iTroopIndex <= $eBowl Then + If $iTroopIndex >= $eBarb And $iTroopIndex <= $eIceG Then $troopCost = $g_aiTroopCostPerLevel[$iTroopIndex][$g_aiTrainArmyTroopLevel[$iTroopIndex]] - ElseIf $iTroopIndex >= $eLSpell And $iTroopIndex <= $eSkSpell Then + ElseIf $iTroopIndex >= $eLSpell And $iTroopIndex <= $eBtSpell Then $troopCost = $g_aiSpellCostPerLevel[$iTroopIndex - $eLSpell][$g_aiTrainArmySpellLevel[$iTroopIndex - $eLSpell]] EndIf diff --git a/COCBot/functions/CreateArmy/getArmyCCSpells/getArmyCCSpell.au3 b/COCBot/functions/CreateArmy/getArmyCCSpells/getArmyCCSpell.au3 index 74001e13c..5dc322c58 100644 --- a/COCBot/functions/CreateArmy/getArmyCCSpells/getArmyCCSpell.au3 +++ b/COCBot/functions/CreateArmy/getArmyCCSpells/getArmyCCSpell.au3 @@ -38,7 +38,7 @@ Func getArmyCCSpells($bOpenArmyWindow = False, $bCloseArmyWindow = False, $bChec Local $aTempSpellArray, $aSpells, $aSpellCoords Local $sSpellName = "" Local $iSpellIndex = -1 - Local $aCurrentCCSpellsEmpty[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ; Local Copy to reset Spells Array + Local $aCurrentCCSpellsEmpty[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ; Local Copy to reset Spells Array $g_aiCurrentCCSpells = $aCurrentCCSpellsEmpty ; Reset Current Spells Array diff --git a/COCBot/functions/CreateArmy/getArmyCCTroops/getArmyCCTroops.au3 b/COCBot/functions/CreateArmy/getArmyCCTroops/getArmyCCTroops.au3 index a1ebabca6..fa055558c 100644 --- a/COCBot/functions/CreateArmy/getArmyCCTroops/getArmyCCTroops.au3 +++ b/COCBot/functions/CreateArmy/getArmyCCTroops/getArmyCCTroops.au3 @@ -38,7 +38,7 @@ Func getArmyCCTroops($bOpenArmyWindow = False, $bCloseArmyWindow = False, $bChec Local $aTempTroopArray,$aTroops ,$aTroopCoords Local $sTroopName = "" Local $iTroopIndex = -1 - Local $aCurrentCCTroopsEmpty[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ; Local Copy to reset Troops Array + Local $aCurrentCCTroopsEmpty[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ; Local Copy to reset Troops Array $g_aiCurrentCCTroops = $aCurrentCCTroopsEmpty ; Reset Current Troops Array If UBound($aCurrentCCTroops, 1) >= 1 Then diff --git a/COCBot/functions/CreateArmy/getArmySpells/getArmySpellCount.au3 b/COCBot/functions/CreateArmy/getArmySpells/getArmySpellCount.au3 index 1c41247e7..08fad8c60 100644 --- a/COCBot/functions/CreateArmy/getArmySpells/getArmySpellCount.au3 +++ b/COCBot/functions/CreateArmy/getArmySpells/getArmySpellCount.au3 @@ -34,7 +34,7 @@ EndFunc ;==>GetCurTotalSpell Func GetCurTotalDarkSpell() Local $iCount = 0 - For $i = $eSpellPoison To $eSpellSkeleton - 1 + For $i = $eSpellPoison To $eSpellBat - 1 $iCount += $g_aiCurrentSpells[$i] Next @@ -49,7 +49,7 @@ EndFunc ;==>GetCurTotalDarkSpell Func GetCurTotalSpells() Local $aCount[2] - For $i = $eSpellLightning To $eSpellSkeleton - 1 + For $i = $eSpellLightning To $eSpellBat - 1 $aCount[0] += $g_aiCurrentSpells[$i] If $g_aiCurrentSpells[$i] >= 1 Then $aCount[1] += 1 Next diff --git a/COCBot/functions/CreateArmy/getArmySpells/getArmySpells.au3 b/COCBot/functions/CreateArmy/getArmySpells/getArmySpells.au3 index 74cf57f82..e3c81fe54 100644 --- a/COCBot/functions/CreateArmy/getArmySpells/getArmySpells.au3 +++ b/COCBot/functions/CreateArmy/getArmySpells/getArmySpells.au3 @@ -36,7 +36,7 @@ Func getArmySpells($bOpenArmyWindow = False, $bCloseArmyWindow = False, $bCheckW Local $aTempSpellArray, $aSpellCoords Local $sSpellName = "" Local $iSpellIndex = -1 - Local $aCurrentSpellsEmpty[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ; Local Copy to reset Spells Array + Local $aCurrentSpellsEmpty[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ; Local Copy to reset Spells Array Local $aCurrentSpellsLog[$eSpellCount][3] ; [0] = Name [1] = Quantities [3] Xaxis $g_aiCurrentSpells = $aCurrentSpellsEmpty ; Reset Current Spells Array diff --git a/COCBot/functions/CreateArmy/getArmyTroops/getArmyTroops.au3 b/COCBot/functions/CreateArmy/getArmyTroops/getArmyTroops.au3 index c6937fc34..bca70c738 100644 --- a/COCBot/functions/CreateArmy/getArmyTroops/getArmyTroops.au3 +++ b/COCBot/functions/CreateArmy/getArmyTroops/getArmyTroops.au3 @@ -46,7 +46,7 @@ Func getArmyTroops($bOpenArmyWindow = False, $bCloseArmyWindow = False, $bCheckW Local $aTempTroopArray, $aTroopCoords Local $sTroopName = "" Local $iTroopIndex = -1, $iDropTrophyIndex = -1 - Local $aCurrentTroopsEmpty[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ; Local Copy to reset Troops Array + Local $aCurrentTroopsEmpty[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ; Local Copy to reset Troops Array Local $aTroopsForTropyDropEmpty[8][2] = [["Barb", 0], ["Arch", 0], ["Giant", 0], ["Wall", 0], ["Gobl", 0], ["Mini", 0], ["Ball", 0], ["Wiza", 0]] ; Local Copy to reset Troop Drop Trophy Array Local $aCurrentTroopsLog[$eTroopCount][3] ; [0] = Name [1] = Quantities [3] Xaxis diff --git a/COCBot/functions/Image Search/checkDeadBase.au3 b/COCBot/functions/Image Search/checkDeadBase.au3 index 281effda4..1d8da31dc 100644 --- a/COCBot/functions/Image Search/checkDeadBase.au3 +++ b/COCBot/functions/Image Search/checkDeadBase.au3 @@ -101,7 +101,7 @@ Func checkDeadBaseNew() Local $anyFillLevel[2] = [False, False] ; 50% and 100% If $g_bDebugSetlog Then SetDebugLog("Checking Deadbase With IMGLOC START", $COLOR_WARNING) - For $i = 6 To 12 + For $i = 6 To 13 If $g_abCollectorLevelEnabled[$i] Then If $minCollectorLevel = 0 Then $minCollectorLevel = $i If $i > $maxCollectorLevel Then $maxCollectorLevel = $i @@ -246,7 +246,7 @@ Func checkDeadBaseSuperNew($bForceCapture = True, $sFillDirectory = @ScriptDir & Local $anyFillLevel[2] = [False, False] ; 50% and 100% If $g_bDebugSetlog Then SetDebugLog("Checking Deadbase With IMGLOC START (super new)", $COLOR_WARNING) - For $i = 6 To 12 + For $i = 6 To 13 If $g_abCollectorLevelEnabled[$i] Then If $minCollectorLevel = 0 Then $minCollectorLevel = $i If $i > $maxCollectorLevel Then $maxCollectorLevel = $i diff --git a/COCBot/functions/Image Search/imglocAttackBar.au3 b/COCBot/functions/Image Search/imglocAttackBar.au3 index 5f80134a8..c49279d17 100644 --- a/COCBot/functions/Image Search/imglocAttackBar.au3 +++ b/COCBot/functions/Image Search/imglocAttackBar.au3 @@ -14,30 +14,26 @@ ; =============================================================================================================================== Func AttackBarCheck($bRemaining = False, $pMatchMode = $DB, $bDebug = False) - Local $iX1 = 0, $iY1 = 659, $iX2 = 835, $iY2 = 698 + Local $iX1 = 0, $iY1 = 635, $iX2 = 835, $iY2 = 698 Static Local $bCheckSlot12 = False - Static Local $bCheckSlotwHero = False - If Not $bRemaining Then - $bCheckSlot12 = False - $bCheckSlotwHero = False - EndIf + If Not $bRemaining Then $bCheckSlot12 = False - If $g_bDraggedAttackBar Then DragAttackBar($g_iTotalAttackSlot, True ) + If $g_bDraggedAttackBar Then DragAttackBar($g_iTotalAttackSlot, True) ; Reset to level one the Spells level $g_iLSpellLevel = 1 $g_iESpellLevel = 1 ; Setup arrays, including default return values for $return - Local $aResult[1][6], $aCoordArray[1][2], $aCoords, $aCoordsSplit, $aValue + Local $aResult[1][6], $aCoordArray[1][2], $aCoords, $aCoordsSplit, $aValue, $sName, $aSlotAmountX[0][2] If Not $g_bRunState Then Return ; Capture the screen for comparison _CaptureRegion2($iX1, $iY1, $iX2, $iY2) - Local $sFinalResult = "" , $iAttackbarStart = __TimerInit() + Local $sFinalResult = "", $iAttackbarStart = __TimerInit() ; Perform the search Local $sAttBarRes = DllCallMyBot("SearchMultipleTilesBetweenLevels", "handle", $g_hHBitmap2, "str", $g_sImgAttackBarDir, "str", "FV", "Int", 0, "str", "FV", "Int", 0, "Int", 1000) @@ -59,106 +55,97 @@ Func AttackBarCheck($bRemaining = False, $pMatchMode = $DB, $bDebug = False) For $i = 0 To UBound($aKeys) - 1 If Not $g_bRunState Then Return ; Get the property values - $aResult[$i + $iResultAddDup][0] = RetrieveImglocProperty($aKeys[$i], "objectname") + $sName = RetrieveImglocProperty($aKeys[$i], "objectname") ; Get the coords property $aValue = RetrieveImglocProperty($aKeys[$i], "objectpoints") $aCoords = decodeMultipleCoords($aValue, 50) ; dedup coords by x on 50 pixel - $aCoordsSplit = $aCoords[0] - If UBound($aCoordsSplit) = 2 Then - ; Store the coords into a two dimensional array - $aCoordArray[0][0] = $aCoordsSplit[0] ; X coord. - $aCoordArray[0][1] = $aCoordsSplit[1] ; Y coord. - Else - $aCoordArray[0][0] = -1 - $aCoordArray[0][1] = -1 - EndIf - If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " | $aCoordArray: " & $aCoordArray[0][0] & "-" & $aCoordArray[0][1]) - ; Store the coords array as a sub-array - $aResult[$i + $iResultAddDup][1] = Number($aCoordArray[0][0]) - $aResult[$i + $iResultAddDup][2] = Number($aCoordArray[0][1]) - ;If a Clan Castle Spell exists - Local $iMultipleCoords = UBound($aCoords) - ; Check if two Clan Castle Spells exist with different levels - If $iMultipleCoords > 1 And StringInStr($aResult[$i + $iResultAddDup][0], "Spell") <> 0 Then - If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " detected " & $iMultipleCoords & " times!") - For $j = 1 To $iMultipleCoords - 1 - Local $aCoordsSplit2 = $aCoords[$j] - If UBound($aCoordsSplit2) = 2 Then - ; add slot - $iResultAddDup += 1 - ReDim $aResult[UBound($aKeys) + $iResultAddDup][6] - $aResult[$i + $iResultAddDup][0] = $aResult[$i + $iResultAddDup - 1][0] ; same objectname - $aResult[$i + $iResultAddDup][1] = $aCoordsSplit2[0] - $aResult[$i + $iResultAddDup][2] = $aCoordsSplit2[1] - If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " | $aCoordArray: " & $aResult[$i + $iResultAddDup][1] & "-" & $aResult[$i + $iResultAddDup][2]) - Else - ; don't invalidate anything - ;$aCoordArray[0][0] = -1 - ;$aCoordArray[0][1] = -1 - EndIf + If StringRegExp($sName, "(AmountX)", 0) Then + For $j = 0 To UBound($aCoords) - 1 + $aCoordsSplit = $aCoords[$j] + _ArrayAdd($aSlotAmountX, $aCoordsSplit[0] & "|" & $aCoordsSplit[1], 0, "|", @CRLF, $ARRAYFILL_FORCE_NUMBER) Next + Else + + $aResult[$i + $iResultAddDup][0] = $sName + $aCoordsSplit = $aCoords[0] + If StringRegExp($sName, "(King)|(Warden)|(Queen)", 0) Then + _ArrayAdd($aSlotAmountX, $aCoordsSplit[0] & "|" & $aCoordsSplit[1], 0, "|", @CRLF, $ARRAYFILL_FORCE_NUMBER) + EndIf + If UBound($aCoordsSplit) = 2 Then + ; Store the coords into a two dimensional array + $aCoordArray[0][0] = $aCoordsSplit[0] ; X coord. + $aCoordArray[0][1] = $aCoordsSplit[1] ; Y coord. + Else + $aCoordArray[0][0] = -1 + $aCoordArray[0][1] = -1 + EndIf + If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " | $aCoordArray: " & $aCoordArray[0][0] & "-" & $aCoordArray[0][1]) + ; Store the coords array as a sub-array + $aResult[$i + $iResultAddDup][1] = Number($aCoordArray[0][0]) + $aResult[$i + $iResultAddDup][2] = Number($aCoordArray[0][1]) + ;If a Clan Castle Spell exists + Local $iMultipleCoords = UBound($aCoords) + ; Check if two Clan Castle Spells exist with different levels + If $iMultipleCoords > 1 And StringInStr($aResult[$i + $iResultAddDup][0], "Spell") <> 0 Then + If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " detected " & $iMultipleCoords & " times!") + For $j = 1 To $iMultipleCoords - 1 + Local $aCoordsSplit2 = $aCoords[$j] + If UBound($aCoordsSplit2) = 2 Then + ; add slot + $iResultAddDup += 1 + ReDim $aResult[UBound($aKeys) + $iResultAddDup][6] + $aResult[$i + $iResultAddDup][0] = $aResult[$i + $iResultAddDup - 1][0] ; same objectname + $aResult[$i + $iResultAddDup][1] = $aCoordsSplit2[0] + $aResult[$i + $iResultAddDup][2] = $aCoordsSplit2[1] + If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " | $aCoordArray: " & $aResult[$i + $iResultAddDup][1] & "-" & $aResult[$i + $iResultAddDup][2]) + Else + ; don't invalidate anything + ;$aCoordArray[0][0] = -1 + ;$aCoordArray[0][1] = -1 + EndIf + Next + EndIf EndIf Next _ArraySort($aResult, 0, 0, 0, 1) ; Sort By X position , will be the Slot 0 to $i + _ArraySort($aSlotAmountX) - If $g_bDebugSetlog Then SetDebugLog("Attackbar detection completed in " & StringFormat("%.2f", _Timer_Diff($iAttackbarStart))& " ms") - $iAttackbarStart = __TimerInit() + If $g_bDebugSetlog Then SetDebugLog("Attackbar detection completed in " & StringFormat("%.2f", _Timer_Diff($iAttackbarStart)) & " ms") + $iAttackbarStart = __TimerInit() - If Not $bRemaining Then - $bCheckSlot12 = _ColorCheck(_GetPixelColor(17, 643, True), Hex(0x478AC6, 6), 15) Or _ ; Slot Filled / Background Blue / More than 11 Slots - _ColorCheck(_GetPixelColor(17, 643, True), Hex(0x434343, 6), 10) ; Slot deployed / Gray / More than 11 Slots - - If $g_bDebugSetlog Then - SetDebugLog(" Slot > 12 _ColorCheck 0x478AC6 at (17," & 643 & "): " & $bCheckSlot12, $COLOR_DEBUG) ;Debug - Local $CheckSlot12Color = _GetPixelColor(17, 643, $g_bCapturePixel) - SetDebugLog(" Slot > 12 _GetPixelColor(17," & 643 & "): " & $CheckSlot12Color, $COLOR_DEBUG) ;Debug - EndIf - - For $i = 0 To UBound($aResult) - 1 - If $aResult[$i][0] = "King" Or $aResult[$i][0] = "Queen" Or $aResult[$i][0] = "Warden" Then - $bCheckSlotwHero = True - EndIf - Next - EndIf + If Not $bRemaining And _CheckPixel($a12OrMoreSlots, True) Then $bCheckSlot12 = True - Local $iSlotCompensation = -8 + Local $iSPellLevelOCR = -8 For $i = 0 To UBound($aResult) - 1 Local $aTempSlot If $aResult[$i][1] > 0 Then If $g_bDebugSetlog Then SetDebugLog("SLOT : " & $i, $COLOR_DEBUG) ;Debug If $g_bDebugSetlog Then SetDebugLog("Detection : " & $aResult[$i][0] & "|x" & $aResult[$i][1] & "|y" & $aResult[$i][2], $COLOR_DEBUG) ;Debug - $aTempSlot = SlotAttack(Number($aResult[$i][1]), $bCheckSlot12, $bCheckSlotwHero) + $aTempSlot = SlotAttack(Number($aResult[$i][1]), $aSlotAmountX) + ; If $g_bRunState = False Then Return ; Stop function If _Sleep(20) Then Return ; Pause function - If UBound($aTempSlot) = 2 Then - If $g_bDebugSetlog Then SetDebugLog("OCR : " & $aTempSlot[0] & "|SLOT: " & $aTempSlot[1], $COLOR_DEBUG) ;Debug - If $bCheckSlotwHero Then $iSlotCompensation = 10 - If $aResult[$i][0] = "Castle" Or $aResult[$i][0] = "King" Or $aResult[$i][0] = "Queen" Or $aResult[$i][0] = "Warden" Or $aResult[$i][0] = "WallW" Or $aResult[$i][0] = "BattleB" Then + If UBound($aTempSlot) = 3 Then + If $g_bDebugSetlog Then SetDebugLog("OCR : " & $aTempSlot[0] & "|SLOT: " & $aTempSlot[2], $COLOR_DEBUG) ;Debug + If $aResult[$i][0] = "Castle" Or $aResult[$i][0] = "King" Or $aResult[$i][0] = "Queen" Or $aResult[$i][0] = "Warden" Or $aResult[$i][0] = "WallW" Or $aResult[$i][0] = "BattleB" Or $aResult[$i][0] = "StoneS" Then $aResult[$i][3] = 1 - $aResult[$i][4] = $aTempSlot[1] + $aResult[$i][4] = $aTempSlot[2] Else - ; In case of Spells + Heroes - ; June 2018 Update - If StringInStr($aResult[$i][0], "Spell") <> 0 And $bCheckSlotwHero Then - $aTempSlot[0] = $aTempSlot[0] + 13 - $iSlotCompensation = -6 - EndIf - - $aResult[$i][3] = Number(getTroopCountBig(Number($aTempSlot[0]), 633)) ; For big numbers when the troop is selected - $aResult[$i][4] = $aTempSlot[1] + $aResult[$i][3] = Number(getTroopCountBig(Number($aTempSlot[0] + $iX1), Number($aTempSlot[1] + $iY1) - 2)) ; For big numbers when the troop is selected + $aResult[$i][4] = $aTempSlot[2] If $aResult[$i][3] = "" Or $aResult[$i][3] = 0 Then - $aResult[$i][3] = Number(getTroopCountSmall(Number($aTempSlot[0]), 640)) ; For small numbers when the troop isn't selected - $aResult[$i][4] = $aTempSlot[1] + $aResult[$i][3] = Number(getTroopCountSmall(Number($aTempSlot[0] + $iX1), Number($aTempSlot[1] + $iY1))) ; For small numbers when the troop isn't selected + $aResult[$i][4] = $aTempSlot[2] EndIf If StringInStr($aResult[$i][0], "ESpell") <> 0 And $g_bSmartZapEnable Then - $aResult[$i][5] = getTroopsSpellsLevel(Number($aTempSlot[0]) + $iSlotCompensation, 704) + $aResult[$i][5] = getTroopsSpellsLevel(Number($aTempSlot[0] + $iX1) + $iSPellLevelOCR, 704) If $aResult[$i][5] <> "" Then $g_iESpellLevel = $aResult[$i][5] ; If they aren't empty will store the correct level, or will be level 1 , just in case If $g_bDebugSmartZap Then SetLog("Earthquake Spell detected with level: " & $aResult[$i][5], $COLOR_DEBUG) EndIf If StringInStr($aResult[$i][0], "LSpell") <> 0 And $g_bSmartZapEnable Then - $aResult[$i][5] = getTroopsSpellsLevel(Number($aTempSlot[0]) + $iSlotCompensation, 704) + $aResult[$i][5] = getTroopsSpellsLevel(Number($aTempSlot[0] + $iX1) + $iSPellLevelOCR, 704) If $aResult[$i][5] <> "" Then $g_iLSpellLevel = $aResult[$i][5] ; If they aren't empty will store the correct level, or will be level 1 , just in case If $g_bDebugSmartZap Then SetLog("Lightning Spell detected with level: " & $aResult[$i][5], $COLOR_DEBUG) EndIf @@ -169,17 +156,17 @@ Func AttackBarCheck($bRemaining = False, $pMatchMode = $DB, $bDebug = False) $aResult[$i][3] = -1 $aResult[$i][4] = -1 EndIf - $sFinalResult &= "|" & TroopIndexLookup($aResult[$i][0]) & "#" & $aResult[$i][4] & "#" & $aResult[$i][3] + $sFinalResult &= "|" & TroopIndexLookup($aResult[$i][0]) & "#" & $aResult[$i][4] & "#" & $aResult[$i][3] & "#" & $aResult[$i][1] ; Name#Index#Amount#x-coord EndIf Next EndIf EndIf - If $g_bDebugSetlog Then SetDebugLog("Attackbar OCR completed in " & StringFormat("%.2f", __TimerDiff($iAttackbarStart))& " ms") + If $g_bDebugSetlog Then SetDebugLog("Attackbar OCR completed in " & StringFormat("%.2f", __TimerDiff($iAttackbarStart)) & " ms") If $bDebug Then - Local $iX1 = 0, $iY1 = 659, $iX2 = 853, $iY2 = 698 + Local $iX1 = 0, $iY1 = 635, $iX2 = 853, $iY2 = 698 _CaptureRegion2($iX1, $iY1, $iX2, $iY2) Local $sSubDir = $g_sProfileTempDebugPath & "AttackBarDetection" @@ -203,7 +190,7 @@ Func AttackBarCheck($bRemaining = False, $pMatchMode = $DB, $bDebug = False) EndIf ; Drag left & checking extended troops from Slot11+ ONLY if not a smart attack - If ($pMatchMode <= $LB And $bCheckSlot12 And UBound($aResult)> 1 And $g_aiAttackAlgorithm[$pMatchMode] <> 3) or $bDebug Then + If ($pMatchMode <= $LB And $bCheckSlot12 And UBound($aResult) > 1 And $g_aiAttackAlgorithm[$pMatchMode] <> 3) Or $bDebug Then SetDebuglog("$sFinalResult 1st page = " & $sFinalResult) Local $aLastTroop1stPage[2] $aLastTroop1stPage[0] = $aResult[UBound($aResult) - 1][0] ; Name of troop at last slot 1st page @@ -216,43 +203,44 @@ Func AttackBarCheck($bRemaining = False, $pMatchMode = $DB, $bDebug = False) $sFinalResult = StringTrimLeft($sFinalResult, 1) - ; Will return [0] = Name , [1] = X , [2] = Y , [3] = Quantities , [4] = Slot Number - ; Old style is: "|" & Troopa Number & "#" & Slot Number & "#" & Quantities Return $sFinalResult EndFunc ;==>AttackBarCheck -Func SlotAttack($PosX, $CheckSlot12, $CheckSlotwHero) +Func SlotAttack($iPosX, $aSlots) + Local $aTempSlot[3] = [0, 0, 0] + Local $iClosest = SearchNearest($aSlots, $iPosX) + Local $bLast = False + If $iClosest = _ArrayMaxIndex($aSlots, 0) And $aSlots[$iClosest][0] >= ($g_iGAME_WIDTH - 60) Then $bLast = True - Local $Slottemp[2] = [0, 0] + If $iClosest >= 0 And $iClosest < UBound($aSlots) Then + $aTempSlot[0] = $bLast ? $g_iGAME_WIDTH - 53 : $aSlots[$iClosest][0] - 15 ; X Coord | Last Item to get OCRd needs to be compensated because it could happen that the Capture Rectangle gets out of boundary and image gets not usable + $aTempSlot[1] = $aSlots[$iClosest][1] - 7 ; Y Coord + $aTempSlot[2] = $iClosest + EndIf - For $i = 0 To 12 - If $PosX >= 32 + ($i * 73) And $PosX < 105 + ($i * 73) Then - $Slottemp[0] = 37 + ($i * 73) - $Slottemp[1] = $i - If $CheckSlot12 = True Then - $Slottemp[0] -= 13 - ElseIf $CheckSlotwHero = False Then - $Slottemp[0] += 10 - EndIf - If $g_bDebugSetlog Then SetDebugLog("Slot: " & $i & " | $x > " & 25 + ($i * 73) & " and $x < " & 98 + ($i * 73)) - If $g_bDebugSetlog Then SetDebugLog("Slot: " & $i & " | $PosX: " & $PosX & " | OCR x position: " & $Slottemp[0] & " | OCR Slot: " & $Slottemp[1]) - Return $Slottemp + Return $aTempSlot +EndFunc ;==>SlotAttack + +Func SearchNearest($aArray, $iNumber) + Local $iVal, $iValOld = _ArrayMax($aArray), $iReturn + For $i = 0 To UBound($aArray) - 1 + $iVal = Abs($aArray[$i][0] - $iNumber) + If $iValOld >= $iVal Then + $iValOld = $iVal + $iReturn = $i EndIf - If $g_bRunState = False Then Return Next - - Return $Slottemp - -EndFunc ;==>SlotAttack + Return $iReturn +EndFunc ;==>SearchNearest Func ExtendedAttackBarCheck($aLastTroop1stPage, $bRemaining) - Local $iX1 = 0, $iY1 = 659, $iX2 = 853, $iY2 = 698 + Local $iX1 = 0, $iY1 = 635, $iX2 = 835, $iY2 = 698 Static $bCheckSlotwHero2 = False ; Setup arrays, including default return values for $return - Local $aResult[1][6], $aCoordArray[1][2], $aCoords, $aCoordsSplit, $aValue + Local $aResult[1][6], $aCoordArray[1][2], $aCoords, $aCoordsSplit, $aValue, $sName, $aSlotAmountX[0][2] If Not $g_bRunState Then Return ; Capture the screen for comparison @@ -261,10 +249,9 @@ Func ExtendedAttackBarCheck($aLastTroop1stPage, $bRemaining) Local $sFinalResult = "" ; Perform the search Local $sAttBarRes = DllCallMyBot("SearchMultipleTilesBetweenLevels", "handle", $g_hHBitmap2, "str", $g_sImgAttackBarDir, "str", "FV", "Int", 0, "str", "FV", "Int", 0, "Int", 1000) - If IsArray($sAttBarRes) Then If $sAttBarRes[0] = "0" Or $sAttBarRes[0] = "" Then - SetLog("Imgloc|AttackBarCheck not found!", $COLOR_RED) + SetLog("Imgloc|AttackBarCheck not found!", $COLOR_ERROR) ElseIf StringLeft($sAttBarRes[0], 2) = "-1" Then SetLog("DLL Error: " & $sAttBarRes[0] & ", AttackBarCheck", $COLOR_RED) Else @@ -279,58 +266,65 @@ Func ExtendedAttackBarCheck($aLastTroop1stPage, $bRemaining) For $i = 0 To UBound($aKeys) - 1 If Not $g_bRunState Then Return ; Get the property values - $aResult[$i + $iResultAddDup][0] = RetrieveImglocProperty($aKeys[$i], "objectname") + $sName = RetrieveImglocProperty($aKeys[$i], "objectname") ; Get the coords property $aValue = RetrieveImglocProperty($aKeys[$i], "objectpoints") $aCoords = decodeMultipleCoords($aValue, 50) ; dedup coords by x on 50 pixel - $aCoordsSplit = $aCoords[0] - If UBound($aCoordsSplit) = 2 Then - ; Store the coords into a two dimensional array - $aCoordArray[0][0] = $aCoordsSplit[0] ; X coord. - $aCoordArray[0][1] = $aCoordsSplit[1] ; Y coord. - Else - $aCoordArray[0][0] = -1 - $aCoordArray[0][1] = -1 - EndIf - If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " | $aCoordArray: " & $aCoordArray[0][0] & "-" & $aCoordArray[0][1]) - ; Store the coords array as a sub-array - $aResult[$i + $iResultAddDup][1] = Number($aCoordArray[0][0]) - $aResult[$i + $iResultAddDup][2] = Number($aCoordArray[0][1]) - ;If a Clan Castle Spell exists - Local $iMultipleCoords = UBound($aCoords) - If $iMultipleCoords > 1 And StringInStr($aResult[$i + $iResultAddDup][0], "Spell") <> 0 Then - If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " detected " & $iMultipleCoords & " times") - - For $j = 1 To $iMultipleCoords - 1 - Local $aCoordsSplit2 = $aCoords[$j] - If UBound($aCoordsSplit2) = 2 Then - ; add slot - $iResultAddDup += 1 - ReDim $aResult[UBound($aKeys) + $iResultAddDup][6] - $aResult[$i + $iResultAddDup][0] = $aResult[$i + $iResultAddDup - 1][0] ; same objectname - $aResult[$i + $iResultAddDup][1] = $aCoordsSplit2[0] - $aResult[$i + $iResultAddDup][2] = $aCoordsSplit2[1] - If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " | $aCoordArray: " & $aResult[$i + $iResultAddDup][1] & "-" & $aResult[$i + $iResultAddDup][2]) - Else - ; don't invalidate anything - ;$aCoordArray[0][0] = -1 - ;$aCoordArray[0][1] = -1 - EndIf + + If StringRegExp($sName, "(AmountX)", 0) Then + For $j = 0 To UBound($aCoords) - 1 + $aCoordsSplit = $aCoords[$j] + _ArrayAdd($aSlotAmountX, $aCoordsSplit[0] & "|" & $aCoordsSplit[1], 0, "|", @CRLF, $ARRAYFILL_FORCE_NUMBER) Next + Else + $aResult[$i + $iResultAddDup][0] = $sName + $aCoordsSplit = $aCoords[0] + If StringRegExp($sName, "(King)|(Warden)|(Queen)", 0) Then _ArrayAdd($aSlotAmountX, $aCoordsSplit[0] & "|" & $aCoordsSplit[1], 0, "|", @CRLF, $ARRAYFILL_FORCE_NUMBER) + If UBound($aCoordsSplit) = 2 Then + ; Store the coords into a two dimensional array + $aCoordArray[0][0] = $aCoordsSplit[0] ; X coord. + $aCoordArray[0][1] = $aCoordsSplit[1] ; Y coord. + Else + $aCoordArray[0][0] = -1 + $aCoordArray[0][1] = -1 + EndIf + If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " | $aCoordArray: " & $aCoordArray[0][0] & "-" & $aCoordArray[0][1]) + ; Store the coords array as a sub-array + $aResult[$i + $iResultAddDup][1] = Number($aCoordArray[0][0]) + $aResult[$i + $iResultAddDup][2] = Number($aCoordArray[0][1]) + ;If a Clan Castle Spell exists + Local $iMultipleCoords = UBound($aCoords) + ; Check if two Clan Castle Spells exist with different levels + If $iMultipleCoords > 1 And StringInStr($aResult[$i + $iResultAddDup][0], "Spell") <> 0 Then + If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " detected " & $iMultipleCoords & " times!") + For $j = 1 To $iMultipleCoords - 1 + Local $aCoordsSplit2 = $aCoords[$j] + If UBound($aCoordsSplit2) = 2 Then + ; add slot + $iResultAddDup += 1 + ReDim $aResult[UBound($aKeys) + $iResultAddDup][6] + $aResult[$i + $iResultAddDup][0] = $aResult[$i + $iResultAddDup - 1][0] ; same objectname + $aResult[$i + $iResultAddDup][1] = $aCoordsSplit2[0] + $aResult[$i + $iResultAddDup][2] = $aCoordsSplit2[1] + If $g_bDebugSetlog Then SetDebugLog($aResult[$i + $iResultAddDup][0] & " | $aCoordArray: " & $aResult[$i + $iResultAddDup][1] & "-" & $aResult[$i + $iResultAddDup][2]) + Else + ; don't invalidate anything + ;$aCoordArray[0][0] = -1 + ;$aCoordArray[0][1] = -1 + EndIf + Next + EndIf EndIf Next _ArraySort($aResult, 0, 0, 0, 1) ; Sort By X position , will be the Slot 0 to $i - - For $i = 0 To UBound($aResult) - 1 - If $aResult[$i][0] = "King" Or $aResult[$i][0] = "Queen" Or $aResult[$i][0] = "Warden" Then - $bCheckSlotwHero2 = True - EndIf - Next + _ArraySort($aSlotAmountX) Local $iSlotExtended = 0 Static $iFirstExtendedSlot = -1 ; Location of 1st extended troop after drag - If Not $bRemaining Then $iFirstExtendedSlot = -1 ; Reset value for 1st time detecting troop bar + If Not $bRemaining Then + $iFirstExtendedSlot = -1 ; Reset value for 1st time detecting troop bar + EndIf Local $iFoundLastTroop1stPage Local $bStart2ndPage = False @@ -349,32 +343,29 @@ Func ExtendedAttackBarCheck($aLastTroop1stPage, $bRemaining) EndIf If Not $bStart2ndPage Then ContinueLoop - $aTempSlot = SlotAttack(Number($aResult[$i][1]), False, False) - $aTempSlot[0] += 18 - If $iFirstExtendedSlot = -1 Then $iFirstExtendedSlot = $aTempSlot[1] ; flag only once - $iSlotExtended = $aTempSlot[1] - $iFirstExtendedSlot + 1 - - If $bCheckSlotwHero2 And StringInStr($aResult[$i][0], "Spell") = 0 Then $aTempSlot[0] -= 14 + $aTempSlot = SlotAttack(Number($aResult[$i][1]), $aSlotAmountX) + If $iFirstExtendedSlot = -1 Then $iFirstExtendedSlot = $aTempSlot[2] ; flag only once + $iSlotExtended = $aTempSlot[2] - $iFirstExtendedSlot + 1 If Not $g_bRunState Then Return ; Stop function If _Sleep(20) Then Return ; Pause function - If UBound($aTempSlot) = 2 Then - SetDebugLog("OCR : " & $aTempSlot[0] & "|SLOT: " & $aTempSlot[1], $COLOR_DEBUG) ;Debug - If $aResult[$i][0] = "Castle" Or $aResult[$i][0] = "King" Or $aResult[$i][0] = "Queen" Or $aResult[$i][0] = "Warden" Or $aResult[$i][0] = "WallW" Or $aResult[$i][0] = "BattleB" Then + If UBound($aTempSlot) = 3 Then + SetDebugLog("OCR : " & $aTempSlot[0] & "|SLOT: " & $aTempSlot[2], $COLOR_DEBUG) ;Debug + If $aResult[$i][0] = "Castle" Or $aResult[$i][0] = "King" Or $aResult[$i][0] = "Queen" Or $aResult[$i][0] = "Warden" Or $aResult[$i][0] = "WallW" Or $aResult[$i][0] = "BattleB" Or $aResult[$i][0] = "StoneS" Then $aResult[$i][3] = 1 Else - $aResult[$i][3] = Number(getTroopCountSmall(Number($aTempSlot[0]), 640)) ; For small Numbers + $aResult[$i][3] = Number(getTroopCountSmall(Number($aTempSlot[0] + $iX1), Number($aTempSlot[1] + $iY1))) ; For small Numbers If $aResult[$i][3] = "" Or $aResult[$i][3] = 0 Then - $aResult[$i][3] = Number(getTroopCountBig(Number($aTempSlot[0]), 633)) ; For Big Numbers , when the troops is selected + $aResult[$i][3] = Number(getTroopCountBig(Number($aTempSlot[0] + $iX1), Number($aTempSlot[1] + $iY1) - 4)) ; For Big Numbers , when the troops is selected EndIf EndIf - $aResult[$i][4] = ($aTempSlot[1] + 11) - $iFirstExtendedSlot + $aResult[$i][4] = ($aTempSlot[2] + 11) - $iFirstExtendedSlot Else Setlog("Problem with Attack bar detection!", $COLOR_ERROR) SetLog("Detection : " & $aResult[$i][0] & "|x" & $aResult[$i][1] & "|y" & $aResult[$i][2], $COLOR_DEBUG) $aResult[$i][3] = -1 $aResult[$i][4] = -1 EndIf - $sFinalResult &= "|" & TroopIndexLookup($aResult[$i][0]) & "#" & $aResult[$i][4] & "#" & $aResult[$i][3] + $sFinalResult &= "|" & TroopIndexLookup($aResult[$i][0]) & "#" & $aResult[$i][4] & "#" & $aResult[$i][3] & "#" & $aResult[$i][1] EndIf Next If Not $bRemaining Then diff --git a/COCBot/functions/Image Search/imglocAuxiliary.au3 b/COCBot/functions/Image Search/imglocAuxiliary.au3 index 5c3f67c94..fa8d8670b 100644 --- a/COCBot/functions/Image Search/imglocAuxiliary.au3 +++ b/COCBot/functions/Image Search/imglocAuxiliary.au3 @@ -706,6 +706,8 @@ Func decodeTroopEnum($tEnum) Return "ElectroDragon" Case $eBowl Return "Bowler" + Case $eIceG + Return "IceGolem" Case $eESpell Return "EarthquakeSpell" Case $eFSpell @@ -724,6 +726,8 @@ Func decodeTroopEnum($tEnum) Return "RageSpell" Case $eSkSpell Return "SkeletonSpell" + Case $eBtSpell + Return "BatSpell" Case $eCSpell Return "CloneSpell" Case $eCastle @@ -782,6 +786,8 @@ Func decodeTroopName($sName) Return $eEDrag Case "Bowler" Return $eBowl + Case "IceGolem" + Return $eIceG Case "EarthquakeSpell" Return $eESpell Case "FreezeSpell" @@ -800,6 +806,8 @@ Func decodeTroopName($sName) Return $eRSpell Case "SkeletonSpell" Return $eSkSpell + Case "BatSpell" + Return $eBtSpell Case "CloneSpell" Return $eCSpell Case "Castle" diff --git a/COCBot/functions/Other/Click.au3 b/COCBot/functions/Other/Click.au3 index 80814f9b7..356e837d6 100644 --- a/COCBot/functions/Other/Click.au3 +++ b/COCBot/functions/Other/Click.au3 @@ -327,6 +327,8 @@ Func _DecodeDebug($message) Return $separator & "Train - Train Baby Dragon" Case "#0343" Return $separator & "Train - Train Miner" + Case "#0344" + Return $separator & "Train - Train Ice Golem" ;DONATE Case "#0168" diff --git a/COCBot/functions/Read Text/getOcr.au3 b/COCBot/functions/Read Text/getOcr.au3 index 572629382..ecb595267 100644 --- a/COCBot/functions/Read Text/getOcr.au3 +++ b/COCBot/functions/Read Text/getOcr.au3 @@ -92,7 +92,7 @@ Func getBldgUpgradeTime($x_start, $y_start) ; -> Gets complete remain building u EndFunc ;==>getBldgUpgradeTime Func getLabUpgradeTime($x_start, $y_start) ; -> Gets complete remain lab upgrade time V2 for Dec2015 update - Return getOcrAndCapture("coc-uptime2", $x_start, $y_start, 42, 22) ; 40 is enougth xxx : 2 numbers and one letter at max + Return getOcrAndCapture("coc-uptime2", $x_start, $y_start, 68, 22) ; 40 is enougth xxx : 2 numbers and one letter at max EndFunc ;==>getLabUpgradeTime Func getHeroUpgradeTime($x_start, $y_start) ; -> Gets complete upgrade time for heroes 464, 527 + $g_iMidOffsetY diff --git a/COCBot/functions/Search/IsSearchModeActive.au3 b/COCBot/functions/Search/IsSearchModeActive.au3 index f332df8ce..ccd3bac87 100644 --- a/COCBot/functions/Search/IsSearchModeActive.au3 +++ b/COCBot/functions/Search/IsSearchModeActive.au3 @@ -62,6 +62,7 @@ Func IsSearchModeActive($g_iMatchMode, $nocheckHeroes = False, $bNoLog = False) If $g_abSearchSiegeWaitEnable[$g_iMatchMode] Then If (($g_aiAttackUseSiege[$g_iMatchMode] = 1 And ($g_aiCurrentSiegeMachines[$eSiegeWallWrecker] > 0 Or $g_aiCurrentCCSiegeMachines[$eSiegeWallWrecker] > 0)) Or _ ($g_aiAttackUseSiege[$g_iMatchMode] = 2 And ($g_aiCurrentSiegeMachines[$eSiegeBattleBlimp] > 0 Or $g_aiCurrentCCSiegeMachines[$eSiegeBattleBlimp] > 0)) Or _ + ($g_aiAttackUseSiege[$g_iMatchMode] = 3 And ($g_aiCurrentSiegeMachines[$eSiegeStoneSlammer] > 0 Or $g_aiCurrentCCSiegeMachines[$eSiegeStoneSlammer] > 0)) Or _ $g_aiAttackUseSiege[$g_iMatchMode] = 0) Then $bcheckSiege = True EndIf diff --git a/COCBot/functions/Village/BuilderBase/CleanBBYard.au3 b/COCBot/functions/Village/BuilderBase/CleanBBYard.au3 new file mode 100644 index 000000000..00e28be47 --- /dev/null +++ b/COCBot/functions/Village/BuilderBase/CleanBBYard.au3 @@ -0,0 +1,62 @@ +Func CleanBBYard() + ; Early exist if noting to do + If Not $g_bChkCleanBBYard And Not TestCapture() Then Return + + ; Timer + Local $hObstaclesTimer = __TimerInit() + + ; Get Builders available + If Not getBuilderCount(True, True) Then Return ; update builder data, return if problem + If _Sleep($DELAYRESPOND) Then Return + + ; Obstacles function to Parallel Search , will run all pictures inside the directory + + ; Setup arrays, including default return values for $return + Local $Filename = "" + Local $Locate = 0 + Local $CleanBBYardXY + Local $sCocDiamond = $CocDiamondECD + Local $redLines = $sCocDiamond + Local $bBuilderBase = True + Local $bNoBuilders = $g_iFreeBuilderCountBB < 1 + + If $g_iFreeBuilderCountBB > 0 And Number($g_aiCurrentLootBB[$eLootElixirBB]) > 50000 Then + Local $aResult = findMultiple($g_sImgCleanBBYard, $sCocDiamond, $redLines, 0, 1000, 10, "objectname,objectlevel,objectpoints", True) + If IsArray($aResult) Then + For $matchedValues In $aResult + Local $aPoints = decodeMultipleCoords($matchedValues[2]) + $Filename = $matchedValues[0] ; Filename + For $i = 0 To UBound($aPoints) - 1 + $CleanBBYardXY = $aPoints[$i] ; Coords + If UBound($CleanBBYardXY) > 1 And isInsideDiamondXY($CleanBBYardXY[0], $CleanBBYardXY[1]) Then ; secure x because of clan chat tab + If $g_bDebugSetlog Then SetDebugLog($Filename & " found (" & $CleanBBYardXY[0] & "," & $CleanBBYardXY[1] & ")", $COLOR_SUCCESS) + If IsMainPageBuilderBase() Then Click($CleanBBYardXY[0], $CleanBBYardXY[1], 1, 0, "#0430") + $Locate = 1 + If _Sleep($DELAYCOLLECT3) Then Return + If IsMainPageBuilderBase() Then GemClick($aCleanYard[0], $aCleanYard[1], 1, 0, "#0431") ; Click Obstacles button to clean + If _Sleep($DELAYCHECKTOMBS2) Then Return + ClickP($aAway, 2, 300, "#0329") ;Click Away + If _Sleep($DELAYCHECKTOMBS1) Then Return + If getBuilderCount(True, True) = False Then Return ; update builder data, return if problem + If _Sleep($DELAYRESPOND) Then Return + If $g_iFreeBuilderCountBB = 0 Then + SetLog("No More Builders available") + If _Sleep(2000) Then Return + ExitLoop (2) + EndIf + EndIf + Next + Next + EndIf + EndIf + + If $bNoBuilders Then + SetLog("No Builders available to remove Obstacles!") + Else + If $Locate = 0 And $g_bChkCleanBBYard And Number($g_aiCurrentLootBB[$eLootElixirBB]) > 50000 Then SetLog("No Obstacles found, Yard is clean!", $COLOR_SUCCESS) + If $g_bDebugSetlog Then SetDebugLog("Time: " & Round(__TimerDiff($hObstaclesTimer) / 1000, 2) & "'s", $COLOR_SUCCESS) + EndIf + UpdateStats() + ClickP($aAway, 1, 300, "#0329") ;Click Away + +EndFunc ;==>CleanBBYard \ No newline at end of file diff --git a/COCBot/functions/Village/CheckImageType.au3 b/COCBot/functions/Village/CheckImageType.au3 index 499373bf3..877aec841 100644 --- a/COCBot/functions/Village/CheckImageType.au3 +++ b/COCBot/functions/Village/CheckImageType.au3 @@ -19,10 +19,10 @@ Func CheckImageType() If _Sleep($DELAYCHECKIMAGETYPE1) Then Return If Not IsMainPage() Then ClickP($aAway, 2, 20, "#0467") ;Click Away Again - Local $x = 165 + Local $x = 150 Local $y = 150 - Local $x1 = $x + 60 - Local $y1 = $y + 80 + Local $x1 = $x + 50 + Local $y1 = $y + 50 Local $directory = @ScriptDir & "\imgxml\SnowTheme" Local $temp = SearchImgloc($directory, $x, $y, $x1, $y1) @@ -37,22 +37,7 @@ Func CheckImageType() EndIf Else $g_iDetectedImageType = 0 ; Normal Theme - SetLog("Normal Theme detected", $COLOR_RED) + SetLog("Normal Theme detected", $COLOR_ERROR) EndIf -;~ If _ColorCheck(_GetPixelColor($aImageTypeN1[0], $aImageTypeN1[1], True), Hex($aImageTypeN1[2], 6), $aImageTypeN1[3]) And _ -;~ _ColorCheck(_GetPixelColor($aImageTypeN2[0], $aImageTypeN2[1], True), Hex($aImageTypeN2[2], 6), $aImageTypeN2[3]) Then -;~ $g_iDetectedImageType = 0; Normal Theme -;~ SetLog("Normal Theme detected") -;~ ElseIf _ColorCheck(_GetPixelColor($aImageTypeS1[0], $aImageTypeS1[1], True), Hex($aImageTypeS1[2], 6), $aImageTypeS1[3]) And _ -;~ _ColorCheck(_GetPixelColor($aImageTypeS2[0], $aImageTypeS2[1], True), Hex($aImageTypeS2[2], 6), $aImageTypeS2[3]) Then -;~ $g_iDetectedImageType = 1;Snow Theme -;~ SetLog("Snow Theme detected") -;~ Else -;~ $g_iDetectedImageType = 0; Default to Normal Theme -;~ SetLog("Default Theme detected") -;~ EndIf - -;~ readCollectorConfig();initialize collector fullness variables before loading images - EndFunc ;==>CheckImageType diff --git a/COCBot/functions/Village/Clan Games/ClanGames.au3 b/COCBot/functions/Village/Clan Games/ClanGames.au3 index 8b6858418..ad357433b 100644 --- a/COCBot/functions/Village/Clan Games/ClanGames.au3 +++ b/COCBot/functions/Village/Clan Games/ClanGames.au3 @@ -180,6 +180,7 @@ Func _ClanGames($test = False) If UBound($aAllDetectionsOnScreen) > 0 Then For $i = 0 To UBound($aAllDetectionsOnScreen) - 1 + If IsBBChallenge($aAllDetectionsOnScreen[$i][2], $aAllDetectionsOnScreen[$i][3]) Then ContinueLoop Switch $aAllDetectionsOnScreen[$i][0] Case "L" If Not $g_bChkClanGamesLoot Then ContinueLoop @@ -247,6 +248,14 @@ Func _ClanGames($test = False) For $j = 0 To UBound($BattleChallenges) - 1 ; Match the names If $aAllDetectionsOnScreen[$i][1] = $BattleChallenges[$j][0] Then + ; Verify the TH level and a few Challenge to destroy TH specific level + If $BattleChallenges[$j][1] = "Scrappy 6s" And ($g_iTownHallLevel < 5 Or $g_iTownHallLevel > 7) Then ExitLoop ; TH level 5-6-7 + If $BattleChallenges[$j][1] = "Super 7s" And ($g_iTownHallLevel < 6 Or $g_iTownHallLevel > 8) Then ExitLoop ; TH level 6-7-8 + If $BattleChallenges[$j][1] = "Exciting 8s" And ($g_iTownHallLevel < 7 Or $g_iTownHallLevel > 9) Then ExitLoop ; TH level 7-8-9 + If $BattleChallenges[$j][1] = "Noble 9s" And ($g_iTownHallLevel < 8 Or $g_iTownHallLevel > 10) Then ExitLoop ; TH level 8-9-10 + If $BattleChallenges[$j][1] = "Terrific 10s" And ($g_iTownHallLevel < 9 Or $g_iTownHallLevel > 11) Then ExitLoop ; TH level 9-10-11 + If $BattleChallenges[$j][1] = "Exotic 11s" And $g_iTownHallLevel < 10 Then ExitLoop ; TH level 10-11-12 + If $BattleChallenges[$j][1] = "Triumphant 12s" And $g_iTownHallLevel < 11 Then ExitLoop ; TH level 11-12 ; Verify your TH level and Challenge If $g_iTownHallLevel < $BattleChallenges[$j][2] Then ExitLoop ; Disable this event from INI File @@ -256,7 +265,9 @@ Func _ClanGames($test = False) ; Check your Trophy Range If $BattleChallenges[$j][1] = "Slaying The Titans" And Int($g_aiCurrentLoot[$eLootTrophy]) < 4100 Then ExitLoop ; Check if exist a probability to use any Spell - If $BattleChallenges[$j][1] = "No-Magic Zone" And ($g_bSmartZapEnable = True Or ($g_iMatchMode = $DB And $g_aiAttackAlgorithm[$DB] = 1) Or ($g_iMatchMode = $LB And $g_aiAttackAlgorithm[$LB] = 1)) Then ExitLoop + ; If $BattleChallenges[$j][1] = "No-Magic Zone" And ($g_bSmartZapEnable = True Or ($g_iMatchMode = $DB And $g_aiAttackAlgorithm[$DB] = 1) Or ($g_iMatchMode = $LB And $g_aiAttackAlgorithm[$LB] = 1)) Then ExitLoop + ; same as above, but SmartZap as condition removed, cause SZ does not necessary triggers every attack + If $BattleChallenges[$j][1] = "No-Magic Zone" And (($g_iMatchMode = $DB And $g_aiAttackAlgorithm[$DB] = 1) Or ($g_iMatchMode = $LB And $g_aiAttackAlgorithm[$LB] = 1)) Then ExitLoop ; Check if you are using Heroes If $BattleChallenges[$j][1] = "No Heroics Allowed" And ((Int($g_aiAttackUseHeroes[$DB]) > $eHeroNone And $g_iMatchMode = $DB) Or (Int($g_aiAttackUseHeroes[$LB]) > $eHeroNone And $g_iMatchMode = $LB)) Then ExitLoop ; [0]Event Name Full Name , [1] Xaxis , [2] Yaxis , [3] difficulty @@ -296,8 +307,8 @@ Func _ClanGames($test = False) If $MiscChallenges[$j][3] = 0 Then ExitLoop ; Exceptions : - ; 1 - "Gardening Exercise" needs at least a Free Builder - If $MiscChallenges[$j][1] = "Gardening Exercise" And $g_iFreeBuilderCount < 1 Then ExitLoop + ; 1 - "Gardening Exercise" needs at least a Free Builder and "Remove Obstacles" enabled + If $MiscChallenges[$j][1] = "Gardening Exercise" And ($g_iFreeBuilderCount < 1 Or Not $g_bChkCleanYard) Then ExitLoop ; 2 - Verify your TH level and Challenge kind If $g_iTownHallLevel < $MiscChallenges[$j][2] Then ExitLoop @@ -713,7 +724,7 @@ Func ClanGamesChallenges($sReturnArray, $makeIni = False, $sINIPath = "", $debug ["Valk", "Valkyrie", 8, 8, 1], _ ; Earn 2-5 Stars from Multiplayer Battles using 8 Valkyries |3h-8h |40-100 ["Gole", "Golem", 8, 2, 1]] ; Earn 2-5 Stars from Multiplayer Battles using 2 Golems |3h-8h |40-100 - Local $BattleChallenges[9][5] = [ _ + Local $BattleChallenges[16][5] = [ _ ["Start", "Star Collector", 3, 1, 8], _ ; Collect a total of 6-18 stars from Multiplayer Battles |8h-2d |100-600 ["Destruction", "Lord of Destruction", 3, 1, 8], _ ; Gather a total of 100%-500% destruction from Multi Battles |8h-2d |100-600 ["PileOfVictores", "Pile Of Victories", 3, 1, 8], _ ; Win 2-8 Multiplayer Battles |8h-2d |100-600 @@ -722,9 +733,16 @@ Func ClanGamesChallenges($sReturnArray, $makeIni = False, $sINIPath = "", $debug ["SlayingTitans", "Slaying The Titans", 11, 2, 5], _ ; Win 5 Multiplayer Battles In Tital LEague |5h |300 ["NoHero", "No Heroics Allowed", 3, 5, 8], _ ; Win stars without using Heroes |8h |100 ["NoMagic", "No-Magic Zone", 3, 5, 8], _ ; Win stars without using Spells |8h |100 - ["AttackUp", "Attack Up", 3, 1, 8]] ; Gain 3 Stars Against Certain Town Hall |8h |200 - - Local $DestructionChallenges[28][5] = [ _ + ["Scrappy6s", "Scrappy 6s", 6, 1, 8], _ ; Gain 3 Stars Against Town Hall level 6 |8h |200 + ["Super7s", "Super 7s", 7, 1, 8], _ ; Gain 3 Stars Against Town Hall level 7 |8h |200 + ["Exciting8s", "Exciting 8s", 8, 1, 8], _ ; Gain 3 Stars Against Town Hall level 8 |8h |200 + ["Noble9s", "Noble 9s", 9, 1, 8], _ ; Gain 3 Stars Against Town Hall level 9 |8h |200 + ["Terrific10s", "Terrific 10s", 10, 1, 8], _ ; Gain 3 Stars Against Town Hall level 10 |8h |200 + ["Exotic11s", "Exotic 11s", 11, 1, 8], _ ; Gain 3 Stars Against Town Hall level 11 |8h |200 + ["Triumphant12s", "Triumphant 12s", 12, 1, 8], _ ; Gain 3 Stars Against Town Hall level 12 |8h |200 + ["AttackUp", "Attack Up", 3, 1, 8]] ; Gain 3 Stars Against Town Hall a level higher |8h |200 + + Local $DestructionChallenges[30][5] = [ _ ["Cannon", "Cannon Carnage", 3, 1, 1], _ ; Destroy 5-25 Cannons in Multiplayer Battles |1h-8h |75-350 ["ArcherT", "Archer Tower Assault", 3, 1, 1], _ ; Destroy 5-20 Archer Towers in Multiplayer Battles |1h-8h |75-350 ["Mortar", "Mortar Mauling", 3, 1, 1], _ ; Destroy 4-12 Mortars in Multiplayer Battles |1h-8h |40-350 @@ -746,6 +764,8 @@ Func ClanGamesChallenges($sReturnArray, $makeIni = False, $sINIPath = "", $debug ["Laboratory", "Laboratory Strike", 3, 1, 1], _ ; Destroy 2-6 Laboratories in Multiplayer Battles |1h-8h |40-200 ["SFacto", "Spell Factory Sabotage", 3, 1, 1], _ ; Destroy 2-6 Spell Factories in Multiplayer Battles |1h-8h |40-200 ["DESpell", "Dark Spell Factory Sabotage", 8, 1, 1], _ ; Destroy 2-6 Dark Spell Factories in Multiplayer Battles |1h-8h |40-200 + ["WallWhacker", "Wall Whacker", 3, 1, 1], _ ; Destroy 50-250 Walls in Multiplayer Battles | + ["BBreakdown", "Building Breakdown", 3, 1, 1], _ ; Destroy 50-250 Buildings in Multiplayer Battles | ["BKaltar", "Destroy Barbarian King Altars", 9, 4, 1], _ ; Destroy 2-5 Barbarian King Altars in Multiplayer Battles |1h-8h |50-150 ["AQaltar", "Destroy Archer Queen Altars", 10, 5, 1], _ ; Destroy 2-5 Archer Queen Altars in Multiplayer Battles |1h-8h |50-150 ["GWaltar", "Destroy Grand Warden Altars", 11, 5, 1], _ ; Destroy 2-5 Grand Warden Altars in Multiplayer Battles |1h-8h |50-150 @@ -836,4 +856,18 @@ Func GetEventInformation() Return GetEventTimeInMinutes($g_iQuickMISX + 220, $g_iQuickMISY + 150) EndIf Return 0 -EndFunc +EndFunc ;==>GetEventInformation + +Func IsBBChallenge($xDetected, $yDetected) + Local $sColorBB = Hex(0x0D6687, 6) + Local $sColorNonBB = Hex(0x7DA9DD, 6) + Local $xToCheck = 299 + 126 * Int(($xDetected - 299) / 126) + Local $yToCheck = 156 + 160 * Int(($yDetected - 156) / 160) + + If $g_bChkClanGamesDebug Then Setlog("IsBBChallenge() x = " & $xToCheck & ", y = " & $yToCheck & ", color = " & _GetPixelColor($xToCheck, $yToCheck, True) , $COLOR_INFO) + + If _ColorCheck(_GetPixelColor($xToCheck, $yToCheck, True), $sColorBB, 5) Then + Return True + EndIf + Return False +EndFunc ;==>IsBBChallenge diff --git a/COCBot/functions/Village/DonateCC.au3 b/COCBot/functions/Village/DonateCC.au3 index 46fb8771b..1aa28aac0 100644 --- a/COCBot/functions/Village/DonateCC.au3 +++ b/COCBot/functions/Village/DonateCC.au3 @@ -41,7 +41,7 @@ Func PrepareDonateCC() Next ; Siege For $i = $eSiegeWallWrecker To $eSiegeMachineCount - 1 - $g_aiPrepDon[4] = BitOR($g_aiPrepDon[4], ($g_abChkDonateTroop[$eTroopCount - 1 + $g_iCustomDonateConfigs + $i] ? 1 : 0)) + $g_aiPrepDon[4] = BitOR($g_aiPrepDon[4], ($g_abChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $i] ? 1 : 0)) Next $g_iActiveDonate = BitOR($g_aiPrepDon[0], $g_aiPrepDon[1], $g_aiPrepDon[2], $g_aiPrepDon[3], $g_aiPrepDon[4]) @@ -88,21 +88,30 @@ Func IsDonateQueueOnly(ByRef $abDonateQueueOnly) For $j = 0 To (UBound($aSearchResult) - 1) Local $TroopIndex = TroopIndexLookup($aSearchResult[$j][0], "IsDonateQueueOnly()") + If $TroopIndex < 0 Then ContinueLoop If _ColorCheck(_GetPixelColor($xQueue - $j * 70.5, 237, True), Hex(0xB9B747, 6), 20) Then ; the green check symbol [185, 183, 71] If $i = 0 Then - $g_aiAvailQueuedTroop[$TroopIndex] += $aSearchResult[$j][1] - SetLog(" - " & $g_asTroopNames[$TroopIndex] & " x" & $aSearchResult[$j][1]) + If _ArrayIndexValid($g_aiAvailQueuedTroop, $TroopIndex) Then + $g_aiAvailQueuedTroop[$TroopIndex] += $aSearchResult[$j][1] + SetLog(" - " & $g_asTroopNames[$TroopIndex] & " x" & $aSearchResult[$j][1]) + EndIf Else - $g_aiAvailQueuedSpell[$TroopIndex - $eLSpell] += $aSearchResult[$j][1] - SetLog(" - " & $g_asSpellNames[$TroopIndex - $eLSpell] & " x" & $aSearchResult[$j][1]) + If _ArrayIndexValid($g_aiAvailQueuedSpell, $TroopIndex - $eLSpell) Then + $g_aiAvailQueuedSpell[$TroopIndex - $eLSpell] += $aSearchResult[$j][1] + SetLog(" - " & $g_asSpellNames[$TroopIndex - $eLSpell] & " x" & $aSearchResult[$j][1]) + EndIf EndIf ElseIf $j = 0 Or ($j = 1 And $aSearchResult[1][0] = $aSearchResult[0][0]) Then If $i = 0 Then - $g_aiAvailQueuedTroop[$TroopIndex] += $aSearchResult[$j][1] - SetLog(" - " & $g_asTroopNames[$TroopIndex] & " x" & $aSearchResult[$j][1] & " (training)") + If _ArrayIndexValid($g_aiAvailQueuedTroop, $TroopIndex) Then + $g_aiAvailQueuedTroop[$TroopIndex] += $aSearchResult[$j][1] + SetLog(" - " & $g_asTroopNames[$TroopIndex] & " x" & $aSearchResult[$j][1] & " (training)") + EndIf Else - $g_aiAvailQueuedSpell[$TroopIndex - $eLSpell] += $aSearchResult[$j][1] - SetLog(" - " & $g_asSpellNames[$TroopIndex - $eLSpell] & " x" & $aSearchResult[$j][1] & " (training)") + If _ArrayIndexValid($g_aiAvailQueuedSpell, $TroopIndex - $eLSpell) Then + $g_aiAvailQueuedSpell[$TroopIndex - $eLSpell] += $aSearchResult[$j][1] + SetLog(" - " & $g_asSpellNames[$TroopIndex - $eLSpell] & " x" & $aSearchResult[$j][1] & " (training)") + EndIf EndIf ExitLoop ElseIf $j >= 2 Then @@ -113,6 +122,7 @@ Func IsDonateQueueOnly(ByRef $abDonateQueueOnly) EndIf Next ClickP($aAway, 1, 0, "#0818") ;Click Away + If _Sleep($DELAYDONATECC2) Then Return EndFunc ;==>IsDonateQueueOnly @@ -199,6 +209,14 @@ Func DonateCC($bCheckForNewMsg = False) If _Sleep($DELAYDONATECC1) Then Return ; delay Allow 15x WEnd + ; check for "I Understand" button + Local $aCoord = decodeSingleCoord(findImage("I Understand", $g_sImgChatIUnterstand, GetDiamondFromRect("50,400,280,550"))) + If UBound($aCoord) > 1 Then + SetLog("Clicking 'I Understand' button", $COLOR_ACTION) + ClickP($aCoord) + If _Sleep($DELAYDONATECC2) Then Return + EndIf + Local $Scroll ; add scroll here While 1 @@ -370,7 +388,7 @@ Func DonateCC($bCheckForNewMsg = False) If Not $bDonateSiege Then SetLog("Siege donation is not enabled, skip siege donation...", $COLOR_ACTION) $g_bSkipDonSiege = True - ElseIf $g_aiCurrentSiegeMachines[$eSiegeWallWrecker] = 0 And $g_aiCurrentSiegeMachines[$eSiegeBattleBlimp] = 0 Then + ElseIf $g_aiCurrentSiegeMachines[$eSiegeWallWrecker] = 0 And $g_aiCurrentSiegeMachines[$eSiegeBattleBlimp] = 0 And $g_aiCurrentSiegeMachines[$eSiegeStoneSlammer] = 0 Then SetLog("No siege machines available, skip siege donation...", $COLOR_ORANGE) $g_bSkipDonSiege = True ElseIf $g_iTotalDonateSiegeMachineCapacity = -1 Then @@ -430,7 +448,7 @@ Func DonateCC($bCheckForNewMsg = False) For $i = 0 To 2 If $CorrectDonateCustom[$i][0] < $eBarb Then $CorrectDonateCustom[$i][0] = $eArch ; Change strange small numbers to archer - ElseIf $CorrectDonateCustom[$i][0] > $eBowl Then + ElseIf $CorrectDonateCustom[$i][0] > $eIceG Then ContinueLoop ; If "Nothing" is selected then continue EndIf If $CorrectDonateCustom[$i][1] < 1 Then @@ -525,7 +543,7 @@ Func DonateCC($bCheckForNewMsg = False) For $i = 0 To 2 If $CorrectDonateCustom[$i][0] < $eBarb Then $CorrectDonateCustom[$i][0] = $eArch ; Change strange small numbers to archer - ElseIf $CorrectDonateCustom[$i][0] > $eBowl Then + ElseIf $CorrectDonateCustom[$i][0] > $eIceG Then DonateWindow($bClose) $bDonate = True $y = $g_aiDonatePixel[1] + 50 @@ -812,7 +830,7 @@ Func DonateTroopType(Const $iTroopIndex, $Quant = 0, Const $bDonateQueueOnly = F EndIf ; Adjust Values for donated troops to prevent a Double ghost donate to stats and train - If $iTroopIndex >= $eTroopBarbarian And $iTroopIndex <= $eTroopBowler Then + If $iTroopIndex >= $eTroopBarbarian And $iTroopIndex <= $eTroopIceGolem Then ;Reduce iTotalDonateCapacity by troops donated $g_iTotalDonateTroopCapacity -= ($Quant * $g_aiTroopSpace[$iTroopIndex]) ;If donated max allowed troop qty set $g_bSkipDonTroops = True @@ -1135,7 +1153,7 @@ Func RemainingCCcapacity() ; Skip reading unnecessary items Local $bDonateSpell = ($g_aiPrepDon[2] = 1 Or $g_aiPrepDon[3] = 1) And ($g_iCurrentSpells > 0 Or $g_iCurrentSpells = "") - Local $bDonateSiege = ($g_aiPrepDon[4] = 1) And ($g_aiCurrentSiegeMachines[$eSiegeWallWrecker] > 0 Or $g_aiCurrentSiegeMachines[$eSiegeBattleBlimp] > 0) + Local $bDonateSiege = ($g_aiPrepDon[4] = 1) And ($g_aiCurrentSiegeMachines[$eSiegeWallWrecker] > 0 Or $g_aiCurrentSiegeMachines[$eSiegeBattleBlimp] > 0 Or $g_aiCurrentSiegeMachines[$eSiegeStoneSlammer] > 0) SetDebugLog("$g_aiPrepDon[2]: " & $g_aiPrepDon[2] & ", $g_aiPrepDon[3]: " & $g_aiPrepDon[3] & ", $g_iCurrentSpells: " & $g_iCurrentSpells & ", $bDonateSpell: " & $bDonateSpell) SetDebugLog("$g_aiPrepDon[4]: " & $g_aiPrepDon[4] & ", $bDonateSiege: " & $bDonateSiege) @@ -1276,13 +1294,13 @@ Func DetectSlotTroop(Const $iTroopIndex) If $FullTemp[0] <> "" Then Local $iFoundTroopIndex = TroopIndexLookup($FullTemp[0]) - For $i = $eTroopBarbarian To $eTroopBowler + For $i = $eTroopBarbarian To $eTroopIceGolem If $iFoundTroopIndex = $i Then If $g_bDebugSetlog Then SetDebugLog("Detected " & $g_asTroopNames[$i], $COLOR_DEBUG) If $iTroopIndex = $i Then Return $Slot ExitLoop EndIf - If $i = $eTroopBowler Then ; detection failed + If $i = $eTroopIceGolem Then ; detection failed If $g_bDebugSetlog Then SetDebugLog("Slot: " & $Slot & "Troop Detection Failed", $COLOR_DEBUG) EndIf Next @@ -1308,7 +1326,7 @@ Func DetectSlotTroop(Const $iTroopIndex) If $iTroopIndex = $i Then Return $Slot ExitLoop EndIf - If $i = $eTroopBowler Then ; detection failed + If $i = $eTroopIceGolem Then ; detection failed If $g_bDebugSetlog Then SetDebugLog("Slot: " & $Slot & "Troop Detection Failed", $COLOR_DEBUG) EndIf Next @@ -1334,14 +1352,14 @@ Func DetectSlotSpell(Const $iSpellIndex) If StringInStr($FullTemp[0] & " ", "empty") > 0 Then ExitLoop If $FullTemp[0] <> "" Then - For $i = $eSpellLightning To $eSpellSkeleton + For $i = $eSpellLightning To $eSpellBat Local $sTmp = StringLeft($g_asSpellNames[$i], 4) If StringInStr($FullTemp[0] & " ", $sTmp) > 0 Then If $g_bDebugSetlog Then SetDebugLog("Detected " & $g_asSpellNames[$i], $COLOR_DEBUG) If $iSpellIndex = $i Then Return $Slot ExitLoop EndIf - If $i = $eSpellSkeleton Then ; detection failed + If $i = $eSpellBat Then ; detection failed If $g_bDebugSetlog Then SetDebugLog("Slot: " & $Slot & "Spell Detection Failed", $COLOR_DEBUG) EndIf Next @@ -1425,8 +1443,7 @@ Func SkipDonateNearFullTroops($bSetLog = False, $aHeroResult = Default) Local $rIsWaitforHeroesActive = IsWaitforHeroesActive() If $rIsWaitforHeroesActive Then If $aHeroResult = Default Or Not IsArray($aHeroResult) Then - If Not OpenArmyOverview(True, "SkipDonateNearFullTroops()") Then Return False ; Return False if failed to Open Army Window - $aHeroResult = getArmyHeroTime("all") + $aHeroResult = getArmyHeroTime("all", True, True) ; including open & close army overview EndIf If @error Or UBound($aHeroResult) < 3 Then SetLog("getArmyHeroTime return error: #" & @error & "|IA:" & IsArray($aHeroResult) & "," & UBound($aHeroResult) & ", exit SkipDonateNearFullTroops!", $COLOR_ERROR) diff --git a/COCBot/functions/Village/Laboratory.au3 b/COCBot/functions/Village/Laboratory.au3 index a76a1b5f5..78067a2c0 100644 --- a/COCBot/functions/Village/Laboratory.au3 +++ b/COCBot/functions/Village/Laboratory.au3 @@ -18,58 +18,76 @@ Global Const $sColorNoLoot = Hex(0xFD877E, 6) ; relative location: 68,79 & 68,84 Global Const $sColorMaxLvl = Hex(0xFFFFFF, 6) ; relative location: 76,76 & 76,80; Upgrade already at MAX level, white in last "l" Global Const $sColorLabUgReq = Hex(0x838383, 6) ; relative location: 0,20 or 93,20 lab upgrade required, Look for Gray pixel inside left border Global Const $sColorMaxTroop = Hex(0xFFC360, 6) ; relative location: 23,60; troop already MAX +Global Const $sColorBG = Hex(0xD3D3CB, 6) ; background color in laboratory Global Const $aiCloseDefaultPOS[2] = [721, 143] -Global Const $aiIconDefaultPOS[33][2] = [ _ +Global Const $aiIconDefaultPOS[36][2] = [ _ [-1, -1], _ ; blank - [120, 337 + $g_iMidOffsetY], _ ; page 1 - [120, 444 + $g_iMidOffsetY], _ - [227, 337 + $g_iMidOffsetY], _ - [227, 444 + $g_iMidOffsetY], _ - [334, 337 + $g_iMidOffsetY], _ - [334, 444 + $g_iMidOffsetY], _ - [440, 337 + $g_iMidOffsetY], _ - [440, 444 + $g_iMidOffsetY], _ - [547, 337 + $g_iMidOffsetY], _ - [547, 444 + $g_iMidOffsetY], _ - [654, 337 + $g_iMidOffsetY], _ - [654, 444 + $g_iMidOffsetY], _ - [220, 337 + $g_iMidOffsetY], _ ; page 2 - [220, 444 + $g_iMidOffsetY], _ + [114, 337 + $g_iMidOffsetY], _ ; page 1 + [114, 444 + $g_iMidOffsetY], _ + [221, 337 + $g_iMidOffsetY], _ + [221, 444 + $g_iMidOffsetY], _ [327, 337 + $g_iMidOffsetY], _ [327, 444 + $g_iMidOffsetY], _ - [433, 337 + $g_iMidOffsetY], _ - [433, 444 + $g_iMidOffsetY], _ - [540, 337 + $g_iMidOffsetY], _ - [540, 444 + $g_iMidOffsetY], _ - [113, 337 + $g_iMidOffsetY], _ ; page 3 - [113, 444 + $g_iMidOffsetY], _ - [220, 337 + $g_iMidOffsetY], _ - [220, 444 + $g_iMidOffsetY], _ + [434, 337 + $g_iMidOffsetY], _ + [434, 444 + $g_iMidOffsetY], _ + [541, 337 + $g_iMidOffsetY], _ + [541, 444 + $g_iMidOffsetY], _ + [647, 337 + $g_iMidOffsetY], _ + [647, 444 + $g_iMidOffsetY], _ + [114, 337 + $g_iMidOffsetY], _ ; page 2 + [114, 444 + $g_iMidOffsetY], _ + [221, 337 + $g_iMidOffsetY], _ + [221, 444 + $g_iMidOffsetY], _ [327, 337 + $g_iMidOffsetY], _ [327, 444 + $g_iMidOffsetY], _ - [433, 337 + $g_iMidOffsetY], _ - [433, 444 + $g_iMidOffsetY], _ - [540, 337 + $g_iMidOffsetY], _ - [540, 444 + $g_iMidOffsetY], _ + [434, 337 + $g_iMidOffsetY], _ + [434, 444 + $g_iMidOffsetY], _ + [541, 337 + $g_iMidOffsetY], _ + [541, 444 + $g_iMidOffsetY], _ [647, 337 + $g_iMidOffsetY], _ - [647, 444 + $g_iMidOffsetY]] + [647, 444 + $g_iMidOffsetY], _ + [114, 337 + $g_iMidOffsetY], _ ; page 3 + [114, 444 + $g_iMidOffsetY], _ + [221, 337 + $g_iMidOffsetY], _ + [221, 444 + $g_iMidOffsetY], _ + [327, 337 + $g_iMidOffsetY], _ + [327, 444 + $g_iMidOffsetY], _ + [434, 337 + $g_iMidOffsetY], _ + [434, 444 + $g_iMidOffsetY], _ + [541, 337 + $g_iMidOffsetY], _ + [541, 444 + $g_iMidOffsetY], _ + [647, 337 + $g_iMidOffsetY]] + +Func TestLaboratory() + Local $bWasRunState = $g_bRunState + Local $sWasLabUpgradeTime = $g_sLabUpgradeTime + Local $sWasLabUpgradeEnable = $g_bAutoLabUpgradeEnable + $g_bRunState = True + $g_bAutoLabUpgradeEnable = True + $g_sLabUpgradeTime = "" + Local $Result = Laboratory() + $g_bRunState = $bWasRunState + $g_sLabUpgradeTime = $sWasLabUpgradeTime + $g_bAutoLabUpgradeEnable = $sWasLabUpgradeEnable + Return $Result +EndFunc Func Laboratory() - ;Create local static array to hold upgrade values - Static $aUpgradeValue[33] = [-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - Local $iAvailElixir, $iAvailDark, $sElixirCount, $sDarkCount, $TimeDiff, $aArray, $Result + ;Create local array to hold upgrade values + ;Was static, but makes no sense in switch account context + Local $aUpgradeValue[36] = [-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + Local $iAvailElixir, $iAvailDark, $sElixirCount, $sDarkCount, $TimeDiff, $aArray, $Result, $iCheapestCost = 0 + Local $iXMoved = 0, $iYMoved = 0, $iFirstPageOffset = 0, $iLastPageOffset = 0 + Local $iSelectedUpgrade = $g_iCmbLaboratory $g_iUpgradeMinElixir = Number($g_iUpgradeMinElixir) $g_iUpgradeMinDark = Number($g_iUpgradeMinDark) $g_iLaboratoryElixirCost = 0 + $g_iLaboratoryDElixirCost = 0 If Not $g_bAutoLabUpgradeEnable Then Return ; Lab upgrade not enabled. - If $g_iCmbLaboratory = 0 Then - SetLog("Laboratory enabled, but no troop upgrade selected", $COLOR_WARNING) - Return False ; Nothing selected to upgrade - EndIf If $g_aiLaboratoryPos[0] = 0 Or $g_aiLaboratoryPos[1] = 0 Then SetLog("Laboratory Location not found!", $COLOR_WARNING) LocateLab() ; Lab location unknown, so find it. @@ -108,22 +126,37 @@ Func Laboratory() If _Sleep($DELAYLABORATORY3) Then Return ; Wait for window to open ; Find Research Button - Local $offColors[4][3] = [[0x708CB0, 37, 34], [0x603818, 50, 43], [0xD5FC58, 61, 8], [0x000000, 82, 0]] ; 2nd pixel Blue blade, 3rd pixel brown handle, 4th pixel Green cross, 5th black button edge - Local $ButtonPixel = _MultiPixelSearch(433, 565 + $g_iBottomOffsetY, 562, 619 + $g_iBottomOffsetY, 1, 1, Hex(0x000000, 6), $offColors, 30) ; Black pixel of button edge - If IsArray($ButtonPixel) Then - If $g_bDebugSetlog Then - SetDebugLog("ButtonPixel = " & $ButtonPixel[0] & ", " & $ButtonPixel[1], $COLOR_DEBUG) - SetDebugLog("#1: " & _GetPixelColor($ButtonPixel[0], $ButtonPixel[1], True) & ", #2: " & _GetPixelColor($ButtonPixel[0] + 37, $ButtonPixel[1] + 34, True) & ", #3: " & _GetPixelColor($ButtonPixel[0] + 50, $ButtonPixel[1] + 43, True) & ", #4: " & _GetPixelColor($ButtonPixel[0] + 61, $ButtonPixel[1] + 8, True), $COLOR_DEBUG) - EndIf - If $g_bDebugImageSave Then DebugImageSave("LabUpgrade") - Click($ButtonPixel[0] + 40, $ButtonPixel[1] + 25, 1, 0, "#0198") ; Click Research Button + If QuickMIS("BC1", @ScriptDir & "\imgxml\Lab\Research", 200, 620, 700, 700) Then + If $g_bDebugImageSave Then DebugImageSave("LabUpgrade") ; Debug Only + Click($g_iQuickMISX + 200, $g_iQuickMISY + 620) If _Sleep($DELAYLABORATORY1) Then Return ; Wait for window to open Else - SetLog("Trouble finding research button, try again...", $COLOR_WARNING) + Setlog("Trouble finding research button, try again...", $COLOR_WARNING) ClickP($aAway, 2, $DELAYLABORATORY4, "#0199") Return False EndIf + ; check for upgrade in process - look for green in finish upgrade with gems button + If $g_bDebugSetlog Then SetLog("_GetPixelColor(730, 200): " & _GetPixelColor(730, 200, True) & ":A2CB6C", $COLOR_DEBUG) + If _ColorCheck(_GetPixelColor(730, 200, True), Hex(0xA2CB6C, 6), 20) Then + SetLog("Laboratory Upgrade in progress, waiting for completion", $COLOR_INFO) + If _Sleep($DELAYLABORATORY2) Then Return + ; upgrade in process and time not recorded so update completion time! + Local $sLabTimeOCR = getRemainTLaboratory(270, 257) + Local $iLabFinishTime = ConvertOCRTime("Lab Time", $sLabTimeOCR, False) + SetDebugLog("$sLabTimeOCR: " & $sLabTimeOCR & ", $iLabFinishTime = " & $iLabFinishTime & " m") + If $iLabFinishTime > 0 Then + $g_sLabUpgradeTime = _DateAdd('n', Ceiling($iLabFinishTime), _NowCalc()) + If @error Then _logErrorDateAdd(@error) + SetLog("Research will finish in " & $sLabTimeOCR & " (" & $g_sLabUpgradeTime & ")") + LabStatusGUIUpdate() ; Update GUI flag + ElseIf $g_bDebugSetlog Then + SetLog("Invalid getRemainTLaboratory OCR", $COLOR_DEBUG) + EndIf + ClickP($aAway, 2, $DELAYLABORATORY4, "#0328") + Return False + EndIf + ; reset lab troop positions to default For $i = 1 to UBound($aiIconDefaultPOS) - 1 $g_avLabTroops[$i][0] = $aiIconDefaultPOS[$i][0] @@ -133,218 +166,230 @@ Func Laboratory() ; Lab window coor correction Local $aiCloseBtn = findButton("CloseWindow") If IsArray($aiCloseBtn) Then - Local $iXMoved = $aiCloseBtn[0] - $aiCloseDefaultPOS[0] - Local $iYMoved = $aiCloseBtn[1] - $aiCloseDefaultPOS[1] + $iXMoved = $aiCloseBtn[0] - $aiCloseDefaultPOS[0] + $iYMoved = $aiCloseBtn[1] - $aiCloseDefaultPOS[1] If $g_bDebugSetlog Then Setlog("Lab window off: (" & $iXMoved & ", " & $iYMoved & ")", $COLOR_DEBUG) - If $iXMoved <> 0 Then - For $i = 1 to UBound($aiIconDefaultPOS) - 1 - $g_avLabTroops[$i][0] = $aiIconDefaultPOS[$i][0] + $iXMoved - If $g_bDebugSetlog Then Setlog("New icon X position of " & $g_avLabTroops[$i][3] & " : " & $g_avLabTroops[$i][0], $COLOR_DEBUG) - Next - EndIf - If $iYMoved <> 0 Then - For $i = 1 to UBound($aiIconDefaultPOS) - 1 - $g_avLabTroops[$i][1] = $aiIconDefaultPOS[$i][1] + $iYMoved - If $g_bDebugSetlog Then Setlog("New icon Y position of " & $g_avLabTroops[$i][3] & " : " & $g_avLabTroops[$i][1], $COLOR_DEBUG) - Next - EndIf Else SetLog("Trouble finding lab close button, try again...", $COLOR_WARNING) ClickP($aAway, 2, $DELAYLABORATORY4, "#0199") Return False EndIf + For $x = 0 To 10 ; check for an offset of icons on first page in lab + If Not (_ColorCheck(_GetPixelColor(114 + $x + $iXMoved, 410 + $iYMoved, True), $sColorBG, 10) And _ + _ColorCheck(_GetPixelColor(114 + $x + $iXMoved, 520 + $iYMoved, True), $sColorBG, 10)) Then + $iFirstPageOffset = $x + ExitLoop + EndIf + Next + If $g_bDebugSetlog Then Setlog("Icon Offset on First Page: " & $iFirstPageOffset & "px", $COLOR_DEBUG) + For $i = 0 To 2 + ClickDrag(635, 439 + $g_iMidOffsetY, 220, 439 + $g_iMidOffsetY, 250) + Next + If _Sleep($DELAYLABORATORY5) Then Return + For $x = 0 To 5 ; check for an offset of icons on last page in lab + If Not (_ColorCheck(_GetPixelColor(114 + $x + $iXMoved, 410 + $iYMoved, True), $sColorBG, 10) And _ + _ColorCheck(_GetPixelColor(114 + $x + $iXMoved, 520 + $iYMoved, True), $sColorBG, 10)) Then + $iLastPageOffset = $x + ExitLoop + EndIf + Next + If $g_bDebugSetlog Then Setlog("Icon Offset on Last Page: " & $iLastPageOffset & "px", $COLOR_DEBUG) + For $i = 0 To 2 + ClickDrag(220, 439 + $g_iMidOffsetY, 635, 439 + $g_iMidOffsetY, 250) + Next + If _Sleep($DELAYLABORATORY5) Then Return + For $i = 1 to UBound($aiIconDefaultPOS) - 1 ; Applying all offsets + $g_avLabTroops[$i][0] = $aiIconDefaultPOS[$i][0] + $iXMoved + (($g_avLabTroops[$i][2] = 0) ? $iFirstPageOffset : 0) + (($g_avLabTroops[$i][2] = 2) ? $iLastPageOffset : 0) + If $g_bDebugSetlog Then Setlog("New icon X position of " & $g_avLabTroops[$i][3] & " : " & $g_avLabTroops[$i][0], $COLOR_DEBUG) + $g_avLabTroops[$i][1] = $aiIconDefaultPOS[$i][1] + $iYMoved + If $g_bDebugSetlog Then Setlog("New icon Y position of " & $g_avLabTroops[$i][3] & " : " & $g_avLabTroops[$i][1], $COLOR_DEBUG) + Next + ; First page If $g_bDebugSetlog Then LabTroopImages(1, 12) - If $g_iFirstTimeLab = 0 Then ; Need to get upgrade value for troops on page 1, only do this on 1st cycle of function - For $i = 1 To 12 - $aUpgradeValue[$i] = getLabUpgrdResourceRed($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$i][3] & " Red text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) - If $aUpgradeValue[$i] = "" Or Int($aUpgradeValue[$i]) < 49999 Then ; check if blank or below min value for any upgrade on page 1 - $aUpgradeValue[$i] = getLabUpgrdResourceWht($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$i][3] & " White text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) - EndIf - If $aUpgradeValue[$i] = "" Or Int($aUpgradeValue[$i]) < 49999 Then ; check if blank or below min value for any upgrade on page 1 - If _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 76, True), $sColorMaxLvl, 20) And _ - _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 80, True), $sColorMaxLvl, 20) Then - $aUpgradeValue[$i] = -1 - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$i][3] & " Is Maxed already, now = " & $aUpgradeValue[$i], $COLOR_DEBUG) - EndIf + For $i = 1 To 12 + $aUpgradeValue[$i] = getLabUpgrdResourceRed($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " Red text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) + If $aUpgradeValue[$i] = "" Or Int($aUpgradeValue[$i]) < 9999 Then ; check if blank or below min value for any upgrade on page 1 + $aUpgradeValue[$i] = getLabUpgrdResourceWht($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " White text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) + EndIf + If $aUpgradeValue[$i] = "" Or Int($aUpgradeValue[$i]) < 9999 Then ; check if blank or below min value for any upgrade on page 1 + $aUpgradeValue[$i] = 0 + If _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 76, True), $sColorMaxLvl, 20) And _ + _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 80, True), $sColorMaxLvl, 20) Then + $aUpgradeValue[$i] = -1 + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " Is Maxed already, now = " & $aUpgradeValue[$i], $COLOR_DEBUG) + ; Check if Lab upgrade required, Look for Gray pixel inside left border + ElseIf _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0], $g_avLabTroops[$i][1] + 20, True), $sColorLabUgReq, 25) = True Or _ + _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 93, $g_avLabTroops[$i][1] + 20, True), $sColorLabUgReq, 25) = True Then + $aUpgradeValue[$i] = -1 + If $g_bDebugSetlog Then SetLog("Lab upgrade required for " & $g_avLabTroops[$i][3] & ", now = " & $aUpgradeValue[$i], $COLOR_DEBUG) + ; Check if troop not unlocked, look for beige pixel in center just below top edge + ElseIf _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 47, $g_avLabTroops[$i][1] + 1, True), $sColorNA, 20) = True Then + $aUpgradeValue[$i] = -1 + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " not unlocked yet, now = " & $aUpgradeValue[$i], $COLOR_DEBUG) EndIf - If Not $g_bRunState Then Return - Next - $g_iFirstTimeLab = 1 - EndIf + EndIf + If Not $g_bRunState Then Return + Next ; Second page - If $g_avLabTroops[$g_iCmbLaboratory][2] >= 1 Then ; when troop located on page 2+ of lab window and Move to four icon squares - ClickDrag(650, 439 + $g_iMidOffsetY, 290, 439 + $g_iMidOffsetY, 1000) - If $g_avLabTroops[$g_iCmbLaboratory][2] = 1 Or $g_iFirstTimeLab < 2 Then ; page 2 position correction when stay on 2nd page or 1st cycle of function - If _Sleep($DELAYLABORATORY3) Then Return - If Not ClickDragLab($aiIconDefaultPOS[14][0]) Then - SetLog("Trouble finding 2nd page of lab, try again...", $COLOR_WARNING) - ClickP($aAway, 2, $DELAYLABORATORY4, "#0199") - Return False - EndIf + For $i = 0 To 1 + ClickDrag(615, 439 + $g_iMidOffsetY, 325, 439 + $g_iMidOffsetY, 250) + Next + If _Sleep($DELAYLABORATORY3) Then Return + If Not ClickDragLab($g_avLabTroops[14][0]) Then + SetLog("Trouble finding 2nd page of lab, try again...", $COLOR_WARNING) + ClickP($aAway, 2, $DELAYLABORATORY4, "#0199") + Return False + EndIf + If _Sleep($DELAYLABORATORY3) Then Return + If $g_bDebugSetlog Then LabTroopImages(13, 20) + For $i = 13 To 24 + $aUpgradeValue[$i] = getLabUpgrdResourceRed($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " Red text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) + If $aUpgradeValue[$i] = "" Or $aUpgradeValue[$i] < 9999 Then ; check if blank or below min value for any upgrade on page 2 + $aUpgradeValue[$i] = getLabUpgrdResourceWht($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " White text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) EndIf - If _Sleep($DELAYLABORATORY3) Then Return - If $g_bDebugSetlog Then LabTroopImages(13, 20) - If $g_iFirstTimeLab < 2 Then ; Need to get upgrade value for troops on page 2, only do this on 1st cycle of function - For $i = 13 To 20 - $aUpgradeValue[$i] = getLabUpgrdResourceRed($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$i][3] & " Red text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) - If $aUpgradeValue[$i] = "" Or $aUpgradeValue[$i] < 9999 Then ; check if blank or below min value for any upgrade on page 2 - $aUpgradeValue[$i] = getLabUpgrdResourceWht($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$i][3] & " White text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) - EndIf - If $aUpgradeValue[$i] = "" Or $aUpgradeValue[$i] < 9999 Then ; check if blank or below min value for any upgrade on page 2 - If _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 76, True), $sColorMaxLvl, 20) And _ - _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 80, True), $sColorMaxLvl, 20) Then - $aUpgradeValue[$i] = -1 - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$i][3] & " Is Maxed already, now = " & $aUpgradeValue[$i], $COLOR_DEBUG) - EndIf - EndIf - If Not $g_bRunState Then Return - Next - $g_iFirstTimeLab += 2 + If $aUpgradeValue[$i] = "" Or $aUpgradeValue[$i] < 9999 Then ; check if blank or below min value for any upgrade on page 2 + $aUpgradeValue[$i] = 0 + If _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 76, True), $sColorMaxLvl, 20) And _ + _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 80, True), $sColorMaxLvl, 20) Then + $aUpgradeValue[$i] = -1 + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " Is Maxed already, now = " & $aUpgradeValue[$i], $COLOR_DEBUG) + ; Check if Lab upgrade required, Look for Gray pixel inside left border + ElseIf _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0], $g_avLabTroops[$i][1] + 20, True), $sColorLabUgReq, 25) = True Or _ + _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 93, $g_avLabTroops[$i][1] + 20, True), $sColorLabUgReq, 25) = True Then + $aUpgradeValue[$i] = -1 + If $g_bDebugSetlog Then SetLog("Lab upgrade required for " & $g_avLabTroops[$i][3] & ", now = " & $aUpgradeValue[$i], $COLOR_DEBUG) + ; Check if troop not unlocked, look for beige pixel in center just below top edge + ElseIf _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 47, $g_avLabTroops[$i][1] + 1, True), $sColorNA, 20) = True Then + $aUpgradeValue[$i] = -1 + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " not unlocked yet, now = " & $aUpgradeValue[$i], $COLOR_DEBUG) + EndIf EndIf - EndIf + If Not $g_bRunState Then Return + Next - ; Last page - If $g_avLabTroops[$g_iCmbLaboratory][2] = 2 Then ; when troop located on last (next) page of lab window and Move to the page - ClickDrag(650, 443 + $g_iMidOffsetY, 114, 443 + $g_iMidOffsetY, 1000) - If _Sleep($DELAYLABORATORY5) Then Return - If $g_bDebugSetlog Then LabTroopImages(21, 32) - If $g_iFirstTimeLab < 4 Then ; Need to get upgrade value for troops on last page, only do this on 1st cycle of function - For $i = 21 To 32 - $aUpgradeValue[$i] = getLabUpgrdResourceRed($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$i][3] & " Red text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) - If $aUpgradeValue[$i] = "" Or Int($aUpgradeValue[$i]) < 9999 Then ; check if blank or below min value for any upgrade on last page - $aUpgradeValue[$i] = getLabUpgrdResourceWht($g_avLabTroops[$i][0] + 3 , $g_avLabTroops[$i][1] + 73) - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$i][3] & " White text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) - EndIf - If $aUpgradeValue[$i] = "" Or Int($aUpgradeValue[$i]) < 9999 Then ; check if blank or below min value for any upgrade on last page - If _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 76, True), $sColorMaxLvl, 20) And _ - _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 80, True), $sColorMaxLvl, 20) Then - $aUpgradeValue[$i] = -1 - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$i][3] & " Is Maxed already, now = " & $aUpgradeValue[$i], $COLOR_DEBUG) - EndIf - EndIf - If Not $g_bRunState Then Return - Next - $g_iFirstTimeLab += 4 + ; Third page + For $i = 0 To 1 + ClickDrag(620, 439 + $g_iMidOffsetY, 320, 439 + $g_iMidOffsetY, 250) + Next + If _Sleep($DELAYLABORATORY5) Then Return + If $g_bDebugSetlog Then LabTroopImages(21, 32) + For $i = 25 To 35 + $aUpgradeValue[$i] = getLabUpgrdResourceRed($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " Red text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) + If $aUpgradeValue[$i] = "" Or Int($aUpgradeValue[$i]) < 9999 Then ; check if blank or below min value for any upgrade on last page + $aUpgradeValue[$i] = getLabUpgrdResourceWht($g_avLabTroops[$i][0] + 3, $g_avLabTroops[$i][1] + 73) + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " White text upgrade value = " & $aUpgradeValue[$i], $COLOR_DEBUG) EndIf - EndIf - - ; Track Elixir cost for Wall Upgrade check - Switch $g_iCmbLaboratory - Case 1 To 19 ; regular elixir - ContinueCase - Case 31 To 32 ; regular elixir - If $aUpgradeValue[$g_iCmbLaboratory] > 0 Then $g_iLaboratoryElixirCost = $aUpgradeValue[$g_iCmbLaboratory] - EndSwitch - - ; check for upgrade in process - look for green in finish upgrade with gems button - If _ColorCheck(_GetPixelColor(625, 266 + $g_iMidOffsetY, True), Hex(0x6CB91D, 6), 20) Or _ColorCheck(_GetPixelColor(660, 266 + $g_iMidOffsetY, True), Hex(0x6CB91D, 6), 20) Then - SetLog("Upgrade in progress, waiting for completion of other troops", $COLOR_INFO) - If _Sleep($DELAYLABORATORY2) Then Return - ; upgrade in process and time not recorded? Then update completion time! - If $g_sLabUpgradeTime = "" Or $TimeDiff <= 0 Then - $Result = getRemainTLaboratory(270, 257) ; Try to read white text showing actual time left for upgrade - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$g_iCmbLaboratory][3] & " OCR Remaining Lab Time = " & $Result, $COLOR_DEBUG) - $aArray = StringSplit($Result, ' ', BitOR($STR_CHRSPLIT, $STR_NOCOUNT)) ;separate days, hours, minutes, seconds - If IsArray($aArray) Then - Local $iRemainingTimeMin = 0 - For $i = 0 To UBound($aArray) - 1 ; step through array and compute minutes remaining - Local $sTime = "" - Select - Case StringInStr($aArray[$i], "d", $STR_NOCASESENSEBASIC) > 0 - $sTime = StringTrimRight($aArray[$i], 1) ; removing the "d" - $iRemainingTimeMin += (Int($sTime) * 24 * 60) ; change days to minutes and add - Case StringInStr($aArray[$i], "h", $STR_NOCASESENSEBASIC) > 0 - $sTime = StringTrimRight($aArray[$i], 1) ; removing the "h" - $iRemainingTimeMin += (Int($sTime) * 60) ; change hours to minutes and add - Case StringInStr($aArray[$i], "m", $STR_NOCASESENSEBASIC) > 0 - $sTime = StringTrimRight($aArray[$i], 1) ; removing the "m" - $iRemainingTimeMin += Int($sTime) ; add minutes - Case StringInStr($aArray[$i], "s", $STR_NOCASESENSEBASIC) > 0 - $sTime = StringTrimRight($aArray[$i], 1) ; removing the "s" - $iRemainingTimeMin += Int($sTime) / 60 ; Add seconds - Case Else - SetLog("Remaining lab time OCR invalid:" & $aArray[$i], $COLOR_WARNING) - ClickP($aAway, 2, $DELAYLABORATORY4, "#0328") - Return False - EndSelect - If $g_bDebugSetlog Then SetDebugLog("Remain Lab Time: " & $aArray[$i] & ", Minutes= " & $iRemainingTimeMin, $COLOR_DEBUG) - Next - $g_sLabUpgradeTime = _DateAdd('n', Ceiling($iRemainingTimeMin), _NowCalc()) ; add the time required to NOW to finish the upgrade - If @error Then _logErrorDateAdd(@error) - SetLog("Updated Lab finishing time: " & $g_sLabUpgradeTime, $COLOR_SUCCESS) - LabStatusGUIUpdate() ; Update GUI flag - Else - If $g_bDebugSetlog Then SetDebugLog("Invalid getRemainTLaboratory OCR", $COLOR_DEBUG) + If $aUpgradeValue[$i] = "" Or Int($aUpgradeValue[$i]) < 9999 Then ; check if blank or below min value for any upgrade on last page + $aUpgradeValue[$i] = 0 + If _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 76, True), $sColorMaxLvl, 20) And _ + _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 80, True), $sColorMaxLvl, 20) Then + $aUpgradeValue[$i] = -1 + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " Is Maxed already, now = " & $aUpgradeValue[$i], $COLOR_DEBUG) + ; Check if Lab upgrade required, Look for Gray pixel inside left border + ElseIf _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0], $g_avLabTroops[$i][1] + 20, True), $sColorLabUgReq, 25) = True Or _ + _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 93, $g_avLabTroops[$i][1] + 20, True), $sColorLabUgReq, 25) = True Then + $aUpgradeValue[$i] = -1 + If $g_bDebugSetlog Then SetLog("Lab upgrade required for " & $g_avLabTroops[$i][3] & ", now = " & $aUpgradeValue[$i], $COLOR_DEBUG) + ; Check if troop not unlocked, look for beige pixel in center just below top edge + ElseIf _ColorCheck(_GetPixelColor($g_avLabTroops[$i][0] + 47, $g_avLabTroops[$i][1] + 1, True), $sColorNA, 20) = True Then + $aUpgradeValue[$i] = -1 + If $g_bDebugSetlog Then SetLog($g_avLabTroops[$i][3] & " not unlocked yet, now = " & $aUpgradeValue[$i], $COLOR_DEBUG) EndIf EndIf - ClickP($aAway, 2, $DELAYLABORATORY4, "#0328") - Return False - EndIf - - ; Upgrade max level already + If Not $g_bRunState Then Return + Next + If $aUpgradeValue[$g_iCmbLaboratory] = -1 Then - SetLog($g_avLabTroops[$g_iCmbLaboratory][3] & " already max level, select another troop", $COLOR_WARNING) - ClickP($aAway, 2, $DELAYLABORATORY4, "#0353") - Return False + If $g_iCmbLaboratory = 0 Then + SetLog("No dedicated troop for upgrade selected, doing cheapest upgrade", $COLOR_ACTION) + Else + SetLog("No upgrade for " & $g_avLabTroops[$g_iCmbLaboratory][3] & " available, doing cheapest upgrade", $COLOR_ACTION) + EndIf + For $i = 1 To 35 + Switch $i + Case 1 To 19 ; regular elixir + ContinueCase + Case 33 To 35 + If $aUpgradeValue[$i] > 0 And ($iCheapestCost = 0 Or $aUpgradeValue[$i] < $iCheapestCost) Then + $iSelectedUpgrade = $i + $iCheapestCost = $aUpgradeValue[$i] + EndIf + Case 20 To 32; Dark Elixir, multiply value with 50 + If $aUpgradeValue[$i] > 0 And ($iCheapestCost = 0 Or $aUpgradeValue[$i] * 50 < $iCheapestCost) Then + $iSelectedUpgrade = $i + $iCheapestCost = $aUpgradeValue[$i] * 50 + EndIf + EndSwitch + Next + If $g_iCmbLaboratory = $iSelectedUpgrade Then + SetLog("No alternate troop for upgrade found", $COLOR_WARNING) + ClickP($aAway, 2, $DELAYLABORATORY4, "#0353") + Return False + Else + SetLog($g_avLabTroops[$iSelectedUpgrade][3] & " selected for upgrade, upgrade cost = " & $aUpgradeValue[$iSelectedUpgrade], $COLOR_INFO) + EndIf EndIf - ; Upgrade not available - If $aUpgradeValue[$g_iCmbLaboratory] = 0 Then - ; Check if Lab upgrade required, Look for Gray pixel inside left border - If _ColorCheck(_GetPixelColor($g_avLabTroops[$g_iCmbLaboratory][0], $g_avLabTroops[$g_iCmbLaboratory][1] + 20, True), $sColorLabUgReq, 25) = True Or _ - _ColorCheck(_GetPixelColor($g_avLabTroops[$g_iCmbLaboratory][0] + 93, $g_avLabTroops[$g_iCmbLaboratory][1] + 20, True), $sColorLabUgReq, 25) = True Then - SetLog("Lab upgrade required for " & $g_avLabTroops[$g_iCmbLaboratory][3] & ", select another troop", $COLOR_WARNING) - If _Sleep($DELAYLABUPGRADE2) Then Return - ; Check if troop not unlocked, look for beige pixel in center just below top edge - ElseIf _ColorCheck(_GetPixelColor($g_avLabTroops[$g_iCmbLaboratory][0] + 47, $g_avLabTroops[$g_iCmbLaboratory][1] + 1, True), $sColorNA, 20) = True Then - SetLog($g_avLabTroops[$g_iCmbLaboratory][3] & " not unlocked yet, try later or select another troop", $COLOR_WARNING) - ; OCR read error, reset read flag and quit + ; Drag back to page 2 or 1 + If $g_avLabTroops[$iSelectedUpgrade][2] < 2 Then ; when troop located on page 1 or 2 + If $g_avLabTroops[$iSelectedUpgrade][2] = 1 Then ; page 2 position correction when stay on 2nd page + For $i = 0 To 1 + ClickDrag(320, 439 + $g_iMidOffsetY, 620, 439 + $g_iMidOffsetY, 250) + Next + If _Sleep($DELAYLABORATORY3) Then Return + If Not ClickDragLab($g_avLabTroops[14][0]) Then + SetLog("Trouble finding 2nd page of lab, try again...", $COLOR_WARNING) + ClickP($aAway, 2, $DELAYLABORATORY4, "#0199") + Return False + EndIf Else - SetLog($g_avLabTroops[$g_iCmbLaboratory][3] & " value read error, close bot and try again!", $COLOR_ERROR) - $g_iFirstTimeLab = 0 ; reset value read flag in case user does not restart bot to clear the flag to read again + For $i = 0 To 2 + ClickDrag(220, 439 + $g_iMidOffsetY, 635, 439 + $g_iMidOffsetY, 250) + Next EndIf - ClickP($aAway, 2, $DELAYLABORATORY4, "#0354") - Return False + If _Sleep($DELAYLABORATORY5) Then Return EndIf ; Try to upgrade - LabUpgrade(), check insufficient resource first - Switch $g_iCmbLaboratory + Switch $iSelectedUpgrade Case 1 To 19 ; regular elixir ContinueCase - Case 31 To 32 - If $iAvailElixir < ($aUpgradeValue[$g_iCmbLaboratory] + $g_iUpgradeMinElixir) Then - SetLog("Insufficent Elixir for " & $g_avLabTroops[$g_iCmbLaboratory][3] & ", Lab requires: " & $aUpgradeValue[$g_iCmbLaboratory] & " + " & $g_iUpgradeMinElixir & " user reserve, available: " & $iAvailElixir, $COLOR_INFO) + Case 33 To 35 + If $iAvailElixir < ($aUpgradeValue[$iSelectedUpgrade] + $g_iUpgradeMinElixir) Then + If $aUpgradeValue[$iSelectedUpgrade] > 0 Then $g_iLaboratoryElixirCost = $aUpgradeValue[$iSelectedUpgrade] ; Reserve elixier and prevent wall upgrade as long + SetLog("Insufficent Elixir for " & $g_avLabTroops[$iSelectedUpgrade][3] & ", Lab requires: " & $aUpgradeValue[$iSelectedUpgrade] & " + " & $g_iUpgradeMinElixir & " user reserve, available: " & $iAvailElixir, $COLOR_INFO) ClickP($aAway, 2, $DELAYLABORATORY4, "#0355") Return False EndIf - If LabUpgrade() = True Then - SetLog("Elixir used = " & $aUpgradeValue[$g_iCmbLaboratory], $COLOR_INFO) + If LabUpgrade($iSelectedUpgrade) = True Then + SetLog("Elixir used = " & $aUpgradeValue[$iSelectedUpgrade], $COLOR_INFO) ClickP($aAway, 2, $DELAYLABORATORY4, "#0356") Return True EndIf - Case 20 To 30; Dark Elixir - If $iAvailDark < $aUpgradeValue[$g_iCmbLaboratory] + $g_iUpgradeMinDark Then - SetLog("Insufficent Dark Elixir for " & $g_avLabTroops[$g_iCmbLaboratory][3] & ", Lab requires: " & $aUpgradeValue[$g_iCmbLaboratory] & " + " & $g_iUpgradeMinDark & " user reserve, available: " & $iAvailDark, $COLOR_INFO) + Case 20 To 32; Dark Elixir + If $iAvailDark < $aUpgradeValue[$iSelectedUpgrade] + $g_iUpgradeMinDark Then + If $aUpgradeValue[$iSelectedUpgrade] > 0 Then $g_iLaboratoryDElixirCost = $aUpgradeValue[$iSelectedUpgrade] ; Reserve dark elixier and prevent hero upgrade as long + SetLog("Insufficent Dark Elixir for " & $g_avLabTroops[$iSelectedUpgrade][3] & ", Lab requires: " & $aUpgradeValue[$iSelectedUpgrade] & " + " & $g_iUpgradeMinDark & " user reserve, available: " & $iAvailDark, $COLOR_INFO) ClickP($aAway, 2, $DELAYLABORATORY4, "#0357") Return False EndIf - If LabUpgrade() = True Then - SetLog("Dark Elixir used = " & $aUpgradeValue[$g_iCmbLaboratory], $COLOR_INFO) + If LabUpgrade($iSelectedUpgrade) = True Then + SetLog("Dark Elixir used = " & $aUpgradeValue[$iSelectedUpgrade], $COLOR_INFO) ClickP($aAway, 2, $DELAYLABORATORY4, "#0358") Return True EndIf Case Else - SetLog("Something went wrong with loot value on Lab upgrade on #" & $g_avLabTroops[$g_iCmbLaboratory][3], $COLOR_ERROR) + SetLog("Something went wrong with loot value on Lab upgrade on #" & $g_avLabTroops[$iSelectedUpgrade][3], $COLOR_ERROR) Return False EndSwitch @@ -353,47 +398,47 @@ Func Laboratory() EndFunc ;==>Laboratory ; -Func LabUpgrade() +Func LabUpgrade($iSelectedUpgrade) Local $StartTime, $EndTime, $EndPeriod, $Result, $TimeAdd = 0 Select - Case _ColorCheck(_GetPixelColor($g_avLabTroops[$g_iCmbLaboratory][0] + 47, $g_avLabTroops[$g_iCmbLaboratory][1] + 1, True), $sColorNA, 20) = True + Case _ColorCheck(_GetPixelColor($g_avLabTroops[$iSelectedUpgrade][0] + 47, $g_avLabTroops[$iSelectedUpgrade][1] + 1, True), $sColorNA, 20) = True ; check for beige pixel in center just below edge for troop not unlocked - SetLog($g_avLabTroops[$g_iCmbLaboratory][3] & " not unlocked yet, select another troop", $COLOR_WARNING) + SetLog($g_avLabTroops[$iSelectedUpgrade][3] & " not unlocked yet, select another troop", $COLOR_WARNING) If _Sleep($DELAYLABUPGRADE2) Then Return - Case _PixelSearch($g_avLabTroops[$g_iCmbLaboratory][0] + 67, $g_avLabTroops[$g_iCmbLaboratory][1] + 79, $g_avLabTroops[$g_iCmbLaboratory][0] + 69, $g_avLabTroops[$g_iCmbLaboratory][0] + 84, $sColorNoLoot, 20) <> 0 + Case _PixelSearch($g_avLabTroops[$iSelectedUpgrade][0] + 67, $g_avLabTroops[$iSelectedUpgrade][1] + 79, $g_avLabTroops[$iSelectedUpgrade][0] + 69, $g_avLabTroops[$iSelectedUpgrade][0] + 84, $sColorNoLoot, 20) <> 0 ; Check for Pink pixels last zero of loot value to see if enough loot is available. ; this case should never be run if value check is working right! - SetLog("Value check error and Not enough Loot to upgrade " & $g_avLabTroops[$g_iCmbLaboratory][3] & "...", $COLOR_ERROR) + SetLog("Value check error and Not enough Loot to upgrade " & $g_avLabTroops[$iSelectedUpgrade][3] & "...", $COLOR_ERROR) If _Sleep($DELAYLABUPGRADE2) Then Return - Case _ColorCheck(_GetPixelColor($g_avLabTroops[$g_iCmbLaboratory][0] + 22, $g_avLabTroops[$g_iCmbLaboratory][1] + 60, True), Hex(0xFFC360, 6), 20) = True + Case _ColorCheck(_GetPixelColor($g_avLabTroops[$iSelectedUpgrade][0] + 22, $g_avLabTroops[$iSelectedUpgrade][1] + 60, True), Hex(0xFFC360, 6), 20) = True ; Look for Golden pixel inside level indicator for max troops - SetLog($g_avLabTroops[$g_iCmbLaboratory][3] & " already max level, select another troop", $COLOR_ERROR) + SetLog($g_avLabTroops[$iSelectedUpgrade][3] & " already max level, select another troop", $COLOR_ERROR) If _Sleep($DELAYLABUPGRADE2) Then Return - Case _ColorCheck(_GetPixelColor($g_avLabTroops[$g_iCmbLaboratory][0] + 3, $g_avLabTroops[$g_iCmbLaboratory][1] + 19, True), Hex(0xB7B7B7, 6), 20) = True + Case _ColorCheck(_GetPixelColor($g_avLabTroops[$iSelectedUpgrade][0] + 3, $g_avLabTroops[$iSelectedUpgrade][1] + 19, True), Hex(0xB7B7B7, 6), 20) = True ; Look for Gray pixel inside left border if Lab upgrade required or if we missed that upgrade is in process - SetLog("Laboratory upgrade not available now for " & $g_avLabTroops[$g_iCmbLaboratory][3] & "...", $COLOR_ERROR) + SetLog("Laboratory upgrade not available now for " & $g_avLabTroops[$iSelectedUpgrade][3] & "...", $COLOR_ERROR) If _Sleep($DELAYLABUPGRADE2) Then Return Case Else ; If none of other error conditions apply, begin upgrade process - Click($g_avLabTroops[$g_iCmbLaboratory][0] + 40, $g_avLabTroops[$g_iCmbLaboratory][1] + 40, 1, 0, "#0200") ; Click Upgrade troop button + Click($g_avLabTroops[$iSelectedUpgrade][0] + 40, $g_avLabTroops[$iSelectedUpgrade][1] + 40, 1, 0, "#0200") ; Click Upgrade troop button If _Sleep($DELAYLABUPGRADE1) Then Return ; Wait for window to open If $g_bDebugImageSave Then DebugImageSave("LabUpgrade") ; double check if maxed? If _ColorCheck(_GetPixelColor(258, 192, True), Hex(0xFF1919, 6), 20) And _ColorCheck(_GetPixelColor(272, 194, True), Hex(0xFF1919, 6), 20) Then - SetLog($g_avLabTroops[$g_iCmbLaboratory][3] & " Previously maxxed, select another troop", $COLOR_ERROR) ; oops, we found the red warning message + SetLog($g_avLabTroops[$iSelectedUpgrade][3] & " Previously maxxed, select another troop", $COLOR_ERROR) ; oops, we found the red warning message If _Sleep($DELAYLABUPGRADE2) Then Return ClickP($aAway, 2, $DELAYLABUPGRADE3, "#0201") Return False EndIf ; double check enough elixir? - If _PixelSearch($g_avLabTroops[$g_iCmbLaboratory][0] + 67, $g_avLabTroops[$g_iCmbLaboratory][1] + 79, $g_avLabTroops[$g_iCmbLaboratory][0] + 69, $g_avLabTroops[$g_iCmbLaboratory][0] + 84, $sColorNoLoot, 20) <> 0 Then ; Check for Red Zero = means not enough loot! - SetLog("Missing Loot to upgrade " & $g_avLabTroops[$g_iCmbLaboratory][3] & " (secondary check after Upgrade Value read failed)", $COLOR_ERROR) + If _PixelSearch($g_avLabTroops[$iSelectedUpgrade][0] + 67, $g_avLabTroops[$iSelectedUpgrade][1] + 79, $g_avLabTroops[$iSelectedUpgrade][0] + 69, $g_avLabTroops[$iSelectedUpgrade][0] + 84, $sColorNoLoot, 20) <> 0 Then ; Check for Red Zero = means not enough loot! + SetLog("Missing Loot to upgrade " & $g_avLabTroops[$iSelectedUpgrade][3] & " (secondary check after Upgrade Value read failed)", $COLOR_ERROR) If _Sleep($DELAYLABUPGRADE2) Then Return ClickP($aAway, 2, $DELAYLABUPGRADE3, "#0333") Return False @@ -407,56 +452,20 @@ Func LabUpgrade() Return False Else ; get upgrade time from window - $Result = getLabUpgradeTime(481, 557) ; Try to read white text showing time for upgrade - SetLog($g_avLabTroops[$g_iCmbLaboratory][3] & " Upgrade OCR Time = " & $Result, $COLOR_INFO) + $Result = getLabUpgradeTime(581, 497) ; Try to read white text showing time for upgrade + Local $iLabFinishTime = ConvertOCRTime("Lab Time", $Result, False) + SetLog($g_avLabTroops[$iSelectedUpgrade][3] & " Upgrade OCR Time = " & $Result & ", $iLabFinishTime = " & $iLabFinishTime & " m", $COLOR_INFO) $StartTime = _NowCalc() ; what is date:time now - If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$g_iCmbLaboratory][3] & "Upgrade Started @ " & $StartTime, $COLOR_SUCCESS) - ; Compute upgrade end time - $EndTime = "" - $EndPeriod = "" - $TimeAdd = 0 - $g_sLabUpgradeTime = StringStripWS($Result, $STR_STRIPALL) - Local $aArray = StringRegExp($g_sLabUpgradeTime, '\d+', $STR_REGEXPARRAYMATCH) - If IsArray($aArray) Then - If $g_bDebugSetlog Then ; debug - display array value - For $i = 0 To UBound($aArray) - 1 - SetLog("UpgradeTime $aArray[" & $i & "] = " & $aArray[$i]) - Next - EndIf - $EndTime = $aArray[0] - $EndPeriod = StringReplace($g_sLabUpgradeTime, $EndTime, "") - Switch $EndPeriod - Case "d" - $TimeAdd = (Int($EndTime) * 24 * 60) - 10 ; change days to minutes, minus 10 minute - $g_sLabUpgradeTime = _DateAdd('n', Int($TimeAdd), $StartTime) ; add the time required to finish the upgrade - Case "h" - $TimeAdd = (Int($EndTime) * 60) - 3 ; change hours to minutes, minus 3 minutes - $g_sLabUpgradeTime = _DateAdd('n', Int($TimeAdd), $StartTime) ; add the time required to finish the upgrade - Case "m" - $TimeAdd = Int($EndTime) ; change to minutes - $g_sLabUpgradeTime = _DateAdd('n', Int($TimeAdd), $StartTime) ; add the time required to finish the upgrade - Case Else - SetLog("Upgrade time period invalid, try again!", $COLOR_WARNING) - EndSwitch - If $g_bDebugSetlog Then SetDebugLog("$EndTime = " & $EndTime & " , $EndPeriod = " & $EndPeriod & ", $timeadd = " & $TimeAdd, $COLOR_DEBUG) - SetLog($g_avLabTroops[$g_iCmbLaboratory][3] & "Upgrade Finishes @ " & $g_sLabUpgradeTime, $COLOR_SUCCESS) + If $g_bDebugSetlog Then SetDebugLog($g_avLabTroops[$iSelectedUpgrade][3] & " Upgrade Started @ " & $StartTime, $COLOR_SUCCESS) + If $iLabFinishTime > 0 Then + $g_sLabUpgradeTime = _DateAdd('n', Ceiling($iLabFinishTime), $StartTime) + SetLog($g_avLabTroops[$iSelectedUpgrade][3] & " Upgrade Finishes @ " & $Result & " (" & $g_sLabUpgradeTime & ")", $COLOR_SUCCESS) Else - SetLog("Error reading the upgrade time required, try again!", $COLOR_WARNING) - EndIf - If _DateIsValid($g_sLabUpgradeTime) = 0 Then ; verify success of StringRegExp to process upgrade date/time SetLog("Error processing upgrade time required, try again!", $COLOR_WARNING) Return False - Else - Local $txtTip = GetTranslatedFileIni("MBR Func_Village_Upgrade", "BtnResetLabUpgradeTime_Info_01", "Visible Red button means that laboratory upgrade in process") & @CRLF & _ - GetTranslatedFileIni("MBR Func_Village_Upgrade", "BtnResetLabUpgradeTime_Info_02", "This will automatically disappear when near time for upgrade to be completed.") & @CRLF & _ - GetTranslatedFileIni("MBR Func_Village_Upgrade", "BtnResetLabUpgradeTime_Info_03", "If upgrade has been manually finished with gems before normal end time,") & @CRLF & _ - GetTranslatedFileIni("MBR Func_Village_Upgrade", "BtnResetLabUpgradeTime_Info_04", "Click red button to reset internal upgrade timer BEFORE STARTING NEW UPGRADE") & @CRLF & _ - GetTranslatedFileIni("MBR Func_Village_Upgrade", "BtnResetLabUpgradeTime_Info_05", "Caution - Unnecessary timer reset will force constant checks for lab status") & @CRLF & @CRLF & _ - GetTranslatedFileIni("MBR Func_Village_Upgrade", "BtnResetLabUpgradeTime_Info_06", "Troop Upgrade started") & ": " & $StartTime & ", " & _ - GetTranslatedFileIni("MBR Func_Village_Upgrade", "BtnResetLabUpgradeTime_Info_07", "Will begin to check completion at:") & " " & $g_sLabUpgradeTime & @CRLF & " " - _GUICtrlSetTip($g_hBtnResetLabUpgradeTime, $txtTip) EndIf + LabStatusGUIUpdate() Click(660, 520 + $g_iMidOffsetY, 1, 0, "#0202") ; Everything is good - Click the upgrade button If _Sleep($DELAYLABUPGRADE1) Then Return EndIf @@ -464,21 +473,21 @@ Func LabUpgrade() If isGemOpen(True) = False Then ; check for gem window ; check for green button to use gems to finish upgrade, checking if upgrade actually started If Not (_ColorCheck(_GetPixelColor(625, 218 + $g_iMidOffsetY, True), Hex(0x6fbd1f, 6), 15) Or _ColorCheck(_GetPixelColor(660, 218 + $g_iMidOffsetY, True), Hex(0x6fbd1f, 6), 15)) Then - SetLog("Something went wrong with " & $g_avLabTroops[$g_iCmbLaboratory][3] & " Upgrade, try again.", $COLOR_ERROR) + SetLog("Something went wrong with " & $g_avLabTroops[$iSelectedUpgrade][3] & " Upgrade, try again.", $COLOR_ERROR) ClickP($aAway, 2, $DELAYLABUPGRADE3, "#0360") Return False EndIf - SetLog("Upgrade " & $g_avLabTroops[$g_iCmbLaboratory][3] & " in your laboratory started with success...", $COLOR_SUCCESS) + SetLog("Upgrade " & $g_avLabTroops[$iSelectedUpgrade][3] & " in your laboratory started with success...", $COLOR_SUCCESS) PushMsg("LabSuccess") If _Sleep($DELAYLABUPGRADE2) Then Return - $g_bAutoLabUpgradeEnable = False ;reset enable lab upgrade flag - GUICtrlSetState($g_hChkAutoLabUpgrades, $GUI_UNCHECKED) ; reset enable lab upgrade check box + ;$g_bAutoLabUpgradeEnable = False ;reset enable lab upgrade flag + ;GUICtrlSetState($g_hChkAutoLabUpgrades, $GUI_UNCHECKED) ; reset enable lab upgrade check box ClickP($aAway, 2, 0, "#0204") Return True Else - SetLog("Oops, Gems required for " & $g_avLabTroops[$g_iCmbLaboratory][3] & " Upgrade, try again.", $COLOR_ERROR) + SetLog("Oops, Gems required for " & $g_avLabTroops[$iSelectedUpgrade][3] & " Upgrade, try again.", $COLOR_ERROR) EndIf EndSelect ClickP($aAway, 2, $DELAYLABUPGRADE3, "#0205") @@ -500,8 +509,8 @@ Func ClickDragLab($iXTroop) ; drag a page to exact or nearby target position and If $iDiff = 0 Then Return True ElseIf Abs($iDiff) < 10 Then - For $i = 13 to 20 ; update x - $g_avLabTroops[$i][0] = $aiIconDefaultPOS[$i][0] - $iDiff + For $i = 13 to 24 ; update x + $g_avLabTroops[$i][0] = $g_avLabTroops[$i][0] - $iDiff If $g_bDebugSetlog Then Setlog("New icon X position of " & $g_avLabTroops[$i][3] & " : " & $g_avLabTroops[$i][0], $COLOR_DEBUG) Next Return True @@ -557,15 +566,15 @@ Func LabTroopImages($iStart, $iEnd) ; Debug function to record pixel values for If $g_bDebugImageSave Then DebugImageSave("LabUpgrade") For $i = $iStart To $iEnd DebugIconSave($g_avLabTroops[$i][3], $g_avLabTroops[$i][0], $g_avLabTroops[$i][1]) - SetLog($g_avLabTroops[$i][3], $COLOR_WARNING) - SetLog("_GetPixelColor(+47, +1): " & _GetPixelColor($g_avLabTroops[$i][0] + 47, $g_avLabTroops[$i][1] + 1, True) & ":D3D3CB =Not unlocked", $COLOR_DEBUG) - SetLog("_GetPixelColor(+68, +79): " & _GetPixelColor($g_avLabTroops[$i][0] + 68, $g_avLabTroops[$i][1] + 79, True) & ":FD877E =No Loot1", $COLOR_DEBUG) - SetLog("_GetPixelColor(+68, +82): " & _GetPixelColor($g_avLabTroops[$i][0] + 68, $g_avLabTroops[$i][1] + 84, True) & ":FD877E =No Loot2", $COLOR_DEBUG) - SetLog("_GetPixelColor(+81, +82): " & _GetPixelColor($g_avLabTroops[$i][0] + 81, $g_avLabTroops[$i][1] + 82, True) & ":XXXXXX =Loot type", $COLOR_DEBUG) - SetLog("_GetPixelColor(+76, +76): " & _GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 76, True) & ":FFFFFF =Max L", $COLOR_DEBUG) - SetLog("_GetPixelColor(+76, +80): " & _GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 80, True) & ":FFFFFF =Max L", $COLOR_DEBUG) - SetLog("_GetPixelColor(+0, +20): " & _GetPixelColor($g_avLabTroops[$i][0] + 0, $g_avLabTroops[$i][1] + 20, True) & ":838383 =Lab Upgrade", $COLOR_DEBUG) - SetLog("_GetPixelColor(+93, +20): " & _GetPixelColor($g_avLabTroops[$i][0] + 93, $g_avLabTroops[$i][1] + 20, True) & ":838383 =Lab Upgrade", $COLOR_DEBUG) - SetLog("_GetPixelColor(+8, +59): " & _GetPixelColor($g_avLabTroops[$i][0] + 23, $g_avLabTroops[$i][1] + 60, True) & ":FFC360 =Max troop", $COLOR_DEBUG) + SetDebugLog($g_avLabTroops[$i][3], $COLOR_WARNING) + SetDebugLog("_GetPixelColor(+47, +1): " & _GetPixelColor($g_avLabTroops[$i][0] + 47, $g_avLabTroops[$i][1] + 1, True) & ":D3D3CB =Not unlocked", $COLOR_DEBUG) + SetDebugLog("_GetPixelColor(+68, +79): " & _GetPixelColor($g_avLabTroops[$i][0] + 68, $g_avLabTroops[$i][1] + 79, True) & ":FD877E =No Loot1", $COLOR_DEBUG) + SetDebugLog("_GetPixelColor(+68, +82): " & _GetPixelColor($g_avLabTroops[$i][0] + 68, $g_avLabTroops[$i][1] + 84, True) & ":FD877E =No Loot2", $COLOR_DEBUG) + SetDebugLog("_GetPixelColor(+81, +82): " & _GetPixelColor($g_avLabTroops[$i][0] + 81, $g_avLabTroops[$i][1] + 82, True) & ":XXXXXX =Loot type", $COLOR_DEBUG) + SetDebugLog("_GetPixelColor(+76, +76): " & _GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 76, True) & ":FFFFFF =Max L", $COLOR_DEBUG) + SetDebugLog("_GetPixelColor(+76, +80): " & _GetPixelColor($g_avLabTroops[$i][0] + 76, $g_avLabTroops[$i][1] + 80, True) & ":FFFFFF =Max L", $COLOR_DEBUG) + SetDebugLog("_GetPixelColor(+0, +20): " & _GetPixelColor($g_avLabTroops[$i][0] + 0, $g_avLabTroops[$i][1] + 20, True) & ":838383 =Lab Upgrade", $COLOR_DEBUG) + SetDebugLog("_GetPixelColor(+93, +20): " & _GetPixelColor($g_avLabTroops[$i][0] + 93, $g_avLabTroops[$i][1] + 20, True) & ":838383 =Lab Upgrade", $COLOR_DEBUG) + SetDebugLog("_GetPixelColor(+8, +59): " & _GetPixelColor($g_avLabTroops[$i][0] + 23, $g_avLabTroops[$i][1] + 60, True) & ":FFC360 =Max troop", $COLOR_DEBUG) Next EndFunc ;==>LabTroopImages diff --git a/COCBot/functions/Village/RequestCC.au3 b/COCBot/functions/Village/RequestCC.au3 index c4d08c0b5..29627af05 100644 --- a/COCBot/functions/Village/RequestCC.au3 +++ b/COCBot/functions/Village/RequestCC.au3 @@ -28,7 +28,7 @@ Func RequestCC($ClickPAtEnd = True, $specifyText = "") EndIf ;open army overview - If Not OpenArmyOverview(True, "RequestCC()") Then Return + If $specifyText <> "IsFullClanCastle" And Not OpenArmyOverview(True, "RequestCC()") Then Return If _Sleep($DELAYREQUESTCC1) Then Return @@ -273,12 +273,12 @@ Func RemoveCastleArmy($aToRemove) If _ArrayMax($aToRemove) = 0 Then Return ; Click 'Edit Army' - If Not _ColorCheck(_GetPixelColor(806, 516, True), Hex(0xCEEF76, 6), 25) Then ; If no 'Edit Army' Button found in army tab to edit troops + If Not _CheckPixel($aButtonEditArmy, True) Then ; If no 'Edit Army' Button found in army tab to edit troops SetLog("Cannot find/verify 'Edit Army' Button in Army tab", $COLOR_WARNING) Return False ; Exit function EndIf - Click(Random(725, 825, 1), Random(507, 545, 1)) ; Click on Edit Army Button + ClickP($aButtonEditArmy, 1) ; Click Edit Army Button If Not $g_bRunState Then Return If _Sleep(500) Then Return @@ -297,7 +297,7 @@ Func RemoveCastleArmy($aToRemove) ; Click Okay & confirm Local $counter = 0 - While Not _ColorCheck(_GetPixelColor(806, 567, True), Hex(0xCEEF76, 6), 25) ; If no 'Okay' button found in army tab to save changes + While Not _CheckPixel($aButtonRemoveTroopsOK1, True) ; If no 'Okay' button found in army tab to save changes If _Sleep(200) Then Return $counter += 1 If $counter <= 5 Then ContinueLoop @@ -307,12 +307,12 @@ Func RemoveCastleArmy($aToRemove) Return False ; Exit Function WEnd - Click(Random(730, 815, 1), Random(558, 589, 1)) ; Click on 'Okay' button to save changes + ClickP($aButtonRemoveTroopsOK1, 1) ; Click on 'Okay' button to save changes If _Sleep(400) Then Return $counter = 0 - While Not _ColorCheck(_GetPixelColor(508, 428, True), Hex(0xFFFFFF, 6), 30) ; If no 'Okay' button found to verify that we accept the changes + While Not _CheckPixel($aButtonRemoveTroopsOK2, True) ; If no 'Okay' button found to verify that we accept the changes If _Sleep(200) Then Return $counter += 1 If $counter <= 5 Then ContinueLoop @@ -321,7 +321,7 @@ Func RemoveCastleArmy($aToRemove) Return False ; Exit function WEnd - Click(Random(445, 583, 1), Random(402, 455, 1)) ; Click on 'Okay' button to Save changes... Last button + ClickP($aButtonRemoveTroopsOK2, 1) ; Click on 'Okay' button to Save changes... Last button SetLog("Clan Castle Troops/Spells Removed", $COLOR_SUCCESS) If _Sleep(200) Then Return diff --git a/COCBot/functions/Village/SwitchAccount.au3 b/COCBot/functions/Village/SwitchAccount.au3 index 07fbcb7f3..518062875 100644 --- a/COCBot/functions/Village/SwitchAccount.au3 +++ b/COCBot/functions/Village/SwitchAccount.au3 @@ -170,8 +170,8 @@ Func CheckSwitchAcc() SetDebugLog("- Current Account: " & $g_asProfileName[$g_iCurAccount] & " number: " & $g_iCurAccount + 1) SetDebugLog("- Next Account: " & $g_asProfileName[$g_iNextAccount] & " number: " & $g_iNextAccount + 1) - ; Check if the next account is PBT - If $g_abPBActive[$g_iNextAccount] Then + ; Check if the next account is PBT and IF the remain train time is more than 2 minutes + If $g_abPBActive[$g_iNextAccount] And _DateDiff("n", _NowCalc(), $g_asTrainTimeFinish[$g_iNextAccount]) > 2 Then SetLog("Account " & $g_iNextAccount + 1 & " is in a Personal Break Time!", $COLOR_INFO) SetSwitchAccLog(" - Account " & $g_iNextAccount + 1 & " is in PTB") $g_iNextAccount = $g_iNextAccount + 1 diff --git a/COCBot/functions/Village/SwitchAccountVariablesReload.au3 b/COCBot/functions/Village/SwitchAccountVariablesReload.au3 index 57c30b27a..2e66f31f2 100644 --- a/COCBot/functions/Village/SwitchAccountVariablesReload.au3 +++ b/COCBot/functions/Village/SwitchAccountVariablesReload.au3 @@ -47,7 +47,7 @@ Func SwitchAccountVariablesReload($sType = "Load") Static $aiSmartZapGain = $aiZero, $aiNumEQSpellsUsed = $aiZero, $aiNumLSpellsUsed = $aiZero ; smart zap ; Lab time - Static $asLabUpgradeTime = $asEmpty, $aiLabStatus = $aiZero + Static $asLabUpgradeTime = $asEmpty, $aiLabStatus = $aiZero, $aiLabElixirCost = $aiZero, $aiLabDElixirCost = $aiZero ; First time switch account Switch $sType @@ -109,6 +109,8 @@ Func SwitchAccountVariablesReload($sType = "Load") ; Lab time $asLabUpgradeTime = $asEmpty + $aiLabElixirCost = $aiZero + $aiLabDElixirCost = $aiZero $aiLabStatus = $aiZero Case "Save" @@ -166,6 +168,8 @@ Func SwitchAccountVariablesReload($sType = "Load") ; Lab time $asLabUpgradeTime[$g_iCurAccount] = $g_sLabUpgradeTime + $aiLabElixirCost[$g_iCurAccount] = $g_iLaboratoryElixirCost + $aiLabDElixirCost[$g_iCurAccount] = $g_iLaboratoryDElixirCost If GUICtrlGetState($g_hPicLabGreen) = $GUI_ENABLE + $GUI_SHOW Then $aiLabStatus[$g_iCurAccount] = 1 ElseIf GUICtrlGetState($g_hPicLabRed) = $GUI_ENABLE + $GUI_SHOW Then @@ -229,6 +233,8 @@ Func SwitchAccountVariablesReload($sType = "Load") ; Lab time $g_sLabUpgradeTime = $asLabUpgradeTime[$g_iCurAccount] + $g_iLaboratoryElixirCost = $aiLabElixirCost[$g_iCurAccount] + $g_iLaboratoryDElixirCost = $aiLabDElixirCost[$g_iCurAccount] Local $Counter = 0 For $i = $g_hPicLabGray To $g_hPicLabRed GUICtrlSetState($i, $GUI_HIDE) diff --git a/COCBot/functions/Village/UpgradeHeroes.au3 b/COCBot/functions/Village/UpgradeHeroes.au3 index 97ceddf7c..30c0afbdd 100644 --- a/COCBot/functions/Village/UpgradeHeroes.au3 +++ b/COCBot/functions/Village/UpgradeHeroes.au3 @@ -37,45 +37,49 @@ Func UpgradeHeroes() If $g_bUpgradeWardenEnable Then If Not isInsideDiamond($g_aiWardenAltarPos) Then LocateWardenAltar() If $g_aiWardenAltarPos[0] = -1 Or $g_aiWardenAltarPos[1] = -1 Then LocateWardenAltar() - EndIf - - ;Check if Auto Lab Upgrade is enabled and if a Dark Troop is selected for Upgrade. If yes, it has priority! - If $g_bAutoLabUpgradeEnable And $g_iCmbLaboratory >= 20 And $g_iCmbLaboratory <= 30 Then - SetLog("Laboratory needs DE to Upgrade : " & $g_avLabTroops[$g_iCmbLaboratory][3]) - SetLog("Skipping the Heroes Upgrade!") - Return + SaveConfig() EndIf SetLog("Upgrading Heroes", $COLOR_INFO) - ; ### Archer Queen ### - If $g_bUpgradeQueenEnable And BitAND($g_iHeroUpgradingBit, $eHeroQueen) <> $eHeroQueen Then - If Not getBuilderCount() Then Return ; update builder data, return if problem - If _Sleep($DELAYRESPOND) Then Return - If $g_iFreeBuilderCount < 1 + ($g_bUpgradeWallSaveBuilder ? 1 : 0) Then - SetLog("Not enough Builders available to upgrade the Archer Queen") - Return + ;Check if Auto Lab Upgrade is enabled and if a Dark Troop/Spell is selected for Upgrade. If yes, it has priority! + If $g_bAutoLabUpgradeEnable And $g_iLaboratoryDElixirCost > 0 Then + SetLog("Laboratory needs DE to Upgrade : " & $g_iLaboratoryDElixirCost) + SetLog("Skipping the Queen and King Upgrade!") + Else + ; ### Archer Queen ### + If $g_bUpgradeQueenEnable And BitAND($g_iHeroUpgradingBit, $eHeroQueen) <> $eHeroQueen Then + If Not getBuilderCount() Then Return ; update builder data, return if problem + If _Sleep($DELAYRESPOND) Then Return + If $g_iFreeBuilderCount < 1 + ($g_bUpgradeWallSaveBuilder ? 1 : 0) Then + SetLog("Not enough Builders available to upgrade the Archer Queen") + Return + EndIf + QueenUpgrade() + + If _Sleep($DELAYUPGRADEHERO1) Then Return EndIf - QueenUpgrade() - - If _Sleep($DELAYUPGRADEHERO1) Then Return - EndIf - - ; ### Barbarian King ### - If $g_bUpgradeKingEnable And BitAND($g_iHeroUpgradingBit, $eHeroKing) <> $eHeroKing Then - If Not getBuilderCount() Then Return ; update builder data, return if problem - If _Sleep($DELAYRESPOND) Then Return - If $g_iFreeBuilderCount < 1 + ($g_bUpgradeWallSaveBuilder ? 1 : 0) Then - SetLog("Not enough Builders available to upgrade the Barbarian King") - Return + + ; ### Barbarian King ### + If $g_bUpgradeKingEnable And BitAND($g_iHeroUpgradingBit, $eHeroKing) <> $eHeroKing Then + If Not getBuilderCount() Then Return ; update builder data, return if problem + If _Sleep($DELAYRESPOND) Then Return + If $g_iFreeBuilderCount < 1 + ($g_bUpgradeWallSaveBuilder ? 1 : 0) Then + SetLog("Not enough Builders available to upgrade the Barbarian King") + Return + EndIf + KingUpgrade() + + If _Sleep($DELAYUPGRADEHERO1) Then Return EndIf - KingUpgrade() - - If _Sleep($DELAYUPGRADEHERO1) Then Return EndIf ; ### Grand Warden ### - If $g_bUpgradeWardenEnable And BitAND($g_iHeroUpgradingBit, $eHeroWarden) <> $eHeroWarden Then + ;Check if Auto Lab Upgrade is enabled and if a Elixir Troop/Spell is selected for Upgrade. If yes, it has priority! + If $g_bAutoLabUpgradeEnable And $g_iLaboratoryElixirCost > 0 Then + SetLog("Laboratory needs Elixir to Upgrade : " & $g_iLaboratoryElixirCost) + SetLog("Skipping the Warden Upgrade!") + ElseIf $g_bUpgradeWardenEnable And BitAND($g_iHeroUpgradingBit, $eHeroWarden) <> $eHeroWarden Then If Not getBuilderCount() Then Return ; update builder data, return if problem If _Sleep($DELAYRESPOND) Then Return If $g_iFreeBuilderCount < 1 + ($g_bUpgradeWallSaveBuilder ? 1 : 0) Then diff --git a/COCBot/functions/Village/UpgradeWall.au3 b/COCBot/functions/Village/UpgradeWall.au3 index ffa5a6f9b..e7c363534 100644 --- a/COCBot/functions/Village/UpgradeWall.au3 +++ b/COCBot/functions/Village/UpgradeWall.au3 @@ -317,19 +317,16 @@ Func SkipWallUpgrade() ; Dynamic Upgrades ;;;;;;;;;;;;;;;;;;;;;;;;;;;##### Verify the Upgrade troop kind in Laboratory , if is elixir Spell/Troop , the Lab have priority #####;;;;;;;;;;;;;;;;;;;;;;;;;;;; Local $bMinWallElixir = Number($g_aiCurrentLoot[$eLootElixir]) > ($g_iWallCost + Number($g_iLaboratoryElixirCost) + Number($g_iUpgradeWallMinElixir)) ; Check if enough Elixir - If $g_bAutoLabUpgradeEnable And $g_iCmbLaboratory >= 1 And Not ($g_iCmbLaboratory >= 20 And $g_iCmbLaboratory <= 30) And Not $bMinWallElixir Then - Local $sName = $g_avLabTroops[$g_iCmbLaboratory][3] - Local $LabElixirNeeded = $g_iLaboratoryElixirCost - If $LabElixirNeeded = 0 Then $LabElixirNeeded = "unknown" ; trap error condition of unknown value + If $g_bAutoLabUpgradeEnable And $g_iLaboratoryElixirCost > 0 And Not $bMinWallElixir Then Switch $g_iUpgradeWallLootType Case 0 ; Using gold ; do nothing Case 1 ; Using elixir - SetLog("Laboratory needs " & $LabElixirNeeded & " Elixir to Upgrade: " & $sName, $COLOR_SUCCESS1) + SetLog("Laboratory needs Elixir to Upgrade : " & $g_iLaboratoryElixirCost, $COLOR_SUCCESS1) SetLog("Skipping Wall Upgrade", $COLOR_SUCCESS1) Return True Case 2 ; Using gold and elixir - SetLog("Laboratory needs " & $LabElixirNeeded & " Elixir to Upgrade: " & $sName, $COLOR_SUCCESS1) + SetLog("Laboratory needs Elixir to Upgrade : " & $g_iLaboratoryElixirCost, $COLOR_SUCCESS1) SetLog("Using Gold only for Wall Upgrade", $COLOR_SUCCESS1) $g_iUpgradeWallLootType = 0 EndSwitch diff --git a/Languages/Arabic.ini b/Languages/Arabic.ini index 599d435746a7c08e9edd87850360b854efb50489..afb916c4f15e82ed55e743929cfe50c8a0195077 100644 GIT binary patch delta 34633 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 CBIq#y diff --git a/Languages/English.ini b/Languages/English.ini index 7fb98bc7f..f9a0f84de 100644 --- a/Languages/English.ini +++ b/Languages/English.ini @@ -124,6 +124,7 @@ Func_btnHide_False=Show Func_btnHide_True=Hide [MBR Global GUI Design] AM=AM +Any=Any Clear_set_row_of_boxes=This button will clear or set the entire row of boxes Day=Day days=days @@ -284,6 +285,7 @@ ChkCustomDropOrderEnable_Info_02=Will not have effect on CSV Scripted Attack! It ChkCustomDropOrderEnable_Info_03=For Live and Dead Bases ChkTHSnipeBeforeEnable=Snipe TH External first ChkTHSnipeBeforeEnable_Info_01=If TH is external start with a TH Snipe +Chk-Use-Bat_Info_01=Use your Bats Spells when Attacking... Chk-Use-Clan Castle_Info_01=Drop your Clan Castle in battle if it contains troops. Chk-Use-Clone_Info_01=Use your Clone Spells when Attacking... Chk-Use-Earthquake_Info_01=Use your Earthquake Spells when Attacking... @@ -298,7 +300,7 @@ Chk-Use-Poison_Info_01=Use your Poison Spells when Attacking... Chk-Use-Queen_Info_01=Use your Queen when Attacking... Chk-Use-Queen_Info_02=Enabled with TownHall 9 and higher Chk-Use-Rage_Info_01=Use your Rage Spells when Attacking... -Chk-Use-Skeleton_Info_01=Use your Skeletons Spells when Attacking... +Chk-Use-Skeleton_Info_01=Use your Bats Spells when Attacking... Chk-Use-Warden_Info_01=Use your Warden when Attacking... Chk-Use-Warden_Info_02=Enabled with Townhall 11 Cmb-Algorithm_Item_01=Standard Attack @@ -325,6 +327,7 @@ Cmb-SelectTroop_Item_11=B+A+Minion Cmb-Siege_Item_01=Castle only Cmb-Siege_Item_02=Wall Wrecker Cmb-Siege_Item_03=Battle Blimp +Cmb-Siege_Item_04=Stone Slammer CmbTHSnipeBeforeScript_Info_01=You can add/edit CSV settings in the CSV\THSnipe folder Group_01=Attack with Group_02=TH Snipe @@ -492,6 +495,7 @@ TxtWaitForClanCastleSpell=And TxtWardenWait_Info_01=Wait for Warden to be ready before attacking... TxtWardenWait_Info_02=Enabled with TownHall 11 [MBR Global GUI Design Names Spells] +TxtBatSpells=Bat Spell TxtCloneSpells=Clone Spell TxtEarthQuakeSpells=EarthQuake Spell TxtFreezeSpells=Freeze Spell @@ -499,9 +503,10 @@ TxtHasteSpells=Haste Spell TxtHealingSpells=Healing Spell TxtJumpSpells=Jump Spell TxtLightningSpells=Lightning Spell -TxtListOfSpells=Lightning|Heal|Rage|Jump|Freeze|Clone|Poison|Earthquake|Haste|Skeleton|Any +TxtListOfSpells=Lightning|Heal|Rage|Jump|Freeze|Clone|Poison|Earthquake|Haste|Skeleton|Bat|Any TxtPoisonSpells=Poison Spell TxtRageSpells=Rage Spell +TxtShortBatSpells=Bat TxtShortCloneSpells=Clone TxtShortEarthquakeSpells=EarthQuake TxtShortFreezeSpells=Freeze @@ -532,11 +537,14 @@ TxtGoblins=Goblins TxtGolems=Golems TxtHealers=Healers TxtHogRiders=Hog Riders +TxtIceGolems=Ice Golems TxtLavaHounds=Lava Hounds -TxtListOfTroops=Barbarian|Archer|Giant|Goblin|Wall Breaker|Balloon|Wizard|Healer|Dragon|Pekka|Baby Dragon|Miner|Electro Dragon|Minion|Hog Rider|Valkyrie|Golem|Witch|Lava Hound|Bowler|Any +TxtListOfTroops=Barbarian|Archer|Giant|Goblin|Wall Breaker|Balloon|Wizard|Healer|Dragon|Pekka|Baby Dragon|Miner|Electro Dragon|Minion|Hog Rider|Valkyrie|Golem|Witch|Lava Hound|Bowler|Ice Golem|Any TxtMiners=Miners TxtMinions=Minions TxtPekkas=Pekkas +TxtStoneSlammer=Stone Slammer +TxtStoneSlammers=Stone Slammers TxtValkyries=Valkyries TxtWallBreakers=Wall Breakers TxtWallWreckers=Wall Wreckers @@ -584,6 +592,7 @@ ChkCollectorLevel_Info_02=Full ChkCollectorLevel10_Info_01=for level 10 elixir collectors during dead base detection. ChkCollectorLevel11_Info_01=for level 11 elixir collectors during dead base detection. ChkCollectorLevel12_Info_01=for level 12 elixir collectors during dead base detection. +ChkCollectorLevel13_Info_01=for level 13 elixir collectors during dead base detection. ChkCollectorLevel6_Info_01=for level 6 elixir collectors during dead base detection. ChkCollectorLevel7_Info_01=for level 7 elixir collectors during dead base detection. ChkCollectorLevel8_Info_01=for level 8 elixir collectors during dead base detection. @@ -599,6 +608,8 @@ LblCollectorLevel11=Lvl 11. Must be > LblCollectorLevel11_Info_01=Select how full a level 11 collector needs to be for it to be marked "dead" LblCollectorLevel12=Lvl 12. Must be > LblCollectorLevel12_Info_01=Select how full a level 12 collector needs to be for it to be marked "dead" +LblCollectorLevel13=Lvl 13. Must be > +LblCollectorLevel13_Info_01=Select how full a level 13 collector needs to be for it to be marked "dead" LblCollectorLevel6=Lvl 6. Must be > LblCollectorLevel6_Info_01=Select how full a level 6 collector needs to be for it to be marked "dead" LblCollectorLevel7=Lvl 7. Must be > @@ -1233,6 +1244,8 @@ ChkClanGamesPurge=Purge Versus Battles Events ChkClanGamesStopBeforeReachAndPurge=Stop before completing your limit and only Purge ChkClanGamesTimeRemaining=Time Remaining ChkClanGamesYourScore=Your Score +ChkCleanBBYard=Remove Obstacles +ChkCleanBBYard_Info_01=Check this to automatically clear Yard from Trees, Trunks, etc. ChkCleanYard=Remove Obstacles ChkCleanYard_Info_01=Check this to automatically clear Yard from Trees, Trunks, etc. ChkCollect=Collect Resources && Loot Cart @@ -1564,6 +1577,9 @@ TxtBlacklistTroop_Item_30=no air\r\nair no\r\nonly\r\njust TxtBlacklistTroop_Item_31=no electro dragon\r\nelectrodrag no\r\nedrag no TxtBlacklistTroop_Item_32=no wreckers\r\nsiege no TxtBlacklistTroop_Item_33=no blimps\r\nsiege no +TxtBlacklistTroop_Item_34=no Bat\r\nBat no +TxtBlacklistTroop_Item_35=no slammers\r\nsiege no +TxtBlacklistTroop_Item_36=no ice golem\r\nice golem no TxtDonate=Donate TxtDonateAll=Donate to All TxtDonateQueueSpell=Queued spell only @@ -1604,8 +1620,10 @@ TxtDonateTroop_Item_28=skeleton|skel TxtDonateTroop_Item_29=ground support\r\nground TxtDonateTroop_Item_30=air support\r\nany air TxtDonateTroop_Item_31=electro dragon\r\nelectrodrag\r\nedrag -TxtDonateTroop_Item_32=wall wreckers\r\nsieges\r\nwreckers +TxtDonateTroop_Item_32=stone slammers\r\nsieges\r\nslammers TxtDonateTroop_Item_33=battle blimps\r\nsieges\r\nblimps +TxtDonateTroop_Item_34=Bat +TxtDonateTroop_Item_35=ice golem\r\nice golems TxtGeneralBlacklist_Info_01=General Blacklist for donation requests TxtGeneralBlacklist_Item_01=clan war\r\nwar\r\ncw TxtIgnoreAll=This will also ignore ALL keywords. @@ -2024,4 +2042,5 @@ txt-TxtInsidePercentage=Percentage to force attack in one side only txt-TxtOutsidePercentage=Percentage to force attack in 4 sides [MBR Global GUI Design Names Siege Machines] TxtBattleBlimp=Battle Blimp +TxtStoneSlammer=Stone Slammer TxtWallWrecker=Wall Wrecker diff --git a/Languages/German.ini b/Languages/German.ini index e49286cbcd01dec3a212abaf61cbf9f5c2f25ca8..2460417138fd4657c4e430f7a672e4427e78fa7f 100644 GIT binary patch delta 2615 zcmcguL2MgE6#cu~R4OC^0#-=XN~@r>A!!W34RA5SF3_~1Y8nS3B3~Tai7m&mvE3vz zMm|8rffHI)15(9>QzaxKS;Ch}9DqA;kII2?D8Dwhhac0Kd|pZEWN z|IduS-5=PwHMny(J`j_2`ADLof19oNHxVZ;DP{d;g)Y4(RmqAAeMzoM1tX}W2B|9v zDMPo0hqFz|VYZG@4Eh?Z(o&E-B&!mZuot^A++5oD`YCVg=1K46PmYZwU{r#d@CksV zq=+XgmF8bJzgiqKeh&JGwtXM)+}z&1V>RA|n<~(*%1T#IQK4oPfz{y0gi@DT_(;KD zUFPw-idkJQBe^2dsmnV^GK=SimS2FKiLowo7|{>sb$J_WE5OakhhZ#EAy)#;V#H85 zPH5R0#wO9aVb~kF*BE(ZcHXbQhnipB`@Zk&B@mdEi||K?B4DFpWbQ$!cVREu#lQmM zD&Z;X6?9aQW&O?L%h+R(q;V#LO& zz=ewtx&2HJbH-|9AZKOG7Nv}h$5kLoO(*Ts-rR#hm9wqqJon-G=06Y5oOppQxiL2U z0K$N|0(kZ<0ki76K5J4(9ordhbRuy<9w~CM%dYDPT}>kO-TCxp;DTiCs*KKsS!qWa z%do=oxOf9i5$F{u4C!UAjQUBBs+euP*g9idOXJ?BKb}&zC#=B})y`?8niJMGL zHtl{jKWV+8j!#-|dgaTA`;a0!xjQ6WG#~FRnoCmypYbxb9Q`2VG_iSFj6MHnRvxClV f?xob}jQ_}60ot#GUPI&bmMvDV2=XXyBUTAUt) delta 110 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∋216;!&6 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 $eBarb And $iIndex <= $eBowl Then +If $iIndex >= $eBarb And $iIndex <= $eIceG Then Return $iQuantity > 1 ? $g_asTroopNamesPlural[$iIndex] : $g_asTroopNames[$iIndex] -ElseIf $iIndex >= $eLSpell And $iIndex <= $eSkSpell Then +ElseIf $iIndex >= $eLSpell And $iIndex <= $eBtSpell Then Return $iQuantity > 1 ? $g_asSpellNames[$iIndex - $eLSpell] & "Spells" : $g_asSpellNames[$iIndex - $eLSpell] & "Spell" ElseIf $iIndex >= $eKing And $iIndex <= $eWarden Then Return $g_asHeroNames[$iIndex - $eKing] -ElseIf $iIndex >= $eWallW And $iIndex <= $eBattleB Then +ElseIf $iIndex >= $eWallW And $iIndex <= $eStoneS Then Return $g_asSiegeMachineNames[$iIndex - $eWallW] ElseIf $iIndex = $eCastle Then Return "Clan Castle" @@ -2761,14 +2761,14 @@ Global $g_bChkTreasuryCollect = False Global $g_iTxtTreasuryGold = 0 Global $g_iTxtTreasuryElixir = 0 Global $g_iTxtTreasuryDark = 0 -Global $g_bChkCollectBuilderBase = False, $g_bChkStartClockTowerBoost = False, $g_bChkCTBoostBlderBz = False +Global $g_bChkCollectBuilderBase = False, $g_bChkStartClockTowerBoost = False, $g_bChkCTBoostBlderBz = False, $g_bChkCleanBBYard = False Global $g_bRequestTroopsEnable = False Global $g_sRequestTroopsText = "" Global $g_abRequestCCHours[24] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] Global $g_abRequestType[3] = [True, True, False] Global $g_iRequestCountCCTroop = 0, $g_iRequestCountCCSpell = 0 -Global $g_aiCCTroopsExpected[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiCCSpellsExpected[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiCCTroopsExpected[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiCCSpellsExpected[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Global $g_aiClanCastleTroopWaitType[3], $g_aiClanCastleTroopWaitQty[3] Global $g_aiClanCastleSpellWaitType[2], $g_aiClanCastleSpellWaitQty[2] Global $g_bChkDonate = True @@ -2776,14 +2776,14 @@ Global $g_abChkDonateQueueOnly[2] Global Enum $eCustomA = $eTroopCount, $eCustomB = $eTroopCount + 1 Global Enum $eCustomC = $eTroopCount + 2, $eCustomD = $eTroopCount + 3 Global Const $g_iCustomDonateConfigs = 4 -Global $g_abChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] -Global $g_abChkDonateAllTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] -Global $g_asTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] -Global $g_asTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] -Global $g_abChkDonateSpell[$eSpellCount] = [False, False, False, False, False, False, False, False, False, False] -Global $g_abChkDonateAllSpell[$eSpellCount] = [False, False, False, False, False, False, False, False, False, False] -Global $g_asTxtDonateSpell[$eSpellCount] = ["", "", "", "", "", "", "", "", "", ""] -Global $g_asTxtBlacklistSpell[$eSpellCount] = ["", "", "", "", "", "", "", "", "", ""] +Global $g_abChkDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] +Global $g_abChkDonateAllTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] +Global $g_asTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] +Global $g_asTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeMachineCount] = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] +Global $g_abChkDonateSpell[$eSpellCount] = [False, False, False, False, False, False, False, False, False, False, False] +Global $g_abChkDonateAllSpell[$eSpellCount] = [False, False, False, False, False, False, False, False, False, False, False] +Global $g_asTxtDonateSpell[$eSpellCount] = ["", "", "", "", "", "", "", "", "", "", ""] +Global $g_asTxtBlacklistSpell[$eSpellCount] = ["", "", "", "", "", "", "", "", "", "", ""] Global $g_aiDonateCustomTrpNumA[3][2] = [[0, 0], [0, 0], [0, 0]], $g_aiDonateCustomTrpNumB[3][2] = [[0, 0], [0, 0], [0, 0]] Global $g_aiDonateCustomTrpNumC[3][2] = [[0, 0], [0, 0], [0, 0]], $g_aiDonateCustomTrpNumD[3][2] = [[0, 0], [0, 0], [0, 0]] Global $g_bChkExtraAlphabets = False @@ -2837,22 +2837,22 @@ Global $g_abNotifyScheduleHours[24] = [False, False, False, False, False, False, Global $g_abNotifyScheduleWeekDays[7] = [False, False, False, False, False, False, False] Global $g_bQuickTrainEnable = False Global $g_bQuickTrainArmy[3] = [True, False, False] -Global $g_aiArmyCompTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiArmyCompSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiArmyCompSiegeMachine[$eSiegeMachineCount] = [0, 0] -Global $g_aiTrainArmyTroopLevel[$eTroopCount] = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiTrainArmySpellLevel[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -Global $g_aiTrainArmySiegeMachineLevel[$eSiegeMachineCount] = [0, 0] +Global $g_aiArmyCompTroops[$eTroopCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiArmyCompSpells[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiArmyCompSiegeMachine[$eSiegeMachineCount] = [0, 0, 0] +Global $g_aiTrainArmyTroopLevel[$eTroopCount] = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiTrainArmySpellLevel[$eSpellCount] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +Global $g_aiTrainArmySiegeMachineLevel[$eSiegeMachineCount] = [0, 0, 0] Global $g_iTrainArmyFullTroopPct = 100 Global $g_bTotalCampForced = False, $g_iTotalCampForcedValue = 200 Global $g_bForceBrewSpells = False Global $g_iTotalSpellValue = 0 Global $g_bDoubleTrain Global $g_abBoostBarracksHours[24] = [True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True] -Global $g_bCustomTrainOrderEnable = False, $g_aiCmbCustomTrainOrder[$eTroopCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] -Global $g_bCustomBrewOrderEnable = False, $g_aiCmbCustomBrewOrder[$eSpellCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] -Global Enum $eTroopBarbarianS, $eTroopArcherS, $eTroopGiantS, $eTroopGoblinS, $eTroopWallBreakerS, $eTroopBalloonS, $eTroopWizardS, $eTroopHealerS, $eTroopDragonS, $eTroopPekkaS, $eTroopBabyDragonS, $eTroopMinerS, $eTroopElectroDragons, $eTroopMinionS, $eTroopHogRiderS, $eTroopValkyrieS, $eTroopGolemS, $eTroopWitchS, $eTroopLavaHoundS, $eTroopBowlerS, $eHeroeS, $eCCS, $eDropOrderCount -Global $g_bCustomDropOrderEnable = False, $g_aiCmbCustomDropOrder[$eDropOrderCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] +Global $g_bCustomTrainOrderEnable = False, $g_aiCmbCustomTrainOrder[$eTroopCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] +Global $g_bCustomBrewOrderEnable = False, $g_aiCmbCustomBrewOrder[$eSpellCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] +Global Enum $eTroopBarbarianS, $eTroopArcherS, $eTroopGiantS, $eTroopGoblinS, $eTroopWallBreakerS, $eTroopBalloonS, $eTroopWizardS, $eTroopHealerS, $eTroopDragonS, $eTroopPekkaS, $eTroopBabyDragonS, $eTroopMinerS, $eTroopElectroDragons, $eTroopMinionS, $eTroopHogRiderS, $eTroopValkyrieS, $eTroopGolemS, $eTroopWitchS, $eTroopLavaHoundS, $eTroopBowlerS, $eTroopIceGolemS, $eHeroeS, $eCCS, $eDropOrderCount +Global $g_bCustomDropOrderEnable = False, $g_aiCmbCustomDropOrder[$eDropOrderCount] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] Global $g_bCloseWhileTrainingEnable = True, $g_bCloseWithoutShield = False, $g_bCloseEmulator = False, $g_bSuspendComputer = False, $g_bCloseRandom = False, $g_bCloseExactTime = False, $g_bCloseRandomTime = True, $g_iCloseRandomTimePercent = 10, $g_iCloseMinimumTime = 2 Global $g_iTrainClickDelay = 40 Global $g_bTrainAddRandomDelayEnable = False, $g_iTrainAddRandomDelayMin = 5, $g_iTrainAddRandomDelayMax = 60 @@ -2873,7 +2873,7 @@ Global $g_abFilterMaxMortarEnable[$g_iModeCount] = [False, False, False], $g_abF Global $g_aiFilterMaxMortarLevel[$g_iModeCount] = [5, 5, 0], $g_aiFilterMaxWizTowerLevel[$g_iModeCount] = [4, 4, 0], $g_aiFilterMaxAirDefenseLevel[$g_iModeCount] = [0, 0, 0], $g_aiFilterMaxXBowLevel[$g_iModeCount] = [0, 0, 0], $g_aiFilterMaxInfernoLevel[$g_iModeCount] = [0, 0, 0], $g_aiFilterMaxEagleLevel[$g_iModeCount] = [0, 0, 0] Global $g_abFilterMeetOneConditionEnable[$g_iModeCount] = [False, False, False] Global $g_aiAttackAlgorithm[$g_iModeCount] = [0, 0, 0], $g_aiAttackTroopSelection[$g_iModeCount + 3] = [0, 0, 0, 0, 0, 0], $g_aiAttackUseHeroes[$g_iModeCount] = [0, 0, 0], $g_abAttackDropCC[$g_iModeCount] = [0, 0, 0] , $g_aiAttackUseSiege[$g_iModeCount] = [0, 0, 0] -Global $g_abAttackUseLightSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseHealSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseRageSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseJumpSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseFreezeSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseCloneSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUsePoisonSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseEarthquakeSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseHasteSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseSkeletonSpell[$g_iModeCount] = [0, 0, 0] +Global $g_abAttackUseLightSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseHealSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseRageSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseJumpSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseFreezeSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseCloneSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUsePoisonSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseEarthquakeSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseHasteSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseSkeletonSpell[$g_iModeCount] = [0, 0, 0], $g_abAttackUseBatSpell[$g_iModeCount] = [0, 0, 0] Global $g_bTHSnipeBeforeEnable[$g_iModeCount] = [False, False, False], $g_iTHSnipeBeforeTiles[$g_iModeCount] = [0, 0, 0], $g_iTHSnipeBeforeScript[$g_iModeCount] = [0, 0, 0] Global $g_aiAttackStdDropOrder[$g_iModeCount + 1] = [0, 0, 0, 0], $g_aiAttackStdDropSides[$g_iModeCount + 1] = [3, 3, 0, 1], $g_aiAttackStdUnitDelay[$g_iModeCount + 1] = [4, 4, 0, 4], $g_aiAttackStdWaveDelay[$g_iModeCount + 1] = [4, 4, 0, 4], $g_abAttackStdRandomizeDelay[$g_iModeCount + 1] = [True, True, False, True], $g_abAttackStdSmartAttack[$g_iModeCount + 3] = [True, True, False, True, False, False], $g_aiAttackStdSmartDeploy[$g_iModeCount + 3] = [0, 0, 0, 0, 0, 0] Global $g_abAttackStdSmartNearCollectors[$g_iModeCount + 3][3] = [[False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False]] @@ -2896,8 +2896,8 @@ Global $g_iMilkingAttackStructureOrder = 1, $g_bMilkingAttackCheckStructureDestr Global $g_bMilkAttackAfterTHSnipeEnable = False, $g_iMilkFarmTHMaxTilesFromBorder = 1, $g_sMilkFarmAlgorithmTh = "Queen&GobTakeTH", $g_bMilkFarmSnipeEvenIfNoExtractorsFound = False, $g_bMilkAttackAfterScriptedAtkEnable = False, $g_sMilkAttackCSVscript = "Barch four fingers" Global $g_bMilkFarmForceToleranceEnable = False, $g_iMilkFarmForceToleranceNormal = 31, $g_iMilkFarmForceToleranceBoosted = 31, $g_iMilkFarmForceToleranceDestroyed = 31 Global $g_iTxtInsidePercentage = 0 , $g_iTxtOutsidePercentage = 0 , $g_bDebugSmartFarm = False -Global $g_abCollectorLevelEnabled[13] = [-1, -1, -1, -1, -1, -1, True, True, True, True, True, True, True] -Global $g_aiCollectorLevelFill[13] = [-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1] +Global $g_abCollectorLevelEnabled[14] = [-1, -1, -1, -1, -1, -1, True, True, True, True, True, True, True, True] +Global $g_aiCollectorLevelFill[14] = [-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1] Global $g_bCollectorFilterDisable = False Global $g_iCollectorMatchesMin = 3 Global $g_iCollectorToleranceOffset = 0 @@ -2965,6 +2965,7 @@ Global $g_aiWardenAltarPos[2] = [-1, -1] Global $g_aiLaboratoryPos[2] = [-1, -1] Global $g_aiClanCastlePos[2] = [-1, -1] Global $g_CurrentCampUtilization = 0, $g_iTotalCampSpace = 0 +Global $g_iLaboratoryElixirCost = 0, $g_iLaboratoryDElixirCost = 0 Global $g_sLabUpgradeTime = "" Global $g_iWallCost = 0 Global $g_iHeroWaitAttackNoBit[$g_iModeCount][3] @@ -4720,6 +4721,7 @@ IniReadS($g_iTxtTreasuryGold, $g_sProfileConfigPath, "other", "minTreasurygold", IniReadS($g_iTxtTreasuryElixir, $g_sProfileConfigPath, "other", "minTreasuryelixir", 0, "int") IniReadS($g_iTxtTreasuryDark, $g_sProfileConfigPath, "other", "minTreasurydark", 0, "int") IniReadS($g_bChkCollectBuilderBase, $g_sProfileConfigPath, "other", "ChkCollectBuildersBase", False, "Bool") +IniReadS($g_bChkCleanBBYard, $g_sProfileConfigPath, "other", "ChkCleanBBYard", False, "Bool") IniReadS($g_bChkStartClockTowerBoost, $g_sProfileConfigPath, "other", "ChkStartClockTowerBoost", False, "Bool") IniReadS($g_bChkCTBoostBlderBz, $g_sProfileConfigPath, "other", "ChkCTBoostBlderBz", False, "Bool") IniReadS($g_iChkBBSuggestedUpgrades, $g_sProfileConfigPath, "other", "ChkBBSuggestedUpgrades", $g_iChkBBSuggestedUpgrades, "Int") @@ -4790,7 +4792,7 @@ IniReadS($g_abChkDonateQueueOnly[0], $g_sProfileConfigPath, "donate", "chkDonate IniReadS($g_abChkDonateQueueOnly[1], $g_sProfileConfigPath, "donate", "chkDonateQueueOnly[1]", True, "Bool") For $i = 0 To $eTroopCount - 1 + $g_iCustomDonateConfigs Local $sIniName = "" -If $i >= $eTroopBarbarian And $i <= $eTroopBowler Then +If $i >= $eTroopBarbarian And $i <= $eTroopIceGolem Then $sIniName = StringReplace($g_asTroopNamesPlural[$i], " ", "") ElseIf $i = $eCustomA Then $sIniName = "CustomA" @@ -4844,6 +4846,8 @@ $g_asTxtDonateTroop[$eTroopLavaHound] = StringReplace(IniRead($g_sProfileConfigP $g_asTxtBlacklistTroop[$eTroopLavaHound] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistLavaHounds", "no lavahound|lavahound no|no lava|lava no|nohound|hound no"), "|", @CRLF) $g_asTxtDonateTroop[$eTroopBowler] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateBowlers", "bowler|bowl"), "|", @CRLF) $g_asTxtBlacklistTroop[$eTroopBowler] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistBowlers", "no bowler|bowl no"), "|", @CRLF) +$g_asTxtDonateTroop[$eTroopIceGolem] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateIceGolems", "ice golem|ice golems"), "|", @CRLF) +$g_asTxtBlacklistTroop[$eTroopIceGolem] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistIceGolems", "no ice golem|ice golem no"), "|", @CRLF) $g_asTxtDonateTroop[$eCustomA] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateCustomA", "ground support|ground"), "|", @CRLF) $g_asTxtBlacklistTroop[$eCustomA] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistCustomA", "no ground|ground no|nonly"), "|", @CRLF) $g_asTxtDonateTroop[$eCustomB] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateCustomB", "air support|any air"), "|", @CRLF) @@ -4877,6 +4881,8 @@ $g_asTxtDonateSpell[$eSpellHaste] = StringReplace(IniRead($g_sProfileConfigPath, $g_asTxtBlacklistSpell[$eSpellHaste] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistHasteSpells", "no haste|haste no"), "|", @CRLF) $g_asTxtDonateSpell[$eSpellSkeleton] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateSkeletonSpells", "skeleton"), "|", @CRLF) $g_asTxtBlacklistSpell[$eSpellSkeleton] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistSkeletonSpells", "no skeleton|skeleton no"), "|", @CRLF) +$g_asTxtDonateSpell[$eSpellBat] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateBatSpells", "bat"), "|", @CRLF) +$g_asTxtBlacklistSpell[$eSpellBat] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistBatSpells", "no bat|bat no"), "|", @CRLF) For $i = $eSiegeWallWrecker to $eSiegeMachineCount - 1 Local $index = $eTroopCount + $g_iCustomDonateConfigs Local $sIniName = $g_asSiegeMachineShortNames[$i] @@ -4886,6 +4892,8 @@ $g_asTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeWallWrecker] $g_asTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeWallWrecker] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistWallW", "no WallW|no Wrecker|siege no"), "|", @CRLF) $g_asTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeBattleBlimp] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateBattleB", "Blimp|siege"), "|", @CRLF) $g_asTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeBattleBlimp] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistBattleB", "no Blimp|siege no"), "|", @CRLF) +$g_asTxtDonateTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtDonateStoneS", "Slammer|siege"), "|", @CRLF) +$g_asTxtBlacklistTroop[$eTroopCount + $g_iCustomDonateConfigs + $eSiegeStoneSlammer] = StringReplace(IniRead($g_sProfileConfigPath, "donate", "txtBlacklistStoneS", "no Slammer|siege no"), "|", @CRLF) $g_aiDonateCustomTrpNumA[0][0] = Int(IniRead($g_sProfileConfigPath, "donate", "cmbDonateCustomA1", 6)) $g_aiDonateCustomTrpNumA[1][0] = Int(IniRead($g_sProfileConfigPath, "donate", "cmbDonateCustomA2", 1)) $g_aiDonateCustomTrpNumA[2][0] = Int(IniRead($g_sProfileConfigPath, "donate", "cmbDonateCustomA3", 0)) @@ -4930,6 +4938,8 @@ Func ReadConfig_600_14() IniReadS($g_bAutoLabUpgradeEnable, $g_sProfileBuildingPath, "upgrade", "upgradetroops", False, "Bool") IniReadS($g_iCmbLaboratory, $g_sProfileBuildingPath, "upgrade", "upgradetroopname", 0, "int") $g_sLabUpgradeTime = IniRead($g_sProfileBuildingPath, "upgrade", "upgradelabtime", "") +IniReadS($g_iLaboratoryElixirCost, $g_sProfileBuildingPath, "upgrade", "upgradelabelexircost", 0, "int") +IniReadS($g_iLaboratoryDElixirCost, $g_sProfileBuildingPath, "upgrade", "upgradelabdelexircost", 0, "int") EndFunc Func ReadConfig_600_15() IniReadS($g_bUpgradeKingEnable, $g_sProfileConfigPath, "upgrade", "UpgradeKing", False, "Bool") @@ -5195,6 +5205,7 @@ IniReadS($g_abAttackUseEarthquakeSpell[$DB], $g_sProfileConfigPath, "attack", "D IniReadS($g_abAttackUseHasteSpell[$DB], $g_sProfileConfigPath, "attack", "DBHasteSpell", False, "Bool") IniReadS($g_abAttackUseCloneSpell[$DB], $g_sProfileConfigPath, "attack", "DBCloneSpell", False, "Bool") IniReadS($g_abAttackUseSkeletonSpell[$DB], $g_sProfileConfigPath, "attack", "DBSkeletonSpell", False, "Bool") +IniReadS($g_abAttackUseBatSpell[$DB], $g_sProfileConfigPath, "attack", "DBBatSpell", False, "Bool") IniReadS($g_bTHSnipeBeforeEnable[$DB], $g_sProfileConfigPath, "attack", "THSnipeBeforeDBEnable", False, "Bool") IniReadS($g_iTHSnipeBeforeTiles[$DB], $g_sProfileConfigPath, "attack", "THSnipeBeforeDBTiles", 0, "int") IniReadS($g_iTHSnipeBeforeScript[$DB], $g_sProfileConfigPath, "attack", "THSnipeBeforeDBScript", "bam") @@ -5269,6 +5280,7 @@ IniReadS($g_abAttackUseEarthquakeSpell[$LB], $g_sProfileConfigPath, "attack", "A IniReadS($g_abAttackUseHasteSpell[$LB], $g_sProfileConfigPath, "attack", "ABHasteSpell", False, "Bool") IniReadS($g_abAttackUseCloneSpell[$LB], $g_sProfileConfigPath, "attack", "ABCloneSpell", False, "Bool") IniReadS($g_abAttackUseSkeletonSpell[$LB], $g_sProfileConfigPath, "attack", "ABSkeletonSpell", False, "Bool") +IniReadS($g_abAttackUseBatSpell[$LB], $g_sProfileConfigPath, "attack", "ABBatSpell", False, "Bool") IniReadS($g_bTHSnipeBeforeEnable[$LB], $g_sProfileConfigPath, "attack", "THSnipeBeforeLBEnable", False, "Bool") IniReadS($g_iTHSnipeBeforeTiles[$LB], $g_sProfileConfigPath, "attack", "THSnipeBeforeLBTiles", 0, "int") IniReadS($g_iTHSnipeBeforeScript[$LB], $g_sProfileConfigPath, "attack", "THSnipeBeforeLBScript", "bam") @@ -5358,10 +5370,10 @@ IniReadS($g_iEndTSCampsPct, $g_sProfileConfigPath, "search", "TSEnableAfterArmyC EndFunc Func ReadConfig_600_31() $g_abCollectorLevelEnabled[6] = 0 -For $i = 7 To 12 +For $i = 7 To 13 IniReadS($g_abCollectorLevelEnabled[$i], $g_sProfileConfigPath, "collectors", "lvl" & $i & "Enabled", True, "Bool") Next -For $i = 6 To 12 +For $i = 6 To 13 IniReadS($g_aiCollectorLevelFill[$i], $g_sProfileConfigPath, "collectors", "lvl" & $i & "fill", 0, "int") If $g_aiCollectorLevelFill[$i] > 1 Then $g_aiCollectorLevelFill[$i] = 1 Next diff --git a/MyBot.run.Watchdog.exe b/MyBot.run.Watchdog.exe index 28db743b2626eb0bc0a907a25add38b99727bce6..106770bf5185ce022bc1fbe6b9638a161e2d8964 100644 GIT binary patch delta 561 zcmZqJW6`k3VuJ)D3lo<}%w!oxA12Gkld~9&7-vkL%lMjcMsp`qdnXek5QAuDAZ7t# zRv=~rVs;?r0Afxc<^p2w?VU_K(c-q(q8J#SurPqZp1-^dKrWmw@sF251c|Q$xE=q$R7u^W)ZutQPOec8Nj$@83V(!$yXTfwM^=R(bMmG^6J&60o{6U;+ALU=F1m#fv! z&d-_BR<^EJOS5jL_a{Df=@jP#tJ5>5|GCDuy+2uzLGz2_YBfcJ=fCPU)z@zQlJQ!y z+|WcKW3lQaMUxkf@;g3;39Z+z-KbMt{i2wyLY~=shVx3u delta 534 zcmZqJW6`k3VuJ)DOK;`H=*cpSK1_bwCTB4kF;+~T%lMkHqPdf)y_1O%h(RzAQ#U60pyDy@p=C7G88Z& zFh`j(I9a$P8YXU6%=dj2t$l%jsFO8=(38_Rix?rqimdq|4ud7;OShyEX@P2j)v z$=+ewn!hqWS1gs-7EOswpVD!Rg?9-<{8d9g4dIzj+O?N4>}h8JVlf7WmSqeKmN{1# zPfjsi4x^{P_2kv7mjk-(e~zY7x8E-1_d!4Q$m%`&QFheZLGgL$`8^Vj=leI_>hyfx zmeJUERnN)sQXy6*v8y94w!?}0sjbI{4b`_I{vUX}VS^kuW7vHLhU5H< z3|*OTNLyiuJhLv#?u%+c^?>qnsI8wkI#) g)14GWgl9sFr&yQOtvRb?=llyt8h&!aWd2UIC zhd{65^E;ZB7XDlRa_T&Z@K3k)&7EO8V}|3BKW+ix;WyvRUUg^9%(IcAb1$eQZk}Oe`&_D9+$td-!{@@eR9lZjb(2xKmV78gKAg4|22`^xM@>R9oJ-WXD$!5 zcJ+EU(Wg7VXE5w(X8_}tWeg0@CSPH^bo$d27(M;2C$C<88qlrxCT@9lZod5S`4=44 zDIYp5ez{ux?EIW5ZDs3vwKVH?dVk_$mrij`usS_+`k!lj+xwFh88p8*u2xetc>b$y zQ+@5$FBz{T%MDE=G8U^&QZ#wtD8J)ln9zFd+KoEZ)h~+KD&(2HXGs7362{_sa3f2C zY&1Jt(b>lZTa;G+)YA!Af6liu?}HKBlae>#d{198`gJfcT;9sSz?mpx4|1#B!;fG$ so9*~CW%~**-bDh8tlPb#dHETce!ia`6T_>)Xu7>MhBumZSrTs%04iS9>;M1& delta 519 zcmZozVcxL9e1ild%k;{N(UWBueVC>NPtIaAVy^IJoc=I`Q+V03UY%XOjrof+pd>-oo2Qi}SyD*c=CZY<{&y0=yL?;$Cs=Y<|S z9{PWrHi7@vCwqr!YyQgkT(MMQTQns$eM-kBmYO9s@yiYUG=yh9Y1dxHu&12?h{YHf zT9z>|Sms<|Tod_a4UC@t){|GSUJmHC|2djU-F~~2-v|BJBdho9N7+$t2gT>1=l4iB zp6}mytJCv&TSjBwRaF;tbH2$NBOeGXzjxbAWBCuw@)N)3KiBS`C4K$xrv4>!c6>13 zm9Tx$?`;;{rG4k7zdD-1c6XyeL2r=iO9f3Cfv&G{dL2&OPi;LuY^c5!@&CZ%4IAXR z8T~pK7%p#RVBk!Yu?M-W;K^sW8@HeE;$0-b$g({EmYDlALlEdl^ $sVal2 Then -$nResult = 1 -EndIf -Else -$nResult = DllCall('shlwapi.dll', 'int', 'StrCmpLogicalW', 'wstr', $sVal1, 'wstr', $sVal2)[0] -EndIf -$nResult = $nResult * $__g_aArrayDisplay_SortInfo[5] -Return $nResult -EndFunc -Func __ArrayDisplay_GetItemText($hWnd, $iIndex, $iSubItem = 0) -Local $tBuffer = DllStructCreate("wchar Text[4096]") -Local $pBuffer = DllStructGetPtr($tBuffer) -Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM) -DllStructSetData($tItem, "SubItem", $iSubItem) -DllStructSetData($tItem, "TextMax", 4096) -DllStructSetData($tItem, "Text", $pBuffer) -If IsHWnd($hWnd) Then -DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hWnd, "uint", 0x1073, "wparam", $iIndex, "struct*", $tItem) -Else -Local $pItem = DllStructGetPtr($tItem) -GUICtrlSendMsg($hWnd, 0x1073, $iIndex, $pItem) -EndIf -Return DllStructGetData($tBuffer, "Text") -EndFunc Func _ArrayToString(Const ByRef $aArray, $sDelim_Col = "|", $iStart_Row = -1, $iEnd_Row = -1, $sDelim_Row = @CRLF, $iStart_Col = -1, $iEnd_Col = -1) If $sDelim_Col = Default Then $sDelim_Col = "|" If $sDelim_Row = Default Then $sDelim_Row = @CRLF diff --git a/MyBot.run.au3 b/MyBot.run.au3 index 394dce635..a49bafa70 100644 --- a/MyBot.run.au3 +++ b/MyBot.run.au3 @@ -888,24 +888,6 @@ Func _Idle() ;Sequence that runs until Full Army If _Sleep($DELAYIDLE1) Then Return If $g_iCommandStop = -1 Then SetLog("====== Waiting for full army ======", $COLOR_SUCCESS) Local $hTimer = __TimerInit() - Local $iReHere = 0, $bNoCheckRedChatIcon = True - - If $g_iActiveDonate And $g_bChkDonate Then - Local $aHeroResult = CheckArmyCamp(True, True, True, False) - While $iReHere < 7 - If Not $g_bRunState Then Return - $iReHere += 1 - If ($g_iCommandStop = 3 Or $g_iCommandStop = 0) Then $bNoCheckRedChatIcon = ($iReHere = 1) ? False : True ; Just to force once to open and check Donations when is Halt mode - If $iReHere = 1 And SkipDonateNearFullTroops(True, $aHeroResult) = False And BalanceDonRec(True) Then - DonateCC($bNoCheckRedChatIcon) - ElseIf SkipDonateNearFullTroops(False, $aHeroResult) = False And BalanceDonRec(False) Then - DonateCC($bNoCheckRedChatIcon) - EndIf - If _Sleep($DELAYIDLE2) Then ExitLoop - If $g_bRestart = True Then ExitLoop - If CheckAndroidReboot() Then ContinueLoop 2 - WEnd - EndIf If _Sleep($DELAYIDLE1) Then ExitLoop checkObstacles() ; trap common error messages also check for reconnecting animation checkMainScreen(False) ; required here due to many possible exits @@ -962,7 +944,7 @@ Func _Idle() ;Sequence that runs until Full Army If $g_iCommandStop = 0 And $g_bTrainEnabled = True Then If Not ($g_bIsFullArmywithHeroesAndSpells) Then If $g_iActualTrainSkip < $g_iMaxTrainSkip Then - If CheckNeedOpenTrain($g_sTimeBeforeTrain) Then TrainSystem() + If CheckNeedOpenTrain($g_sTimeBeforeTrain) Or (ProfileSwitchAccountEnabled() And $g_iActiveDonate And $g_bChkDonate) Then TrainSystem() ; force check trainsystem after donate and before switch account If $g_bRestart = True Then ExitLoop If _Sleep($DELAYIDLE1) Then ExitLoop checkMainScreen(False) @@ -1220,6 +1202,7 @@ Func _RunFunction($action) If isOnBuilderBase() Or (($g_bChkCollectBuilderBase Or $g_bChkStartClockTowerBoost Or $g_iChkBBSuggestedUpgrades) And SwitchBetweenBases()) Then CollectBuilderBase() BuilderBaseReport() + CleanBBYard() StartClockTowerBoost() MainSuggestedUpgradeCode() ; switch back to normal village diff --git a/MyBot.run.exe b/MyBot.run.exe index 782fd29577244bde134ff1fc48abb1a195a3a442..612374524e7412a71ba710250a585780468fb922 100644 GIT binary patch delta 1263158 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