diff --git a/CHANGELOG b/CHANGELOG index 50ab9e0cd..31a4a7758 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,17 @@ -* **V7.1.3** +* **V7.1.4** + * Add Nox 3.8.1.3 support + * Fix Strategies save file + * Fix auto-activation of heros sometimes not working + * Fix Android resize bot crash when Andorid crashes or Android Window is unavailable at wrong time + * Fix auto-start delaying also 2nd or more manual starts + * Improve shared folder handling + * Improve the train time click/checks delays + * Update example TH9 GoWiPe Strategy file to be compatible with train revamp changes made in v7. + * Change "Delete Temp Files" feature to include recursive removal of DEBUG files\folders when users enable debug long term. + * Removed the reduncancy on Train log + * Update Russian Language File by @Vlab97 + +* **V7.1.3** * Add Suspend Computer option to SmartWait and Attack Schedule (see https://mybot.run/forums/index.php?/topic/29562-how-to-use-new-suspendsleep-computer-support/ for more details) * Add Inferno lv4 , Mortar Lv9/10 , WizardTower lv10 , Xbow lv5 and AD lv9 to weakBase Images/GUI settings * Add ObjEvent Code to handle with Objects errors and Poor Connection on Notify. diff --git a/COCBot/GUI/MBR GUI Design Child Bot - Options.au3 b/COCBot/GUI/MBR GUI Design Child Bot - Options.au3 index 60768d6f2..534691f53 100644 --- a/COCBot/GUI/MBR GUI Design Child Bot - Options.au3 +++ b/COCBot/GUI/MBR GUI Design Child Bot - Options.au3 @@ -69,7 +69,7 @@ Func CreateBotOptions() GUICtrlSetState(-1, $GUI_CHECKED) _GUICtrlSetTip(-1, GetTranslated(636,9, "Delete temp files older than this specified No. of days.")) GUICtrlSetOnEvent(-1, "chkDeleteTemp") - $g_hTxtDeleteTempDays = GUICtrlCreateInput("2", $x + 120, $y + 2, 25, 16, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) + $g_hTxtDeleteTempDays = GUICtrlCreateInput("5", $x + 120, $y + 2, 25, 16, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) _GUICtrlSetTip(-1, $sTxtTip) GUICtrlSetLimit(-1, 2) GUICtrlSetFont(-1, 8) diff --git a/COCBot/MBR Global Variables.au3 b/COCBot/MBR Global Variables.au3 index f7b1e4143..1caced3a2 100644 --- a/COCBot/MBR Global Variables.au3 +++ b/COCBot/MBR Global Variables.au3 @@ -76,9 +76,6 @@ Global $g_iVILLAGE_OFFSET[3] = [0, 0, 1] Local Const $UserDebugEnable = 0 ; <<< change this value equal to 1, to enable USER debug mode when posting bugs in MBR forums! -; This will be the ObjEvent to handle with object errors -Global $g_oCOMErrorHandler = 0 - ; <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> ; <><><><> Individual error flags for debugging individual sections of code! <><><><> ; <><><><> Can be manually set when required, Enabled when = 1, disabled when = 0 <><><><> @@ -150,6 +147,9 @@ Global $g_aZombie = ["" _ ; 0=Filename Global $g_iDebugGDICountMax = 0 ; max value of GDI Handle count Global $g_oDebugGDIHandles = ObjCreate("Scripting.Dictionary") ; stores GDI handles when $g_iDebugGDICount <> 0 +; This will be the ObjEvent to handle with object errors +Global $g_oCOMErrorHandler = 0 + ; <><><><><><><><><><><><><><><><><><> #EndRegion debugging @@ -255,6 +255,11 @@ 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[2][2] = _ ; Alternative Nox Control ID (array must be ordered by version descending!) + [ _ ; Version|$g_sAppClassInstance + ["3.8.1.3", "[CLASS:subWin; INSTANCE:1]"], _ + ["3.1.0", "[CLASS:Qt5QWindowIcon; INSTANCE:4]"] _ + ] ; 0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 ; $g_sAndroidEmulator |$g_sAndroidTitle |$g_sAppClassInstance |$g_sAppPaneName |$g_iAndroidClientWidth|$g_iAndroidClientHeight|$g_iAndroidWindowWidth|$g_iAndroidWindowHeight|$ClientOffsetY|$g_sAndroidAdbDevice|$g_iAndroidSupportFeature|$g_sAndroidShellPrompt|$g_sAndroidMouseDevice |$g_bAndroidEmbed/$g_iAndroidEmbedMode ; |$g_sAndroidInstance| | | | | | | | | |1 = Normal background mode | |-1 = Not available @@ -271,7 +276,7 @@ Global $g_avAndroidAppConfig[8][15] = [ _ ; | ["LeapDroid", "vm1", "Leapd", "[CLASS:subWin; INSTANCE:1]", "", $g_iDEFAULT_WIDTH, $g_iDEFAULT_HEIGHT - 48, $g_iDEFAULT_WIDTH, $g_iDEFAULT_HEIGHT - 48, 0, "emulator-5554", 1 + 8 + 16 + 32, '# ', 'qwerty2', 1], _ ["iTools", "iToolsVM", "iTools ", "[CLASS:subWin; INSTANCE:1]", "", $g_iDEFAULT_WIDTH, $g_iDEFAULT_HEIGHT - 48, $g_iDEFAULT_WIDTH + 2, $g_iDEFAULT_HEIGHT - 13, 0, "127.0.0.1:54001", 1 + 8 + 16 + 32 + 64, '# ', 'iTools Virtual PassThrough Input', 0], _ ["Droid4X", "droid4x", "Droid4X ", "[CLASS:subWin; INSTANCE:1]", "", $g_iDEFAULT_WIDTH, $g_iDEFAULT_HEIGHT - 48, $g_iDEFAULT_WIDTH + 10, $g_iDEFAULT_HEIGHT + 50, 0, "127.0.0.1:26944", 0 + 2 + 4 + 8 + 16 + 32, '# ', 'droid4x Virtual Input', 0], _ - ["Nox", "nox", "No", "[CLASS:Qt5QWindowIcon; INSTANCE:4]", "", $g_iDEFAULT_WIDTH, $g_iDEFAULT_HEIGHT - 48, $g_iDEFAULT_WIDTH + 4, $g_iDEFAULT_HEIGHT - 10, 0, "127.0.0.1:62001", 0 + 2 + 4 + 8 + 16 + 32, '# ', '(nox Virtual Input|Android Input)', -1] _ + ["Nox", "nox", "No", "[CLASS:subWin; INSTANCE:1]", "", $g_iDEFAULT_WIDTH, $g_iDEFAULT_HEIGHT - 48, $g_iDEFAULT_WIDTH + 4, $g_iDEFAULT_HEIGHT - 10, 0, "127.0.0.1:62001", 0 + 2 + 4 + 8 + 16 + 32, '# ', '(nox Virtual Input|Android Input)', 1] _ ] ; Startup detection diff --git a/COCBot/functions/Android/Android.au3 b/COCBot/functions/Android/Android.au3 index be3d17b83..09ad1a087 100644 --- a/COCBot/functions/Android/Android.au3 +++ b/COCBot/functions/Android/Android.au3 @@ -1381,7 +1381,7 @@ Func AndroidAdbLaunchShellInstance($wasRunState = $g_bRunState, $rebootAndroidIf EndIf ; check shared folder ;If StringInStr($g_sAndroidPicturesPath, "|", $STR_NOCASESENSEBASIC) > 0 Then - If True Then ; always validate picture patch + If $g_bRunState = True Then ; always validate picture patch If ConnectAndroidAdb($rebootAndroidIfNeccessary) = False Then Return SetError(3, 0) EndIf @@ -1393,31 +1393,32 @@ Func AndroidAdbLaunchShellInstance($wasRunState = $g_bRunState, $rebootAndroidIf Local $path = $g_sAndroidPicturesPath If StringRight($path, 1) = "/" Then $path = StringLeft($path, StringLen($path) - 1) Local $aRegExResult = StringRegExp($s, $path, $STR_REGEXPARRAYMATCH) - If @error = 0 Then - ; check which path contains dummy file - Local $dummyFile = StringMid(_Crypt_HashData($g_sBotTitle & _Now(), $CALG_SHA1), 3) - FileWriteLine($g_sAndroidPicturesHostPath & $dummyFile, _Now()) - For $i = 0 To UBound($aRegExResult) - 1 - $path = $aRegExResult[$i] - If StringRight($path, 1) <> "/" Then $path &= "/" - $s = AndroidAdbSendShellCommand("ls " & $path & $dummyFile, Default, $wasRunState, False) - If StringInStr($s, "No such file or directory") = 0 Then - $pathFound = True - $g_sAndroidPicturesPath = $path - SetDebugLog("Using " & $g_sAndroidPicturesPath & " for Android shared folder") - ExitLoop - EndIf - Next - ; delete dummy FileChangeDir - FileDelete($g_sAndroidPicturesHostPath & $dummyFile) - EndIf + SetError(0) + If UBound($aRegExResult) = 0 Then Local $aRegExResult = [] + _ArrayConcatenate($aRegExResult, StringSplit(((StringLeft($path, 1) = "(" And StringRight($path, 1) = ")") ? StringMid($path, 2, StringLen($path) - 2) : $path), "|", $STR_NOCOUNT)) + ; check which path contains dummy file + Local $dummyFile = StringMid(_Crypt_HashData($g_sBotTitle & _Now(), $CALG_SHA1), 3) + FileWriteLine($g_sAndroidPicturesHostPath & $dummyFile, _Now()) + For $i = 0 To UBound($aRegExResult) - 1 + $path = $aRegExResult[$i] + If StringRight($path, 1) <> "/" Then $path &= "/" + $s = AndroidAdbSendShellCommand("ls '" & $path & $dummyFile & "'", Default, $wasRunState, False) + If StringInStr($s, "No such file or directory") = 0 And StringInStr($s, "syntax error:") = 0 Then + $pathFound = True + $g_sAndroidPicturesPath = $path + SetDebugLog("Using " & $g_sAndroidPicturesPath & " for Android shared folder") + ExitLoop + EndIf + Next + ; delete dummy FileChangeDir + FileDelete($g_sAndroidPicturesHostPath & $dummyFile) If $pathFound = True Then ExitLoop If $iMount = 0 Then SetLog("Waiting for shared folder to get mounted...", $COLOR_GREEN) Else SetDebugLog("Still waiting for shared folder to get mounted...") EndIf - If _Sleep(3000) Then Return + If _Sleep(6000) Then Return Next If $pathFound = False Then SetLog($g_sAndroidEmulator & " cannot use ADB on shared folder, """ & $g_sAndroidPicturesPath & """ not found", $COLOR_ERROR) diff --git a/COCBot/functions/Android/AndroidNox.au3 b/COCBot/functions/Android/AndroidNox.au3 index 1e9d9da86..8f1393cb1 100644 --- a/COCBot/functions/Android/AndroidNox.au3 +++ b/COCBot/functions/Android/AndroidNox.au3 @@ -102,6 +102,9 @@ Func GetNoxRtPath() If FileExists($path) = 0 Then $path = EnvGet("ProgramFiles(x86)") & "\Bignox\BigNoxVM\RT\" EndIf + If FileExists($path) = 0 Then + $path = EnvGet("ProgramFiles") & "\Bignox\BigNoxVM\RT\" + EndIf SetError(0, 0, 0) Return StringReplace($path, "\\", "\") EndFunc ;==>GetNoxRtPath @@ -200,14 +203,34 @@ Func InitNox($bCheckOnly = False) $g_bAndroidSharedFolderAvailable = True $g_sAndroidPicturesHostPath = $aRegExResult[UBound($aRegExResult) - 1] & "\" Else - $g_bAndroidSharedFolderAvailable = False - $g_bAndroidAdbScreencap = False - $g_sAndroidPicturesHostPath = "" - SetLog($g_sAndroidEmulator & " Background Mode is not available", $COLOR_ERROR) + ; Check the shared folder 'Nox_share' , this is the default path on last version + If FileExists(@MyDocumentsDir & "\Nox_share\") then + $g_bAndroidSharedFolderAvailable = True + $g_sAndroidPicturesHostPath = @MyDocumentsDir & "\Nox_share\Other\" + If not FileExists($g_sAndroidPicturesHostPath) then + ; Just in case of 'Other' Folder doesn't exist + DirCreate($g_sAndroidPicturesHostPath) + EndIf + Else + $g_bAndroidSharedFolderAvailable = False + $g_bAndroidAdbScreencap = False + $g_sAndroidPicturesHostPath = "" + SetLog($g_sAndroidEmulator & " Background Mode is not available", $COLOR_ERROR) + EndIf EndIf $__VBoxGuestProperties = LaunchConsole($__VBoxManage_Path, "guestproperty enumerate " & $g_sAndroidInstance, $process_killed) + Local $v = GetVersionNormalized($g_sAndroidVersion) + For $i = 0 To UBound($__Nox_Config) - 1 + Local $v2 = GetVersionNormalized($__Nox_Config[$i][0]) + If $v >= $v2 Then + SetDebugLog("Using Android Config of " & $g_sAndroidEmulator & " " & $__Nox_Config[$i][0]) + $g_sAppClassInstance = $__Nox_Config[$i][1] + ExitLoop + EndIf + Next + ; Update Android Screen and Window ;UpdateNoxConfig() EndIf @@ -233,6 +256,7 @@ Func SetScreenNox() ; remove tailing backslash Local $path = $g_sAndroidPicturesHostPath If StringRight($path, 1) = "\" Then $path = StringLeft($path, StringLen($path) - 1) + $cmdOutput = LaunchConsole($__VBoxManage_Path, "sharedfolder remove " & $g_sAndroidInstance & " --name Other", $process_killed) $cmdOutput = LaunchConsole($__VBoxManage_Path, "sharedfolder add " & $g_sAndroidInstance & " --name Other --hostpath """ & $path & """ --automount", $process_killed) EndIf diff --git a/COCBot/functions/Android/getBSPos.au3 b/COCBot/functions/Android/getBSPos.au3 index 5fd19254f..94bcde2e7 100644 --- a/COCBot/functions/Android/getBSPos.au3 +++ b/COCBot/functions/Android/getBSPos.au3 @@ -239,11 +239,13 @@ Func getAndroidPos($FastCheck = False, $RetryCount1 = 0, $RetryCount2 = 0, $bWid WinMove($g_hAndroidWindow, "", $AndroidWinPos[0], $AndroidWinPos[1], $aAndroidWindow[0] - 2, $aAndroidWindow[1] - 2) ; force invalid resize (triggers Android rendering control resize) ;Sleep($DELAYSLEEP) $AndroidWinPos = WinGetPos($g_hAndroidWindow) - $WinWidth = $AndroidWinPos[2] - $WinHeight = $AndroidWinPos[3] + If UBound($AndroidWinPos) > 3 Then + $WinWidth = $AndroidWinPos[2] + $WinHeight = $AndroidWinPos[3] + EndIf EndIf - If UBound($AndroidWinPos) > 2 Then ; Check expected Window size + If UBound($AndroidWinPos) > 3 Then ; Check expected Window size WinMove2($g_hAndroidWindow, "", $AndroidWinPos[0], $AndroidWinPos[1], $aAndroidWindow[0], $aAndroidWindow[1]) ; resized to expected window size ;WinMove($g_hAndroidWindow, "", $AndroidWinPos[0], $AndroidWinPos[1], $aAndroidWindow[0], $aAndroidWindow[1]) diff --git a/COCBot/functions/Attack/RedArea/GetLocation.au3 b/COCBot/functions/Attack/RedArea/GetLocation.au3 index 0d143d8b4..56682abe6 100644 --- a/COCBot/functions/Attack/RedArea/GetLocation.au3 +++ b/COCBot/functions/Attack/RedArea/GetLocation.au3 @@ -16,39 +16,41 @@ Func GetLocationMine() - If $g_iDetectedImageType = 0 Then - Local $result = DllCall($g_hLibMyBot, "str", "getLocationMineExtractor", "ptr", $g_hHBitmap2) - If $g_iDebugBuildingPos = 1 Then Setlog("#*# GetLocationMine: " & $result[0], $COLOR_DEBUG1) - If $g_iDebugGetLocation = 1 Then DebugImageGetLocation($result[0], "Mine") - Return GetListPixel($result[0]) - Else - Local $directory = @ScriptDir & "\imgxml\Storages\Mines_Snow" - Local $Maxpositions = 7 - Local $aResult = returnMultipleMatches($directory, $Maxpositions) - Local $result = ConvertImgloc2MBR($aResult, $Maxpositions) - If $g_iDebugBuildingPos = 1 Then Setlog("#*# GetLocationSnowMine: " & $result, $COLOR_DEBUG1) - If $g_iDebugGetLocation = 1 Then DebugImageGetLocation($result, "SnowMine") - Return GetListPixel($result) + Local $directory = @ScriptDir & "\imgxml\Storages\GoldMines" + Local $txt = "Mines" + Local $Maxpositions = 7 + + ; Snow Theme detected + If $g_iDetectedImageType = 1 Then + $directory = @ScriptDir & "\imgxml\Storages\Mines_Snow" + $txt = "SnowMines" EndIf + Local $aResult = returnMultipleMatches($directory, $Maxpositions) + Local $result = ConvertImgloc2MBR($aResult, $Maxpositions) + If $g_iDebugBuildingPos = 1 Then Setlog("#*# GetLocation"& $txt &": " & $result, $COLOR_DEBUG1) + If $g_iDebugGetLocation = 1 Then DebugImageGetLocation($result, $txt) + Return GetListPixel($result) EndFunc ;==>GetLocationMine Func GetLocationElixir() - If $g_iDetectedImageType = 0 Then - Local $result = DllCall($g_hLibMyBot, "str", "getLocationElixirExtractor", "ptr", $g_hHBitmap2) - If $g_iDebugBuildingPos = 1 Then Setlog("#*# GetLocationElixir: " & $result[0], $COLOR_DEBUG1) - If $g_iDebugGetLocation = 1 Then DebugImageGetLocation($result[0], "Elixir") - Return GetListPixel($result[0]) - Else - Local $directory = @ScriptDir & "\imgxml\Storages\Collectors_Snow" - Local $Maxpositions = 7 - Local $aResult = returnMultipleMatches($directory, $Maxpositions) - Local $result = ConvertImgloc2MBR($aResult, $Maxpositions) - If $g_iDebugBuildingPos = 1 Then Setlog("#*# GetLocationSnowElixir: " & $result, $COLOR_DEBUG1) - If $g_iDebugGetLocation = 1 Then DebugImageGetLocation($result, "SnowElixir") - Return GetListPixel($result) + Local $directory = @ScriptDir & "\imgxml\Storages\Collectors" + Local $txt = "Collectors" + Local $Maxpositions = 7 + + ; Snow Theme detected + If $g_iDetectedImageType = 1 Then + $directory = @ScriptDir & "\imgxml\Storages\Collectors_Snow" + $txt = "SnowCollectors" EndIf + + Local $aResult = returnMultipleMatches($directory, $Maxpositions) + Local $result = ConvertImgloc2MBR($aResult, $Maxpositions) + If $g_iDebugBuildingPos = 1 Then Setlog("#*# GetLocation"& $txt &": " & $result, $COLOR_DEBUG1) + If $g_iDebugGetLocation = 1 Then DebugImageGetLocation($result, $txt) + + Return GetListPixel($result) EndFunc ;==>GetLocationElixir Func GetLocationDarkElixir() diff --git a/COCBot/functions/Attack/Troops/CheckHeroesHealth.au3 b/COCBot/functions/Attack/Troops/CheckHeroesHealth.au3 index 24f5ca92c..893e1f831 100644 --- a/COCBot/functions/Attack/Troops/CheckHeroesHealth.au3 +++ b/COCBot/functions/Attack/Troops/CheckHeroesHealth.au3 @@ -32,31 +32,31 @@ Func CheckHeroesHealth() If $g_iDebugSetlog = 1 Then Setlog(" CheckHeroesHealth started ") - Local $KingPixelColor = _GetPixelColor($aKingHealthCopy[0], $aKingHealthCopy[1], $g_bCapturePixel) - Local $QueenPixelColor = _GetPixelColor($aQueenHealthCopy[0], $aQueenHealthCopy[1], $g_bCapturePixel) - Local $WardenPixelColor = _GetPixelColor($aWardenHealthCopy[0], $aWardenHealthCopy[1], $g_bCapturePixel) If _Sleep($DELAYRESPOND) Then Return ; improve pause button response EndIf If $g_bCheckKingPower Then + Local $KingPixelColor = _GetPixelColor($aKingHealthCopy[0], $aKingHealthCopy[1], $g_bCapturePixel) If $g_iDebugSetlog = 1 Then Setlog(" King _GetPixelColor(" & $aKingHealthCopy[0] & "," & $aKingHealthCopy[1] & "): " & $KingPixelColor, $COLOR_DEBUG) - If _CheckPixel($aKingHealthCopy, $g_bCapturePixel, "Red") Then + If Not _CheckPixel2($aKingHealthCopy, $KingPixelColor, "Red+Blue") Then SetLog("King is getting weak, Activating King's power", $COLOR_INFO) SelectDropTroop($g_iKingSlot) $g_bCheckKingPower = False EndIf EndIf If $g_bCheckQueenPower Then + Local $QueenPixelColor = _GetPixelColor($aQueenHealthCopy[0], $aQueenHealthCopy[1], $g_bCapturePixel) If $g_iDebugSetlog = 1 Then Setlog(" Queen _GetPixelColor(" & $aQueenHealthCopy[0] & "," & $aQueenHealthCopy[1] & "): " & $QueenPixelColor, $COLOR_DEBUG) - If _CheckPixel($aQueenHealthCopy, $g_bCapturePixel, "Red") Then + If Not _CheckPixel2($aQueenHealthCopy, $QueenPixelColor, "Red+Blue") Then SetLog("Queen is getting weak, Activating Queen's power", $COLOR_INFO) SelectDropTroop($g_iQueenSlot) $g_bCheckQueenPower = False EndIf EndIf If $g_bCheckWardenPower Then + Local $WardenPixelColor = _GetPixelColor($aWardenHealthCopy[0], $aWardenHealthCopy[1], $g_bCapturePixel) If $g_iDebugSetlog = 1 Then Setlog(" Grand Warden _GetPixelColor(" & $aWardenHealthCopy[0] & "," & $aWardenHealthCopy[1] & "): " & $WardenPixelColor, $COLOR_DEBUG) - If _CheckPixel($aWardenHealthCopy, $g_bCapturePixel, "Red") Then + If Not _CheckPixel2($aWardenHealthCopy, $WardenPixelColor, "Red+Blue") Then SetLog("Grand Warden is getting weak, Activating Warden's power", $COLOR_INFO) SelectDropTroop($g_iWardenSlot) $g_bCheckWardenPower = False diff --git a/COCBot/functions/Config/ScreenCoordinates.au3 b/COCBot/functions/Config/ScreenCoordinates.au3 index 0512c992a..2fb0eb2d5 100644 --- a/COCBot/functions/Config/ScreenCoordinates.au3 +++ b/COCBot/functions/Config/ScreenCoordinates.au3 @@ -103,11 +103,11 @@ Global $aAttackForTreasury[4] = [88, 619 + $g_iMidOffsetY, 0xF0EBE8, 5] ; Red pi ; 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, 0x543e20, 15] ; Attack Screen, Check King's Health, X coordinate is dynamic, not used from array ; -> with slot compensation 0xbfb29e +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, 0x4b35b5, 15] ; Attack Screen, Check Queen's Health, X coordinate is dynamic, not used from array ; -> with slot compensation 0xe08227 +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, 0xd2696c, 15] ; Attack Screen, Check Warden's Health, X coordinate is dynamic, not used from array ; -> with slot compensation 0xe08227 +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 ;attack report... stars won diff --git a/COCBot/functions/Config/_Ini_Table.au3 b/COCBot/functions/Config/_Ini_Table.au3 index 39018d021..66782195d 100644 --- a/COCBot/functions/Config/_Ini_Table.au3 +++ b/COCBot/functions/Config/_Ini_Table.au3 @@ -73,9 +73,23 @@ Func _Ini_Save($filename) If $asParts[1] <> $sCurrentSection Then $sCurrentSection = $asParts[1] FileWriteLine($hFile, "[" & $sCurrentSection & "]") + ; Strategies File + If $g_sProfileSecondaryOutputFileName <> "" Then + If $sCurrentSection = "search" Or $sCurrentSection = "attack" Or $sCurrentSection = "troop" Or $sCurrentSection = "spells" Or $sCurrentSection = "milkingattack" Or $sCurrentSection = "endbattle" Or $sCurrentSection = "collectors" then + FileWriteLine($g_sProfileSecondaryOutputFileName, "[" & $sCurrentSection & "]") + EndIF + EndIf EndIf FileWriteLine($hFile, $asParts[2] & "=" & $g_asIniTable[$i][1]) + + ; Strategies File + If $g_sProfileSecondaryOutputFileName <> "" Then + If $sCurrentSection = "search" Or $sCurrentSection = "attack" Or $sCurrentSection = "troop" Or $sCurrentSection = "spells" Or $sCurrentSection = "milkingattack" Or $sCurrentSection = "endbattle" Or $sCurrentSection = "collectors" Then + FileWriteLine($g_sProfileSecondaryOutputFileName, $asParts[2] & "=" & $g_asIniTable[$i][1]) + EndIf + EndIf + Next FileClose($hFile) diff --git a/COCBot/functions/Config/readConfig.au3 b/COCBot/functions/Config/readConfig.au3 index 0e19e90eb..e74b56f14 100644 --- a/COCBot/functions/Config/readConfig.au3 +++ b/COCBot/functions/Config/readConfig.au3 @@ -1019,7 +1019,7 @@ Func ReadConfig_600_35() IniReadS($g_bDeleteLogs, $g_sProfileConfigPath, "deletefiles", "DeleteLogs", True, "Bool") IniReadS($g_iDeleteLogsDays, $g_sProfileConfigPath, "deletefiles", "DeleteLogsDays", 2, "int") IniReadS($g_bDeleteTemp, $g_sProfileConfigPath, "deletefiles", "DeleteTemp", True, "Bool") - IniReadS($g_iDeleteTempDays, $g_sProfileConfigPath, "deletefiles", "DeleteTempDays", 2, "int") + IniReadS($g_iDeleteTempDays, $g_sProfileConfigPath, "deletefiles", "DeleteTempDays", 5, "int") IniReadS($g_bDeleteLoots, $g_sProfileConfigPath, "deletefiles", "DeleteLoots", True, "Bool") IniReadS($g_iDeleteLootsDays, $g_sProfileConfigPath, "deletefiles", "DeleteLootsDays", 2, "int") IniReadS($g_bAutoStart, $g_sProfileConfigPath, "general", "AutoStart", False, "Bool") diff --git a/COCBot/functions/Config/saveConfig.au3 b/COCBot/functions/Config/saveConfig.au3 index b56824f9d..81893b7fa 100644 --- a/COCBot/functions/Config/saveConfig.au3 +++ b/COCBot/functions/Config/saveConfig.au3 @@ -1042,11 +1042,11 @@ Func IniWriteS($filename, $section, $key, $value) Local $s = $section Local $k = $key IniWrite($filename, $section, $key, $value) - If $g_sProfileSecondaryOutputFileName <> "" Then - If $s = "search" Or $s = "attack" Or $s = "troop" Or $s = "spells" Or $s = "milkingattack" Or $s = "endbattle" Or $s = "collectors" Or ($s = "general" And $k = "version") Then - IniWrite($g_sProfileSecondaryOutputFileName, $section, $key, $value) - EndIf - EndIf +;~ If $g_sProfileSecondaryOutputFileName <> "" Then +;~ If $s = "search" Or $s = "attack" Or $s = "troop" Or $s = "spells" Or $s = "milkingattack" Or $s = "endbattle" Or $s = "collectors" Or ($s = "general" And $k = "version") Then +;~ IniWrite($g_sProfileSecondaryOutputFileName, $section, $key, $value) +;~ EndIf +;~ EndIf EndFunc ;==>IniWriteS diff --git a/COCBot/functions/CreateArmy/TrainRevamp.au3 b/COCBot/functions/CreateArmy/TrainRevamp.au3 index 27d733776..d2bcfe6a8 100644 --- a/COCBot/functions/CreateArmy/TrainRevamp.au3 +++ b/COCBot/functions/CreateArmy/TrainRevamp.au3 @@ -155,7 +155,7 @@ Func TrainRevampOldStyle() If ThSnipesSkiptrain() Then Return If $g_bRunState = False Then Return - Local $rWhatToTrain = WhatToTrain(True) ; r in First means Result! Result of What To Train Function + Local $rWhatToTrain = WhatToTrain(True, False) ; r in First means Result! Result of What To Train Function Local $rRemoveExtraTroops = RemoveExtraTroops($rWhatToTrain) If $rRemoveExtraTroops = 1 Or $rRemoveExtraTroops = 2 Then @@ -2438,16 +2438,16 @@ Func CheckValuesCost($Troop = "Arch", $troopQuantity = 1, $DebugLogs = 0) ; Let??s UPDATE the current Elixir and Dark elixir each Troop train on 'Bottom train Window Page' If _ColorCheck(_GetPixelColor(223, 594, True), Hex(0xE8E8E0, 6), 20) Then ; Gray background window color ; Village without Dark Elixir - If ISArmyWindow(False, $TrainTroopsTAB) Or ISArmyWindow(False, $BrewSpellsTAB) Then $nElixirCurrent = getResourcesValueTrainPage(315, 594) ; ELIXIR + $nElixirCurrent = getResourcesValueTrainPage(315, 594) ; ELIXIR Else ; Village with Elixir and Dark Elixir - If ISArmyWindow(False, $TrainTroopsTAB) Or ISArmyWindow(False, $BrewSpellsTAB) Then $nElixirCurrent = getResourcesValueTrainPage(230, 594) ; ELIXIR - If ISArmyWindow(False, $TrainTroopsTAB) Or ISArmyWindow(False, $BrewSpellsTAB) Then $nDarkCurrent = getResourcesValueTrainPage(382, 594) ; DARK ELIXIR + $nElixirCurrent = getResourcesValueTrainPage(230, 594) ; ELIXIR + $nDarkCurrent = getResourcesValueTrainPage(382, 594) ; DARK ELIXIR EndIf ; DEBUG If $g_iDebugSetlogTrain = 1 Or $DebugLogs Then - Setlog(" ?? Current resources:") + Setlog("- Current resources:") Setlog(" - Elixir: " & _NumberFormat($nElixirCurrent) & " / Dark Elixir: " & _NumberFormat($nDarkCurrent), $COLOR_INFO) $g_iDebugOcr = $bLocalDebugOCR ; disable the OCR debug EndIf diff --git a/COCBot/functions/CreateArmy/getArmyTroopCount.au3 b/COCBot/functions/CreateArmy/getArmyTroopCount.au3 deleted file mode 100644 index 04d7d5268..000000000 --- a/COCBot/functions/CreateArmy/getArmyTroopCount.au3 +++ /dev/null @@ -1,244 +0,0 @@ - -; #FUNCTION# ==================================================================================================================== -; Name ..........: getArmyTroopCount -; Description ...: Reads current quanitites/type of troops from Training - Army Overview window, updates $CurXXXX and $g_avDTtroopsToBeUsed values -; Syntax ........: getArmyTroopCount() -; Parameters ....: $bOpenArmyWindow - [optional] a boolean value. Default is False. -; $bCloseArmyWindow - [optional] a boolean value. Default is False. -; Return values .: None -; Author ........: -; Modified ......: CodeSlinger69 (201-017) -; Remarks .......: This file is part of MyBot, previously known as ClashGameBot. Copyright 2015-2017 -; MyBot is distributed under the terms of the GNU GPL -; Related .......: -; Link ..........: https://github.com/MyBotRun/MyBot/wiki -; Example .......: No -; =============================================================================================================================== -#include-once - -Func getArmyTroopCount($bOpenArmyWindow = False, $bCloseArmyWindow = False, $test = False) - - If $g_iDebugSetlogTrain = 1 Or $g_iDebugSetlog = 1 Then SETLOG("Begin getArmyTroopCount:", $COLOR_DEBUG1) - - If $test = False Then - If $bOpenArmyWindow = False And IsTrainPage() = False Then ; check for train page - SetError(1) - Return ; not open, not requested to be open - error. - ElseIf $bOpenArmyWindow = True Then - If openArmyOverview() = False Then - SetError(2) - Return ; not open, requested to be open - error. - EndIf - If _Sleep($DELAYCHECKARMYCAMP5) Then Return - EndIf - Else - Setlog("test") - EndIf - - - Local $FullTemp = "" - Local $TroopQ = 0 - Local $TroopTypeT = "" - - _CaptureRegion2(120, 165 + $g_iMidOffsetY, 740, 220 + $g_iMidOffsetY) - If $g_iDebugSetlog = 1 Then SetLog("$g_hHBitmap2 made", $COLOR_DEBUG) - If _Sleep($DELAYCHECKARMYCAMP5) Then Return - If $g_iDebugSetlogTrain = 1 Then SetLog("Calling " & $g_sMBRLib & "/searchIdentifyTroopTrained ", $COLOR_DEBUG) - - $FullTemp = DllCall($g_hLibMyBot, "str", "searchIdentifyTroopTrained", "ptr", $g_hHBitmap2) - If _Sleep($DELAYCHECKARMYCAMP6) Then Return ; 10ms improve pause button response - If $g_iDebugSetlogTrain = 1 Then - If IsArray($FullTemp) Then - SetLog("Dll return $FullTemp :" & $FullTemp[0], $COLOR_DEBUG) - Else - SetLog("Dll return $FullTemp : ERROR" & $FullTemp, $COLOR_DEBUG) - EndIf - EndIf - - If IsArray($FullTemp) Then - $TroopTypeT = StringSplit($FullTemp[0], "|") - EndIf - - If $g_iDebugSetlogTrain = 1 Then - If IsArray($TroopTypeT) Then - SetLog("$Trooptype split # : " & $TroopTypeT[0], $COLOR_DEBUG) - Else - SetLog("$Trooptype split # : ERROR " & $TroopTypeT, $COLOR_DEBUG) - EndIf - EndIf - If $g_iDebugSetlogTrain = 1 Then SetLog("Start the Loop", $COLOR_DEBUG) - - For $i = 0 To UBound($g_asTroopName) - 1 ; Reset the variables - $g_aiSlotInArmy[$i] = -1 - Next - - For $i = 0 To UBound($g_avDTtroopsToBeUsed, 1) - 1 ; Reset the variables - $g_avDTtroopsToBeUsed[$i][1] = 0 - Next - - If IsArray($TroopTypeT) And $TroopTypeT[1] <> "" Then - - For $i = 1 To $TroopTypeT[0] - - $TroopQ = "0" - If _sleep($DELAYCHECKARMYCAMP1) Then Return - Local $Troops = StringSplit($TroopTypeT[$i], "#", $STR_NOCOUNT) - If $g_iDebugSetlogTrain = 1 Then SetLog("$TroopTypeT[$i] split : " & $i, $COLOR_DEBUG) - - If IsArray($Troops) And $Troops[0] <> "" Then - - If $Troops[0] = $eBarb Then - $TroopQ = $Troops[2] - $g_avDTtroopsToBeUsed[0][1] = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eBarb) Then - $CurBarb = -($TroopQ) - $g_aiSlotInArmy[$eTroopBarbarian] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eArch Then - $TroopQ = $Troops[2] - $g_avDTtroopsToBeUsed[1][1] = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eArch) Then - $CurArch = -($TroopQ) - $g_aiSlotInArmy[$eTroopArcher] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eGiant Then - $TroopQ = $Troops[2] - $g_avDTtroopsToBeUsed[2][1] = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eGiant) Then - $CurGiant = -($TroopQ) - $g_aiSlotInArmy[$eTroopGiant] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eGobl Then - $TroopQ = $Troops[2] - $g_avDTtroopsToBeUsed[4][1] = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eGobl) Then - $CurGobl = -($TroopQ) - $g_aiSlotInArmy[$eTroopGoblin] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eWall Then - $TroopQ = $Troops[2] - $g_avDTtroopsToBeUsed[3][1] = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eWall) Then - $CurWall = -($TroopQ) - $g_aiSlotInArmy[$eTroopWallBreaker] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eBall Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eBall) Then - $CurBall = -($TroopQ) - $g_aiSlotInArmy[$eTroopBalloon] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eHeal Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eHeal) Then - $CurHeal = -($TroopQ) - $g_aiSlotInArmy[$eTroopHealer] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eWiza Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eWiza) Then - $CurWiza = -($TroopQ) - $g_aiSlotInArmy[$eTroopWizard] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eDrag Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eDrag) Then - $CurDrag = -($TroopQ) - $g_aiSlotInArmy[$eTroopDragon] = $i - 1 - EndIf - - ElseIf $Troops[0] = $ePekk Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($ePekk) Then - $CurPekk = -($TroopQ) - $g_aiSlotInArmy[$eTroopPekka] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eBabyD Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eBabyD) Then - $CurBabyD = -($TroopQ) - $g_aiSlotInArmy[$eTroopBabyDragon] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eMine Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eMine) Then - $CurMine = -($TroopQ) - $g_aiSlotInArmy[$eTroopMiner] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eMini Then - $TroopQ = $Troops[2] - $g_avDTtroopsToBeUsed[5][1] = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eMini) Then - $CurMini = -($TroopQ) - $g_aiSlotInArmy[$eTroopMinion] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eHogs Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eHogs) Then - $CurHogs = -($TroopQ) - $g_aiSlotInArmy[$eTroopHogRider] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eValk Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eValk) Then - $CurValk = -($TroopQ) - $g_aiSlotInArmy[$eTroopValkyrie] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eGole Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eGole) Then - $CurGole = -($TroopQ) - $g_aiSlotInArmy[$eTroopGolem] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eWitc Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eWitc) Then - $CurWitc = -($TroopQ) - $g_aiSlotInArmy[$eTroopWitch] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eLava Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eLava) Then - $CurLava = -($TroopQ) - $g_aiSlotInArmy[$eTroopLavaHound] = $i - 1 - EndIf - - ElseIf $Troops[0] = $eBowl Then - $TroopQ = $Troops[2] - If $g_bFirstStart Or $g_bFullArmy Or IsTroopToDonateOnly($eBowl) Then - $CurBowl = -($TroopQ) - $g_aiSlotInArmy[$eTroopBowler] = $i - 1 - EndIf - - EndIf - Local $Plural = 0 - If $TroopQ > 1 Then $Plural = 1 - If $TroopQ <> 0 Then SetLog(" - No. of " & NameOfTroop($Troops[0], $Plural) & ": " & $TroopQ) - - EndIf - Next - - EndIf - - If $bCloseArmyWindow = True Then - ClickP($aAway, 1, 0, "#0000") ;Click Away - If _Sleep($DELAYCHECKARMYCAMP4) Then Return - EndIf - -EndFunc ;==>getArmyTroopCount diff --git a/COCBot/functions/Other/DeleteFiles.au3 b/COCBot/functions/Other/DeleteFiles.au3 index f61ff5a5f..ea8223cc9 100644 --- a/COCBot/functions/Other/DeleteFiles.au3 +++ b/COCBot/functions/Other/DeleteFiles.au3 @@ -4,9 +4,8 @@ ; Syntax ........: ; Parameters ....: Folder with last caracther "\" | filter files | type of delete:0 delete file, 1: put into recycle bin ; Return values .: None -; Author ........: Sardo (2015-06) +; Author ........: Sardo (2015-06), MonkeyHunter (05-2017) ; Modified ......: -; ; Needs..........: include ; Remarks .......: This file is part of MyBot, previously known as ClashGameBot. Copyright 2015-2017 ; MyBot is distributed under the terms of the GNU GPL @@ -14,11 +13,9 @@ ; Link ..........: https://github.com/MyBotRun/MyBot/wiki ; Example .......: Deletefiles("C:\Users\administrator\AppData\Local\Temp\", "*.*", 2,1) delete temp file >=2 days from now and put into recycle bin ; =============================================================================================================================== - - -Func Deletefiles($Folder, $Filter, $daydiff = 120, $type = 0) - Local $FileListName = _FileListToArray($Folder, $Filter, 1); list files to an array. - Local $x, $t, $tmin = 0 +Func Deletefiles($Folder, $Filter, $daydiff = 120, $type = 0, $Recursion = $FLTAR_NORECUR) + Local $x + Local $FileListName = _FileListToArrayRec($Folder, $Filter, $FLTAR_FILESFOLDERS, $Recursion) ; list files to an array If Not ((Not IsArray($FileListName)) Or (@error = 1)) Then For $x = $FileListName[0] To 1 Step -1 Local $FileDate = FileGetTime($Folder & $FileListName[$x]) @@ -33,12 +30,20 @@ Func Deletefiles($Folder, $Filter, $daydiff = 120, $type = 0) FileRecycle($Folder & $FileListName[$x]) EndIf Else - Return False + ContinueLoop EndIf Next Else Return False EndIf + If $Folder = $g_sProfileTempDebugPath Then ; remove empty folders in DEBUG directory + $FileListName = _FileListToArray($Folder, "*", $FLTA_FOLDERS) + If IsArray($FileListName) Then + For $x = $FileListName[0] To 1 Step -1 + If DirGetSize($Folder & $FileListName[$x]) = 0 Then DirRemove($Folder & $FileListName[$x]) + Next + EndIf + EndIf Return True EndFunc ;==>Deletefiles diff --git a/COCBot/functions/Pixels/_CheckPixel.au3 b/COCBot/functions/Pixels/_CheckPixel.au3 index a23dce519..4e182d90b 100644 --- a/COCBot/functions/Pixels/_CheckPixel.au3 +++ b/COCBot/functions/Pixels/_CheckPixel.au3 @@ -34,6 +34,16 @@ Func _CheckPixel($aScreenCode, $bNeedCapture = Default, $Ignore = Default, $sLog Return False ; EndFunc ;==>_CheckPixel +Func _CheckPixel2($aScreenCode, $sHexColor, $Ignore = Default) + If _ColorCheck( _ + $sHexColor, _ ; capture color #1 + Hex($aScreenCode[2], 6), _ ; compare to Color #2 from screencode + $aScreenCode[3], $Ignore) Then ; using tolerance from screencode and color mask name referenced by $Ignore + Return True + EndIf + Return False ; +EndFunc ;==>_CheckPixel2 + Func _WaitForCheckPixel($aScreenCode, $bNeedCapture = Default, $Ignore = Default, $sLogText = Default, $LogTextColor = Default, $bSilentSetLog = Default, $iWaitLoop = Default) If $iWaitLoop = Default Then $iWaitLoop = 250 ; if default wait time per loop, then wait 250ms Local $wCount = 0 diff --git a/COCBot/functions/Pixels/_ColorCheck.au3 b/COCBot/functions/Pixels/_ColorCheck.au3 index 7660b144f..8fc4001a7 100644 --- a/COCBot/functions/Pixels/_ColorCheck.au3 +++ b/COCBot/functions/Pixels/_ColorCheck.au3 @@ -31,6 +31,8 @@ Func _ColorCheck($nColor1, $nColor2, $sVari = 5, $Ignore = Default) Case "Heroes" ; mask RGB - Green If Abs($Blue1 - $Blue2) > $sVari Then Return False If Abs($Red1 - $Red2) > $sVari Then Return False + Case "Red+Blue" ; mask RGB - Red + If Abs($Green1 - $Green2) > $sVari Then Return False Case Else ; compare all color channels If Abs($Blue1 - $Blue2) > $sVari Then Return False If Abs($Green1 - $Green2) > $sVari Then Return False diff --git a/Languages/Russian.ini b/Languages/Russian.ini index 40bc48b91..b741633ca 100644 Binary files a/Languages/Russian.ini and b/Languages/Russian.ini differ diff --git a/MyBot.run.Watchdog.exe b/MyBot.run.Watchdog.exe index 933f510f3..867393993 100644 Binary files a/MyBot.run.Watchdog.exe and b/MyBot.run.Watchdog.exe differ diff --git a/MyBot.run.Wmi.exe b/MyBot.run.Wmi.exe index 99c084ec0..4bc7f4411 100644 Binary files a/MyBot.run.Wmi.exe and b/MyBot.run.Wmi.exe differ diff --git a/MyBot.run.au3 b/MyBot.run.au3 index 15ae9df71..d2b277706 100644 --- a/MyBot.run.au3 +++ b/MyBot.run.au3 @@ -23,15 +23,15 @@ #pragma compile(Icon, "Images\MyBot.ico") #pragma compile(FileDescription, Clash of Clans Bot - A Free Clash of Clans bot - https://mybot.run) #pragma compile(ProductName, My Bot) -#pragma compile(ProductVersion, 7.1.3) -#pragma compile(FileVersion, 7.1.3) +#pragma compile(ProductVersion, 7.1.4) +#pragma compile(FileVersion, 7.1.4) #pragma compile(LegalCopyright, © https://mybot.run) #pragma compile(Out, MyBot.run.exe) ; Required ; Enforce variable declarations Opt("MustDeclareVars", 1) -Global $g_sBotVersion = "v7.1.3" ;~ Don't add more here, but below. Version can't be longer than vX.y.z because it is also use on Checkversion() +Global $g_sBotVersion = "v7.1.4" ;~ Don't add more here, but below. Version can't be longer than vX.y.z because it is also use on Checkversion() Global $g_sBotTitle = "" ;~ Don't assign any title here, use Func UpdateBotTitle() Global $g_hFrmBot = 0 ; The main GUI window @@ -464,7 +464,7 @@ Func SetupFilesAndFolders() If $g_bDeleteLoots Then DeleteFiles($g_sProfileLootsPath, "*.*", $g_iDeleteLootsDays, 0) If $g_bDeleteTemp Then DeleteFiles($g_sProfileTempPath, "*.*", $g_iDeleteTempDays, 0) - DeleteFiles($g_sProfileTempDebugPath, "*.*", $g_iDeleteTempDays, 0) + DeleteFiles($g_sProfileTempDebugPath, "*.*", $g_iDeleteTempDays, 0, $FLTAR_RECUR) EndIf SetDebugLog("$g_sProfilePath = " & $g_sProfilePath) @@ -557,6 +557,7 @@ Func MainLoop() Switch $g_iBotAction Case $eBotStart BotStart($iStartDelay) + $iStartDelay = 0 ; don't autostart delay in future If $g_iBotAction = $eBotStart Then $g_iBotAction = $eBotNoAction Case $eBotStop BotStop() diff --git a/MyBot.run.exe b/MyBot.run.exe index 06044f581..a291c2d22 100644 Binary files a/MyBot.run.exe and b/MyBot.run.exe differ diff --git a/Strategies/TH9 Shuttered GoWiPe Scripted Attack.ini b/Strategies/TH9 Shuttered GoWiPe Scripted Attack.ini index 472e04b3c..75eaaab4d 100644 --- a/Strategies/TH9 Shuttered GoWiPe Scripted Attack.ini +++ b/Strategies/TH9 Shuttered GoWiPe Scripted Attack.ini @@ -1,313 +1,352 @@ [preset] -info=NOTES:\n\nTROPHIES RANGE: 5000 - 5000\n\nTRAIN ARMY SETTINGS:\n- Elixir Troops: Custom\n Arch 100% Wall 8 Pekk 3 Wiza 17\n- Dark Elixir Troops: Custom\n Gole 2\n\nSEARCH SETTINGS:\n- AS search: s. 1-9999\n- AS filter: G+E >= 100000 TR >= 10 TH >= 9 \n\nATTACK SETTINGS:\n- AS: Scripted Attack > \nEND BATTLE SETTINGS:\n\n- AS: \n\n -[collectors] -lvl6Enabled= -lvl7Enabled= -lvl8Enabled= -lvl9Enabled= -lvl10Enabled= -lvl11Enabled= -lvl12Enabled= -lvl6fill=1 -lvl7fill=1 -lvl8fill=1 -lvl9fill= -lvl10fill= -lvl11fill= -lvl12fill= -tolerance= -[search] -DBMeetGE=0 -DBMeetDE=0 -DBMeetTrophy=0 -DBMeetTH=0 -DBMeetTHO=0 -DBWeakBase=0 -DBMeetOne=0 -DBEnableAfterCount=1 -DBEnableBeforeCount=9999 -DBEnableAfterTropies=0 -DBEnableBeforeTropies=6000 -DBEnableAfterArmyCamps=80 -DBsearchGold=80000 -DBsearchElixir=80000 -DBsearchGoldPlusElixir=160000 -DBsearchDark=0 -DBsearchTrophy=0 -DBTHLevel=0 -DBWeakMortar=5 -DBWeakWizTower=4 -DBWeakXBow= -DBWeakInferno= -DBWeakEagle= -DBCheckMortar= -DBCheckWizTower= -DBCheckXBow= -DBCheckInferno= -DBCheckEagle= -DBcheck=0 -ABcheck=1 -TScheck=0 -ChkDBSearchSearches=1 -ChkABSearchSearches=1 -ChkTSSearchSearches=0 -ChkDBSearchTropies=0 -ChkABSearchTropies=0 -ChkTSSearchTropies=0 -ChkDBSearchCamps=0 -ChkABSearchCamps=0 -ChkTSSearchCamps=0 -ABMeetGE=2 -ABMeetDE=0 -ABMeetTrophy=1 -ABMeetTH=1 -ABMeetTHO=0 -ABWeakBase=0 -ABMeetOne=0 -ABEnableAfterCount=1 -ABEnableBeforeCount=9999 -ABEnableAfterTropies=0 -ABEnableBeforeTropies=6000 -ABEnableAfterArmyCamps=100 -ABsearchGold=80000 -ABsearchElixir=80000 -ABsearchGoldPlusElixir=100000 -ABsearchDark=0 -ABsearchTrophy=10 -ABTHLevel=3 -ABWeakMortar=5 -ABWeakWizTower=4 -ABWeakXBow= -ABWeakInferno= -ABWeakEagle= -ABCheckMortar= -ABCheckWizTower= -ABCheckXBow= -ABCheckInferno= -ABCheckEagle= -reduction=1 -reduceCount=50 -reduceGold=1000 -reduceElixir=1000 -reduceGoldPlusElixir=2000 -reduceDark=10 -reduceTrophy=1 -ChkRestartSearchLimit=0 -RestartSearchLimit=15 -BullyMode=0 -ATBullyMode=150 -YourTH=0 -THBullyAttackMode=0 -THaddTiles=2 -TSMeetGE=0 -TSEnableAfterCount=1 -TSEnableBeforeCount=9999 -TSEnableAfterTropies=0 -TSEnableBeforeTropies=6000 -TSEnableAfterArmyCamps=50 -TSsearchGold=80000 -TSsearchElixir=80000 -TSsearchGoldPlusElixir=160000 -TSsearchDark=600 -TrophyRange=1 -MaxTrophy=5000 -MinTrophy=5000 -chkTrophyHeroes=1 -chkTrophyAtkDead=1 -DTArmyMin=90 -SWTtiles=2 +info=NOTES:\n\nTRAIN ARMY SETTINGS:\n- Custom Train Troops:\n Arch 1x Wall 8x Wiza 17x Pekk 3x Gole 2x\n\nSEARCH SETTINGS:\n- AS search: s. 1-9999\n- AS filter: G >= 50000 & E >= 150000 D >= 1000 TR >= 10 TR <= 99 TH >= 9 \nReduce or Disbale trophy filter in higer leagues\nATTACK SETTINGS:\n- AS: Scripted Attack > \nEND BATTLE SETTINGS: None\n\n- AS: \n\n [attack] -DBAtkAlgorithm=0 ABAtkAlgorithm=1 -DBSelectTroop=0 -ABSelectTroop=0 -TSSelectTroop=0 -DBStandardAlgorithm=0 -LBStandardAlgorithm=1 -DBDeploy=3 -DBUnitD=4 -DBWaveD=4 -DBRandomSpeedAtk=0 -DBSmartAttackGoldMine=0 -DBSmartAttackElixirCollector=0 -DBSmartAttackDarkElixirDrill=0 -DBSmartAttackRedArea=1 -$chkDBAttackNearElixirCollector=0 -$chkDBAttackNearDarkElixirDrill=0 -DBSmartAttackDeploy=1 +ABCloneSpell=1 ABDeploy=3 -ABUnitD=4 -ABWaveD=4 +ABDropCC=1 +ABEarthquakeSpell=1 +ABFreezeSpell=1 +ABHasteSpell=1 +ABHealSpell=1 +ABJumpSpell=1 +ABKingAtk=1 +ABKingWait=1 +ABLightSpell=1 +ABPoisonSpell=1 +ABQueenAtk=2 +ABQueenWait=2 +ABRageSpell=1 ABRandomSpeedAtk=0 -ABSmartAttackGoldMine=0 -ABSmartAttackElixirCollector=0 +ABSelectTroop=0 +ABSkeletonSpell=1 ABSmartAttackDarkElixirDrill=0 -ABSmartAttackRedArea=1 -$chkABAttackNearElixirCollector=0 -$chkABAttackNearDarkElixirDrill=0 ABSmartAttackDeploy=0 +ABSmartAttackElixirCollector=0 +ABSmartAttackGoldMine=0 +ABSmartAttackRedArea=1 +ABUnitD=4 +ABWardenAtk=0 +ABWardenWait=0 +ABWaveD=4 +ActivateKQ=Auto +ActivateWarden=0 +AttackTHType=Bam +DBAtkAlgorithm=0 +DBCloneSpell=0 +DBDeploy=3 +DBDropCC=1 +DBEarthquakeSpell=0 +DBFreezeSpell=0 +DBHasteSpell=0 +DBHealSpell=0 +DBJumpSpell=0 DBKingAtk=1 DBKingWait=0 -ABKingAtk=1 -ABKingWait=1 -TSKingAtk=0 +DBLightSpell=0 +DBPoisonSpell=0 DBQueenAtk=2 DBQueenWait=0 -ABQueenAtk=2 -ABQueenWait=2 -TSQueenAtk=0 -DBDropCC=1 +DBRageSpell=0 +DBRandomSpeedAtk=0 +DBSelectTroop=0 +DBSkeletonSpell=0 +DBSmartAttackDarkElixirDrill=0 +DBSmartAttackDeploy=1 +DBSmartAttackElixirCollector=0 +DBSmartAttackGoldMine=0 +DBSmartAttackRedArea=1 +DBStandardAlgorithm=0 +DBUnitD=4 DBWardenAtk=0 DBWardenWait=0 -ABWardenAtk=0 -ABWardenWait=0 -ABDropCC=1 +DBWaveD=4 +delayActivateKQ=9000 +delayActivateW=25 +DroplineEdgeAB=0 +DroplineEdgeDB=1 +LBStandardAlgorithm=1 +RedlineRoutineAB=0 +RedlineRoutineDB=0 +ScreenshotLootInfo=0 +ScriptAB=TH9 Shuttered GoWiPe +ScriptDB=Barch four fingers +TakeLootSnapShot=0 +THSnipeBeforeDBEnable=0 +THSnipeBeforeDBScript=Bam +THSnipeBeforeDBTiles=2 +THSnipeBeforeLBEnable=0 +THSnipeBeforeLBScript=Bam +THSnipeBeforeLBTiles=2 TSDropCC=0 -TSWardenAtk=0 -DBLightSpell=0 -ABLightSpell=0 -TSLightSpell=0 -DBHealSpell=0 -ABHealSpell=1 +TSEarthquakeSpell=0 +TSFreezeSpell=0 +TSHasteSpell=0 TSHealSpell=0 -DBRageSpell=0 -ABRageSpell=1 -TSRageSpell=0 -DBJumpSpell=0 -ABJumpSpell=0 TSJumpSpell=0 -DBFreezeSpell=0 -ABFreezeSpell=0 -TSFreezeSpell=0 -DBPoisonSpell=0 -ABPoisonSpell=0 +TSKingAtk=0 +TSLightSpell=0 TSPoisonSpell=0 -DBEarthquakeSpell=0 -ABEarthquakeSpell=0 -TSEarthquakeSpell=0 -DBHasteSpell=0 -ABHasteSpell=0 -TSHasteSpell=0 -THSnipeBeforeDBEnable=0 -THSnipeBeforeLBEnable=0 -THSnipeBeforeDBTiles=2 -THSnipeBeforeLBTiles=2 -THSnipeBeforeDBScript=Bam -THSnipeBeforeLBScript=Bam -BalanceCC=0 -ActivateKQ=Auto -ActivateWarden=0 -delayActivateKQ=9 -delayActivateW=25 -TakeLootSnapShot=0 -ScreenshotLootInfo=0 -AttackTHType=Bam -ScriptDB=Barch four fingers -ScriptAB=TH9 Shuttered GoWiPe +TSQueenAtk=0 +TSRageSpell=0 +TSSelectTroop=0 +TSWardenAtk=0 +[collectors] +lvl10Enabled=0 +lvl10fill=0 +lvl11Enabled=0 +lvl11fill=0 +lvl12Enabled=0 +lvl12fill=0 +lvl6Enabled=0 +lvl6fill=1 +lvl7Enabled=0 +lvl7fill=1 +lvl8Enabled=0 +lvl8fill=1 +lvl9Enabled=0 +lvl9fill=0 +minmatches=3 +tolerance=0 [endbattle] -txtDBTimeStopAtk=36 -chkDBTimeStopAtk=1 -txtDBTimeStopAtk2=5 -chkDBTimeStopAtk2=4 -txtDBMinGoldStopAtk2=2000 -txtDBMinElixirStopAtk2=2000 -txtDBMinDarkElixirStopAtk2=50 -chkDBEndOneStar=4 -chkDBEndTwoStars=4 -chkDBEndNoResources=0 -txtABTimeStopAtk=20 -chkABTimeStopAtk=4 -txtABTimeStopAtk2=5 -chkABTimeStopAtk2=4 -txtABMinGoldStopAtk2=2000 -txtABMinElixirStopAtk2=2000 -txtABMinDarkElixirStopAtk2=50 -chkABEndOneStar=4 -chkABEndTwoStars=4 chkABEndNoResources=0 -txtTSTimeStopAtk=20 -chkTSTimeStopAtk=1 -txtTSTimeStopAtk2=5 -chkTSTimeStopAtk2=4 -txtTSMinGoldStopAtk2=2000 -txtTSMinElixirStopAtk2=2000 -txtTSMinDarkElixirStopAtk2=50 -chkTSEndOneStar=4 -chkTSEndTwoStars=4 -chkTSEndNoResources=0 -chkDESideEB=0 -txtDELowEndMin=25 -chkDisableOtherEBO=0 +chkABEndOneStar=0 +chkABEndTwoStars=0 +chkABPercentageChange=0 +chkABPercentageHigher=0 +chkABTimeStopAtk=0 +chkABTimeStopAtk2=0 +chkDBEndNoResources=0 +chkDBEndOneStar=0 +chkDBEndTwoStars=0 +chkDBPercentageChange=0 +chkDBPercentageHigher=0 +chkDBTimeStopAtk=1 +chkDBTimeStopAtk2=0 chkDEEndAq=0 chkDEEndBk=0 chkDEEndOneStar=0 -[troop] -TroopComposition=9 -DarkTroopComposition=1 -Arch=100 -Giant=0 -Wall=8 -Barb=0 -Gobl=0 -Heal=0 -Pekk=3 -Ball=0 -Wiza=17 -Drag=0 -Mini=0 -Hogs=0 -Valk=0 -Gole=2 -Witc=0 -Lava=0 -troop1=0 -troop2=1 -troop3=1 -troop4=3 -Darktroop1=0 -Darktroop2=0 -fulltroop=100 -[Spells] -LightningSpell=0 -RageSpell=3 -HealSpell=1 -JumpSpell=0 -FreezeSpell=0 -PoisonSpell=1 -EarthSpell=0 -HasteSpell=0 -SpellFactory=9 +chkDESideEB=0 +chkDisableOtherEBO=0 +txtABMinDarkElixirStopAtk2=50 +txtABMinElixirStopAtk2=2000 +txtABMinGoldStopAtk2=2000 +txtABPercentageChange=15 +txtABPercentageHigher=60 +txtABTimeStopAtk=20 +txtABTimeStopAtk2=5 +txtDBMinDarkElixirStopAtk2=50 +txtDBMinElixirStopAtk2=2000 +txtDBMinGoldStopAtk2=2000 +txtDBPercentageChange=15 +txtDBPercentageHigher=60 +txtDBTimeStopAtk=36 +txtDBTimeStopAtk2=5 +txtDELowEndMin=25 [MilkingAttack] -LocateMine=1 -LocateElixir=1 -LocateDrill=1 -LocateElixirLevel=-1|-1|-1|-1|-1|-1|1|1|1 -MineParam=2 -DrillParam=1 +AttackDrill=1 AttackElixir=1 AttackMine=1 -AttackDrill=1 -LimitGold=9950000 -LimitElixir=9950000 +CheckStructureDestroyedAfterAttack=0 +CheckStructureDestroyedBeforeAttack=0 +DelayBetweenWavesMax=5000 +DelayBetweenWavesMin=3000 +DrillParam=1 +DropRandomPlace=0 LimitDark=200000 +LimitElixir=9950000 +LimitGold=9950000 +LocateDrill=1 +LocateElixir=1 +LocateElixirLevel=-1|-1|-1|-1|-1|-1|1|1|1| +LocateMine=1 MaxTiles=0 -TroopForWaveMin=4 -TroopForWaveMax=6 MaxWaves=3 -DelayBetweenWavesMin=3000 -DelayBetweenWavesMax=5000 -TownhallTiles=1 -TownHallAlgorithm=Queen&GobTakeTH -TownHallHitAnyway=0 +MilkAttackAfterScriptedAtk=0 +MilkAttackAfterTHSnipe=0 +MilkAttackCSVscript=Barch four fingers +MilkAttackType=1 MilkFarmForceTolerance=0 -MilkFarmForcetolerancenormal=60 MilkFarmForcetoleranceboosted=60 MilkFarmForcetolerancedestroyed=60 -CheckStructureDestroyedBeforeAttack=0 -CheckStructureDestroyedAfterAttack=0 -DropRandomPlace=0 +MilkFarmForcetolerancenormal=60 +MineParam=2 StructureOrder=2 -MilkAttackAfterTHSnipe=0 -MilkAttackAfterScriptedAtk=0 -MilkAttackCSVscript=Barch four fingers -MilkAttackType=1 +TownHallAlgorithm=Queen&GobTakeTH +TownHallHitAnyway=0 +TownhallTiles=1 +TroopForWaveMax=6 +TroopForWaveMin=4 +[search] +ABcheck=1 +ABCheckAirDefense=0 +ABCheckEagle=0 +ABCheckInferno=0 +ABCheckMortar=0 +ABCheckWizTower=0 +ABCheckXBow=0 +ABEnableAfterArmyCamps=100 +ABEnableAfterCount=1 +ABEnableAfterTropies=0 +ABEnableBeforeCount=9999 +ABEnableBeforeTropies=6000 +ABMeetDE=1 +ABMeetGE=0 +ABMeetOne=0 +ABMeetTH=1 +ABMeetTHO=0 +ABMeetTrophy=1 +ABsearchDark=1000 +ABsearchElixir=150000 +ABsearchGold=50000 +ABsearchGoldPlusElixir=100000 +ABsearchTrophy=10 +ABsearchTrophyMax=99 +ABTHLevel=3 +ABWeakAirDefense=7 +ABWeakEagle=0 +ABWeakInferno=0 +ABWeakMortar=5 +ABWeakWizTower=4 +ABWeakXBow=0 +ATBullyMode=150 +BullyMode=0 +ChkABCastleSpellWait=0 +ChkABCastleTroopsWait=1 +ChkABSearchCamps=0 +ChkABSearchSearches=1 +ChkABSearchTropies=0 +ChkABSpellsWait=1 +ChkDBCastleSpellWait=0 +ChkDBCastleTroopsWait=0 +ChkDBSearchCamps=0 +ChkDBSearchSearches=1 +ChkDBSearchTropies=0 +ChkDBSpellsWait=0 +chkDisableCollectorsFilter=0 +ChkRestartSearchLimit=1 +chkTrophyAtkDead=1 +chkTrophyHeroes=1 +ChkTSSearchCamps=0 +ChkTSSearchCamps2=0 +ChkTSSearchSearches=0 +ChkTSSearchTropies=0 +cmbABWaitForCastleSpell=0 +cmbABWaitForCastleSpell2=0 +cmbDBWaitForCastleSpell=0 +cmbDBWaitForCastleSpell2=0 +cmbTrophyHeroesPriority=0 +DBcheck=0 +DBCheckAirDefense=0 +DBCheckEagle=0 +DBCheckInferno=0 +DBCheckMortar=0 +DBCheckWizTower=0 +DBCheckXBow=0 +DBEnableAfterArmyCamps=80 +DBEnableAfterCount=1 +DBEnableAfterTropies=0 +DBEnableBeforeCount=9999 +DBEnableBeforeTropies=6000 +DBMeetDE=0 +DBMeetGE=0 +DBMeetOne=0 +DBMeetTH=0 +DBMeetTHO=0 +DBMeetTrophy=0 +DBsearchDark=0 +DBsearchElixir=80000 +DBsearchGold=80000 +DBsearchGoldPlusElixir=160000 +DBsearchTrophy=0 +DBsearchTrophyMax=99 +DBTHLevel=0 +DBWeakAirDefense=7 +DBWeakEagle=0 +DBWeakInferno=0 +DBWeakMortar=5 +DBWeakWizTower=4 +DBWeakXBow=0 +DTArmyMin=90 +MaxTrophy=5000 +MinTrophy=5000 +reduceCount=50 +reduceDark=10 +reduceElixir=1000 +reduceGold=1000 +reduceGoldPlusElixir=2000 +reduceTrophy=1 +reduction=1 +RestartSearchLimit=38 +SWTtiles=2 +THaddTiles=2 +THBullyAttackMode=0 +TrophyRange=0 +TScheck=0 +TSEnableAfterArmyCamps=50 +TSEnableAfterArmyCamps2=50 +TSEnableAfterCount=1 +TSEnableAfterTropies=0 +TSEnableBeforeCount=9999 +TSEnableBeforeTropies=6000 +TSMeetDE=0 +TSMeetGE=0 +TSsearchDark=600 +TSsearchElixir=80000 +TSsearchGold=80000 +TSsearchGoldPlusElixir=160000 +YourTH=0 +[Spells] +CSpell=0 +ESpell=0 +FSpell=0 +HaSpell=0 +HSpell=1 +JSpell=0 +LSpell=0 +PSpell=1 +RSpell=3 +SkSpell=0 +SpellFactory=9 +[troop] +Arch=1 +BabyD=0 +Ball=0 +Barb=0 +Bowl=0 +chkTroopOrder=1 +cmbTroopOrder0=1 +cmbTroopOrder1=6 +cmbTroopOrder10=13 +cmbTroopOrder11=11 +cmbTroopOrder12=0 +cmbTroopOrder13=16 +cmbTroopOrder14=8 +cmbTroopOrder15=14 +cmbTroopOrder16=7 +cmbTroopOrder17=2 +cmbTroopOrder18=17 +cmbTroopOrder2=15 +cmbTroopOrder3=9 +cmbTroopOrder4=4 +cmbTroopOrder5=12 +cmbTroopOrder6=3 +cmbTroopOrder7=18 +cmbTroopOrder8=10 +cmbTroopOrder9=5 +Drag=0 +fulltroop=99 +Giant=0 +Gobl=0 +Gole=2 +Heal=0 +Hogs=0 +Lava=0 +Mine=0 +Mini=0 +Pekk=3 +QuickTrainArmyNum=1 +Valk=0 +Wall=8 +Witc=0 +Wiza=17 diff --git a/imgxml/Storages/Collectors/Collector_12_90.xml b/imgxml/Storages/Collectors/Collector_12_90.xml new file mode 100644 index 000000000..6520c0885 --- /dev/null +++ b/imgxml/Storages/Collectors/Collector_12_90.xml @@ -0,0 +1 @@ +LO238ELf5AlNAtCoqWpnf9Gbz57a9bZnV7tl4I1aB6a3aGs/YUI1pM+hD0myInL3xcbROsG5Px8DwTpOOOecDPFyhhJOPw+pR9jS+Ivx+OnFChXVhmDhE7Vgy/DfOo9ctO5HgPyoZYCR2efJILdsqTYlHZFt35anwEUzBLsd12nPYk6i7pJ30OvYQvBm6whOr3Ns3p6vdNvJsTVFB+cyVg3/4xCqUHw/0Ev5l+vGDNoGnBQnhTFqCjZaHN2uJJrNQC1cYuKwHjJHA9Ni/FVdrVNTdPqgTa07okSAlGXlv1Rbb3hBH/ydOPEmg8dKyDrUJcoB7hYp7+M2f5Mk6hy+bOzr8QerzjdUmGJFu1Uq7AZhO0aF08y2lOGqOKh1oyokoTRyr407rNTHHziZsvR91EtoUSY2kI5jUDFRIlKe3xUYc0GHaAqOsG1MVyTAfgXwJJ+/EcTXM3vfmdVwiRiHMbWYbW0Pa71Cqh4YSvhNnKRBFo4OBrkZoFBxjwpE6ZEeYqB6L7uSnPjh2JSyJDTObRKSDzgsfYCp1N66m81Hex24izfnK1wHpd9MU3Dra2BH2r/9yYyMX49XA/iFxAkgnyy+mX7r01YHtf2jsUEVRl9muILKxZowzA== \ No newline at end of file diff --git a/imgxml/Storages/Collectors/Collector_5_94.xml b/imgxml/Storages/Collectors/Collector_5_94.xml new file mode 100644 index 000000000..6df35012d --- /dev/null +++ b/imgxml/Storages/Collectors/Collector_5_94.xml @@ -0,0 +1 @@ +LO238ELf5AlNAtCoqWpnf9Gbz57a9bZnV7tl4I1aB6a3aGs/YUI1pM+hD0myInL3xcbROsG5Px8DwTpOOOecDPFyhhJOPw+pR9jS+Ivx+OnP97+D6/F2Chqy+w/Tn5DxCMRTM4BDs2qR2efJILdsqTYlHZFt35anwEUzBLsd12nPYk6i7pJ30OvYQvBm6whOr3Ns3p6vdNvJsTVFB+cyVg3/4xCqUHw/FsGRZxA53fJgSptmG+8O+DfEHXYW7YkY+NgtWDOMyjBHlDkF1OJvEyanALCKj+ZTlCWjdJ1GvORhYWCUelsHnf5hXsS6Tha0aO6lyf47pUQwZL4dYiIWGxb5afrmRUhNvqKNkrqLzvLRsEZteEtgl5LOELgNQYuDABrUkQgbCobXYkL8D16LV4JG3hW0aYYNVl3SJS31gOG9PEguV7wqy2XI2DMO2HuwjUI0d7es1GjKWoJIo/bwT6zq6ImuoaH5jt8nnAjSFx/Hh3EVNGrEmSawpMVl3GkoL/f3N3y1nPylhZD8w83B7bX9o7FBFUZfZriCysWaMMw= \ No newline at end of file diff --git a/imgxml/Storages/GoldMines/Mines_10_89.xml b/imgxml/Storages/GoldMines/Mines_10_89.xml new file mode 100644 index 000000000..3ed6f7c09 --- /dev/null +++ b/imgxml/Storages/GoldMines/Mines_10_89.xml @@ -0,0 +1 @@ +LO238ELf5AlNAtCoqWpnf9Gbz57a9bZnV7tl4I1aB6a3aGs/YUI1pM+hD0myInL3xcbROsG5Px8DwTpOOOecDPFyhhJOPw+pR9jS+Ivx+On1qqpR5EecLtoDY52LqTMeG00guIQz7pKR2efJILdsqTYlHZFt35anwEUzBLsd12nPYk6i7pJ30OvYQvBm6whOr3Ns3p6vdNvJsTVFB+cyVg3/4xCqUHw/+qUu52BcMdtnNzjbbbK9+2uA+4D6Kr9AkEbEgbgOEJa+H4POjh2M1aZ4Di7OwSOJJloemgkPBSJ5lp2rH0L6kf13NENA73Q2g91LG9fo8lEKu7cu7Yfr4vATCO20wVDiB3AztGZnQiN+KlxilIXvz7JmlBXzry4pQ9a+GEF3HyEVMP2p6Gd5+LdZmeNuxI7nP5KxJ1AWL5FOvXHJ8i4bHvQDB6jHd5elkh+Qr5iI3LkwdtzHJeupzpl4fLQr/K9qzmzlThnyEqmoDP6Bjdzvr5l+btfuZiEJId1Ak0j178kWAKllk+IfLehdXRIGJqSXJ9gGS8wHL0PZQAf5vl+veD1spXgqRA5B64anN3JdKwYcmO8k5ei1ZJQOQ+i2waHpowivb+qKuSxChZSv9wCcR1FTWKuay3mTt2YXlgpsN1ChKDDboTnjXWdIJZOTgVm2v6UKDF/d90YC/Z4LuSM965phJG3/lt9OxmCP13qJVYS8Xhdap4dg5I7i1hUC4Byi9OQtsysVUOlm+ArDDjTzOjpmAa7Cs3eFOPrpX7atqd7hmEVCzqK8DTs9wOv6uQA5v/gy+9m6UrcfmqR8Al3dLJDEY7atPUcIbF3s51T3nenQlltg83po2uwyXH2/ATiS+20au2kr1V47y749gnUhbqd7rIVtz4jsAxKa1pn6bBc= \ No newline at end of file diff --git a/imgxml/Storages/GoldMines/Mines_11_89.xml b/imgxml/Storages/GoldMines/Mines_11_89.xml new file mode 100644 index 000000000..d15c03ac6 --- /dev/null +++ b/imgxml/Storages/GoldMines/Mines_11_89.xml @@ -0,0 +1 @@ +LO238ELf5AlNAtCoqWpnf9Gbz57a9bZnV7tl4I1aB6a3aGs/YUI1pM+hD0myInL3xcbROsG5Px8DwTpOOOecDPFyhhJOPw+pR9jS+Ivx+OmyzDinENKS1FvW2pQLLkkj9J+UgJAJ5MaR2efJILdsqTYlHZFt35anwEUzBLsd12nPYk6i7pJ30OvYQvBm6whOr3Ns3p6vdNvJsTVFB+cyVg3/4xCqUHw/3M7rzLS9fD2SnEdHFlVJCvwalrqqzkE1VXn14x9RfNEcnuOBeUIWRGXHHa4cBlneBrysnLacqjd/1H4LvOL/i/MuqvEEDbKclixqZ7VKO3S1qBalgDptl9oNjndIfHlpO+P+GjFboLmDvhSC/6LA5hp/HIVefb8fkhfhO1T1WMHXyUmR/nU7iFjpGykw7gySBgTWhufWBN+AY+52URqiJxMWgUFciHaR47XBdcogQ1TCLb71OiTfk/zWcshg9VpRUnU0YVsSORgTCeI8CFkgLCIRZNsBd7kBgyzUAxcRWrNPd2v/85B/VY24N/y+KaG1AgF9txpvsJYHd0RdIvJTY63dvr4bM68eUvwdo8EXnaWOC2Inw/TVPSFxyzQ/9mWBEQibhoeQitoyOPn9uHt7EJNceEhVYg9qrLP6cVOLFY7EjmLhYME2rIrec1pfDVAfGOF5FF5u2vDYrdoKmLu6rRfcQ6JTGzxGHFLOOVdaWVQ/gsNhfKk8ZDJO0QUlxihRWzO/XVQlex3j2mztDa0UCAO0rdiUWM1x3KPVm/wYDpWnkx1e3C5v9KoG5uMypwL1kCz6FA+3NGt3wNYsBYZEaKtL8vi802YzJ3uPFuiuGhine6yFbc+I7AMSmtaZ+mwX \ No newline at end of file diff --git a/imgxml/Storages/GoldMines/Mines_12_87.xml b/imgxml/Storages/GoldMines/Mines_12_87.xml new file mode 100644 index 000000000..9e820690c --- /dev/null +++ b/imgxml/Storages/GoldMines/Mines_12_87.xml @@ -0,0 +1 @@ +LO238ELf5AlNAtCoqWpnf9Gbz57a9bZnV7tl4I1aB6a3aGs/YUI1pM+hD0myInL3xcbROsG5Px8DwTpOOOecDPFyhhJOPw+pR9jS+Ivx+OmyzDinENKS1FvW2pQLLkkj9J+UgJAJ5MaR2efJILdsqTYlHZFt35anwEUzBLsd12nPYk6i7pJ30OvYQvBm6whOr3Ns3p6vdNvJsTVFB+cyVg3/4xCqUHw/3M7rzLS9fD2SnEdHFlVJCp7aPMHN0D2Fs7HtpYsUGtsDZMm5ml5oWjG4QPSXZ5NnW3fk2vrbn8mlhuM8A+zpEJhE99GIrsEpwxvGyrqnbWISvtSK8001RUs6usPMYe1gVv9yL/JdYe/uBE26thsEVBfvRbJnbXDImzbZ9bye/cc7fbmZPChIGM6m07qly4RlQy0uH45xPMkoUbcox0c6AZPDZ6QriaTXDLFRsITxNeFJVTqUofHJbq44qaHGG8pNX9N4BxZHqMWjrt1lEutPKNusoCO0usFDHaTx1xMYWuuE9jeF5Ew6ZsTGv4DZhpj3oknV0Z5z57rCN3D8l82VpSNm/9gdM5v64mDNWqP5f8btbJFZydzbdbJYDe7XZAcFEHi7RcpG+VrYSfmhbhiAwrY0CkLJSqbLpaRAs41uZHH351hKBZieiqUezJQxZDRT6QjmRu+H+TOejRjF968OGVK2pOvcWo1/bFZ8nvlTkbEI0dWGn2V+E/0yXahwh2UI380gXknXRl4tFpV5gP/EEW1dRYRv+in93FWQOcEAPluoaswdVtjlu46sGMa5gf/lWab9ZB2jFeF3xr1UisiKAatL8vi802YzJ3uPFuiuGhine6yFbc+I7AMSmtaZ+mwX \ No newline at end of file diff --git a/imgxml/Storages/GoldMines/Mines_6_93.xml b/imgxml/Storages/GoldMines/Mines_6_93.xml new file mode 100644 index 000000000..1d0359617 --- /dev/null +++ b/imgxml/Storages/GoldMines/Mines_6_93.xml @@ -0,0 +1 @@ +LO238ELf5AlNAtCoqWpnf9Gbz57a9bZnV7tl4I1aB6a3aGs/YUI1pM+hD0myInL3xcbROsG5Px8DwTpOOOecDPFyhhJOPw+pR9jS+Ivx+OlnVUv3T+rbMl/t9iVhS0C8+ppOi8KzSj2R2efJILdsqTYlHZFt35anwEUzBLsd12nPYk6i7pJ30OvYQvBm6whOr3Ns3p6vdNvJsTVFB+cyVg3/4xCqUHw/559x1SW4tOUmKj2IDrobZvQzykyH3VQtsNse3v8pmdDsFvOdqhwrFf/kr0SBkJ72LThE4DJNutICeuCX15tq9KkNWJXgP4H/ce+Oo1Anr6ueoYqPOqDCfMgAgFY2CwJOax3fik7xRzgQ1UDvuRS9NXlccO3+9ruOJLVbaHaA2kJE0pzl8tgKxq+/+ONPtcsFw4zfzjKlN+pV/rUAGYI/NGuqPkGfZgyPDXGSAFJY7WaAaLbIZ6L76EREEYo5Egb4VxYhb78ZvRtxzur6lN8p3i5ZNUPfZGezrEvvcV0DcEeyVcpDG7bOqWbmVznjELPpYt0n8dtCegZ4sfREBcW2akS3DmlrUgSBUlQ0BrRg4vNJyohnHWFXh1cD+IXECSCfLL6ZfuvTVge1/aOxQRVGX2a4gsrFmjDM \ No newline at end of file diff --git a/imgxml/Storages/GoldMines/Mines_7_94.xml b/imgxml/Storages/GoldMines/Mines_7_94.xml new file mode 100644 index 000000000..27caab6d4 --- /dev/null +++ b/imgxml/Storages/GoldMines/Mines_7_94.xml @@ -0,0 +1 @@ +LO238ELf5AlNAtCoqWpnf9Gbz57a9bZnV7tl4I1aB6a3aGs/YUI1pM+hD0myInL3xcbROsG5Px8DwTpOOOecDPFyhhJOPw+pR9jS+Ivx+Om/bE2SZzbQlom5KqC0aONrgwxR6fTHsHiR2efJILdsqTYlHZFt35anwEUzBLsd12nPYk6i7pJ30OvYQvBm6whOr3Ns3p6vdNvJsTVFB+cyVg3/4xCqUHw/BYL1vlW5toVnXcV+v8SB1V7HCJJp0F5F7PWkOSjRZ3gQkGAVLqAW5og4NTVFn1gnQNcVi1pXnoAZBvRWxVHeaWT5UJ++U74JUvs1Qi9a4EZAgLCDjdBznA1MwNch4Ypj4atouSiyuSQmyhLaMQYkiB7SOAnyLGf5HqDdztBM6pf+nbLqlj5RZhYt+G1kbfgSWgKvxOOjxJrkX28j4rcfVEBfhgPvJHFX4lc0svtFVRf6kxWQYmKCkWiQfOHYs0xBIvAeVkK8c8bET2JxvDW3c6iT8RPbsjosDiM7Mgil0QRuqzJxOhOh7CUNfBswhkfKYmZhX0YmjkgaUUpkgUTFnMAPQURNFMlTNI4gAlriTLDeHbiDXmJHhveOkka6fn86Gd8d8HauiaHgm0FJ66qIU6VnwgQMEnzvh9UdyRmXZKQXcAV+GQw7pdWcnWhSRkSVp3ushW3PiOwDEprWmfpsFw== \ No newline at end of file diff --git a/imgxml/Storages/GoldMines/Mines_8_89.xml b/imgxml/Storages/GoldMines/Mines_8_89.xml new file mode 100644 index 000000000..2509c10cf --- /dev/null +++ b/imgxml/Storages/GoldMines/Mines_8_89.xml @@ -0,0 +1 @@ +LO238ELf5AlNAtCoqWpnf9Gbz57a9bZnV7tl4I1aB6a3aGs/YUI1pM+hD0myInL3xcbROsG5Px8DwTpOOOecDPFyhhJOPw+pR9jS+Ivx+Om98lj8cdqwE4noUb3LmM/9bSZSP+tp9UCR2efJILdsqTYlHZFt35anwEUzBLsd12nPYk6i7pJ30OvYQvBm6whOr3Ns3p6vdNvJsTVFB+cyVg3/4xCqUHw/tk/qUhHe0HLVUYjva+7/PB41yz/IkLRfQRJITqIsI6bes2fDThWTPJb1i47HbOMYqpOsSa05sLRvV5WI4EeN+638KuwxmUzJpHSWcQkPKpLmLsGLUMWlPp3pcPd5/MP2WCH9SU8S+38jgXsL9/B3E0iQFkcIOfVCJUycIxaNUP8w4ykIf+7LWdbxq0dRxwlpdQGiFVXTwryDb0vPnqZhalJ0ORg+R9L89aEKWHGjeoY2XXn/SRjSQ4LRCADMMlC/ftGDpowZ1zj8Er4rzUVOp5wcwXmdyQc221NTBxi7+1LurW5zvlqVOKUQUfj6TSHhUpMln/dQlbqkKl+Q8kx0EvAkoVd9bsfvEkjSe+OzoMF1ToyFU+rJir2nD8UAB+i3s2bvIt5vTbNt/7Jz1PMOw+xGbYRYkK25LYjZX3N3e2lrMvTw4id2zKAW2Kz64Sw+tf2jsUEVRl9muILKxZowzA== \ No newline at end of file diff --git a/imgxml/Storages/GoldMines/Mines_9_89.xml b/imgxml/Storages/GoldMines/Mines_9_89.xml new file mode 100644 index 000000000..88af03a42 --- /dev/null +++ b/imgxml/Storages/GoldMines/Mines_9_89.xml @@ -0,0 +1 @@ +LO238ELf5AlNAtCoqWpnf9Gbz57a9bZnV7tl4I1aB6a3aGs/YUI1pM+hD0myInL3xcbROsG5Px8DwTpOOOecDPFyhhJOPw+pR9jS+Ivx+Ol8hxtMkKXwm/W3uUiwWjXvj4wEAzdZ7RCR2efJILdsqTYlHZFt35anwEUzBLsd12nPYk6i7pJ30OvYQvBm6whOr3Ns3p6vdNvJsTVFB+cyVg3/4xCqUHw/pNjmZ0H/XkAfQUvy/ihnvjBjDjCbfVMOYMCWQozG2D3YSMhgj+9uhoBV0mG/XXTmUEwm0b0RCef08cTEOiVmmnl+s3nNqVryGncygLh2oZ7BzxKyGHI9mFSl05YWskOaV9CpUbPAIfFkkLwqeqUFpnpU92FKeuuCY4mtvdmJSZN9+vAscNeV9jmgpp7J5uVXEX9Uq3NDdTSphFtMCJqq4S/zOZavS2g6Wu0fVzjGxagqLEuPTliGJ6jprPec3YsM0vgXDIfyBlzAu0e37JX1kKK4KvVZTprxZMrzEAUIiLq3uvbfcPchuKsJUIbjCAv9EnTrhg6XcQ8cXiDQDgvgH+WDFoN2O1IPKB8CgGfo2ikrVbYi0vUIvAg2OJqrw5ONm0thtN2s3in7NiIsBNvXlYsKpIAr7oC6YooCwsBBDhh81PmxmzC4BYPxmAlpz5JSOXBbGueGiVCDtundakaAnvMoN8tbLy2J1+0y5YLYZ2egCuEBRp28Ymsy9PDiJ3bMoBbYrPrhLD61/aOxQRVGX2a4gsrFmjDM \ No newline at end of file