From c818ae09fdd7036f55140bca9220c54f2f8d8185 Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Fri, 15 May 2026 20:17:38 +0900 Subject: [PATCH 01/10] Add scale-aware runtime configuration --- PTCGPB.ahk | 53 ++++++++++----- Scripts/Include/ADB.ahk | 56 ++++++++++++++-- Scripts/Include/Config.ahk | 3 +- Scripts/Include/Logging.ahk | 15 ++++- Scripts/Include/Utils.ahk | 129 +++++++++++++++++++++++++++++++++++- 5 files changed, 232 insertions(+), 24 deletions(-) diff --git a/PTCGPB.ahk b/PTCGPB.ahk index aabdbbdf..89ba4be6 100644 --- a/PTCGPB.ahk +++ b/PTCGPB.ahk @@ -81,11 +81,19 @@ botConfig.loadSettingsToConfig("ALL") SetTimer, ShowSwipeSpeedToolTip, 50 +displayScaleSetting := botConfig.get("DisplayScale") +if (displayScaleSetting = "") + displayScaleSetting := "Auto" +configuredDisplayScale := GetConfiguredDisplayScale() +if (displayScaleSetting = "Auto") + displayScaleLabel := "Auto (resolved to " . configuredDisplayScale . "%)" +else + displayScaleLabel := displayScaleSetting . "%" hasInvalidScale := false monitorScaleList := GetAllMonitorScales() For idx, scaleValue in monitorScaleList { - if(scaleValue != 100){ + if(scaleValue != configuredDisplayScale){ hasInvalidScale := true break } @@ -94,10 +102,11 @@ For idx, scaleValue in monitorScaleList { if (hasInvalidScale) { msgTitle := "Display Scale Warning" msgText := "WARNING: Display scale issue detected!`n`n" - . "To ensure the program works correctly, ALL monitors must be set to 100% scale in Windows settings.`n`n" - . "Please change your display scale to 100% and restart the program.`n`n" - . "[!] If you are ABSOLUTELY SURE all your monitors are already at 100% (script detection error), you can choose to ignore this warning.`n`n" - . "Do you want to ignore this warning and continue anyway?" + . "PTCGPB needs one matching display scale for coordinates and image search.`n" + . "Set the bot Display Scale and every Windows monitor to the same value (100% or 125%).`n`n" + . "Bot Display Scale: " displayScaleLabel "`n`n" + . "Restart the program after changing scale settings.`n`n" + . "Continue anyway?" MsgBox, 308, %msgTitle%, %msgText% @@ -312,7 +321,12 @@ NextStep: Gui, Font, s12 cWhite Bold Gui, Add, Text, x621 y20 w155 h50 Left BackgroundTrans cWhite, % dict["title_main"] Gui, Font, s10 cWhite Bold - Gui, Add, Text, x621 y20 w155 h150 Left BackgroundTrans cWhite, % "`n" localVersion "`n(for Scale 100%)`n`nModder: Crinity " modVersion + displayScaleCaption := botConfig.get("DisplayScale") + if (displayScaleCaption = "" || displayScaleCaption = "Auto") + displayScaleCaption := "Auto/" . GetConfiguredDisplayScale() . "%" + else + displayScaleCaption := displayScaleCaption . "%" + Gui, Add, Text, x621 y20 w155 h150 Left BackgroundTrans cWhite, % "`n" localVersion "`n(Scale " displayScaleCaption ")`n`nModder: Crinity " modVersion Gui, Add, Picture, gBuyMeCoffee x625 y130 w150, %A_ScriptDir%\GUI\Images\support_me_on_kofi.png @@ -1123,6 +1137,17 @@ ShowToolsAndSystemSettings: SelectedMonitorIndex := RegExReplace(botConfig.get("SelectedMonitorIndex"), ":.*$") Gui, ToolsAndSystemSelect:Add, DropDownList, x%col2X% y%yPos2% w100 vui_SelectedMonitorIndex_Popup Choose%SelectedMonitorIndex% Background2A2A2A cWhite, %MonitorOptions% yPos2 += 25 + + displayScaleList := "Auto|100|125" + displayScaleChoose := 1 + if (botConfig.get("DisplayScale") = "100") + displayScaleChoose := 2 + else if (botConfig.get("DisplayScale") = "125") + displayScaleChoose := 3 + displayScaleTextY := yPos2 + 2 + Gui, ToolsAndSystemSelect:Add, Text, x%col2X% y%displayScaleTextY% %sectionColor%, Display Scale + Gui, ToolsAndSystemSelect:Add, DropDownList, x325 y%yPos2% w60 vui_DisplayScale_Popup Choose%displayScaleChoose% Background2A2A2A cWhite, %displayScaleList% + yPos2 += 25 rowGapY := yPos2 + 2 Gui, ToolsAndSystemSelect:Add, Text, x%col2X% y%rowGapY% %sectionColor%, % dict["Txt_RowGap"] @@ -1222,6 +1247,7 @@ saveToolsAndSystemSettings: botConfig.set("wonderpickForEventMissions", ui_wonderpickForEventMissions_Popup, "ToolsAndSystem") botConfig.set("SelectedMonitorIndex", ui_SelectedMonitorIndex_Popup, "ToolsAndSystem") + botConfig.set("DisplayScale", ui_DisplayScale_Popup, "ToolsAndSystem") botConfig.set("RowGap", ui_RowGap_Popup, "ToolsAndSystem") botConfig.set("folderPath", ui_folderPath_Popup, "ToolsAndSystem") botConfig.set("ocrLanguage", ui_ocrLanguage_Popup, "ToolsAndSystem") @@ -1575,9 +1601,10 @@ ArrangeWindows: SaveAllSettings() - scaleParam := 283 + windowMetrics := GetMumuWindowMetrics() + scaleParam := windowMetrics.scaleParam windowsPositioned := 0 - titleHeight := 40 + titleHeight := windowMetrics.titleHeight if(botConfig.get("SelectedMonitorIndex") = "") botConfig.set("SelectedMonitorIndex", "1:", "ToolsAndSystem") @@ -1595,7 +1622,7 @@ ArrangeWindows: instanceIndex := A_Index borderWidth := 4 - 1 - rowHeight := titleHeight + 492 + rowHeight := windowMetrics.rowHeight currentRow := Floor((instanceIndex - 1) / botConfig.get("Columns")) y := MonitorTop + (currentRow * rowHeight) + (currentRow * botConfig.get("rowGap")) x := MonitorLeft + (Mod((instanceIndex - 1), botConfig.get("Columns")) * (scaleParam - borderWidth * 2)) @@ -1626,7 +1653,7 @@ ArrangeWindows: instanceIndex := (botConfig.get("Mains") - 1) + A_Index + 1 borderWidth := 4 - 1 - rowHeight := titleHeight + 492 + rowHeight := windowMetrics.rowHeight currentRow := Floor((instanceIndex - 1) / botConfig.get("Columns")) y := MonitorTop + (currentRow * rowHeight) + (currentRow * botConfig.get("rowGap")) x := MonitorLeft + (Mod((instanceIndex - 1), botConfig.get("Columns")) * (scaleParam - borderWidth * 2)) @@ -1725,10 +1752,6 @@ SaveAllSettings() { botConfig.set("stopPreferenceMain", botConfig.get("stopPreferenceMain"), "Extra") botConfig.saveConfigToSettings("ALL") - - if (botConfig.get("debugMode")) { - FileAppend, % A_Now . " - Settings saved. DeleteMethod: " . botConfig.get("deleteMethod") . "`n", %A_ScriptDir%\debug_settings.log - } } ; =================== Logic - Reset account lists =================== @@ -2207,4 +2230,4 @@ return ~+F12:: ListVars Pause ; 변수 목록을 확인하기 위해 스크립트를 잠시 멈춥니다. -return \ No newline at end of file +return diff --git a/Scripts/Include/ADB.ahk b/Scripts/Include/ADB.ahk index 22d70435..e451d7e4 100644 --- a/Scripts/Include/ADB.ahk +++ b/Scripts/Include/ADB.ahk @@ -115,6 +115,51 @@ ConnectAdb() { } } +RefreshAdbConnectionAfterInstanceRestart(timeoutMs = 30000) { + global session + + startTick := A_TickCount + oldPort := session.get("adbPort") + lastPort := oldPort + + Loop { + newPort := findAdbPorts() + if (newPort) { + if (newPort != lastPort) { + LogToFile("[" . A_ScriptName . "] ADB port refreshed after instance restart: " . lastPort . " -> " . newPort, "ADB.txt") + lastPort := newPort + } + + session.set("adbPort", newPort) + ip := "127.0.0.1:" . newPort + if (oldPort && oldPort != newPort) + CmdRet(session.get("adbPath") . " disconnect 127.0.0.1:" . oldPort) + + connectionResult := CmdRet(session.get("adbPath") . " connect " . ip) + if (InStr(connectionResult, "connected to " . ip) || InStr(connectionResult, "already connected to " . ip)) { + shellResult := CmdRet(session.get("adbPath") . " -s " . ip . " shell echo ready") + if (InStr(shellResult, "ready")) { + session.set("adbShell", "") + initializeAdbShell() + LogToFile("[" . A_ScriptName . "] ADB reconnected after instance restart on " . ip, "ADB.txt") + return true + } + } + + LogToFile("[" . A_ScriptName . "] Waiting for ADB after instance restart on " . ip . ". Connection result: " . connectionResult, "ADB.txt") + } else { + LogToFile("[" . A_ScriptName . "] Waiting for ADB port after instance restart.", "ADB.txt") + } + + if ((A_TickCount - startTick) > timeoutMs) { + LogToFile("[" . A_ScriptName . "] Failed to refresh ADB after instance restart within " . timeoutMs . "ms.", "ADB.txt") + return false + } + + Sleep, 2000 + } +} + DisableBackgroundServices() { global session @@ -382,14 +427,15 @@ waitadb(){ adbClick(X, Y) { static clickCommands := Object() - static convX := 540/283, convY := 960/488, offset := -40 - - key := X << 16 | Y + metrics := GetAdbClickMetrics() + key := X "|" Y "|" metrics.convX "|" metrics.convY "|" metrics.offset + physicalX := Round(X * metrics.convX) + physicalY := Round((Y + metrics.offset) * metrics.convY) if (!clickCommands.HasKey(key)) { clickCommands[key] := Format("input tap {} {}" - , Round(X * convX) - , Round((Y + offset) * convY)) + , physicalX + , physicalY) } adbWriteRaw(clickCommands[key]) } diff --git a/Scripts/Include/Config.ahk b/Scripts/Include/Config.ahk index ee2b5438..75b57b3e 100644 --- a/Scripts/Include/Config.ahk +++ b/Scripts/Include/Config.ahk @@ -51,6 +51,7 @@ , "slowMotion": 0 , "claimSpecialMissions": 0 , "SelectedMonitorIndex": 1 + , "DisplayScale": "Auto" , "instanceLaunchDelay": 5 , "folderPath": "C:\Program Files\Netease" , "RowGap": 105 @@ -210,4 +211,4 @@ } } } -} \ No newline at end of file +} diff --git a/Scripts/Include/Logging.ahk b/Scripts/Include/Logging.ahk index 0ff7f109..21b07401 100644 --- a/Scripts/Include/Logging.ahk +++ b/Scripts/Include/Logging.ahk @@ -40,6 +40,7 @@ CreateStatusMessage(Message, GuiName := "StatusMessage", X := 0, Y := 565, debug guiWidth := 275 guiheight := 40 + Y := NormalizeStatusMessageY(Y) if(GuiName = "AvgRuns" || GuiName = "AutoGPTest" || GuiName = "AccountInfo") guiheight := 30 @@ -101,7 +102,7 @@ SetReposition(){ if(instanceHwnd){ WinGetPos, xpos, ypos, Width, Height, % session.get("winTitle") . " ahk_class Qt5156QWindowIcon" X := xpos + 5 -1 - Y := ypos + 5 + 565 - 11 + Y := ypos + 5 + NormalizeStatusMessageY(565) - 11 if (!X) X := 0 @@ -123,6 +124,18 @@ SetReposition(){ Gui, %GuiName%:Show, NoActivate %PosOption% } +NormalizeStatusMessageY(Y) { + windowMetrics := GetMumuWindowMetrics() + + if (Y = 565) + return windowMetrics.rowHeight + 33 + + if (Y = 605) + return windowMetrics.rowHeight + 73 + + return Y +} + ;Modified from https://stackoverflow.com/a/49354127 SetTextAndResize(controlHwnd, newText) { dc := DllCall("GetDC", "Ptr", controlHwnd) diff --git a/Scripts/Include/Utils.ahk b/Scripts/Include/Utils.ahk index 97b85483..f48d7d08 100644 --- a/Scripts/Include/Utils.ahk +++ b/Scripts/Include/Utils.ahk @@ -399,6 +399,20 @@ ShellRun(prms*) { } } +InitializeHiddenConsole() { + previousHwnd := DllCall("GetForegroundWindow", "Ptr") + + if (!DllCall("GetConsoleWindow", "Ptr")) + DllCall("AllocConsole") + + consoleHwnd := DllCall("GetConsoleWindow", "Ptr") + if (consoleHwnd) + DllCall("ShowWindow", "Ptr", consoleHwnd, "Int", 0) + + if (previousHwnd && WinExist("ahk_id " . previousHwnd)) + DllCall("SetForegroundWindow", "Ptr", previousHwnd) +} + CmdRet(sCmd, callBackFuncObj := "", encoding := "") { static HANDLE_FLAG_INHERIT := 0x00000001, flags := HANDLE_FLAG_INHERIT , STARTF_USESTDHANDLES := 0x100, CREATE_NO_WINDOW := 0x08000000 @@ -691,12 +705,13 @@ getScreenHandle(ParentTitle){ } FixInstanceScreen(instanceNo){ + windowMetrics := GetMumuWindowMetrics() instanceTitle := instanceNo . " ahk_class Qt5156QWindowIcon" SendMessage, 0x0005, 1, 0,, %instanceTitle% Sleep, 50 SendMessage, 0x0005, 0, 0,, %instanceTitle% Sleep, 500 - WinMove, %instanceTitle%, , , , 283, 532 + WinMove, %instanceTitle%, , , , % windowMetrics.scaleParam, % windowMetrics.rowHeight } getMuMuHwnd(winTitle) { @@ -1007,8 +1022,111 @@ findAdbPath(targetDir) { return "" } +GetConfiguredDisplayScale() { + global botConfig + + displayScale := "" + try { + displayScale := botConfig.get("DisplayScale") + } catch { + } + + if (displayScale = "" || displayScale = "Auto") { + selectedMonitorIndex := "1" + try { + selectedMonitorIndex := RegExReplace(botConfig.get("SelectedMonitorIndex"), ":.*$") + } catch { + } + + monitorScales := GetAllMonitorScales() + if (monitorScales.HasKey(selectedMonitorIndex)) + return monitorScales[selectedMonitorIndex] + + return 100 + } + + if (InStr(displayScale, "125")) + return 125 + + return 100 +} + +GetMumuWindowMetrics() { + displayScale := GetConfiguredDisplayScale() + metrics := {} + + if (displayScale = 125) { + if (IsMuMuv5()) { + metrics.scaleParam := 283 + metrics.titleHeight := 50 + } else { + metrics.scaleParam := 277 + metrics.titleHeight := 45 + } + } else { + metrics.scaleParam := 283 + metrics.titleHeight := 40 + } + + metrics.rowHeight := metrics.titleHeight + 492 + metrics.imageSearchYBias := (displayScale = 125) ? metrics.titleHeight - 45 : 0 + return metrics +} + +GetAdbClickMetrics() { + metrics := {} + + if (GetConfiguredDisplayScale() = 125) { + ; Keep the working Scale 125 tap mapping from v9.5.9. This coordinate + ; space is independent from the window chrome/image-search yBias. + metrics.convX := 540/277 + metrics.convY := 960/489 + metrics.offset := -44 + } else { + metrics.convX := 540/283 + metrics.convY := 960/488 + metrics.offset := -40 + } + + return metrics +} + +IsMuMuv5() { + static cachedIsMuMuv5 := "" + + if (cachedIsMuMuv5 != "") + return cachedIsMuMuv5 + + mumuFolder := getMuMuFolder() + cachedIsMuMuv5 := (mumuFolder != "" && FileExist(mumuFolder . "\nx_main")) ? 1 : 0 + return cachedIsMuMuv5 +} + +ResolveNeedlePath(path) { + if (GetConfiguredDisplayScale() != 125) + return path + + scale125Path := StrReplace(path, "\Needles\", "\Scale125\") + if (scale125Path != path && FileExist(scale125Path)) + return scale125Path + + return path +} + +GetScaleProfileValue(scale100Value, scale125Value) { + return (GetConfiguredDisplayScale() = 125) ? scale125Value : scale100Value +} + GetAllMonitorScales() { scales := {} + oldDpiContext := 0 + try { + ; GetDpiForMonitor returns system DPI for every monitor unless the + ; calling thread is per-monitor DPI aware while querying. + oldDpiContext := DllCall("User32\SetThreadDpiAwarenessContext", "Ptr", -3, "Ptr") + } catch { + oldDpiContext := 0 + } SysGet, monitorCount, MonitorCount @@ -1029,6 +1147,13 @@ GetAllMonitorScales() { scales[A_Index] := scalePercent } } + + if (oldDpiContext) { + try { + DllCall("User32\SetThreadDpiAwarenessContext", "Ptr", oldDpiContext, "Ptr") + } catch { + } + } return scales -} \ No newline at end of file +} From 7727211368951ec04afcb8b4ae9d6e4f9774d4f8 Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Fri, 15 May 2026 20:17:59 +0900 Subject: [PATCH 02/10] Add scale 125 coordinates and detection assets --- Scripts/Include/CardDetection.ahk | 27 +++- Scripts/Include/Coords.ahk | 161 +++++++++++++++++++- Scripts/Include/RarityBorder.ahk | 172 +++++++++++++++++++--- Scripts/Needles/Friend2.png | Bin 0 -> 1040 bytes Scripts/Scale125/CloseAlertWindow.png | Bin 0 -> 1390 bytes Scripts/Scale125/FriendSearchButton.png | Bin 0 -> 745 bytes Scripts/Scale125/GoToTitle.png | Bin 0 -> 287 bytes Scripts/Scale125/InSubMenu.png | Bin 0 -> 532 bytes Scripts/Scale125/OK2.png | Bin 156 -> 138 bytes Scripts/Scale125/Settings.png | Bin 723 -> 508 bytes Scripts/Scale125/ShinyEx_ex_1.png | Bin 0 -> 658 bytes Scripts/Scale125/WonderPickRaminItems.png | Bin 0 -> 609 bytes Scripts/Scale125/shiny1star10.png | Bin 0 -> 612 bytes Scripts/Scale125/shiny1star11.png | Bin 0 -> 566 bytes Scripts/Scale125/shiny1star12.png | Bin 0 -> 233 bytes Scripts/Scale125/shiny1star6.png | Bin 0 -> 594 bytes Scripts/Scale125/shiny1star7.png | Bin 0 -> 603 bytes Scripts/Scale125/shiny1star8.png | Bin 0 -> 542 bytes Scripts/Scale125/shiny1star9.png | Bin 0 -> 599 bytes 19 files changed, 332 insertions(+), 28 deletions(-) create mode 100644 Scripts/Needles/Friend2.png create mode 100644 Scripts/Scale125/CloseAlertWindow.png create mode 100644 Scripts/Scale125/FriendSearchButton.png create mode 100644 Scripts/Scale125/GoToTitle.png create mode 100644 Scripts/Scale125/InSubMenu.png create mode 100644 Scripts/Scale125/ShinyEx_ex_1.png create mode 100644 Scripts/Scale125/WonderPickRaminItems.png create mode 100644 Scripts/Scale125/shiny1star10.png create mode 100644 Scripts/Scale125/shiny1star11.png create mode 100644 Scripts/Scale125/shiny1star12.png create mode 100644 Scripts/Scale125/shiny1star6.png create mode 100644 Scripts/Scale125/shiny1star7.png create mode 100644 Scripts/Scale125/shiny1star8.png create mode 100644 Scripts/Scale125/shiny1star9.png diff --git a/Scripts/Include/CardDetection.ahk b/Scripts/Include/CardDetection.ahk index b970fec8..acda5bfa 100644 --- a/Scripts/Include/CardDetection.ahk +++ b/Scripts/Include/CardDetection.ahk @@ -29,7 +29,7 @@ DetectSixCardPack() { Path = %imagePath%6cardpackindicator.png if (FileExist(Path)) { pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 228, 324, 248, 351, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [228, 324, 248, 351], [228, 324, 248, 351], searchVariation) if (vRet = 1) { ; Found the check image, so this is a 5-card pack Gdip_DisposeImage(pBitmap) @@ -57,7 +57,27 @@ CheckCardLoading(totalCardsInPack){ global session count := 0 - if (totalCardsInPack = 4) { + if (GetConfiguredDisplayScale() = 125) { + if (totalCardsInPack = 4) { + borderCoords := [[96, 284, 116, 286] + ,[181, 284, 201, 286] + ,[96, 399, 116, 401] + ,[181, 399, 201, 401]] + } else if (totalCardsInPack = 6) { + borderCoords := [[56, 284, 76, 286] + ,[139, 284, 159, 286] + ,[222, 284, 242, 286] + ,[56, 399, 76, 401] + ,[139, 399, 159, 401] + ,[222, 399, 242, 401]] + } else { + borderCoords := [[56, 284, 76, 286] + ,[139, 284, 159, 286] + ,[222, 284, 242, 286] + ,[96, 399, 116, 401] + ,[181, 399, 201, 401]] + } + } else if (totalCardsInPack = 4) { borderCoords := [[96, 279, 116, 281] ; Card 1 ,[181, 279, 201, 281] ; Card 2 ,[96, 394, 116, 396] ; Card 3 @@ -105,7 +125,8 @@ AnalysisBorder(totalCardsInPack) { global session, isDevelopment, rarityCheckers currentPackInfo := {"isVerified": false, "CardSlot": [], "TypeCount": {}} - loadingBorderCoords := [[121, 269, 154, 272], [121, 297, 154, 300]] + loadingBorderCoords := GetScaleProfileValue([[121, 269, 154, 272], [121, 297, 154, 300]] + , [[121, 274, 154, 277], [121, 302, 154, 305]]) pBitmap := 0 Loop, { pBitmap := from_window(getMuMuHwnd(session.get("winTitle"))) diff --git a/Scripts/Include/Coords.ahk b/Scripts/Include/Coords.ahk index bb514426..9231a50c 100644 --- a/Scripts/Include/Coords.ahk +++ b/Scripts/Include/Coords.ahk @@ -22,12 +22,15 @@ class Needle{ needleName := "" imageName := "" coords := "" + coords100 := "" + scale125Coords := "" __New(needleName, imageName, coords) { this.needleName := needleName this.imageName := imageName this.coords := coords + this.coords100 := coords } } @@ -40,7 +43,21 @@ class NeedlesDict{ } Get(needleName){ - return this.needles[needleName] + needleObj := this.needles[needleName] + + if (GetConfiguredDisplayScale() = 125 && needleObj.scale125Coords) + needleObj.coords := needleObj.scale125Coords + else + needleObj.coords := needleObj.coords100 + + return needleObj + } + + SetScale125(needleName, coords){ + if (!this.needles.HasKey(needleName)) + return + + this.needles[needleName].scale125Coords := coords } } @@ -53,6 +70,7 @@ needlesDict.Add(new Needle("Friend_AddButtonInFriendList", "Add", new Coordinate needlesDict.Add(new Needle("Friend_FriendListSubmenu", "Friends", new Coordinate(84, 457, 100, 469))) needlesDict.Add(new Needle("Friend_FriendRequestsSubMenu", "requests", new Coordinate(97, 447, 104, 471))) needlesDict.Add(new Needle("Friend_BottomDarkHomeIcon", "Home", new Coordinate(28, 504, 42, 518))) +needlesDict.Add(new Needle("Friend_SocialHubFriendButton", "Friend2", new Coordinate(20, 440, 70, 500))) needlesDict.Add(new Needle("Friend_ActivatedClearAllButton", "clearAll", new Coordinate(191, 493, 200, 509))) needlesDict.Add(new Needle("Friend_FriendListEmpty", "empty", new Coordinate(42, 163, 66, 185))) needlesDict.Add(new Needle("99ko", "99ko", new Coordinate(63, 106, 102, 120))) @@ -240,4 +258,143 @@ needlesDict.Add(new Needle("GPTest_FriendRequestButtonInUserDetails", "Favourite ;needlesDict.Add(new Needle("CountrySelect2", ) ; Unknown -;Proceed \ No newline at end of file +;Proceed + +;============================================================================================================================== +; Scale 125 coordinate overrides from the last Scale 125 release (v9.5.9). +; Default coordinates above remain the Scale 100 profile. + +needlesDict.SetScale125("Create_SoloBattleMissionIconInDetail", new Coordinate(108, 180, 177, 208)) +needlesDict.SetScale125("Friend_DisabledDenyAllRequestButtonInApproveSubmenu", new Coordinate(186, 496, 206, 518)) +needlesDict.SetScale125("Menu_SettingButtonInMenu", new Coordinate(24, 158, 57, 189)) +needlesDict.SetScale125("Menu_RemoveAccountNintendoButtonInMenu", new Coordinate(56, 435, 108, 460)) +needlesDict.SetScale125("Friend_AddButtonInFriendList", new Coordinate(226, 100, 270, 135)) +needlesDict.SetScale125("Friend_SearchFriendButton", new Coordinate(10, 433, 45, 460)) +needlesDict.SetScale125("Friend_SearchFriendWindowCancelButtonCorner", new Coordinate(0, 375, 70, 430)) +needlesDict.SetScale125("Friend_BlankFriendSlotAreaInApproveSubmenu", new Coordinate(170, 450, 195, 480)) +needlesDict.SetScale125("Create_BirthConfirmCancelButton", new Coordinate(116, 352, 138, 389)) +needlesDict.SetScale125("Common_UnknownButton2", new Coordinate(75, 340, 195, 530)) +needlesDict.SetScale125("Common_ColorChangeButton", new Coordinate(100, 367, 190, 480)) +needlesDict.SetScale125("WonderPick_SelectCards", new Coordinate(160, 330, 200, 370)) +needlesDict.SetScale125("Create_CinematicBackground", new Coordinate(0, 46, 20, 70)) +needlesDict.SetScale125("Common_AlertForAppCrachDuringOpenPack", new Coordinate(241, 377, 269, 407)) +needlesDict.SetScale125("Create_DownloadComplete", new Coordinate(215, 371, 264, 418)) +needlesDict.SetScale125("Create_DownloadAlertWindow", new Coordinate(110, 350, 150, 404)) +needlesDict.SetScale125("Pack_BackButtonInSelectPackScreen", new Coordinate(121, 465, 140, 485)) +needlesDict.SetScale125("Create_CountryComboBoxButton", new Coordinate(105, 396, 121, 406)) +needlesDict.SetScale125("Mission_DailyMissionImage", new Coordinate(204, 195, 223, 202)) +needlesDict.SetScale125("Mission_GoToDexButtonIcon", new Coordinate(18, 215, 30, 227)) +needlesDict.SetScale125("GPTest_FriendRequestButtonInUserDetails", new Coordinate(84, 397, 98, 410)) +needlesDict.SetScale125("GPTest_NotFavouriteInDetails", new Coordinate(245, 73, 260, 89)) +needlesDict.SetScale125("GPTest_FavouritedInDetails", new Coordinate(244, 73, 262, 88)) +needlesDict.SetScale125("Mission_FirstWonderpickMissionIconInDetails", new Coordinate(120, 185, 150, 215)) +needlesDict.SetScale125("Mission_CompleteGotAllClaims", new Coordinate(244, 406, 273, 449)) +needlesDict.SetScale125("Create_MustClickMissionBackground", new Coordinate(46, 368, 103, 411)) +needlesDict.SetScale125("Friend_BottomDarkHomeIcon", new Coordinate(20, 500, 55, 530)) +needlesDict.SetScale125("Create_TutorialUseResourceForOpenPack", new Coordinate(178, 193, 251, 282)) +needlesDict.SetScale125("Create_TutorialPremiumPass", new Coordinate(98, 184, 151, 224)) +needlesDict.SetScale125("Create_InfoIconInStandByOpenPack", new Coordinate(236, 198, 266, 226)) +needlesDict.SetScale125("Pack_HourglassImageAfterOpenPackClick", new Coordinate(60, 440, 90, 480)) +needlesDict.SetScale125("Create_NintendoLink", new Coordinate(51, 335, 107, 359)) +needlesDict.SetScale125("Create_FullFreepackInMainCenter", new Coordinate(120, 316, 143, 335)) +needlesDict.SetScale125("Menu_AgreementIconInIntroMenu", new Coordinate(20, 120, 50, 150)) +needlesDict.SetScale125("Create_ConfirmDexMissionComplete", new Coordinate(115, 255, 176, 308)) +needlesDict.SetScale125("Mission_ThemeCollectionButtonIcon", new Coordinate(180, 498, 190, 508)) +needlesDict.SetScale125("Mission_MissionIconTopAreaInDetails", new Coordinate(136, 158, 156, 190)) +needlesDict.SetScale125("Mission_ActivatedBeginnerMissionTabButton", new Coordinate(15, 456, 18, 473)) +needlesDict.SetScale125("Create_SelectedMonth", new Coordinate(100, 386, 138, 416)) +needlesDict.SetScale125("Create_NameInputIcon", new Coordinate(190, 241, 225, 270)) +needlesDict.SetScale125("Pack_NextButtonAfterOpenPack", new Coordinate(120, 70, 150, 100)) +needlesDict.SetScale125("Next2", new Coordinate(120, 70, 150, 100)) +needlesDict.SetScale125("Pack_NotEnoughItemsForOpenPack", new Coordinate(92, 299, 115, 317)) +needlesDict.SetScale125("Create_TutorialPackOpenNotifyIcon", new Coordinate(170, 160, 220, 200)) +needlesDict.SetScale125("WonderPick_NoEnergy", new Coordinate(37, 424, 57, 446)) +needlesDict.SetScale125("WonderPick_EnergyStatusAfterSelect", new Coordinate(20, 440, 45, 485)) +needlesDict.SetScale125("Create_DeactivatedOKButton", new Coordinate(0, 476, 40, 502)) +needlesDict.SetScale125("Friend_FriendIDInputReady", new Coordinate(0, 475, 25, 495)) +needlesDict.SetScale125("Common_SpeedMod1x", new Coordinate(20, 170, 24, 174)) +needlesDict.SetScale125("Pack_ResultAfterOpenPack", new Coordinate(170, 98, 270, 125)) +needlesDict.SetScale125("Pack_ReadyForOpenPack", new Coordinate(198, 273, 207, 287)) +needlesDict.SetScale125("Friend_AcceptButtonInApproveSubmenu", new Coordinate(225, 195, 250, 215)) +needlesDict.SetScale125("GPTest_ReqeustCancelButtonInSearchResult", new Coordinate(188, 243, 221, 274)) +needlesDict.SetScale125("Create_TitleBottomBorderInWPSelectCard", new Coordinate(60, 130, 202, 142)) +needlesDict.SetScale125("Pack_PackPointButton", new Coordinate(233, 400, 264, 428)) +needlesDict.SetScale125("Create_TutorialDexMission", new Coordinate(115, 97, 174, 150)) +needlesDict.SetScale125("Pack_PokeGoldImageAfterOpenPackClick", new Coordinate(60, 440, 90, 480)) +needlesDict.SetScale125("Common_PopupXButtonInMain", new Coordinate(129, 477, 156, 494)) +needlesDict.SetScale125("Profile_EditNameButtonIcon", new Coordinate(203, 272, 237, 300)) +needlesDict.SetScale125("Create_TutorialDexMissionComplete", new Coordinate(124, 168, 162, 207)) +needlesDict.SetScale125("Friend_RemoveConfirmButtonInFriendDetails", new Coordinate(135, 355, 160, 385)) +needlesDict.SetScale125("Friend_RemoveConfirmButtonInSearchResult", new Coordinate(135, 355, 160, 385)) +needlesDict.SetScale125("Create_PackReturnButtonIcon", new Coordinate(121, 490, 161, 520)) +needlesDict.SetScale125("Create_BeginNewAccountButton", new Coordinate(30, 336, 53, 370)) +needlesDict.SetScale125("Pack_ScrollInSelectExpansion", new Coordinate(115, 140, 160, 155)) +needlesDict.SetScale125("Friend_RequestButtonInSearchResult", new Coordinate(165, 245, 190, 270)) +needlesDict.SetScale125("Friend_ReqeustButtonInFriendDetails", new Coordinate(70, 395, 100, 420)) +needlesDict.SetScale125("Menu_InventoryIconInMenu", new Coordinate(90, 260, 126, 290)) +; Group reroll rate-limit recovery opens the menu and returns to title. +; Keep the same managed needle names for 100/125; Scale125 images live in Scripts\Scale125. +needlesDict.SetScale125("Menu_GoToTitleButton_Up", new Coordinate(20, 418, 55, 447)) +needlesDict.SetScale125("Menu_GoToTitleButton_Down", new Coordinate(20, 458, 60, 488)) +needlesDict.SetScale125("Menu_MiscMenuLeftTop", new Coordinate(0, 65, 45, 105)) +needlesDict.SetScale125("Common_ShopButtonInMain", new Coordinate(191, 393, 211, 411)) +needlesDict.SetScale125("Common_CloseAlertWindowInMain", new Coordinate(0, 350, 70, 430)) +needlesDict.SetScale125("Common_ActivatedHomeInMainMenu", new Coordinate(20, 490, 60, 530)) +needlesDict.SetScale125("Pack_ActivatedBSeriesTab", new Coordinate(15, 450, 130, 482)) +needlesDict.SetScale125("Pack_SkipButtonAfterOpenPack", new Coordinate(233, 486, 272, 519)) +needlesDict.SetScale125("Pack_AnimationToReadyOpenPack", new Coordinate(233, 486, 272, 519)) +needlesDict.SetScale125("Common_ActivatedSocialInMainMenu", new Coordinate(120, 500, 155, 530)) +needlesDict.SetScale125("Common_SpeedModMenuButton", new Coordinate(158, 252, 177, 259)) +needlesDict.SetScale125("Create_SwipeForRegisterDexIcon", new Coordinate(34, 99, 74, 131)) +needlesDict.SetScale125("Create_ConfirmRegisteredCard", new Coordinate(133, 72, 141, 78)) +needlesDict.SetScale125("Common_SpeedMod3x", new Coordinate(187, 168, 191, 174)) +needlesDict.SetScale125("Create_TosCloseButton", new Coordinate(129, 477, 156, 494)) +needlesDict.SetScale125("Create_TosOpenButton", new Coordinate(210, 285, 250, 315)) +needlesDict.SetScale125("Common_SpeedMod2x", new Coordinate(102, 170, 107, 174)) +needlesDict.SetScale125("Create_WelcomePopup", new Coordinate(110, 230, 182, 257)) +needlesDict.SetScale125("Create_UnlockedWonerPickIconInLevelUp", new Coordinate(53, 281, 86, 310)) +needlesDict.SetScale125("Create_CardImageInTutorialWPFirstScreen", new Coordinate(75, 156, 83, 167)) +needlesDict.SetScale125("Create_WPItemBottomBorder", new Coordinate(114, 430, 155, 441)) +needlesDict.SetScale125("Create_SelectedWPItem", new Coordinate(155, 281, 192, 315)) +needlesDict.SetScale125("WonderPick_WonderPickButtonInHome", new Coordinate(240, 80, 265, 100)) +needlesDict.SetScale125("Create_SelectedYear", new Coordinate(148, 384, 256, 419)) + +; Additional Scale 125 overrides audited from v9.5.9 raw image-search calls. +needlesDict.SetScale125("Friend_FriendListSubmenu", new Coordinate(84, 463, 100, 475)) +needlesDict.SetScale125("Friend_FriendRequestsSubMenu", new Coordinate(97, 452, 104, 476)) +needlesDict.SetScale125("Friend_SocialHubFriendButton", new Coordinate(20, 450, 70, 500)) +needlesDict.SetScale125("Friend_ActivatedClearAllButton", new Coordinate(191, 498, 207, 514)) +needlesDict.SetScale125("Friend_FriendListEmpty", new Coordinate(42, 163, 66, 185)) +needlesDict.SetScale125("Friend_InputFormBlank", new Coordinate(15, 500, 68, 520)) +needlesDict.SetScale125("Friend_WithdrawButton", new Coordinate(165, 240, 255, 270)) +needlesDict.SetScale125("Friend_AcceptedButtonInSearchResult", new Coordinate(165, 250, 190, 275)) +needlesDict.SetScale125("Friend_AcceptedButtonInFriendDetails", new Coordinate(87, 401, 99, 412)) +needlesDict.SetScale125("Friend_DenyButtonInApproveSubmenu", new Coordinate(196, 196, 210, 209)) +needlesDict.SetScale125("Friend_FriendIDSearchWindow", new Coordinate(215, 252, 240, 277)) +needlesDict.SetScale125("Friend_ShowcaseIDInputFormBlank", new Coordinate(157, 498, 225, 522)) +needlesDict.SetScale125("Friend_CompleteClickShowcaseLike", new Coordinate(98, 187, 125, 214)) +needlesDict.SetScale125("Friend_CommunityShowcaseMain", new Coordinate(174, 464, 189, 479)) +needlesDict.SetScale125("Common_Error", new Coordinate(100, 180, 170, 230)) +needlesDict.SetScale125("Common_LevelUpBackground", new Coordinate(100, 86, 167, 116)) +needlesDict.SetScale125("StartupErrorX", new Coordinate(124, 423, 155, 455)) +needlesDict.SetScale125("Profile_UserNameArrowInSettingMenu", new Coordinate(230, 120, 260, 150)) +needlesDict.SetScale125("Profile_ShinedustIconInTrophyDetails", new Coordinate(122, 375, 161, 390)) +needlesDict.SetScale125("Shinedust_CopySupportIDButtonInSettings", new Coordinate(252, 78, 263, 92)) +needlesDict.SetScale125("Shinedust_ShinedustInInventorys", new Coordinate(26, 188, 43, 204)) +needlesDict.SetScale125("Shinedust_CloseButtonInDetailWindow", new Coordinate(133, 369, 148, 385)) +needlesDict.SetScale125("Menu_DeleteConfimButtonStep1", new Coordinate(200, 340, 250, 530)) +needlesDict.SetScale125("Pack_HourglassAndPokeGoldImageAfterOpenPackClick", new Coordinate(49, 449, 70, 474)) +needlesDict.SetScale125("Pack_PackImageBlankAreaForLunala", new Coordinate(58, 303, 74, 319)) +needlesDict.SetScale125("Mission_PremiumLockImage", new Coordinate(225, 444, 272, 470)) +needlesDict.SetScale125("GPTest_FriendedInSearcResult", new Coordinate(165, 250, 190, 275)) +needlesDict.SetScale125("GPTest_AccountNotFound", new Coordinate(211, 320, 245, 344)) + +; Scale 125 audit remains for these needles because v9.5.9 has no direct +; equivalent, or the current image name did not exist in the old asset set: +; 99ko, 99en, Common_Error_Cache, Common_Error_NoResponse, +; Common_Error_NoResponseDark, Common_Error_NoBackground_1Button, +; Common_Error_3ButtonError_Nodata, Friend_CannotFriendRequest, +; Friend_HamburgerMenuButtonInIntro, Friend_RequestAlreadyClosedInApproveSubmenu, +; Gift_ClaimAllButton, Gift_ReceivedWindowRightBorder, +; Pack_GetItemDialogAfterOpenPack, +; Profile_TrophyStandIconInProfile, CountrySelect, CountrySelect2. diff --git a/Scripts/Include/RarityBorder.ahk b/Scripts/Include/RarityBorder.ahk index 346d36ae..ade83c18 100644 --- a/Scripts/Include/RarityBorder.ahk +++ b/Scripts/Include/RarityBorder.ahk @@ -8,6 +8,9 @@ class RarityBorder { static DefaultCommon := { 4: [ new Coordinate(96, 279, 116, 281), new Coordinate(181, 279, 201, 281), new Coordinate(96, 394, 116, 396), new Coordinate(181, 394, 201, 396) ] , 5: [ new Coordinate(56, 279, 76, 281), new Coordinate(139, 279, 159, 281), new Coordinate(222, 279, 242, 281), new Coordinate(96, 394, 116, 396), new Coordinate(181, 394, 201, 396) ] , 6: [ new Coordinate(56, 279, 76, 281), new Coordinate(139, 279, 159, 281), new Coordinate(222, 279, 242, 281), new Coordinate(56, 394, 76, 396), new Coordinate(139, 394, 159, 396), new Coordinate(222, 394, 242, 396) ] } + static DefaultCommon125 := { 4: [ new Coordinate(96, 284, 123, 286), new Coordinate(181, 284, 208, 286), new Coordinate(96, 399, 123, 401), new Coordinate(181, 399, 208, 401) ] + , 5: [ new Coordinate(56, 284, 83, 286), new Coordinate(139, 284, 166, 286), new Coordinate(222, 284, 249, 286), new Coordinate(96, 399, 123, 401), new Coordinate(181, 399, 208, 401) ] + , 6: [ new Coordinate(56, 284, 83, 286), new Coordinate(139, 284, 166, 286), new Coordinate(222, 284, 249, 286), new Coordinate(56, 399, 83, 401), new Coordinate(139, 399, 166, 401), new Coordinate(256, 386, 260, 402) ] } ; ========================================================= ; [Static] MASK 모드용 단일 기준점(좌상단 x, y) 앵커 좌표 @@ -22,8 +25,11 @@ class RarityBorder { this.SearchMode := searchMode this.AdditionalSets := { 4: [], 5: [], 6: [] } + this.Scale125AdditionalSets := { 4: [], 5: [], 6: [] } this.CommonCoords := RarityBorder.DefaultCommon + this.CommonCoords125 := RarityBorder.DefaultCommon125 this.MaskAnchors := RarityBorder.DefaultMaskAnchors + this.Scale125MaskAnchors := "" this.ValidPixelSets := [] } @@ -69,6 +75,14 @@ class RarityBorder { this.MaskAnchors := anchorsObj } + SetScale125MaskAnchors(anchorsObj) { + if (!anchorsObj.HasKey(4) || !anchorsObj.HasKey(5) || !anchorsObj.HasKey(6)) { + MsgBox, 16, Error, % this.RarityName " Scale 125 Mask Anchors Register failed!" + return + } + this.Scale125MaskAnchors := anchorsObj + } + SetCustomCommon(coordsObj) { if (!coordsObj.HasKey(4) || !coordsObj.HasKey(5) || !coordsObj.HasKey(6)) { MsgBox, 16, Error, % this.RarityName " Register failed!" @@ -77,6 +91,14 @@ class RarityBorder { this.CommonCoords := coordsObj } + SetScale125Common(coordsObj) { + if (!coordsObj.HasKey(4) || !coordsObj.HasKey(5) || !coordsObj.HasKey(6)) { + MsgBox, 16, Error, % this.RarityName " Scale 125 Register failed!" + return + } + this.CommonCoords125 := coordsObj + } + AddAdditionalSet(setPrefix, coordsObj) { if (!coordsObj.HasKey(4) || !coordsObj.HasKey(5) || !coordsObj.HasKey(6)) { MsgBox, 16, Error, % this.RarityName " [" setPrefix "] register failed!" @@ -87,62 +109,84 @@ class RarityBorder { this.AdditionalSets[6].Push({ Prefix: setPrefix, Coords: coordsObj[6] }) } + AddScale125AdditionalSet(setPrefix, coordsObj) { + if (!coordsObj.HasKey(4) || !coordsObj.HasKey(5) || !coordsObj.HasKey(6)) { + MsgBox, 16, Error, % this.RarityName " Scale 125 [" setPrefix "] register failed!" + return + } + this.Scale125AdditionalSets[4].Push({ Prefix: setPrefix, Coords: coordsObj[4] }) + this.Scale125AdditionalSets[5].Push({ Prefix: setPrefix, Coords: coordsObj[5] }) + this.Scale125AdditionalSets[6].Push({ Prefix: setPrefix, Coords: coordsObj[6] }) + } + Search(pBitmap, cardCount, targetIndex) { - if (this.SearchMode == "MASK") { - anchor := this.MaskAnchors[cardCount][targetIndex] - if (!anchor || anchor.x == "") - return false - return this.DoMaskSearch(pBitmap, anchor.x, anchor.y) + isScale125 := (GetConfiguredDisplayScale() = 125) + searchMode := this.SearchMode + basePrefix := this.BasePrefix + + if (searchMode == "MASK") { + maskAnchors := this.MaskAnchors + if (isScale125 && this.Scale125MaskAnchors) + maskAnchors := this.Scale125MaskAnchors + + anchor := maskAnchors[cardCount][targetIndex] + return (anchor && anchor.x != "" && this.DoMaskSearch(pBitmap, anchor.x, anchor.y)) } - commonCoord := this.CommonCoords[cardCount][targetIndex] + commonCoords := this.CommonCoords + if (isScale125 && this.CommonCoords125) + commonCoords := this.CommonCoords125 + commonCoord := commonCoords[cardCount][targetIndex] additionalGroups := this.AdditionalSets[cardCount] + if (isScale125 && this.Scale125AdditionalSets[cardCount].MaxIndex()) + additionalGroups := this.Scale125AdditionalSets[cardCount] if (!commonCoord || commonCoord.startX == "") return false - if (this.SearchMode == "COMMON_ONLY") { - return this.DoSearch(pBitmap, commonCoord, this.BasePrefix) + if (searchMode == "COMMON_ONLY") { + return this.DoSearch(pBitmap, commonCoord, basePrefix, cardCount, targetIndex) } - else if (this.SearchMode == "ALL") { - if !this.DoSearch(pBitmap, commonCoord, this.BasePrefix) + else if (searchMode == "ALL") { + if !this.DoSearch(pBitmap, commonCoord, basePrefix, cardCount, targetIndex) return false for i, altSet in additionalGroups { altCoord := altSet.Coords[targetIndex] - if !this.DoSearch(pBitmap, altCoord, altSet.Prefix) + if !this.DoSearch(pBitmap, altCoord, altSet.Prefix, cardCount, targetIndex) return false } return true } - else if (this.SearchMode == "ANY") { - if this.DoSearch(pBitmap, commonCoord, this.BasePrefix) + else if (searchMode == "ANY") { + if this.DoSearch(pBitmap, commonCoord, basePrefix, cardCount, targetIndex) return true for i, altSet in additionalGroups { altCoord := altSet.Coords[targetIndex] - if this.DoSearch(pBitmap, altCoord, altSet.Prefix) + if this.DoSearch(pBitmap, altCoord, altSet.Prefix, cardCount, targetIndex) return true } return false } } - DoSearch(pBitmap, coord, targetPrefix) { + DoSearch(pBitmap, coord, targetPrefix, cardCount := "", targetIndex := "") { if (!coord || coord.startX == "") return false - + + return this.DoPrimarySearch(pBitmap, coord, targetPrefix, cardCount, targetIndex) + } + + DoPrimarySearch(pBitmap, coord, targetPrefix, cardCount := "", targetIndex := "") { imageIdx := 1 Loop { vRet := false - Path := A_ScriptDir . "\Needles\" . targetPrefix . imageIdx . ".png" - if(!FileExist(Path)) + Path := A_ScriptDir . "\Needles\" . targetPrefix . imageIdx . ".png" + if(!FileExist(ResolveNeedlePath(Path))) break - pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, coord.startX, coord.startY, coord.endX, coord.endY, 40) - - if(vRet = 1) + if (this.SearchNeedlePath(pBitmap, coord, Path, cardCount, targetIndex)) return true else imageIdx += 1 @@ -150,6 +194,38 @@ class RarityBorder { return false } + GetSearchVariation(cardCount := "", targetIndex := "") { + isScale125 := (GetConfiguredDisplayScale() = 125) + + if (isScale125 && this.RarityName = "normal") { + if (cardCount = 4) + return 60 + + if (cardCount = 6 && targetIndex >= 4) + return 60 + + return 40 + } + + if (this.RarityName = "normal") + return 40 + + if (cardCount = 6 && targetIndex >= 4) + return 80 + + return 60 + } + + SearchNeedlePath(pBitmap, coord, Path, cardCount := "", targetIndex := "") { + if(!FileExist(ResolveNeedlePath(Path))) + return false + + pNeedle := GetNeedle(Path) + searchVariation := this.GetSearchVariation(cardCount, targetIndex) + vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, coord.startX, coord.startY, coord.endX, coord.endY, searchVariation) + return (vRet = 1) + } + DoMaskSearch(pBitmap, cardX, cardY) { vRet := false Sleep, 20 @@ -221,6 +297,9 @@ borderTrainer := new RarityBorder("trainer", "trainer") borderRainbow := new RarityBorder("rainbow", "rainbow") borderFullArt := new RarityBorder("fullart", "fullart", "MASK") borderFullArt.LoadMaskReferences(A_ScriptDir . "\Mask") +borderFullArt.SetScale125MaskAnchors({ 4: [ {x: 57, y: 186}, {x: 142, y: 186}, {x: 57, y: 301}, {x: 142, y: 301} ] + , 5: [ {x: 17, y: 181}, {x: 100, y: 181}, {x: 182, y: 181}, {x: 57, y: 301}, {x: 142, y: 301} ] + , 6: [ {x: 17, y: 181}, {x: 100, y: 181}, {x: 182, y: 181}, {x: 17, y: 301}, {x: 100, y: 301}, {x: 182, y: 301} ] }) borderImmersive := new RarityBorder("immersive", "immersive") borderCrown := new RarityBorder("crown", "crown") borderGimmighoul := new RarityBorder("gimmighoul", "gimmighoul") @@ -258,6 +337,53 @@ borderShinyEx.AddAdditionalSet("ShinyEx_ex_", { 4: [ new Coordinate(100, 272, 11 , new Coordinate(143, 387, 153, 389) , new Coordinate(225, 387, 235, 389) ] }) +borderShinyEx.SetScale125Common({ 4: [ new Coordinate(90, 261, 93, 283) + , new Coordinate(173, 261, 176, 283) + , new Coordinate(130, 376, 133, 398) + , new Coordinate(215, 376, 218, 398) ] + , 5: [ new Coordinate(90, 261, 93, 283) + , new Coordinate(173, 261, 176, 283) + , new Coordinate(255, 261, 258, 283) + , new Coordinate(130, 376, 133, 398) + , new Coordinate(215, 376, 218, 398) ] + , 6: [ new Coordinate(90, 261, 93, 283) + , new Coordinate(173, 261, 176, 283) + , new Coordinate(255, 261, 258, 283) + , new Coordinate(90, 376, 93, 398) + , new Coordinate(173, 376, 176, 398) + , new Coordinate(254, 384, 258, 400) ] }) +borderShinyEx.AddScale125AdditionalSet("ShinyEx_ex_", { 4: [ new Coordinate(110, 175, 140, 187) + , new Coordinate(192, 175, 223, 187) + , new Coordinate(110, 293, 140, 305) + , new Coordinate(192, 293, 223, 305) ] + , 5: [ new Coordinate(74, 175, 97, 187) + , new Coordinate(153, 175, 180, 187) + , new Coordinate(237, 175, 262, 187) + , new Coordinate(110, 293, 140, 305) + , new Coordinate(192, 293, 223, 305) ] + , 6: [ new Coordinate(74, 175, 97, 187) + , new Coordinate(153, 175, 180, 187) + , new Coordinate(237, 175, 262, 187) + , new Coordinate(74, 293, 97, 305) + , new Coordinate(153, 293, 180, 305) + , new Coordinate(253, 385, 259, 402) ] }) + +borderShiny1Star.SetScale125Common({ 4: [ new Coordinate(90, 261, 93, 283) + , new Coordinate(173, 261, 176, 283) + , new Coordinate(130, 376, 133, 398) + , new Coordinate(215, 376, 218, 398) ] + , 5: [ new Coordinate(90, 261, 93, 283) + , new Coordinate(173, 261, 176, 283) + , new Coordinate(255, 261, 258, 283) + , new Coordinate(130, 376, 133, 398) + , new Coordinate(215, 376, 218, 398) ] + , 6: [ new Coordinate(90, 261, 93, 283) + , new Coordinate(173, 261, 176, 283) + , new Coordinate(255, 261, 258, 283) + , new Coordinate(90, 376, 93, 398) + , new Coordinate(173, 376, 176, 398) + , new Coordinate(254, 384, 258, 400) ] }) + rarityCheckers.Push(borderNormal) rarityCheckers.Push(border3Diamond) rarityCheckers.Push(border1Star) @@ -268,4 +394,4 @@ rarityCheckers.Push(borderImmersive) rarityCheckers.Push(borderCrown) rarityCheckers.Push(borderGimmighoul) rarityCheckers.Push(borderShinyEx) -rarityCheckers.Push(borderShiny1Star) \ No newline at end of file +rarityCheckers.Push(borderShiny1Star) diff --git a/Scripts/Needles/Friend2.png b/Scripts/Needles/Friend2.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2153776723a2f7a3df6756f1c61849e284c127 GIT binary patch literal 1040 zcmV+r1n>KaP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!Tx2_$2q9=bY#JyqzPVxe_iSeO5w>Eh3dGAd$_(7mDG} zm2H?_Z{Wq!d#vvsBSCYZa{QhmD7Gk`m3(50I1hd^e~5Q}e0qi%yB`lHozP9Y@N~`# z!;Bk4=4BYIYoM6Q-XhX0PYDt#R{(+iZ+OQ%Nv42V=N1OW?XbB6h@=^EE}mhrv>w9X z!~#s#w@5LCG8_p|6c8QNe3Omk?=VF}JN_C^U;ab>KSU@Z8VDyrF&w7?7G)S2l?~bex9j;WV~F(HemQFHj@` zN1tezZ64eioPu0qf?REcYUmkWIJ`(O9QG3#CC4V;K?jH?~Oudd#~(!V^}FcTn-QfLI6QtVxHjr> zS82W3gB!{LF)JeA_U+>GRRx-VR$(uCB1X3nJVMh?N;F+lAd==_TUlMG<<&ptX1^@s6yEvDU00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1p`S$K~zXfm6d68 z+GZ4m{r`VPx1>$lrfHHkO-yWKW3%rD2?^~8tst?w{ct+>eYJrhoqjlD;~5XnJm*~L zVrVQu8R$HHZGo;DqNj(5c2Dp(dlqj^d4jvzV;=8dM>|-{EzEEY-CJSmL=a~SjLZ;y zHGuBN2sTguD;H;Bv=H(B?~^djY7aZw!dh%#h8yVq3aT4pVlOc^Lk#r*UB!du#_WHN zzw}(r!gRF|s{@!_0cOYS%*f1Q10z^N^J2(zZs*Ym&{uu5B^R>2gd6XleetQBh3O~( z*86{sU~(W{71`Os2-nd36%;3eH0O2(T7aJ7qb0fM$}X&M^X$uya~7tp1PE4p_-hW6 z1MN@R(fu`4FD`5+z(5Ppo%(2s4r=2$9yK3MbRO!fFtWWyKoG0lS(tpt8*ayqAv;S5 z7T*qyxg&dMhz_dbIV!^$nxYLs_n|mT7=8pRT)~O9Ux#T)0hZe*Zifw+!{k7`uHtso z@*5UxDIdM@N+qi$6;jV9?+%s|0HE`9{@ujVO9i}k};702Vrf4Sx%Isv9mDg3g zF4_+PwI&Yg!W<7H8K~+cG6xGLISWd$Dco@5|f;hKRsEc4Y5P$A4phXI_W9~ldBrdaWk}W)tlk6W8$xt zfy=gmx@bdnBg~`Cp`nPN@>fR@DoX+GEDYIcE4(VQLsxY_c9@-;KCkO@$Hd2`j`wvH z@2XRLYO1&$8tBM#jC3E;jNWfy7Kt*W1em0;ctq1b4U<+yW?EAp4JolB@a^0V=eX|8 zQ0iIu)Hd*EgMc)=eVF3cI~lLb6Z~{7;N_Ko7bOATUkdo{a*S^;M_In1d@khED2F+9 zRctp(h=%MRY^O4EaXU!%lL94%ey=L{?S6`1ZY8`biwx?=D*-RRh%7Hk6b|`AX`F<9 z7f!=uK-!YqQ3BLu4|S?5xi0qXAwvletE{EtLtVqWnu50v3f@%6l!Twl6TB{qcy%)= zL^{m%^_3*)iCt$@~07*qoM6N<$g0d=e-2eap literal 0 HcmV?d00001 diff --git a/Scripts/Scale125/FriendSearchButton.png b/Scripts/Scale125/FriendSearchButton.png new file mode 100644 index 0000000000000000000000000000000000000000..923ab8087a23c1a1b6d8e0301c0f806647335810 GIT binary patch literal 745 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0)9zEK~zXfmDI^^ z+CUTraR1Y(dg>)eRi&ybm8wKt#DS!$l&A?&+DctQ8uicxx+)=I#{{skF&^94h8(`? z&DaLpR3V2?;DP!1`FUofq3vO4`%zTO3qs$0D9povxj{ViO*ftB_jx1%hnN5f3&C)5 zZ#==J5oF{nk1@{z?8YjLVIv1!if%*Jt_l4|w;?GUbfGYj@Ns)%Hv(xwXK156w9r%- zPh()BF`&;SQJ8?KLV;4HqRJ3#s}=`)#sp(`3d@_p_O7mtq*%eDGpbVbr#qqwEwoe% zHbMRs#_kNdGlk~(D@79MB&gJZtXmw_EEkSHgE5)LR?VuB2#nB?=%a4?9Mv81Vw00r zi6mMu2~ft{Vf!;^5xST(@W1eiMGI^+RmM@>@uAWZ46=xSDphdjevapNy_*6fcwVgq z&Guk=(-<12XINNU-@wk>&p2)MaoQRno7=FG^=uyJvKm{G z9BwKmE_wzGT4v$#xn%N>i*{=K@c26(Jljq5-Gf9gF07cg@%&tl0}W+_%%d$l&L3d= zpopzP5%)G;a`aYa6QxRv|8EY{Qd0yh4;def;fWiZl+UpD;R{dsTs*<5fW<00000NkvXXu0mjfJz7%= literal 0 HcmV?d00001 diff --git a/Scripts/Scale125/GoToTitle.png b/Scripts/Scale125/GoToTitle.png new file mode 100644 index 0000000000000000000000000000000000000000..a836cab9722d4f818a378afe26f8b8367bdfa02d GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl}2EbxddW?&EkW5yn(o$NrtEuJopAsWHSCsxn>QvYvO?Em=spCA9f`TG06 zd>NK9~Q0P{Q-WqqoNsj`G%W3vv}_tNm?% ze9JR|^~8>K>2@xOms^hhzgU=jUunalKf6x;FPE`vPcs$S|L4o!dgu3t{#TYx{-1AM zA$IlE+TZ67h&K7Kbjw;aKg!#1sB(2#qo}N1IrEx~;|q&5%oBM4zWrhg f*0w;AM~4}Tr}*}>gsFZ9x}U+*)z4*}Q$iB}eE4}- literal 0 HcmV?d00001 diff --git a/Scripts/Scale125/InSubMenu.png b/Scripts/Scale125/InSubMenu.png new file mode 100644 index 0000000000000000000000000000000000000000..6f3dd0e5fcc4ef11daddf9c6437de811f5235072 GIT binary patch literal 532 zcmV+v0_**WP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGma{vGma{-JZxd#9M0jWtuK~zXfz17)r zf-o2b;Jp7smAa6C&}x^_-gIm`BZ>gra(My*F zHB3`XD6Ofu;qVq4gvlNY8t@7rg=UaBYWE7Yrqk&RVY*jMn_8Z;j^z+ogi%{UhwcNy zM5^P_X1CVm5LDS^V1o{aFa(y{80%Q77wf_E(K@gQ69&iAaI7wbMbv~=2R)W!poYyG z6Z2J|+RnnH6<9%QKn=V0C_g#}ZU2J)7S!-$@~Uno@9WH#2RxN?K@HOlm2ay5Llx`? zA^hEWXd9419~riZ^M~@_O=*LYQ-rBwR0EXL1}vlB@QKEk1b+p$X<3HKX@swdQa%Bp WJxV*-fr9d$E{-7@!O1(my!cx$uVKQ@ez-D0MDghpi%};S3j3^P6N0_tNAmfP#jeE{-7*;mI}s9!fI{7&LMC z9QY#d#H^{o&1%4C=)~nL`1t?-8zl!BJj~@BI!&0F8C0M1TwJ#3@MoZA22WQ%mvv4F FO#tDmAAkS= diff --git a/Scripts/Scale125/Settings.png b/Scripts/Scale125/Settings.png index 3f2d9c3dc60b0eec744649aab581d2abf8d6b5f1..5f3491a50004c14b0b8d15a931f7c13711aa061e 100644 GIT binary patch delta 445 zcmV;u0Yd)M1^fe$Nq=(y01|Tnj3T)Q0004zNkl((a{Jq~;~BxmGU|Gs}8umm=t;hi^GEeDgbJ&Ky=!s(%3L zDPM-35j}Lsb)xE0%)xW9N?tKZ@DoqwpmS&zq^fzaI2p)Q*nfs0TVX-J?1A190|8^n zoB%?gY`I2;KFtCYSuR;*-yvPB(g|?Q=Va;y@?wnu)UPqoY50Quz!}BZ3JMFuR|yVQ zd!wA$!3aTUe8?0iSlv1#NFtqY7-A`|?Y%&h;&tya!TF8bK-dNb@^K49ZXX4^Z6AbS zP`gNL917O>f`1o65Kotl8X;496@XHO3QZK(=*1e0@mgM9>rK$t!k^UoET&AZc2M~0 zp6;U6)T-{`IXJ!H+QxXr?FD8(2+C<&JIJ-^1Jw+d6cfHBkJtYnLA(A4NRo zlo{KWwq{}Uln*^r4;x861R0cMba^Sd(S-8-on3ZhgC6|B@}0}fnLYn=KH*n1p(BTu)_*&wSmwr3_d-C|kx4## z;fG?k!MmZ_h?p@In)(w(W6MpXQmPR#BZ?wU9IAtz6`W4C(2t4VXui@8S(Z?~q!cyY zwPbS=$rL)e9%E?e8UJD24iH?_|xC{XCU*W&}1MO9UZs;W_t6lR<{T2JCm$D!D9=J*~G zpXHobgE zadr(dRIMy$qjf;l@?Tn6lHhig7#=XdG#!@1Y|1hOzM(u=S&{!s|HA)%fKI*&J8L(l w?^=83BaDW}De=E7b}fK+eKjP>!aU$Fk44ofy`glX(e}Nq6*hWMJ6X z&;2Kn70Bl-@Q5sCU=S(+Va9uD@)bZ0?U^AFB@w}FfdWk9dNvV1jxdlMg3=B5* z6$OdO*{LN8NvY|XdA92BckfqM$V{$ES@GWpo&B*kqDoPEm@(W3>%1*XSQMb3_ z<+7=;0-BJUT9T+xk(-lOY*k^a1UA?T$OZ}PE7{o;rKDK}xwt`90C~1b86_nJR{Hwo z<>h+i#(Mch>H3D2mX`VkM*2oZxL#Wb8|tPQ8>g6?8d?~o873(~tuM(; zL)f2J3=IZgfarr{^bPe4Ku!j+t^A8JQ-Q7kS!riz1C~b-v(X1R1j%7`5D}nXfh>5) zfPx7gx~X}_!_~H&8xmdv^ z%%7*k$HO(1gK6o~L-FkV52E+ITxn6u{%=`;eL%x0ZD|IX2~4ii8&aL`OC8~ypVni} zy-hlC=d}AK9W4Au4jeuBIM2}PusGjr|IA6EUyT=iFR-yF`^^{H)uLVS+9A9DqUE=% q$(tohjgF@&?`bq}FloHJ^AWdGNPx#1ZP1_K>z@;j|==^1poj532;bRa{vGma{vGma{-JZxd#9M0rp8mK~zXfmDSmn zsxS}*(ER_u_2BC9UIk^4ArK&p_S5NA0U8Jh_;7qmZBi8sEG!!6;a!X%!_z6i+eP5$ zWw3aTYg)mVHF$ATVR~_&*E7fSDZoEBfgR`Yvl?Mea9em6@MNW)`f76g_fj~bP`e3p zdg=xc`%+cy>O0s1I_j_c^9aK*gut*~>LtEpf3aMmgdi3@0vz;s+4+Y=ro}Cex?uSt$Gi)VX`>x&5G@b)L?oz8@57K9?`!382^|Vlww@6ywkk&sCRfD9w v?E$6`Z9Agfs5}H{P=_%(d&+#_S_b47h8j->9IX3p00000NkvXXu0mjfUt$N4 literal 0 HcmV?d00001 diff --git a/Scripts/Scale125/shiny1star10.png b/Scripts/Scale125/shiny1star10.png new file mode 100644 index 0000000000000000000000000000000000000000..77e84deebfb13f4a4f359e61826a5e12cc30e6ba GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y}!3HGH?)<(INHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%=PdAuEM{QfI}E~%$MaXD05!B{hD4M^`1)8S=jZArrsOB3>Q&?x097+E z*w|MTBqnF4mMA2prf25as=wd8UtJ+H#a2Ds)Yrhbz&SM|)1#^=HMq(zB)KX(*)m1l z-j0{croswnLT+kFqC!P(PF}H9g{>0UU@IUSB&@GwXH%4tW)z9|8>y;bpKhp88yV>WRp=I1=9MH?=;jqGLk)0AElw`VEGWs$&r<*y zn3$AbT4JkITAG<+m6n)hnv{}as+*K(oT6)Jn3AZQm||?Gn__I7Vs2_^VU%W=qy)9T zBr^?Re_k;(7=Qty50cS0)H47%8N{~oFUm{>x&maSouLg_9!1PXALI}uhuJ|yfPMwC z;2{GFCV1$k<^hAW92j;wQ)X}j!#&N@#W6%8oH3eV$$y45*KYs+{r4{zGx0P2W%vM! zn*aY97y|#me`|fC|7Xwc_|KrBtnz=$>aPF4e?R)q(9%=-|IPOY q|9^ix_@Bwx-j{*l_frOj$1fS2IP{{orfl>Cndj;1=d#Wzp$Py~Jke7C literal 0 HcmV?d00001 diff --git a/Scripts/Scale125/shiny1star11.png b/Scripts/Scale125/shiny1star11.png new file mode 100644 index 0000000000000000000000000000000000000000..0361c388c0ec6609d2a337727578a1dfec4936b6 GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-a!3HGrH`~quQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKn?AgArU1JzCKpT`MG+DDfvmMdKI|^K-CNk zHue<-iOJciB??KY>6v-9>hE{&S69ePu~iQ@^)>JLw)`r|23QrX=bnrWhOQrWhNin420}7^N8|DM76- z$xK7opH~bG24H~bgJkp#^$b8x2C=RDi!xJzt^iqSXJ`YKM-j8p2RQ`EVRjG^pkIM3 zc*uZ)2_CwsdB7ko2Zo)_lo{N>aJTSuaSV|NXVhi5^q=wf-@pGE{{LrS4DfOIudAcR z!1Vg@Cx(DfVDxWU-Sz+X???X`zkR>|pY_)x27x;gC2|`~eL#`t>FVdQ&MBb@0I7tz A@c;k- literal 0 HcmV?d00001 diff --git a/Scripts/Scale125/shiny1star12.png b/Scripts/Scale125/shiny1star12.png new file mode 100644 index 0000000000000000000000000000000000000000..510b9fb2339f9d6de270e7d7c52a73f12c9ce797 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y;!3HFk*Rf{-DaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpkSS+i(`mHxask|e2k6~Z5MZ@6!K1LHpPJc|Tv%gnApE%Q{yzlj!=_UP=&Cf-zYZv|c-cI#`Dw(8-gz6QPp&Z!xh9#uuD!Bu`C$yM3OmMQA? zcD!6R6;?nKa#KqZ6)JLb@`|l0Y?Z(UTLIZ1VSOb#o1&C7s~{IQs0tv@Rw<*Tq`*pF zzr4I$uiRKKzbIYb(9+UU-@r)U$VeBcLbtdwuOzWTH?LS3YJf{>adJ^+K}lwQo&w0g z#H9Sv5?iIx(##aAw8S*iq?8m>-K0e06kS8ZltkUc6k|i(6l3EQb5lbLqcp=LC8+f! znP~|7^NOLt01Oa)kc_^eo&m_oAhwl%QD!R86(B3^3~j*jC}KAHAcr71%nl*~^ed1B z4;fG}!9zDS4;ZB7z_8PqGJ_i!?jfEojv*4^z9$U18XS07FW#*GZ><%z;vnlmQPrG| z*4|*-HdUqh9XfIoSpyz=GpKa@na|HD(ZrhMa)i>z_V;bu9IWqt c{O(5)eFuI0{ak^M4M7p>>FVdQ&MBb@0L1OTO#lD@ literal 0 HcmV?d00001 diff --git a/Scripts/Scale125/shiny1star7.png b/Scripts/Scale125/shiny1star7.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d4cb0e127269a2d1e88f3673c60e0d6c0c23f0 GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V!3HGfJ?-}dQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0V%NfHbp6ERzWUqP!&L)tx`rwNr9EV zetCJhUb(Seeo?xG?WUP)qwZeFo6)Bu;%;^d;tf|AVqJOz+} ziAnjTCALbXrI{&KX^Cm3Nhv9&x=D$~DY}M+DT%s?DaMAnDaOVr=B9=gMrnpgN>J-d zGSd+D=M_VP0T>|qAQ^o_Jp+)FL2N7kqRdpFD?nD-8QOs5QN(QYK@LH3m>om}=vN>M z9x|X{f`@Ku9xzDDfnldJWd=7e++#gm9780+Sr5MEZ88vPxY(ba^+-qOfsD_gDLe<5 z)KoS6r^@U4>Mxz+eEZ7H_lls{0!ODaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpoaF$kcg59UmvUF{9L`nl>DSry^7odplSvN z8~cia#N_PM5{0DH^vpb4_4m8?t1D!t*s6z{`WpBaIHzW0dQ=sq23ProBv)l8Tc)Vn z+wpSQR9FE`$W1LtRH(?!$t$+1uvG#ZYz1V4g!Pr|Y>HCStb$zJpeleoTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6beFGzXBO_g)3fd$_#E`xGQ+NIEF}sC#U>5{9}G25KMfif4H6v2-Mg#4gh0s X7bgo#RBqY?P$YS}`njxgN@xNAbgZee literal 0 HcmV?d00001 diff --git a/Scripts/Scale125/shiny1star9.png b/Scripts/Scale125/shiny1star9.png new file mode 100644 index 0000000000000000000000000000000000000000..2e871285339b2b7d033a6157451c9b9409e7750c GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y>!3H9qs_+0Q#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!hW5;mh>{3jAFJg2T)o7U{G?R9irfOAY6b=y z`-+0Zwic-?7f?V97Du6s&rHqo20xNy} z^73-Ma$~*xqI7*jOG`_A10#JSBVC{h-Qvo;lEez#ykcdj0WPV<$wiq3C7Jno3Lpa$ zlk!VTY?Vq&GgGY664OkRQc_HHlM;m&?f<|3{sm(ue#XBHAAlFVdQ&MBb@045i}YXATM literal 0 HcmV?d00001 From 6b6f6739aecb5bf4a3f5e01c0b6681b4de14a4d5 Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Fri, 15 May 2026 20:18:17 +0900 Subject: [PATCH 03/10] Stabilize friend and GP test flows --- Scripts/1.ahk | 108 ++++++++--------- Scripts/Include/Crinity_UnofficialPatch.ahk | 44 +++++-- Scripts/Include/FriendManager.ahk | 122 ++++++++++++++++---- Scripts/Main.ahk | 80 +++++++++---- 4 files changed, 242 insertions(+), 112 deletions(-) diff --git a/Scripts/1.ahk b/Scripts/1.ahk index 97cc4d94..544096a2 100644 --- a/Scripts/1.ahk +++ b/Scripts/1.ahk @@ -34,9 +34,7 @@ pToken := Gdip_Startup() #Include SpecialEvent.ahk #Include Crinity_UnofficialPatch.ahk -; Allocate and hide the console window to reduce flashing -DllCall("AllocConsole") -WinHide % "ahk_id " DllCall("GetConsoleWindow", "ptr") +InitializeHiddenConsole() ; Register OnExit handler to clean up ADB shell properly when script exits ; DISABLED - was causing Reload delays due to blocking ADB shell communication @@ -159,7 +157,8 @@ Loop { sleep, 1000 OwnerWND := getMuMuHwnd(session.get("winTitle")) x4 := x + 4 - y4 := y + 529 + windowMetrics := GetMumuWindowMetrics() + y4 := y + windowMetrics.rowHeight - 3 buttonWidth := 50 Gui, New, +Owner%OwnerWND% -AlwaysOnTop +ToolWindow -Caption +LastFound -DPIScale @@ -306,6 +305,7 @@ if(DeadCheck = 1 && botConfig.get("deleteMethod") != "Create Bots (13P)") { LogToFile("[" . A_ScriptName . "] GPU usage exceeds the threshold and restarts. VRAM Usage(" . session.get("VRAMUsage").Mode . "): " . session.get("VRAMUsage").Usage . " GB", "Restart.txt") CreateStatusMessage("Restarting Instance...",,,, false) restartInstance() + RefreshAdbConnectionAfterInstanceRestart(45000) DirectlyPositionWindow() CreateStatusMessage("Restart complete!",,,, false) LogToFile("[" . A_ScriptName . "] Restart complete!", "Restart.txt") @@ -893,7 +893,7 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation if (imageName = "CommunityShowcase" || imageName = "Search" || imageName = "inHamburgerMenu" || imageName = "Trade") { Path = %imagePath%Tutorial.png pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 111, 115, 167, 121, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [111, 115, 167, 121], [111, 115, 167, 121], searchVariation) if (vRet = 1) { adbClick_wbb(145, 451) } @@ -903,7 +903,7 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation if(imageName = "Points" || imageName = "Missions" || imageName = "WonderPick" || imageName = "Home" || imageName = "Country" || imageName = "Account2" || imageName = "Account" || imageName = "ClaimAll" || imageName = "inHamburgerMenu" || imageName = "Trade") { Path = %imagePath%Update.png pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 15, 180, 53, 228, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [15, 180, 53, 228], [15, 180, 53, 228], searchVariation) if (vRet = 1) { adbClick_wbb(137, 485) Gdip_DisposeImage(pBitmap) @@ -920,7 +920,7 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation Path = %imagePath%Delete2.png pNeedle := GetNeedle(Path) ; ImageSearch within the region - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 118, 353, 135, 390, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [118, 353, 135, 390], [118, 353, 135, 390], searchVariation) if (vRet = 1) { adbClick_wbb(74, 353) Delay(1) @@ -933,7 +933,7 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation Path = %imagePath%NoSave.png ; look for No Save Data error message > if loaded account > delete xml > reload pNeedle := GetNeedle(Path) ; ImageSearch within the region - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 30, 331, 50, 449, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [30, 331, 50, 449], [30, 331, 50, 449], searchVariation) if (vRet = 1) { adbWriteRaw("rm -rf /data/data/jp.pokemon.pokemontcgp/cache/*") ; clear cache waitadb() @@ -1053,7 +1053,7 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria if (imageName = "CommunityShowcase" || imageName = "Add" || imageName = "Search") { Path = %imagePath%Tutorial.png pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 111, 115, 167, 121, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [111, 115, 167, 121], [111, 115, 167, 121], searchVariation) if (vRet = 1) { adbClick_wbb(145, 451) } @@ -1063,7 +1063,7 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria if(imageName = "Points" || imageName = "Missions" || imageName = "WonderPick" || imageName = "Home" || imageName = "Country" || imageName = "Account2" || imageName = "Account" || imageName = "ClaimAll" || imageName = "inHamburgerMenu" || imageName = "Trade") { Path = %imagePath%Update.png pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 20, 191, 36, 211, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [20, 191, 36, 211], [20, 191, 36, 211], searchVariation) if (vRet = 1) { adbClick_wbb(137, 485) Gdip_DisposeImage(pBitmap) @@ -1080,7 +1080,7 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria Path = %imagePath%NoSave.png ; look for No Save Data error message > if loaded account > delete xml > reload pNeedle := GetNeedle(Path) ; ImageSearch within the region - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 30, 331, 50, 449, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [30, 331, 50, 449], [30, 331, 50, 449], searchVariation) if (vRet = 1) { adbWriteRaw("rm -rf /data/data/jp.pokemon.pokemontcgp/cache/*") ; clear cache waitadb() @@ -1098,7 +1098,7 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria if(imageName = "Skip2" || imageName = "Pack" || imageName = "Hourglass2") { Path = %imagePath%notenoughitems.png pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 92, 299, 115, 317, 0) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [92, 299, 115, 317], [92, 299, 115, 317], 0) if(vRet = 1) { session.set("cantOpenMorePacks", 1) return 0 @@ -1108,7 +1108,7 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria if(imageName = "Mission_dino2") { Path = %imagePath%1solobattlemission.png pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 108, 180, 177, 208, 0) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [108, 180, 177, 208], [108, 180, 177, 208], 0) if(vRet = 1) { session.get("missionDoneList")["beginnerMissionsDone"] := 1 if(session.get("injectMethod") && session.get("loadedAccount")) @@ -1148,7 +1148,8 @@ resetWindows() { DirectlyPositionWindow() { global botConfig - scaleParam := 283 + windowMetrics := GetMumuWindowMetrics() + scaleParam := windowMetrics.scaleParam rowGap := botConfig.get("rowGap") ; Get monitor information @@ -1164,10 +1165,10 @@ DirectlyPositionWindow() { instanceIndex := Title } - titleHeight := 40 + titleHeight := windowMetrics.titleHeight borderWidth := 4 - 1 - rowHeight := titleHeight + 492 + rowHeight := windowMetrics.rowHeight currentRow := Floor((instanceIndex - 1) / botConfig.get("Columns")) y := MonitorTop + (currentRow * rowHeight) + (currentRow * rowGap) @@ -1208,7 +1209,6 @@ restartGameInstance(reason, RL := true) { logStr .= "loadedAccount: " . (session.get("loadedAccount") ? "true" : "false") . " | " logStr .= "accountFileName: " . session.get("accountFileName") LogToFile(logStr) - SaveStuckScreenshot(reason) } if (RL = "GodPack") { @@ -1271,30 +1271,6 @@ restartGameInstance(reason, RL := true) { } } -SaveStuckScreenshot(reason) { - global session - - fileDir := A_ScriptDir . "\..\Screenshots\Stuck" - if !FileExist(fileDir) - FileCreateDir, %fileDir% - - safeReason := RegExReplace(reason, "[\\/:*?""<>|]", "_") - safeReason := RegExReplace(safeReason, "\s+", "_") - safeReason := SubStr(safeReason, 1, 80) - filePath := fileDir . "\" . A_Now . "_inst" . session.get("scriptName") . "_" . safeReason . ".png" - - hWnd := getMuMuHwnd(session.get("winTitle")) - if (!hWnd) - return - - pBitmap := from_window(hWnd) - if (pBitmap) { - Gdip_SaveBitmapToFile(pBitmap, filePath) - Gdip_DisposeImage(pBitmap) - LogToFile("Saved stuck screenshot: " . filePath) - } -} - menuDelete() { global botConfig, session @@ -1794,10 +1770,10 @@ Screenshot(fileType := "Valid", subDir := "", ByRef fileName := "") { filePath := fileDir "\" . fileName yBias := 40 - cropX := 18 + cropX := GetScaleProfileValue(18, 12) cropY := 170 - cropW := 240 - cropH := 227 + cropW := GetScaleProfileValue(240, 251) + cropH := GetScaleProfileValue(227, 245) if (fileType = "FRIENDCODE"){ cropX := 18 @@ -2426,14 +2402,29 @@ Gdip_ImageSearch_wbb(pBitmapHaystack,pNeedle,ByRef OutputList="" ,SearchDirection=1,Instances=1,LineDelim="`n",CoordDelim=",") { global session - vret := Gdip_ImageSearch(pBitmapHaystack,pNeedle.needle,OutputList,OuterX1,OuterY1,OuterX2,OuterY2,Variation,Trans,SearchDirection,Instances,LineDelim,CoordDelim) + windowMetrics := GetMumuWindowMetrics() + yBias := windowMetrics.imageSearchYBias + vret := Gdip_ImageSearch(pBitmapHaystack,pNeedle.needle,OutputList,OuterX1,OuterY1+yBias,OuterX2,OuterY2+yBias,Variation,Trans,SearchDirection,Instances,LineDelim,CoordDelim) if(session.get("dbg_bbox")) - bboxAndPause_immage(OuterX1, OuterY1, OuterX2, OuterY2, pNeedle, vret, session.get("dbg_bboxNpause")) + bboxAndPause_immage(OuterX1, OuterY1+yBias, OuterX2, OuterY2+yBias, pNeedle, vret, session.get("dbg_bboxNpause")) return vret } +Gdip_ImageSearchProfile_wbb(pBitmapHaystack, pNeedle, ByRef OutputList="" + , coords100="", coords125="", Variation=0, Trans="" + , SearchDirection=1, Instances=1, LineDelim="`n", CoordDelim=",") { + if (!IsObject(coords125)) + coords125 := coords100 + + coords := GetScaleProfileValue(coords100, coords125) + return Gdip_ImageSearch_wbb(pBitmapHaystack, pNeedle, OutputList + , coords[1], coords[2], coords[3], coords[4], Variation, Trans + , SearchDirection, Instances, LineDelim, CoordDelim) +} + GetNeedle(Path) { static NeedleBitmaps := Object() + Path := ResolveNeedlePath(Path) if (NeedleBitmaps.HasKey(Path)) { return NeedleBitmaps[Path] @@ -2461,10 +2452,13 @@ DoTutorial() { Delay(3) session.set("failSafe", A_TickCount) failSafeTime := 0 + ; The legacy Scale 125 birth-date needles are on opposite selector columns. + firstBirthNeedle := GetScaleProfileValue("Create_SelectedYear", "Create_SelectedMonth") + firstBirthLabel := GetScaleProfileValue("Year", "Month") Loop { Delay(3) - if(FindImageAndClick("Create_SelectedYear", , , , , 1, failSafeTime)) + if(FindImageAndClick(firstBirthNeedle, , , , , 1, failSafeTime)) break Delay(3) adbClick_wbb(142, 159) @@ -2475,7 +2469,7 @@ DoTutorial() { Delay(3) adbClick_wbb(82, 422) failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 - CreateStatusMessage("Waiting for Year`n(" . failSafeTime . "/45 seconds)") + CreateStatusMessage("Waiting for " . firstBirthLabel . "`n(" . failSafeTime . "/45 seconds)") } ;select month and year and click adbClick_wbb(200, 400) @@ -2484,9 +2478,11 @@ DoTutorial() { Delay(3) session.set("failSafe", A_TickCount) failSafeTime := 0 + secondBirthNeedle := GetScaleProfileValue("Create_SelectedMonth", "Create_SelectedYear") + secondBirthLabel := GetScaleProfileValue("Month", "Year") Loop { ;select month and year and click Delay(3) - if(FindImageAndClick("Create_SelectedMonth", , , , , 1, failSafeTime)) + if(FindImageAndClick(secondBirthNeedle, , , , , 1, failSafeTime)) break Delay(3) adbClick_wbb(142, 159) @@ -2500,7 +2496,7 @@ DoTutorial() { adbClick_wbb(142, 159) Delay(3) failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 - CreateStatusMessage("Waiting for Month`n(" . failSafeTime . "/45 seconds)") + CreateStatusMessage("Waiting for " . secondBirthLabel . "`n(" . failSafeTime . "/45 seconds)") } ;select month and year and click Delay(3) @@ -2848,7 +2844,7 @@ DoTutorial() { } SelectPack(HG := false) { - global session + global botConfig, session ; define constants mapPackX := {"Left":60, "Middle":140, "Right":215} @@ -2859,6 +2855,7 @@ SelectPack(HG := false) { packx := getPackCoordXInHome() packy := HomeScreenAllPackY + enteredPackScreenFromHome := false if(HG = "First" && session.get("injectMethod") && session.get("loadedAccount") ){ session.set("failSafe", A_TickCount) @@ -2894,9 +2891,11 @@ SelectPack(HG := false) { failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 CreateStatusMessage("Waiting for Points`n(" . failSafeTime . "/90 seconds)") } + enteredPackScreenFromHome := true } - FindImageAndClick("Pack_PackPointButton", packx, packy, , 1000) + if (!enteredPackScreenFromHome) + FindImageAndClick("Pack_PackPointButton", packx, packy, , 1000) if(!session.get("isSkipSelectExpansion")) { FindImageAndClick("Pack_ScrollInSelectExpansion", 248, 459, , 300) @@ -3707,8 +3706,3 @@ CleanupBeforeExit(){ allSpecialEventDispose() GetGPUMemoryByPDH(-1, true) } - -^e:: - pToken := Gdip_Startup() - Screenshot_dev() -return diff --git a/Scripts/Include/Crinity_UnofficialPatch.ahk b/Scripts/Include/Crinity_UnofficialPatch.ahk index 299c06f3..733eb9bd 100644 --- a/Scripts/Include/Crinity_UnofficialPatch.ahk +++ b/Scripts/Include/Crinity_UnofficialPatch.ahk @@ -106,21 +106,40 @@ startPreProcess(methodType){ pBitmap := 0 session.set("isSkipSelectExpansion", 0) isSkip := false - session.set("failSafe", A_TickCount) failSafeTime := 0 Loop, { + skipGenericButtonFallback := false + if(FindOrLoseImage(needleName, 0, failSafeTime, , true)) break adbClick_wbb(clickX, clickY) Delay(0.5) + if(methodType = "Inject Wonderpick 96P+"){ + if(FindOrLoseImage(needleName, 0, , , true)) + break + + if(FindOrLoseImage("Common_ActivatedHomeInMainMenu", 0, , , true) + || FindOrLoseImage("Friend_BottomDarkHomeIcon", 0, , , true) + || FindOrLoseImage("Common_ShopButtonInMain", 0, , , true) + || FindOrLoseImage("WonderPick_WonderPickButtonInHome", 0, , , true) + || FindOrLoseImage("Pack_PackPointButton", 0, , , true) + || FindOrLoseImage("Pack_BackButtonInSelectPackScreen", 0, , , true) + || FindOrLoseImage("Pack_ReadyForOpenPack", 0, , , true) + || FindOrLoseImage("Pack_HourglassImageAfterOpenPackClick", 0, , , true) + || FindOrLoseImage("Pack_HourglassAndPokeGoldImageAfterOpenPackClick", 0, , , true) + || FindOrLoseImage("Pack_PokeGoldImageAfterOpenPackClick", 0, , , true)){ + skipGenericButtonFallback := true + } + } + pBitmap := from_window(getMuMuHwnd(session.get("winTitle"))) Path = %imagePath%CrashWhilePackOpen.png pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 20, 180, 35, 182, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [20, 180, 35, 182], [20, 180, 35, 182], searchVariation) if(vRet = 1){ CreateStatusMessage("Clearing problem opening pack pop-up",,,, false) adbClick_wbb(145, 370) @@ -164,7 +183,7 @@ startPreProcess(methodType){ Path = %imagePath%DataDownload.png pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 41, 378, 92, 393, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [41, 378, 92, 393], [41, 378, 92, 393], searchVariation) if(vRet = 1){ CreateStatusMessage("Downloading data",,,, false) Sleep, 1000 @@ -177,13 +196,16 @@ startPreProcess(methodType){ Path = %imagePath%Button.png pNeedle := GetNeedle(Path) - vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, 95, 350, 195, 530, 80) - if(vRet = 1){ - if (InStr(vPosXY, ",")) { - StringSplit, pos, vPosXY, `, - adbClick_wbb(pos1, pos2) - } else - adbClick(137, 365) + if(!skipGenericButtonFallback){ + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [95, 350, 195, 530], [100, 367, 190, 480], 80) + if(vRet = 1){ + if (InStr(vPosXY, ",")) { + StringSplit, pos, vPosXY, `, + adbClick_wbb(pos1, pos2) + } else { + adbClick(137, 365) + } + } } DelayH(20) @@ -244,4 +266,4 @@ getDevelopmentScreenShot(packCardType, pBitmap := 0){ pBitmap := from_window(getMuMuHwnd(session.get("winTitle"))) Gdip_SaveBitmapToFile(pBitmap, filePath) -} \ No newline at end of file +} diff --git a/Scripts/Include/FriendManager.ahk b/Scripts/Include/FriendManager.ahk index f3048d6a..d1f6d4e7 100644 --- a/Scripts/Include/FriendManager.ahk +++ b/Scripts/Include/FriendManager.ahk @@ -46,10 +46,12 @@ AddFriends(renew := false, getFC := false) { } else if(!renew && !getFC) { Delay(3) - clickButton := FindOrLoseImage("Common_ColorChangeButton", 0, , 80) - if(clickButton) { - StringSplit, pos, clickButton, `, ; Split at ", " - adbClick_wbb(pos1, pos2) + if(!ShouldSkipGenericButtonInSocialWait()) { + clickButton := FindOrLoseImage("Common_ColorChangeButton", 0, , 80) + if(clickButton) { + StringSplit, pos, clickButton, `, ; Split at ", " + adbClick_wbb(pos1, pos2) + } } } else if(FindOrLoseImage("Create_TutorialUseResourceForOpenPack", 0)) { @@ -209,9 +211,32 @@ AddFriends(renew := false, getFC := false) { } ; ratelimit, only use this route when number of added ids is 6-10, 16-20, etc - if (Mod(n - 1, 10) >= 5) { - FindImageAndClick("Menu_InventoryIconInMenu", 240, 494) - FindImageAndClick("Menu_MiscMenuLeftTop", 105, 435, , 750) + rateLimitMod := Mod(n - 1, 10) + if (rateLimitMod >= 5) { + menuClickX := GetScaleProfileValue(240, 245) + menuClickY := GetScaleProfileValue(494, 520) + menuOpenSleepTime := GetScaleProfileValue(botConfig.get("Delay"), 1000) + FindImageAndClick("Menu_InventoryIconInMenu", menuClickX, menuClickY, , menuOpenSleepTime) + menuSettleDelay := GetScaleProfileValue(0, 1) + if(menuSettleDelay > 0) + Delay(menuSettleDelay) + miscClickX := 105 + miscClickY := 435 + ; Stability patch: this coordinate opens Misc in the hamburger menu, but becomes Go To Title after navigation. + adbClick_wbb(miscClickX, miscClickY) + miscWaitStart := A_TickCount + Loop { + if(FindOrLoseImage("Menu_GoToTitleButton_Up", 0, , 60, true) + || FindOrLoseImage("Menu_GoToTitleButton_Down", 0, , 60, true) + || FindOrLoseImage("Menu_MiscMenuLeftTop", 0, , 20, true)) + break + + if((A_TickCount - miscWaitStart) > 5000) { + restartGameInstance("Stuck at InSubMenu...") + return false + } + Delay(0.25) + } DelayH(600) clickX := 137 @@ -293,12 +318,14 @@ RemoveFriends() { adbClick_wbb(203, 436) ; 203 436 } else if(!renew && !getFC && DeadCheck = 1) { - clickButton := FindOrLoseImage("Common_ColorChangeButton", 0, , 80) - if(clickButton) { - StringSplit, pos, clickButton, `, ; Split at ", " - adbClick_wbb(pos1, pos2) + if(!ShouldSkipGenericButtonInSocialWait()) { + clickButton := FindOrLoseImage("Common_ColorChangeButton", 0, , 80) + if(clickButton) { + StringSplit, pos, clickButton, `, ; Split at ", " + adbClick_wbb(pos1, pos2) } } + } Sleep, 500 failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 CreateStatusMessage("Waiting for Social`n(" . failSafeTime . "/90 seconds)") @@ -522,6 +549,39 @@ EraseInput(num := 0, total := 0) { } } +ShouldSkipGenericButtonInSocialWait() { + reason := "" + if(FindOrLoseImage("Common_ActivatedHomeInMainMenu", 0, , , true)) + reason := "home active" + else if(FindOrLoseImage("Friend_BottomDarkHomeIcon", 0, , , true)) + reason := "bottom home" + else if(FindOrLoseImage("Common_ShopButtonInMain", 0, , , true)) + reason := "home shop" + else if(FindOrLoseImage("WonderPick_WonderPickButtonInHome", 0, , , true)) + reason := "home wonderpick" + else if(FindOrLoseImage("Pack_PackPointButton", 0, , , true)) + reason := "pack points" + else if(FindOrLoseImage("Pack_BackButtonInSelectPackScreen", 0, , , true)) + reason := "pack select" + else if(FindOrLoseImage("Pack_ReadyForOpenPack", 0, , , true)) + reason := "ready open pack" + else if(FindOrLoseImage("Pack_HourglassImageAfterOpenPackClick", 0, , , true)) + reason := "hourglass pack" + else if(FindOrLoseImage("Pack_HourglassAndPokeGoldImageAfterOpenPackClick", 0, , , true)) + reason := "hourglass/gold pack" + else if(FindOrLoseImage("Pack_PokeGoldImageAfterOpenPackClick", 0, , , true)) + reason := "gold pack" + + if(reason = "") + return false + + return true +} + +IsSocialHubReadyForFriends() { + return FindOrLoseImage("Friend_SocialHubFriendButton", 0, , 20, true) +} + GoToFriendsList(isKeepSearch := false, skipTutorialProc := false) { global session @@ -529,16 +589,7 @@ GoToFriendsList(isKeepSearch := false, skipTutorialProc := false) { failSafeTime := 0 mainLoopBreak := false Loop { - if(FindOrLoseImage("Common_ActivatedSocialInMainMenu", 0, failSafeTime, , true)) { - ; If main screen(social): Click friends button - adbClick_wbb(38, 460) - } - else if(FindOrLoseImage("Friend_AddButtonInFriendList", 0, failSafeTime, , true)) { - ; If friends list screen: Click Search button - adbClick_wbb(240, 120) - Delay(1) - } - else if(FindOrLoseImage("Friend_SearchFriendButton", 0, failSafeTime, , true)) { + if(FindOrLoseImage("Friend_SearchFriendButton", 0, failSafeTime, , true)) { if(!isKeepSearch){ Loop { if(FindOrLoseImage("Friend_SearchFriendButton", 0, failSafeTime, , true)) { @@ -549,6 +600,11 @@ GoToFriendsList(isKeepSearch := false, skipTutorialProc := false) { break } Delay(2) + failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 + if(failSafeTime > 45) { + restartGameInstance("Stuck at Goto friends screen") + return + } } } else @@ -557,6 +613,23 @@ GoToFriendsList(isKeepSearch := false, skipTutorialProc := false) { if(mainLoopBreak) break } + else if(FindOrLoseImage("Friend_AddButtonInFriendList", 0, failSafeTime, , true)) { + ; If friends list screen: Click Search button + adbClick_wbb(240, 120) + Delay(1) + } + else if(FindOrLoseImage("Common_ActivatedSocialInMainMenu", 0, failSafeTime, , true)) { + if(!IsSocialHubReadyForFriends()) { + failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 + Delay(0.5) + CreateStatusMessage("Waiting for Social hub`n(" . failSafeTime . "/45 seconds)") + continue + } + + ; If main screen(social): Click friends button + adbClick_wbb(38, 460) + Delay(1) + } else{ ; For Tutorial Window if(!skipTutorialProc) @@ -565,6 +638,10 @@ GoToFriendsList(isKeepSearch := false, skipTutorialProc := false) { Delay(0.25) failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 CreateStatusMessage("Goto friends screen`n(" . failSafeTime . "/45 seconds)") + if(failSafeTime > 45) { + restartGameInstance("Stuck at Goto friends screen") + return + } } } @@ -576,7 +653,6 @@ getFriendCode() { CreateStatusMessage("Getting friend code...",,,, false) Sleep, 2000 - FindImageAndClick("Pack_SkipButtonAfterOpenPack", 146, 494) ;click on next until skip button appears session.set("failSafe", A_TickCount) failSafeTime := 0 Loop { @@ -602,4 +678,4 @@ getFriendCode() { session.set("friendCode", AddFriends(false, true)) return session.get("friendCode") -} \ No newline at end of file +} diff --git a/Scripts/Main.ahk b/Scripts/Main.ahk index d81aa249..11b1142c 100644 --- a/Scripts/Main.ahk +++ b/Scripts/Main.ahk @@ -30,9 +30,7 @@ CoordMode, Pixel, Screen #Include Utils.ahk #Include Crinity_UnofficialPatch.ahk -; Allocate and hide the console window to reduce flashing -DllCall("AllocConsole") -WinHide % "ahk_id " DllCall("GetConsoleWindow", "ptr") +InitializeHiddenConsole() pToken := Gdip_Startup() @@ -70,7 +68,6 @@ session.set("isDead", isDeadValue) if (!botConfig.get("groupRerollEnabled")) { session.set("autoUseGPTest", 0) session.set("TestTime", 3600) - session.set("hasUnopenedPack", 0) } session.set("vipListTrimMode", (!botConfig.get("vipListTrimMode")) ? "bottom" : botConfig.get("vipListTrimMode")) @@ -319,7 +316,7 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation ;bboxAndPause(X1, Y1, X2, Y2) ; ImageSearch within the region - vRet := Gdip_ImageSearch(pBitmap, pNeedle, vPosXY, X1, Y1, X2, Y2, searchVariation) + vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, X1, Y1, X2, Y2, searchVariation) ErrorCheckInScreen(pBitmap) Gdip_DisposeImage(pBitmap) if(EL = 0) @@ -394,7 +391,7 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria Y2 := needleObj.coords.endY ;bboxAndPause(X1, Y1, X2, Y2) ; ImageSearch within the region - vRet := Gdip_ImageSearch(pBitmap, pNeedle, vPosXY, X1, Y1, X2, Y2, searchVariation) + vRet := Gdip_ImageSearch_wbb(pBitmap, pNeedle, vPosXY, X1, Y1, X2, Y2, searchVariation) ErrorCheckInScreen(pBitmap) Gdip_DisposeImage(pBitmap) if (!confirmed && vRet = 1) { @@ -416,7 +413,7 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria Path = %imagePath%Error1.png pNeedle := GetNeedle(Path) ; ImageSearch within the region - vRet := Gdip_ImageSearch(pBitmap, pNeedle, vPosXY, 15, 155, 270, 420, searchVariation) + vRet := Gdip_ImageSearchProfile_wbb(pBitmap, pNeedle, vPosXY, [15, 155, 270, 420], [15, 155, 270, 420], searchVariation) Gdip_DisposeImage(pBitmap) if (vRet = 1) { CreateStatusMessage("Error message in " . session.get("scriptName") . ". Clicking retry...") @@ -446,7 +443,8 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria resetWindows(){ global botConfig - scaleParam := 283 + windowMetrics := GetMumuWindowMetrics() + scaleParam := windowMetrics.scaleParam CreateStatusMessage("Arranging window positions and sizes") RetryCount := 0 MaxRetries := 10 @@ -461,7 +459,7 @@ resetWindows(){ instanceIndex := 1 borderWidth := 4 - 1 - rowHeight := 40 + 492 + rowHeight := windowMetrics.rowHeight currentRow := Floor((instanceIndex - 1) / botConfig.get("Columns")) y := MonitorTop + (currentRow * rowHeight) + (currentRow * botConfig.get("rowGap")) @@ -553,7 +551,8 @@ Screenshot(fileType := "Valid", subDir := "", ByRef fileName := "") { fileName := "packstats_temp.png" filePath := fileDir "\" . fileName - yBias := 40 - 45 + windowMetrics := GetMumuWindowMetrics() + yBias := windowMetrics.titleHeight - 45 pBitmapW := from_window(getMuMuHwnd(session.get("winTitle"))) pBitmap := Gdip_CloneBitmapArea(pBitmapW, 18, 71+yBias, 240, 165) @@ -775,12 +774,19 @@ bboxAndPause(X1, Y1, X2, Y2, doPause := False) { GetNeedle(Path) { static NeedleBitmaps := Object() + Path := ResolveNeedlePath(Path) + if (NeedleBitmaps.HasKey(Path)) { return NeedleBitmaps[Path] } else { pNeedle := Gdip_CreateBitmapFromFile(Path) - NeedleBitmaps[Path] := pNeedle - return pNeedle + needleObj := Object() + needleObj.Path := Path + pathsplit := StrSplit(Path , "\") + needleObj.Name := pathsplit[pathsplit.MaxIndex()] + needleObj.needle := pNeedle + NeedleBitmaps[Path] := needleObj + return needleObj } } @@ -842,9 +848,11 @@ CheckFriendOpsRateLimit() { session.set("friendOpsCount", 0) session.set("friendOpsWindowStart", A_TickCount) } else if (session.get("A_gptest")) { + LogToFile("FriendOps rate limit reached | script=" . session.get("scriptName") . " | mode=auto | count=" . session.get("friendOpsCount") . " | remainingMs=" . remaining, "GroupReroll.txt") return false } else { ; Manual mode: show countdown dialog with two cancel options + LogToFile("FriendOps rate limit reached | script=" . session.get("scriptName") . " | mode=manual | count=" . session.get("friendOpsCount") . " | remainingMs=" . remaining, "GroupReroll.txt") session.set("rateLimitAction", "") Gui, RateLimit:Destroy Gui, RateLimit:New, +AlwaysOnTop, GP Test - Rate Limit @@ -872,6 +880,7 @@ CheckFriendOpsRateLimit() { ; Timer expired ? reset and continue session.set("friendOpsCount", 0) session.set("friendOpsWindowStart", A_TickCount) + LogToFile("FriendOps rate limit wait complete | script=" . session.get("scriptName"), "GroupReroll.txt") } } session.set("friendOpsCount", session.get("friendOpsCount") + 1) @@ -1067,11 +1076,14 @@ FavoriteVipFriends() { } rateLimitHit := false FindImageAndClick("Friend_RemoveConfirmButtonInFriendDetails", 145, 407, , 500) + removeWaitStart := A_TickCount + interceptProc := true Loop { + removeWaitTime := (A_TickCount - removeWaitStart) // 1000 adbClick_wbb(200, 372) - if (FindOrLoseImage("Friend_ReqeustButtonInFriendDetails", 0)) + if (FindOrLoseImage("Friend_ReqeustButtonInFriendDetails", 0, removeWaitTime)) break - if (session.get("hasUnopenedPack") && FindOrLoseImage("Common_Error", 0)) { + if (session.get("hasUnopenedPack") && FindOrLoseImage("Common_Error", 0, removeWaitTime)) { CreateStatusMessage("Rate limit hit. Recovering...",,,, false) interceptProc := true Loop, 5 { @@ -1105,6 +1117,7 @@ FavoriteVipFriends() { } Delay(1) } + interceptProc := false if (rateLimitHit) continue 2 Delay(1) @@ -1202,7 +1215,7 @@ FavoriteVipFriends() { ; Removes non-favourited friends starting from the bottom of the list. ; Stops when a favourited (VIP) friend is encountered. RemoveNonVipFriends() { - global session + global session, interceptProc ; Navigate to Social screen session.set("failSafe", A_TickCount) @@ -1365,11 +1378,14 @@ RemoveNonVipFriends() { } rateLimitHit := false FindImageAndClick("Friend_RemoveConfirmButtonInFriendDetails", 145, 407, , 500) + removeWaitStart := A_TickCount + interceptProc := true Loop { + removeWaitTime := (A_TickCount - removeWaitStart) // 1000 adbClick_wbb(200, 372) - if (FindOrLoseImage("Friend_ReqeustButtonInFriendDetails", 0)) + if (FindOrLoseImage("Friend_ReqeustButtonInFriendDetails", 0, removeWaitTime)) break - if (session.get("hasUnopenedPack") && FindOrLoseImage("Common_Error", 0)) { + if (session.get("hasUnopenedPack") && FindOrLoseImage("Common_Error", 0, removeWaitTime)) { CreateStatusMessage("Rate limit hit. Recovering...",,,, false) Loop, 5 { adbClick_wbb(139, 371) @@ -1404,6 +1420,7 @@ RemoveNonVipFriends() { } Delay(1) } + interceptProc := false if (rateLimitHit) continue FindImageAndClick("Friend_AddButtonInFriendList", 143, 507, , 1500) @@ -1416,11 +1433,18 @@ RemoveNonVipFriends() { session.set("A_gptest", 0) session.set("autotest", A_TickCount) ToggleTestScript() + } else { + session.set("triggerTestNeeded", false) + CreateStatusMessage("GP Test cleanup done. Waiting.",,,, false) + return } CreateStatusMessage("Ready to test.",,,, false) } else if (session.get("A_gptest") && session.get("autoUseGPTest")) { session.set("A_gptest", 0) ToggleTestScript() + } else { + session.set("triggerTestNeeded", false) + CreateStatusMessage("GP Test cleanup done. Waiting.",,,, false) } } @@ -1948,17 +1972,31 @@ Gdip_ImageSearch_wbb(pBitmapHaystack,pNeedle,ByRef OutputList="" ; Returns: Result from Gdip_ImageSearch ; ------------------------------------------------------------------------------ global session - yBias := 40 - 45 + windowMetrics := GetMumuWindowMetrics() + yBias := windowMetrics.imageSearchYBias vret := Gdip_ImageSearch(pBitmapHaystack,pNeedle.needle,OutputList,OuterX1,OuterY1+yBias,OuterX2,OuterY2+yBias,Variation,Trans,SearchDirection,Instances,LineDelim,CoordDelim) if(session.get("dbg_bbox")) bboxAndPause_immage(OuterX1, OuterY1+yBias, OuterX2, OuterY2+yBias, pNeedle, vret, session.get("dbg_bboxNpause")) return vret } +Gdip_ImageSearchProfile_wbb(pBitmapHaystack, pNeedle, ByRef OutputList="" + , coords100="", coords125="", Variation=0, Trans="" + , SearchDirection=1, Instances=1, LineDelim="`n", CoordDelim=",") { + if (!IsObject(coords125)) + coords125 := coords100 + + coords := GetScaleProfileValue(coords100, coords125) + return Gdip_ImageSearch_wbb(pBitmapHaystack, pNeedle, OutputList + , coords[1], coords[2], coords[3], coords[4], Variation, Trans + , SearchDirection, Instances, LineDelim, CoordDelim) +} + DirectlyPositionWindow() { global botConfig, session - scaleParam := 283 + windowMetrics := GetMumuWindowMetrics() + scaleParam := windowMetrics.scaleParam rowGap := botConfig.get("RowGap") ; Get monitor information @@ -1972,10 +2010,10 @@ DirectlyPositionWindow() { if (instanceIndex = "") instanceIndex := 1 - titleHeight := 40 + titleHeight := windowMetrics.titleHeight borderWidth := 4 - 1 - rowHeight := titleHeight + 492 + rowHeight := windowMetrics.rowHeight currentRow := Floor((instanceIndex - 1) / botConfig.get("Columns")) y := MonitorTop + (currentRow * rowHeight) + (currentRow * rowGap) From 3d50b11fe4aecef4facfc68e11137d7d7c189fe7 Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Fri, 15 May 2026 20:18:38 +0900 Subject: [PATCH 04/10] Clean runtime files and update home pack data --- .gitignore | 5 ++++- Data/packdata.dat | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 25b090d2..6dfd724c 100644 --- a/.gitignore +++ b/.gitignore @@ -16,8 +16,11 @@ Scripts/*.ini *.bak !.gitkeep Accounts/Saved/**/*.xml +Accounts/SpecificCards/*.xml +Accounts/Saved/tmp/** Accounts/Trades/*.csv Accounts/Trades/*.json +Scripts/temp/** Lab # macOS metadata files @@ -29,4 +32,4 @@ Lab # Claude Code configuration .claude/ -.REFACTORING_SUMMARY.md \ No newline at end of file +.REFACTORING_SUMMARY.md diff --git a/Data/packdata.dat b/Data/packdata.dat index cc75a590..c91b9b28 100644 --- a/Data/packdata.dat +++ b/Data/packdata.dat @@ -1,5 +1,5 @@ # Pack list in Home screen -Home:Left|Mewtwo,Middle|PulsingAura,Right|MegaShine +Home:Left|PaldeanWonders,Middle|PulsingAura,Right|MegaShine # Pack data(Structure) # PackID, Series Type, Number of packs in the set, Location of extension window, y Pos, Scroll Type @@ -32,4 +32,4 @@ Pack:MegaShine|B|1|Col-Second|298|0 Pack:PulsingAura|B|1|Col-First|298|0 # DO NOT Delete End ----END--- \ No newline at end of file +---END--- From e286c144dd4c83d22c85d036b215d70f59e72e35 Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Tue, 19 May 2026 13:19:13 +0900 Subject: [PATCH 05/10] Stabilize dual scale recovery and logging --- .gitignore | 5 +- PTCGPB.ahk | 6 +- Scripts/1.ahk | 73 ++++- Scripts/Include/ADB.ahk | 4 +- Scripts/Include/AccountManager.ahk | 87 +++++- Scripts/Include/CardDetection.ahk | 104 +++++--- Scripts/Include/Coords.ahk | 7 +- Scripts/Include/Crinity_UnofficialPatch.ahk | 3 + Scripts/Include/FriendManager.ahk | 68 ++++- Scripts/Include/Logging.ahk | 205 ++++++++++++-- Scripts/Include/Monitor.ahk | 76 ++++-- Scripts/Include/MonitorOnce.ahk | 91 +++---- Scripts/Include/ResetLists.ahk | 68 ++++- Scripts/Include/Utils.ahk | 249 +++++++++++++++++- Scripts/Main.ahk | 82 +++--- Scripts/Needles/FriendLimit.png | Bin 0 -> 136 bytes Scripts/{Scale125 => Needles}/MissionDeck.png | Bin Scripts/{Scale125 => Needles}/Update.png | Bin Scripts/Scale125/1solobattlemission.png | Bin 1557 -> 0 bytes Scripts/Scale125/1star6card4.png | Bin 483 -> 0 bytes Scripts/Scale125/1star6card6.png | Bin 483 -> 0 bytes Scripts/Scale125/3diamond6card4.png | Bin 236 -> 0 bytes Scripts/Scale125/3diamond6card5.png | Bin 680 -> 0 bytes Scripts/Scale125/6cardpackindicator.png | Bin 127 -> 0 bytes Scripts/Scale125/99cn.png | Bin 724 -> 0 bytes Scripts/Scale125/99de.png | Bin 754 -> 0 bytes Scripts/Scale125/99en.png | Bin 809 -> 0 bytes Scripts/Scale125/99es.png | Bin 758 -> 0 bytes Scripts/Scale125/99fr.png | Bin 741 -> 0 bytes Scripts/Scale125/99it.png | Bin 739 -> 0 bytes Scripts/Scale125/99jp.png | Bin 731 -> 0 bytes Scripts/Scale125/99ko.png | Bin 745 -> 0 bytes Scripts/Scale125/99pt.png | Bin 736 -> 0 bytes Scripts/Scale125/Accept.png | Bin 277 -> 0 bytes Scripts/Scale125/Accepted.png | Bin 193 -> 0 bytes Scripts/Scale125/Accepted2.png | Bin 244 -> 0 bytes Scripts/Scale125/Account2.png | Bin 718 -> 0 bytes Scripts/Scale125/Add.png | Bin 677 -> 0 bytes Scripts/Scale125/Add2.png | Bin 541 -> 0 bytes Scripts/Scale125/AddGray.png | Bin 925 -> 0 bytes Scripts/Scale125/Album.png | Bin 836 -> 0 bytes Scripts/Scale125/App.png | Bin 409 -> 0 bytes Scripts/Scale125/Approve.png | Bin 380 -> 0 bytes Scripts/Scale125/Badge.png | Bin 200 -> 0 bytes Scripts/Scale125/Birth.png | Bin 757 -> 0 bytes Scripts/Scale125/Booster.png | Bin 1377 -> 0 bytes Scripts/Scale125/Border.png | Bin 2902 -> 0 bytes Scripts/Scale125/Bulba.png | Bin 422 -> 0 bytes Scripts/Scale125/Button.png | Bin 109 -> 0 bytes Scripts/Scale125/Button2.png | Bin 100 -> 0 bytes Scripts/Scale125/Card.png | Bin 2161 -> 0 bytes Scripts/Scale125/ChooseEevee.png | Bin 99 -> 0 bytes Scripts/Scale125/ChooseErika.png | Bin 99 -> 0 bytes Scripts/Scale125/ChosenTag.png | Bin 142 -> 0 bytes Scripts/Scale125/Cinematic.png | Bin 120 -> 0 bytes Scripts/Scale125/ClaimAll.png | Bin 873 -> 0 bytes Scripts/Scale125/CollectDailies.png | Bin 227 -> 0 bytes Scripts/Scale125/CommunityShowcase.png | Bin 405 -> 0 bytes Scripts/Scale125/Complete.png | Bin 180 -> 0 bytes Scripts/Scale125/Confirm.png | Bin 751 -> 0 bytes Scripts/Scale125/ConfirmPack.png | Bin 329 -> 0 bytes Scripts/Scale125/Country.png | Bin 248 -> 0 bytes Scripts/Scale125/CountrySelect.png | Bin 161 -> 0 bytes Scripts/Scale125/CountrySelect2.png | Bin 226 -> 0 bytes Scripts/Scale125/DailyMissions.png | Bin 419 -> 0 bytes Scripts/Scale125/DataDownload.png | Bin 285 -> 0 bytes Scripts/Scale125/Delete.png | Bin 138 -> 0 bytes Scripts/Scale125/Delete2.png | Bin 839 -> 0 bytes Scripts/Scale125/Delete3.png | Bin 481 -> 0 bytes Scripts/Scale125/DeleteAll.png | Bin 93 -> 0 bytes Scripts/Scale125/DeleteFriend.png | Bin 412 -> 0 bytes Scripts/Scale125/DexMissions.png | Bin 391 -> 0 bytes Scripts/Scale125/Eevee.png | Bin 221 -> 0 bytes Scripts/Scale125/Erase.png | Bin 122 -> 0 bytes Scripts/Scale125/Erika.png | Bin 200 -> 0 bytes Scripts/Scale125/FavouriteFriend.png | Bin 259 -> 0 bytes Scripts/Scale125/FavouriteFriend2.png | Bin 366 -> 0 bytes Scripts/Scale125/FavouriteN.png | Bin 447 -> 0 bytes Scripts/Scale125/FavouriteY.png | Bin 734 -> 0 bytes Scripts/Scale125/FeatureUnlocked1.png | Bin 1148 -> 0 bytes .../Scale125/FirstAnniversaryCelebration.png | Bin 196 -> 0 bytes Scripts/Scale125/FirstMission.png | Bin 508 -> 0 bytes Scripts/Scale125/Friend.png | Bin 259 -> 0 bytes Scripts/Scale125/FriendIDSearch.png | Bin 427 -> 0 bytes Scripts/Scale125/Friends.png | Bin 318 -> 0 bytes Scripts/Scale125/GPTest_NotFound.png | Bin 130 -> 0 bytes Scripts/Scale125/GholdengoEmblem.png | Bin 4118 -> 0 bytes Scripts/Scale125/GotAllMissions.PNG | Bin 370 -> 0 bytes Scripts/Scale125/Gray.png | Bin 474 -> 0 bytes Scripts/Scale125/HardwareReq2.png | Bin 152 -> 0 bytes Scripts/Scale125/Home.png | Bin 474 -> 0 bytes Scripts/Scale125/HourGlassAndPokeGoldPack.png | Bin 1261 -> 0 bytes Scripts/Scale125/Hourglass.png | Bin 4627 -> 0 bytes Scripts/Scale125/Hourglass2.png | Bin 745 -> 0 bytes Scripts/Scale125/Hourglass3.png | Bin 1222 -> 0 bytes Scripts/Scale125/HourglassPack.png | Bin 724 -> 0 bytes Scripts/Scale125/LevelUp.png | Bin 268 -> 0 bytes Scripts/Scale125/Link.png | Bin 569 -> 0 bytes Scripts/Scale125/LoadingBox.png | Bin 76 -> 0 bytes Scripts/Scale125/Mail.png | Bin 611 -> 0 bytes Scripts/Scale125/Main.png | Bin 411 -> 0 bytes Scripts/Scale125/Menu.png | Bin 291 -> 0 bytes Scripts/Scale125/Mission.png | Bin 1872 -> 0 bytes Scripts/Scale125/MissionDarkBlue.png | Bin 564 -> 0 bytes Scripts/Scale125/MissionLightBlue.png | Bin 141 -> 0 bytes Scripts/Scale125/MissionLightPurple.png | Bin 545 -> 0 bytes Scripts/Scale125/MissionOliveGreen.png | Bin 541 -> 0 bytes Scripts/Scale125/MissionYellow.png | Bin 531 -> 0 bytes Scripts/Scale125/Mission_dino1.png | Bin 391 -> 0 bytes Scripts/Scale125/Missions.png | Bin 629 -> 0 bytes Scripts/Scale125/Month.png | Bin 533 -> 0 bytes Scripts/Scale125/Move.png | Bin 133 -> 0 bytes Scripts/Scale125/MuMuFolder.png | Bin 133 -> 0 bytes Scripts/Scale125/Name.png | Bin 486 -> 0 bytes Scripts/Scale125/Next.png | Bin 367 -> 0 bytes Scripts/Scale125/Next2.png | Bin 251 -> 0 bytes Scripts/Scale125/NoGifts.png | Bin 216 -> 0 bytes Scripts/Scale125/NoResponse.png | Bin 838 -> 0 bytes Scripts/Scale125/NoResponseDark.png | Bin 821 -> 0 bytes Scripts/Scale125/NoSave.png | Bin 1083 -> 0 bytes Scripts/Scale125/NotFound.png | Bin 193 -> 0 bytes Scripts/Scale125/Notifications.png | Bin 746 -> 0 bytes Scripts/Scale125/OK.png | Bin 146 -> 0 bytes Scripts/Scale125/Opening.png | Bin 512 -> 0 bytes Scripts/Scale125/Pack.png | Bin 161 -> 0 bytes Scripts/Scale125/PackIsMissing.png | Bin 158 -> 0 bytes Scripts/Scale125/Pending.png | Bin 313 -> 0 bytes Scripts/Scale125/PendingFriendRequest.png | Bin 1424 -> 0 bytes Scripts/Scale125/Pick.png | Bin 333 -> 0 bytes Scripts/Scale125/Points.png | Bin 408 -> 0 bytes Scripts/Scale125/PokeGoldPack.png | Bin 858 -> 0 bytes Scripts/Scale125/PokeGoldPack2.png | Bin 352 -> 0 bytes Scripts/Scale125/Pokeball.png | Bin 1609 -> 0 bytes Scripts/Scale125/Premium.PNG | Bin 1040 -> 0 bytes Scripts/Scale125/Privacy.png | Bin 480 -> 0 bytes Scripts/Scale125/Proceed.png | Bin 178 -> 0 bytes Scripts/Scale125/Profile.png | Bin 453 -> 0 bytes Scripts/Scale125/Rainbow.png | Bin 350 -> 0 bytes Scripts/Scale125/Register.png | Bin 1621 -> 0 bytes Scripts/Scale125/Remove.png | Bin 394 -> 0 bytes Scripts/Scale125/Return.png | Bin 384 -> 0 bytes Scripts/Scale125/Save.png | Bin 270 -> 0 bytes Scripts/Scale125/Search.png | Bin 541 -> 0 bytes Scripts/Scale125/Search2.png | Bin 443 -> 0 bytes Scripts/Scale125/SelectExpansion.png | Bin 186 -> 0 bytes Scripts/Scale125/Send.png | Bin 318 -> 0 bytes Scripts/Scale125/Send2.png | Bin 399 -> 0 bytes Scripts/Scale125/Share.png | Bin 401 -> 0 bytes Scripts/Scale125/Shop.png | Bin 216 -> 0 bytes Scripts/Scale125/ShopTicket.png | Bin 955 -> 0 bytes Scripts/Scale125/ShowcaseInput.png | Bin 171 -> 0 bytes Scripts/Scale125/ShowcaseLiked.png | Bin 775 -> 0 bytes Scripts/Scale125/Skip.png | Bin 349 -> 0 bytes Scripts/Scale125/Skip2.png | Bin 452 -> 0 bytes Scripts/Scale125/Social.png | Bin 878 -> 0 bytes Scripts/Scale125/SocialAlert.png | Bin 457 -> 0 bytes Scripts/Scale125/StartupErrorX.png | Bin 241 -> 0 bytes Scripts/Scale125/Swipe.png | Bin 265 -> 0 bytes Scripts/Scale125/Swipe2.png | Bin 795 -> 0 bytes Scripts/Scale125/Tos.png | Bin 480 -> 0 bytes Scripts/Scale125/TosScreen.png | Bin 513 -> 0 bytes Scripts/Scale125/Trace.png | Bin 788 -> 0 bytes Scripts/Scale125/Trade.png | Bin 619 -> 0 bytes Scripts/Scale125/Tutorial.png | Bin 137 -> 0 bytes Scripts/Scale125/UserProfile.png | Bin 298 -> 0 bytes Scripts/Scale125/WPMission.png | Bin 656 -> 0 bytes Scripts/Scale125/Welcome.png | Bin 156 -> 0 bytes Scripts/Scale125/Withdraw.png | Bin 792 -> 0 bytes Scripts/Scale125/Wonder.png | Bin 574 -> 0 bytes Scripts/Scale125/Wonder2.png | Bin 425 -> 0 bytes Scripts/Scale125/Wonder3.png | Bin 160 -> 0 bytes Scripts/Scale125/Wonder4.png | Bin 648 -> 0 bytes Scripts/Scale125/WonderPick.png | Bin 483 -> 0 bytes Scripts/Scale125/Year.png | Bin 526 -> 0 bytes Scripts/Scale125/__shiny2star1.png | Bin 651 -> 0 bytes Scripts/Scale125/bonusWeek.png | Bin 142 -> 0 bytes Scripts/Scale125/clearAll.png | Bin 787 -> 0 bytes Scripts/Scale125/closeduringpack.png | Bin 952 -> 0 bytes Scripts/Scale125/deluxe1star1.png | Bin 870 -> 0 bytes Scripts/Scale125/deluxe1star2.png | Bin 876 -> 0 bytes Scripts/Scale125/deluxe3diamond1.png | Bin 811 -> 0 bytes Scripts/Scale125/deluxe3diamond2.png | Bin 817 -> 0 bytes Scripts/Scale125/deluxefullart1.png | Bin 731 -> 0 bytes Scripts/Scale125/deluxefullart2.png | Bin 734 -> 0 bytes Scripts/Scale125/deluxeimmersive1.png | Bin 802 -> 0 bytes Scripts/Scale125/deluxeimmersive2.png | Bin 821 -> 0 bytes Scripts/Scale125/deluxeshiny2star2.png | Bin 650 -> 0 bytes Scripts/Scale125/deluxetrainer1.png | Bin 891 -> 0 bytes Scripts/Scale125/deluxetrainer2.png | Bin 891 -> 0 bytes Scripts/Scale125/empty.png | Bin 233 -> 0 bytes Scripts/Scale125/fullart-megashine1.png | Bin 536 -> 0 bytes Scripts/Scale125/fullart-megashine2.png | Bin 535 -> 0 bytes Scripts/Scale125/fullart1.png | Bin 571 -> 0 bytes Scripts/Scale125/fullart2.png | Bin 571 -> 0 bytes Scripts/Scale125/fullart3.png | Bin 571 -> 0 bytes Scripts/Scale125/fullart4.png | Bin 571 -> 0 bytes Scripts/Scale125/fullart5.png | Bin 571 -> 0 bytes Scripts/Scale125/gimmighoul1.png | Bin 347 -> 0 bytes Scripts/Scale125/gimmighoul2.png | Bin 350 -> 0 bytes Scripts/Scale125/gimmighoul3.png | Bin 354 -> 0 bytes Scripts/Scale125/gimmighoul4.png | Bin 339 -> 0 bytes Scripts/Scale125/immersive-megashine6-1.png | Bin 582 -> 0 bytes Scripts/Scale125/immersive-megashine6.png | Bin 587 -> 0 bytes Scripts/Scale125/inHamburgerMenu.png | Bin 379 -> 0 bytes Scripts/Scale125/insideTrade.png | Bin 350 -> 0 bytes Scripts/Scale125/lag1.png | Bin 82 -> 0 bytes Scripts/Scale125/lag2.png | Bin 99 -> 0 bytes Scripts/Scale125/lag3.png | Bin 84 -> 0 bytes Scripts/Scale125/lag4.png | Bin 79 -> 0 bytes Scripts/Scale125/lag5.png | Bin 83 -> 0 bytes Scripts/Scale125/missionwonder.png | Bin 718 -> 0 bytes Scripts/Scale125/newPrivacyTOSpopup.png | Bin 480 -> 0 bytes Scripts/Scale125/normal6card4.png | Bin 160 -> 0 bytes Scripts/Scale125/normal6card5.png | Bin 152 -> 0 bytes Scripts/Scale125/normal6card6.png | Bin 158 -> 0 bytes Scripts/Scale125/notenoughitems.png | Bin 865 -> 0 bytes Scripts/Scale125/player.png | Bin 766 -> 0 bytes Scripts/Scale125/requests.png | Bin 388 -> 0 bytes Scripts/Scale125/shinedustItems.png | Bin 1018 -> 0 bytes Scripts/Scale125/shiny1star6card6.png | Bin 594 -> 0 bytes Scripts/Scale125/shiny2star1.png | Bin 658 -> 0 bytes Scripts/Scale125/shiny2star2.png | Bin 658 -> 0 bytes Scripts/Scale125/shiny2star3.png | Bin 658 -> 0 bytes Scripts/Scale125/shiny2star4.png | Bin 658 -> 0 bytes Scripts/Scale125/shiny2star5.png | Bin 658 -> 0 bytes .../Scale125/shiny2star6card-megashine1.png | Bin 542 -> 0 bytes .../Scale125/shiny2star6card-megashine2.png | Bin 599 -> 0 bytes .../Scale125/shiny2star6card-megashine3.png | Bin 612 -> 0 bytes .../Scale125/shiny2star6card-megashine4.png | Bin 566 -> 0 bytes Scripts/Scale125/shiny2star6card6.png | Bin 603 -> 0 bytes Scripts/Scale125/trophy.png | Bin 506 -> 0 bytes Scripts/Scale125/trophyPage.png | Bin 1381 -> 0 bytes Scripts/Scale125/wrongItem.png | Bin 355 -> 0 bytes 233 files changed, 931 insertions(+), 197 deletions(-) create mode 100644 Scripts/Needles/FriendLimit.png rename Scripts/{Scale125 => Needles}/MissionDeck.png (100%) rename Scripts/{Scale125 => Needles}/Update.png (100%) delete mode 100644 Scripts/Scale125/1solobattlemission.png delete mode 100644 Scripts/Scale125/1star6card4.png delete mode 100644 Scripts/Scale125/1star6card6.png delete mode 100644 Scripts/Scale125/3diamond6card4.png delete mode 100644 Scripts/Scale125/3diamond6card5.png delete mode 100644 Scripts/Scale125/6cardpackindicator.png delete mode 100644 Scripts/Scale125/99cn.png delete mode 100644 Scripts/Scale125/99de.png delete mode 100644 Scripts/Scale125/99en.png delete mode 100644 Scripts/Scale125/99es.png delete mode 100644 Scripts/Scale125/99fr.png delete mode 100644 Scripts/Scale125/99it.png delete mode 100644 Scripts/Scale125/99jp.png delete mode 100644 Scripts/Scale125/99ko.png delete mode 100644 Scripts/Scale125/99pt.png delete mode 100644 Scripts/Scale125/Accept.png delete mode 100644 Scripts/Scale125/Accepted.png delete mode 100644 Scripts/Scale125/Accepted2.png delete mode 100644 Scripts/Scale125/Account2.png delete mode 100644 Scripts/Scale125/Add.png delete mode 100644 Scripts/Scale125/Add2.png delete mode 100644 Scripts/Scale125/AddGray.png delete mode 100644 Scripts/Scale125/Album.png delete mode 100644 Scripts/Scale125/App.png delete mode 100644 Scripts/Scale125/Approve.png delete mode 100644 Scripts/Scale125/Badge.png delete mode 100644 Scripts/Scale125/Birth.png delete mode 100644 Scripts/Scale125/Booster.png delete mode 100644 Scripts/Scale125/Border.png delete mode 100644 Scripts/Scale125/Bulba.png delete mode 100644 Scripts/Scale125/Button.png delete mode 100644 Scripts/Scale125/Button2.png delete mode 100644 Scripts/Scale125/Card.png delete mode 100644 Scripts/Scale125/ChooseEevee.png delete mode 100644 Scripts/Scale125/ChooseErika.png delete mode 100644 Scripts/Scale125/ChosenTag.png delete mode 100644 Scripts/Scale125/Cinematic.png delete mode 100644 Scripts/Scale125/ClaimAll.png delete mode 100644 Scripts/Scale125/CollectDailies.png delete mode 100644 Scripts/Scale125/CommunityShowcase.png delete mode 100644 Scripts/Scale125/Complete.png delete mode 100644 Scripts/Scale125/Confirm.png delete mode 100644 Scripts/Scale125/ConfirmPack.png delete mode 100644 Scripts/Scale125/Country.png delete mode 100644 Scripts/Scale125/CountrySelect.png delete mode 100644 Scripts/Scale125/CountrySelect2.png delete mode 100644 Scripts/Scale125/DailyMissions.png delete mode 100644 Scripts/Scale125/DataDownload.png delete mode 100644 Scripts/Scale125/Delete.png delete mode 100644 Scripts/Scale125/Delete2.png delete mode 100644 Scripts/Scale125/Delete3.png delete mode 100644 Scripts/Scale125/DeleteAll.png delete mode 100644 Scripts/Scale125/DeleteFriend.png delete mode 100644 Scripts/Scale125/DexMissions.png delete mode 100644 Scripts/Scale125/Eevee.png delete mode 100644 Scripts/Scale125/Erase.png delete mode 100644 Scripts/Scale125/Erika.png delete mode 100644 Scripts/Scale125/FavouriteFriend.png delete mode 100644 Scripts/Scale125/FavouriteFriend2.png delete mode 100644 Scripts/Scale125/FavouriteN.png delete mode 100644 Scripts/Scale125/FavouriteY.png delete mode 100644 Scripts/Scale125/FeatureUnlocked1.png delete mode 100644 Scripts/Scale125/FirstAnniversaryCelebration.png delete mode 100644 Scripts/Scale125/FirstMission.png delete mode 100644 Scripts/Scale125/Friend.png delete mode 100644 Scripts/Scale125/FriendIDSearch.png delete mode 100644 Scripts/Scale125/Friends.png delete mode 100644 Scripts/Scale125/GPTest_NotFound.png delete mode 100644 Scripts/Scale125/GholdengoEmblem.png delete mode 100644 Scripts/Scale125/GotAllMissions.PNG delete mode 100644 Scripts/Scale125/Gray.png delete mode 100644 Scripts/Scale125/HardwareReq2.png delete mode 100644 Scripts/Scale125/Home.png delete mode 100644 Scripts/Scale125/HourGlassAndPokeGoldPack.png delete mode 100644 Scripts/Scale125/Hourglass.png delete mode 100644 Scripts/Scale125/Hourglass2.png delete mode 100644 Scripts/Scale125/Hourglass3.png delete mode 100644 Scripts/Scale125/HourglassPack.png delete mode 100644 Scripts/Scale125/LevelUp.png delete mode 100644 Scripts/Scale125/Link.png delete mode 100644 Scripts/Scale125/LoadingBox.png delete mode 100644 Scripts/Scale125/Mail.png delete mode 100644 Scripts/Scale125/Main.png delete mode 100644 Scripts/Scale125/Menu.png delete mode 100644 Scripts/Scale125/Mission.png delete mode 100644 Scripts/Scale125/MissionDarkBlue.png delete mode 100644 Scripts/Scale125/MissionLightBlue.png delete mode 100644 Scripts/Scale125/MissionLightPurple.png delete mode 100644 Scripts/Scale125/MissionOliveGreen.png delete mode 100644 Scripts/Scale125/MissionYellow.png delete mode 100644 Scripts/Scale125/Mission_dino1.png delete mode 100644 Scripts/Scale125/Missions.png delete mode 100644 Scripts/Scale125/Month.png delete mode 100644 Scripts/Scale125/Move.png delete mode 100644 Scripts/Scale125/MuMuFolder.png delete mode 100644 Scripts/Scale125/Name.png delete mode 100644 Scripts/Scale125/Next.png delete mode 100644 Scripts/Scale125/Next2.png delete mode 100644 Scripts/Scale125/NoGifts.png delete mode 100644 Scripts/Scale125/NoResponse.png delete mode 100644 Scripts/Scale125/NoResponseDark.png delete mode 100644 Scripts/Scale125/NoSave.png delete mode 100644 Scripts/Scale125/NotFound.png delete mode 100644 Scripts/Scale125/Notifications.png delete mode 100644 Scripts/Scale125/OK.png delete mode 100644 Scripts/Scale125/Opening.png delete mode 100644 Scripts/Scale125/Pack.png delete mode 100644 Scripts/Scale125/PackIsMissing.png delete mode 100644 Scripts/Scale125/Pending.png delete mode 100644 Scripts/Scale125/PendingFriendRequest.png delete mode 100644 Scripts/Scale125/Pick.png delete mode 100644 Scripts/Scale125/Points.png delete mode 100644 Scripts/Scale125/PokeGoldPack.png delete mode 100644 Scripts/Scale125/PokeGoldPack2.png delete mode 100644 Scripts/Scale125/Pokeball.png delete mode 100644 Scripts/Scale125/Premium.PNG delete mode 100644 Scripts/Scale125/Privacy.png delete mode 100644 Scripts/Scale125/Proceed.png delete mode 100644 Scripts/Scale125/Profile.png delete mode 100644 Scripts/Scale125/Rainbow.png delete mode 100644 Scripts/Scale125/Register.png delete mode 100644 Scripts/Scale125/Remove.png delete mode 100644 Scripts/Scale125/Return.png delete mode 100644 Scripts/Scale125/Save.png delete mode 100644 Scripts/Scale125/Search.png delete mode 100644 Scripts/Scale125/Search2.png delete mode 100644 Scripts/Scale125/SelectExpansion.png delete mode 100644 Scripts/Scale125/Send.png delete mode 100644 Scripts/Scale125/Send2.png delete mode 100644 Scripts/Scale125/Share.png delete mode 100644 Scripts/Scale125/Shop.png delete mode 100644 Scripts/Scale125/ShopTicket.png delete mode 100644 Scripts/Scale125/ShowcaseInput.png delete mode 100644 Scripts/Scale125/ShowcaseLiked.png delete mode 100644 Scripts/Scale125/Skip.png delete mode 100644 Scripts/Scale125/Skip2.png delete mode 100644 Scripts/Scale125/Social.png delete mode 100644 Scripts/Scale125/SocialAlert.png delete mode 100644 Scripts/Scale125/StartupErrorX.png delete mode 100644 Scripts/Scale125/Swipe.png delete mode 100644 Scripts/Scale125/Swipe2.png delete mode 100644 Scripts/Scale125/Tos.png delete mode 100644 Scripts/Scale125/TosScreen.png delete mode 100644 Scripts/Scale125/Trace.png delete mode 100644 Scripts/Scale125/Trade.png delete mode 100644 Scripts/Scale125/Tutorial.png delete mode 100644 Scripts/Scale125/UserProfile.png delete mode 100644 Scripts/Scale125/WPMission.png delete mode 100644 Scripts/Scale125/Welcome.png delete mode 100644 Scripts/Scale125/Withdraw.png delete mode 100644 Scripts/Scale125/Wonder.png delete mode 100644 Scripts/Scale125/Wonder2.png delete mode 100644 Scripts/Scale125/Wonder3.png delete mode 100644 Scripts/Scale125/Wonder4.png delete mode 100644 Scripts/Scale125/WonderPick.png delete mode 100644 Scripts/Scale125/Year.png delete mode 100644 Scripts/Scale125/__shiny2star1.png delete mode 100644 Scripts/Scale125/bonusWeek.png delete mode 100644 Scripts/Scale125/clearAll.png delete mode 100644 Scripts/Scale125/closeduringpack.png delete mode 100644 Scripts/Scale125/deluxe1star1.png delete mode 100644 Scripts/Scale125/deluxe1star2.png delete mode 100644 Scripts/Scale125/deluxe3diamond1.png delete mode 100644 Scripts/Scale125/deluxe3diamond2.png delete mode 100644 Scripts/Scale125/deluxefullart1.png delete mode 100644 Scripts/Scale125/deluxefullart2.png delete mode 100644 Scripts/Scale125/deluxeimmersive1.png delete mode 100644 Scripts/Scale125/deluxeimmersive2.png delete mode 100644 Scripts/Scale125/deluxeshiny2star2.png delete mode 100644 Scripts/Scale125/deluxetrainer1.png delete mode 100644 Scripts/Scale125/deluxetrainer2.png delete mode 100644 Scripts/Scale125/empty.png delete mode 100644 Scripts/Scale125/fullart-megashine1.png delete mode 100644 Scripts/Scale125/fullart-megashine2.png delete mode 100644 Scripts/Scale125/fullart1.png delete mode 100644 Scripts/Scale125/fullart2.png delete mode 100644 Scripts/Scale125/fullart3.png delete mode 100644 Scripts/Scale125/fullart4.png delete mode 100644 Scripts/Scale125/fullart5.png delete mode 100644 Scripts/Scale125/gimmighoul1.png delete mode 100644 Scripts/Scale125/gimmighoul2.png delete mode 100644 Scripts/Scale125/gimmighoul3.png delete mode 100644 Scripts/Scale125/gimmighoul4.png delete mode 100644 Scripts/Scale125/immersive-megashine6-1.png delete mode 100644 Scripts/Scale125/immersive-megashine6.png delete mode 100644 Scripts/Scale125/inHamburgerMenu.png delete mode 100644 Scripts/Scale125/insideTrade.png delete mode 100644 Scripts/Scale125/lag1.png delete mode 100644 Scripts/Scale125/lag2.png delete mode 100644 Scripts/Scale125/lag3.png delete mode 100644 Scripts/Scale125/lag4.png delete mode 100644 Scripts/Scale125/lag5.png delete mode 100644 Scripts/Scale125/missionwonder.png delete mode 100644 Scripts/Scale125/newPrivacyTOSpopup.png delete mode 100644 Scripts/Scale125/normal6card4.png delete mode 100644 Scripts/Scale125/normal6card5.png delete mode 100644 Scripts/Scale125/normal6card6.png delete mode 100644 Scripts/Scale125/notenoughitems.png delete mode 100644 Scripts/Scale125/player.png delete mode 100644 Scripts/Scale125/requests.png delete mode 100644 Scripts/Scale125/shinedustItems.png delete mode 100644 Scripts/Scale125/shiny1star6card6.png delete mode 100644 Scripts/Scale125/shiny2star1.png delete mode 100644 Scripts/Scale125/shiny2star2.png delete mode 100644 Scripts/Scale125/shiny2star3.png delete mode 100644 Scripts/Scale125/shiny2star4.png delete mode 100644 Scripts/Scale125/shiny2star5.png delete mode 100644 Scripts/Scale125/shiny2star6card-megashine1.png delete mode 100644 Scripts/Scale125/shiny2star6card-megashine2.png delete mode 100644 Scripts/Scale125/shiny2star6card-megashine3.png delete mode 100644 Scripts/Scale125/shiny2star6card-megashine4.png delete mode 100644 Scripts/Scale125/shiny2star6card6.png delete mode 100644 Scripts/Scale125/trophy.png delete mode 100644 Scripts/Scale125/trophyPage.png delete mode 100644 Scripts/Scale125/wrongItem.png diff --git a/.gitignore b/.gitignore index 6dfd724c..b7b1466b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,12 +16,13 @@ Scripts/*.ini *.bak !.gitkeep Accounts/Saved/**/*.xml -Accounts/SpecificCards/*.xml +Accounts/SpecificCards/ +Accounts/GodPacks/ Accounts/Saved/tmp/** Accounts/Trades/*.csv Accounts/Trades/*.json Scripts/temp/** -Lab +Lab/ # macOS metadata files ._* diff --git a/PTCGPB.ahk b/PTCGPB.ahk index 89ba4be6..5a209b58 100644 --- a/PTCGPB.ahk +++ b/PTCGPB.ahk @@ -59,7 +59,11 @@ OnMessage(0x4A, "ReceiveData") if not A_IsAdmin { - Run *RunAs "%A_ScriptFullPath%" + try { + Run *RunAs "%A_ScriptFullPath%" + } catch { + MsgBox, 48, PTCGPB, Administrator permission is required to run PTCGPB.`n`nPlease launch it again and approve the permission prompt. + } ExitApp } diff --git a/Scripts/1.ahk b/Scripts/1.ahk index 544096a2..82536dcc 100644 --- a/Scripts/1.ahk +++ b/Scripts/1.ahk @@ -1,4 +1,4 @@ -#SingleInstance on +#SingleInstance, Force SetMouseDelay, -1 SetDefaultMouseSpeed, 0 SetBatchLines, -1 @@ -122,6 +122,16 @@ if(botConfig.get("deleteMethod") != "Inject Wonderpick 96P+") session.set("packMethod", 0) IniRead, DeadCheck, % session.get("scriptIniFile"), UserSettings, DeadCheck, 0 +IniRead, friendCleanupPending, % session.get("scriptIniFile"), UserSettings, friendCleanupPending, 0 +if(friendCleanupPending = 1) { + DeadCheck := 1 + IniWrite, 1, % session.get("scriptIniFile"), UserSettings, DeadCheck + session.set("friended", true) + LogToFile("Friend cleanup pending found at startup. Entering cleanup recovery.", "GroupReroll.txt") +} +if(DeadCheck = 1) { + RestoreLoadedAccountForRecovery() +} IniRead, rerollsValue, % session.get("scriptIniFile"), Metrics, rerolls, 0 IniRead, rerollStartTimeValue, % session.get("scriptIniFile"), Metrics, rerollStartTime, -1 @@ -138,7 +148,8 @@ if(botConfig.get("heartBeat")) SetTimer, RefreshAccountLists, 3600000 ; Refresh Account list every hour -DirectlyPositionWindow() +windowCoverHwnd := GetMuMuCoverWindowForMaintenance(session.get("winTitle")) +DirectlyPositionWindow(windowCoverHwnd) Sleep, 500 setADBBaseInfo() @@ -148,7 +159,7 @@ Sleep, 500 CreateStatusMessage("Disabling background services...") DisableBackgroundServices() -resetWindows() +resetWindows(windowCoverHwnd) MaxRetries := 10 RetryCount := 0 Loop { @@ -173,6 +184,7 @@ Loop { DllCall("SetWindowPos", "Ptr", WinExist(), "Ptr", 1 ; HWND_BOTTOM , "Int", 0, "Int", 0, "Int", 0, "Int", 0, "UInt", 0x13) ; SWP_NOSIZE, SWP_NOMOVE, SWP_NOACTIVATE Gui, Show, NoActivate x%x4% y%y4% w275 h30 + RestoreMuMuCoverWindow(windowCoverHwnd, session.get("winTitle")) break } catch { @@ -202,7 +214,7 @@ SetTimer, LiveMetricsTimer, 5000 if(session.get("injectMethod") && DeadCheck != 1) { session.set("loadedAccount", loadAccount()) } else if(session.get("injectMethod") && DeadCheck = 1) { - ; DeadCheck = 1: Start the Pokemon app for the stuck account (don't inject new account) + ; DeadCheck/friend cleanup recovery: Start the existing app account (don't inject new account). startPTCGPApp() } @@ -854,7 +866,10 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation global botConfig, session, needlesDict static lastStatusTime := 0 - needleObj := needlesDict.Get(needleName) + needleObj := GetSearchNeedleObj(needleName, "FindOrLoseImage") + if (!IsObject(needleObj)) + return false + imageName := needleObj.imageName if(botConfig.get("slowMotion")) { @@ -969,7 +984,10 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVariation := 20, sleepTime := "", skip := false, safeTime := 0) { global botConfig, session, needlesDict - needleObj := needlesDict.Get(needleName) + needleObj := GetSearchNeedleObj(needleName, "FindImageAndClick") + if (!IsObject(needleObj)) + return false + imageName := needleObj.imageName if(botConfig.get("slowMotion")) { @@ -1139,14 +1157,14 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria return confirmed } -resetWindows() { - DirectlyPositionWindow() +resetWindows(coverHwnd := "") { + DirectlyPositionWindow(coverHwnd) return true } -DirectlyPositionWindow() { - global botConfig +DirectlyPositionWindow(coverHwnd := "") { + global botConfig, session windowMetrics := GetMumuWindowMetrics() scaleParam := windowMetrics.scaleParam @@ -1158,6 +1176,8 @@ DirectlyPositionWindow() { ; Calculate position based on instance number Title := session.get("winTitle") + if (!coverHwnd) + coverHwnd := GetMuMuCoverWindowForMaintenance(Title) if (botConfig.get("runMain")) { instanceIndex := (botConfig.get("Mains") - 1) + Title + 1 @@ -1182,6 +1202,7 @@ DirectlyPositionWindow() { FixInstanceScreen(session.get("winTitle")) CreateStatusMessage("Positioned window at x:" . x . " y:" . y,,,, false) + RestoreMuMuCoverWindow(coverHwnd, Title) return true } @@ -1207,8 +1228,16 @@ restartGameInstance(reason, RL := true) { if (isStuck) { logStr := "STUCK DETECTED - Reason: " . reason . " | injectMethod: " . (session.get("injectMethod") ? "true" : "false") . " | " logStr .= "loadedAccount: " . (session.get("loadedAccount") ? "true" : "false") . " | " + logStr .= "friended: " . (session.get("friended") ? "true" : "false") . " | " logStr .= "accountFileName: " . session.get("accountFileName") LogToFile(logStr) + SaveStuckScreenshot(reason) + + if(session.get("injectMethod") && session.get("loadedAccount") && session.get("friended")) { + IniWrite, 1, % session.get("scriptIniFile"), UserSettings, DeadCheck + SetFriendCleanupPending("Stuck recovery: " . reason) + LogToFile("DeadCheck set for stuck recovery cleanup. Reason: " . reason) + } } if (RL = "GodPack") { @@ -1271,6 +1300,30 @@ restartGameInstance(reason, RL := true) { } } +SaveStuckScreenshot(reason) { + global session + + fileDir := A_ScriptDir . "\..\Screenshots\Stuck" + if !FileExist(fileDir) + FileCreateDir, %fileDir% + + safeReason := RegExReplace(reason, "[\\/:*?""<>|]", "_") + safeReason := RegExReplace(safeReason, "\s+", "_") + safeReason := SubStr(safeReason, 1, 80) + filePath := fileDir . "\" . A_Now . "_inst" . session.get("scriptName") . "_" . safeReason . ".png" + + hWnd := getMuMuHwnd(session.get("winTitle")) + if (!hWnd) + return + + pBitmap := from_window(hWnd) + if (pBitmap) { + Gdip_SaveBitmapToFile(pBitmap, filePath) + Gdip_DisposeImage(pBitmap) + LogToFile("Saved stuck screenshot: " . filePath) + } +} + menuDelete() { global botConfig, session diff --git a/Scripts/Include/ADB.ahk b/Scripts/Include/ADB.ahk index e451d7e4..f43ff278 100644 --- a/Scripts/Include/ADB.ahk +++ b/Scripts/Include/ADB.ahk @@ -146,9 +146,9 @@ RefreshAdbConnectionAfterInstanceRestart(timeoutMs = 30000) { } } - LogToFile("[" . A_ScriptName . "] Waiting for ADB after instance restart on " . ip . ". Connection result: " . connectionResult, "ADB.txt") + LogDebugToFile("[" . A_ScriptName . "] Waiting for ADB after instance restart on " . ip . ". Connection result: " . connectionResult, "ADB.txt") } else { - LogToFile("[" . A_ScriptName . "] Waiting for ADB port after instance restart.", "ADB.txt") + LogDebugToFile("[" . A_ScriptName . "] Waiting for ADB port after instance restart.", "ADB.txt") } if ((A_TickCount - startTick) > timeoutMs) { diff --git a/Scripts/Include/AccountManager.ahk b/Scripts/Include/AccountManager.ahk index 3995775f..1d305b62 100644 --- a/Scripts/Include/AccountManager.ahk +++ b/Scripts/Include/AccountManager.ahk @@ -138,6 +138,7 @@ loadAccount() { CreateStatusMessage(currentAccountInfo, "AccountInfo", 0, 46, false) SetTimer, DestoryAccountInfoUI, -15000 getMetaData() + PersistLoadedAccountForRecovery(loadFile) return loadFile } @@ -154,15 +155,19 @@ DestoryAccountInfoUI(){ ; MarkAccountAsUsed - Mark account as successfully used and remove from queue ;------------------------------------------------------------------------------- MarkAccountAsUsed() { - global session + global session, DeadCheck if (!session.get("currentLoadedAccountIndex") || !session.get("accountFileName")) { LogToFile("Warning: MarkAccountAsUsed called but no current account tracked") return } + if(DeadCheck = 1) + LogDebugToFile("MarkAccountAsUsed after cleanup start | account=" . session.get("accountFileName") . " | index=" . session.get("currentLoadedAccountIndex")) + saveDir := A_ScriptDir "\..\Accounts\Saved\" . session.get("scriptName") outputTxt := saveDir . "\list_current.txt" + foundByName := false ; Remove the account from list_current.txt if FileExist(outputTxt) { @@ -171,21 +176,91 @@ MarkAccountAsUsed() { newListContent := "" Loop, % fileLines.MaxIndex() { - if (A_Index != session.get("currentLoadedAccountIndex")) - newListContent .= fileLines[A_Index] "`r`n" + if (fileLines[A_Index] = session.get("accountFileName")) { + foundByName := true + continue + } + newListContent .= fileLines[A_Index] "`r`n" } - FileDelete, %outputTxt% - FileAppend, %newListContent%, %outputTxt% + if (!foundByName) { + newListContent := "" + Loop, % fileLines.MaxIndex() { + if (A_Index != session.get("currentLoadedAccountIndex")) + newListContent .= fileLines[A_Index] "`r`n" + } + } + + if (foundByName || session.get("currentLoadedAccountIndex")) { + FileDelete, %outputTxt% + FileAppend, %newListContent%, %outputTxt% + } } ; Track as used with timestamp TrackUsedAccount(session.get("accountFileName")) + ClearLoadedAccountRecovery() + + if(DeadCheck = 1) + LogDebugToFile("MarkAccountAsUsed after cleanup complete | account=" . session.get("accountFileName") . " | removedByName=" . foundByName) ; Reset tracking session.set("currentLoadedAccountIndex", 0) } +PersistLoadedAccountForRecovery(loadedAccountPath := "") { + global session + + if (loadedAccountPath = "") + loadedAccountPath := session.get("loadedAccount") + + IniWrite, %loadedAccountPath%, % session.get("scriptIniFile"), Recovery, loadedAccount + IniWrite, % session.get("accountFileName"), % session.get("scriptIniFile"), Recovery, accountFileName + IniWrite, % session.get("currentLoadedAccountIndex"), % session.get("scriptIniFile"), Recovery, currentLoadedAccountIndex + IniWrite, % session.get("loadDir"), % session.get("scriptIniFile"), Recovery, loadDir +} + +RestoreLoadedAccountForRecovery() { + global session + + IniRead, loadedAccount, % session.get("scriptIniFile"), Recovery, loadedAccount, + IniRead, accountFileName, % session.get("scriptIniFile"), Recovery, accountFileName, + IniRead, currentLoadedAccountIndex, % session.get("scriptIniFile"), Recovery, currentLoadedAccountIndex, 0 + IniRead, loadDir, % session.get("scriptIniFile"), Recovery, loadDir, + + if(loadedAccount != "") + session.set("loadedAccount", loadedAccount) + if(accountFileName != "") + session.set("accountFileName", accountFileName) + if(currentLoadedAccountIndex != "") + session.set("currentLoadedAccountIndex", currentLoadedAccountIndex) + if(loadDir != "") + session.set("loadDir", loadDir) + + return (accountFileName != "" && currentLoadedAccountIndex != 0) +} + +ClearLoadedAccountRecovery() { + global session + + IniDelete, % session.get("scriptIniFile"), Recovery +} + +SetFriendCleanupPending(reason := "") { + global session + + IniWrite, 1, % session.get("scriptIniFile"), UserSettings, friendCleanupPending + if(reason != "") + IniWrite, %reason%, % session.get("scriptIniFile"), Recovery, friendCleanupReason +} + +ClearFriendCleanupPending() { + global session + + IniWrite, 0, % session.get("scriptIniFile"), UserSettings, friendCleanupPending + IniDelete, % session.get("scriptIniFile"), Recovery, friendCleanupReason +} + ;------------------------------------------------------------------------------- ; saveAccount - Save current account from game to XML file ;------------------------------------------------------------------------------- @@ -386,6 +461,7 @@ UpdateAccount() { FileMove, % session.get("accountFile"), %accountNewFile% ;TODO enable FileSetTime,, %accountNewFile% session.set("accountFileName", AccountNewName) + PersistLoadedAccountForRecovery() } updateTotalTime() @@ -503,6 +579,7 @@ setMetaData() { accountNewFile := saveDir . "\" . AccountNewName FileMove, % session.get("accountFile"), %accountNewFile% session.set("accountFileName", AccountNewName) + PersistLoadedAccountForRecovery() } ;------------------------------------------------------------------------------- diff --git a/Scripts/Include/CardDetection.ahk b/Scripts/Include/CardDetection.ahk index acda5bfa..7d6cf018 100644 --- a/Scripts/Include/CardDetection.ahk +++ b/Scripts/Include/CardDetection.ahk @@ -53,51 +53,70 @@ DetectFourCardPack() { return false } +GetCardLoadingBorderCoords(totalCardsInPack) { + return (GetConfiguredDisplayScale() = 125) + ? GetCardLoadingBorderCoords125(totalCardsInPack) + : GetCardLoadingBorderCoords100(totalCardsInPack) +} + +GetCardLoadingBorderCoords100(totalCardsInPack) { + if (totalCardsInPack = 4) { + return [[96, 279, 116, 281] + ,[181, 279, 201, 281] + ,[96, 394, 116, 396] + ,[181, 394, 201, 396]] + } + + if (totalCardsInPack = 6) { + return [[56, 279, 76, 281] + ,[139, 279, 159, 281] + ,[222, 279, 242, 281] + ,[56, 394, 76, 396] + ,[139, 394, 159, 396] + ,[222, 394, 242, 396]] + } + + return [[56, 279, 76, 281] + ,[139, 279, 159, 281] + ,[222, 279, 242, 281] + ,[96, 394, 116, 396] + ,[181, 394, 201, 396]] +} + +GetCardLoadingBorderCoords125(totalCardsInPack) { + if (totalCardsInPack = 4) { + return [[96, 284, 116, 286] + ,[181, 284, 201, 286] + ,[96, 399, 116, 401] + ,[181, 399, 201, 401]] + } + + if (totalCardsInPack = 6) { + return [[56, 284, 76, 286] + ,[139, 284, 159, 286] + ,[222, 284, 242, 286] + ,[56, 399, 76, 401] + ,[139, 399, 159, 401] + ,[222, 399, 242, 401]] + } + + return [[56, 284, 76, 286] + ,[139, 284, 159, 286] + ,[222, 284, 242, 286] + ,[96, 399, 116, 401] + ,[181, 399, 201, 401]] +} + +GetLoadingBoxBorderCoords() { + return GetScaleProfileValue([[121, 269, 154, 272], [121, 297, 154, 300]] + , [[121, 274, 154, 277], [121, 302, 154, 305]]) +} + CheckCardLoading(totalCardsInPack){ global session count := 0 - if (GetConfiguredDisplayScale() = 125) { - if (totalCardsInPack = 4) { - borderCoords := [[96, 284, 116, 286] - ,[181, 284, 201, 286] - ,[96, 399, 116, 401] - ,[181, 399, 201, 401]] - } else if (totalCardsInPack = 6) { - borderCoords := [[56, 284, 76, 286] - ,[139, 284, 159, 286] - ,[222, 284, 242, 286] - ,[56, 399, 76, 401] - ,[139, 399, 159, 401] - ,[222, 399, 242, 401]] - } else { - borderCoords := [[56, 284, 76, 286] - ,[139, 284, 159, 286] - ,[222, 284, 242, 286] - ,[96, 399, 116, 401] - ,[181, 399, 201, 401]] - } - } else if (totalCardsInPack = 4) { - borderCoords := [[96, 279, 116, 281] ; Card 1 - ,[181, 279, 201, 281] ; Card 2 - ,[96, 394, 116, 396] ; Card 3 - ,[181, 394, 201, 396]] ; Card 4 - } else if (totalCardsInPack = 6) { - totalCardsInPack := 6 - borderCoords := [[56, 279, 76, 281] ; Top row card 1 - ,[139, 279, 159, 281] ; Top row card 2 - ,[222, 279, 242, 281] ; Top row card 3 - ,[56, 394, 76, 396] ; Bottom row card 1 - ,[139, 394, 159, 396] ; Bottom row card 2 - ,[222, 394, 242, 396]] ; Bottom row card 3 - } else { - ; 5-card pack - borderCoords := [[56, 279, 76, 281] ; Card 1 - ,[139, 279, 159, 281] ; Card 2 - ,[222, 279, 242, 281] ; Card 3 - ,[96, 394, 116, 396] ; Card 4 - ,[181, 394, 201, 396]] ; Card 5 - } + borderCoords := GetCardLoadingBorderCoords(totalCardsInPack) pBitmap := from_window(getMuMuHwnd(session.get("winTitle"))) for index, value in borderCoords { @@ -125,8 +144,7 @@ AnalysisBorder(totalCardsInPack) { global session, isDevelopment, rarityCheckers currentPackInfo := {"isVerified": false, "CardSlot": [], "TypeCount": {}} - loadingBorderCoords := GetScaleProfileValue([[121, 269, 154, 272], [121, 297, 154, 300]] - , [[121, 274, 154, 277], [121, 302, 154, 305]]) + loadingBorderCoords := GetLoadingBoxBorderCoords() pBitmap := 0 Loop, { pBitmap := from_window(getMuMuHwnd(session.get("winTitle"))) diff --git a/Scripts/Include/Coords.ahk b/Scripts/Include/Coords.ahk index 9231a50c..29db6dda 100644 --- a/Scripts/Include/Coords.ahk +++ b/Scripts/Include/Coords.ahk @@ -105,6 +105,7 @@ needlesDict.Add(new Needle("Friend_DenyButtonInApproveSubmenu", "DeleteFriend", needlesDict.Add(new Needle("Friend_RequestAlreadyClosedInApproveSubmenu", "RequestAlreadyClosed", new Coordinate(3, 330, 70, 345))) needlesDict.Add(new Needle("Friend_DisabledDenyAllRequestButtonInApproveSubmenu", "Accept", new Coordinate(190, 495, 202, 507))) needlesDict.Add(new Needle("Friend_BlankFriendSlotAreaInApproveSubmenu", "Approve", new Coordinate(177, 450, 190, 468))) +needlesDict.Add(new Needle("FriendLimit", "FriendLimit", new Coordinate(221, 267, 228, 272))) ;============================================================================================================================== @@ -206,6 +207,7 @@ needlesDict.Add(new Needle("Mission_MissionIconTopAreaInDetails", "Mission_dino2 needlesDict.Add(new Needle("Mission_GoToDexButtonIcon", "DexMissions", new Coordinate(18, 210, 30, 222))) needlesDict.Add(new Needle("Mission_DailyMissionImage", "DailyMissions", new Coordinate(204, 190, 223, 197))) needlesDict.Add(new Needle("Mission_CompleteGotAllClaims", "GotAllMissions", new Coordinate(257, 417, 271, 428))) +needlesDict.Add(new Needle("MissionDeck", "MissionDeck", new Coordinate(158, 104, 170, 117))) ;============================================================================================================================== @@ -284,6 +286,7 @@ needlesDict.SetScale125("Pack_BackButtonInSelectPackScreen", new Coordinate(121, needlesDict.SetScale125("Create_CountryComboBoxButton", new Coordinate(105, 396, 121, 406)) needlesDict.SetScale125("Mission_DailyMissionImage", new Coordinate(204, 195, 223, 202)) needlesDict.SetScale125("Mission_GoToDexButtonIcon", new Coordinate(18, 215, 30, 227)) +needlesDict.SetScale125("MissionDeck", new Coordinate(150, 96, 180, 130)) needlesDict.SetScale125("GPTest_FriendRequestButtonInUserDetails", new Coordinate(84, 397, 98, 410)) needlesDict.SetScale125("GPTest_NotFavouriteInDetails", new Coordinate(245, 73, 260, 89)) needlesDict.SetScale125("GPTest_FavouritedInDetails", new Coordinate(244, 73, 262, 88)) @@ -316,6 +319,7 @@ needlesDict.SetScale125("Common_SpeedMod1x", new Coordinate(20, 170, 24, 174)) needlesDict.SetScale125("Pack_ResultAfterOpenPack", new Coordinate(170, 98, 270, 125)) needlesDict.SetScale125("Pack_ReadyForOpenPack", new Coordinate(198, 273, 207, 287)) needlesDict.SetScale125("Friend_AcceptButtonInApproveSubmenu", new Coordinate(225, 195, 250, 215)) +needlesDict.SetScale125("FriendLimit", new Coordinate(215, 260, 235, 280)) needlesDict.SetScale125("GPTest_ReqeustCancelButtonInSearchResult", new Coordinate(188, 243, 221, 274)) needlesDict.SetScale125("Create_TitleBottomBorderInWPSelectCard", new Coordinate(60, 130, 202, 142)) needlesDict.SetScale125("Pack_PackPointButton", new Coordinate(233, 400, 264, 428)) @@ -333,7 +337,8 @@ needlesDict.SetScale125("Friend_RequestButtonInSearchResult", new Coordinate(165 needlesDict.SetScale125("Friend_ReqeustButtonInFriendDetails", new Coordinate(70, 395, 100, 420)) needlesDict.SetScale125("Menu_InventoryIconInMenu", new Coordinate(90, 260, 126, 290)) ; Group reroll rate-limit recovery opens the menu and returns to title. -; Keep the same managed needle names for 100/125; Scale125 images live in Scripts\Scale125. +; Keep managed needle names shared; legacy Scale125 images are only used by +; ResolveNeedlePath() for documented pixel-sensitive fallback exceptions. needlesDict.SetScale125("Menu_GoToTitleButton_Up", new Coordinate(20, 418, 55, 447)) needlesDict.SetScale125("Menu_GoToTitleButton_Down", new Coordinate(20, 458, 60, 488)) needlesDict.SetScale125("Menu_MiscMenuLeftTop", new Coordinate(0, 65, 45, 105)) diff --git a/Scripts/Include/Crinity_UnofficialPatch.ahk b/Scripts/Include/Crinity_UnofficialPatch.ahk index 733eb9bd..765f6cc4 100644 --- a/Scripts/Include/Crinity_UnofficialPatch.ahk +++ b/Scripts/Include/Crinity_UnofficialPatch.ahk @@ -111,6 +111,9 @@ startPreProcess(methodType){ Loop, { skipGenericButtonFallback := false + if(methodType = "Inject Wonderpick 96P+" && DismissFriendFlowBlockingPopup("Entering Social")) + continue + if(FindOrLoseImage(needleName, 0, failSafeTime, , true)) break diff --git a/Scripts/Include/FriendManager.ahk b/Scripts/Include/FriendManager.ahk index d1f6d4e7..f266d6fb 100644 --- a/Scripts/Include/FriendManager.ahk +++ b/Scripts/Include/FriendManager.ahk @@ -36,10 +36,15 @@ AddFriends(renew := false, getFC := false) { return false session.set("friended", true) + if(!getFC) + SetFriendCleanupPending("AddFriends started") session.set("failSafe", A_TickCount) failSafeTime := 0 Loop { + if(DismissFriendFlowBlockingPopup("Waiting for Social")) + continue + adbClick_wbb(143, 518) if(FindOrLoseImage("Common_ActivatedSocialInMainMenu", 0, failSafeTime)) { break @@ -281,8 +286,13 @@ AddFriends(renew := false, getFC := false) { RemoveFriends() { global botConfig, session, interceptProc, DeadCheck + cleanupAccount := session.get("accountFileName") + LogToFile("RemoveFriends start | account=" . cleanupAccount) + LogDebugToFile("RemoveFriends start detail | account=" . cleanupAccount . " | friended=" . session.get("friended") . " | DeadCheck=" . DeadCheck . " | deleteMethod=" . botConfig.get("deleteMethod") . " | useSoloIdsFile=" . botConfig.get("useSoloIdsFile")) + ; Only allow RemoveFriends in Inject Wonderpick 96P+ mode if (botConfig.get("deleteMethod") != "Inject Wonderpick 96P+" && !botConfig.get("useSoloIdsFile")) { + LogToFile("RemoveFriends skipped: unsupported delete method | account=" . cleanupAccount . " | deleteMethod=" . botConfig.get("deleteMethod") . " | useSoloIdsFile=" . botConfig.get("useSoloIdsFile")) session.set("friended", false) return false } @@ -290,17 +300,27 @@ RemoveFriends() { session.set("friendIDs", ReadFile("ids")) if(!session.get("friendIDs") && botConfig.get("FriendID") = "") { - session.set("friended", false) - return false + if(!session.get("friended") && DeadCheck != 1) { + LogToFile("RemoveFriends skipped: no friend IDs and no cleanup pending | account=" . cleanupAccount . " | DeadCheck=" . DeadCheck) + session.set("friended", false) + return false + } + + LogToFile("Friend IDs unavailable during RemoveFriends; continuing because cleanup is pending | account=" . cleanupAccount . " | DeadCheck=" . DeadCheck) + LogToFile("Friend IDs unavailable during RemoveFriends; continuing because cleanup is pending | account=" . cleanupAccount . " | DeadCheck=" . DeadCheck, "GroupReroll.txt") } session.set("packsInPool", 0) ; if friends are removed, clear the pool CreateStatusMessage("Starting friend removal process...",,,, false) + LogDebugToFile("RemoveFriends navigation start | account=" . cleanupAccount) session.set("failSafe", A_TickCount) failSafeTime := 0 Loop { + if(DismissFriendFlowBlockingPopup("Waiting for Social")) + continue + adbClick_wbb(143, 518) if(FindOrLoseImage("Common_ActivatedSocialInMainMenu", 0, failSafeTime)) break @@ -333,6 +353,7 @@ RemoveFriends() { GoToFriendsList(false, true) Delay(2) + LogDebugToFile("RemoveFriends friend list reached | account=" . cleanupAccount) FindImageAndClick("Friend_FriendRequestsSubMenu", 167, 467, , 10) Delay(2) adbClick(167, 472) ; extra click since failing to get into requests sometimes @@ -340,6 +361,9 @@ RemoveFriends() { failSafeTime := 0 interceptProc := true Loop{ + if(DismissFriendFlowBlockingPopup("Waiting for clearAll")) + continue + if (FindOrLoseImage("Friend_ActivatedClearAllButton", 0, failSafeTime)) break adbClick(205, 510) @@ -366,6 +390,9 @@ RemoveFriends() { failSafeTime := 0 accepted := false Loop { + if(DismissFriendFlowBlockingPopup("Waiting for friend details")) + continue + adbClick(58, 190) Delay(1) if(FindOrLoseImage("Friend_AcceptedButtonInFriendDetails", 0, failSafeTime)){ @@ -393,6 +420,9 @@ RemoveFriends() { interceptProc := true isContinue := false Loop, { + if(DismissFriendFlowBlockingPopup("Confirming friend removal")) + continue + adbClick(200, 372) Delay(0.5) if(FindOrLoseImage("Friend_ReqeustButtonInFriendDetails", 0)) @@ -410,6 +440,9 @@ RemoveFriends() { failSafeTime := 0 ; Either find "Add" (expected), or if we accidentally went back too many pages to "Social", go back into friends. Loop { + if(DismissFriendFlowBlockingPopup("Returning to friend list")) + continue + adbClick(143, 507) Sleep, 750 if(FindOrLoseImage("Common_ActivatedSocialInMainMenu", 0, failSafeTime)) { @@ -426,8 +459,11 @@ RemoveFriends() { ; Exit friend removal process CreateStatusMessage("Friend removal completed. Processed " . friendsProcessed . " friends. Returning to main...",,,, false) + LogToFile("RemoveFriends complete | account=" . cleanupAccount . " | processed=" . friendsProcessed . " | DeadCheckBeforeClear=" . DeadCheck) IniWrite, 0, % session.get("scriptIniFile"), UserSettings, DeadCheck + ClearFriendCleanupPending() session.set("friended", false) + LogDebugToFile("RemoveFriends cleanup state cleared | account=" . cleanupAccount . " | processed=" . friendsProcessed) CreateStatusMessage("Friends removed successfully!",,,, false) if(session.get("stopToggle")) { @@ -456,14 +492,14 @@ ReEnterSocial(prevAction){ global interceptProc reEnterStart := A_TickCount Loop { + if(DismissFriendFlowBlockingPopup("Re-entering Social")) + continue + adbClick_wbb(143, 518) reEnterElapsed := (A_TickCount - reEnterStart) // 1000 if(FindOrLoseImage("Common_ActivatedSocialInMainMenu", 0, reEnterElapsed)) { break } - else if(FindOrLoseImage("Common_PopupXButtonInMain", 0, , , true)){ - adbClick_wbb(137, 480) - } Delay(0.25) } @@ -578,6 +614,22 @@ ShouldSkipGenericButtonInSocialWait() { return true } +DismissFriendFlowBlockingPopup(context := "") { + if(!FindOrLoseImage("Common_PopupXButtonInMain", 0, , , true)) + return false + + LogDebugToFile("Dismissed friend flow blocking popup | context=" . context) + + if(context != "") + CreateStatusMessage("Closing popup during friend flow`n" . context,,,, false) + else + CreateStatusMessage("Closing popup during friend flow",,,, false) + + adbClick_wbb(137, 480) + Delay(1) + return true +} + IsSocialHubReadyForFriends() { return FindOrLoseImage("Friend_SocialHubFriendButton", 0, , 20, true) } @@ -589,9 +641,15 @@ GoToFriendsList(isKeepSearch := false, skipTutorialProc := false) { failSafeTime := 0 mainLoopBreak := false Loop { + if(DismissFriendFlowBlockingPopup("Goto friends screen")) + continue + if(FindOrLoseImage("Friend_SearchFriendButton", 0, failSafeTime, , true)) { if(!isKeepSearch){ Loop { + if(DismissFriendFlowBlockingPopup("Leaving friend search")) + continue + if(FindOrLoseImage("Friend_SearchFriendButton", 0, failSafeTime, , true)) { adbInputEvent("111") ;send ESC } diff --git a/Scripts/Include/Logging.ahk b/Scripts/Include/Logging.ahk index 21b07401..c7338ca4 100644 --- a/Scripts/Include/Logging.ahk +++ b/Scripts/Include/Logging.ahk @@ -48,6 +48,12 @@ CreateStatusMessage(Message, GuiName := "StatusMessage", X := 0, Y := 565, debug guiWidth := 260 guiheight := 25 } + + coverHwnd := "" + try { + if (IsObject(session)) + coverHwnd := CaptureMuMuCoverWindow(session.get("winTitle")) + } try { @@ -81,6 +87,7 @@ CreateStatusMessage(Message, GuiName := "StatusMessage", X := 0, Y := 565, debug } SetTextAndResize(hwnds[GuiName], Message) Gui, %GuiName%:Show, NoActivate w%guiWidth% h%guiheight% + RestoreMuMuCoverWindow(coverHwnd) ; Clear any previous timers. SetTimer, % resetStatusFunc, Off @@ -167,6 +174,9 @@ LogToFile(message, logFile := "") { } else logFile := LogsDir . "\" . logFile + if !FileExist(LogsDir) + FileCreateDir, %LogsDir% + RotateLogFileIfNeeded(logFile) FormatTime, readableTime, %A_Now%, MMMM dd, yyyy HH:mm:ss Loop, { @@ -177,6 +187,86 @@ LogToFile(message, logFile := "") { } } +LogDebugToFile(message, logFile := "") { + global Debug + + if (Debug) + LogToFile(message, logFile) +} + +RotateLogFileIfNeeded(logFile) { + static lastCheck := {} + maxBytes := 5 * 1024 * 1024 + checkIntervalMs := 60000 + + if (logFile = "" || !FileExist(logFile)) + return + + last := lastCheck.HasKey(logFile) ? lastCheck[logFile] : 0 + elapsed := A_TickCount - last + if (last && elapsed >= 0 && elapsed < checkIntervalMs) + return + lastCheck[logFile] := A_TickCount + + FileGetSize, fileSize, %logFile% + if (ErrorLevel || fileSize < maxBytes) + return + + SplitPath, logFile, fileName, logDir, ext, nameNoExt + if (logDir = "" || nameNoExt = "") + return + if (ext = "") + ext := "log" + + archiveDir := logDir . "\Archive" + if !FileExist(archiveDir) + FileCreateDir, %archiveDir% + + FormatTime, stamp, %A_Now%, yyyyMMdd_HHmmss + pid := DllCall("GetCurrentProcessId") + archivePath := archiveDir . "\" . nameNoExt . "_" . stamp . "_" . pid . "_" . A_TickCount . "." . ext + FileMove, %logFile%, %archivePath%, 0 + if ErrorLevel + return + + PruneLogArchives(archiveDir, nameNoExt, ext) +} + +PruneLogArchives(archiveDir, nameNoExt, ext) { + keepArchives := 3 + archiveList := "" + archivePattern := archiveDir . "\" . nameNoExt . "_*." . ext + + Loop, Files, %archivePattern%, F + { + FileGetTime, fileTime, %A_LoopFileFullPath%, M + if !ErrorLevel + archiveList .= fileTime . A_Tab . A_LoopFileFullPath . "`n" + } + + if (archiveList = "") + return + + Sort, archiveList, R + archiveCount := 0 + Loop, Parse, archiveList, `n, `r + { + if (A_LoopField = "") + continue + + archiveCount++ + if (archiveCount <= keepArchives) + continue + + tabPos := InStr(A_LoopField, A_Tab) + if (!tabPos) + continue + + oldArchive := SubStr(A_LoopField, tabPos + 1) + FileDelete, %oldArchive% + } +} + LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screenshotFile2 := "", altWebhookURL := "", altUserId := "") { discordPing := "" @@ -196,8 +286,13 @@ LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screen webhookURL := (altWebhookURL ? altWebhookURL : discordWebhookURL) + if (webhookURL = "") { + LogToFile("Discord send skipped: missing webhook URL", "Discord.txt") + return + } + if (webhookURL != "") { - MaxRetries := 10 + MaxRetries := 3 RetryCount := 0 try { RegRead, proxyEnabled, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings, ProxyEnable @@ -206,21 +301,29 @@ LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screen ProxyEnable := false ProxyServer := "" } - if (proxyEnabled) { - curlChar := "curl -k -x " . proxyServer . "/ " + if (proxyEnabled && proxyServer != "") { + curlChar := "curl.exe -k -sS --retry 2 --retry-delay 2 --connect-timeout 10 --max-time 60 -o NUL -w ""HTTP_STATUS:%{http_code}"" -x """ . proxyServer . """ " } else { - curlChar := "curl -k " + curlChar := "curl.exe -k -sS --retry 2 --retry-delay 2 --connect-timeout 10 --max-time 60 -o NUL -w ""HTTP_STATUS:%{http_code}"" " + } + + payloadFile := CreateDiscordPayloadFile(discordPing . message) + if (payloadFile = "") { + LogToFile("Discord send failed before curl: could not create payload file | webhook=" . RedactDiscordWebhookURL(webhookURL), "Discord.txt") + return } + Loop { + RetryCount++ try { ; Base command - curlCommand := curlChar - . "-F ""payload_json={\""content\"":\""" . discordPing . message . "\""};type=application/json;charset=UTF-8"" " + curlCommand := curlChar . "-F ""payload_json=<" . payloadFile . ";type=application/json;charset=UTF-8"" " ; If an screenshot or xml file is provided, send it sendScreenshot1 := screenshotFile != "" && FileExist(screenshotFile) sendScreenshot2 := screenshotFile2 != "" && FileExist(screenshotFile2) sendAccountXml := xmlFile != "" && FileExist(xmlFile) + fileCount := sendScreenshot1 + sendScreenshot2 + sendAccountXml if (sendScreenshot1 + sendScreenshot2 + sendAccountXml > 1) { fileIndex := 0 if (sendScreenshot1) { @@ -245,23 +348,91 @@ LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screen curlCommand := curlCommand . "-F ""file=@" . xmlFile . """ " } ; Add the webhook - curlCommand := curlCommand . webhookURL + curlCommand := curlCommand . """" . webhookURL . """" - LogToFile(curlCommand, "Discord.txt") + LogDebugToFile("Discord send attempt | attempt=" . RetryCount . "/" . MaxRetries . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | files=" . fileCount . " | messageLen=" . StrLen(message), "Discord.txt") ; Send the message using curl - RunWait, %curlCommand%,, Hide - break - } - catch { - RetryCount++ - if (RetryCount >= MaxRetries) { - CreateStatusMessage("Failed to send discord message.") + if (IsFunc("CmdRet")) { + cmdFn := Func("CmdRet") + curlResult := cmdFn.Call(curlCommand) + } else { + RunWait, %curlCommand%,, Hide + curlResult := "HTTP_STATUS:" . ErrorLevel + } + + httpStatus := GetDiscordCurlHttpStatus(curlResult) + if (httpStatus >= 200 && httpStatus < 300) { + LogDebugToFile("Discord send complete | status=" . httpStatus . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | files=" . fileCount . " | messageLen=" . StrLen(message), "Discord.txt") break } - Sleep, 250 + + LogToFile("Discord send failed | attempt=" . RetryCount . "/" . MaxRetries . " | status=" . httpStatus . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | files=" . fileCount . " | result=" . TrimDiscordCurlResult(curlResult), "Discord.txt") + } + catch e { + LogToFile("Discord send exception | attempt=" . RetryCount . "/" . MaxRetries . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | error=" . FormatDiscordException(e), "Discord.txt") + } + + if (RetryCount >= MaxRetries) { + CreateStatusMessage("Failed to send discord message.") + break } - Sleep, 250 + Sleep, % 1000 * RetryCount } + + FileDelete, %payloadFile% + } +} + +CreateDiscordPayloadFile(content) { + payloadJson := "{""content"":""" . DiscordEscapeJson(content) . """}" + payloadFile := A_Temp . "\ptcgpb_discord_payload_" . DllCall("GetCurrentProcessId") . "_" . A_TickCount . ".json" + + FileDelete, %payloadFile% + FileAppend, %payloadJson%, %payloadFile%, UTF-8-RAW + if (ErrorLevel || !FileExist(payloadFile)) + return "" + + return payloadFile +} + +DiscordEscapeJson(text) { + text := StrReplace(text, "\n", "`n") + text := StrReplace(text, Chr(92), Chr(92) . Chr(92)) + text := StrReplace(text, Chr(34), Chr(92) . Chr(34)) + text := StrReplace(text, "`r", "") + text := StrReplace(text, "`n", Chr(92) . "n") + text := StrReplace(text, "`t", Chr(92) . "t") + return text +} + +GetDiscordCurlHttpStatus(curlResult) { + if RegExMatch(curlResult, "HTTP_STATUS:(\d{3})", match) + return match1 + 0 + return 0 +} + +TrimDiscordCurlResult(curlResult) { + curlResult := StrReplace(curlResult, "`r", " ") + curlResult := StrReplace(curlResult, "`n", " ") + curlResult := Trim(curlResult) + + if (StrLen(curlResult) > 500) + curlResult := SubStr(curlResult, 1, 500) . "..." + + return curlResult +} + +RedactDiscordWebhookURL(webhookURL) { + return RegExReplace(webhookURL, "i)(/api/webhooks/[^/]+/)[^?\s]+", "$1") +} + +FormatDiscordException(e) { + if (IsObject(e)) { + if (e.Message != "") + return e.Message + if (e.What != "") + return e.What } + return e } diff --git a/Scripts/Include/Monitor.ahk b/Scripts/Include/Monitor.ahk index 8cbdc700..d64a8fd5 100644 --- a/Scripts/Include/Monitor.ahk +++ b/Scripts/Include/Monitor.ahk @@ -83,6 +83,8 @@ Loop { LogToFile(msg, "Monitor.txt") scriptName := instanceNum . ".ahk" + coverHwnd := CaptureMuMuCoverWindow(instanceNum) + StoreMuMuCoverWindow(instanceNum, coverHwnd) killedAHK := killAHK(scriptName) killedInstance := killInstance(instanceNum) @@ -173,19 +175,9 @@ killAHK(scriptName := "") if(scriptName != "") { DetectHiddenWindows, On - WinGet, IDList, List, ahk_class AutoHotkey - Loop %IDList% - { - ID:=IDList%A_Index% - WinGetTitle, ATitle, ahk_id %ID% - if InStr(ATitle, "\" . scriptName) { - ; Use Process Close (TerminateProcess) instead of WinKill (WM_CLOSE) - ; to guarantee the process dies even if blocked on ADB/Sleep - WinGet, ahkPID, PID, ahk_id %ID% - Process, Close, %ahkPID% - killed := killed + 1 - } - } + killedPIDs := {} + killed += killAHKWindowsByClass(scriptName, "AutoHotkey", killedPIDs) + killed += killAHKWindowsByClass(scriptName, "#32770", killedPIDs) } return killed @@ -197,18 +189,60 @@ checkAHK(scriptName := "") if(scriptName != "") { DetectHiddenWindows, On - WinGet, IDList, List, ahk_class AutoHotkey - Loop %IDList% - { - ID:=IDList%A_Index% - WinGetTitle, ATitle, ahk_id %ID% - if InStr(ATitle, "\" . scriptName) { + seenPIDs := {} + cnt += countAHKWindowsByClass(scriptName, "AutoHotkey", seenPIDs) + cnt += countAHKWindowsByClass(scriptName, "#32770", seenPIDs) + } + + return cnt +} + +killAHKWindowsByClass(scriptName, winClass, killedPIDs) +{ + killed := 0 + WinGet, IDList, List, ahk_class %winClass% + Loop %IDList% + { + ID := IDList%A_Index% + WinGetTitle, ATitle, ahk_id %ID% + if (isAHKScriptWindowTitle(ATitle, scriptName)) { + ; Use Process Close (TerminateProcess) instead of WinKill (WM_CLOSE) + ; to guarantee the process dies even if blocked on ADB/Sleep. + WinGet, ahkPID, PID, ahk_id %ID% + if (ahkPID && !killedPIDs.HasKey(ahkPID)) { + Process, Close, %ahkPID% + killedPIDs[ahkPID] := true + killed := killed + 1 + } + } + } + + return killed +} + +countAHKWindowsByClass(scriptName, winClass, seenPIDs) +{ + cnt := 0 + WinGet, IDList, List, ahk_class %winClass% + Loop %IDList% + { + ID := IDList%A_Index% + WinGetTitle, ATitle, ahk_id %ID% + if (isAHKScriptWindowTitle(ATitle, scriptName)) { + WinGet, ahkPID, PID, ahk_id %ID% + if (ahkPID && !seenPIDs.HasKey(ahkPID)) { + seenPIDs[ahkPID] := true cnt := cnt + 1 } } } - + return cnt } -~+F7::ExitApp \ No newline at end of file +isAHKScriptWindowTitle(ATitle, scriptName) +{ + return (InStr(ATitle, "\" . scriptName) || ATitle = scriptName) +} + +~+F7::ExitApp diff --git a/Scripts/Include/MonitorOnce.ahk b/Scripts/Include/MonitorOnce.ahk index 4d761780..8ffcd0e9 100644 --- a/Scripts/Include/MonitorOnce.ahk +++ b/Scripts/Include/MonitorOnce.ahk @@ -39,6 +39,8 @@ Loop %Instances% { LogToFile(msg, "Monitor.txt") scriptName := instanceNum . ".ahk" + coverHwnd := CaptureMuMuCoverWindow(instanceNum) + StoreMuMuCoverWindow(instanceNum, coverHwnd) killedAHK := killAHK(scriptName) killedInstance := killInstance(instanceNum) @@ -61,7 +63,7 @@ Loop %Instances% { ;Command := "Scripts\" . scriptName ;Run, %Command% scriptPath := A_ScriptDir "\.." "\" scriptName - Run, "%A_AhkPath%" /restart "%scriptPath% + Run, "%A_AhkPath%" /restart "%scriptPath%" } } } @@ -74,18 +76,9 @@ killAHK(scriptName := "") if(scriptName != "") { DetectHiddenWindows, On - WinGet, IDList, List, ahk_class AutoHotkey - Loop %IDList% - { - ID:=IDList%A_Index% - WinGetTitle, ATitle, ahk_id %ID% - if InStr(ATitle, "\" . scriptName) { - ; MsgBox, Killing: %ATitle% - WinKill, ahk_id %ID% ;kill - ; WinClose, %fullScriptPath% ahk_class AutoHotkey - killed := killed + 1 - } - } + killedPIDs := {} + killed += killAHKWindowsByClass(scriptName, "AutoHotkey", killedPIDs) + killed += killAHKWindowsByClass(scriptName, "#32770", killedPIDs) } return killed @@ -97,58 +90,58 @@ checkAHK(scriptName := "") if(scriptName != "") { DetectHiddenWindows, On - WinGet, IDList, List, ahk_class AutoHotkey - Loop %IDList% - { - ID:=IDList%A_Index% - WinGetTitle, ATitle, ahk_id %ID% - if InStr(ATitle, "\" . scriptName) { - cnt := cnt + 1 - } - } + seenPIDs := {} + cnt += countAHKWindowsByClass(scriptName, "AutoHotkey", seenPIDs) + cnt += countAHKWindowsByClass(scriptName, "#32770", seenPIDs) } - + return cnt } -killInstance(instanceNum := "") +killAHKWindowsByClass(scriptName, winClass, killedPIDs) { killed := 0 - - pID := checkInstance(instanceNum) - if pID { - Process, Close, %pID% - killed := killed + 1 + WinGet, IDList, List, ahk_class %winClass% + Loop %IDList% + { + ID := IDList%A_Index% + WinGetTitle, ATitle, ahk_id %ID% + if (isAHKScriptWindowTitle(ATitle, scriptName)) { + WinGet, ahkPID, PID, ahk_id %ID% + if (ahkPID && !killedPIDs.HasKey(ahkPID)) { + Process, Close, %ahkPID% + killedPIDs[ahkPID] := true + killed := killed + 1 + } + } } - + return killed } -checkInstance(instanceNum := "") +countAHKWindowsByClass(scriptName, winClass, seenPIDs) { - ret := WinExist(instanceNum) - if(ret) + cnt := 0 + WinGet, IDList, List, ahk_class %winClass% + Loop %IDList% { - WinGet, temp_pid, PID, ahk_id %ret% - return temp_pid + ID := IDList%A_Index% + WinGetTitle, ATitle, ahk_id %ID% + if (isAHKScriptWindowTitle(ATitle, scriptName)) { + WinGet, ahkPID, PID, ahk_id %ID% + if (ahkPID && !seenPIDs.HasKey(ahkPID)) { + seenPIDs[ahkPID] := true + cnt := cnt + 1 + } + } } - - return "" + + return cnt } -launchInstance(instanceNum := "") +isAHKScriptWindowTitle(ATitle, scriptName) { - global mumuFolder - - if(instanceNum != "") { - mumuNum := getMumuInstanceNum(instanceNum, mumuFolder) - if(mumuNum != "") { - mumuExe := mumuFolder . "\shell\MuMuPlayer.exe" - if !FileExist(mumuExe) - mumuExe := mumuFolder . "\nx_main\MuMuNxMain.exe" - Run_(mumuExe, "-v " . mumuNum) - } - } + return (InStr(ATitle, "\" . scriptName) || ATitle = scriptName) } ~+F7::ExitApp diff --git a/Scripts/Include/ResetLists.ahk b/Scripts/Include/ResetLists.ahk index dae38889..b7471a88 100644 --- a/Scripts/Include/ResetLists.ahk +++ b/Scripts/Include/ResetLists.ahk @@ -15,12 +15,78 @@ if (!FileExist(logsDir)) { ; Custom logging function for ResetLists (self-contained) LogToResetListFile(message) { global resetListLogFile + RotateResetListLogIfNeeded(resetListLogFile) timestamp := A_Now FormatTime, formattedTime, %timestamp%, yyyy-MM-dd HH:mm:ss logEntry := formattedTime . " - " . message . "`n" FileAppend, %logEntry%, %resetListLogFile% } +RotateResetListLogIfNeeded(logFile) { + maxBytes := 5 * 1024 * 1024 + + if (logFile = "" || !FileExist(logFile)) + return + + FileGetSize, fileSize, %logFile% + if (ErrorLevel || fileSize < maxBytes) + return + + SplitPath, logFile, fileName, logDir, ext, nameNoExt + if (logDir = "" || nameNoExt = "") + return + if (ext = "") + ext := "log" + + archiveDir := logDir . "\Archive" + if !FileExist(archiveDir) + FileCreateDir, %archiveDir% + + FormatTime, stamp, %A_Now%, yyyyMMdd_HHmmss + pid := DllCall("GetCurrentProcessId") + archivePath := archiveDir . "\" . nameNoExt . "_" . stamp . "_" . pid . "_" . A_TickCount . "." . ext + FileMove, %logFile%, %archivePath%, 0 + if ErrorLevel + return + + PruneResetListLogArchives(archiveDir, nameNoExt, ext) +} + +PruneResetListLogArchives(archiveDir, nameNoExt, ext) { + keepArchives := 3 + archiveList := "" + archivePattern := archiveDir . "\" . nameNoExt . "_*." . ext + + Loop, Files, %archivePattern%, F + { + FileGetTime, fileTime, %A_LoopFileFullPath%, M + if !ErrorLevel + archiveList .= fileTime . A_Tab . A_LoopFileFullPath . "`n" + } + + if (archiveList = "") + return + + Sort, archiveList, R + archiveCount := 0 + Loop, Parse, archiveList, `n, `r + { + if (A_LoopField = "") + continue + + archiveCount++ + if (archiveCount <= keepArchives) + continue + + tabPos := InStr(A_LoopField, A_Tab) + if (!tabPos) + continue + + oldArchive := SubStr(A_LoopField, tabPos + 1) + FileDelete, %oldArchive% + } +} + ; Log script start LogToResetListFile("ResetLists.ahk started - Beginning cleanup session") @@ -230,4 +296,4 @@ if (remainingFiles = 0) { LogToResetListFile("ResetLists.ahk completed") -ExitApp \ No newline at end of file +ExitApp diff --git a/Scripts/Include/Utils.ahk b/Scripts/Include/Utils.ahk index f48d7d08..707f2736 100644 --- a/Scripts/Include/Utils.ahk +++ b/Scripts/Include/Utils.ahk @@ -317,18 +317,64 @@ CompareIndicesByPacksDesc(packs, a, b) { ;------------------------------------------------------------------------------- ; SafeReload - Restart the script without race conditions ;------------------------------------------------------------------------------- -; Launches a new instance then immediately kills the current process. -; Unlike Reload (which keeps the old process alive and relies on the NEW -; instance to close it via WM_CLOSE), this has the OLD process kill itself. -; ExitApp terminates in microseconds; the new AHK process takes hundreds of -; milliseconds to load and reach #SingleInstance - so the old process is -; long dead before any conflict can occur. +; Use AutoHotkey's built-in Reload path so the current process coordinates +; shutdown before the replacement instance reaches #SingleInstance. +; Launching a new process before ExitApp can race with OnExit/ADB cleanup and +; trigger "older instance already running" prompts. SafeReload() { - ;Run, "%A_AhkPath%" "%A_ScriptFullPath%" - ;ExitApp Reload } +LogUtilityMessage(message) { + if (IsFunc("LogToFile")) { + logFn := Func("LogToFile") + logFn.Call(message) + return + } + + logDir := A_ScriptDir . "\..\Logs" + if (!FileExist(logDir) && FileExist(A_ScriptDir . "\..\..\Logs")) + logDir := A_ScriptDir . "\..\..\Logs" + if (!FileExist(logDir)) + FileCreateDir, %logDir% + + logFile := logDir . "\Utility.txt" + FormatTime, now,, yyyy-MM-dd HH:mm:ss + FileAppend, % "[" . now . "] " . message . "`n", %logFile% +} + +GetSearchNeedleObj(needleName, caller := "") { + global needlesDict, session + static loggedNeedles := {} + + scriptName := A_ScriptName + if (IsObject(session)) { + sessionScriptName := session.get("scriptName") + if (sessionScriptName != "") + scriptName := sessionScriptName + } + + logKey := scriptName . "|" . caller . "|" . needleName + if (!IsObject(needlesDict) || !needlesDict.needles.HasKey(needleName)) { + if (!loggedNeedles.HasKey(logKey)) { + LogUtilityMessage("Missing needle definition: " . needleName . " in " . caller) + loggedNeedles[logKey] := true + } + return "" + } + + needleObj := needlesDict.Get(needleName) + if (!IsObject(needleObj) || needleObj.imageName = "" || !IsObject(needleObj.coords) || !needleObj.coords.isValid) { + if (!loggedNeedles.HasKey(logKey)) { + LogUtilityMessage("Invalid needle definition: " . needleName . " in " . caller) + loggedNeedles[logKey] := true + } + return "" + } + + return needleObj +} + ;------------------------------------------------------------------------------- ; getMumuInstanceNum - Get MuMu instance number from player name ;------------------------------------------------------------------------------- @@ -413,6 +459,140 @@ InitializeHiddenConsole() { DllCall("SetForegroundWindow", "Ptr", previousHwnd) } +GetScriptIniPathByName(scriptName) { + scriptName := StrReplace(scriptName, ".ahk") + if (RegExMatch(A_ScriptDir, "i)\\Include$")) + return A_ScriptDir . "\..\" . scriptName . ".ini" + return A_ScriptDir . "\" . scriptName . ".ini" +} + +GetWindowRect(hwnd) { + if (!hwnd || !DllCall("IsWindow", "Ptr", hwnd)) + return "" + + VarSetCapacity(rect, 16, 0) + if (!DllCall("GetWindowRect", "Ptr", hwnd, "Ptr", &rect)) + return "" + + return {left: NumGet(rect, 0, "Int") + , top: NumGet(rect, 4, "Int") + , right: NumGet(rect, 8, "Int") + , bottom: NumGet(rect, 12, "Int")} +} + +RectsOverlap(rectA, rectB, minArea := 1024) { + if (!IsObject(rectA) || !IsObject(rectB)) + return false + + left := (rectA.left > rectB.left) ? rectA.left : rectB.left + top := (rectA.top > rectB.top) ? rectA.top : rectB.top + right := (rectA.right < rectB.right) ? rectA.right : rectB.right + bottom := (rectA.bottom < rectB.bottom) ? rectA.bottom : rectB.bottom + + overlapW := right - left + overlapH := bottom - top + return (overlapW > 0 && overlapH > 0 && (overlapW * overlapH) >= minArea) +} + +IsIgnoredCoverWindow(hwnd, targetHwnd) { + if (!hwnd || hwnd = targetHwnd) + return true + + if (!DllCall("IsWindow", "Ptr", hwnd) || !DllCall("IsWindowVisible", "Ptr", hwnd)) + return true + + if (DllCall("IsIconic", "Ptr", hwnd)) + return true + + WinGetClass, winClass, ahk_id %hwnd% + if (winClass = "Qt5156QWindowIcon" || winClass = "AutoHotkey" || winClass = "AutoHotkeyGUI" || winClass = "#32770") + return true + + if (winClass = "Progman" || winClass = "WorkerW" || winClass = "Shell_TrayWnd" || winClass = "Button") + return true + + WinGet, style, Style, ahk_id %hwnd% + if (!(style & 0x10000000)) + return true + + WinGet, exStyle, ExStyle, ahk_id %hwnd% + if (exStyle & 0x80) + return true + + return false +} + +CaptureMuMuCoverWindow(winTitle) { + targetHwnd := WinExist(winTitle . " ahk_class Qt5156QWindowIcon") + if (!targetHwnd) + return "" + + targetRect := GetWindowRect(targetHwnd) + if (!IsObject(targetRect)) + return "" + + WinGet, IDList, List + Loop %IDList% + { + hwnd := IDList%A_Index% + if (hwnd = targetHwnd) + break + + if (IsIgnoredCoverWindow(hwnd, targetHwnd)) + continue + + coverRect := GetWindowRect(hwnd) + if (RectsOverlap(targetRect, coverRect)) + return hwnd + } + + return "" +} + +StoreMuMuCoverWindow(winTitle, coverHwnd := "") { + iniFile := GetScriptIniPathByName(winTitle) + if (coverHwnd && DllCall("IsWindow", "Ptr", coverHwnd)) + IniWrite, %coverHwnd%, %iniFile%, WindowState, coverHwnd + else + IniDelete, %iniFile%, WindowState, coverHwnd +} + +GetStoredMuMuCoverWindow(winTitle) { + iniFile := GetScriptIniPathByName(winTitle) + IniRead, coverHwnd, %iniFile%, WindowState, coverHwnd, + if (coverHwnd && DllCall("IsWindow", "Ptr", coverHwnd)) + return coverHwnd + return "" +} + +ClearStoredMuMuCoverWindow(winTitle) { + iniFile := GetScriptIniPathByName(winTitle) + IniDelete, %iniFile%, WindowState, coverHwnd +} + +GetMuMuCoverWindowForMaintenance(winTitle) { + coverHwnd := GetStoredMuMuCoverWindow(winTitle) + if (coverHwnd) + return coverHwnd + + return CaptureMuMuCoverWindow(winTitle) +} + +RestoreMuMuCoverWindow(coverHwnd, winTitle := "") { + if (winTitle != "") + ClearStoredMuMuCoverWindow(winTitle) + + if (!coverHwnd || !DllCall("IsWindow", "Ptr", coverHwnd) || !DllCall("IsWindowVisible", "Ptr", coverHwnd)) + return false + + if (DllCall("IsIconic", "Ptr", coverHwnd)) + return false + + ; Raise the previous covering window back above MuMu without stealing focus. + return DllCall("SetWindowPos", "Ptr", coverHwnd, "Ptr", 0 + , "Int", 0, "Int", 0, "Int", 0, "Int", 0, "UInt", 0x53) +} + CmdRet(sCmd, callBackFuncObj := "", encoding := "") { static HANDLE_FLAG_INHERIT := 0x00000001, flags := HANDLE_FLAG_INHERIT , STARTF_USESTDHANDLES := 0x100, CREATE_NO_WINDOW := 0x08000000 @@ -470,6 +650,8 @@ SerializeArray(arr) { restartInstance(){ global session + coverHwnd := CaptureMuMuCoverWindow(session.get("scriptName")) + StoreMuMuCoverWindow(session.get("scriptName"), coverHwnd) killInstance(session.get("scriptName")) Sleep, 2000 launchInstance(session.get("scriptName")) @@ -761,6 +943,10 @@ AppendGPlog(message) { SplitPath, logPath,, logDir if !FileExist(logDir) FileCreateDir, %logDir% + if (IsFunc("RotateLogFileIfNeeded")) { + rotateFn := Func("RotateLogFileIfNeeded") + rotateFn.Call(logPath) + } FormatTime, readableTime, %A_Now%, MMMM dd, yyyy HH:mm:ss Loop, { FileAppend, % "[" readableTime "] " message "`n", %logPath% @@ -1106,6 +1292,9 @@ ResolveNeedlePath(path) { if (GetConfiguredDisplayScale() != 125) return path + if (!IsScale125NeedleFallbackAllowed(path)) + return path + scale125Path := StrReplace(path, "\Needles\", "\Scale125\") if (scale125Path != path && FileExist(scale125Path)) return scale125Path @@ -1113,6 +1302,50 @@ ResolveNeedlePath(path) { return path } +IsScale125NeedleFallbackAllowed(path) { + SplitPath, path, fileName + + if (fileName = "") + return false + + if (IsScale125RarityNeedle(fileName)) + return true + + static allowedUiNeedles := "" + if (!IsObject(allowedUiNeedles)) { + allowedUiNeedles := {} + ; Shared Needles are the default. These are legacy pixel-sensitive + ; Scale 125 UI fallbacks that differ from the shared asset set. + for _, allowedName in ["Account.png" + , "CloseAlertWindow.png" + , "Error.png" + , "Friend2.png" + , "FriendSearchButton.png" + , "GoToTitle.png" + , "HardwareReqs.png" + , "Hourglass1.png" + , "InSubMenu.png" + , "Mission_dino2.png" + , "noWPenergy.png" + , "OK2.png" + , "One.png" + , "Settings.png" + , "speedmodMenu.png" + , "SwipeUp.png" + , "Three.png" + , "Two.png" + , "WonderPickRaminItems.png"] { + allowedUiNeedles[allowedName] := true + } + } + + return allowedUiNeedles.HasKey(fileName) +} + +IsScale125RarityNeedle(fileName) { + return RegExMatch(fileName, "i)^(1star|3diamond|crown|gimmighoul|immersive|normal|rainbow|shiny1star|ShinyEx_ex_|trainer)\d+\.png$") +} + GetScaleProfileValue(scale100Value, scale125Value) { return (GetConfiguredDisplayScale() = 125) ? scale125Value : scale100Value } diff --git a/Scripts/Main.ahk b/Scripts/Main.ahk index 11b1142c..80e375fa 100644 --- a/Scripts/Main.ahk +++ b/Scripts/Main.ahk @@ -1,4 +1,4 @@ -#SingleInstance on +#SingleInstance, Force SetMouseDelay, -1 SetDefaultMouseSpeed, 0 SetBatchLines, -1 @@ -74,7 +74,8 @@ session.set("vipListTrimMode", (!botConfig.get("vipListTrimMode")) ? "bottom" : session.set("vipListTrimCount", (!botConfig.get("vipListTrimCount")) ? 60 : botConfig.get("vipListTrimCount")) (session.get("vipListTrimCount") = "" || session.get("vipListTrimCount") < 1) ? session.set("vipListTrimCount", 60) -DirectlyPositionWindow() +windowCoverHwnd := GetMuMuCoverWindowForMaintenance(session.get("winTitle")) +DirectlyPositionWindow(windowCoverHwnd) Sleep, 1000 setADBBaseInfo() @@ -85,7 +86,7 @@ Sleep, 1000 CreateStatusMessage("Disabling background services...") DisableBackgroundServices() -resetWindows() +resetWindows(windowCoverHwnd) MaxRetries := 10 RetryCount := 0 Loop { @@ -109,6 +110,7 @@ Loop { DllCall("SetWindowPos", "Ptr", WinExist(), "Ptr", 1 ; HWND_BOTTOM , "Int", 0, "Int", 0, "Int", 0, "Int", 0, "UInt", 0x13) ; SWP_NOSIZE, SWP_NOMOVE, SWP_NOACTIVATE Gui, ToolBar:Show, NoActivate x%x4% y%y4% w275 h30 + RestoreMuMuCoverWindow(windowCoverHwnd, session.get("winTitle")) break } catch { @@ -200,33 +202,10 @@ Loop { Delay(1) clickButton := FindOrLoseImage("Common_ColorChangeButton", 0, failSafeTime, 80) requestAlreadyClosed := FindOrLoseImage("Friend_RequestAlreadyClosedInApproveSubmenu", 0, failSafeTime) - if(FindOrLoseImage("Friend_FriendList99", 0, failSafeTime)) { + if(FindOrLoseImage("FriendLimit", 0, failSafeTime)) { done := true break } - else if(FindOrLoseImage("Friend_AcceptButtonInApproveSubmenu", 0, failSafeTime)) { - if (session.get("GPTest")) - break - Loop{ - if FindOrLoseImage("Friend_StuckMessageBackground", 0, failSafeTime){ - Delay(2) - }else{ - adbClick(237, 202) - Delay(1) - if FindOrLoseImage("Friend_StuckMessageBackground", 0, failSafeTime){ - Loop{ - if FindOrLoseImage("Friend_StuckMessageBackground", 1, failSafeTime){ - break - }else{ - Delay(1) - } - } - FindImageAndClick("Friend_StuckMessageBackground", 202, 202, , 1000) - } - break - } - } - } else if(FindOrLoseImage("Common_Error", 0, failSafeTime)) { ; Handle communication error CreateStatusMessage("Error message detected. Clicking retry...",,,, false) @@ -294,7 +273,10 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation global session, needlesDict static lastStatusTime := 0 - needleObj := needlesDict.Get(needleName) + needleObj := GetSearchNeedleObj(needleName, "FindOrLoseImage") + if (!IsObject(needleObj)) + return false + imageName := needleObj.imageName imagePath := A_ScriptDir . "\Needles\" @@ -345,7 +327,10 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVariation := 20, sleepTime := "", skip := false, safeTime := 0) { global botConfig, session, needlesDict - needleObj := needlesDict.Get(needleName) + needleObj := GetSearchNeedleObj(needleName, "FindImageAndClick") + if (!IsObject(needleObj)) + return false + imageName := needleObj.imageName if (sleepTime = "") { @@ -440,8 +425,8 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria return confirmed } -resetWindows(){ - global botConfig +resetWindows(coverHwnd := ""){ + global botConfig, session windowMetrics := GetMumuWindowMetrics() scaleParam := windowMetrics.scaleParam @@ -453,6 +438,8 @@ resetWindows(){ SelectedMonitorIndex := RegExReplace(botConfig.get("SelectedMonitorIndex"), ":.*$") SysGet, Monitor, Monitor, %SelectedMonitorIndex% Title := session.get("winTitle") + if (!coverHwnd) + coverHwnd := GetMuMuCoverWindowForMaintenance(Title) instanceIndex := StrReplace(Title, "Main", "") if (instanceIndex = "") @@ -469,6 +456,7 @@ resetWindows(){ WinMove, %Title%, , %x%, %y%, %scaleParam%, %rowHeight% WinSet, Style, +0xC00000, %Title% WinSet, Redraw, , %Title% + RestoreMuMuCoverWindow(coverHwnd, Title) break } catch { @@ -486,6 +474,9 @@ resetWindows(){ restartGameInstance(reason, RL := true){ global botConfig, session + if (InStr(reason, "Stuck at ")) + SaveStuckScreenshot(reason) + if(botConfig.get("heartBeatOwnerWebHookURL") != "") LogToDiscord(A_ScriptName . " instance has begin restart. Please verify that GodPack has not disappeared upon entering the main screen.\nReasion: " . reason,, true,,, botConfig.get("heartBeatOwnerWebHookURL")) @@ -508,6 +499,30 @@ restartGameInstance(reason, RL := true){ } } +SaveStuckScreenshot(reason) { + global session + + fileDir := A_ScriptDir . "\..\Screenshots\Stuck" + if !FileExist(fileDir) + FileCreateDir, %fileDir% + + safeReason := RegExReplace(reason, "[\\/:*?""<>|]", "_") + safeReason := RegExReplace(safeReason, "\s+", "_") + safeReason := SubStr(safeReason, 1, 80) + filePath := fileDir . "\" . A_Now . "_inst" . session.get("scriptName") . "_" . safeReason . ".png" + + hWnd := getMuMuHwnd(session.get("winTitle")) + if (!hWnd) + return + + pBitmap := from_window(hWnd) + if (pBitmap) { + Gdip_SaveBitmapToFile(pBitmap, filePath) + Gdip_DisposeImage(pBitmap) + LogToFile("Saved stuck screenshot: " . filePath) + } +} + ControlClick(X, Y) { global session @@ -1992,7 +2007,7 @@ Gdip_ImageSearchProfile_wbb(pBitmapHaystack, pNeedle, ByRef OutputList="" , SearchDirection, Instances, LineDelim, CoordDelim) } -DirectlyPositionWindow() { +DirectlyPositionWindow(coverHwnd := "") { global botConfig, session windowMetrics := GetMumuWindowMetrics() @@ -2005,6 +2020,8 @@ DirectlyPositionWindow() { ; Calculate position based on instance number Title := session.get("winTitle") + if (!coverHwnd) + coverHwnd := GetMuMuCoverWindowForMaintenance(Title) instanceIndex := StrReplace(Title, "Main", "") if (instanceIndex = "") @@ -2025,6 +2042,7 @@ DirectlyPositionWindow() { WinSet, Redraw, , %Title% CreateStatusMessage("Positioned window at x:" . x . " y:" . y,,,, false) + RestoreMuMuCoverWindow(coverHwnd, Title) return true } diff --git a/Scripts/Needles/FriendLimit.png b/Scripts/Needles/FriendLimit.png new file mode 100644 index 0000000000000000000000000000000000000000..861fd5c3272f281a780f6f66030f112d1b6202bc GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)Q!3HEdXMMW?q!^2X+?^QKos)S9a~60+7BevL9R^{>SUjLtdK*S}1OXaZf dtN)J=F(|0{^&bwipAS^X;OXk;vd$@?2>`O`Ch`CP literal 0 HcmV?d00001 diff --git a/Scripts/Scale125/MissionDeck.png b/Scripts/Needles/MissionDeck.png similarity index 100% rename from Scripts/Scale125/MissionDeck.png rename to Scripts/Needles/MissionDeck.png diff --git a/Scripts/Scale125/Update.png b/Scripts/Needles/Update.png similarity index 100% rename from Scripts/Scale125/Update.png rename to Scripts/Needles/Update.png diff --git a/Scripts/Scale125/1solobattlemission.png b/Scripts/Scale125/1solobattlemission.png deleted file mode 100644 index eba150b5c8ae37026fa6ab26725ee0d03c266639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1557 zcmV+w2I~2VP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1*%CzK~z{rwU|px z9aR{|yDr!V6f9JMs?o&K8WY?YBWhw@ndri3>c)koAO&%un$nt;Mc9{q$7`4Re5kG6u{%s_t^&<|?$9z6JX5w1gZ1{e`pQqtQGLLSYS&LGr zBvkqImR^{)Ie)QrPO%jCv)Pzv{W~*00^@fQc?K2@vHGg%%_E5)SQIi0BFa1{xMHnH zA^700m~AWjwnG%vmW%DjK-9jl97KGIMWPg3Ha&g2rZb!=LAbSynQ|Ee55Rkv1#^;b zJ7$n-!^QUeW4LYG$IVa_W6r$eP$*U;6NVsOm@~{u<`70E3FA7onh}XvB zVr1#Acm=;|pDYTusX5b8js1iC+OQ|lvn|S?x0d?JJc`m8LGgn~#0*&Ckn@Iq!0EDy zije!k+5yu=?W@O3B41k+r%lcmgz77axb2cCYm{6KP97rXq8yz!FgO~hL%%6H98rkw z1w(AUB=x6(i|x6cjLWftvK5;u`L$!l(ld!db#XkRVIq&B97N)E7cCD*F+*gVu_Z%1 zgc+mS>EL2}Aquz2v4XG-%a;6PQP%Y(+L*kGvTr6P*7sQ+PDc%~fIgWC2=myG>9Zx| z_P4OlkUfdQZE7rC9WvXTcn2g=*7tgIQy#X@SQND|=EJF&DC)I5(2~*F&f+pvgMwvS zdZu=MZoHNdr4OQTTQ&BBFqAlc2XHr{+6O3Bk2f#n;jsl4MIDe1va1`5i=sb}NP>#c z*%R|Pj-SKyCOi72XKH6(7Ud!h#A(ZvLyjne6zf7FC)4<68d18iS$57DVn3F`C(|+U zE(&{dG%jAkF8%@ve-_7C4K}LB!GlnFbB`s8FQkTwkcH6kC34Bn>`TSca|B}5L+}TX zFB6_Z%@a8GDHhdJ+>J|}RAVDzvjAFAHgsDedxXo#A`O^?2@d=29y7K536dg)fkfHx zyNUS8dYjUTQu3Q6f+Ny0nt>?nyRs;$(2K#4C?)5y*GS`N!b;$Ntth4EEs+`#nkk$# z`r=c=zD>BI>-xjt7p3%^iTKHJHH{=ii9!_jZ--UKW(`qx4#qYpE+7?nvyWoRKS^sC z`^?L@DH1pD=n7pKj@g_OQM?S{G%P&}QQR?FqWP*`6lN7Ues>e!Drba`^0PvmzzuZ< zZ+`}Zon1EYL8nii4VicVX!$)L?^}%fr$kIEP$pt{_p$yDT?{oo84TMfOodA?7jg-MF-s zpF{wKS{!GpeJGVnTYelJq(fvP%rv={^YOqY%i+zk@R-l&mv4qC)xv#SeLj>Ev;p=g+ z75j-=`;p1yX{r^aq7%jBn1?aATHFWr;^r7+bH0I-?HSnXVr9i~f6OOv`p9=Jy(mAy zIFIb?HSM>iCRUli?5Kln)p32CTu_PF`|U6BWM2L9`4PsT3Qn!qfI4uA>%jENh9j7^ zJMcBivA?nZqvlPViqYFKaco8(mv|b>f#Zf{k7mjHMKQ$x&k#jpo-nNa00000NkvXX Hu0mjfpV;!< diff --git a/Scripts/Scale125/1star6card4.png b/Scripts/Scale125/1star6card4.png deleted file mode 100644 index c9565f94608758d16c116635f31e818a56026815..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmV<90UZ8`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0eDG7K~yMH9mD-= z5&;~*;r*pi1nS+?ZJwuhyE}F2?6h`=t46R`i#EmmvV!);hO}NtszHTC=GGE|Afkdr z&C~mSf*yD#)=n(E$9dd+8(UwbT5Qtnud=;)PWxDRbS69tgqNYvekZgvp{@%xLs%#a zOO|jaEi9WujM@!S_8k88S+=%KR`2R436<{q9PYJg(#8}{QRm8n#lt<9arl67*kLsO z$}kx6?MsVp_a^HNn`~A=RWA{VT%`DCKw%tE4nyWcA$Qy-rYI;eg-JC|GCoE6;0V3G zOvWrQal5Bcd#+(ueahAvE8Z*af7qe(RCxPQIQl7c0^!9-C}o6-Cfqv|HhUo}Pfqb$ z2h3I5l=NR@ixp-|Id=CQtU`*KukregLoljfPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0eDG7K~yMH1;Oo4 z5&;~*asN^4MKcaL@aT?%i-Yb?B)Mb*R2K9!oW|zUo3fo-Yvp3=!AADV)f;-4DV5Hx zB?$NX_W4XKc5^I!ws32=aWZ$Q*0$JqvB&d3c-a?T4TN_?;e9AuiA5vrch zNC_=NSSY^1Ecj?Q9ah^GJI^eNC5@by;Kz}RW~ijIN!(%@zh-mXzsES-WgLEBFdT4x ze!|h$M|3)6D%BLG86l!vMO`l7UH--iN6dvnArum|3W}njM5l?xRN`?Bqx&7hp2f&i zn5YjGyp>znvx}7MP1YVB68zkxyDuDk6ZZcKZ$n}4MDTA2zAJ2h5!OFl&rRQ~rp}!+ow#|8smK+ku1}(vD#><>`O%2E;U%iB6P=Er#-b$DINFRxay7t8S(xcI Z{{a-eHe%-L_}l;h002ovPDHLkV1gyb*Y^Mb diff --git a/Scripts/Scale125/3diamond6card4.png b/Scripts/Scale125/3diamond6card4.png deleted file mode 100644 index b0e29476c3394a379d6ec886d390d22bbb6696eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmVGph0#HK? moETpDo_|)Tdf+d>fBOU2KscZ37&}V<0000dS4*` diff --git a/Scripts/Scale125/3diamond6card5.png b/Scripts/Scale125/3diamond6card5.png deleted file mode 100644 index 199882f77c13584d22230322c1eb679a1df6163a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^(m>3_!3HE(@-7EajKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTONLwjaOL`j6Nk5zJhu3lnFep0GlMQ#C5H3Nf< zeMLcHa&~HoLQ-maW}dD3``!E16*5z7)x%AF4SWlnQ!_F>s)|yBtNcQetFn_VQ`GJ4 zc)4sUtbiuurj{fsROII56ON0GHI_ zN%^HEwo0X?nJHFjiD{-uDJiD9Nr}cOx`u`+iMoj?#)i5n#>Oe;riK zGN53Bhi+;fFi6XRVW%@?1~)L=S9!WPhDe079(43#DwH_(@c!?*;1dl2YjchD&aBP7 z9On3Tub28q4%WE})8&*UTNf>G73Wy`|IGEzFJ8YiJpH2SdZ~Bp;j>H9Yt-vDCw{d_ z_qTz}BrK4u^=U051 P3Q8`Xu6{1-oD!Mc)gzw1lRH0T+8Xkxhkdj@Ci SqEbPiJcFmJpUXO@geCy5T_G|6 diff --git a/Scripts/Scale125/99cn.png b/Scripts/Scale125/99cn.png deleted file mode 100644 index fdaf52d43883fa7197b6b89d9d5084a72017d50c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP)rK6W-Xh=RX= z|91CGiVP2ym6Q4M<;&kc|9JU%S(uss|NsB>>(`$@e(?$Nv9hqB8@+tRnsw_ob8v7l zGBWn}wVgV3cK(8;>>TX>|NU=iu2E2s1FCuc{6$yKr0&k9&aMfUFJEJ3W|ESY>S(W@ zI(7EZqbJx{**Lj4XU^ycdJAFn?_a;;5;7{v3w5+LbMwpGTpjo9IpE{#>FVOp+SVf@ zEtQlM3skmx%?5`5|4odIO3G?x&YZx)!kmLd9qVd&>S7nv;fq_2$e%?Ut+c$3;o4X7Qbbz4&4Do5x=Ky_bYikLKPheQL zwDmOBS7>W%0!_Ss?_p_qU1ddqsi`r#(ZE=qK4b2U8+UqpnpxRcf&5jg*YDqdq_4M? zi;MH?m#-ydbrUDFvw>3!FmS4CTjXSAa@c6N41Vn288g0{96FaV)Ozx?!_ z5d>iA99K5^|9|h^gNh1rDk@4u<}AiHUw%N$Wh7Du(EtEcGdoqsQeLG10000zH#W`?MF|L%QtUCXqoy}y6|e*f+RFAp~-Hy6;*KY#vw`0$Z~ot>M98{$@k(Z7HF zuC8f%^6dHlfB*Fjbc+kK+dKNMUB3x*pq!j+dutsd6XXB?4Ey&TeEj%nV4zQGdOpyg z@87>iM~8X1yJTe-|N8a&*RP*mUT*PmkwDWCMqfC8sjZ`L&g{uwzJATiE6dAGpEP;q z%$XB_YEn{iySkcGRg{2EOG_`9KCO4_)?FJmZe6%w`sJ(F+FE;oW-VH@V&TH+4<0_M zscD%#dlEk%AHwMKAftOHPwf8u`EyluQ)x+FSNDXz-ZoYimYm$usZ)C;CB+{-dfd}9 zW#Yt+b?Y{-->_x=ys5{Iotimweq3C{f(6TfCf>MlySI1pym?c(xHuVKe)^XJ&nlhdZp>FR8fmzM>`>ctCJ z+B^H28mlxl)xUiCnwwWPcg|!;^7!%N=gO7qckkUdZ|+n!R#u>cwrttCX6;5`3=0VG zgN^?31D`E$wQRVgX4 k#OEx=x4-})Ei)1e03A|aShy&G@c;k-07*qoM6N<$g86!dRR910 diff --git a/Scripts/Scale125/99en.png b/Scripts/Scale125/99en.png deleted file mode 100644 index 3e5e3ca9e6a6edcdaa31bf9ac67e625448d8401a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?YBP)jluu|>R~W^AcQO;-3z@joh+?5lT9ZsMhU_Z-sa909 zSlT8PD>N>WodI#-A86Gs9EDn=i3wFEtwa%pA~qAtpaYhGXo9h*A!H+{Q4?p9=}a>7 z=DvAf7lEfwSE0}Y-{x@6J>UKAAN3?TEyaEx{{byjr{HRGxh%;Qm86YYx;iS%F? z^AHh!JaUld&tLM>iFQoGK--%A`}PnDRRNGnr5U>afR>gf+D>)R-+!CpKrv>CNmu6y zx_`YuG#bM+417Kxr%xXz7%ZLL`J2JEw(0HtlU+?a=#F$yQSm;pSe(AT7@Ib(r@Om@ z)vG_@kKXI9=i#GaYHF4-nVcdX|BI79hdFz;jq&jb1_p*=psR>mP4xeOTaEMeY#eoBR z0eJd!46QW_7cRhY96sN=nL~$<5eWDR21}`|{D7T18##9T6sBpQwdSK`m9GOQGC6s> zh95tZ#-`nJwCxv{8-4OZnp+Rb-tWUQp3cd5IxFpwi_&%eimQ3~&y3t28kUtCzLIFX zUnVlMy1z#s%conm%Z1;go}72yn22yAehaNN-!y*d@`Ly8GdA{u=H~BE3M|Xw=8aoy z+PKc+{jKK`p-?sT^>r@abMZ3e<>jnhyULUG&TUspQMY0_^>wwBl$b96VPyratu4$i zD+A!s@Cb_+FTyYkk9W)F hdUHkAuUo@=OP5eoROHQ?NM{A5n9CO-BHSIgN5Jo= nw)W#WIK5Db>72~=_y6Nxt3++^PV`gX00000NkvXXu0mjfrFVeB diff --git a/Scripts/Scale125/99es.png b/Scripts/Scale125/99es.png deleted file mode 100644 index fa658232553fd362c9745e6e035933056b6bed7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 758 zcmV_2{dPfJa-vNTId&S7U~`~LlVL_~0KkRQ6~M~|MIJZ0v*xl>=geqCBto0*uc)6fqhC}+_~OMY z8#ipNsV!Z&aQXQQmwLKecJAD}VZ&BGKhG5_*Djbp{nV+m)2Gi}xNtfvD=Wx!pl2b$ z^z+xRs;b6!@7{m?_RZYPBrh+$y}keL-Fv@&{Z>&?Y-z6f_wV1NNi%J1Eli9JU%Y%( zTvW};#rfv#+vKD;CnwvC^g>`jy?y&GIM^>HI*b7`R)I0Ich7-^OIA$mZxZ1uc)Z-_U-$c+Lmckdmyg)`t=*o2Ny420eTlG^7H4<)vGsd-??YroXPC$ z?5L)LlhOBY-*WQGqNBo`o$Nrq`T3)`w9eMXGCV90$lbI1z@2;dGtv_wIvzZDSXSOJ zX;PuB5EqQqvQc@BS#lX~c`t(^B7e@&9$B!R-_8jo`c4vfTAI8^Te!$#K001Ln&6h($ diff --git a/Scripts/Scale125/99fr.png b/Scripts/Scale125/99fr.png deleted file mode 100644 index ae2a748dc1d028fc99206a24982dd951fe3c2d66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 741 zcmVFftGV|Ni}BVqzkw3}n`;&)?yO{{R2~>({S8fBfPT;A3TB0g8MBg0J6! zTsBr#h=xDEe^=EsSCkd<3-EpV^qHB7iHDa5Xc^GT&!0d4|M#DlkC&O58E*OyxQnJv zn|=83aW*zK4o;3)GbSurykhINogC~OK+TgUb@B1>0+rpqeRuhaH5KKBl~s+;U%dSP z@1K#eVL@I-Yg^CFn|Bx)85NZjTAHeX44{J%roVmjE+s8@+SFb_LBWW~#G2}ow)Vcx zjz&dA`P8($=%`Q^7e}DyIyxt~y8#&tom~^=&6)D?)2IBxirnn9$x~*{nmO^`|Nm*} zc|G0D%1VkTZh!OUEzp$q);eivso41RuFj^)s)ma4B3&J=w2Xr6tQ2!|lOI2RFJpa6bCvPs9^fkUU3OA^pIJ+WaW;Xd)V37e*gKi zWYMgRo3^c3v6hpQ-X=brq0Jtp8ovtQ%6U$qM~rZ zglU&9Uj6&;ucV}SZ%-?FxI-*>_~21VS#5cFzL}{B!+(YsFJ2avRL93hxVyOkWh*Kh zGBc8aVFe7+KfnI~BWdRB`8{3Dva-^D|NcF9?qXN>q?YDtb#+xNrUO*~Bj@+;zs*fm zkR;SUVcMg|Pl5VbSeQQm1EH>U;=~RXaFPIqQbAFbr-zHbpBIq(>({S}szxnMjg;hA zj>DRxGTb zwEO4J-xDWKnVA{`lN^%ipMHRn4))A|pn(>zSh>!_!&yjBkeGY~)%fP~4@O3O=28Lx XHm_4tv0W#I00000NkvXXu0mjfaQAzO diff --git a/Scripts/Scale125/99it.png b/Scripts/Scale125/99it.png deleted file mode 100644 index c84f123592572693e59e4e63d3bd8d94bcc37ea4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 739 zcmV<90v!E`P)uolKwpMStPzkmOJ|Na9HH#a92Cs6aBKYu=c{K(G6&dtLO zH|zANv*#~dPD@Mp`SZu8PhWU>c{w=Pf#Sb@{rdRf6Av#BCnpEG(O*7)NlD9PV`u;I z{d+`2h_|O(c5ca!pFe;9`sME7niwAiH2vSdf89NkTwNXi{`uS8JBfpxYd4)feXg&s6=d|wPv0To_~q-@jEq8H zNWFRcHZ&wKD9E>{s0wJ%r%#`p9PP6*lmGttQ(fDdnVBRnFMIj&wT|{aPA-o3A3j!A z6p4xmS64T4aB{qR_dYv2)y3H!JsN-h{JCoNhF!b%&Y3fXosA6`GuyW9UbSZZv?)CT z0s;>oKAJguL0d~L#3>&>eC+R^#?HZ3Sy2oW07li!Sqq;&f7aXG0#SfsG|+)b$vNHK z&58>0KRSg>rugmwXbejxYC)oX2S z{Szm40DXWZ@qPdCWAC2*-rgP{YZ)1S{rq*{z#&&xCnhE)pofZztJ_-ZfRPDN{PgMb zSFc_h8tOr~Z{EDSe*K26trbeTMoImQXfzZ6)BE1N2SY;qiO*b&Z-7QK;xm+N001vD VR8-eRAie+q002ovPDHLkV1gE2aO(g7 diff --git a/Scripts/Scale125/99jp.png b/Scripts/Scale125/99jp.png deleted file mode 100644 index 845bfb97ea5180d64cf3f19483dcdb138ef97d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 731 zcmV<10wn#3P)54Epy2=i{~!@YMg~HF@zv)aaL(`Fzu&+Az{|_S$;AoO`uoqH5AQ#4adL8T zbHU9zbm-WlM^9p6!hZbt@%hsiK7L+yc6Oln&!0a(ef$j6%fZQkWHeaU>(_5`a!Wbb z*}s4Po|qWp=wO?gmJc)#s3#!6Cn_=osOInAe~nEYK=!LwZzfNf#lgYx_wS$Dn$q9D z|FpDrbFg##`u(e@Fx$+`7-aP8FFzpOT)uqm;lszKP3t{({$fwhWS~TPK zox2SU9rNZ+<>u!4^zlu%Ic^X8rp0``^ER%uLLMg;}fDY&d`Z zQb&6On$c_aA2>2?YVUyqM;0tt8Wk0~c*zQ&i5D+knKWs}g89?fIoN@g@$>O{c)HZo zwy3Bm#l}SRPngET&Gqg3_dkFBloaPKUcB<*!^cfcRgeJr4hhG%@80L-mH|Wg&6~Gz zaS@)Lt~uEy!1w}&zK@T4Qeq59b7@^gdA@{%_?ffkdwZvHa&mn9_^F}3f{mT6v9W`b zlM|>I7$7z_76?~E05Fu7E?s^2=m86GMpN?K^g_S+jXUe;Y7W0J*16pPMv!*2IbJLV|+O z6oPE@moHxrA3o~o=?3Bc`0;b!zJnefE=){Jz@%1CP}$qt!p+SMk$w2+@z*b3wX`%K z+?Ow3J$UfQ+}s3_u7O4qPW`}`c>4~Rq5}hch)@eN`Yq6CV$3ET00777QCRX#jUxa6 N002ovPDHLkV1jY?d(0f>hlj|{+~a8K7Rbj&c@Eo!_COZ`1kMMPoF+9Gcoh< z@-Q(mLDby3d3(*eO;we}zkdDt_~8>!ij$KADE|BR@AvON@B+D9oQ#;J|NQYYJGbP= z&!4}4{c`tkjfo5`udILd>dn7@e@)Fy3iC68_Wk?!f6=04(lSyC@^Uq`E$kfZzkdGA z&PmfySIx;SA*;01V<4tOp1!C zfFv-iogD2`l4I)|+Mhpv@%_gSeSO{P$|7JibahSg_4Clt)_m~bQFV1Q2Pen7cki>a zQwC-c-15nj zyCfyVv86~xhF?E_9XN2v)zt}-{(k-XedNe7J3DI@78YQFtEg-&FUuDb6NM;$^XA?4 z>o;s|tsvYlU%nnbeALs^4PoAEV7N0fK$9oltnvBtmra|uM@NMcpYIsoe);jA;Xg4M bj|>0+&7x#h6!b(O00000NkvXXu0mjf9hZX$ diff --git a/Scripts/Scale125/99pt.png b/Scripts/Scale125/99pt.png deleted file mode 100644 index 68df2688a54e108a066f9e82334d943fd2c896e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 736 zcmV<60w4W}P)nRxhkn3MtuJK<=@|by!^Z@ z%*+rq@7}$ysco4ywfFb$-|ydj;Njus9eFNR%qU`qezH8TS0v#wPC)?gu2h{NYKf}I#2OmFv8W`x4nw}3d===BY z(a~WZ?k-u`#Xu8&{rc(U%s-oFJHaZ*4hg+Ytf<=3l~m*@bFPhP0Q@r zllb}g5JsOrf2pm#ck-m}&!0Y5RyUQE=5=;W=<97`Wnsz5EuA{GS5i{^(WA#bJyRx5 z>{z#M^ZE^2=FgjY?AWQ9Gv~*}MJ!mb3~1tw8@GFVC(oNVm5Ym$@zv+=kf8bX`*&+g z&;17vfBpKUuC7*FQv!7Lx$_tQ|Nk!{B0Osy-7IAWMyng*Q zJUj>(K7|F9KY#uD`0R-Nm&CM$Vh8QGy{P^*6<;wND_wJiFcPbkzE6_n(w(MN9b|Wx`1qArfjsEfDM^Qk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcX91fH32|H2Dgk;3`iS#}JL+-u{bRhZIEGzW?)|wEN~aCQA?Y z*bq0BBQatunp*^aFv(u7yc2q`{GsLZ&-PI~*Zw}q&#d0ad%aTJ;_mWEs|xx&V`eRL z=I3#``q51DHABpFn;C+)x^FsYiulahb$LmsQ~ybZu00JsS9h)7d2Tj?*M#_OuL@*q z?_KH^N@>_AAGh$1M{w%A=}jAF_cB=9Ym3?HpFAF&@yGj6yfI&djm;-ng=4i09fh@z UZ`My$2fCWU)78&qol`;+02n)G`v3p{ diff --git a/Scripts/Scale125/Accepted.png b/Scripts/Scale125/Accepted.png deleted file mode 100644 index c3d9de15e1d33993d722048df30e1ea87ff3aed8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CC!3HFEsom=WQjEnx?oJHr&dIz4$)r2_Ix;Y9 z?C1WI$O`0h7I;J!GcX91fH32|H2DgkV3? z1%v08!`UWqbg{X)xovO~VB46u;QeFqHa>-ad?M+;xJ4rVJe77~<8a`bDC+;~$J9hA jf%r*+$q$lJQWzKxGpU?qe<|<@Xaj?%tDnm{r-UW|D!n?4 diff --git a/Scripts/Scale125/Accepted2.png b/Scripts/Scale125/Accepted2.png deleted file mode 100644 index 2e4aa34fdbde96fd30a2f5511fc13356a8fa1606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CN!3HF~3v%Lt6k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?O(K&H|6fVg?4G5)fv*mnL5U6zueLaSYK2p4#up=U^b>P|dvVf!jAd4<(u7 z8!mb9EEH?n@T=z4@~)1f-d20AHQ1+W2OnlNIh|TqF+uf=SMi3;T`Bd}k$XdHU&%dKH1)~u nH?KCav7VS-Q}pwTIrp0Emmi*g_W!*E=qLtHS3j3^P6uS diff --git a/Scripts/Scale125/Account2.png b/Scripts/Scale125/Account2.png deleted file mode 100644 index 28ea9c2fa8845523c469d62ae57d15d67221b1f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 718 zcmV;<0x|uGP)eh4bY)!^&fNe202g#cSael$WpW@x zZ*6U5Zgc=sV{&C>ZgXgFboX@)M*si=qB?1QiMx9_6yB8KRNB}zUzu~OU`XAr``GsvZK;FJ}8Bdl&;xQd&t&w z@?TP5lTwpXOGB-@@5vej1X}&!^p#cu2$aB9#qYPDYrw> zJ~InK;ME@KfNnh%M$TdYAlpKY&YM6K*P{n=Ic-1F=(yF!zs<|vE2OHjsJ+$vwdi^M z%zEOO`(c;NX0444MK`V%cXe0}R*U!o0BGSOj<#z#eZ01}iynWU7BO=No>o2j&9EFb+M77`>BAfbTFWMwi10N7Uo0FqK< z)v(h60Ln$MB2DAtQ*3Ay41-U8X2b7+GS;sno5lv-B0~5~EdOCle4WeO?o@nU5)7E} z1RWd(Bgga+1W3%yXYSl16+xL^;h&<${T}RblkFAs`Ahoh4X7$wY`H}Hbu*a)*w6=W zP8h3ucG}OMMVX1HQszf?`~S}XfIK&smYDwT5B8}mHyNxT$p8QV07*qoM6N<$g5tqJ AAOHXW diff --git a/Scripts/Scale125/Add.png b/Scripts/Scale125/Add.png deleted file mode 100644 index b9944623c3bf1db4efdbd753197c4a50c50dc2a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677 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 Q2><{907*qoM6N<$f?BbtyZ`_I diff --git a/Scripts/Scale125/Button.png b/Scripts/Scale125/Button.png deleted file mode 100644 index d5e30b021f749143718153408e56cefd41e9f44a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_3!3HEP+-oF(6lZ})WHAGSPzeY#-b<6O01C=` zx;TbNOik|jwe6cdGnd0-Cr0I27Q$hnE)9XbKn0zTSUK~iNlpYRW$<+Mb6Mw<&;$T} CW*Mab diff --git a/Scripts/Scale125/Button2.png b/Scripts/Scale125/Button2.png deleted file mode 100644 index d04d6d533fa31dda79719c4b47fc02a479e85743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEn!2~3WxMs8iDQ!;|$B>F!$vL||&1dBKci7X7 yMVw1QFvcgfXR%wr&5n8jxmLFWPbE$oFfq)k@|t)d=WiKM8-u5-pUXO@geCy7dmQ)x diff --git a/Scripts/Scale125/Card.png b/Scripts/Scale125/Card.png deleted file mode 100644 index 58fa28366d7579eb02a0e0f20eb776e3526dd701..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2161 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 diff --git a/Scripts/Scale125/ChooseEevee.png b/Scripts/Scale125/ChooseEevee.png deleted file mode 100644 index 59ee529013f24a8a46f45ebc5a05a7210487da5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c6!3HF^d|7u4NO2Z;L>4nJa0`PlBg3pY54nJa0`PlBg3pY5VM%xNb!1@J z*w6hZkrl}2EbxddW?&F10b#~_Y4R07L1j-D#}J9|>$j+1SGu;4zvI%#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=BdgAk26#O}+vs$m{9i7$Om#EU~1ak&%I676aqNNf(-c5)7WM KelF{r5}E*e0ve(K diff --git a/Scripts/Scale125/ClaimAll.png b/Scripts/Scale125/ClaimAll.png deleted file mode 100644 index 7e1d4599274ee208bb4c43bb6919e9eec4f7b624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^dLT9j8<4!#7_%NoF%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl}2EbxddW?&F10b#~_Y4R074egmB5hW46K32*3xq68y`AMmI6}bgK)eHls47YguJQ{>uF6ifOi{PD zbs{}UK3djZt>nqvW6s4qD1-ZCERRDRmN*N_31y=g{ z<>lpi<;HsXMd|v6mX?v90`zGE;%B09k2gXakl<5wp<;IRwdJb`TMuUx6%m z$bfU;m6aaVj}w25wATJ%LF zRkZ2~6AOz<=pC5Gw(wUy%6*JMAF)G+)p)y5V_)W;vkUjX=VUofcrgg6?_TK%Pa{aENt-umalU?f< zhOBuQay!9$LGCw`iFZrfRb<~aTz1&iCRFIKQesQI?EjxH>r&qy7re{qaN!`U=JMR9 zA(7jE>nrY`v{n9?%bR%71=~E;y|UyF{bPK$JjdX4Y8um$E)K3o(=Tj(^~~nT!nojT z^Phc863NKwUS+)M{X`ynI}?V8`fVL&n3R;hcnN0K{*8ZH!76Zo{le;O&g!X0vq9&U>c zv7h@-A}f&3S>O>_%)lU20>X^<(&Q_Ef)$=Fjv*SswP!5FngRq|F5a`aoG#XGsPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0V+vEK~y+Tm6P8~ z!cY{)??2oRB?hA9}Co%_PtkN=5L z$Ikcry*u}CC;aFe#`7Fx)FGDYYja?1avK3-IcMR2fOED** zaNiok)}9WQKU+RSULh~y40q5EdDn&_DhWTk-S+b&#tLuYcgM{ z$4e-TnC=uV8aHIl6i(@R+cx0gX#jNn{1`ISV`@i-DR-K$!7fntTON(9_e!F~q_@`Ok;H;><4_IK3uwxNS{r2+Wm8 z2$5!!xZ1{e;>xifFRrp{Ocpt?Bj-IYh(2=0hc79n{DbP0l+XkKi-R_% diff --git a/Scripts/Scale125/Confirm.png b/Scripts/Scale125/Confirm.png deleted file mode 100644 index cf3562b2ca518f2b7309318a70fee1d06d1a9a7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0)$CKK~zXfm6cg{ zn=lZC{r`Vhn>bCJ#If-L2FxNr8)ApN^a|l5O`DpWb07KU-qA?IB2~?svZ6JjWy`A0 zh}WH{dq_6JsD6>;%|&&h8Y9EgvNJHR`**VL7j^%dS1o{;SFxyx)Y2tD{%H%+U<=g_ zsvFAw6)?@qNK_#&Bh6PDzL4;IGhF2D@KI$qq_R5GBIFf#I8UBqTGQcY27+^@YLBWj zEj7tU!@N$_l=B~q5i1)nQ$8&MrUN4?3{B228PW8KEZtOjv@nJyC$KLWBb0ZN+|8z( z2D`$Dc5qYq5kt-^3`AskjNh?<&tPz0oLC-4%*zU#%5?@xRJ9Gnkw_<1?i>b}l2_d> z;JXl5e#+D=AH=g`X$4{*OFPMDF_1&V#^+Wj4n)pnTq4#ULsz><%w@bpJh^mp=GM2E z#}i%qd>hVY?3k^b?Ac?RU^a6M`GcK3xomTu$6!QjC%d1|V4zerD?9lHgNK9zxZ9KO z`MjLSa-UrK;a3=JnRAvecjWGnm~+EeuQ06aR)_d@M}8gBS@XehSzdCpjhB1!V5hhT zFSv65xd*ZxPDI>V(P)x9I@#LeIDlRB#T|viDdtNny0OTe?j9ygo9KJ}*IPh&0Edv? zZsRdka(_%m6NdK#lh5ymRc*+MwG;o?Lsj=xI+0TjnS?`RFHp`ik)r3j*~z&cN(A}FXov8AD* zsi_|jcF`pwo{Ev&P!a`2=xD0}Yfdb?U749B9rX~~Y?`{r(k)v&`)9EPp zk7ZsO9~>WU$AbV_djk;z$1Ncu935oiL4Zu!1Qf^hm`~2KytL5oIGAU@!Q9L=6N&NB b;9!0Mw-aWNrBs`A00000NkvXXu0mjfVbX}e diff --git a/Scripts/Scale125/Country.png b/Scripts/Scale125/Country.png deleted file mode 100644 index b552a4e5dfa5d69032303c65cc43459bca688add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CB!2~3o+B%m3DaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9EWB_ParFHODzDA?=i;uxY4oLuq!t-2#iP|34fce%IADRm#Z zIC;DLcbWYRL0>*x{r&6S&l#`e_WumHY?=Q0;N^hVa(impm%Y3A`uo+n#oJ^oSW}em ze0gv*dciL5?edH_`Q!JlemQG*s=WuRz(R{Z_dc6Dlpfc+v*zu*-IB|gIs!x(1p{JZ s&)e*fbolb^HGhd~2FHp=cel@HU}|J!eb4qJ0O&9VPgg&ebxsLQ0NV9oUjP6A diff --git a/Scripts/Scale125/CountrySelect.png b/Scripts/Scale125/CountrySelect.png deleted file mode 100644 index 6e80da84a953c94bba07c220d1e6ce31a370e1d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngj!2~4rRUNp26k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?O(K&H|6fVg?4G5)fv*mnL5U6g2a6aSYK2PL3#j!1uA^*sA=+oDUrZu4Zt= z3d$I+aS87dRb1)jEa4@{(VgYvGAqks(cD+e+Zp5g$|fXc*oXp6VDNPHb6Mw<&;$S? C0V+%Y diff --git a/Scripts/Scale125/CountrySelect2.png b/Scripts/Scale125/CountrySelect2.png deleted file mode 100644 index 26449542dc67118c5e714cb93daa939bb415d23b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^nn29Y!3HENr#`z2q&N#aB8wRqgi1h|@m`vI1yFE` zr;B5VM`!Y$g8z5x+Z_2K{_$3+8yRf)^Vj-E?8#5x@7p(ZNo2lYNNVc%c=~*Nvz#L1uM{f44$rjF6*2UngGBkQw0D3 diff --git a/Scripts/Scale125/DailyMissions.png b/Scripts/Scale125/DailyMissions.png deleted file mode 100644 index 1fb9fb86350f145b84a76ee15b46ca25f8acead9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmV;U0bKrxP)KArF00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0XRuSK~yMHRnf~% z!ax+p@p(T@xRuVdrL+ahC7_9k3l}V0n6SVFCYWF#V&E}!q2YOE4wu$MHlGt~^$9B?>~Kz)g8enaT={&I-&62*N+bD=L%a$$dviC==I+ zG}#i5{ViDBB6M%p@N26K7RH43HK9_=Vt$yG+p}Exo z(?k8iHiHd@2_~}?!_gKZBwSjAo4XB`%Nmr@2?%0QzabIJJZ;CN63{ZI{zQQ6>_%DV7&)}{Q=vwYn-=HKVbj> N002ovPDHLkV1gV6sONn{1`ISV`@iy0V%NB|2?LWrs{a&c3)lKiJ0lEr#(+@ z+8K4uXv5c{TRUb}&8xieTlMW9r~U&vGKadhbf0OM%VBlw)eWOg$%2^*&(}<|ZhgsW zpY6HaLG3zoVxjWfMVd>iJXTpBW!qEcrkB;&Jul*}!3HFm&n4~xQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0V%NoQf9L!l(^FF#>Z&8$# exKeJy%*?REl09mtEnfgoDTAl0pUXO@geCw786nyL diff --git a/Scripts/Scale125/Delete2.png b/Scripts/Scale125/Delete2.png deleted file mode 100644 index 9a1993b07754eca411b1ae7fa51f10c2aee08bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmV-N1GxN&P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0^CVNK~zXfot9~G z+b|4;K~nP4csjlRU3!LIp_9pv#%XQYmbF-0-vdc0ah9=+7$QXy9{~~~W1jxyg9I_g z;5ld+>!=88v5n2+IPJlEUNuA0wo=rcbVJXkaga53GSc4!8B1DZ<%LKX7_n%`i%P1F z3_p{#!2nIxVnnDD;QOF^LaxMN)ETg{^`XHZ1<{C;v2KEw+7|5INC)hCy^@DzB5l)2 z+xKW2q(ev74}w=XI&j5MN7&x%y>P%{k;;$F5{7_u1VLGc(s&>cuumaTY~p0IbP8z+ zf}wh)FieG?)hS==m2eF-v{f3y@m>(r2e00Hat#gO^|z%Y7)=m8nm{*%qXLkHJ}gt| z0iiNHt=|j@vRcs_ef>JFi3t{~yK=%H_xBmi+?nJ0I7LSX`GDEEd#8Q=*QS$79XbQgpf8$Ujl zcR`pVTu@cK&xSCJvTEZerIc9^Jq~b4RV~lYNoGL|zMFGdNdpM;CCV%a7ct8#EGS<9 zWh0Z1mrnXb4MG#i9HZq9N>#^7wp~ z2J7Kq<#6kHfG-^g1etwNzgdj7>yVL+?6O>*vswo_8bA|*aO5XAloGU49q!x_!befo zayS<9g7`1EhiRxYD!_RF-xY#394zY1<2D=eb1en_6*!g`zlAi0pPYr4xq5<|P(vb6 zz485QGe3X*X84*k+%Cqb5bgxaU>FTJGrh6&1a%$54vh~p`8ZLAHZ|a2ojGU#&`v|e ztTu&FicYG6V8Gbvz8W(O^igSSpt?IO2_SSF7>yL_>uCgN7z}Bu$7D0c$bW=cqnvfZ R1ib(N002ovPDHLkV1fZ@aRC4T diff --git a/Scripts/Scale125/Delete3.png b/Scripts/Scale125/Delete3.png deleted file mode 100644 index 8795dbce325473d0019f74f93807c0648b9c9e5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrK|P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0d`45K~!i%?U>mL z!axi~TmS!8^-a+yWwg<0iQTeKb07#sr^(I1Li@}0@$72);WJ5qu_14eOJ7dI=Z6$3 z!9cv2Q{^L7`9=zr%z-%aPn%Q9lxza=WqN7+_)C&CEQpm-4U|xpDycw1flJLx1%oct z8nEACbtsU5n~`d|SSSmyK1wyqWVox;1)t|5Tx%XIZXl@AzAr`TM{&JhV zQFp`z4M+%LsTl6*t|r?1@BxQ5)zS$ zKO*axwBVc9GBsAI_y)0z#0xwbSR~0N72o*U5qO6u7tK`3Qt^zdIdWuZS!pFrl8WA- z#)vIK%S}4oEk5e^(~f<=Uw84)RRIQu)gQV4om}(Q1gM_D)78&qol`;+0Jwr5-2eap diff --git a/Scripts/Scale125/DeleteFriend.png b/Scripts/Scale125/DeleteFriend.png deleted file mode 100644 index 838e9b6ae6f56831ad0ce35cb07576bc33edc7e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~A&P)^l1oYhQ4mE>Jw($Tap25sNW~opg5XSdAexyt@kjh& z)Q)H*+I}V)5p)5HNz`3rlt~~Vzj_WDk~D1)YxatJsJgeFRB8>21%!W<0Wi}uNNV?Q z@$xEWYNiLOcZ@te4~DJ9tR$gSLT~*ZNFsrHCjq><9f4#e356nhe*>fOJ`f-=fo4vS zmse!(An2(gYwO6@cL2F=S1y%W!-gi5%b58E?9?Put-?nE^>Yx5g=A5%4`yT-y~=?T zi%3kQ)9D}=m%&<%CX&tmn%7Y1)oLM|TS)N}y*!6{9Wy%z%_eqfF+8z*_f7}dNg<^# z^vnatf$?$F&mj+aWd9Is&y@j?b{mu0LkdOo+=F;8J;uh+`y1pjA6QV^2X1U3Z|~U5 zDa4$pA=gFkeB|0kj?#VM)a&SJ8eC`amvvqA_8Q7%0Db_P&xKr4aMV!%0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0USw0K~yMHb&>l^ z!cY{){f~9@`tC>PjvIXok%d^KCzU<6LOuCA>))}9jCcS5002ovPDHLkV1j+HqHO>G diff --git a/Scripts/Scale125/Eevee.png b/Scripts/Scale125/Eevee.png deleted file mode 100644 index f64e505713101b7086a3daa41847eb1a32c4b56f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ(0U`xw#m)tB3Opi<85p>QL70(Y)*K0-V85q} zV+hAg)swz_jE*9$7vJyGduu-YC(&~p P=rjgTS3j3^P6EamT(V6_`|NsB>ZHi1Y*lsZ{X$U-iiL1wIT3EuBja!%&_bnBbDAifZz_8&Ni-=AS Rr#?_0gQu&X%Q~loCICntBYOY< diff --git a/Scripts/Scale125/Erika.png b/Scripts/Scale125/Erika.png deleted file mode 100644 index 39b34ef30a1f801f1b91d4e696428a39b767f829..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XJZ3p^r=85p>QL70(Y)*K0-V3ntf zV+hAg)sv1~hYSQ9F4_kl>!xe% zKghAYyDmNJmTX~#GSlDJo%vGxGF|Ro5_Dov=;hr1y~W?bRpA)W>e;)Ny|%t$uttPo tRhFabp*hC0o;OABtY2Z|C!E$Q|Lc{(ON~fJQ=lstJYD@<);T3K0RYynMn(Vt diff --git a/Scripts/Scale125/FavouriteFriend.png b/Scripts/Scale125/FavouriteFriend.png deleted file mode 100644 index 14f3cfe940fc2d1a272799237849a995acc64822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp@K+MU(1|(lrEz1H@jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCf`#@Q5sCU=S(+Va9uD@)bbA8J;eVAsWF`&pL83DN3*=@CUNUE-$@3Q}KcdT-)_ic-o zn~G_x1#Y+f7L@1~X?A9Uw|PW}Ptrfu9X5>L9&dXs&GzpY(2We9u6{1-oD!MPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0Ru@yK~yMHrIOD} z0znvt_g~gy5E&6fmqfOM>;@@`Qm%N26(she2Y;R146)rnwz5`T6L;6v%Nu^0IXjoc z!^1c8@jlE9-w4Cm93%G|V?Ti7FaC|-kPyJ}cH>Xnkv&8&z+mD+tF@ukSG-SVTriCA zY}tq$iIB4@@}(-|oJ#xF(+d}7#Axgix?wR7H{XVc9*bO<5i>=N!q<0Ysuxn8YC|`W zQdYgNv=PT%fMn*LLUCE4`e?l3G;za@VOx}QB@)AQ`yWUb9=Q4aA{?Aa=vkkfxcp6h z`->AcqLfu}cz%Ue$7Do(ebwzABi^bN?lfyOMYCh#B%Y@Aa?at*50(U>gnm+a_y7O^ M07*qoM6N<$f|K8vC;$Ke diff --git a/Scripts/Scale125/FavouriteN.png b/Scripts/Scale125/FavouriteN.png deleted file mode 100644 index 6b2a3448ff6acda19b8e1c5274a63dd379c278a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 447 zcmV;w0YLtVP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0aQsuK~y+Th0@PU z!eAW7@%_EoC8CQvBewzHgoox!XHTMW z{iBbybRIEToq?;V9CUNQuS3_Nn7V$fPqCMRs{Sd?g7Nl0xLB&pVHMfJ1^7(-*!N`w zJ}cir-aJIBKZ0%y5Z^e!ezDB=Xo3K?eRxr{lSoXTrQIKKG!Eh;u@lB!+vWY|v{K-m zxALcaFNh~eD~UZU%PLoS(s@Pdwx)|o=$TMVE4IFEbSxLN3(EgMvu9)X_>yr_(PnXX p4u*Y00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0&_`3K~y+TjnD5( zQ&Akp@%uaof*^1=A*R>(pf5mx5P z)@tdtd+xdCTpz!~>zbQBs0T0je9!mr<@+_(7x%C}zn9XxeUvi$Da{?A{PrN_^dZWr zCMvT>D8D>TWxAP4vK2FZ4ki39+w@afyUEP_7mV`KVYC@QSN^Rs=|Rl4p(=qIyBuJ7 z6~25~mTbE}%C5)G>dDG0gWz(53zcW~LP}=RvRcHxT1q zteH+Xs~rq8dkkkSh_lv@`f(Ncv6ITHG1iWp>T>g6s>%=x zCvb`(M5YDv_0if8bE*|H=|N1M!J55@E(WniJCHBB-Mo__=38)zVRZgFBGrPJX-3oy z5y>`mK7cNUu%31y6F&5>&@P7ct`+BJ#HBu8c87?h2WxYa2`_rZkNz2UStH%ZiOc9h zco)OUcyI~>E<4+eNS?%caRw{l#d_Y3o%Z1rBIrT{`J@Lqe$~ycAKMIT?i5abz-4EB zSTEbq-@@oz2$|?YrF*OW2=>qw?6GU;e58R|jbd1D&*H2`|BHImhZ^;xR|gu1l|c-d zZo~N++m?&stW@Rd-oM6B5B;c-P_>Stt7I;QVW-;J$i;DTaqN^2`K$vudI>qwjXm6h zn(T9Xo796KdU&8#Z;7$KbPGdHdy$jpk>l;y&pObHL7e5dOD{yW&e`1LVF-Ocf*y+D ze2LfS5vx=J8aPKd@mqC4(@m QGynhq07*qoM6N<$g7mLnKmY&$ diff --git a/Scripts/Scale125/FeatureUnlocked1.png b/Scripts/Scale125/FeatureUnlocked1.png deleted file mode 100644 index 850f9c1702ea518968dd00412af13bac6c00d36e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1148 zcmV-?1cUpDP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1QAI@K~zXfeU;l! zTvZgt&mY(#6JLBcykbm@Hrhr* zBrTXoWBc%#wf5fUGN=zbIp^t@-}kM(wpQOdL2dIfs{LbB`;SoW9--VBqSQV_sda$m z=0h0k4^V8}N3roS3Tu1Fuk9jR{}9=g9i(g9NLB74Ss5TBsv?}lTVr+5iUKv%q}@&L(ygBDuCG~cx2Rlxb=3WA9mv~ov4Rj2NF z3odA_H^kAC=lJ%!Gn{FL?e zcys;k#`*E(IU9>k+Z^ra^oA(j6hW&9#48M)i&@aj=042-fznXDy7==3l+NqxzhN|X z*_NUC5mURwcv}I1omDT8!9K4`hEGw)eWdR#kC!Td5AW!I0{XzAV8*i6?3r) zn-X+pX&IVh`jHLg>$0+qboCxm)q6Po{srE=eRt#h@XK$A6k7-@(@X=Qlw(RzHjP){ zlcqCE1|O}s?!Bk#jxv<)skMbt^FCf(T;cNVdmDQG*EKdDe9ETwa-H-0^2*so{oo4zCrzG@UoXsG8Ir7CSmICl%V6>sRO<3OW@W_ z92%LrUlD O0000vH{B;ng<}F^XJ1)AL}Hi$sTkTEwH8KQ5Jzzc1Lg_`w^_`$F!{Z%j9a9*GKy nbu4XLPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0g*{WK~y+Tm6AJ8 z+h7!ipJOL+X%ul$7lg`)svrfCg$_*c2bdVxS?I=IF;KCv_78w6CX@}aBUS`L43%I& zT$d7~1gs>!oDQEGV<(a5E4{<{{66+MpO3g+TX~Oy-%wu!4dCM%ls2%knSpBUL*#=h zc)Ni92W*!?#W;Ea|7-x<+=9mU^jU5?hAm_JGm@QI+%@oOrYKa7@|hpcK8U*9q60^Q5G=@uHk+jc|C-%X-0Bi>MD0%A#zP9KZTCh z(ygk8+%KU1Eh5RWg@1{J&xnd~=Ms56ND_cN|3v&dEaFUTi$Vo;DyRw|fQ>rUgwzme z{ED9?R%b50Fb$x6j`&w-;R`sG1a6&RJuD?PpoKCzaS&gaV9zr~lcR y0m=0)NndHka~60+7Besim4Gngy)^j>px_Ko7sn8d;HhUWavm}eX?>WtKwG2fu|w7RMi)?H^Pl-#YCopZ<>hl$N-_;!{<2fiM3& zQA(b>UuJ*euMKro)2c5YtJ3W9U6^^sf8tj%w+LkE&foGrzDnxyM7PbWqwabw zV!!;UHfr(CfCal5WyP|$T;wZ@uo!`S#o+1c=d#Wzp$P!@ CbzvU> diff --git a/Scripts/Scale125/FriendIDSearch.png b/Scripts/Scale125/FriendIDSearch.png deleted file mode 100644 index b295885dcf8fc438323701a13bc9a552760ec7e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAIjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTONgM+7wV~B_M*~zE#nhgY8fBx^!-rW^6b&rCm zqFDg5ny-0qyrQ?7Pfu{um7{_uI;w513xwX~{}`jL$^6lSK|b#xljXntECma<`+#{) z`JHh|j_aiz^P@diFIn>4-!*fg=QfUqsudUa&R6R4=gsAjkMzw}j*u5!dr9Bf_2Wvl zi#)7)OaHxFFYI!Blk)T}FJ35ob=V`WD>_S@QSU~o%EkqonmO-3)jc}XC|Gln@BYur zJ!2GZKU)^ooFgyJ>gkZAb!V=$^VzWDt6%q?Ne2b7D)Lq{8M4voAHCOfXTo)NsZG+eEpMqJ8yh-Rh_on zqb7lQq5V@G&KasRS8<(}U-9}-+m8*wOP*E;`I$_*!BF1o9=uMEagz35rc)BZHMRa% RYJmaF;OXk;vd$@?2>=LAqVE6z diff --git a/Scripts/Scale125/Friends.png b/Scripts/Scale125/Friends.png deleted file mode 100644 index 6d32f403f0d5804494a07613b1d1fc145c43436d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~e!3HF=pW8M9DaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9EWB_ParFHODzD0tb^#WBRff9j;uLQMt&ET8|!YicZV@My4k zxZxbrv;`ZdIE#x{rA3C#$@2D`B_95ErD0>0_=;o2r@uE${TpuO~#7_e3QV zi-xr0f~*@K@(=9&yd?I{X>EIEuBR)Gb=S`6W1q9s**e8uZoWdk%v7rhMskdqGdJd_i6qZe8_sy)*6+0Rvk4OHHD&wzSVSbH_Clcxy8xhDC_|A9)qW= KpUXO@geCwPzi_Vr diff --git a/Scripts/Scale125/GPTest_NotFound.png b/Scripts/Scale125/GPTest_NotFound.png deleted file mode 100644 index 920b56803540400e444bedcc613982fd9f46565d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCf`#@Q5sCVBk9p!i>lBSEK+1#XVgdLo|YuKlJJS^ye^Mz@2b-ao0a)27~mK VuRc30S_D+W;OXk;vd$@?2>>DtB7*<` diff --git a/Scripts/Scale125/GholdengoEmblem.png b/Scripts/Scale125/GholdengoEmblem.png deleted file mode 100644 index fed3fbf54f7b4a3c321a6d542b2a83e88a20c65c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4118 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 UmNS!TTL1t607*qoM6N<$f{DuwUjP6A diff --git a/Scripts/Scale125/GotAllMissions.PNG b/Scripts/Scale125/GotAllMissions.PNG deleted file mode 100644 index dc516c495680891eae021f444c5fa5f62f766f86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_2!3HG#TlXXZDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9EWB_ParFHODzDEQXX#W6%9xOCFNyh8>8F2~O`$}y~5D$e)k z|N0NCG7~Kd9K2dxu5x&6n0Zq*lPOW9`ue$jcT3-F(EeYPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0dGk}K~y+TjZ$q+ z0x=MMoo<%|l@N`IzfHV?h>@Fl0;N*PSEM;JAMRt!F9!G67f^Ea5oR@k%- z%EvuS2KUH^&zO%&+EE8~*uh+w5AMLTS12xrVLQX&q|28iiv8IFyC4+t zol7^zO~`c%q9dy^FS0fkeYwhym=Dq;)XI}6lQpmx<{~9u-l{(aw0`WEJ}qguG0%|Y5h0;BO2gb-0mds4JPKDNn{1`ISV`@iy0V%NPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0dGk}K~yMHZIHc6 z13?spXJ)f*)L00*>rV^_L9Fcr-$08LwsxjApa>S)SP0sPSoi`qc0Pe`U@QJW5EUd6 z*Pz*KvY8pro!J!;&+gtC?)~P@*~_29Hq-j`Ej&8AY=$k(6VYRk){MJ+abdo?wk!lk zhR~;%#?HZcx7QiX_XmX5N@)aqBvvlZY;CMNIfq|e-|rt^bUTqhoD8~(`YCBaODn~u zN~O(O)p=}BBykiJ`j%6q6fuj&(N-AV+}1@LM}8s6=cK7x5JnM9Or`1%cVZ}~JSR=i zWyIO*)2`VqOmL3f?;7a8oQX;hhF7LF(mxzU%!VnjnKPu|0#$l4j>NPeGV_N*5R9Lk z9`5dKGdTNcZ>lhW1;1~)X;!JMU}S#aPtVRtw9gtNk^#G;!%TU34=BkU`AP(ain^r* znWRlBLy_~oWKx^y&}}5Xv|1bUy2P6U#o}a7k2IqAqxmVL_ktTEk1E&d8(&PcOV07*qoM6N<$f)7~AMF0Q* diff --git a/Scripts/Scale125/HourGlassAndPokeGoldPack.png b/Scripts/Scale125/HourGlassAndPokeGoldPack.png deleted file mode 100644 index fa1a08d86f5a959c60628c880ed8a601d86d7344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1261 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRu!3HEP{;XRGq!^2X+?^QKos)S9a~60+7Besim4Gngy)^j>poaF$kcg59UmvUF{9L`nl>DSry^7odplSvN z8~cia#N_PM5{0DH^vpb4_4m8?t1D!t*s6z{`WpBaIHzW0dQ=sq23ProBv)l8Tc)Vn z+wpSQR9FE`$W1LtRH(?!$t$+1uvG#ZYz1V4g!Pr|Y>HCStb$zJpeleoTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6beFGzXBO_g)3fd$_#D>2B!C(E{-7<{;g9y^P@v0+U6I(`?|NYJ$v$wKq(Ke zB|1UhI26ki4l)`3Vfyw*=-Qgd4Qp>G8NTV_2yx}fn#$0tkm=Oi?$g^|U0b6jRwi@1 z^py78v&%o*K9}y#*j7C+Qb=K0uCdB;UggRUa%q>>m*^g_YTwHDejfiU&VqZNziyv@ zF-LCU7Do zm@`-DHm}QSK6cxj*a>qZdI~uVX9!u|T~K;6dHe0>zwfxql!U+B_N!yf!JB_o_x<>k z{HvbhT(smhO9q$Cb9)6@ejk^eHS_rv^~y^jKV~UeZP3v;dF+$T(V~XxyPI~!sPQ~0 z;kDVmiggmhHhqy&-unM9f4**1?CiP|(Ya!M>;#ddrbMnqhCK;2@1~m7d@r8PZXbDv zZ_np29>@Nj;fX6_6g1BYvIRGIb2>;LU;q8r3$-PY-A}LEXkTp!vQwJQJ>k=c1)^lW?A)SpVr_?P$dUb6_9HA!zv<Qt<|t3+b~`t@VPfi!&lSfD?l5vN8AdHA zwB3B}hvVcWQ(7Kgo%!^P&w-`Kw7<%n{J*!DbJw#+^*<+fGS~_1SPv?5JYD@<);T3K F0RZAB3#I@7 diff --git a/Scripts/Scale125/Hourglass.png b/Scripts/Scale125/Hourglass.png deleted file mode 100644 index c9b34017c72319b1e7c07f6d372257093c8987ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4627 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 b9D?`_=L;IijKqU900000NkvXXu0mjfCpc8` diff --git a/Scripts/Scale125/Hourglass3.png b/Scripts/Scale125/Hourglass3.png deleted file mode 100644 index a15a693229a9182493a5002dadd4c3be7f817e0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1222 zcmV;%1UdVOP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1Y1c&K~zXfZB@%| z97Pm8Roydf&luYia0n1I$SAOg6p#X}^9iij@Buu2fS*7Di4{Uf5Q#-tArvV)6rw0f zKmt1sC@~7Q726qNCw3h7%=DwWIJdgGr!Co|psrCRi$$ClU4gaphyg$K)8QL zrF=rmKR>S4M991!yT9t25Irl>@6`c{1$|ZZo|fhP$q>cav&#+hm4ENe^a_~ zW6dzwrk>?k00HMLA+p|^A(*i!;x(p`tOF^dibH2aoY#;sjfDY zlvdVyT?9|B(dNbn)-KO;F#uXrcw-X?3ywWiLUB#6Op8=xu$1*$1vlpuC+l8X(k{Pz zsi4)rP65LfFy^Aj`!7;4^%)RV26a|4S29wM1yZ8C(v>yR-O#W1=mKH3Nyocgs1XAi zGP5C_Z_m*HGj49KP#Fm1qZX;*nd$79xZM2CbLX{b1WO6KIUTE*jU|p5%#aYL;ixoJ!8Qz51|+NMTcktTh^k^L zBXg2e%>ZSZ@#wb5_~LCkl&nd$D4lvp@7_TJLTL$RCt${ssaqGLE~{!EkLKPK)XJ++ zcZikKP-9Dd&hHN~%6ia)-rK;18^Fukz}dUNxjT%CkxG^{P)adQ>7w>0ap4g72X+RR9$v(a-A|Emf1O?Bq?u{W zNOPUWrN$9Y$?2`KSre*>&U?QjUskxh_6hbz^C+mVzPn*Kje$;k_Py{^ujCJ~@wo@kEMu#h1VSXA5?o zlG{qUnbHy_(TMO2uXnHFt%VK4(_eLgDV>! zB2MQJ@_B3rZOlh)sL!ts+#{k)>9o8qd5JTaG9XJ96z|sk0WL+Z?-~*heIR`Yebgt<02F krc@3s7PvDNpc85Q4=CMZWH8&Qt^fc407*qoM6N<$f{O4vZ2$lO diff --git a/Scripts/Scale125/HourglassPack.png b/Scripts/Scale125/HourglassPack.png deleted file mode 100644 index 420bf7b22504455ce3aa0f77bfa48d83d4642227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP)clSywBR}_W6H&k_XSGjGs0b^{8LChN@6lKE>MM7eQ z1W{JWzsNR!f(25RNT6)8LP{jW60ty-Awi5Wb_|}Up6srE{p#H;4A|h@<AuKKd7`c*<5|3fG-uF#eOthc_VZNA2E81e%+U1La4=#cfa# zs2FraqcOsp`VSl&%CG{ck6iy)hWOteSBHLu+9qNnFcIjOXLCO?aX6)#m9Pj1;DZnw z;nYD*cvQiB^A2Sq#HA2fWOFOHJmwDMXP{1CX^HVrR3IV&Kxp~yaW3f#yc6`UmIX0ZBtwj#`afIBe%l3rjv~YAY~V^O z(0L8=0@8U!)>Om`!sZ9TyB^LJpXsUPR!4fipjq$Xo@)B{C$yJ5?NyJ<1D#fr__AVR zY=AV0L47O&2tnvNPu})ywLG~i2oflzhQYyvv{L%~$^QX*nJb&+)GrSJ0000Eaj?(fW3puTX;mhuhYV|1PsemkQi|+9P$sf5pw{SPfgu=WS_f7(%#FzRthL^ zC}`YT)e!l(;&Hi)#$8v1j(4S{Uv2~yb)C9pradJ>chX-2x2-u95&@5MgL&C*Z0gTe~DWM4f-VSP* diff --git a/Scripts/Scale125/Link.png b/Scripts/Scale125/Link.png deleted file mode 100644 index 3897a50bef7294d68d8c5bfa318f05c0ae49b50c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0nSN8K~yMHwUSFn zlu;DNfA@QhGo$0cNQ<(mg+0KmKrk@F9-t!;ZVXomErJ%IAQVyy7qw{7E^t#2g%AX7 z3QA~EluGunhLS+E7d09+nqM_C-{aoC`I@j@oBCZYT>hMU&bj|{MJ|z6C_o61GC2GL zO1Vm?QsQ5T!u1=faB-M;-%%DaU1fQNNZX$9Lh;VMvhsJLhq|%$?qcciv9b~razDt7Pm>cUzULGQLq=)3y3t^lvgGPf@d7_u9(Gqc#e1IVI-`f5`czJ~YqJ^JPi7+bf5F)}wF&dJzR2fmMT zJv3)x68Y&f?${$#VHs!iVem+a`|JhY)GOS{Y`E>?gQy?Nfi3Om>012RH#ied!ufgG zm-w&W@vZ+<=!#am8u#gQzMnaVT(YU?>_FsVYgWF-e*=C3P-v*CL+4Rc00000NkvXX Hu0mjf+?@UC diff --git a/Scripts/Scale125/LoadingBox.png b/Scripts/Scale125/LoadingBox.png deleted file mode 100644 index 0267c7b3f399ee78b2bf30cd1de8c19505e29906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76 zcmeAS@N?(olHy`uVBq!ia0vp^ia^ZF!2~2HJ^IKBq=Y?P978H@CI9*GSDd+*@v*^1 aW`>QIIF>g)`z!^NX7F_Nb6Mw<&;$UNG!;+) diff --git a/Scripts/Scale125/Mail.png b/Scripts/Scale125/Mail.png deleted file mode 100644 index 10250d3c31c3809d1bc390dabe33ca56a8c274ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c8!3HGtQ{P+wQjEnx?oJHr&dIz4$)-E{Ix;Y9 z?C1WI$O`0h7I;J!GcX91fH32|H2DgkhW5;mh>{3jAFJg2T)o7U{G?R9irfOAY6b=y z`-+0Zwic-?7f?V97Du6s&rHqo20xNy} z^73-Ma$~*xqI7*jOG`_A10#JSBVC{h-Qvo;lEez#ykcdj0WPV<$wiq3C7Jno3Lpa$ zlk!VTY?Vq&GgGY664OkRQc_HHlM;?qF&vyU- diff --git a/Scripts/Scale125/Main.png b/Scripts/Scale125/Main.png deleted file mode 100644 index 1013e158cb18a51c37d1f03e4d04af7d2a2167a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 411 zcmV;M0c8G(P)1qd3K8Om@>DfNVPp7ehXX+Y-57S1}2-BZehBOe3vrgU6pSXG$$c# z11t(ZVF8_WjFvH4!DtPmLf9)+HK^!~iP6XOjl_yw#t7MxYbp)ddd002ovPDHLk FV1gpMtzQ5D diff --git a/Scripts/Scale125/Menu.png b/Scripts/Scale125/Menu.png deleted file mode 100644 index 967e503ee440008e7217c4f3851df947d7717223..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_3!3HEP+-oF(6k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?O(K&H|6fVg?4G5)fv*mnL5U6x`wI;uxY4oLuwu=kaw zeW{b{1O{aZLj%VO7lsLJE0+EL|6h2e;3`HoF`b(&(aP4=(p|bI9=!Y<&eJ1ZHvdO{ zY9fQEQ$xMOa|7drS&UqUC11`a|M>izpLz3)raES0Vd3UEYgAmsvbcpi9GL3=|4V%_ ze^blD=j-EnSR*g;^l)E$_pkojpHeotJioRL3FT~(nuaTaIDUM8FMqhp)LQbLeGM1i ils#uO*zDr+*ccS<+9Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&2IWaaK~zXfT~$kS zV@DM}-S?#{>FO;@mL=IU_INxGMl&{~CSex9B0GKq#g0Wb*|4IDH7m%11yztN64($z zQG_ZeGLwLvfh3c0Jc*4bA>-rtpFxe=@HH4j^gMa`abRMGDC7G3EIJP3SCH-{j=dHebjjw- zn1-f1V~Sd%w?G``OzGyfvcZ2 z56gb(df~>k{Ecfxi#fH*An34KqtiHM{T`5L$f3NZox_k~^0}+LMooL4P7%0J(X}OTgtlc^@V`L3Ks%%)4qzr@D8O| zx9f!mk;0tvgRU;#!d6Y?@yHd*Ch|b|`1b32@4T^3CxgCZjLnp+sayW!O~Fm1SWZmY zM6*_NeV;-A`+FLZE?n`?V8|7(r+9OYyN{Ig*)%3Xv=Tm}Eq zi$LslR?mXZH7w4{M$P^EJGHB`S=SS5PoC;rFXoe^LA82XZ*~`6O1y9jBt%%*cZLpgBG#$*+5VKAOnJ48yQY^I{=8J(Z0* zq3l?6ZkFOddALIog6HDaMn||ZotMFg>w4(<&~6Q3Bw}NO9HlMnEUR`x$gZmZ$agA0 z!^TgR>N;2vCq%I&_aaWvvP|0hf|0;M+a60LHPE*=`hR)5{@{LFy6pZ^t=m^Ho&c^C z^Rc~a&fY}fDn?T!JSqcSp--uhMTy>}Z^ zh3x#i)9)bVvXqSIQpckm)GI#K9f`I55GY${SFbWUr|*l`1=HY9Z|)`Iu|U95t?b#= zzBdH$6b7w=dQ2)lRm?@BmT<9IcP+~z?2$1SQdAy>#tR@^=(XWu2?m29U!Sz0PK?x; z8+DAwBJ>TpKk|T9cesu)Mvw@ars<5K@L+RuV48suhEH|FeQjZZr87uffjqDrJlJ6) zm`n324!?eFC!I*r_vDA-?x{5W+U7YhTH|pf%X^Crjq9UVP6)Z#WC2T643gX`uh0%r zv>=g1!+@0srv?v&!yy7z^oN(y+q2CGX1G6_9%RO_+mbQo;Ec>V?zFVj^n59^Wa znpKueDmuAok`tqjStvvi`8mL_=teiH_1PhU7IXi9pb|8Sr2!<+&40Tg&`0sAg2zQ@VhX67${zW>&nPye;lFm+6)0>}3nk%u_~}Y79*L5I#k@?$@cl(id-VrD)|sK= zuO<~Mq_gu#Wr}f65n70#gC{AELhnA%z8qeUD8~x^~Wg3PPf~lf>{3jAFJg2T)o7U{G?R9irfOAY6b=y z`-+0Zwic-?7f?V97Du6s&rHqo20xNy} z^73-Ma$~*xqI7*jOG`_A10#JSBVC{h-Qvo;lEez#ykcdj0WPV<$wiq3C7Jno3Lpa$ zlk!VTY?Vq&GgGY664OkRQc_HHlM;yP;h5f-X#&oz;L#SdmEEsk{T%LJYD@<);T3K0RXnbv`qj2 diff --git a/Scripts/Scale125/MissionLightBlue.png b/Scripts/Scale125/MissionLightBlue.png deleted file mode 100644 index c508abb1b70ffecacf477fe6b39f8d8392fe970b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp@K+M6x1|*f#O3wo+#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=BdgAk26#O}+x8(bL5-L?bwP!ksVg_KTS95ft@SPHb~r_ww%c g`TsqSHpd7v%=HR$2${7{2&kID)78&qol`;+0JB&opa1{> diff --git a/Scripts/Scale125/MissionLightPurple.png b/Scripts/Scale125/MissionLightPurple.png deleted file mode 100644 index 9f8d28fe1f385083b8869bf791e157fd0d28d3f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1d!3HGVjK4YnDaPU;cPEB*=VV@jWYQgd9T^xl z_H+M91gYdK@Q5sCVBk9p!i>lBSEK+nv}cAyltlRYSS9D@>LsS+C#C9D^BXQ!4ZB&DWj=Gm&h-@RX5Av48RJ>1mSz_-9TH6zobswg$M$}c3jDm&RSMcv+x zm&>NY3TQ%ZYDuC(MQ%=Bu~mhw64+oXAR8pCuViOal#*r@k>g7FXt#Bv$C=6)Qsxa7isrF3Kz@$;{7F02!E= zlwVq6t5jN=nPQcem}Z)kl47cxlxUoyYiO8~sGFE#Y^a-JY@A|lYG`4UW|*V|wZ0@X z4Pk#?F*F!}0iq9*(KpmH067`Nw(>8^Oa;0EWTl;<4OkvU%tjyN5G04$K}3Ll1+w5F z0}3X1=%(fYgR~qNb~;mLa0A0#+0(@_L?S%-P4vf~_RPw{%)-pd%!mK)=Q#s}K0FZ& aADbBZ<5(@~S08Wz#gnJ2pUXO@geCxam8x3+ diff --git a/Scripts/Scale125/MissionOliveGreen.png b/Scripts/Scale125/MissionOliveGreen.png deleted file mode 100644 index 08f75ae3f3822e6bf6f890a0f936816431e02107..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmeAS@N?(olHy`uVBq!ia0vp@K+M6x1|*f#O3wo+#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=BdgAk26#O}+xCp*=Gsq9nrC$0|8LS1&OoKPgqOBDVmjnt{Q_ zzM>#8IXksPAt^OIGtXB2{qFth3YjUk>fxro2EGN(sTr9bRYj@6RemAKRoTgwDeCri zyj(UFRzMSSQ%e#RDspr3imfVamB0pD0ofp7eI+}aqLehNAQv~N3Lwu`DWjyMz)D}g zyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvsfJi^MBT&`V?*5(W8)NaQ$q`*G{Yn%sP!e8 zX$brCilM;(3=n;gjJ~0s0m#W9wv~TTW-8DXAS>+*ZNTyi_@% diff --git a/Scripts/Scale125/MissionYellow.png b/Scripts/Scale125/MissionYellow.png deleted file mode 100644 index 2fa20c5b683a44707b9347d89d29f72ce3a9b6d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c6!3HF^d|7u4NHG=%xjQkeJ16rJB%AK&>&U>c zv7h@-A}f&3S>O>_%)lU20>X^<(&Q_E8rm~MB1$5BeXNr6bM+Ea@{>~aDsl^esu>t; z>?;Zqle1Gx6p~WYGxKcK-|yb9u8^5xs~&FZYv5bpoSKp8QB{;0T;&&%T$P<{nWAoQ z$IE3?VFffHH?<^Dp&~aYuh^=>Rtapd6_5=Q)>pE#DN0GR3UYCSssQqAl`=|73as?? z%gf94%8m8%i_-NCEiEne4UF`SjC6r2bc-wVN)jt{^NN+B2DqdaCl_TFlw{`TDS!-2 zOv*1Uu~jN9%}lXMOH4CON=Y%*O-eLQ(KR$oNz_eDF*ejqF*Z&yH#M{{N;6DSf?8ja znTD`GuNWE(zyQ$)$>>wgQzXDnC zkO2h~Jakj@fI(Ug3_G1EGq{1_F6!yx7$Om#{AcU^m-fs;2~N)vL>U++CNMK(i|6)% OV#d?e&t;ucLK6T++@)6l diff --git a/Scripts/Scale125/Mission_dino1.png b/Scripts/Scale125/Mission_dino1.png deleted file mode 100644 index d8ac44e6f6f351ba2ea6b0b995211241d1322f15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJq2P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0USw0K~yMHjgY%a zgFz65zum+OqPb`gtZZyV&_*#$w6?ML4Fn&-MuL@SA;i+BP%Ga+D=$SLhVVo1icv%S zlbGy|^OH0I3lA)3*qw8B&Y0(VQ}_pLpZ`W=(LV!@*EJ|M1h4f-95$y7W3k?wjk?7P zg%Vu82`g#CY8r-PLcZd-ZA3Cr$FHUo9)yJ?tY=hddJYkS7MwhF*`A4EMTA;c$Z6BJ zgTuhHTXvkkduB&rEoC|TbeN<2P^xWVJ^?p6Up8r2oG=_eI+m0}9qTIe*tY&3#VLi* zQXU@?QX0e=p{N(-9}TCwF~LVDdu7l5oF!1_(-%)eU9t(w)|BOXQ2>tmIipR1RclAn~SSCLx)RL#I( zV_#8_n4FzjqL7rDo|$K>{(kpRtPXT0L zVp4u-iLFv;X=aL5T4I`MQc8-cZc?IgimstyN}_IJim{WOolwn>VCHl{r|7TF6ZQ-9dcxy zg3PX`&m>Q8`~1nP;f#y%oV?QwuNQCLE4=o0dwP85s~1J@Tddcz9ol!owQ!-2hF*-* zyS|hY68T2V4yt9$8ct7g`qn<070?vM!^v`TA)8|FTFEP$4vW+?{9t_Lr0^zjXRR41 O?mb=oT-G@yGywq3oYI>B diff --git a/Scripts/Scale125/Month.png b/Scripts/Scale125/Month.png deleted file mode 100644 index e5089f8de4714ac62372e66e8d97560d1c5f843c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^d_c^?!3HGvUFO>kq!^2X+?^QKos)S9l1X>;b!1@J z*w6hZkrl}2EbxddW?&F10b#~_Y4R074egmB5hW46K32*3xq68y`AMmI6}bgK)eHls47YguJQ{>uF6ifOi{PD zbs{}UK3djZt>nqvW6s4qD1-ZCERRDRmN*N_31y=g{ z<>lpi<;HsXMd|v6mX?v90`zGE;%B09k2gXakl<5wp<;IRwdJb`TMuUx6%m z$bfFVdQ&MBb@02yJV$^ZZW diff --git a/Scripts/Scale125/Move.png b/Scripts/Scale125/Move.png deleted file mode 100644 index f956b07b6cf9de6a6c81751e3e4c00d9b84f69c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y>!2~2b+c!r8DaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9EWB_ParFHODzC@AIW;us`D_nwvyI69)sMoftDS Z1NRCBt6j03n}MnrJYD@<);T3K0RZ@;9e@A; diff --git a/Scripts/Scale125/MuMuFolder.png b/Scripts/Scale125/MuMuFolder.png deleted file mode 100644 index 337b77dbe491b49329740123e9ae3023a886b396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_`5A|IT2?*XJ3i-X*q7}lMWc?smOq&xaLGB9lH z=l+w(3gmMZctjR6FbI`^Fyp;6`3j(*l&6bhh(vhuj<-qw@P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0eeYAK~y+TV|?=d zI|CZ{52f(~CMb;z7@;(NfK4Y5fHnXBk7E0bS<8AS&V>u&&BEOl3zw|>{pU}7OpvIE5I#F0 z>JsBZfZBjuHa1qcHXs+L&c#dD16>8QjfI67$o=;1`?Oh0qa*wv+JFGN&ZWyY0=30P z`Gag@Wcd8~D^Ocxn6IRS7*qvTohw#t0lF$CI)Igx707-6;p5D?%fo`bq@~0m3LpTB z&L>Y_gamrBFoPWV{==ua^H+xidCJL3L1f_oyK8xPxPavAH}B@oUlkPKt{^WB5l05- zvGVKJ?@3b^%E?JRdh`s)_4jpARZ)OQq2&ZDI1X5V00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0R%}zK~yMHV?3>+ z$^Zku7@1iA|6_#m7+8S#KLf*KR?dZdGOt+JdH?;1`1Dlk=NA@+{~&!kxkb0~hyztH zGBW=E52P8)zrTsq&tIUTg|jDs%xtT#u(mJ- zy71fgZ$JqyPR@y44GOZ-Abmh-pv0FiUmrbr%FWFsEh)ju%F4jN002%qXPpg=wc7vy N002ovPDHLkV1gCxp9TN` diff --git a/Scripts/Scale125/Next2.png b/Scripts/Scale125/Next2.png deleted file mode 100644 index 6453b9b31849febc517e065601e993885fcf82eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTONaDu0cV~9quso!ZvCqoYIEr0I(f5gD|pyt-K z4_BPI6f+&>eLvpFmlNv1a-i|eu|t+q?p^-y>ADOHmD_8Rq4cNX~@6&$I z@_;Wb0;gCKnJjkmJi8#)!h5E{vOd9|dB&2>KXy1CYxrNn{1`ISV`@iy0V%NbUK2z}@ifP3g;<-Yu`ZF-`3KqF)cXFC2H_H)dN@HRY?oRp$2DEBa!s0%ffnL)^n$ z7a0_33AIji=G~ela*R*lk2%*yH7<5Zft{b+6dh^;EAACDEMl!>Du21D9B46vr>mdK II;Vst0NqeV9smFU diff --git a/Scripts/Scale125/NoResponse.png b/Scripts/Scale125/NoResponse.png deleted file mode 100644 index 5738f4606862618586d4f89813b6c231af01dd50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTONLwjaOL`j6Nk5zJhu3lnFep0GlMQ#C5H3Nf< zeMLcHa&~HoLQ-maW}dD3``!E16*5z7)x%AF4SWlnQ!_F>s)|yBtNcQetFn_VQ`GJ4 zc)4sUtbiuurj{fsROII56ON0GHI_ zN%^HEwo0X?nJHFjiD{-uDJiD9Nr}cOx`u`+iMoj?#)i5n#>Oe;riK zGN53Bhi+;fFi6XRVW%@?1~5h$Jv?0;Lo|X*Cs=zpB}%m2FJ7V8B$d^vCos{m#aV#2 z@kU6pv!ehn@4S__nmgFq+mr+OT)n$Hc||Qtf;V#~Dr($JHQ?gf?ND^?|9p8RjXzSS zE?;~x*REpz`%iU~&auYYq$RFjd#rxf=^~S`P=~tzKU$K@c!g(gOk!hL&?cNQpYy@d zisqQGD5n1&`eJ>-GkE4Ty%7K6GO6JG5yR{69eh(Q5A0Al#>$!$&NAI=@jijfGYeLJ zRc`WL`g5gTe~DWM4fI?gtC diff --git a/Scripts/Scale125/NoResponseDark.png b/Scripts/Scale125/NoResponseDark.png deleted file mode 100644 index 984d5784f4012bd21481c38e6b352e2604b31020..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~8rm~MB1$5BeXNr6bM+Ea@{>~aDsl^esu>t; z>?;Zqle1Gx6p~WYGxKcK-|yb9u8^5xs~&FZYv5bpoSKp8QB{;0T;&&%T$P<{nWAoQ z$IE3?VFffHH?<^Dp&~aYuh^=>Rtapd6_5=Q)>pE#DN0GR3UYCSssQqAl`=|73as?? z%gf94%8m8%i_-NCEiEne4UF`SjC6r2bc-wVN)jt{^NN+B2DqdaCl_TFlw{`TDS!-2 zOv*1Uu~jN9%}lXMOH4CON=Y%*O-eLQ(KR$oNz_eDF*ejqF*Z&yH#M{{N;6DSf?8ja znTD`GuNWE(zyQ$)$>>wgQzXDnC zkO2h~Jakj@fI(Ug3_G1EGk`J5XzuCa7@`qe+P_!dIZ@*1{NH*Ju1X(m-aBZCHG4^Q zZ;0T{%1~W$RcYU>W8v&Bv;A_zo4Xosa7^ZF^K#Kux_IwMlHks~N9%WdpHX#JDBX7d zB#_2oyzN`JL2g2#E^{KAX?KAM-(|KcdZ~)7WFT8g-)}GjycasB@c0FDFT-G@y GGywoFNGRg~ diff --git a/Scripts/Scale125/NoSave.png b/Scripts/Scale125/NoSave.png deleted file mode 100644 index abee88a72b13dec8ebfc4fcadaeb298b63328242..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1083 zcmV-B1jPG^P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1JFrCK~zXfjg{ML z6G0Tl^S5czb{j-RG&`H5YQ-Dcs@<8SEoi0MNdg)bRtXn^pktTaXW)*5s@AUVWJ;?6H8(UA+fX^lIclLPxIK zI^@@Xm;BmXbt%RwX=QR>X9|l;bs(lJ+|hpw!lFmWXxkli?ap{ZNE9!zGWoLSmppO| zs3Yy2!+w3afizW_p3!P8N@3cyceETbWtvu*-qCWcg*q~|bGXu~b)=Qe7t56>O{+FX z-MIg}7@-c)9RtVbIRl2`ya=>AxlhwST4_S4HCu)nCYnl^#D%(Wcsr zgvdXcddrkDNmR?N?BL~Fim<_7Nrk2ksK` z!E4QqfQAF;og_V*0A4@=hiN!KI|O=?sR;zJCJhH7G|8vLYM~Us`Y-wq2S(vDXbI(n ze~YGCWss%;;%9t8X>@js3Rwm^b@8^zncfKW=-Er2A=+z-)OYYS%|R72M1`QVuI=8x zgcr2!30Dows-A0f*FcZp0`E6Y06a43^h*Lq{-|+sq955H`cxJsksP6AKI#C z|H;<#Lfet<|MGn{LLpDsINw-^avr#u^EV$({3`oIbqQddNKs(w-Dd<$Cbc|n=T>b# z@Mz+7kaaD$RXml8+j*X$kQ{-P!3+f>XMCt1+;HV}KvNUYU4j7hnU;rkP@lPf2Q+nw z23B~vq0JZvBGgzpZVROV)_>7|IOy}yGE__W$gUM=gJ0ng(lm;2QQ#Mc5obq^oVXg~ zEXd21n~$r09a-1N1(L&Ot4nqKhmw{nTw`{`-|ExJH}hT%$WREodU0jc z@mvT|dFIkx2!ZrMN6~?13MDjBhzfW8wjoSQ0~wm$br^FIp_qVd?`YVRsUtHzBlBL< zl&NrWzx|~Z?y8Lg^VJqDE(;;YC*MRVO^fV1bhhQZvdzXI_Rka-!qkOz!j|2AM+;>y zpw#|k(&pqQUVSiBX9p&Ul*Enmar&p$QYN(=z2BZ0{5buKW(WZw1mGS|;hM_ho@Xte z8Vf!vQ<83fmP1QB61;=!207)Pj;I5Mh61up$UnjGz|6xzwWt69002ovPDHLkV1j}| B_qzZ9 diff --git a/Scripts/Scale125/NotFound.png b/Scripts/Scale125/NotFound.png deleted file mode 100644 index fc9d7a960b16b3652b5c189435d9e1469f9c47a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^(m*W9!3HD`$b`lLDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9EWB_ParFHODzC>ZAH;uzxL{r2oe-UbH&=7aD1h2|N(kl*t1 zF+<~dp-Zg7x2(5S&YAz_eDCcayoGBjk_4Wwo_|b%snoE;BbG-gMBLe=EraKx#3DnN lPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0)I(FK~y+TebV1g z(@+$^@&0#!8)Ym48sdY7N1rq%MqzBM47c$^9^gfy#F(f=4H_^$_#+ww!y;;;Nc_RX zu(iEw*KVcvc5j|@dt2z1n0z05KRx%f5@~v*$slLy35!i)y%S#Y8rFZEH;N_3cqy+B z8iyDpLun>wKtaM@*<^7}#1wq`zXYB~0?s4Bdbv{H++%$=#2_LCCxSEKc_e}nq69pN ziuJ5S&&~$3bf&O)){~JyMcg9I&m$oe(qP1*q*6C_%J!Ytba18v3PbVac`TllfY95r zTvDzXZ@)L@*Xht~2NVV(N8^fAE7#f-4YGskF8QGv>pRZXdvu`K0f{7*EYJ%Jj`G;p z{zdf0@p+6ws$bpJsy6v{Xs(vr^9wYQk0@SjQUu#QGkbJ#$=KM75LTor1mZr?w||@W z-_wCs~+Sfy=l^ks)QY|?ha>l2!&K2_c4-PC( zIalslORs7hdn$1v1m;3gtAC7_^58e)iurEWpM~rb)?WxO&*C|Hx@bQ7&_;wxs+Ab` zLv=7n2Y3;xa3Fq>%wfI8&asUbvsPw_5P@%(fdeuS&GLGu2 zrK3yB?#Ns7=!@CJUVaIaV$^NDKJrpe>Wq9O>GMb7vN zWUXwfmMeaifPi2YwOn(D=K>n4>oP3AlA>a~60+7Besim4Gngy)^j>prE>^i(`m|fAXFW5B}D(X)&s4_=*~2NxW?M lXfNP!Q>6JKhk~eq0Z{V>_Vsb;DH1>}44$rjF6*2UngCqpB+mc< diff --git a/Scripts/Scale125/Opening.png b/Scripts/Scale125/Opening.png deleted file mode 100644 index b92633460c9ae904be21a1a8d0906a516c35e2ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0hLKaK~z{r-I#4l z!!Q(u8~^_g6G3Dk3>i}yqMb}}h<=Utwne&HcGZ-PWbNiY)&{;wTkvzv{$qdM8nd> zzW*i{zHZTtl{|}Mza0vHI?@V{UM@o)ZVLuu4&}ta!VjmPMTM6xy2+A>cs$_=e_l<6 z%pf2NHG=%xjQkeJ16rJB%AK&>&U>c zv7h@-A}f&3S>O>_%)lU20>X^<(&Q_Ef@YpBjv*4^bB{Z6F(`1bIP4dAweHvdb~TlY zmNQOwY@E}2LhV`R3z1DOwp-4d&Ai|8sP}){@t_>TcieWoOqNH1CNOxq`njxgN@xNA DBjz$u diff --git a/Scripts/Scale125/PackIsMissing.png b/Scripts/Scale125/PackIsMissing.png deleted file mode 100644 index a817681a88de3f4fc4f30fa6f94c4cb18d08d350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTON(Ad+(F~q_@`Nxl+uj}{x;I2Ea~60+7Besim4Gngy)^j>px`-A7sn8d;M@zlxeghKuszt<(9vAM8t*m7 z<-)~-2M?MTe{OofY{B7cHaTpAxODF1Z8vSUZu4#aps)V?x3SD)%_sMN*n}RpeXN`# z+4w2MZ87_?_8UV6GKIgy?LK2;Fwr^ zo!jB}jB{LECrwzyDi_Agk$BIjD*E@8#pMa7t@CE3q*l(G@O=6UC99=*FGXTS)+OF? zO3AF2bx}VOSiko5q7M%;r7s#5noPeRa?$nRN_pu|*83;OcQ2l_@x;T2*ML4_@O1Ta JS?83{1OQ#!e=7h0 diff --git a/Scripts/Scale125/PendingFriendRequest.png b/Scripts/Scale125/PendingFriendRequest.png deleted file mode 100644 index 30087cdd670b2062ff5c4ad6ab09459b879e0502..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1424 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 diff --git a/Scripts/Scale125/Pokeball.png b/Scripts/Scale125/Pokeball.png deleted file mode 100644 index b45a24674c3f71292d0223aa73048d00a707a417..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1609 zcmV-P2DbT$P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1>Q+SK~zXfO;%lO zR7Dh?nY(+pyX|g&*tV3WMI;!+plOAsLR$+|QG941n9xLHG{#q-^uZ^MZyI0xc{XT6 zA}?YHF-mCyk@Sa_QVXpuP=5MDv31L~yLWf*y))x?<}Q@!bne_U=X~EeXU?5j-g0w= zYlbE?=XhvL=rs^>O)|_m<6L13gfs^FMK#3)G$0}=wDFDwniu<1b212Mj6F;Y0dy28 zh$3XLOx^GptBr}V5y7i54&-Q0BU!MNh#R^sBH?NQI0HMwU3X-3OOY~EW_I0!q;A4OWW9LLy7KS=fQKP{2puIkhlQ=TF^+KFmQq?nxnrY{7)m< zDuK)?s3eE}5N@8fKc35CYkXuv$sTK{maiLT*b_g8Bh0u%bLb1ML{x@9w)qaNkxD zVD{QOB&NgU3kbtBD)D`~;Zh;)D&>0xWHql;Urv9S;l2b46v)TzBDRCuT1rusN+Bwg z$8(|oP!J};^ue6Y)-KC1RuFY*X)I!g&6ex5uX>$Aun*|SOuJnsr3~4bH1JRqKdd(i zMTI96S?91NifXdw_~C~7Iw;(qTRip4Szr2NzG~psCKUo<8AswYlfHGJs~e#a8v>Nd zSGu6Is{l@Ax$T)PZLLjk1c-_9vP{OAn}2|XNjE=|&y2X4znt_?ejPNzWt=R`7f@_~ zFu`JGhmm6QP2gX$s>%wZ1{RP?5AM;QhZ+!tXpGFH-%wv$SrJbpO7VRnr~r88*8NP@ zp+kX6k4@j4HJ;KUJ&K{=Rr3#e`>XEWMkptay|%SsGqfSc_*3thJNFhqTU(Rd)4aPh z9-Fv6J^uG35)iTNu0!p)Tn^dEWU_^VJ1{uRkN3?q4qO0qvZ~_4_qyp|FhEO7D?j%B znspq^;X5jcGDU}pI{bQPM|&$u4@(#p79M>4&37VKk)#AMy|lcXdX%PBbI4TJZaVSy zk$60YV~BDDDin(l2Rrw7>~Aq;LREr3IXR7G{?=%^VtS%-Y81(=ud9CloulLwos>lA zIEC3eb93|a`CPuHrh5Cft;u8+%&`_Yo?c6T@%dM-=MoTi{l;@YBj4aW(6;y0b|R#z zL=Fs|3BmvuC-k6DwLW?B)X4A{-UOZPR(PeklRkbW`z{U+4qr1m#(d+xC^n!JoAl3~ z{r$?7F{DjeA#3MHp8?B{S6I%vwYrSmotn9oO070F)Z4a=FrPq~r*VlfROXp8=g#+E zLJ*4U(xxunePt~;z%fP#{tVroFm+o z%k~~AYdJ!<$k8EqL_Pry=PsD7M=N}!PtMKY_CRG&R*jvhW4M4flohv(fxOX_#R zh;ESp2;`J?^1)nEc&3*1Sik&tL1oj@rK<%H+6oCfDiX=q%UzL%UB-&;Q;O!;;CeAM z{MY~jJTgT@Hw?wAbs@)H7k-ghC?f0_6UbSRd-{n&a>o7#QtMz@1U!Fg00000NkvXX Hu0mjfWES>( diff --git a/Scripts/Scale125/Premium.PNG b/Scripts/Scale125/Premium.PNG deleted file mode 100644 index 02d8fd2752861c820ced9692627e1f5b86c4f6ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1040 zcmV+r1n>KaP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1B*#SK~zXfot52h z+f*Ee^9OPP0%>A{m5QlU6&nn7Vya+FLql*0LWnCQxC9A}fwpxm-6poC-MXbs)1+=@ zJ5EwNjvdDziPLnGUfy$JuVG8d){7^0qLcHS_jkTBRVTuL@IM$wp*i4X`pVS24hBT8 zPHX5njC=529Ybcf-NjMSnm$y^hh_ybsn!Tk5sBRncD*j@hmbM-E?yPGW#_FBo!U@-T*8S){vvuDW1P_myuS)L{5pxpbE zoF{Y0-}xHdxQkAE1%dGq;;w}_b`Tnu5xI*p{kqz~4wKhf9a+{!(0hSQBaHE~DAhK4 z{U?&B_9fyl|Ll9WYr-p^MJ(R;_ED_1m^zU2EmH>UV~C6$_3*!hJ#LGR>@*H@2=qw= zSfXWE3r#cYtGuylL-Pth^Ig}?I} z+RE$jw%`fV25NT056H$fsB?nkdyh=yo_roJbEBC&B}|byPDIb6aHaMr4$bc=q_lX9Nl$Q* zt)UxgaPpIsegJ2kB`b7KZ}?lkB6D=Gf#kMFRq3vnf}$6=|p;3O6`ZU@YG+p zrTVz``$d_!Je*iO$w=|AFhv}5O5J7ZKIil?Lia90XPK;!RfNs^uTz91eYlq8J}-a2{JmRn^U5%=$=W@6#W9PV7d#I+#~5{mt_pY#A>$A?OX z5C^}?13{GUk=n%lorYvpu_WpH-PI-BzBTF0000< KMNUMnLSTX)=HX}n diff --git a/Scripts/Scale125/Privacy.png b/Scripts/Scale125/Privacy.png deleted file mode 100644 index 2d804914910d3acaa773979706a2390c8bc7c5ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)p00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0d+}4K~yMHb&x?z z!eAW6-@QAASHW&+Y|Sk_L%->`};rd^X@-xJo$8-8KoS7W`wx!g+L&VIF3UhShKk+-RLsv7YIkt z&E~Gz0U}Fb?XKQ3pWP_`1CA~{xS!(unVO0#VnM6v5AF?10s)UJ0zBAKmXJvwM5TyU zZWw0oI~FwvcqW}-WS-50(=kOTYPF_eVT%SRT9E~S|RYLh#Bf|&a-XX=6T+0{-e2v=f42r Wbi!);HL{`r00005r00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0a{5!K~y+TjgxIt zfTJsT1;zdVzX&m4-KZ50Gibqm_3jmP@} zZZ5KT)rK(4vDn>X(EhNXf7wXHqp(I3WKs!~3MsVpp*XSQ6;yUeH%4gG@_gy3Wk6;I zz5WQ*a|PM-0bk!*flA4SgZgbAv1o*kV(y4lx=G2t0d!@8_tJXwfM`x{Lrrm|0zO)=pa z(5HF`B)_NwltYr2@YA#T;zLlg2oh8BRZ&4MBzXx}xZ^3G(2b+fRQo8OrdhJz?J&53 v?M{$PM48bK=IpvxD0$_&?&4qnLO8%5iJF#DUDNc500000NkvXXu0mjfY&63s diff --git a/Scripts/Scale125/Rainbow.png b/Scripts/Scale125/Rainbow.png deleted file mode 100644 index 6c576ae89c38b31f8597d98bbf50d302aa342928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^MnKHO!3HFyT>E8!6k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?O(K&H|6fVg?4G5)fv*mnL5U6#VSz;uxY4tb6{XFSDb7!^QZ!$^1PZHvD9A zdh}!mM*|OMvx$R;+@8|w$6BW!oP76qw3n#{UyQ~*kGD&t=ZI7(%;IR=;UIEk;jVzY zD<_@VT4;XgG|Tn_hj$sUpW!l1SR25*N;P!y4wkYNH-bK>Zfs6cTf+av>{9Zfx3qW7+)oo`nLfKU^QVL@~ej(0IhBqB5mnl7Y$^p=Fn5 zu+Gc=6w-Q~NA7y-Z=ZEB5-|)v{nZ~enJ3sM#kPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1?oveK~zXfeOB3$ z+eQ+sKF|#iAVtm$Wl0{%lDv-C@Pl9dbGsj~`wRXu?b_kdSaXt`gCa;AeK-pMr5T6h z3Iy2bBRears+;0p|NVs?TBI0F!RNFhYg2ruDLxB9LjdYGtTni^WY4tx!%XCrr>b=rkraCecwl zpgsb9#L;*?I4UTSD$_|WjPZ#pW%E%qYq?obc|&;b?#KugT526IAA#->S-vP(9f99^ zD|R1gb3^4V1xMPDPAQ#GaX{G=@2D+p??fhb<9rLEF)&~U`k7<9V>s8)ZcSLg>kr8m z6eYwZ*HW`1=VOZrTcI>>(`@8er0DcM_L#5%k-u7ruco5Wls~JIb{lGI@-2BsCXKd; zDv5R!(>yjc5F_UMhBB|=``|tIb$Dn>h=*^<*#oA%Ap}D5VkmO)VRwDrT%FZb<#ihB zN?^3DMQo+?(g76i`!H~HYiTU|Yx75N%EYvYNlHx}^2`=RTI6YPLMNhiU@9#5R)Q12 znb?S3?HG}Tbpl+1C#hLAHo;fCHt2IHS!it zlB+2lQC)Hz>Mf%I!e(*1^@5Z!dbOypE}F};sw~@1MS1 zRE(<=@`2&-39_3zXHDV}v7q5>X49sU*B1>))Kw_P!dTQ2?K(j{3Z#=uBAc*227=d! zDH`l!7VmBvg&aXb31qoOCxp;ir`D{N?cEKOqQ!L$L_BpvX%;_zWSX*B=`81%q+`g> zaEJqmxZMP-$FhD6H@NDVNL#D%*g$l!=tmPx>$Q0D1VWL-JRoBj$pc032^Zj+wHD~S zpnF4&eley?1*d4c3sNeKcJ#?PM2xN%B&Rd}MrXe`pCBiYt5SCRe*)@p`SHv*%dmY! zexQx8>?%qOl_iSme#mf4l?YuVC23pwEKLT82S7t(m`pdf4sPSK$m4P;jt=5-C476y z*@Fkc*{sDlr?U@rnySf!X0xa@4-GW;8-Nt|VR)IZ+- zyjZOAaSoaDoGz~fcsVCRK=vt<7^r@G=N7AaGFIb46a}xpTC_?gh!3P-H3OBK`{G%a zrba&fVLpE~|M33&-Mjzos@?PF@$6hopKz4eO(JZZrnboQ#WMc>zB)PG;h6CO-f&E= z7Gi!BZ*PTj*J)uDQba2`n%LtXzkU1D+q?Vwy4u;4PX7>3=N%|}$p&||((}XYyO){P z^7TtIF5+(|!WwowQft#3Q1Dv(`#*fUc8qWg^M$7>b#*CGFY_Y~E?1V|_hv&Ya6zeb z^U?F_Wkj{W-o5+(vwt2N1(kr<-`5=zX4GAza;MHN1d0+T2^K>p)WhM7@)6I&sr>n} z#@XMt?@v#k{_w43-I36}VFri@%tn#PkogzSn8M2!@y)CF{hRpWo4PKSH_H_Y;UOGs zyZUYx0^tE%nIV!6CtRc=R?CeJ66Zzi>98qv1O`vmzCoDOE1 z9vqAlrH~$t<6EJlH#`F@K$Ap`=IP<<+2O01&23_}HcDHS*hD4@b8xA+=v{QiS{xZY z0`8-~aNOIV02Je-?zb8m-4OIWJwJW_$0@J`W_8`&to|} z+h7CUV;K1x#4bfTPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0Ut?3K~yMHUC=R0 z!$1@V@O-ffwFuSP5;0N{an!}l!QIKRUqKfaKS9Ms4HU&%rC_6y#w3@fO>=i?a@SlE z#fyS82mkE{@4f$%97slpu}kZ(FXQH+ zx3Y;mRIo9oG)}MN19NwO5pv@LeRFhIlHv8OXi=OR-NAENMl&iJVd=2*qOU6aSkdN5 zHdLQJ>)QhGNR(xU+I1RD0eJF#W~T>giU2%PK$-d22bH?(N20+n9={pZQWa^sXx1b| zIJ#d}(BYA2?*NCq;`ybwwgJO=!3Gxc0_t0?QC^2<7X{M*`T&?0w@zErN)5XHf;srr ogcD2{r>;FH04;MVYr`%TAeckxapRe7D0xQ^6_(~pb|F0jvH+9DD4BNx| z>lKbJVXU*0W8)9cW(!TVG?33x=-60v*RSn%xt!q#M$r`-rT(+MlqGm5J6E@-K$*kFAjtg>ybHNSDpo+557FR274PSXUN z7WSQnD^{K|&be1M;o-l-%L6zMF-!^i_xCq@p`yw?1qPRPwq1r2FIE~G7#kmc+HtVQ c$A^c(TCPxTW%1%iz))lGboFyt=akR{08U$y761SM diff --git a/Scripts/Scale125/Save.png b/Scripts/Scale125/Save.png deleted file mode 100644 index 6814f3d1f483969318f7af2a70315feadcb595c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTv!2~23Z*SHFQN=;-P7LeL$-D$|SkfJR9T^xl z_H+M91gYdK@Q5sCU=S(+Va9uD@)bbA#hxyXAsWH9eYg3V9C%!!%@kG`{`=4VtL?)B zw#3cR=}}3ZFXqj>_hoB}u_4?4xgGx&HZlt|+`iH5>Jzp2+YY{Wi^JYj?w@kYYQ{wa z-p)76zIb{+ZT>sQg!iiZ1$U|6ELU&3>^zv7er2w@MR8;O!5!0C9WTCDHaH^LJZtOZ zL&rbfu4{3T&-^R1D#S|VNZhJjg+_5dqZi#foDygL;=|5U+E4aAk?(b{&n)KTYy&!% N!PC{xWt~$(69D~eYq$Ua diff --git a/Scripts/Scale125/Search.png b/Scripts/Scale125/Search.png deleted file mode 100644 index 5a43d7042bd69fe5a9e9db657ae2607b7d017061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0kTO%K~y+TeUsZx z!axv)yW0ZALJ(9AL82x^)GO5Z{!gG@U;-XU5o5zi5DKNVwCl99qy>ThhW%&f+nvrV zL^mzdcITGM7!&r&+g_zm01V67&%mCyA4;KcRoJ5-;CR>j$?E`KKt2aE^e9yu|LUf_ zbTLz;G^Iq#rL^w?1sEJtYYrCHvRuk2vIKzRxYN1){xyn5#Oh@h(@+8S((Hq+oM$9T zF@l0>pI^IhOqk>u!-+XF;hyvc0}?5@t>i4*F-)6>5QEPc>E>}N9*c+=-4Kw;M6|B{ za1R(ZYOF7y3?AF2i$W^Y&Q+1Tal1t+;VWMpJCG$@?2^`-hB=O9X z;jKJ1x>O{0l^obDm@i%r3Jv@v9_t-=M%Akv|F%#MVG%H4LkW4fDabG?CJ?m`1Hq95 f*`PJEF2>j&j(Om-PQHB?00000NkvXXu0mjf_b%#- diff --git a/Scripts/Scale125/Search2.png b/Scripts/Scale125/Search2.png deleted file mode 100644 index 5a137bd9e2f39deb0ddd188ef06fcb6fc9864a6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv_ZP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0Z>UqK~yMHeURHv z!Y~wv_YZ@PX$%D1fQWblodYKK%v;bAFFc57Fd_P+_(Gx!5fB+lxhaDPkDfVG7EDOK zHox|KX-`YE1|v*d%vjuEqm4EEGUw#|LaNyxVg78SeA~SONprW4Qn}HscLy-%@{+;I zT2>;H_7c12;ts0q9xiCeojzp`SXZOkQnhpWXQOSqD7Ubrr`A^BhQf;snP?71;Y2!g zc%e5Y@B~H55r9CzFfWJp&u(z-KT;JzKM+)V-pNn5OYa?%-48*v*Ms78J9eBIcaqB9 zlZ>y?8{)Da_)U0aGJOYGwUIJ3yThB&6Kv>-C$CM6+D5ZKRBhnlsWMA*o=~z-s%tyI zEBcCwS8yf)~+&#_ug!4$^ lvRFgfk#a{N8E(O~^8@~h;_iG)T7&=q002ovPDHLkV1i?mygC2? diff --git a/Scripts/Scale125/SelectExpansion.png b/Scripts/Scale125/SelectExpansion.png deleted file mode 100644 index 77c75c950cfa8242175e74dd53908719cee72fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^YCz1v!3HF!&hC8yq&N#aB8wRqgi1h|@m`vI1yC@@ z)5S5wqBr@^r_a~x+Z;I}>i+yQzmRu;D?&n2lKmEM1S5CP$4`g-+s?=TH{c1`^Qm~V zQ3vOSgFk%?j%}B(XFn5Y@OvVo&5LyZqm|$Il!&p`d%HQR&!^Z?Dfg h&eWdCp)D!Fz>x1Mcim=N#si?e44$rjF6*2Ung9cPMl}Ec diff --git a/Scripts/Scale125/Send.png b/Scripts/Scale125/Send.png deleted file mode 100644 index 1e55acd4ab5a4d5b2394970171c33849b711155b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^d_c^`!3HEhORwJpq!^2X+?^QKos)S9a~60+7Besim4Gngy)^j>px|Xs7sn8d;N(Al9)JJ8|NnpE0|%b#-aE<40R%Q%{+Md>MTbWkA{a|XMg8; zZT3ES!?p|Q1*KaWRy8qAa1*He^z88eRo`wVm>Jdme|!D^qPCU)Xssfvdur>{SdWWaEpgK3S9PC`_Oi-6DOjZQz@*kPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0VGL8K~yMHg^=w_ z!cY{4`;$xRi(pw2M373^3vEGWGO;Dm%atTYXp)v6(y2slfy`PhbC#RTZyk5nbrVr| zIQ-7J&w<08Y3oK??_2aH0qVbJBCB04U*-w}-qo%{{kC~^Nts&;(F|gfcXSLvF4kTh zs)c5_yxY7WkxlXK%jFG?QB%36=otsbA)A64pjfC6ybv~9hkBkafC^zRdI@hq`V?wK zXs&J^4^-WzrteF1EJ<3-bK@hDxEWOe_ZsygecC52&1fi{QC0cvQ4I2|9~7%18S>@< zI1g3k;x>-5qy?nb&tp~e1&<)es%EM1e;fNJM8cB=-|qa%&g|kAgk^u&QWMv?_*I5@ tgfR!OC@Xg~ob6OZP$M`GZ=HhP{{!jN1QV5cV)_68002ovPDHLkV1kI~qWJ&- diff --git a/Scripts/Scale125/Share.png b/Scripts/Scale125/Share.png deleted file mode 100644 index b3cdd5af0cf39bccaf3f5aa397b2d93185500b3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401 zcmV;C0dD?@P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0VYXAK~yMHm6F{{ z!cZ88_a|2uT@)pV5G69g8ly$z>LP1U%1Q`Pi3NVZBryCS6kCeg+8RxV-TdO5r8VZD zE}n~X&ikDA;~d7Ed}1L^Fih+~!a@WI)n?ZxQ0e^o4syQYrBFdSSHjX}9Nm%Wm!3!O zkaJ}(`7(yq7;9SsE;5Q=QtKTQN;M2jdrrHrL%hto(oKM*s145$dT-W0CFhUQM)U}g z-IF_mtGWHquPT!TdL<+U1 z7f(;GwgXN~(<~%7l`YbTCTmT%z}zZTtc3OvW)t8~Ww3%o1J}0?QG95@`1PgY$5)8* vNigJgQr5lNpuwvV9xZL?Yo5^51~l6jXp%+YqHCZo00000NkvXXu0mjfmqn-3 diff --git a/Scripts/Scale125/Shop.png b/Scripts/Scale125/Shop.png deleted file mode 100644 index b6fe36aa86cfc8a6160b7bd706f36b8ad0b56ee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1SBVD?P>#3jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTONFxS(?F+?Lcx#s&@b!Mp_{7WA)C>>x?o5--r zN`YUmVTnkj1W!Pvz|tEc3s*8TsreZCxC%5BFdR{ddDYNRcz9v816MznMMBJ;$7WMJ zIT(CvIZ}m~di3r8H5hR+9@`#on8eL~phNdggP5131jEAniW%$v+&==en8DN4&t;uc GLK6ThA3uQr diff --git a/Scripts/Scale125/ShopTicket.png b/Scripts/Scale125/ShopTicket.png deleted file mode 100644 index 9a229f2b4176e7092224bb69119e1e6e07b73144..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mg-1|*kkVowB8jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTONLwjaOL`j6Nk5zJhu3lnFep0GlMQ#C5H3Nf< zeMLcHa&~HoLQ-maW}dD3``!E16*5z7)x%AF4SWlnQ!_F>s)|yBtNcQetFn_VQ`GJ4 zc)4sUtbiuurj{fsROII56ON0GHI_ zN%^HEwo0X?nJHFjiD{-uDJiD9Nr}cOx`u`+iMoj?#)i5n#>Oe;riK zGN53Bhi+;fFi6XRVW%@?1~)KD_IkQFhG+!)_MG+;PLyys|9$&mA8XyMTefg|iRd#v zQZ*D(GAw);{6py%(=l~E5AhV?Vtb8nZ)PaJ?YuE=bp@q z=BSQhE=dD6`NL)A53io%^q;0@u%WLgqvBiTbd3&!?yW+tEKLyxhBJ8Fl22dj7xTW_ zpu)~_C{E<^wT|vyp=U2&mCq|r3Ulu|EBS}hc~#$b>-va!vr}GZ28rFKw^F<#*?N19@yddFrK>J+vvyiLBp$ zzDg!AbBe|l?l-;?tK2qRobh(?eVdq_F859=_s8YE@|%@z5Sa4rmQLc$=MN4mp8ctn zxYxl^@rLaJL#cxQzj%VDDivL^ysB^S|KrE%^L1~2-13f$n72G?wSq&E?EHHQ zmYy#CV_*B0#UZ(mUVIC_^;hwJR4t#d_qp#U#BC3qQaKtoU;8;%%R+vo6aPL2+&*r2 zO*4r_^r+&NDBWvj*LG~K>3^9v_e|s*VG)DoysqLdrfZtlv{pH-j9F%A+pBn3;-ErD sLr0R^N^9YN&vTd*k|xxLGK40>6k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?O(K&H|6fVg?4G5)fv*mnL5U6m;-(aSVxYe|y1@k-Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0-Q-iK~zXft(NI> z+AtJ__5SbD{ZHGOPG>qL?PO^ogb+3xYy;kRn_A`XVFeDakJB9c9_d*E9>0y7OBpAj(mUKcchGyZn;+dN6(ZY z^7WrbsTv)V-k*&n?;0wd-I}{TPNv$)j^X_I(<%}a23KFPksod;9@5zIz2@=$+aFWp zHOAZ-QE6Wh5uq>+8(A#$#kXR4T7)S>GYT#~FCo zc#Nz)4(Q{BUfOqv(47REd0%*ptc9}wbZM0K9U?~afK2SQVk1}Am){0`zSJR8=xb~C zUq1Yp?Dk+4kcBk1BbpW(J6b?Zl>T$z^u;fH3ZYmL^`<_lPFy>eM&|ocbwEP>~}u!jTiu&Dg_H<H$(m zGy?ou7yNnRGJ|wud8lrLNXWup0~?iQ($DT3hw%&t^pqMmrz1?hP4RV23VHodFc98q zKDAYsnj@B4bk(=$0^&LdzQWD-gb!0Xn1wQB2W!|KyHd-JC>VNop`+J^Z@pZ`-Rex;4TnmmGU3$c0`7)4aSJWyVcK-Q^ zGd35<9-eLfe&eo=&WHBQ%*MjP&Hc-5okMn*AAWv5Uh&CK9{CV pm?i{vzp7%#0wu7&|4T|Rguabfc=P?^RA6{9c)I$ztaD0e0svS3j7tCj diff --git a/Scripts/Scale125/Skip2.png b/Scripts/Scale125/Skip2.png deleted file mode 100644 index c4d1aa87755a5349bef981793c47bbbd713f6560..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmV;#0XzPQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0a-~zK~y+TjnQ38 z!cZ6o@O|F&1Jtxw*o9@w%|P%CQ)g-pM}y#h zvGY8?J?ET_dHwvc^74-unkpgvj{#LdP-Ms=ELB_{(Hlr!$_gnuW7AwP?F(h6{c*QP zjOJ_3@q@k@hvs8NJQS+O*kq1hYqq;^gihATS?h^iO1QmZdTXE1zqBz=(Y}+#J(ow| zf~gC+hl4q8Y3fb;B&5;mu!{-YBv+{ujrVlSptU)#_x=@Guew-aHC2K(8Y-ntN7B6S z`a}tvFjjk{ole#CT)B?HGyeF|l|0l4x02$c4&Auz%m*`|v3yO@bQR||sM({mR62yi zuRXbbfV0AoHqoayk2vBKD@5`;iZ*l;bRe>k**<`qT~40gJ=>j?kzNR8;qW_Rgs)|yBtNcQetFn_VQ`GJ4 zc)4sUtbiuurj{fsROII56ON0GHI_ zN%^HEwo0X?nJHFjiD{-uDJiD9Nr}cOx`u`+iMoj?#)i5n#>Oe;riK zGN53Bhi+;fFi6XRVW%@?1~)KD3OrpLLo|Y8C)j&LCyE@czh52yDNf{Ii$kD*sLO

Vh!s%Jc8z+9#~A zENDBt^SRtR)9dB`MHAA>So>$J%zs=l@A#cVR@Ln8H5sK6ETN7el2X4~R<`f+J8NiV zb71;LL54*ZZgUcN-aq(l7Zg@R)B}T`poL2Wfu*}k9Tp$&m-5=1pu8)VokA=0WYWHmKfCtI({<>5CZ*|^S z(k#4o<|-ZCzb-D3F?UtIE1!RKOU$q3{pQnKFO)rOnNs@W*g_=>L9eAoPd}+H7Y~2) zZf;TBo=0!?xGW7i$i(xdTqtXn!9xe$Rb3quvOFiwo|kc_I8f(v<%ap<)vwn#GW*&G PgA%=`tDnm{r-UW|ggsDK diff --git a/Scripts/Scale125/SocialAlert.png b/Scripts/Scale125/SocialAlert.png deleted file mode 100644 index 712d3d947795db2b32981333efd43896f445f603..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmV;)0XF`LP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0bWT&K~yMHjgZSr z!$1&+_kZ)IH&H~2glB_Lei;6uYSdR9U$I=-auwTyGbE75RY^zYrmHzH^{1-ZzW6c3la&x9QR`wG z64mxVg)bNZ5j6Pi2XX8~oH%_IjJHUA$0n<4uqbgk-RUS+Q!+aW;rcXK$??!`tr1gU zfJBCZK|$gJFBlo9`9k@*&8JqXOy@qFxNd76%vi)0qOBjG+D(1Pn_!<+PSN00000NkvXXu0mjfBl^Jn diff --git a/Scripts/Scale125/StartupErrorX.png b/Scripts/Scale125/StartupErrorX.png deleted file mode 100644 index 1047bfaeef01cc7403858d2a758f147acd3f02ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTONu+7uOF+?Lc`9q)H&-b#-2jecP{@=SuVT*sx z&Ht{i%l@YyP@5Te@%#UClf(bp*ZgMcUY|~h@9j57I&;0oR?ezBr zo+7M{o>%|hule`yzw#uNn8tFSoBzY*_b>7|AX?!z{onkZC9nVU->*;dXcGN#H2hEf k|F_5g^V=J!I!Z8H6+3+Jov!Z}poVM%xNb!1@J z*w6hZkrl}2EbxddW?&F10b#~_Y4R07!Fir8jv*SszP$%InG6M7|DV_3mJ|7=r0LWx zz_O81_ps15x#$gy)gK<5oP1(ljDUHkr&(d~51&t!`EBjq?-Lp&*e{$Hcz%Cj@+>W8 z$x}fhLSNW3+fo#|1-Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0g)jYqLGccydi-CYld!{+5;7)eDLtI{2ITPAl0Sgs@3b`MX4_?1 zzR=X{4{NuSQCxw&XBsYHB!u*IwN`rf&Cboc3-a%^T`%#tv$Ji|YIMmTH0Ew2zCL_u z9(;E<_Upr`V@InFdbO>AF(y!|=ZeDW&t3fe=WpJg8`^JW#J1}s6)o-E4_ewfnZi(F zicJ<4{pTC6AUmt*kRf9O@%1ME5?AEFtE&nBPgGL2b&J_7GR9H&*!WizU@5H1@>Bz- Z{{e*8WU5o20xSRk002ovPDHLkV1icGXK?@k diff --git a/Scripts/Scale125/Tos.png b/Scripts/Scale125/Tos.png deleted file mode 100644 index 2d804914910d3acaa773979706a2390c8bc7c5ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)p00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0d+}4K~yMHb&x?z z!eAW6-@QAASHW&+Y|Sk_L%->`};rd^X@-xJo$8-8KoS7W`wx!g+L&VIF3UhShKk+-RLsv7YIkt z&E~Gz0U}Fb?XKQ3pWP_`1CA~{xS!(unVO0#VnM6v5AF?10s)UJ0zBAKmXJvwM5TyU zZWw0oI~FwvcqW}-WS-50(=kOTYPF_eVT%SRT9E~S|RYLh#Bf|&a-XX=6T+0{-e2v=f42r Wbi!);HL{`r0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0hUQbK~y+Tg_GM- z!Y~kqbD{{2&UoSbzlP7?J9r@%juZw;X-f~;tpBFf5pC%Y-6q*DyGgpy?`f{I)(VDo zY~hJ7`9((@$;zhlp(DZzT_a#A_pcIHF zIIL-Pw_rq)kb;hL5Vr9AbRVJVyuGY5iUq=6rsK)EXlIqIk8Z|;u*$$#=NxB^k$AuI z;*3XRutKG7t#1$uG@ln4@%aGGa2}v$W;Mf|%L;j+TU_0CMIEG|v7vtGzmTiCplrc0 z$etTHl+OFlLlsK`nute4yTiGTg&qIb_57oBpKY@X;>5BS{pGw5yF;FyT4r&|{g7+& z&3W8SDRkQIPn)#tP#{Lz7)~I(j#UE=1zuFm$1X1#Y*0CCtThfOth4CqO`09gm%ME2 zhDZuTqekHFt+OaWSfgKF-*8kze1XI|V9|}Pa87>#Kv)Mdslxyd00000NkvXXu0mjf DW}MrV diff --git a/Scripts/Scale125/Trace.png b/Scripts/Scale125/Trace.png deleted file mode 100644 index edbcc4402930ac44100280683682e8f20137ea97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmV+v1MB>WP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0;x$vK~yMH0iFV3 z{Q>;x8qV1>cD#NG1@5a;Y}(rke9V3*AS*K`7lWc008{~2K(3n zOVjHoenF#0GQ`T)EJKf*OQD+A?;aX3@h1}A000C71PB-o_y7O^00ICM5BLHA0RI&Z z^JG1m0RII5{{PM1Gjy_M6bJxHEWq3AERx8CjAkmd`? z0Q>_00R9sY_5uI{4g?JX0s;L10R6n#L3_G&NH!fG3C0To?eXsi6%hxUveB1QaktSv zgScS+00jafI1~)*|NIL80RI30{|ONL0`T=40R900|Nryv43@%O0s;{i4*Kl(3i|f~ zE)dNC@Vj1Ofp6 zIuF4T0N1q972f(Y9}(dy9@I^YZPt;!86d;1mz=00jmK4F3WF1@ZP4oy%C1 z&uwouo<=9V{QLZly<;~a+yn*)=Kuczm%Cfw^&m$r$yYR=5(xrmFSx4H`e>_tBM;Xj z8T17O{@d#%+~*kV?f?H0`a2rO0RQy%`3ThiAdt*a0yrGW0RjC00QuDC6_mnHSe~EF z;x82!^4SItTsK@k3G9Dg>b2MH>&V8lZ%LSE2E@GX1{4Xse|rauy${fX0g#c?BRI_Hr<$E^y6a`M^!MFQ++1B^G#sj9Rm*5EudL$p z-j_sqz2DLQw2O_cK2E=X#dtgd;6hg+Oc`q**Jp~fAM*=~*xc$jEa5T^w%@(k92186 zPE_)<^5_0`<}ywo42LiHHMj=Q)HX9J*A86PA0GbV;`|4mo*wg-IQ4M(6KyVZ(`lNM z&)w|+$KQ@H9*$Tdkh%tm8f({c%uRT0+)moP=o@ zjI4raF~%6w1?Dx*!b)}Yx(P=C2$(a3#ipXFD@Xzu_y=@EN8)xr+%EtC002ovPDHLk FV1ktt9>xFw diff --git a/Scripts/Scale125/Tutorial.png b/Scripts/Scale125/Tutorial.png deleted file mode 100644 index 01f5ae7731a0a19dc665bc638e7e37a3fde950ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^7C_9#!3HF!eTzK|q!^2X+?^QKos)S9a~60+7BevL0TuEcW;~w1A_XWY=jq}YV&R{>a~60+7Besim4Gngy)^j>px}N_7sn8d;N*%g&tBJa{9`)CA7AgbVPTDm zs{qfW11neLf7|u{Hh+AJ*0JQE%G)^`4z;g$>{3{kw3Tm3!R>|I0j>@_R}OrTIKhyZ z(we$<^S^xC0={6uO->VBGEblRFa3S)!4Q_i3Y}AL_ce$<3faQ7V!@6~t4XE#jY0}M zp&N=`Km6ay8+`|&yX1^@s6%>pGE00009a7bBm000tn z000tn0p4aGcmMzbLP+jv<~0 zZRGo7icyUw0rdQH^z=gqnsivsmW)CCTfkl#j~MQQ_9GvF%_0PHovVN#@i+`%aAj*O zrrB;nu#@gLX7_1ymMLlYJ&6kFu(c$%NfIC<{>13L5FY!L*;GhSYHa&8Wu{~sS{aWS?B@16-zmjxlDTA}^}me=jU13%p{CGt&NU?Q2K6qZXYNmarP&4aRI?;g qC|qlr%*8TTT!qEe|70^-tN#TAt>}=bO`KQ&0000wiE diff --git a/Scripts/Scale125/Withdraw.png b/Scripts/Scale125/Withdraw.png deleted file mode 100644 index 22c04ce96bef7f7af0c6761aea5f659cfc4852f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmeAS@N?(olHy`uVBq!ia0vp^0YJ>g!3HElj!C)$DaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9EWB_ParFHODzsG&VGB%&n3*T*V3KUXg?B|j-uuOhbqsG5Pn z#=fE;F*!T6L?J0PJu}Z%{r&F!>I#`Dw(8-gz6QPp&Z!xh9#uuD!Bu`C$yM3OmMQA? zcD!6R6;?nKa#KqZ6)JLb@`|l0Y?Z(UTLIZ1VSOb#o1&C7s~{IQs0tv@Rw<*Tq`*pF zzr4I$uiRKKzbIYb(9+UU-@r)U$VeBcLbtdwuOzWTH?LS3YJf{>adJ^+K}lwQo&w0g z#H9Sv5?iIx(##aAw8S*iq?8m>-K0e06kS8ZltkUc6k|i(6l3EQb5lbLqcp=LC8+f! znP~|7^NOLt01Oa)kc_^eo&m_oAhwl%QD!R86(B3^3~j*jC}KAHAcr71%nl*~^ed1B z4;fG}!9zDS4;ZB7z_8PqGJ_i!B~qR)jv*f2PbYipI|qumT`#xJ@J?4%a&nOn_`|LI zZ`sO)M-EJ3RAzH|BzU!A>gtKxwqKo>yI|I?FZcHOL~JhJH+k#k{ZC%33^9E!la`Ps z(GdAsr_(@e-;3!BJ8yMPKeoTaU5Mk$52+f>3tOkMUs&_S-AX;yXu|^Gi;rHI@GVSh zoY(TME7dsNWX|G%ieplxF^6kK#Emu8-t{f?IOO8J`0{%e$EmlXW%Va2SlhX&8F#VF zvnhE!{moJRNe2q+W$P9|>SxxOPjRuDnv$3|tM{wvmhys}+0oW9_wW4geq<+E f66|^AoXS->P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0nkk6&1r=|TAn3`|fO1H6C#Y3JVK>}+iR{{4pvfdNh%zJ33(bI$2kgcz$-rPA`TT>Y##q#s#uQi+Y-nsh-$YEk)a<(_KGS}a_^YGaV z*HaUMpo&wa=KsazA6ge|Nj5u<>BV%=lSvTSNFt4$#MQb z!Pjrz1DywCKmaJ>-oE?r@bL=>UqeNniJ1wg;ogI%hWZ*)XRUbq?juAB0uV9%^Vjdr z{`pXEFfa%T@a1JhK7aXU*WTlBK@b3HfS>~>uXN8?31Pqc`m3OB^0T*}faLq{zaVJd zsvR#rd_hUAOkiIE0gOfgSFhg#+JrNC;{pf`KvUsKAKB3;9$;Vq0P^nmPZq(1$p8QV M07*qoM6N<$g7tb1tN;K2 diff --git a/Scripts/Scale125/Wonder2.png b/Scripts/Scale125/Wonder2.png deleted file mode 100644 index dca6657e9f2fed1b37f88acfc6593df4b5469bfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 425 zcmV;a0apHrP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0X|7YK~yMHWsA)# zgK+@IfB(S_^sHGTa^U9THEL!{+Chqg6)AC%<|U1YEU~g??cim_Xjbx;G?5;U8Dq=y zn_?HM`BOeJ4$9$EpZb2jLN_T$r5I@}Mw%65nHgDKg|xJw&$|%`gMsssBEnS)CzVE? z%N6tr6Vlp@j6@J^6{R#ZwbJ7p!rI}Wv95+2OD(e7MrJ#Ra7|8g64SW8&!DEVtZ#;~ zHrA6G?&Za|j0lCJoL$~=d7DCgeB~;hrf+bB@WKp%L3yycj5P^V?cAK3}M;C22J8M2KT3khD z^94jIo#ZIG!G6fg;enszQ=H82SO{eHlmFz=-#(CUxxc~p$?PBYZLH0 TCN}kV00000NkvXXu0mjf?ftkz diff --git a/Scripts/Scale125/Wonder3.png b/Scripts/Scale125/Wonder3.png deleted file mode 100644 index 6daabadaffe716fc760d28cb19807bc30d515f0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ}!31Klt^Ne07>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcX91fH32|H2DgkpsA;eV~9p@a>ehj>URYWPcEPTvQ46FZk>bq zk%9+@l4D*dmPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0v$<2K~yMH9gsat z6JZ#~-{-wM`gOKVKea8j#Zns@tC2($;=n+N36qT(5W6qrLaT!zcgcN&flgmmlmXza#-DLp{Pc2LymPH%)V?^d%nj zbxb(YaILb2DdmLO#|3oOu%l@0a&;3ioX?MqjgE$8A(Ja$20##qmcZmtbRsnvPuLvaN*nuITW-mLmAdLx z+?9pOyBD(*q*OXPIWa{MQZ%)+zA}CLs=L#=GE~44qL;etdOYYbC7Fvp*^2-ZMoqJe z5i*rlvenc-e1hYyv3YkUd+&a=cCxK1nI{iK41x$E2P{CJSbX+X`^XR*hMIizFwn0K zFvV!KIp+*9pg=LUi7i5Yx8V||=^v-`Oinw*BWAYz zcRuU^?sVbE#kdoo)9p9vznMU9j$ca-k9=KP7V=YfDC2=nJL7jV-DvFY)h(_O%i(cF i!(N1?L~Ky@$o~NUWEyw$OCJOP0000kkzH#OK@^6cnb}Q9n%FcIt+p6MDVDYdT9KlKSnN%s z;NSB{=!ISh8W2j`_(3pGaA_+l2K2(VaTAkfv)SWC(j{NMcW2Id&b;r8dis1%{7%4= zhgpo#oJ#~m1f>*8g~tRUymf7gGrUv{F3UxXsH# z8NIT2jd(1A0ud`@AcEs)|yBtNcQetFn_VQ`GJ4 zc)4sUtbiuurj{fsROII56ON0GHI_ zN%^HEwo0X?nJHFjiD{-uDJiD9Nr}cOx`u`+iMoj?#)i5n#>Oe;riK zGN53Bhi+;fFi6XRVW%@?1~)L=1w36GLnOkJzx3(-Jnz8Bz|hphB>f~c@&PDPJYD@< J);T3K0RXpAqdout diff --git a/Scripts/Scale125/__shiny2star1.png b/Scripts/Scale125/__shiny2star1.png deleted file mode 100644 index 83ee53470d1bd4c806fc557be6c4c7c87d06a6a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmeAS@N?(olHy`uVBq!ia0vp@K+M9y1|&nDY~2E+7>k44ofy`glX(e}Nq6*hWMJ6X z&;2Kn70Bl-@Q5sCU=S(+Va9uD@)bZ0?U^AFB@w}FfdWk9dNvV1jxdlMg3=B5* z6$OdO*{LN8NvY|XdA92BckfqM$V{$ES@GWpo&B*kqDoPEm@(W3>%1*XSQMb3_ z<+7=;0-BJUT9T+xk(-lOY*k^a1UA?T$OZ}PE7{o;rKDK}xwt`90C~1b86_nJR{Hwo z<>h+i#(Mch>H3D2mX`VkM*2oZxL#Wb8|tPQ8>g6?8d?~o873(~tuM(; zL)f2J3=IZgfarr{^bPe4Ku!j+t^A8JQ-Q7kS!riz1C~b-v(X1R1j%7`5D}nXfh>5) zfPx7gx~X}lFzkqGZSeVVJuL89T}d-+KMOx#tSQCFo|ZHs3s zaCiv@F8_GV;+fCxYjgijjLu`K7j$u8(475UU(`W%!A0T8hG+7Q@OJsn-VkEgzSvnH z<(nPL0wz7iccw4a91t~K9JuA?G`(133D-@Z=A5&Aw1;1_fOkUHic{jrc^j-2Rp-2z jZ+PuMPNLw!Jo}HVI`g~*3zRuefKr5~tDnm{r-UW|!GhXu diff --git a/Scripts/Scale125/bonusWeek.png b/Scripts/Scale125/bonusWeek.png deleted file mode 100644 index 4ad89e8c78a62f07163f05f859d0795fbb731822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp@K+MI#1|;*}T{!}z7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcX91fH32|H2Dgkpt7fnV~9p@@&~K$kL+3YyFA$Z j-(GM3e{xs*Vl{?`Klj=$zB4HfsGPym)z4*}Q$iB}`T{Ky diff --git a/Scripts/Scale125/clearAll.png b/Scripts/Scale125/clearAll.png deleted file mode 100644 index eed5f740ccb5d84e3fda777087a6a8148dadaec2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 787 zcmeAS@N?(olHy`uVBq!ia0vp^oIotV!3HFcc!W9wDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9EWB_ParFHODzsG&VGB%&n3*T*V3KUXg?B|j-uuOhbqsG5Pn z#=fE;F*!T6L?J0PJu}Z%{r&F!>I#`Dw(8-gz6QPp&Z!xh9#uuD!Bu`C$yM3OmMQA? zcD!6R6;?nKa#KqZ6)JLb@`|l0Y?Z(UTLIZ1VSOb#o1&C7s~{IQs0tv@Rw<*Tq`*pF zzr4I$uiRKKzbIYb(9+UU-@r)U$VeBcLbtdwuOzWTH?LS3YJf{>adJ^+K}lwQo&w0g z#H9Sv5?iIx(##aAw8S*iq?8m>-K0e06kS8ZltkUc6k|i(6l3EQb5lbLqcp=LC8+f! znP~|7^NOLt01Oa)kc_^eo&m_oAhwl%QD!R86(B3^3~j*jC}KAHAcr71%nl*~^ed1B z4;fG}!9zDS4;ZB7z_8PqGJ_i!?!P@<978mMOD8${H#wE z0sdocOO~0)*oZ8R2U4kU@ z7K3}?rBBX&bJ(P9F>l|8e6=1QS%!sWQnRg6f1WHTC}j+|o!Xirx%9{ObC!#P+!$oI zP8LrovfnHjZ54d|&|C?dzfHH2r-Yr>c$$}1Y%3L)$DA{%XZv>{-HMx`>Oaq(klE4@ zC4W;eSM>e=bBiC(XjQ&Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&15HUpK~zXfy_H#4 z8bK6<=l}l)P2#>JqGFIm5D*2#C6Rp@_GM&|prYofa&HeKFtnVA93Se5p8HvKt6Qbh z|BH{P{f5+f7c1^G){isT_Ge%T(4fLW<>b3Q=X zaI=~ZPly&YtQ>t3@b>-*;Y9i4K-us~y$GQFT>ThOKHRJqp;Ge?);+1&f%4&I>9F?W z3sR*PzBv-J0p-JG(t#Z3elRl|P(D~D9oBkyMw+g}7kg|7^e`|B%c(jYC?71-Fv?1+ z2a7+AMFETxFe!lF=La0Zv~C}fL=_9RsP532z$#t*4SKv8xO=AJAp8bUK73p)g1kEG z^$}GYSR~lOVH98OaV)tKSfi$Hdb9Wu$YSp-kAw5#Bv3YdQUe&N*14y5vx8-4T(}c) zk~<^LEnfyZ6z6`hfS-}lI8Z*^tRbvHF-G$m*4>F$nC>nq+--O%&J#UOYq$v8#RyP7 zTqbHG$Jp*66fciCGos|(iGRGlEV;{JH%M`kJNso>2g(Oes`dDcTK54-s=oD<+Bn#m zfKe-#M3nkf*c`aCjJR`NSD?rSkBTp{cHc*((?h&?i-TYm%dWV9a2web-#Ly^ID3WV z#8ud*tH8T+Tvc%Ny9%YCbzxS%afeK`gIKYNP^u1RM5St{g$qLr(Lo6;Q$cuV93z*6 zopF?VBFdtO()Fu?%R5K-dw*#~^maZFCHFCSn|c1yfBZ z)=-fi)ln7xPYhr;v?m)mveB;WmlbkVr8epXF=8}e;YjS>7Y=$h4V}sk(>^@%6Fg`2mSofdlb{ecN`l-I6A`-gA7-ZTnm>3V%T-z a4*vi?`oWCqgm;4g0000I#`Dw(8-gz6QPp&Z!xh9#uuD!Bu`C$yM3OmMQA? zcD!6R6;?nKa#KqZ6)JLb@`|l0Y?Z(UTLIZ1VSOb#o1&C7s~{IQs0tv@Rw<*Tq`*pF zzr4I$uiRKKzbIYb(9+UU-@r)U$VeBcLbtdwuOzWTH?LS3YJf{>adJ^+K}lwQo&w0g z#H9Sv5?iIx(##aAw8S*iq?8m>-K0e06kS8ZltkUc6k|i(6l3EQb5lbLqcp=LC8+f! znP~|7^NOLt01Oa)kc_^eo&m_oAhwl%QD!R86(B3^3~j*jC}KAHAcr71%nl*~^ed1B z4;fG}!9zDS4;ZB7z_8PqGJ_i!B^jPBjv*SstOsqqqZ1_>9{&F8VPk1{{E9=%f`qQ1 z!dKUpx-RKfC@B(H=v;X5s$-1ni%arKdVFFcGBQiNwXgh|I?at|%hgE{!i&``4K3ea zejOxVzi;|u+urYwrrmNAJD+yKm-A-*HsvW+5B4@)bbWX-h1K+5=j-LO|19-f9q71d z!qcT9XD@sd;Cg>=S*7j7M-LQ~X1-cz{^7%9!%sggqTJ`qj}O$TTNrnL@oJq``P6;) zr*xi;w0b1aa_gAb)2*R${rwvpDgqCAw3sy+axE3nXtuob-2T?YKGq3OpJam)yQiz4 J%Q~loCIFCbOg{hs diff --git a/Scripts/Scale125/deluxe1star2.png b/Scripts/Scale125/deluxe1star2.png deleted file mode 100644 index c1e19933ad2d684c0a01c23e23fa6cc2e42e4784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmeAS@N?(olHy`uVBq!ia0vp^ra;WZ!3HFM%$$-6q!^2X+?^QKos)S9a~60+7Besim4Gngy)^j>poaF$kcg59UmvUF{9L`nl>DSry^7odplSvN z8~cia#N_PM5{0DH^vpb4_4m8?t1D!t*s6z{`WpBaIHzW0dQ=sq23ProBv)l8Tc)Vn z+wpSQR9FE`$W1LtRH(?!$t$+1uvG#ZYz1V4g!Pr|Y>HCStb$zJpeleoTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6beFGzXBO_g)3fd$_#E`l;nB3IEH8hvmQL}Es`j6;Nkh-`-~r->)E|-jhfe_ zRt>gi@(&zUnQU2-wjXE~KUiJ)L1^wF`y-R5Y*$$5e58rxHP<1XE{@sur>@DL-SqBU zp7H0ml~>L^WVgK4zV4)z`R%_umL0gjeYAOZ<(`9fyWAYUHyC!6$(}Q7-M?rB_YUR- z)(Q6;*FJoHKQ~OsOJTk*UD%dV(&Bcv_*wRoE#GQwVToXdHqXm} zv%WUm`YPx6v@2-mvA4O+W!8${vl#2Ysh&EOuyA79pl1DL!tb&?lyJJ0y2dB#yN z_AlSNN0Q$g`{x$E{3`dTeBQ;s8cOfEC0Te?td?%l4oTjyJTb@j#oW~k=ZWpC`!q3r zONW%HO6QG;^Ow3>KG>!HES>ka~60+7Besim4Gngy)^j>poaF$kcg59UmvUF{9L`nl>DSry^7odplSvN z8~cia#N_PM5{0DH^vpb4_4m8?t1D!t*s6z{`WpBaIHzW0dQ=sq23ProBv)l8Tc)Vn z+wpSQR9FE`$W1LtRH(?!$t$+1uvG#ZYz1V4g!Pr|Y>HCStb$zJpeleoTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6beFGzXBO_g)3fd$_#E`l<0c8IEH8h>z>)~eWg(5_{Zn3|L&Dftf=B+cQZ+C zRMIO_+!^!a$(2hIffwGzrzI?2yr`S&;-i3;rs(_DJ!h=nf37oqQe5}pN_+qOp0j^) z+Ryfe+q}yU4EMF!m%L1F)4kXS&tEd`zR$NJ|NkVTg$W-M+sn`Y*0Fi<;py-2bFaLY zMP_V2p2ELQ?fi_DVkd74u06?{zf1fJyY07f|DT1i5mi%o;$}TNCG*?;bj>~M=if6r zj3+j&klL~;<)>$2b@9~Y+4(zH|1YR0I(F}&;o;ZPIWuO9TED;jN9te&lYX2zCxdj( zW1meNTo$~MCrp-{G+}LiU#oVRg*`amI1C57TCQT^hh;m%)a~60+7Besim4Gngy)^j>poaF$kcg59UmvUF{9L`nl>DSry^7odplSvN z8~cia#N_PM5{0DH^vpb4_4m8?t1D!t*s6z{`WpBaIHzW0dQ=sq23ProBv)l8Tc)Vn z+wpSQR9FE`$W1LtRH(?!$t$+1uvG#ZYz1V4g!Pr|Y>HCStb$zJpeleoTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6beFGzXBO_g)3fd$_#E`lo)%uIEH8hoA%mz&rXzRUH`kXM!090i-@=P-H-`f zd`^E@-afdpbaAkwV0~k~c60MOE-{go4*BTUi&AwS$#VPYJ}kyDJTL&t;ucLK6Uo CDJswa diff --git a/Scripts/Scale125/deluxefullart1.png b/Scripts/Scale125/deluxefullart1.png deleted file mode 100644 index 5c2db67acd42554a44fcacd5b10ba058d772743e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 731 zcmeAS@N?(olHy`uVBq!ia0vp^(m>3_!3HE(@-7EajKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTONLwjaOL`j6Nk5zJhu3lnFep0GlMQ#C5H3Nf< zeMLcHa&~HoLQ-maW}dD3``!E16*5z7)x%AF4SWlnQ!_F>s)|yBtNcQetFn_VQ`GJ4 zc)4sUtbiuurj{fsROII56ON0GHI_ zN%^HEwo0X?nJHFjiD{-uDJiD9Nr}cOx`u`+iMoj?#)i5n#>Oe;riK zGN53Bhi+;fFi6XRVW%@?1~)L=?|Qm8hDe079(43R6u@xcL4 zO1ESSTwJ=(RbJWZtE3fY?5?s`DozQGB@-MtuWxAPKE}4}-1hI+-cPsQz2i*RJI1Qq zmaV0SGcT*YxO+KF`pI6qwcqT@@2l;P*WZ%$x+cfHXE#%7NaQKSYG01p_OrL9C}bLR z+P+Edu89@0*YUU){=}$LPu$>5lgn(qzA}UK;Cc70_O#h;e<<8Pm36L$LY&+tA=R{7 z57KiKk8*~lpYYQ>Dt}{%XV3SUMYW<6{r=t1)jrp+l~U}e*5%>7@Y$^T>U9xUN^glP PfKr&JtDnm{r-UW|cY_28 diff --git a/Scripts/Scale125/deluxefullart2.png b/Scripts/Scale125/deluxefullart2.png deleted file mode 100644 index af0bdeaeb90e4301d6e09e7691f9527db362a298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmeAS@N?(olHy`uVBq!ia0vp^(m>3_!3HE(@-7EajKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTONLwjaOL`j6Nk5zJhu3lnFep0GlMQ#C5H3Nf< zeMLcHa&~HoLQ-maW}dD3``!E16*5z7)x%AF4SWlnQ!_F>s)|yBtNcQetFn_VQ`GJ4 zc)4sUtbiuurj{fsROII56ON0GHI_ zN%^HEwo0X?nJHFjiD{-uDJiD9Nr}cOx`u`+iMoj?#)i5n#>Oe;riK zGN53Bhi+;fFi6XRVW%@?1~)L=A9%VrhDe079z3XbIDz57$NJr?^48v5s2M4yR2U&p zxT$-`yG<#4eDe+|SFp72ZDeMbJJ5St>EQv-r1rK=Hx^yWTe)aoUHsp=sPz2(8oO7E zeB=IgNbv1itHS>+(+V~;Tbq@Kz344<^EZEEX8S9zqds-P7S+0^4Npru?yU;BTYhOK zZ_|n6xAYR%d8(z~Px)S-(dw{MZCBnv*-fAI=mKQuA#w z?zcZHv2U8dQ?u@3W~r%j9$Zv9pLFbe)8S_SD=)gMd@tozt|*yyXq5s_r%%y8MxE-2 U<60cN??8#n)78&qol`;+0OnH;e*gdg diff --git a/Scripts/Scale125/deluxeimmersive1.png b/Scripts/Scale125/deluxeimmersive1.png deleted file mode 100644 index 851c68543ac2053dabc893ca47dc1d354b76f593..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^MnKHO!3HFyT>E8!6k~CayA#8@b22Z19F}xPUq=Rp zjs4tz5?O(K&H|6fVg?4G5)fv*mnL5U)X<(85>XQ2>tmIipR1RclAn~SSCLx)RL#I( zV_#8_n4FzjqL7rDo|$K>{(kpRtPXT0L zVp4u-iLFv;X=aL5T4I`MQc8-cZc?IgimstyN}_IJim{?CxF5-9 z6*{Y0bE?kMyXSYjw*CC$m$Myz!-Ukn-mI=w7w(+#Sp4+$*~jVL`$iUW{0N`Bp;ta=+BIF7w#goX`JGIF(?LEU6r*?8Ty~7{+jr z!R=s%3-{3_8}6^WoEd)e?#jT`>OFs(ejnGDi#t}sqoyO)_&>5xZ(&dwhm*4RO|9@5 nzSDY+6{{&4^#(||3jJU{Q`1p3N$1X1P(t-|^>bP0l+XkKTlplS diff --git a/Scripts/Scale125/deluxeimmersive2.png b/Scripts/Scale125/deluxeimmersive2.png deleted file mode 100644 index 2e4313dde7f1054a646e159632b45beeaf349e7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821 zcmeAS@N?(olHy`uVBq!ia0vp^ra;WZ!3HFM%$$-6q!^2X+?^QKos)S9a~60+7Besim4Gngy)^j>poaF$kcg59UmvUF{9L`nl>DSry^7odplSvN z8~cia#N_PM5{0DH^vpb4_4m8?t1D!t*s6z{`WpBaIHzW0dQ=sq23ProBv)l8Tc)Vn z+wpSQR9FE`$W1LtRH(?!$t$+1uvG#ZYz1V4g!Pr|Y>HCStb$zJpeleoTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6beFGzXBO_g)3fd$_#E`l$d+EIEH8h+nx{f7j_hJcvzgCzWklowvAn^Sv`9W z%vb+7b;6GflUW(FP6)Sz7)%Sw44#pvxw(2hzsfxO4^K~&E@qp+Ip^<>b0^!A-QxEr zrg1oN%nP@^EhEb(F->*jx|#90JLX*Vxi-;_&`K z^p|5wX)IG-GUJ2qBZcoWyxS{^KQ!fSKU}gk>C5M?kMFBr?Q&%4Qd%A^x*JoQlx!QgI{-Xr}AItW;Z~t)R z^^p>(nLf&sZ=VQWy+X6CDWyZ)p`by+A~>UWjq;xRYbD-=?zz4G#a^B}$9cscTOYg5 zotHPw#!hWss&dPmO&lE@e>WZWixisP`Eya)%qi@x$0W}kwm*J+LPgs8d2OJy>*?y} Jvd$@?2>_*}G@$?h diff --git a/Scripts/Scale125/deluxeshiny2star2.png b/Scripts/Scale125/deluxeshiny2star2.png deleted file mode 100644 index 3a2fc8b1c52ba2e20dd50a012abfc4aae3fe1ccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650 zcmeAS@N?(olHy`uVBq!ia0vp@K+M9y1|&nDY~2E+7>k44ofy`glX(e}Nq6*hWMJ6X z&;2Kn70Bl-@Q5sCU=S(+Va9uD@)bZ0?U^AFB@w}FfdWk9dNvV1jxdlMg3=B5* z6$OdO*{LN8NvY|XdA92BckfqM$V{$ES@GWpo&B*kqDoPEm@(W3>%1*XSQMb3_ z<+7=;0-BJUT9T+xk(-lOY*k^a1UA?T$OZ}PE7{o;rKDK}xwt`90C~1b86_nJR{Hwo z<>h+i#(Mch>H3D2mX`VkM*2oZxL#Wb8|tPQ8>g6?8d?~o873(~tuM(; zL)f2J3=IZgfarr{^bPe4Ku!j+t^A8JQ-Q7kS!riz1C~b-v(X1R1j%7`5D}nXfh>5) zfPx7gx~X}frNPBV1PM>+-h`h?J@`>% zU#3qmTSh~6Tl>i^rOp@F@>}EH7GyPVHokVc^Yc+fMc+uq?L4c_n%pwV=r&hfck9tA i*5*c$1v&}!9W@LNO+Jj_)0Hzo3BuFW&t;ucLK6VvN8*nF diff --git a/Scripts/Scale125/deluxetrainer1.png b/Scripts/Scale125/deluxetrainer1.png deleted file mode 100644 index 60842e39c97ceffaa007bd5e8877715f69808fcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmeAS@N?(olHy`uVBq!ia0vp^ra;WZ!3HFM%$$-6q!^2X+?^QKos)S9a~60+7Besim4Gngy)^j>poaF$kcg59UmvUF{9L`nl>DSry^7odplSvN z8~cia#N_PM5{0DH^vpb4_4m8?t1D!t*s6z{`WpBaIHzW0dQ=sq23ProBv)l8Tc)Vn z+wpSQR9FE`$W1LtRH(?!$t$+1uvG#ZYz1V4g!Pr|Y>HCStb$zJpeleoTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6beFGzXBO_g)3fd$_#E`l+=2t`-mddi`NC!1}mzFOupCc~FHZu?3KyRPgg&ebxsLQ036t07ytkO diff --git a/Scripts/Scale125/deluxetrainer2.png b/Scripts/Scale125/deluxetrainer2.png deleted file mode 100644 index af00760900bf7cc5ffa5081d8ed8970f264444ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmeAS@N?(olHy`uVBq!ia0vp^ra;WZ!3HFM%$$-6q!^2X+?^QKos)S9a~60+7Besim4Gngy)^j>poaF$kcg59UmvUF{9L`nl>DSry^7odplSvN z8~cia#N_PM5{0DH^vpb4_4m8?t1D!t*s6z{`WpBaIHzW0dQ=sq23ProBv)l8Tc)Vn z+wpSQR9FE`$W1LtRH(?!$t$+1uvG#ZYz1V4g!Pr|Y>HCStb$zJpeleoTcwPWk^(Dz z{qpj1y>er{{GxPyLrY6beFGzXBO_g)3fd$_#E`l+=2ft!J%ZFExA>7clLB*s}?YtUCI+n)UPDZ`J>G z+q0U*qTP62imgz$9eeNW9yO_RvD44IwY$3O?5T6=x32Q)T`pV`&utMob&1}`Yxk2j z|C;%y$<^3wLEMT7zv_HcViJzo%ve|@+t$C$^Zy?Y<$pq^S{t6e+i3N2f=_(n*XlW< zy5~xJLrc&6p49d|mHqe+H+_SZqVqRi`f;FWm75-q#fEZE-tQCT`Z})$o#A5?Op3IO zaaG*5`|l6Yb)D+ZZ1m?|65`rq`Sjm2)^B^&%%}ak^mn4-hY~Aqsl}76r|f3C_jSVL zd1p;D0_I$kXi?;}Ou7_uf?eF=H0umdKI;Vst0GQ-kkN^Mx diff --git a/Scripts/Scale125/empty.png b/Scripts/Scale125/empty.png deleted file mode 100644 index b1ed451c59fee2bbc6f83af30d97644ff7f2e203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^5>nJlBSEK+nv}cAyltlRYSS9D@>LsS+C#C9D^BXQ!4ZB&DWj=Gm&h-@RX5Av48RJ>1mSz_-9TH6zobswg$M$}c3jDm&RSMcv+x zm&>NY3TQ%ZYDuC(MQ%=Bu~mhw64+oXAR8pCuViOal#*r@k>g7FXt#Bv$C=6)Qsxa7isrF3Kz@$;{7F02!E= zlwVq6t5jN=nPQcem}Z)kl47cxlxUoyYiO8~sGFE#Y^a-JY@A|lYG`4UW|*V|wZ0@X z4Pk#?F*F!}0iq9*(KpmH067`Nw(>8^Oa;0EWTl;<4OkvU%tjyN5G04$K}3Ll1+w5F z0}3X1=%(fYgR~qNb~;mLa0A0#%G1R$L?S$SjfL2!|Fb)onxFNG^PE<%OJ-njbz{FW TwXXvhiwq2&u6{1-oD!MlBSEK+nv}cAyltlRYSS9D@>LsS+C#C9D^BXQ!4ZB&DWj=Gm&h-@RX5Av48RJ>1mSz_-9TH6zobswg$M$}c3jDm&RSMcv+x zm&>NY3TQ%ZYDuC(MQ%=Bu~mhw64+oXAR8pCuViOal#*r@k>g7FXt#Bv$C=6)Qsxa7isrF3Kz@$;{7F02!E= zlwVq6t5jN=nPQcem}Z)kl47cxlxUoyYiO8~sGFE#Y^a-JY@A|lYG`4UW|*V|wZ0@X z4Pk#?F*F!}0iq9*(KpmH067`Nw(>8^Oa;0EWTl;<4OkvU%tjyN5G04$K}3Ll1+w5F z0}3X1=%(fYgR~qNb~;mLa0A0#($mE;L?S%-&X;qK{|k$8wz>CA;_086D#73w%le#Y Sj#LIHc067ET-G@yGywp>&8P?f diff --git a/Scripts/Scale125/fullart1.png b/Scripts/Scale125/fullart1.png deleted file mode 100644 index 9eaecdfac6643a5ece3ab0a08bfdf0a33939fae3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ!0V1no*Tw-U#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=BdgAk26#O}+xCp*=Gsq9nrC$0|8LS1&OoKPgqOBDVmjnt{Q_ zzM>#8IXksPAt^OIGtXB2{qFth3YjUk>fxro2EGN(sTr9bRYj@6RemAKRoTgwDeCri zyj(UFRzMSSQ%e#RDspr3imfVamB0pD0ofp7eI+}aqLehNAQv~N3Lwu`DWjyMz)D}g zyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvsfJi^MBT&`V?*5(W8)NaQ$q`*G{Yn%sP!e8 zX$brCilM;(3=n;gjJ~0s0m#W9wv~TTW-8DXAS>+*ZNTy8wX$FVdQ&MBb@ E0FWQH6aWAK diff --git a/Scripts/Scale125/fullart2.png b/Scripts/Scale125/fullart2.png deleted file mode 100644 index 18a2b4dafc648996308e9453bc69d238b318f037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ!0V1no*Tw-U#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=BdgAk26#O}+xCp*=Gsq9nrC$0|8LS1&OoKPgqOBDVmjnt{Q_ zzM>#8IXksPAt^OIGtXB2{qFth3YjUk>fxro2EGN(sTr9bRYj@6RemAKRoTgwDeCri zyj(UFRzMSSQ%e#RDspr3imfVamB0pD0ofp7eI+}aqLehNAQv~N3Lwu`DWjyMz)D}g zyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvsfJi^MBT&`V?*5(W8)NaQ$q`*G{Yn%sP!e8 zX$brCilM;(3=n;gjJ~0s0m#W9wv~TTW-8DXAS>+*ZNTy>FVdQ&MBb@ E0EeiyjsO4v diff --git a/Scripts/Scale125/fullart3.png b/Scripts/Scale125/fullart3.png deleted file mode 100644 index 1e338e9b07b5b33f365ec09f5c5cf5c24f1713a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmY*WJ#W)M7=BX$f>c?Ms1QOTGD8+@$F?G{WxGl-B#}spLZp;|kF)QboJwrVzQ`tQ zEQpDPfj>bdW(N2JFe8SJNa+A#LTamqyAl-`-g`gqd7pdk<=tMZQod9MfJ&$B^|?R8 zZRM;upFMc{kh@aWZ*9QN=gV`RoEkN|O@Mc=Ru9o>o}WwF_cMU=Ojv0*yi)KBFX&*4 zZFTQhK|E0qj(wsOlY~zL*y}}tf^EX8J{i%-sr`8Wp;o2XsSO+5dN;XA#GbbME)V>{;BY{^5{evA=8PvB;u0hT)S(p->h=oosQQWTpX5k__QcJ8V?uWzwJT2 zrNPJDuK-62sBA7^<>&kWjt=(0l)k`)`973?9m2p|12kXTOWlqnez0?^=k07fe*PQW CytnoM diff --git a/Scripts/Scale125/fullart4.png b/Scripts/Scale125/fullart4.png deleted file mode 100644 index 712ec6b487736127a7fc17080a00d9c1005be5c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ!0V1no*Tw-U#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=BdgAk26#O}+xCp*=Gsq9nrC$0|8LS1&OoKPgqOBDVmjnt{Q_ zzM>#8IXksPAt^OIGtXB2{qFth3YjUk>fxro2EGN(sTr9bRYj@6RemAKRoTgwDeCri zyj(UFRzMSSQ%e#RDspr3imfVamB0pD0ofp7eI+}aqLehNAQv~N3Lwu`DWjyMz)D}g zyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvsfJi^MBT&`V?*5(W8)NaQ$q`*G{Yn%sP!e8 zX$brCilM;(3=n;gjJ~0s0m#W9wv~TTW-8DXAS>+*ZNTymdKI;Vst E0JhJ#6#xJL diff --git a/Scripts/Scale125/fullart5.png b/Scripts/Scale125/fullart5.png deleted file mode 100644 index 9cb65b1b544e18680c8e363bb1f97d999e8c4055..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ!0V1no*Tw-U#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=BdgAk26#O}+xCp*=Gsq9nrC$0|8LS1&OoKPgqOBDVmjnt{Q_ zzM>#8IXksPAt^OIGtXB2{qFth3YjUk>fxro2EGN(sTr9bRYj@6RemAKRoTgwDeCri zyj(UFRzMSSQ%e#RDspr3imfVamB0pD0ofp7eI+}aqLehNAQv~N3Lwu`DWjyMz)D}g zyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvsfJi^MBT&`V?*5(W8)NaQ$q`*G{Yn%sP!e8 zX$brCilM;(3=n;gjJ~0s0m#W9wv~TTW-8DXAS>+*ZNTy z-(+CZU}Ru=azlvW_ph%E&+q+WD2RH_@c-!-1{v9Z4E74*fs^0({shIKr>mdKI;Vst E0KK}nga7~l diff --git a/Scripts/Scale125/gimmighoul1.png b/Scripts/Scale125/gimmighoul1.png deleted file mode 100644 index d10d666f0b164c5a01ebc48765ca356b53129153..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmV-h0i^zkP)Px$6-h)vR47wTkG)DnF%U*ia_`<%Q7aok>;yY|3kyL(5UqRyt?cZ40AEJ1@(p|g zTPv{;Rsd58U28;yxlfYn!~!zImEB9-b#GuPhN_!nrxl teHG}!28>!|)I!%;8UqrQAt)hPegLqqpg0%F$cF#`002ovPDHLkV1oZ!i&Ovr diff --git a/Scripts/Scale125/gimmighoul2.png b/Scripts/Scale125/gimmighoul2.png deleted file mode 100644 index def5936f57f190c1fa26845cfd5c443a3c523496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmV-k0iphhP)Px$7)eAyR47w5kvmQUF%X77JL{xLK?$O!Lv%=703q>^kmxBXxBwML$Vn(Dxdswa z3i?P;B+8P7-SuMz>NZE4~ zp6$wnnbVp%c$J|^T7K7{MH&4&6R7^OS?y^|5%s*DVeb(5C!~4K` w-Ow~0n&;?X)H!ABz*Uy~4>2lzFvLIXU*2GzHi&L4I{*Lx07*qoM6N<$g7f{9ga7~l diff --git a/Scripts/Scale125/gimmighoul3.png b/Scripts/Scale125/gimmighoul3.png deleted file mode 100644 index 34acd47fa0e78a709bdd618a79e2e4902235ab9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 354 zcmV-o0iFJdP)Px$97#k$R47w5kxfbjF%U*yrMp!S1ZN{UE3Y679$+@J6FiA)!8-_Ez$1t^P;f7} zaH}#ag<%+{yEENMl_sr${P3l!zE_EiXXh3K#0eNU=PhRbJp(>54g00f!oPx$4M{{nR47wTkU>fVK@de>_4JrzWk8hRS`XsNg&RR{6i*;G6hzR3a*_nE7uFmmw#cGwfxV+=#b%|y#bEG@~Lvo9hEdN3v zg$L&{-&0wV|H}T+iP>b7S;RRizf}Tj*AB}VCSckJ`YRDcdm}N!)X*5w7|;+&o4jC4 zw{8fFFEq5-r1b98b9;TpY&I!#o}S-%czok<*ccn{UERHkEc`~oTolUH`CCZPZT002ovPDHLkV1ltYjqCsb diff --git a/Scripts/Scale125/immersive-megashine6-1.png b/Scripts/Scale125/immersive-megashine6-1.png deleted file mode 100644 index 031e9aa2fa22faf69087a401cb95742f4e164ab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmeAS@N?(olHy`uVBq!ia0vp^96-#(!3HE#r_6l|q!^2X+?^QKos)S9a~60+7BevL9R^{>TBRz;GCL~=}}db8eHWUl3bOYY?-2N zZ^z4JQ(*-(Avd)oQK2F?C$HG5!d3}vuoaLE64qC;vnfhRvkG!?gQ@`XY?U%fN(!v> z^~=l4^~#O)@{7{-4J|D#^$m>ljf`}GDs+o0^GXscbn}Xpp$5357AF^F7L;V>=P7^; zOiaozEwNQ9EzL}^N=r;LO-e~I)lEt?PSG_qOi9#DOffdpO))l3F*h}|FiJB_Qi57v zl9`6EKd%@X48Q=<2g&Fg>KTBX3}RdP7iFdbT>-Mv&d>%dk0NHH4{`{S!|Wg;K)(W6 z@Q?uo6FhWN^MFBG4h%b;DKof%;qKw-;us$iXU=_?`IGgTe~DWM4f(2K!C diff --git a/Scripts/Scale125/immersive-megashine6.png b/Scripts/Scale125/immersive-megashine6.png deleted file mode 100644 index 85fa5c5b9eacff504baf122129962a2c07a6b613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmeAS@N?(olHy`uVBq!ia0vp^96-#(!3HE#r_6l|q!^2X+?^QKos)S9a~60+7BevL9R^{>TBRz;GCL~=}}db8eHWUl3bOYY?-2N zZ^z4JQ(*-(Avd)oQK2F?C$HG5!d3}vuoaLE64qC;vnfhRvkG!?gQ@`XY?U%fN(!v> z^~=l4^~#O)@{7{-4J|D#^$m>ljf`}GDs+o0^GXscbn}Xpp$5357AF^F7L;V>=P7^; zOiaozEwNQ9EzL}^N=r;LO-e~I)lEt?PSG_qOi9#DOffdpO))l3F*h}|FiJB_Qi57v zl9`6EKd%@X48Q=<2g&Fg>KTBX3}RdP7iFdbT>-Mv&d>%dk0NHH4{`{S!|Wg;K)(W6 z@Q?uo6FhWN^MFBG4h%b;DKof%;qL3{;us0fhdEP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0T4+l0p~-2L|K8T zA^*Lem1Fxs(Wsq8OVI~4V}Cp z7kHZ|xV9O{cB=~$b$Rs4aCYy3O!*QfylAZ|b6kPG<>LGy0Qt%aNScSrbsU%DWa!~^ zx%Qd!lvI6;>1s;*b3=BdgAk26#O}+vs_}SCNF+?M{_jGJG8j?c=URKY}p)9znI2g{|9Hh*Q}fU;Lc=)-w$UmcDQbQoJD+JO5>4K zg^SYWK>^Z1r)8>zTmOYT)Czgg{)bPgHF1rjTEP{G7OBG>vBxFz(j@bquf3?mZrYgK zchTnf-AAI|``RyDs#y{1#8TZ+03 u?l$EJ$XFB^EZX9-#Op{^`^<@NKQIdWupeLWKB@ueeFjfgKbLh*2~7Z4)0D9Q diff --git a/Scripts/Scale125/lag1.png b/Scripts/Scale125/lag1.png deleted file mode 100644 index 50510c8ef52dc1294ddd382b20ecee1104752f67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^B0$WJ%onABL2v8A&r>mdKI;Vst02dDz^Z)<= diff --git a/Scripts/Scale125/lag2.png b/Scripts/Scale125/lag2.png deleted file mode 100644 index ce17bc8e0a8e70c767b4bfc360aef2e0222be051..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^B0$WN>I=mAwQc)I$ztaD0e0szt-6`}wD diff --git a/Scripts/Scale125/lag5.png b/Scripts/Scale125/lag5.png deleted file mode 100644 index 4d723dd860935be5e1188abc0844e2775d05c960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W>e77We=F diff --git a/Scripts/Scale125/missionwonder.png b/Scripts/Scale125/missionwonder.png deleted file mode 100644 index 10d71b17894e0507f76f7e2a24366f898f8bd207..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 718 zcmV;<0x|uGP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0%J);K~z{r?U&1P z5j^nkdIvLFf0n!KmS6cCkhe}j!&eMnF#s!MegB=QKupbhDPnB zb|M+9hmTDp$xNj4UooWg|EwV#O{ap1zB8o3@;MN1+zit3)E_U~1twFbEM;D2Whai5MB3bLO zt-hi&9Eu_!DxhfXrYXW&hgWA+FM-HJ6dr;2F$rw|hCEPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0d+}4K~y+TrOQoI z+E4(6;rsJ#^tkIV5LP3_S12ef>bmL4E%$H49% z6>0ZNwB2*s!y29Y2Ay$}u75>$@`0NNo8Cj0UeKc#+#(z;amE>is}20;xstTT)(hSL`AmurNMBzvJm2N`t`8tABaFfE~{W%R6qj!krOfqt|QQF6v! zd`2`ol0-8_6c-MX0?}iEFf|C%BH^M!xHJ*TQj#nr$vl@HDUx|^p@^4?c%_Kf1>#MS zcvC{mH3_!3HE(@-7Ea>7Fi*Ar*6S`y#mxJMcKq-+uD1 zf7pxg^OMd6naC?Pa3_!3HE(@-7Ea@t!V@Ar*6S`@FdhIB+-%m%jO% zf6Y~V@97#HuGS#64+2V`o>bmdR5I`tS*yuczQg(qkCMx~@=lI5TMdqBRK1^395($= zvWg;0(JC*`S>`LUJUtZb*za@%ed5}zZ+73-)7^CbkviFrK&u!$UHx3vIVCg!09AD} AB>(^b diff --git a/Scripts/Scale125/normal6card6.png b/Scripts/Scale125/normal6card6.png deleted file mode 100644 index f0671aa7a8332963be784db431bfb6d069db950b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^(m>3_!3HE(@-7Eash%#5Ar*6Cdn36H8}PWKZ~5^r zocoJ*_{8Z7lIB~O`5Pr(e*AUEd#Zux46Ufoz2-AGJ)B%V%x6tF7y0F0cgF#V#bs9` zZ&oF%I0!f$y8GZ=>&%B1=QxEw{nkleqOmB&eafWxv*(y!JusVZZTwIeXd#2AtDnm{ Hr-UW|wUawm diff --git a/Scripts/Scale125/notenoughitems.png b/Scripts/Scale125/notenoughitems.png deleted file mode 100644 index 604238bfd7c0300b0e92276e6dab0c68fdcf8c83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmV-n1D^beP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0`^HnK~y+Tt(4nK zR8bVh&wpi_=#asTHIOD1sL?|~3I#p*5_YkI3_*&-BuILQiXP0&B+VivQk+r7%NUN% z&2cVgX3m`ZnTr#Atvx!Ta|@z}AN%aH_x{$}Yp=C9IkgL3PQu}d!4;AaOz4QIDF}KB zY%NbhPa|PuASE+L{#SyFYbh*yV{r2lLL@AfIIN0yp^4YAzS)DVkRKr-g0QHQ1L=y! zIEOn5S5QJkGQbQKZjNgT4CM|Ctq;1;1}%OThTH{Ryo8M~pSx)}1DtbPfIp_>gbNo% z3WKH$lJGO=+5j}6oy40-{02mQ9HE(3EN$_*8x)>paGr<^UP+d;t|W%w`*0faWYZo~ zP0)i@=u!uS^;_8a)&_@t6ahgid7cX-H1fLGa?YDjD+%?$|B-~fT@Y;-pg1ki)d57O ztq4qBgl&EVUS26W&)_0bvgoIjq%n3Co{?J~mSR&0N6 z$K2XBqIB~@4F*?gAuOr6*fNxG3wYZ}$i7yn{CTLMZp6MfB1GY`&Ax&=ER}!IsB-in zbB{8k9JE@|hWm7N@$5ZhL``IEIX}E_?*m`b)Yp5QpPio=luffXGWB4^(L&6ry5;JD) zD;0|;Pm#FyWgR>(>fsu!!*X9O7VcNW_MjSzeN~7~nXxka80&!q^_j|EGdO`_&cyRx zus7InyWz5r!S?kvi5`djVHFl1RbglB1Qu4EI2_7K)Lj`2O;UhuIS+)MOee8`D{WN}pig%vj!_$R3aijLrAo6k4|2vcC$!lv&j7ZSF-p6!s_8QP}4gR00000NkvXXu0mjf$L55m diff --git a/Scripts/Scale125/player.png b/Scripts/Scale125/player.png deleted file mode 100644 index 1e0d87059055068d3dce558f3b1c4312522019d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 766 zcmVjlUq+yK@^3*nNwO$PfJ_0B4D)@tcWcL0-{7>h_{%S z_*Z=}K6oP}3JBYqLStK{Y^1CwrBWG9%BDet__GGK zUEko>UZoUL$~tKN+jpMMB++#jnQWe8J%}zUHJWH~g%2BNDe<$>zzg|6qJH zPNlNRz3CY)OpZ_}6iLh`*{oI>h((EnyLpm$fxpem(%TiTT$(@vm{x^Xi_3H#3^IJ` z1ox(AFioqO63xNcu|W*Ci~A2}2nGYpKVQVEY?4anSj(@Y3CZm{kBNl4Ien_1hmYql zO^c78QYQwqb-Sxv9)FfRn{?LLwV%WM?Op`g+ zy*(jbCf^bY9YiTbaG!sd(Hfw-uG4WKKw-nh(90_$cYEGwvc>l4ccOv2Lrd$H}ydKV<8`?#~@1m+| wxSURIT%V$~)%j0%MQ+2i>!0}VKK@?BPwC+WO;dBE3IG5A07*qoM6N<$f>vu?j{pDw diff --git a/Scripts/Scale125/requests.png b/Scripts/Scale125/requests.png deleted file mode 100644 index a96576791cd6be32181f411190459ce1dcf18a03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR!3HGFEa~60+7Besim4Gngy)^j>paw}#7sn8d;L=N{%bE-X*dFZp-<|pO!mW8> zovg|poDY>+x^G;)@0qdnP@*CCC*L$RMV;*R675&SD}s`ne(yL`wSGg2o@7kVhm=ID{@uuCG0`Dl3Iw%x}PJ}T?1 zyv~#7FY02YYnc#o?r~q)E#(WxQ=*#djOM&oPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1CL2WK~y+TEzikM z8+R1I@%ejt>8(<4z4a7TNmZ$hs;HMJZ9|DfnnWdu+JuMzWebZ96qgttIB1)H&1 z4A@}C>tLJ37%+wqmY)et5heOowR-qSPfvPZ=}B+TFF1U6!G7UAn}=rvGW*m|Epf{- z&et9N+~}I%#eA5y_&O$igVt!8y5$5-+A8%fFHJ5VQeM0#kw0M|wn^n&h~H!X z-C-v;JFR?gwsHHl%un_issmA8E<`Bz1}JsRa7R|TJwAo>(yvjs5XBJEiN87K^6CTc zFRxh4?(tyML;3g&CA|(xdhFabD}3JC&&@uCoBcMvwc5GXZbhnFjM1{3V0L?-^UJGZ z_uu0>6rBm2Gdyrdxxwa z7s#HT5zfD*C!FH3XMr-uEM=})p4j}{>vI*~yJNO--O$6Ae^`->krak-l7>JGla@qD zZQ;x8;!JPR7KriKdQ6j69$X@O#(>!$hc{Dl4SDgcVQfWkL(UMdxM0n~A(jL(W zpKYL@XVK5Mi*vBB%3?uhUL=@1i5Gc~V*Koy<5uqkpH_DuH7v!ktVIck#Q$_G`!4zq z+^8oj#Ymu_6BIf#rx6x~PFGIh&zy{LOXiDq3sQGdD;@^LDnXHCNhC4n?ZsV4q>5HV zn#Gd@=A6B#JLkatc8Ttsla7oH$r4x4#2R6-MntR=E!rS1G9*L>U2Ks!&5#mVQevCf z$p%9?740ZRUAUXqQ3dI-T+MIpCN>K>HcxY8#2#6ZCvuc#R~)b_-Vi%lXK2&IjyS-c z^J9vQ@hZ^A6Q>c6XBnwVZsJ#49Rr#|B$s06C{O#!ATxQ5@wm#d5NsdkD6>~lGuz2C zuYre3J+j+Jvu6~uS4FCo%{1B#bg13bPPKDiuB241;E}7AAIG0lGEqUFJb_J72|6P@ zwYSo&4l|GS#-^aYS=#;kZIU09qJYLynA+Zrgh)$mZR;=WwP1G$C@n}KJFfuJW& zt9z6lb&6qMfU)TiH%x;_b;E9UJX`oCUGzH4SRI3Ct|$(NN|n;apxsWFV}y3s5Ivqr ooZb*NUkLYfoNqdk07*qoM6N<$g7Ep+eEI#`Dw(8-gz6QPp&Z!xh9#uuD!Bu`C$yM3OmMQA? zcD!6R6;?nKa#KqZ6)JLb@`|l0Y?Z(UTLIZ1VSOb#o1&C7s~{IQs0tv@Rw<*Tq`*pF zzr4I$uiRKKzbIYb(9+UU-@r)U$VeBcLbtdwuOzWTH?LS3YJf{>adJ^+K}lwQo&w0g z#H9Sv5?iIx(##aAw8S*iq?8m>-K0e06kS8ZltkUc6k|i(6l3EQb5lbLqcp=LC8+f! znP~|7^NOLt01Oa)kc_^eo&m_oAhwl%QD!R86(B3^3~j*jC}KAHAcr71%nl*~^ed1B z4;fG}!9zDS4;ZB7z_8PqGJ_i!?jfEojv*4^z9$U18XS07FW#*GZ><%z;vnlmQPrG| z*4|*-HdUqh9XfIoSpyz=GpKa@na|HD(ZrhMa)i>z_V;bu9IWqt c{O(5)eFuI0{ak^M4M7p>>FVdQ&MBb@0L1OTO#lD@ diff --git a/Scripts/Scale125/shiny2star1.png b/Scripts/Scale125/shiny2star1.png deleted file mode 100644 index a5a48525064731a6b03339483e642e692d8b51d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 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 X7bgo#RBqY?P$YS}`njxgN@xNAbgZee diff --git a/Scripts/Scale125/shiny2star6card-megashine2.png b/Scripts/Scale125/shiny2star6card-megashine2.png deleted file mode 100644 index 2e871285339b2b7d033a6157451c9b9409e7750c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y>!3H9qs_+0Q#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!hW5;mh>{3jAFJg2T)o7U{G?R9irfOAY6b=y z`-+0Zwic-?7f?V97Du6s&rHqo20xNy} z^73-Ma$~*xqI7*jOG`_A10#JSBVC{h-Qvo;lEez#ykcdj0WPV<$wiq3C7Jno3Lpa$ zlk!VTY?Vq&GgGY664OkRQc_HHlM;m&?f<|3{sm(ue#XBHAAlFVdQ&MBb@045i}YXATM diff --git a/Scripts/Scale125/shiny2star6card-megashine3.png b/Scripts/Scale125/shiny2star6card-megashine3.png deleted file mode 100644 index 77e84deebfb13f4a4f359e61826a5e12cc30e6ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y}!3HGH?)<(INHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%=PdAuEM{QfI}E~%$MaXD05!B{hD4M^`1)8S=jZArrsOB3>Q&?x097+E z*w|MTBqnF4mMA2prf25as=wd8UtJ+H#a2Ds)Yrhbz&SM|)1#^=HMq(zB)KX(*)m1l z-j0{croswnLT+kFqC!P(PF}H9g{>0UU@IUSB&@GwXH%4tW)z9|8>y;bpKhp88yV>WRp=I1=9MH?=;jqGLk)0AElw`VEGWs$&r<*y zn3$AbT4JkITAG<+m6n)hnv{}as+*K(oT6)Jn3AZQm||?Gn__I7Vs2_^VU%W=qy)9T zBr^?Re_k;(7=Qty50cS0)H47%8N{~oFUm{>x&maSouLg_9!1PXALI}uhuJ|yfPMwC z;2{GFCV1$k<^hAW92j;wQ)X}j!#&N@#W6%8oH3eV$$y45*KYs+{r4{zGx0P2W%vM! zn*aY97y|#me`|fC|7Xwc_|KrBtnz=$>aPF4e?R)q(9%=-|IPOY q|9^ix_@Bwx-j{*l_frOj$1fS2IP{{orfl>Cndj;1=d#Wzp$Py~Jke7C diff --git a/Scripts/Scale125/shiny2star6card-megashine4.png b/Scripts/Scale125/shiny2star6card-megashine4.png deleted file mode 100644 index 0361c388c0ec6609d2a337727578a1dfec4936b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-a!3HGrH`~quQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKn?AgArU1JzCKpT`MG+DDfvmMdKI|^K-CNk zHue<-iOJciB??KY>6v-9>hE{&S69ePu~iQ@^)>JLw)`r|23QrX=bnrWhOQrWhNin420}7^N8|DM76- z$xK7opH~bG24H~bgJkp#^$b8x2C=RDi!xJzt^iqSXJ`YKM-j8p2RQ`EVRjG^pkIM3 zc*uZ)2_CwsdB7ko2Zo)_lo{N>aJTSuaSV|NXVhi5^q=wf-@pGE{{LrS4DfOIudAcR z!1Vg@Cx(DfVDxWU-Sz+X???X`zkR>|pY_)x27x;gC2|`~eL#`t>FVdQ&MBb@0I7tz A@c;k- diff --git a/Scripts/Scale125/shiny2star6card6.png b/Scripts/Scale125/shiny2star6card6.png deleted file mode 100644 index a2d4cb0e127269a2d1e88f3673c60e0d6c0c23f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V!3HGfJ?-}dQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0V%NfHbp6ERzWUqP!&L)tx`rwNr9EV zetCJhUb(Seeo?xG?WUP)qwZeFo6)Bu;%;^d;tf|AVqJOz+} ziAnjTCALbXrI{&KX^Cm3Nhv9&x=D$~DY}M+DT%s?DaMAnDaOVr=B9=gMrnpgN>J-d zGSd+D=M_VP0T>|qAQ^o_Jp+)FL2N7kqRdpFD?nD-8QOs5QN(QYK@LH3m>om}=vN>M z9x|X{f`@Ku9xzDDfnldJWd=7e++#gm9780+Sr5MEZ88vPxY(ba^+-qOfsD_gDLe<5 z)KoS6r^@U4>Mxz+eEZ7H_llPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0gp*UK~y+TozrPg z!axuPVE_N$5{OX~1Mw(_oTc=>+imf~_|CRK15=HDcmtukPiJJ%)*3oN!fc#uhj8+1i0hitf9PnvHg$(hVGgUXpHNa`tSs2tlENJUz zGL)9JhPWLWQ7w|w*2`#V$1=ntAgPGqh(2 zEv;;ZLK%Ae49T$4^Q5}r=ckHHRJ8F@TJ*KX&|vD*#~HhT&6;Lf`?zUu?WR4@0+8Wr z>}4IH4F#};QmkpCM-R-zp^MNHDjH6M217>pKHkP;q8+|d8r63T7-C_M2u-l53!SPP z&V71bhV*788g<+M8G|Ck2RWKYGPx#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1o}xtK~zXfotEoQ zlV=!*{ipVQOSWZZ%d%|o!(w3gf+ZM{nTzlRcP_KgC4gJ ztl*ZvWO9uvP9GC zxt#lgi41GIzy%VkoL2YHGwEou+uq$;DnPXZ0rj8nAJ!)xd$uCk#1*xnyxs-2Z|8uRX!Z)y_sF ziiaE&TPD%WEQ-zYTqMd;*fqefPkK21sDr#}HD4>+I3$+(psJk%)lGa>UdPoTJB^mv z7kwwK<=lTAOxB*@BI0I2{}?61lRU7y1=KoQ+t0~tY%%B$Q)YH@O=sn_O3$$xEk7yS zIa1Zer`M~v(P$yxXr)-VD!b;h;y*%sqxojBXl*Y($wUJZpeVpqybGS~;C%2URcK;s~7B%me zJfyBw#lWPWIWZ>WMDp^=@ny+9Ezh}kf|EZwueWenxKk#;t_+OQ;Bnx{cyO&QGLf0X zntFyMHH}$v=A@6ZRfXm8o@(|tisYgn<1Km&p>f8fXV@e+c4;Q3NoiKdgHxJgN?eEH6Ep<$Io131 ze4}{8{#y^I=&+&DX|S6v;7_Spcs|KeT1#l*2IkzDk@f&5oIBc}<>-?R^0lQ@jHtwU z>1R<2Ft_5vFNFw7VN78=W5Fr9gTs`K)lp)4%%I-Rk=iCcE>&=}s)=D&kj}=l_%_V= z*82(j3ki9zh(26mA-V@RxoN+z@8od3hQHPKxU9ZTFcu=etCYu14HedUarm2Q8tvv% zM=7_uYG}0^88S>z)6>fVWg{QTaEcaevtdTu4gqIjIr1+t&q<=5({$Sw#Ce*)7g>2L zoID>R0xl}U$qoAgZXHiJN#5gD6dENDwGS!LlygB{#F@52PPG z?hYD^CW_jPd~~;l4@w`}pWd&d0pT0;USSI=|iZ_&GO2D}U n+^m4}3b-W!CvTcpa9REX>plkft=p4<00000NkvXXu0mjfG&+@y diff --git a/Scripts/Scale125/wrongItem.png b/Scripts/Scale125/wrongItem.png deleted file mode 100644 index 7f4b5a1c1e708f3b9892b2772f098c7ccd0b1f06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmV-p0i6DcP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0QgBnK~y+Tosu~Z zK|vIS=O-)FA_@_C2v1@O(TTlLD^&KvTG$dl0EG}VBj;LT?nO|XcXQ9V-@JJ7D~rnvD+?m&hX;Qm)IRBw-jcL8~yWye#oUVi`p002ovPDHLkV1m}W Bl92!a From 0000d766918e6cf01cc3df477c0188164c72f9c2 Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Thu, 21 May 2026 12:42:16 +0900 Subject: [PATCH 06/10] Stabilize scale 125 reroll flow --- PTCGPB.ahk | 6 +++--- Scripts/1.ahk | 5 ++++- Scripts/Include/FriendManager.ahk | 30 ++++++++++++++++++++---------- Scripts/Include/Logging.ahk | 22 ++++++++++++++++------ 4 files changed, 43 insertions(+), 20 deletions(-) diff --git a/PTCGPB.ahk b/PTCGPB.ahk index 5a209b58..71160628 100644 --- a/PTCGPB.ahk +++ b/PTCGPB.ahk @@ -1972,7 +1972,7 @@ StartBot() { discMessage .= selectMsg if(botConfig.get("groupRerollEnabled") || (!botConfig.get("groupRerollEnabled") && botConfig.get("heartBeatOwnerWebHookURL") = "")) - LogToDiscord(discMessage,, false,,, botConfig.get("heartBeatWebhookURL")) + LogToDiscord(discMessage,, false,,, botConfig.get("heartBeatWebhookURL"),, false) if(botConfig.get("heartBeatOwnerWebHookURL")){ FormatTime, currentTime, , yyyy-MM-dd HH:mm:ss @@ -2005,7 +2005,7 @@ StartBot() { discMessage .= "\n--------------------------------------------------" - LogToDiscord(discMessage,, false,,, botConfig.get("heartBeatOwnerWebHookURL")) + LogToDiscord(discMessage,, false,,, botConfig.get("heartBeatOwnerWebHookURL"),, false) } if (botConfig.get("debugMode")) { @@ -2051,7 +2051,7 @@ SendAllInstancesOfflineStatus() { discMessage .= selectMsg discMessage .= "\n\n All instances marked as OFFLINE" - LogToDiscord(discMessage,, false,,, botConfig.get("heartBeatWebhookURL")) + LogToDiscord(discMessage,, false,,, botConfig.get("heartBeatWebhookURL"),, false) } ReceiveData(wParam, lParam) { diff --git a/Scripts/1.ahk b/Scripts/1.ahk index 82536dcc..af22b21d 100644 --- a/Scripts/1.ahk +++ b/Scripts/1.ahk @@ -1042,7 +1042,7 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria confirmed := vPosXY } else { ElapsedTime := (A_TickCount - session.get("StartSkipTime")) // 1000 - if(imageName = "Country") + if(imageName = "Country" || imageName = "Social" || imageName = "Points") FSTime := 90 else if(imageName = "Missions" || imageName = "DailyMissions" || imageName = "DexMissions") FSTime := 60 @@ -1243,6 +1243,9 @@ restartGameInstance(reason, RL := true) { if (RL = "GodPack") { LogToFile("Restarted game. Reason: " reason) IniWrite, 0, % session.get("scriptIniFile"), UserSettings, DeadCheck + ; Valid GP keeps friends by design; do not let startup recovery remove them. + ClearFriendCleanupPending() + session.set("friended", false) if (!botConfig.get("groupRerollEnabled")) AppendFriendCodeToManualVipIds(session.get("friendCode")) SendMetadataToPTCGPB(session.get("packsThisRun")) diff --git a/Scripts/Include/FriendManager.ahk b/Scripts/Include/FriendManager.ahk index f266d6fb..67472bfd 100644 --- a/Scripts/Include/FriendManager.ahk +++ b/Scripts/Include/FriendManager.ahk @@ -152,10 +152,6 @@ AddFriends(renew := false, getFC := false) { waitSendResult := A_TickCount interceptProc := true Loop{ - if(!isSendReqeest && FindOrLoseImage("Friend_RequestButtonInSearchResult", 0, failSafeTime) && (A_TickCount - waitSendResult) > 1000){ - adbClick_wbb(243, 258) - isSendReqeest := true - } Delay(0.25) if(FindOrLoseImage("Friend_WithdrawButton", 0, failSafeTime)) break @@ -167,6 +163,14 @@ AddFriends(renew := false, getFC := false) { } else if(FindOrLoseImage("Friend_CannotFriendRequest", 0, failSafeTime)) break + if(!isSendReqeest + && (A_TickCount - waitSendResult) > 2500 + && FindOrLoseImage("Friend_RequestButtonInSearchResult", 0, failSafeTime, 40, true) + && !FindOrLoseImage("Friend_WithdrawButton", 0, failSafeTime, , true) + && !FindOrLoseImage("Friend_AcceptedButtonInSearchResult", 0, failSafeTime, , true)) { + adbClick_wbb(243, 258) + isSendReqeest := true + } if ((A_TickCount - waitSendResult) > 10000) break } @@ -221,19 +225,25 @@ AddFriends(renew := false, getFC := false) { menuClickX := GetScaleProfileValue(240, 245) menuClickY := GetScaleProfileValue(494, 520) menuOpenSleepTime := GetScaleProfileValue(botConfig.get("Delay"), 1000) - FindImageAndClick("Menu_InventoryIconInMenu", menuClickX, menuClickY, , menuOpenSleepTime) + inventoryIconPos := FindImageAndClick("Menu_InventoryIconInMenu", menuClickX, menuClickY, , menuOpenSleepTime) menuSettleDelay := GetScaleProfileValue(0, 1) if(menuSettleDelay > 0) Delay(menuSettleDelay) - miscClickX := 105 - miscClickY := 435 - ; Stability patch: this coordinate opens Misc in the hamburger menu, but becomes Go To Title after navigation. + + if(!inventoryIconPos) { + restartGameInstance("Stuck at InSubMenu...") + return false + } + + StringSplit, inventoryIconCoord, inventoryIconPos, `, + miscClickX := inventoryIconCoord1 + GetScaleProfileValue(8, 7) + miscClickY := inventoryIconCoord2 + GetScaleProfileValue(170, 167) + ; Anchor the Misc tap to the visible inventory icon so 125-scale menu drift cannot hit Trade. adbClick_wbb(miscClickX, miscClickY) miscWaitStart := A_TickCount Loop { if(FindOrLoseImage("Menu_GoToTitleButton_Up", 0, , 60, true) - || FindOrLoseImage("Menu_GoToTitleButton_Down", 0, , 60, true) - || FindOrLoseImage("Menu_MiscMenuLeftTop", 0, , 20, true)) + || FindOrLoseImage("Menu_GoToTitleButton_Down", 0, , 60, true)) break if((A_TickCount - miscWaitStart) > 5000) { diff --git a/Scripts/Include/Logging.ahk b/Scripts/Include/Logging.ahk index c7338ca4..90178538 100644 --- a/Scripts/Include/Logging.ahk +++ b/Scripts/Include/Logging.ahk @@ -267,7 +267,7 @@ PruneLogArchives(archiveDir, nameNoExt, ext) { } } -LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screenshotFile2 := "", altWebhookURL := "", altUserId := "") { +LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screenshotFile2 := "", altWebhookURL := "", altUserId := "", logSuccessfulDelivery := true) { discordPing := "" if (ping) { @@ -294,6 +294,7 @@ LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screen if (webhookURL != "") { MaxRetries := 3 RetryCount := 0 + discordTraceId := CreateDiscordTraceId() try { RegRead, proxyEnabled, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings, ProxyEnable RegRead, proxyServer, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings, ProxyServer @@ -309,7 +310,7 @@ LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screen payloadFile := CreateDiscordPayloadFile(discordPing . message) if (payloadFile = "") { - LogToFile("Discord send failed before curl: could not create payload file | webhook=" . RedactDiscordWebhookURL(webhookURL), "Discord.txt") + LogToFile("Discord send failed before curl: could not create payload file | trace=" . discordTraceId . " | webhook=" . RedactDiscordWebhookURL(webhookURL), "Discord.txt") return } @@ -350,7 +351,8 @@ LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screen ; Add the webhook curlCommand := curlCommand . """" . webhookURL . """" - LogDebugToFile("Discord send attempt | attempt=" . RetryCount . "/" . MaxRetries . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | files=" . fileCount . " | messageLen=" . StrLen(message), "Discord.txt") + if(logSuccessfulDelivery) + LogToFile("Discord send attempt | trace=" . discordTraceId . " | attempt=" . RetryCount . "/" . MaxRetries . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | files=" . fileCount . " | messageLen=" . StrLen(message), "Discord.txt") ; Send the message using curl if (IsFunc("CmdRet")) { @@ -363,17 +365,19 @@ LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screen httpStatus := GetDiscordCurlHttpStatus(curlResult) if (httpStatus >= 200 && httpStatus < 300) { - LogDebugToFile("Discord send complete | status=" . httpStatus . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | files=" . fileCount . " | messageLen=" . StrLen(message), "Discord.txt") + if(logSuccessfulDelivery || RetryCount > 1) + LogToFile("Discord send complete | trace=" . discordTraceId . " | status=" . httpStatus . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | files=" . fileCount . " | messageLen=" . StrLen(message), "Discord.txt") break } - LogToFile("Discord send failed | attempt=" . RetryCount . "/" . MaxRetries . " | status=" . httpStatus . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | files=" . fileCount . " | result=" . TrimDiscordCurlResult(curlResult), "Discord.txt") + LogToFile("Discord send failed | trace=" . discordTraceId . " | attempt=" . RetryCount . "/" . MaxRetries . " | status=" . httpStatus . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | files=" . fileCount . " | result=" . TrimDiscordCurlResult(curlResult), "Discord.txt") } catch e { - LogToFile("Discord send exception | attempt=" . RetryCount . "/" . MaxRetries . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | error=" . FormatDiscordException(e), "Discord.txt") + LogToFile("Discord send exception | trace=" . discordTraceId . " | attempt=" . RetryCount . "/" . MaxRetries . " | webhook=" . RedactDiscordWebhookURL(webhookURL) . " | error=" . FormatDiscordException(e), "Discord.txt") } if (RetryCount >= MaxRetries) { + LogToFile("Discord send exhausted | trace=" . discordTraceId . " | attempts=" . RetryCount . " | webhook=" . RedactDiscordWebhookURL(webhookURL), "Discord.txt") CreateStatusMessage("Failed to send discord message.") break } @@ -384,6 +388,12 @@ LogToDiscord(message, screenshotFile := "", ping := false, xmlFile := "", screen } } +CreateDiscordTraceId() { + static sequence := 0 + sequence++ + return A_Now . "_" . DllCall("GetCurrentProcessId") . "_" . A_TickCount . "_" . sequence +} + CreateDiscordPayloadFile(content) { payloadJson := "{""content"":""" . DiscordEscapeJson(content) . """}" payloadFile := A_Temp . "\ptcgpb_discord_payload_" . DllCall("GetCurrentProcessId") . "_" . A_TickCount . ".json" From 9d0e1e99af8a1c539e4ae1caeb4cc5ba5cb0f74c Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Sat, 23 May 2026 23:42:54 +0900 Subject: [PATCH 07/10] Stabilize high-load friend and recovery flows --- PTCGPB.ahk | 33 ++++++++++++-- Scripts/1.ahk | 24 +++++----- Scripts/Include/ADB.ahk | 2 +- Scripts/Include/FriendManager.ahk | 76 +++++++++++++++++++++++++++++-- Scripts/Include/Monitor.ahk | 45 ++++++++++++++++++ Scripts/Include/MonitorOnce.ahk | 45 ++++++++++++++++++ Scripts/Include/Utils.ahk | 62 +++++++++++++++++++++---- Scripts/Main.ahk | 10 ++-- 8 files changed, 263 insertions(+), 34 deletions(-) diff --git a/PTCGPB.ahk b/PTCGPB.ahk index 71160628..ec653edd 100644 --- a/PTCGPB.ahk +++ b/PTCGPB.ahk @@ -1471,14 +1471,18 @@ BalanceXMLs: if !FileExist(saveDir) FileCreateDir, %saveDir% - tmpDir := A_ScriptDir "\Accounts\Saved\tmp" - if !FileExist(tmpDir) - FileCreateDir, %tmpDir% + tmpRoot := A_ScriptDir "\Accounts\Saved\tmp" + if !FileExist(tmpRoot) + FileCreateDir, %tmpRoot% + + FormatTime, balanceRunId,, yyyyMMddHHmmss + tmpDir := tmpRoot . "\balance_" . balanceRunId . "_" . A_TickCount + FileCreateDir, %tmpDir% Tooltip, Moving Files and Folders to tmp Loop, Files, %saveDir%*, D { - if (A_LoopFilePath == tmpDir) + if (A_LoopFilePath == tmpRoot) continue dest := tmpDir . "\" . A_LoopFileName @@ -1558,6 +1562,9 @@ BalanceXMLs: if (instance > botConfig.get("Instances")) instance := 1 } + + ToolTip, Restoring preserved files + RestorePreservedSavedReadmes(tmpDir, saveDir) instanceOneDir := saveDir . "1" counter := 0 @@ -1576,6 +1583,24 @@ BalanceXMLs: } return +RestorePreservedSavedReadmes(tmpDir, saveDir) { + Loop, Files, %tmpDir%\*, FR + { + if (A_LoopFileName != "readme.md") + continue + + relativePath := SubStr(A_LoopFileFullPath, StrLen(tmpDir) + 2) + if (!RegExMatch(relativePath, "i)^(\d+)\\readme\.md$", readmeMatch)) + continue + + restorePath := saveDir . readmeMatch1 . "\readme.md" + SplitPath, restorePath,, restoreDir + if !FileExist(restoreDir) + FileCreateDir, %restoreDir% + FileMove, %A_LoopFileFullPath%, %restorePath%, 1 + } +} + ; =================== Logic - Launch All Mumu Button Action =================== LaunchAllMumu: Gui, Submit, NoHide diff --git a/Scripts/1.ahk b/Scripts/1.ahk index af22b21d..2c032d2d 100644 --- a/Scripts/1.ahk +++ b/Scripts/1.ahk @@ -245,21 +245,23 @@ if(DeadCheck = 1 && botConfig.get("deleteMethod") != "Create Bots (13P)") { Delay(1) startPreProcess(botConfig.get("deleteMethod")) RemoveFriends() - if(session.get("injectMethod") && session.get("loadedAccount") && !session.get("keepAccount")) { - MarkAccountAsUsed() + if(session.get("injectMethod") && session.get("loadedAccount")) { + LogToFile("Recovery cleanup complete. Keeping recovered account in queue unless its XML was already updated: " . session.get("accountFileName")) + ClearLoadedAccountRecovery() session.set("loadedAccount", false) + session.set("currentLoadedAccountIndex", 0) } DeadCheck := 0 IniWrite, 0, % session.get("scriptIniFile"), UserSettings, DeadCheck createAccountList(session.get("scriptName")) CleanupBeforeExit() - SafeReload() + SafeReload("DeadCheck friend cleanup complete") } else if(DeadCheck = 1 && botConfig.get("deleteMethod") = "Create Bots (13P)") { CreateStatusMessage("New account creation is stuck! Deleting account...") Delay(5) menuDeleteStart() CleanupBeforeExit() - SafeReload() + SafeReload("DeadCheck create bots cleanup complete") } else { ; in injection mode, we dont need to reload @@ -959,7 +961,7 @@ FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation } LogToFile("Restarted game. Reason: No save data found") CleanupBeforeExit() - SafeReload() + SafeReload("No save data found") } } @@ -1109,7 +1111,7 @@ FindImageAndClick(needleName := "DEFAULT", clickx := 0, clicky := 0, searchVaria } LogToFile("Restarted game. Reason: No save data found") CleanupBeforeExit() - SafeReload() + SafeReload("No save data found") } } @@ -1252,7 +1254,7 @@ restartGameInstance(reason, RL := true) { PersistStopAfterRunIfNeeded() CleanupBeforeExit() - Reload + SafeReload("GodPack restart") } else if (isStuck) { if(!checkInstance(session.get("scriptName"))){ LogToFile(" Found " . session.get("scriptName") . " instance down! start Instance") @@ -1274,7 +1276,7 @@ restartGameInstance(reason, RL := true) { PersistStopAfterRunIfNeeded() CleanupBeforeExit() - SafeReload() + SafeReload("Stuck restart: " . reason) } else { ; Non-stuck restart: just restart the Pokemon app, not the whole MuMu instance closePTCGPApp() @@ -1292,7 +1294,7 @@ restartGameInstance(reason, RL := true) { PersistStopAfterRunIfNeeded() CleanupBeforeExit() - SafeReload() + SafeReload("Restart game: " . reason) } if (session.get("stopToggle")) { @@ -1879,7 +1881,7 @@ return ReloadScript: CleanupBeforeExit() - SafeReload() + SafeReload("Toolbar reload") return TestScript: @@ -2138,7 +2140,7 @@ Return ; ===== HOTKEYS ===== ~+F5:: CleanupBeforeExit() - SafeReload() + SafeReload("Shift+F5") return ~+F6::Pause ~+F7:: diff --git a/Scripts/Include/ADB.ahk b/Scripts/Include/ADB.ahk index f43ff278..8dbac109 100644 --- a/Scripts/Include/ADB.ahk +++ b/Scripts/Include/ADB.ahk @@ -109,7 +109,7 @@ ConnectAdb() { CreateStatusMessage("Failed to connect to ADB after multiple retries. Please check your emulator and port settings.") else CreateStatusMessage("Failed to connect to ADB.",,,, false) - Reload + SafeReload("ADB connect failed") } } } diff --git a/Scripts/Include/FriendManager.ahk b/Scripts/Include/FriendManager.ahk index 67472bfd..b408bc07 100644 --- a/Scripts/Include/FriendManager.ahk +++ b/Scripts/Include/FriendManager.ahk @@ -137,13 +137,14 @@ AddFriends(renew := false, getFC := false) { } session.set("failSafe", A_TickCount) failSafeTime := 0 + skipCurrentID := false Loop { isContinue := false isSendReqeest := false - Delay(1) - adbInput(value) - Delay(1) - adbClick_wbb(187, 365) + if(!SubmitFriendIDSearch(value, friendIDIdx, n)) { + skipCurrentID := true + break + } Delay(1) if(FindOrLoseImage("Friend_RequestButtonInSearchResult", 0, failSafeTime, 80)) { adbClick_wbb(243, 258) @@ -158,11 +159,16 @@ AddFriends(renew := false, getFC := false) { else if(FindOrLoseImage("Friend_AcceptedButtonInSearchResult", 0, failSafeTime)) break else if(interceptErrorCheck("ADD")){ - isContinue := true + skipCurrentID := true + LogToFile("Skipping friend ID after ADD error | index=" . friendIDIdx) break } else if(FindOrLoseImage("Friend_CannotFriendRequest", 0, failSafeTime)) break + else if(FindOrLoseImage("FriendLimit", 0, failSafeTime)) { + LogToFile("Skipping friend ID because friend request limit/full state was detected | index=" . friendIDIdx) + break + } if(!isSendReqeest && (A_TickCount - waitSendResult) > 2500 && FindOrLoseImage("Friend_RequestButtonInSearchResult", 0, failSafeTime, 40, true) @@ -179,6 +185,17 @@ AddFriends(renew := false, getFC := false) { } else if(FindOrLoseImage("Friend_WithdrawButton", 0, failSafeTime)) break + else if(FindOrLoseImage("Friend_CannotFriendRequest", 0, failSafeTime)) + break + else if(FindOrLoseImage("FriendLimit", 0, failSafeTime)) { + LogToFile("Skipping friend ID because friend request limit/full state was detected | index=" . friendIDIdx) + break + } + else if(interceptErrorCheck("ADD")) { + skipCurrentID := true + LogToFile("Skipping friend ID after ADD error | index=" . friendIDIdx) + break + } else if(FindOrLoseImage("Friend_AcceptedButtonInSearchResult", 0, failSafeTime)) { if(renew){ FindImageAndClick("Friend_RemoveConfirmButtonInSearchResult", 193, 258) @@ -197,6 +214,9 @@ AddFriends(renew := false, getFC := false) { CreateStatusMessage("Processing add friends for `n(" . failSafeTime . "/45 seconds)") } + if(skipCurrentID) + LogDebugToFile("Skipped friend ID during AddFriends | index=" . friendIDIdx) + if(isContinue) continue @@ -578,6 +598,47 @@ showcaseLikes() { ;------------------------------------------------------------------------------- ; EraseInput - Clear friend code input field ;------------------------------------------------------------------------------- +SubmitFriendIDSearch(value, num := 0, total := 0) { + global session + + Loop, 3 { + if(num) + CreateStatusMessage("Entering friend ID " . num . "/" . total . " (" . A_Index . "/3)",,,, false) + + FindImageAndClick("Friend_FriendIDInputReady", 138, 265, , 1000) + adbInputEvent("59 122 67") + Delay(0.25) + adbInput(value) + Delay(1) + adbClick_wbb(187, 365) + + submitStart := A_TickCount + Loop { + if(FindOrLoseImage("Friend_RequestButtonInSearchResult", 0, , 80, true) + || FindOrLoseImage("Friend_WithdrawButton", 0, , , true) + || FindOrLoseImage("Friend_AcceptedButtonInSearchResult", 0, , , true) + || FindOrLoseImage("Friend_CannotFriendRequest", 0, , , true) + || FindOrLoseImage("FriendLimit", 0, , , true) + || FindOrLoseImage("Common_Error", 0, , , true)) + return true + + if(!FindOrLoseImage("Friend_SearchFriendWindowCancelButtonCorner", 0, , , true)) + return true + + if((A_TickCount - submitStart) > 2000) + break + + Delay(0.25) + } + + LogToFile("Friend ID input did not submit; retrying | index=" . num . " | try=" . A_Index) + EraseInput(num, total) + } + + LogToFile("Friend ID input failed after retries | index=" . num) + return false +} + EraseInput(num := 0, total := 0) { global session @@ -592,6 +653,11 @@ EraseInput(num := 0, total := 0) { adbInputEvent("59 122 67") ; Press Shift + Home + Backspace if(FindOrLoseImage("Friend_InputFormBlank", 0, failSafeTime)) break + failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 + if(failSafeTime > 10) { + LogToFile("EraseInput timeout | index=" . num) + break + } } } diff --git a/Scripts/Include/Monitor.ahk b/Scripts/Include/Monitor.ahk index d64a8fd5..7480a998 100644 --- a/Scripts/Include/Monitor.ahk +++ b/Scripts/Include/Monitor.ahk @@ -178,6 +178,8 @@ killAHK(scriptName := "") killedPIDs := {} killed += killAHKWindowsByClass(scriptName, "AutoHotkey", killedPIDs) killed += killAHKWindowsByClass(scriptName, "#32770", killedPIDs) + killed += killAHKWindowsByClass(scriptName, "ConsoleWindowClass", killedPIDs) + killed += killAHKProcessesByCommandLine(scriptName, killedPIDs) } return killed @@ -192,6 +194,8 @@ checkAHK(scriptName := "") seenPIDs := {} cnt += countAHKWindowsByClass(scriptName, "AutoHotkey", seenPIDs) cnt += countAHKWindowsByClass(scriptName, "#32770", seenPIDs) + cnt += countAHKWindowsByClass(scriptName, "ConsoleWindowClass", seenPIDs) + cnt += countAHKProcessesByCommandLine(scriptName, seenPIDs) } return cnt @@ -240,6 +244,47 @@ countAHKWindowsByClass(scriptName, winClass, seenPIDs) return cnt } +killAHKProcessesByCommandLine(scriptName, killedPIDs) +{ + killed := 0 + scriptNeedle := "\" . scriptName + + for process in ComObjGet("winmgmts:").ExecQuery("Select ProcessId, Name, CommandLine from Win32_Process Where Name like 'AutoHotkey%'") + { + commandLine := process.CommandLine + if(commandLine != "" && InStr(commandLine, scriptNeedle)) { + ahkPID := process.ProcessId + if (ahkPID && !killedPIDs.HasKey(ahkPID)) { + Process, Close, %ahkPID% + killedPIDs[ahkPID] := true + killed := killed + 1 + } + } + } + + return killed +} + +countAHKProcessesByCommandLine(scriptName, seenPIDs) +{ + cnt := 0 + scriptNeedle := "\" . scriptName + + for process in ComObjGet("winmgmts:").ExecQuery("Select ProcessId, Name, CommandLine from Win32_Process Where Name like 'AutoHotkey%'") + { + commandLine := process.CommandLine + if(commandLine != "" && InStr(commandLine, scriptNeedle)) { + ahkPID := process.ProcessId + if (ahkPID && !seenPIDs.HasKey(ahkPID)) { + seenPIDs[ahkPID] := true + cnt := cnt + 1 + } + } + } + + return cnt +} + isAHKScriptWindowTitle(ATitle, scriptName) { return (InStr(ATitle, "\" . scriptName) || ATitle = scriptName) diff --git a/Scripts/Include/MonitorOnce.ahk b/Scripts/Include/MonitorOnce.ahk index 8ffcd0e9..958e697a 100644 --- a/Scripts/Include/MonitorOnce.ahk +++ b/Scripts/Include/MonitorOnce.ahk @@ -79,6 +79,8 @@ killAHK(scriptName := "") killedPIDs := {} killed += killAHKWindowsByClass(scriptName, "AutoHotkey", killedPIDs) killed += killAHKWindowsByClass(scriptName, "#32770", killedPIDs) + killed += killAHKWindowsByClass(scriptName, "ConsoleWindowClass", killedPIDs) + killed += killAHKProcessesByCommandLine(scriptName, killedPIDs) } return killed @@ -93,6 +95,8 @@ checkAHK(scriptName := "") seenPIDs := {} cnt += countAHKWindowsByClass(scriptName, "AutoHotkey", seenPIDs) cnt += countAHKWindowsByClass(scriptName, "#32770", seenPIDs) + cnt += countAHKWindowsByClass(scriptName, "ConsoleWindowClass", seenPIDs) + cnt += countAHKProcessesByCommandLine(scriptName, seenPIDs) } return cnt @@ -139,6 +143,47 @@ countAHKWindowsByClass(scriptName, winClass, seenPIDs) return cnt } +killAHKProcessesByCommandLine(scriptName, killedPIDs) +{ + killed := 0 + scriptNeedle := "\" . scriptName + + for process in ComObjGet("winmgmts:").ExecQuery("Select ProcessId, Name, CommandLine from Win32_Process Where Name like 'AutoHotkey%'") + { + commandLine := process.CommandLine + if(commandLine != "" && InStr(commandLine, scriptNeedle)) { + ahkPID := process.ProcessId + if (ahkPID && !killedPIDs.HasKey(ahkPID)) { + Process, Close, %ahkPID% + killedPIDs[ahkPID] := true + killed := killed + 1 + } + } + } + + return killed +} + +countAHKProcessesByCommandLine(scriptName, seenPIDs) +{ + cnt := 0 + scriptNeedle := "\" . scriptName + + for process in ComObjGet("winmgmts:").ExecQuery("Select ProcessId, Name, CommandLine from Win32_Process Where Name like 'AutoHotkey%'") + { + commandLine := process.CommandLine + if(commandLine != "" && InStr(commandLine, scriptNeedle)) { + ahkPID := process.ProcessId + if (ahkPID && !seenPIDs.HasKey(ahkPID)) { + seenPIDs[ahkPID] := true + cnt := cnt + 1 + } + } + } + + return cnt +} + isAHKScriptWindowTitle(ATitle, scriptName) { return (InStr(ATitle, "\" . scriptName) || ATitle = scriptName) diff --git a/Scripts/Include/Utils.ahk b/Scripts/Include/Utils.ahk index 707f2736..b72a30c4 100644 --- a/Scripts/Include/Utils.ahk +++ b/Scripts/Include/Utils.ahk @@ -317,12 +317,50 @@ CompareIndicesByPacksDesc(packs, a, b) { ;------------------------------------------------------------------------------- ; SafeReload - Restart the script without race conditions ;------------------------------------------------------------------------------- -; Use AutoHotkey's built-in Reload path so the current process coordinates -; shutdown before the replacement instance reaches #SingleInstance. -; Launching a new process before ExitApp can race with OnExit/ADB cleanup and -; trigger "older instance already running" prompts. -SafeReload() { +; Use AutoHotkey's built-in Reload path. Keep a small diagnostic trail, but do +; not spawn a separate replacement process from this common reload helper. +SafeReload(reason := "") { + static reloadInProgress := false + + if (reloadInProgress) { + LogReloadMessage("SafeReload re-entered; exiting current process | reason=" . reason) + ExitApp + } + + reloadInProgress := true + currentPID := DllCall("GetCurrentProcessId", "UInt") + LogReloadMessage("SafeReload requested | script=" . A_ScriptName . " | pid=" . currentPID . " | reason=" . reason) + + if(IsFunc("CleanupBeforeExit")) { + OnExit("CleanupBeforeExit", 0) + cleanupFn := Func("CleanupBeforeExit") + cleanupFn.Call() + } + Reload + Sleep, 1000 + if (ErrorLevel) { + LogReloadMessage("Built-in Reload returned ErrorLevel=" . ErrorLevel . " | reason=" . reason) + reloadInProgress := false + } +} + +LogReloadMessage(message) { + if (IsFunc("LogToFile")) { + logFn := Func("LogToFile") + logFn.Call(message, "Reload.txt") + return + } + + logDir := A_ScriptDir . "\..\Logs" + if (!FileExist(logDir) && FileExist(A_ScriptDir . "\..\..\Logs")) + logDir := A_ScriptDir . "\..\..\Logs" + if (!FileExist(logDir)) + FileCreateDir, %logDir% + + logFile := logDir . "\Reload.txt" + FormatTime, now,, yyyy-MM-dd HH:mm:ss + FileAppend, % "[" . now . "] " . message . "`n", %logFile% } LogUtilityMessage(message) { @@ -451,14 +489,22 @@ InitializeHiddenConsole() { if (!DllCall("GetConsoleWindow", "Ptr")) DllCall("AllocConsole") - consoleHwnd := DllCall("GetConsoleWindow", "Ptr") - if (consoleHwnd) - DllCall("ShowWindow", "Ptr", consoleHwnd, "Int", 0) + DllCall("SetConsoleTitle", "Str", A_ScriptFullPath) + HideAllocatedConsole() + SetTimer, HideAllocatedConsole, -1000 if (previousHwnd && WinExist("ahk_id " . previousHwnd)) DllCall("SetForegroundWindow", "Ptr", previousHwnd) } +HideAllocatedConsole() { + consoleHwnd := DllCall("GetConsoleWindow", "Ptr") + if (consoleHwnd) { + DllCall("ShowWindow", "Ptr", consoleHwnd, "Int", 0) + WinHide, ahk_id %consoleHwnd% + } +} + GetScriptIniPathByName(scriptName) { scriptName := StrReplace(scriptName, ".ahk") if (RegExMatch(A_ScriptDir, "i)\\Include$")) diff --git a/Scripts/Main.ahk b/Scripts/Main.ahk index 80e375fa..66b30410 100644 --- a/Scripts/Main.ahk +++ b/Scripts/Main.ahk @@ -215,7 +215,7 @@ Loop { Sleep, 1000 adbClick(139, 386) ; Click OK/confirm Sleep, 1000 - SafeReload() + SafeReload("Main communication error") } else if(FindOrLoseImage("StartupErrorX", 0, failSafeTime)) { ; Handle startup error with X button CreateStatusMessage("Start-up error detected. Clearing and reloading...",,,, false) @@ -223,7 +223,7 @@ Loop { Sleep, 2000 adbClick(139, 440) ; Click X to close error Sleep, 4000 - SafeReload() + SafeReload("Main startup error") } else if(requestAlreadyClosed || clickButton) { okClickSpacing := botConfig.get("Delay") * 2 if (okClickSpacing < 700) @@ -495,7 +495,7 @@ restartGameInstance(reason, RL := true){ LogToFile("Restarted game. Reason: " reason) session.set("isDead", true) IniWrite, 1, % session.get("scriptIniFile"), Metrics, isDead - SafeReload() + SafeReload("Main restart game: " . reason) } } @@ -722,7 +722,7 @@ VipTrimGuiEscape: return ReloadScript: - SafeReload() + SafeReload("Main toolbar reload") return TestScript: @@ -752,7 +752,7 @@ ToggleTestScript() { } } -~+F5::SafeReload() +~+F5::SafeReload("Main Shift+F5") ~+F6::Pause ~+F10:: Gosub, StopScript From 736baa2547ad8a07b351bce630f9826c12415d2e Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Mon, 25 May 2026 15:00:06 +0900 Subject: [PATCH 08/10] Stabilize runtime window focus handling --- Scripts/Include/Logging.ahk | 7 ------- Scripts/Include/Utils.ahk | 13 +++++++++++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Scripts/Include/Logging.ahk b/Scripts/Include/Logging.ahk index 90178538..92f6163e 100644 --- a/Scripts/Include/Logging.ahk +++ b/Scripts/Include/Logging.ahk @@ -49,12 +49,6 @@ CreateStatusMessage(Message, GuiName := "StatusMessage", X := 0, Y := 565, debug guiheight := 25 } - coverHwnd := "" - try { - if (IsObject(session)) - coverHwnd := CaptureMuMuCoverWindow(session.get("winTitle")) - } - try { ; Check if GUI with this name already exists. @@ -87,7 +81,6 @@ CreateStatusMessage(Message, GuiName := "StatusMessage", X := 0, Y := 565, debug } SetTextAndResize(hwnds[GuiName], Message) Gui, %GuiName%:Show, NoActivate w%guiWidth% h%guiheight% - RestoreMuMuCoverWindow(coverHwnd) ; Clear any previous timers. SetTimer, % resetStatusFunc, Off diff --git a/Scripts/Include/Utils.ahk b/Scripts/Include/Utils.ahk index b72a30c4..808b537a 100644 --- a/Scripts/Include/Utils.ahk +++ b/Scripts/Include/Utils.ahk @@ -493,8 +493,17 @@ InitializeHiddenConsole() { HideAllocatedConsole() SetTimer, HideAllocatedConsole, -1000 - if (previousHwnd && WinExist("ahk_id " . previousHwnd)) - DllCall("SetForegroundWindow", "Ptr", previousHwnd) + RestorePreviousForegroundWindow(previousHwnd) +} + +RestorePreviousForegroundWindow(previousHwnd) { + if (!previousHwnd || !DllCall("IsWindow", "Ptr", previousHwnd) || !DllCall("IsWindowVisible", "Ptr", previousHwnd)) + return false + + if (DllCall("IsIconic", "Ptr", previousHwnd)) + return false + + return DllCall("SetForegroundWindow", "Ptr", previousHwnd) } HideAllocatedConsole() { From 011fb502427de2693ca3c0dce4d0dad594c69708 Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Mon, 25 May 2026 18:17:41 +0900 Subject: [PATCH 09/10] Clear GP cleanup state before notification --- Scripts/Include/CardDetection.ahk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Scripts/Include/CardDetection.ahk b/Scripts/Include/CardDetection.ahk index 7d6cf018..cdd42d3e 100644 --- a/Scripts/Include/CardDetection.ahk +++ b/Scripts/Include/CardDetection.ahk @@ -353,6 +353,11 @@ GodPackFound(validity) { IniWrite, 0, % session.get("scriptIniFile"), UserSettings, DeadCheck if(validity = "Valid") { + ; A valid GP must keep friend requests even if a previous stuck recovery flag survived. + DeadCheck := 0 + ClearFriendCleanupPending() + session.set("friended", false) + LogToFile("Valid God Pack found; friend cleanup state cleared before notification | account=" . session.get("accountFileName")) Praise := ["Congrats!", "Congratulations!", "GG!", "Whoa!", "Praise Helix!", "Way to go!", "You did it!", "Awesome!", "Nice!", "Cool!", "You deserve it!", "Keep going!", "This one has to be live!", "No duds, no duds, no duds!", "Fantastic!", "Bravo!", "Excellent work!", "Impressive!", "You're amazing!", "Well done!", "You're crushing it!", "Keep up the great work!", "You're unstoppable!", "Exceptional!", "You nailed it!", "Hats off to you!", "Sweet!", "Kudos!", "Phenomenal!", "Boom! Nailed it!", "Marvelous!", "Outstanding!", "Legendary!", "Youre a rock star!", "Unbelievable!", "Keep shining!", "Way to crush it!", "You're on fire!", "Killing it!", "Top-notch!", "Superb!", "Epic!", "Cheers to you!", "Thats the spirit!", "Magnificent!", "Youre a natural!", "Gold star for you!", "You crushed it!", "Incredible!", "Shazam!", "You're a genius!", "Top-tier effort!", "This is your moment!", "Powerful stuff!", "Wicked awesome!", "Props to you!", "Big win!", "Yesss!", "Champion vibes!", "Spectacular!"] invalid := "" } else { From d5f312e0059f99bd002fd44fde9bb1dc99ca8fcf Mon Sep 17 00:00:00 2001 From: Santa <59559008+Bemirror99@users.noreply.github.com> Date: Fri, 29 May 2026 00:05:11 +0900 Subject: [PATCH 10/10] Update pack data and add blocked request opt-in --- Data/dictionary_cn.dat | 1 + Data/dictionary_de.dat | 1 + Data/dictionary_en.dat | 1 + Data/dictionary_jp.dat | 1 + Data/packdata.dat | 23 +++++++++-------- Scripts/Include/Config.ahk | 1 + Scripts/Main.ahk | 51 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 68 insertions(+), 11 deletions(-) diff --git a/Data/dictionary_cn.dat b/Data/dictionary_cn.dat index 471d1417..f70d0bc4 100644 --- a/Data/dictionary_cn.dat +++ b/Data/dictionary_cn.dat @@ -100,6 +100,7 @@ Txt_openExtraPack:額外多開一包 Txt_claimSpecialMissions:領取特殊任務 SortByText:注入排序: +Txt_ParadoxDrive:Paradox Drive Txt_PulsingAura:Pulsing Aura Txt_MegaShine:Mega Shine Txt_PaldeanWonders:Paldean Wonders diff --git a/Data/dictionary_de.dat b/Data/dictionary_de.dat index 672e8edb..ce7307c1 100644 --- a/Data/dictionary_de.dat +++ b/Data/dictionary_de.dat @@ -100,6 +100,7 @@ Txt_openExtraPack:Extra-Pack öffnen Txt_claimSpecialMissions:Spezialmissionen SortByText:Sortieren nach: +Txt_ParadoxDrive:Paradox Drive Txt_PulsingAura:Pulsing Aura Txt_MegaShine:Mega Shine Txt_PaldeanWonders:Paldean Wonders diff --git a/Data/dictionary_en.dat b/Data/dictionary_en.dat index fd234ec1..91af3f67 100644 --- a/Data/dictionary_en.dat +++ b/Data/dictionary_en.dat @@ -100,6 +100,7 @@ Txt_openExtraPack:Open Extra Pack Txt_claimSpecialMissions:Claim Special Missions SortByText:Sort By: +Txt_ParadoxDrive:Paradox Drive Txt_PulsingAura:Pulsing Aura Txt_MegaShine:Mega Shine Txt_PaldeanWonders:Paldean Wonders diff --git a/Data/dictionary_jp.dat b/Data/dictionary_jp.dat index 475ce48f..d518296c 100644 --- a/Data/dictionary_jp.dat +++ b/Data/dictionary_jp.dat @@ -100,6 +100,7 @@ Txt_openExtraPack:追加パックを開く Txt_claimSpecialMissions:イベント SortByText:注入序列: +Txt_ParadoxDrive:Paradox Drive Txt_PulsingAura:Pulsing Aura Txt_MegaShine:Mega Shine Txt_PaldeanWonders:Paldean Wonders diff --git a/Data/packdata.dat b/Data/packdata.dat index c91b9b28..2f65e129 100644 --- a/Data/packdata.dat +++ b/Data/packdata.dat @@ -1,5 +1,5 @@ -# Pack list in Home screen -Home:Left|PaldeanWonders,Middle|PulsingAura,Right|MegaShine +# Pack list in Home screen +Home:Left|MegaShine,Middle|ParadoxDrive,Right|PulsingAura # Pack data(Structure) # PackID, Series Type, Number of packs in the set, Location of extension window, y Pos, Scroll Type @@ -22,14 +22,15 @@ Pack:Springs|A|1|Col-Second|298|0 Pack:Deluxe|A|1|Col-First|298|0 # B Series -Pack:MegaGyarados|B|3|Col-Second-Left|405|1 -Pack:MegaBlaziken|B|3|Col-Second-Middle|405|1 -Pack:MegaAltaria|B|3|Col-Second-Right|405|1 -Pack:CrimsonBlaze|B|1|Col-First|434|2 -Pack:Parade|B|1|Col-Second|434|0 -Pack:PaldeanWonders|B|1|Col-First|434|0 -Pack:MegaShine|B|1|Col-Second|298|0 -Pack:PulsingAura|B|1|Col-First|298|0 +Pack:MegaGyarados|B|3|Col-First-Left|405|1 +Pack:MegaBlaziken|B|3|Col-First-Middle|405|1 +Pack:MegaAltaria|B|3|Col-First-Right|405|1 +Pack:CrimsonBlaze|B|1|Col-Second|434|2 +Pack:Parade|B|1|Col-First|434|2 +Pack:PaldeanWonders|B|1|Col-Second|434|0 +Pack:MegaShine|B|1|Col-First|434|0 +Pack:PulsingAura|B|1|Col-Second|298|0 +Pack:ParadoxDrive|B|1|Col-First|298|0 # DO NOT Delete End ----END--- +---END--- \ No newline at end of file diff --git a/Scripts/Include/Config.ahk b/Scripts/Include/Config.ahk index 75b57b3e..c950d61d 100644 --- a/Scripts/Include/Config.ahk +++ b/Scripts/Include/Config.ahk @@ -56,6 +56,7 @@ , "folderPath": "C:\Program Files\Netease" , "RowGap": 105 , "debugMode": 0 + , "blockedFriendRequestHotfix": 0 , "stopPreference": "" , "stopPreferenceSingle": "" , "stopPreferenceMain": "" diff --git a/Scripts/Main.ahk b/Scripts/Main.ahk index 66b30410..80a6da6e 100644 --- a/Scripts/Main.ahk +++ b/Scripts/Main.ahk @@ -203,6 +203,10 @@ Loop { clickButton := FindOrLoseImage("Common_ColorChangeButton", 0, failSafeTime, 80) requestAlreadyClosed := FindOrLoseImage("Friend_RequestAlreadyClosedInApproveSubmenu", 0, failSafeTime) if(FindOrLoseImage("FriendLimit", 0, failSafeTime)) { + if (botConfig.get("blockedFriendRequestHotfix")) { + if (HandleBlockedFriendRequest(failSafeTime)) + Break, 2 + } done := true break } @@ -269,6 +273,53 @@ Loop { } return +HandleBlockedFriendRequest(ByRef failSafeTime) { + global session + + CreateStatusMessage("Blocked friend request detected. Denying...",,,, false) + LogToFile("Blocked friend request detected in Main " . session.get("scriptName") . ". Denying top request...") + + WaitForFriendLimitNoticeToClear(failSafeTime) + + if (FindOrLoseImage("Friend_DenyButtonInApproveSubmenu", 0, failSafeTime, 20, 1)) { + adbClick(202, 210) + if (WaitForFriendLimitNotice(failSafeTime)) + WaitForFriendLimitNoticeToClear(failSafeTime) + return true + } + + LogToFile("Blocked friend request handling skipped in Main " . session.get("scriptName") . ": deny button not found.") + return false +} + +WaitForFriendLimitNotice(ByRef failSafeTime, maxSeconds := 3) { + global session + + startTime := A_TickCount + Loop { + if (FindOrLoseImage("FriendLimit", 0, failSafeTime, 20, 1)) + return true + if ((A_TickCount - startTime) >= maxSeconds * 1000) + return false + Delay(0.25) + failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 + } +} + +WaitForFriendLimitNoticeToClear(ByRef failSafeTime, maxSeconds := 10) { + global session + + startTime := A_TickCount + Loop { + if (!FindOrLoseImage("FriendLimit", 0, failSafeTime, 20, 1)) + return true + if ((A_TickCount - startTime) >= maxSeconds * 1000) + return false + Delay(0.5) + failSafeTime := (A_TickCount - session.get("failSafe")) // 1000 + } +} + FindOrLoseImage(needleName := "DEFAULT", EL := 1, safeTime := 0, searchVariation := 20, notShowFinding := 0) { global session, needlesDict static lastStatusTime := 0