DoroHelper/DoroHelper.ahk

3307 lines
212 KiB
AutoHotkey
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#Requires AutoHotkey >=v2.0
#Include <github>
#Include <FindText>
#Include <GuiCtrlTips>
CoordMode "Pixel", "Client"
CoordMode "Mouse", "Client"
;region 设置常量
try TraySetIcon "doro.ico"
currentVersion := "v1.0.2"
usr := "1204244136"
repo := "DoroHelper"
;endregion 设置常量
;region 设置变量
;tag 简单开关
global g_settings := Map(
;登录游戏
"Login", 1, ;登录游戏总开关
;商店
"Shop", 1, ;商店总开关
"CashShop", 1, ;付费商店
"NormalShop", 1, ;普通商店
"NormalShopDust", 1, ;普通商店:芯尘盒
"NormalShopPackage", 0, ;普通商店:简介个性化礼包
"ArenaShop", 1, ;竞技场商店
"BookFire", 1, ;竞技场商店:燃烧手册
"BookWater", 1, ;竞技场商店:水冷手册
"BookWind", 1, ;竞技场商店:风压手册
"BookElec", 1, ;竞技场商店:电击手册
"BookIron", 1, ;竞技场商店:铁甲手册
"BookBox", 1, ;竞技场商店:手册宝箱
"ArenaShopPackage", 1, ;竞技场商店:简介个性化礼包
"ArenaShopFurnace", 1, ;竞技场商店:公司武器熔炉
"ScrapShop", 1, ;废铁商店
"ScrapShopGem", 1, ;废铁商店:珠宝
"ScrapShopVoucher", 0, ;废铁商店:好感券
"ScrapShopResources", 1, ;废铁商店:养成资源
;模拟室
"SimulationRoom", 1, ;模拟室
"SimulationOverClock", 1, ;模拟室超频
;竞技场
"Arena", 1, ;竞技场收菜
"RookieArena", 1, ;新人竞技场
"SpecialArena", 1, ;特殊竞技场
"ChampionArena", 1, ;冠军竞技场
;无限之塔
"Tower", 1, ;无限之塔总开关
"CompanyTower", 1, ;企业塔
"UniversalTower", 0, ;通用塔
;异常拦截
"Interception", 1, ;拦截战
"InterceptionShot", 0, ;拦截截图
;常规奖励
"Award", 1, ;奖励领取总开关
"OutpostDefence", 1, ;前哨基地收菜
"Expedition", 1, ;派遣
"LoveTalking", 1, ;咨询
"Appreciation", 1, ;花絮鉴赏
"FriendPoint", 1, ;好友点数
"Mail", 1, ;邮箱
"RankingReward", 1, ;排名奖励
"Mission", 1, ;任务
"Pass", 1, ;通行证
;限时奖励
"FreeRecruit", 1, ;活动期间每日免费招募
"RoadToVillain", 1, ;德雷克·反派之路
"Cooperate", 1, ;协同作战
"SoloRaid", 1, ;个人突击
"Session", 0, ;小活动
"Festival", 1, ;大活动
;妙妙工具
"StoryModeAutoStar", 1, ;剧情模式自动收藏
"StoryModeAutoChoose", 1, ;剧情模式自动选择
;其他
"AutoCheckUpdate", 0, ;自动检查更新
"isPreRelease", 1, ;启用预发布通道
"MirrorUpdate", 0, ;使用Mirror酱检查和更新
"AdjustSize", 0, ;启用画面缩放
"SelfClosing", 0, ;完成后自动关闭程序
"OpenBlablalink", 1, ;完成后打开Blablalink
)
;tag 其他非简单开关
global g_numeric_settings := Map(
"SleepTime", 1000, ;默认等待时间
"InterceptionBoss", 1, ;拦截战BOSS选择
"Tolerance", 1, ;宽容度
"MirrorCDK", "", ;Mirror酱的CDK
"Version", currentVersion, ;版本号
"Username", "12042" ;用户名
)
;tag 其他全局变量
Victory := 0
BattleActive := 1
PicTolerance := g_numeric_settings["Tolerance"]
;endregion 设置变量
;region 读取设置
SetWorkingDir A_ScriptDir
try {
LoadSettings()
if CompareVersionsSemVer(currentVersion, g_numeric_settings["Version"]) {
MsgBox("版本已更新,所有设置将重置")
FileDelete "settings.ini"
WriteSettings()
g_numeric_settings["Version"] := currentVersion
}
}
catch {
WriteSettings()
}
;endregion 读取设置
;region 识图素材
; FindText().PicLib("对应的内容")
;tag 通用
FindText().PicLib("|<红点>FA3F1F-0.70$12.3sDwTyTzzzzzzzzzTyTyDw1kU", 1)
FindText().PicLib("|<圈中的感叹号>*150$22.zU7zs07y7wDszwTDzsszDlbwzYzzy3zzwDzzkznz3zDwDwzkznz3zDsbwzaDnwQTzXszwTkz3zU0TzU7y", 1)
FindText().PicLib("|<白色的圆圈加勾>*200$34.zz03zzzU07zzs00zzz0Tzzzs7zzvz1zzz7sDzzsD1zzz1wDzzsDVzzz1y7zzsDszzz1z3zzsDwTzz1zlyTsDz7kz1zwT1sDzly31zk7w0Dz0Ts1zw0zkDzl3zVzz6DzDzsMTzzzXlzzzwD3zzzVy7zzw7wDzzUzsDzw7zkDz0zzU007zz001zzzU0TzzzkTzy", 1)
FindText().PicLib("|<确认的白色勾>*225$28.zzzzjzzzsTzzz0zzzs3zzz0Tzzs3zzz0Tzzs3tzz0T3zs3w7z0TkDs3zUT0Tz0s3zy10Tzw03zzs0Tzzk3zzzUTzzz3zzs", 1)
FindText().PicLib("|<灰色空心方框>*220$28.DzzzVzzzzbzzzyzzzzzk003z000Dw000zk003z000Dw000zk003z000Dw000zk003z000Dw000zk003z000Dw000zk003z000Dw000zk003z000DzzzzxzzzzbzzzwU", 1)
FindText().PicLib("|<白色的叉叉>*220$28.zzzzszzzz1zzzsXzzz77zzsyDzz7wTzszszz7zlzszzXz7zz7szzyD7zzwMzzzs7zzzkzzzz3zzzs7zzz6DzzswTzz7szzszlzz7znzszz7z7zyDszzwT7zzsszzzlDzzzVzzzzc", 1)
FindText().PicLib("|<方舟的眼睛>*90$54.0007w0000003zzs00000Tzzy00001zzzzs0003zzzzw000Dzyzzy000TzsATzU00zzUA7zs00zy0A3zw03zw0A0zy07zw0A0Tz0Dzs0Q0DzUTzs3z0DzkTzk7zk7zszzkDzk7zszzkDzs3zwzzkTzw3zyzzzzzw3zyzzzzzzzzzTzkDzzzzzTzkDzw3zzDzkDzs3zzDzs7zs3zy7zs3zk7zw3zs0z07zw1zw0Q0Dzs0zy0A0Dzk0Tz0A0Tzk0DzUA0zzU07zsA3zz003zyADzy000zzzzzs000Dzzzzk0003zzzz00000Tzzs00000Dzz000U", 1)
FindText().PicLib("|<勾>*225$28.zzzzjzzzsTzzz0zzzs3zzz0Tzzs3zzz0Tzzs3tzz0T3zs3w7z0TkDs3zUT0Tz0s3zy10Tzw03zzs0Tzzk3zzzUTzzz3zzs", 1)
FindText().PicLib("|<ESC>*150$37.zzzzzzzzzzzzw0Q0w0y0A0A0D0C6677bz7X7XnzXzXls3kDlzw1w0szy0z0ATz7zz6DzbzjX7XlzXlXls0k0k0w0Q0Q0S0D0T0TzzzzzzzzzzzzU", 1)
FindText().PicLib("|<白底蓝色右箭头>*200$33.zzUDzzzU0Dzzk00Tzs000zy0003zU000Ds0000y00007k0000Q0k601UD1s081wTU107ly000T7s001wTU007ly000TXs003wT000z7k00Dlw003wT000z7k00Dnw041sT01U71k0C00403k0000T00007w0001zk000Tz0007zw001zzs00zzzs0zzU", 1)
FindText().PicLib("|<MAX>*120$27.zzzzzzzzzvvnzyCAAnllVaSAAA7kVVky4AC7kVVky48DDk19ty096Dk10ky0867k10kyF1YXm8AaSF1UnzTSjTzzzzzzzzw", 1)
;tag 商店
FindText().PicLib("|<礼物的图标>*120$34.z0zw3zs1zU7z33w8TwS7VszlwADXz7s1wTw0001zs000Dzk001zzzzzzzzzzzzk03s01007U0000S00001s00007U0000S00001s00007U0000S00001s00007U03zzzzzzzzzzzs07U0zU0S01y01s07s07U0TU0S01y01s07s07U0TU0S01y01s07s07U0TU0S01y01s0DU", 1)
FindText().PicLib("|<商店的图标>*200$45.007U000007z000007zw01k07y7nzz01y0Dzzs0C00zy3U1k03k0S0A0MC01k3U73U070QDww00w31z7173UsDtkTsC70yS3z1ks1XUTkS700S1w3sy01k70z3s0D00DzzU7w01zzy7zU0Tzzzzy07zzzzzvzzw", 1)
FindText().PicLib("|<简介>*190$37.C3U0707zzU7U7zzk7s7zzsDz3zRkTzszzwzVzDzyTUTbzzDU7bzzUQD3jxkC7Vryw73kvzS3VsRzj3kwCzrVsS7TvlwD3jzlw7Vk3sw3ks1sA1kU", 1)
FindText().PicLib("|<FREE>*200$35.0MDUQ00U70s0z7CTntySQzbnwws70UM1kC1Dk7bwyTXDDtwzDC0k1zSQ3U8", 1)
FindText().PicLib("|<芯尘盒>*200$62.3Us01k00C00wC00Q007k3zzy3bi07z0zzzVxzk7zwDzzsSSy7zzvzzyDbjnzzz3rw7lswzzzUvy1sSD7zzk0w0A71UTzk0DU01k07zw6xsk0Q01zz1zSw0Dw0TzkTnbVzzsDzyDw1szzy3zznz3S7zzUzzwzkzk1s0DzzCzzw0S03ivlbzgTzzvzzy1zs7zzyzzzkDw1zzzDzzu", 1)
FindText().PicLib("|<信用点的图标>*200$29.000s0003s000Ds001vs007bs00Tzs01zrk0Dzbk0zzzk3zzzUTzzzVzzzv7zzzyTzzzlzzzz7jzzw7Dzzk6jzy09zzs0/zzU0Dzy00Dzk00Dj000Tw000TU000S00008004", 1)
FindText().PicLib("|<竞技场商店的图标>*120$42.zzs0DzzzzU03zzzz001zzzy1y1zzzw7z0zzzsTTUzzzswDUzzzkwDUlzylwDUwTsVsDVz7lXsD1zXXXsS3zl7Xk07zs7300Tzs7301zzs73U0Tzs73kETzs33ksDzlVXks7zVlXkw7wrxVUw3szzVUy1kzzk0z01zzk1X03zzs1zU7zzy3zsDzU", 1)
FindText().PicLib("|<水冷代码的图标>15DEF6-0.75$17.0840kM3VkD7kzDVyT7yQTw0zs3zk7zUTz0zy0zs1zk1y00k0E", 1)
FindText().PicLib("|<铁甲代码的图标>FA902D-0.85$20.3kA3yDlzzzTzzzyTzzjzzvzzyzxzzyDzz0Dz0Dy03zU0zs0Tw07z01zk0Ds01s08", 1)
FindText().PicLib("|<风压代码的图标>58F42B-0.85$21.07U01y00DnU7zz7zzsztbS08zzzy7zzVwDkTzs0DzU00A00lU06A00vU03s00A0U", 1)
FindText().PicLib("|<燃烧代码的图标>FD238B-0.79$15.0D03s0z0Ds7zUzwDznzyTzvzzzDzkzy7zkTS3vsSD3VwM7a0Q030080U", 1)
FindText().PicLib("|<电击代码的图标>FB31F5-0.82$12.040A0Q0w1s1s3s7k7kDkDzTzzyzyDw3s3k7U7U70C0A080M0E0U", 1)
FindText().PicLib("|<熔炉>*100$40.60k0k20M3U30A1XzsA0k6Q3Uk7UTkC3PzzlUUzi7r776wkTMsCP31tUC1gC761w0kzwsCs33VnXlsAA3DTjVsk0wTw7n03NVUPQ0Na63Zk3UQMA6041zUkM00760002", 1)
FindText().PicLib("|<代码手册宝箱的图标>*150$71.00000Ts000000000Dky000000000k07000000003k0S00000000SPDzU000000DUQC3s000003s1sy0z00001y0xUHUDk000T0C000M1y03rk3W00060DzCw0k01E11U7XU0Q003k0CA000r00000003A05m00000000t0QU0000000007s01M000S00SCA00000000E6s3U0000003U7U0s000000M0DE0QU0000r03zw07s000Dk0zzy01y0Y1y0DzvzU0S007U3zzbjs0D00s0TznU", 1)
FindText().PicLib("|<废铁商店的图标>*200$40.zw000zzzk001zzy0007zzk000Dzz3zzkzzsTzzVzzVzzy3zwDzzwDzUz7zsTy7w7zVzkzkDz3z3zUDwDsTz0TsTVzz1zUwDzz7z3UzwTzy67zkTzsEzz0Tzk3zy0zz27zw1zsMDzw7zVkzzwTwDVzlzzky7z1zy7wDw1zsTkzs3z3zVzk7sDy7zkTVzwDzlwDzsTzzkzzVzzy7zz3zzkzzw0003zzs000TzzU001zzz000DzU", 1)
FindText().PicLib("|<黄色的礼物图标>*200$22.3sT0Dny1XwM67VUQSCDzDzzwzzznzzzDzzwzzznzzzDzTwzw0000000Dwzkznz3zDwDwzkznz3zDw7wzm", 1)
;tag 方舟
FindText().PicLib("|<左上角的方舟文本>*100$37.zlzzkzzszzsTs00T00M007U0C003k27sDzsVXyDzwMlz01yAEzU0s007k0S003kyD003sz7sXXsTXsElwDlwQ8wDkwDsQC0wDsCDUT7wDjkzzyDU", 1)
;tag 招募
FindText().PicLib("|<SKIP的箭头>*220$19.DtzXwTkS7s70w1UC001000000000830Q3US7kz7szjxzs", 1)
FindText().PicLib("|<确认>*220$52.zzzzzzzbzzyDzyzyTs0sTzlztzU307zXzbzXwMTz7yTyDXlzyTtztyD7zzzbzbk03zzyTyS00DzztzlsQQw3z7z0NvnkDwTw1b7DwzlzVa00znz7yCM03zDwDktbDDwzkzXaQwzny3zCMlnzDs7ytU0DwzaTva00znQMza1nnz1nny0DjDwCD7s0ywzVlyDj3vnyCDwSyTUDvszszvzlzzbzq", 1)
;tag 战斗
FindText().PicLib("|<进入战斗的进>*200$31.nzkwDkzsS7wDwD3z3y7Vzkz1UTss001zw000zy000TzwD3zzy7Vzzz3ky0zVsT0TkwDUC000S7000DXU007ls003sz3sTwTVwDyDVy7z7kz3zXkTVzlsTkzkSTsTk7zzzU0Dzzks0000z0006Ts003", 1)
FindText().PicLib("|<进行战斗的进>*200$25.zzzzzzzzyTnnz7tlzVwszsw8DyM01zw01zzVXzztlz1wszUwADsM01yA00z7XXzXnlzllszskwTwQyDw6zjw0TySQ00DDk07zzzzzzzzk", 1)
FindText().PicLib("|<AUTO的图标>7D8484-0.81$24.07k00zy41zzg7wDwDU3wD01yS03yQ03yw00Cs000s00As00Cs00DM00C000Cs00Cz00Szk0QTU0wTU3sTsDkTzzU8zz00Ds0U", 1)
FindText().PicLib("|<射击的图标>*100$34.zzsTzzzzVzzzzy7zzzzsTzzzzVzzzza6TzzsMMTzz1VUzzsC71zz1sS3zwDVyDzVy7sTyDzzlzzzzzzzzzzzzzzzzzw03zk000Dz0000zw03zzzzzzzzzzzyDzzkzszVz7zVy7sTz3sT3zy7VsTzw663zzsMMTzzlVXzzzq6zzzzsTzzzzVzzzzy7zzzzsTzy", 1)
FindText().PicLib("|<快速战斗的图标>*200$33.zzzzzzzzzzzk7UDzz0S0zzw1s3zzk7UDzz0S0zzw1s3zzk7UDzz0S0zzw1s3zzk7UDzz0S0zzw1s3zz0S0zzk7UDzw1s3zz0S0zzk7UDzw1s3zz0S0zzk7UDzw1s3zz0S0zzk7UDzzzzzzzzzzzzw", 1)
;无限塔胜利或失败会出现该图标
FindText().PicLib("|<TAB的图标>*200$34.zzzzzzzzzzzw1zzzzk7zzzz0Tzzzw1zzzzk7zzzz0Tzzzw1zzzzk7k7zz0T0Tzw1w1zzk7k7zz0T0Tzw1w1s3k7k7UD0T0S0w1w1s3k7k7UD0T0S0w1w1s3k7k7UD0T0S0w1w1s3k7k7UD0T0S0w1w1s3zzzzzzzzzzzzzzzzzzzzzzz00000w00003k0000DzzzzzzzzzzzU", 1)
;特殊竞技场快速战斗会出现该图标
FindText().PicLib("|<重播的图标>*200$41.zzs0Dzzzz003zzzk001zzz0001zzw1zw0xzUDzy0ny1zzz07w7zzz0DkTzzzUD1zzzz0S7zzzw0sTzzzk1UzyzzU33zwTzza7zsTzzwTzkTzzkzzUTzzVzz0Dzz3zy0Dzy7zw0DzwDzs0DzsTzk0TzkzzU1zzVzz0Dzz3zy0zzV7zw3zz67zsDzwADzlzzsQDzbzzVsTzTzz3sTzzzwDkTzzzkTkTzzz1zkTzzw7zkTzzkTzkDzy1zzk7zk7zzk000Tzzs003zzzw00Tzzzz07zzk", 1)
;拦截扫荡会出现该图标
FindText().PicLib("|<点击>*100$39.zlzzwTzyDzzXzzk0zwTzy07U03zlzw00TyDzzXzk01zwTy00D001lzlk006DyD001kzVzwTy00DXXXs03wQQTzzzXXXlAFwQQSMX7U03X6Mw00MslXU03zzzzzyQ", 1)
;判断胜利状态
FindText().PicLib("|<下一关卡的图标>*220$36.zzzxzzzzzwzzzzzwTzzzzwDzzzzw7zzzzw3zzzzw1zzzzw0zzzzk0Tzzw00Dzzk007zz0003zw0001zs0000zk0001zU0003z00007y0000Dy0000Tw0000zs0Dw1zs1zw3zkDzw7zkTzwDzlzzwTzXzzwzzbzzxzzjzzzzzTzzzzzU", 1)
FindText().PicLib("|<编队的图标>*200$32.z3zwDzUDw0zk3zUDw1kQ1y0k30TUA0M7w6061z1U1UzsM0MDz706DzUk3VzkC1k7s1kw0w1s3UC0M0Q1UA030M300M61U060UM01U0600A01U0300k00k0A00A3z003zzk00zzw00Dy", 1)
;红圈
FindText().PicLib("|<红圈的上边缘黄边>FEFD71-0.90$53.000Trw00000Tzjzk000DzzTzy003vzyzzjU0zrzxzzTk7zjU00yzszzU0003zxzs00000zzy000000Dzk0000007y00000003k", 1)
FindText().PicLib("|<红圈的下边缘黄边>FEFEA7-0.90$52.U0000000DU0000003zk000001zzk00000Tzzs0000Dzzzz000Tzy7yzzjzvz07vzyzzjk03zzvzzs001zzjzw0000Dyzs008", 1)
;tag 模拟室
FindText().PicLib("|<模拟室>*100$62.zzzzzzzzzzzzzzzzzzzzzvxnyzzzzjzwQ0D6DXzUzz601lUsk00DlU0sM6A003k40Q01X000w007000k00D000k00D007w80D683s03z203lW0y00zU00s0wTU0Ds00A0D7k01w00303ly0Az000kM0DU3DkM06603k01w401lU0Q00TVU0wE07U0DwM0C481U00z4311a4E00DlVskzX4003yTzzzzzzzzzzzzzzzzzzzzzzzzzzzzzU", 1)
FindText().PicLib("|<开始模拟的开始>*150$46.zzzzzzzzzzzzzzzzzzzwTlzk007lz7z000D7szw000wTXDzXkz0AATyD3w0llzswDk2DXzXkzW00DyD3y800Q000tU1lk003aTzz000AFk1zkwDk603z7kzUM0DwT3zVXszVwDy2DXwDkzk8yDUz3y0U0w7wDky03kzkz7s0DbzXyzXszzzzzzzzzzzzzzzy", 1)
FindText().PicLib("|<快速模拟的图标>*200$42.zzk07zzzz000zzzw000Dzzk0007zzU0001zz00000zy00000Tw00000Ds00000Ds000007k0U1003k1k3U03U3s7k01U3y7s0103z7w0100zXy0000Tlz0000DsTU0007wDs0003y7w0001z3y0001z3w0003wDs0007wTk000TkzU000zVz0001z3y0003y7w01U3w7s01U3s7k03k0k3U03k000007s000007w00000Dw00000Ty00000zz00000zzU0003zzs0007zzw000Dzzz001zzzzs07zzU", 1)
FindText().PicLib("|<跳过增益效果选择的图标>*170$26.E0U0C0C03s3k0z0z0DwDs3zXzUzyzwDzzznzzzyzzzzzzzzvzzzwzzzyDzTy3z3z0zUz0DUDU3k3U0E0k08", 1)
FindText().PicLib("|<模拟结束的图标>*170$38.03zzzz01zzzzs0zzzzy0Dk00Dk3s001w0w000D0D0003k00000w00000D000003k0U000w0s000D0S0003kDU000w7zzU0D3zzw03nzzz00xzzzk0Dzzzw03zzzz00zzzzk0DDzzw03lzzz00wDzzU0D0y0003k7U000w0s000D020003k00000w00000D000003k3k000w0w000T0DU00Dk3zzzzw0Tzzzy03zzzz00Tzzz2", 1)
;tag 竞技场
FindText().PicLib("|<SPECIAL>*120$40.zzzzzzzzzzzzzyCCARnjkEEUaAz99CGMnwYYt9VDnmHba4zD9CSMHy449tVDwEFba4ztDCSMHzYwtdVDmHnYYoz1DC2H3y4w49A3zzzzzzzzzzzzzs", 1)
FindText().PicLib("|<竞技场>*200$61.zzzzzzzzzzzzzzzzzzzzzzTznyTzzzz007tzDys0zU03wzbzS0TyTDyQ0DjsTzDbw007XwTs00C3wzUsTw007nyTkE0Tzzzty7yw0Dk07ws0TT07s03wA8TjaHwztw7DDrrNyDky7bDvnAzU0zntbw3iTwlztw7s3bDyRzwz3wDrjwSSyS0yznbkT0QQ67zn3sTUSDDXzvXzzzzzzzzzzzzzzzzzzzzy", 1)
FindText().PicLib("|<左上角的竞技场>*150$59.zzzzzzzzzzzzzzzzzzzzzXztyDwzzz007nwTtU3y00Db07n07zbXw0077sTy73s00Q7XzU00kT7s47z003tyDk00TU0TnU3tk0z00z107nk1yDtw2CDbY3wTXsCQTCN7s07swFw0WDs0Ttw7k3ATslrnsDUwNzVXbbUD7lns70AA07z67kz0sMwTyQTzzzzzzzzvzzzzzzzzzzzzzzzzzzzzs", 1)
FindText().PicLib("|<新人>*100$38.zzzzzzzzzzzzzwznzlzy7UTwTy0E7z7zU0Tzlzwl7zwTzAFzz7zU00zUzk00DsDzlk3y3zU4Fz0Ts04Tk7y0F7sMzU4FyC7s0AT3kyE371y3UMlUzkyCAQTyDbz7zzzzzzzzzzzzzzzs", 1)
FindText().PicLib("|<免费>*200$40.zzzzzzzzzzzzzzlzzwFzy0Dw00Ts0zz4Fz7bz007kQTw00z003k00y6CD003wssz7aTnXXUQHz00D00Dw00y00zz0zszXzsXzX6Dz6Cy8szkstw67w7k60w7tz0sTyTzzzzzzzzzzzzzU", 1)
FindText().PicLib("|<ON>*200$36.zzzzzzzzzzzzz0Tjzby07bzXwD7VzXszXUzXszlUTXtzlU7Xlzlb3XtzlbVXtzlbk3sznbw3wTXby3w07bz3y0DbznzUzbzzzzzzzzzzzzzzU", 1)
FindText().PicLib("|<OFF>*120$54.zzzzzzzzzzzzzzzzzzzkTw01s03z07k01U03y03k01U03w01U03007sDUVzz3zzsTkU0D00TsTkU0D00TkTk00D00DkTkU0D00TsTkVzz3zzsTUVzz3zzw71Vzz3zzw01Vzz3zzy03Vzz3zzz07Vzz3zzzkTnzzbzzzzzzzzzzzzzzzzzzzzU", 1)
FindText().PicLib("|<特殊>*100$38.zzzzzzzzzzzzztyTzzDyQ0k4Xw70400z0k1Vk1k7Xw80Q0060070U0U2DmM0MVVzbyAM03sU0000k00E70w307VUD1lXss3yQMyA0TbaD483ty3368yTVtzXzbszzszzzzzzzzzzzzzs", 1)
;tag 无限之塔
FindText().PicLib("|<无限之塔的无限>*150$41.zzzzzzzzzzzzzzU03k00z003U01y00DAXnzwzyN07ztzwW0DzVzsAAT000kMsy001aE1zs3zAU3zsDyM4rzUTwk87z0zs4MDwNxkMkzlnlblVy3X3DU1sT0CT1Xlz0Qy7bzzzxzzzzzzzzzzzzzzzzs", 1)
FindText().PicLib("|<每日通关>*100$62.zzzzzzzzzzzzzzzzzzzzzwzzzzzzzjby07U0tU3ltzU0s0CC1yQTk0CDXlUy01s07XwzU3U0S01szDs0zVzs4S0300Dszs03U0s0300Q00MzD00k03k0CDnk0DsDw07Xww23w3z00s0D0Uw4Ds0C03U043UzwDU0tU13wTzbzzzzzzzzzzzzzzzzzzzzzzzzzzzzs", 1)
FindText().PicLib("|<STAGE>*100$43.zzzzzzzzzzzzzzw30sw3Uy1UQS1kD7syD7szbwS3bwznyD1nyDtz7Utz7wTXkQzXy1ltCMkTUswXAMDyQQFaATzCC8n6Tzb70Nn7zXXUAFXy1ll60kD0sll0MDzzzzzzzzzzzzzzk", 1)
FindText().PicLib("|<无限之塔·向右的箭头>*100$12.3z1zVzVzkzkzkTsTsTsDwDwDw7y7y7z3z3z1zVzVzUzkzkzkzkzVzVzVz3z3y3y7y7w7wDwDsDsTsTkzkzUzVzVz1z3zU", 1)
FindText().PicLib("|<塔内的无限之塔>*200$67.0000000000000000000000000000000140zzbzy0M0lr0Tznzz0C0Pzs0w1jXXzwAzs0A0yzlzzDjs060TTs0D7ns3zzjiQ071ny1zzqzy070zzk1w3Dy070Tzk0y1bjU70C000z0znk707zw0vXTNkD07zy0tngDsT03X71szq7zTzw1zUsDn3nATw0zk0000000000000000000000E", 1)
;tag 拦截战
FindText().PicLib("|<拦截战>*140$63.zzzzzzzzzzznzzzDDzzxzySSTUsbwz5znlXs14TbsbyDAz0MnwL4z0U1s24TUMzs006001w30zVU1k00DXU3yTzz0szww0znzzs36TXkby7zz00XU74z0k3k1Uw0Q7kA0C0A7X3Uz3k3s1UwQQDyTzz0ADXXVznzzs1VQQQTyTzz0M9U30TX00s00A003sM07003X0MT7zztzwyyzbzzzzzzzzzzzzzzzzzzzzzU", 1)
FindText().PicLib("|<红字的异常>BF0200-0.81$44.0000000000000000000Fl03zzUSQw0zzs7bD0Dzy7zzw3k7Vzzz0zzsS03kDzy7Tzw3U0trzz0zzy1kQ0DzzUTz00zzU7zk0C3U07U03Us1zzkDzzsTzy3zzy7zzUzzzVlts3kC0QSS1w3U77zUS0s1lrk60C00QU000000000000000U", 1)
FindText().PicLib("|<克拉肯的克>*200$43.zzz0zzzzzzUTzzzzzkDzzzzzs7zzy00000070000003U000001k000000s000000Tzzs7zzzzzw3zzzzzy1zzzzzz0zzzzU0000Dzk00007zs00003zw00001zy00000zz0zzzUTzUzzzkDzkTzzs7zsDzzw3zw00001zy00000zz00000TzU0000Dzk00007zs00003zzs3s3zzzw1y3zzzy0z1zzzz0zUzzzz0TkTzzzUDsDwDzUDw7y1zU7y3z0z07z0zUw03zUTUE03zk00803zs00607zw007U7zz003kDzzk03wzzzzzzs", 1)
FindText().PicLib("|<镜像容器的镜>*200$44.zTzzy7zzUzzy1zzsDz0003w1zk000z00Q000DU070003k01y1s1w00TUz1y007sDkT0Tzy3s7kDzzUS1w3zw0001Vzz0000M00k000700A0001s03zzzzy00zzzzzk0DU007z0zk001zkDw000Tw3z0zs7z0zkTz1zUDw7zkS0070007U01k001s00Q3zUS0071zw7k01kTz1zkDw000Tw3z0007z0zk001zkDzUM7zw37s71zz01y3kTzk0TUw7zs07kD1zy01s3kQz01w1w73k1y0T0Uw0y0Dk0DUzU7w07szw7zU1zTzXzy3s", 1)
FindText().PicLib("|<茵迪维利亚的茵>*200$47.zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzkDz0zzzzUTy1zzzz0zw1zzk000000zU000001z0000003y0000007w000000Dzz0zw3zzzy1zs7zzzzzzzzzzzzzzzzzzU00000Tz000000zy000001zw000003zs000007zkTzzzsDzUzw7zkTz1zsDzUzy3zkTz1zw7000C3zsC000Q7zkQ000sDzUs001kTz1k003Uzy3zU7z1zw7z07y3zsDw03w7zkTs03sDzUz003kTz1s0k3Uzy303k31zw70DkC3zsD0zkQ7zkT7zlsDzUyzzrkTz000000zy000001zw000003zs000007zk00000DzU00000Tz1zzzzUzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", 1)
FindText().PicLib("|<过激派的过>*200$43.zzzzzkDzzzzzs7z7zzzw3z1zzzy1z0Tzzz0zU7zzzUTs3zzzUDy0zzzk7zUC00007kD00003wTU0001zTk0000zzs0000Tzzzzk7zzzzzw3zzzzzy1zzzwTz0z03s7zUTU1w1zkDk0z0Ts7s0TUDw3w0Ds3y1zs7y0z0zw3zUTUTz1zkTkDzUzwzs7zkTzzw3zsDzzw1zw7zzy0zy3zy00zz1zz00Tz0zzU0DzUTzs0DzU7zw0Tz01zzzzz007zzzz000Dzz00000000070000047s000077z00003bzw0001vzzzzzzk", 1)
FindText().PicLib("|<死神的死>*200$42.U00000100000000000000000000000000000000001zUDz0zzzUTz0zzzUTz0zzz0Tz0zzz0Tz0zzz00D0zzy0030zDy0030y7w0030w3s0030s3s3s3001k7s7003UDs700D0Ts700T0TsD01z0nkD07zVVkD0DznU0T0zzz00T0zzzU0T0zzzk0z0zzzs0z0zzzs1z0zzzs3z0zzzk3z0zXzU7z0zUz0Dz0zUy0Tz0z0s0Tz0C0k0zzU0101zzU01U7zzU01kDzzk03szzzy0TU", 1)
FindText().PicLib("|<异常拦截·向右的箭头>*20$33.s00zzz003zzw00Dzzk00zzz003zzw00Dzzk00zs3003z0400Dw0E00zk1U03z0600Dw0E00zk1U03z0600Dw0M00zk3007w0M00z0600Dk1U03w0M00z0400Dk1003w0E00z0400Dw1003zzk00zzw00DzzU03zzk00zzy00DzzU03zzs00zzw", 1)
FindText().PicLib("|<01>*100$18.zzzzzzwC7k43k03k23lX3lX3lX3lX3lX3lX3lX3lX3lX3lX3lX3lX3lX3lX3lX3lX3k33k33s77zzzzzzU", 1)
FindText().PicLib("|<02>*100$22.zzzzzzzz3wTs30T001w003kU4D60EwMH3lVwD67kwMT3lVUD641wM0DlU7z60TwM1zlU7z60TwM1zkU7z001w0U7w60TzzzzzzzU", 1)
FindText().PicLib("|<03>*100$22.zzzzzzzzVwDs30T040w003kk6D30MwA1XklyD37swATXklkD371wAQ7klyD37swATXkl6D30MwA1XkU6D040y0E3w3UTzzzzzzzU", 1)
FindText().PicLib("|<04>*100$22.zzzzzzzz3yDs3kT0D1w0M7lVUT661wMM7lV0T64FwMF7lUAT60lwM37lU8T600wM03lU0D67lwMT7kVwT07lw0z7s7wTzzzzzzzU", 1)
FindText().PicLib("|<05>*100$22.zzzzzzzz3k7s20T001w007lU7z60TwM1zlU7z603wM07lU0D66EwMT3lVwD67kwMT3lVAD60EwM13kU4D000w0k7w7UzzzzzzzzU", 1)
FindText().PicLib("|<拦截战·进入战斗的进>*200$30.zzzzzzzzzztzlszkzlszsTlszwDlszy4007zQ007zw007zzkkzzzlszzzlszkDlszUDUETkA003yA003yC007yDVszyDXszyD3szyC7szyC7szwDDszs3zxzk0TzXVk003nw003zzU07zzzzzzzzzzU", 1)
FindText().PicLib("|<拦截战·快速战斗的图标>*200$34.zzzzzzzzzzzy0w1zzw1s3zzs3k7zzk7UDzzUD0Tzz0S0zzy0w1zzw1s3zzs3k7zzk7UDzzUD0Tzz0S0zzs3s3zz0T0Tzs3s3zz0T0Tzs3s3zz0T0Tzs3s3zz0T0Tzs3s3zz0T0Tzs3s3zz0T0Tzzzzzzzzzzzzy", 1)
;tag 前哨基地
FindText().PicLib("|<前哨基地的图标>*100$23.S032C0A8C0kUD3287A887kVA7X6A3gQ63kk63nA61wQ21wQ30wQ30xy30zS1UQC1UES1U3D1kAD0kkr0n37Uw63UEM3U1UDV", 1)
FindText().PicLib("|<溢出资源的图标>*100$21.zsTzwtzyTnyDzbbzz8zzs1zw03yA077U03w01zU0Dw01zU0Dw01zY0Dls1szkATzUDzz7zU", 1)
FindText().PicLib("|<歼灭>*150$47.zzyDU006020C0004000A0000000M000M0U7w001s3sTzw7zk3kzwsTT03VzskwC0D3zVUsQ800D31UkE00Q633U000sQ470001Uk0S0DVzXU1y0T3zy0DzUy7zw0Tz3wDzkETw7sTz0kDkTkzs3k61zVy0DU07z3w0zk4Ty7s7zkRzwDszzwk", 1)
FindText().PicLib("|<获得奖励的图标>*200$38.zzzzzzzzzzzzzzzsTzzzzy7zzzzzVzzzzzsTzzzzy7zzzzzVzzzzzsTzzzzy7zzzzzVzzzzzsTzzzzy7zzzzzVzzzzs00Tzzy007zzzk03zzzw01zzzzU0Tzzzw0Dzzzz07zzlzs1zkwTz0zwD7zkTz3lzy7zkwTznzwD7zxzz3lzzzzkwTzzzwD7zzzz3lzzzzkwTzzzwD3zzzz3k00000w00000TU0000Dy00007zzzzzzzzzzzzzU", 1)
FindText().PicLib("|<派遣公告栏的图标>*200$58.zzzzszzzzzzzzy0zzzzzzzzk0zzzzzzzw00zzzzzzz001zzzzzzk1k1zzzzzy0Tk1zzzzzU3zk1zzzzs0zDk3zzzy0DkDU3zzzk3wQTU3zzw0T7wTU3zz07kzwT07zk1yDzwT07y0TXzzsz07U3sTzzsz040z7zzzsz00Dlzzzzky03wTzzzzly0D7zznzzls0szzy7zzlU3jzzkDzza0Czzy0TzyM0vzzs3zztU3jzzkTzza0CzzzXzzyM0vyzzTzztU3jvzzzyza0CzbzzzvyM0vyDzzzDtU3jszzzsza0CzVzzzXyM0vy7zDwDtU3jsDkTkza0CzUy0y3yM0vy1k1sDtU3js6010za0CzU0003yM0vy0000DtU3js0000za0CzU0003yM0vy0000DtU3jy0001za0Czy000TyM0tzw007ztU3Xzw01zyC0DXzw0TzVs0T3zw3zwT00T7zszz7s00z7zzzly080z7zzwDU3s0z7zzXw0zs0yDzsz07zs1yDyDk1zzk1yDVw0Tzzk1yAT07zzzk1w7s0zzzzk3xy0DzzzzU3zU3zzzzzU3w0zzzzzzU307zzzzzzU01zzzzzzz00Tzzzzzzz07zzzzzzzz0zzzzzzzzzDzzzzU", 1)
FindText().PicLib("|<派遣公告栏的派遣>*100$68.000000001w01U00DU000T00S00zw1kDzzsDkTzzUy3zzy3zTzzkDkyT7UDbzz01yDzzs1tzs00Dnzzy04T0001sTzzU07k3s0A07k001wTz00DzzzW0TDzs03zzzts7nzw000000T1wzs000000DwTDS0TsTzz1z7nrU7y7zzk7Vwws1zVs0w0ESDDMTsTzz007Xnz0S7zzk01swzs7Vzzw08SDDw1sS00077Xlw0S7zzs1tswS07Vzzy0ySD7U1sTzzUD7Xlw0S7U1s7nswD07Vzzy1swD3s1wTzzUyD3yz1zU000D7lzbszz000LlwTxyTzzzzxwS7wD3lzzzyCDVw1UsDzzzVVkA0M60Tzzs04000000Dy0U", 1)
FindText().PicLib("|<全部派遣的图标>*200$35.00Ty0007zz000zzzU03zzzU0DzzzU0zzzzU3zzzzUDzzzzUTzzzzVzbwzz3y7kzz7w7UzyTw3Uzwzw3Uztzw3Uzzzy3Uzzzy3Uzzzs71zzzUQ7yzy1kTxzsD1znzUw7zXy3kTz7wDVzwDwzbzsDzzzzkTzzzz0Tzzzw0Tzzzk0Tzzz00Tzzw00Dzzk007zy0003zU08", 1)
;tag 咨询
FindText().PicLib("|<妮姬的图标>*150$32.zztzzzzk3zzzk0Dzzs01zzw00Dzy001zzU00Tzk003zw000zz000DzU003zs000zz000Dzk003zw000zzU00Tzs00Dzz003zzs01zzz00zzzw0zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzw00001000000000000000000000M0000600003k0000w0000TU0007s0003z0000zk000Dy0007zU003zs000zz000Dzs007zy001zzU00zzw00Dzz003zzs01zzy00Tzzk0Dzzw03zzzU1zzzs0Tzzz0Dzzzk3zzzw1zzzzUTzzzwDzzzz3zzU", 1)
FindText().PicLib("|<咨询的图标>*150$31.z7zwTzXzyDzlzz7zszzXyAM0lU6A0Mk360AM1X06A0zU3y0Tk1z0000000000000000000003zzzzVzzzzkzzjzsTzXzwDzUzy7z07z3zU7zVzs3zkzw3zsTy1zwDzizy7zzzz3zzzzVzzzzkzzzzs00000U0000E", 1)
FindText().PicLib("|<》》》>*200$36.D0S0w0TUz1y0zlz3y0zlzXz0TsznzUTszlzUDwTtzkDyTwzs7zDyTs3z7yDw3zbzDw1zXz7y1znzbz1zXz7y3zbzDy3z7yDw7zDyTsDyTwzsDwTtzkTszlzUTsznzUzlzXz0zlzXy0TUz1y0D0S0w0U", 1)
FindText().PicLib("|<20/>*200$25.000000003s00Fy7kMr7sA1nC61vb70tnX0wtnUwQtkwCQkzbCMTtyQ7syA0006000600030000U0000E", 1)
FindText().PicLib("|<咨询·MAX>*190$49.0000000000000000301001s7Vk1k60S7Uw1s7U7bkT1w3k3nkDvy3w0zk7zz1y0Dk3bnVzU3k1llktk1s0s0sww1y0Q0QQC1zUC0CS7Vts707C1kwS3U3j0wwD1k1r0Cw3k0000000000000000U", 1)
FindText().PicLib("|<收藏的图标>FE4431-0.90$32.zzzzzzzzzzzzzbzzzzkzzzzwDzzzy1zzzzUTzzzk3zzzw0Tzzw03zzk003z00003k0000w0000TU0007w0003zU001zw000zzU00Tzw007zz003zzk00zzs007zy001zzU00Tzs007zy1y1zzVzsTztzzbzzzzzzzzzzzs", 1)
FindText().PicLib("|<快速咨询的图标>*200$32.zzzzzzzzzzz0S0zzs3k7zz0S0zzs3k7zz0S0zzs3k7zz0S0zzs3k7zz0S0zzs3k7zz0S0zzk7UDzs3k7zw1s3zy0w1zz0S0zzUD0Tzk7UDzs3k7zw1s3zy0w1zz0S0zzzzzzzzzzzzy", 1)
FindText().PicLib("|<咨询的咨>*200$30.zzXzznz3zzkz3zzkD001wC000zC001zwC3VzsS7VzsS7Xzsy3Xznw3zy3w1zU3s0z0DUMT1y0s7bs3y0zs7z1zwzztzwzzzw0007w0007w0007wDzw7wDzy7wDzy7wDzy7wDzw7w0007w0007w0007wDzw7U", 1)
FindText().PicLib("|<咨询·向右的图标>*200$28.03zzy0Dzzw0Tzzk0zzzU3zzz07zzw0Dzzs0zzzk1zzz03zzy0Dzzw0Tzzk0zzzU3zzz07zzw0Dzzs0zzzk1zzz03zzy0Dzzw0Tzzk0zzzU3zzz07zzw0Dzzs0zzzk1zzz03zzy0Dzzs0zzz07zzs0TzzU3zzw0DzzU1zzy0Dzzk0zzy07zzs0zzz03zzw0TzzU3zzw0DzzU1zzy0Dzzk0zzz07zzs0zzz03zzw0TzzU3zzw0Dzzk1zzy0Dzzk0zzz07zzs0zzz03zzy", 1)
FindText().PicLib("|<0/>*220$21.Dz1vzwDTzXnkQSQ3nrUSww3rbUSwQ3bXzxsTzj1zts1sC4", 1)
;tag 奖励
FindText().PicLib("|<任务>*150$44.00000000000000010207000wTk3s00Dzs1zzU7Ds0zzs3kC0TVw0s3U7ww0S0s07z0DUC0Dzw1w7sDwzkTzzVk0M1rzs0Q00Q3U0DV060s1zzs1UC03xy0M3U0Q3U60s0C0k1XzsD0Q0MzyDVz063g1UT0000000000000002", 1)
FindText().PicLib("|<奖励>*150$43.000000000000000A4000006707zA0n7z3za0TzzVzn04z1kk1U0ttkTzz1wDsDzzVy7sDyTkrzk7Q6M1rk3jXA0n01rta01U0vwn3zzwRyNVzzyCqQkzzz7PAM0TU3xyA0zw1wzC7yDszzj3w3wzzj0U04003000000000000000U", 1)
FindText().PicLib("|<灰色的全部>#529-0.90$40.08000001k01UT07U0D3z1z07zjwDz0TyvVsy0tniT0y3bCvw3yCQzDzzlzzwDzyDzzk1s0TzvU30003a0z03zCMTzUTytVzy1zvi0S073js1s0QCz7zzVzvUzzz7zi1zzsQSk8", 1)
FindText().PicLib("|<浅红点>*150$19.zzzzzzzsDzk3zlwTlzDtzntztwzySTzDDzbbzbtznwTlz7Vzk1zy3zzzzzzzk", 1)
;tag 活动
FindText().PicLib("|<作战出击的击>*200$37.zzw7zzzzy3zzzzz1zzy3zUzzz000DzzU000Dzk00001s00000zz0000Tzz000DzzkDw7zzsDzz0Tw7zzU001zzk0001zs000004000001zk0000zzs000Tzy1z0C3z1zzz0zUzzzUTkTkTkDsDs7s7w7w3w3y3y1y1z1z0z0zUzUTU1UDkDk003s7s00003w00001zk0000zzzU00Tzzzy0Dzzzzs7zzzzzrk", 1)
FindText().PicLib("|<活动地区>*150$74.zzzzzzzzjzzztz0zzXzDlz00640S0MznYTU01n0TkCDwt7sTlzz7zz0SCECDyzzlzzU20U1XD7i01U00k80MlVkU0M1WC81CA0yDlz3tXm0HXkTzwTtyMwl4sw7zy7wPaDCFCC0zg0D6NXUY3X27l03l0Ms95sVkslws06A6Py9ySATC03b7btXzz703bklzswM00Fk0zyETy06003wSDzyDzk7k01U", 1)
FindText().PicLib("|<签到>*150$40.zzzzzzzzzzzzzzbtzzznwD2w0S7U01U00S007001k0Ey0k7Y1bk10Ts1z001y01w007U01s70Q007sQ1xU4w007tXbk00TWATUA1yAFzXm7wm7w0sS007071s00Q0sDU01nzlzzzzzzzzzzzzzy", 1)
FindText().PicLib("|<全部领取的全部>*140$40.0S00s7k3s03kzkTk1zvz3zk7zywTDUTyvbkTUtniz0zXbDnzzyTzzDzznzzw7zsDzys1s000vUDk0znb7zs7ziQTzUTyvk7U1lvy0S077jtzzwTyuDzzlzvUzzz7zi2", 1)
FindText().PicLib("|<STORY>*200$71.kC03s7w0syTt0C0D03s0tszkTzXyD7nllnzUzz7sz77nnbz0zyDlyDDbaTyETwTXwSSDUzwkDsz7sw0T1ztsDlyDlk1y7znwTXwTXV7yDzbwz7syDb7wTz/lyDswTD7szy03wTs1ySDlzwUDszs7wyDXzt", 1)
FindText().PicLib("|<剧情活动>*150$75.zzswzDyzszzlw0D7Y03VU3U6DU10w00w81w0lwS8700DvUTzyDU10k00zzXzz040861Uzy01zs0X70UU0Mk0A0l4084407201U68U00Uk0yzXzDn4087a07zwTtiMX70wlszM0S8n4087a07l03l4MU18wk0y8yQ0307D7a07X7nU0t0lswk0sswQC6A0A7aS7703zk1s1lwnkxs0TzATzyTiSTzjrzzzU", 1)
FindText().PicLib("|<时间>*150$40.zztzzzzzzblU003yTW000DtzA00M01zzy1U07Dzs680Qk1U8zbn0603STASM08twltUMlbn061X6TA0M6C9wltU8zbn7a03yTA0M0Dtwk1UTzbnzy9zUTDzkzy1wzz7zzznzws", 1)
FindText().PicLib("|<活动关卡>*150$74.rz7zyDyTXzszss0w1XzXszyDy40y0MzwwTzU3vUTzyDy63zs0zz7zy0C00DyDzw07zU3U03zXz601U68zszs00Ek0M1WDyDy003TlzbtX003U00zwTtiMk00Tszyk0wFaA007y7z40DAFXz1zzUDl7nk0MzUDzs0slws0CTk1zyA4QSC7X7kQ3zXv703zk1kDUTszvk0zyMwDyDzDzyzzzzzzzzzrzU", 1)
FindText().PicLib("|<REPEAT>*150$57.zzzzzzzzzzzzzzzzzzzk70k70yS0S0k60M7Xs3naDnXDwTnyQlyQNzVyTnaDnXDwDnyQlyQNzdyTnaDnXDtDnyEkCQMDByTmC7k3DtbnyHly0tzAyTmCDnzDtbnyNlyTty0yTnCDnzDk7nyMlyTtySSTna0nz0nnnyQs6Ts6SSTzzzzzzzzzzzzzzzzzzzU", 1)
FindText().PicLib("|<挑战>*200$41.zzzzzzzzzzzzzzntDyT7zbmTwy9z647synw08DkQzk0ETXkDskVzD0Tll7yS0zXmDsyBy34D0C3sAMC0Q7skkQwsTtVattsznXDnnXzb6PX74zAQn081wNsCA37tzsTzzDzzzzzzzzzzzzzw", 1)
FindText().PicLib("|<挑战关卡>*150$75.lt7yTbzDlzwTyD8znwbsyDzXzlt5yTYzbXzw0Q087kArsMDzU3U11y1bw00TwTwA8Dnk3U03zXzll3yS0TwTw00CD8znkzzXzU00kt3k3UM00Q00048C0Q7001zXzV10lXUs00DyDy88aSQDz1zzkDlV7nnlzk7zy0SCMiCQ/w0Tzn1lX4k10S3UTyTQ8s60030y1znzXDUlkMMTwTyTyzzzzzzzzzzrzU", 1)
FindText().PicLib("|<红色的关卡的循环图标>B40000-0.70$61.00000000000000000000000000000000000000000000000000000000000000000000000000001U000000000w000000000TU0000003zzsDzs0001zzz7zw0000zzzvzy0000Tzztzz0000DzzkzzU0007kTU07k0003sD003s0001w7001w0000y2000y0000T0000T0000DU000DU0007k0007k0003s0063s0001w00D1w0000y00TUy0000T00TkT0000DzkzzzU0007ztzzzk0003zwzzzs0001zy7zzw0000000zU000000007k000000001s000000000A00000000000000000000000000000000000000000000000000004", 1)
FindText().PicLib("|<黄色的关卡的循环图标>F5A317-0.60$49.0000000000000000000000000000000000000000000000000000A00000007U0000003w00000Dzz1zy00DzzszzU07zzyTzk03zzyDzs01zzw7zw00y3w00y00T1s00T00DUk00DU07k0007k03s0003s01w0001w00y0000y00T000kT00DU01sDU07k03w7k03s03y3s01zy7zzw00zzDzzy00TzXzzz00DzkTzz000007w0000000y0000000700000000U000000000000000001", 1)
FindText().PicLib("|<协同作战的协同>*200$39.zzzzzzzzzzzzztyzzzzzDrz003twTs00TC0TDznkU3tU6S30TA0nkwntzyTAa7DzntYktU6TBa7AMnsAkNbaTDC3AwnttntU6TCCTA1ntXntryTAkTDz3tj7tzszzzzzzzzzzzzzw", 1)
FindText().PicLib("|<捍卫者>*200$72.szzzzzzzzwTzsw03zzzzzwTlsw03s003y00VswTXs003y0030Q03s003y0070A03zsTXzwQD0ATXzsTXzwMDkwT3zsTXk000sw03zsTXk000sw03zsTXk000szzzzsTXzs7zsA03zsT3zkDz0403zsM3y0030A03zsQ7s0030zlzzsQzk1y3szkzzsTzs3z3sk01zsTzzU03sk01zsTzzU03sk01zsTzzVz3szlzU000zXz30zkzU000zU03UzkzU000zU03VzkzU000zU03U", 1)
FindText().PicLib("|<任务的图标>*142$28.zzbzzzw7zzz27zzkyDzwDQDz3twDsTbwC7yDwNzkzw7y1zkTs3z1z07w7k0DkS00D1U00A4000EQ0071w01w7s0TkTk3z1zUTwbz1zmDwDyADszVwTbsTsTS7zsTVzzsQTzzs3zzzszzU", 1)
;tag 协同作战
FindText().PicLib("|<开始匹配的开始>*200$54.zzzzzXzXzzzk0zXzVzU000TXzXzU000TXz3zk000T3z7DzXyDw0S77zXyDw0CD3zXyDw0ADXzXyDy08T1zXyDz6000zXyDy4000U000CAM000000CAPzt0000CATzzU000S4Q03z3yDy0M01z3yDz0s01z3yDzUsTVy7yDzkMTVy7yDzU8TVwDyDzU8TVsDyDz28TVkTyDy7M01UzyDw7s01lzyDyDs01vzyDzzwznU", 1)
FindText().PicLib("|<普通>*200$67.0C0600000000T07s001zzy0Dk3s0D0zzzU3s3w0DkTzzlzzzzw7w7zzkzzzzy1z0SDkTzzzz0TkTzk7zzzzU7sDzk1sySD01k1zs0yTD7U0ETzzsTDbbk00Dzzw7bnnk007zzy3nvts003tyTTzzzzs01wzDjzzzzwzszzzrzzzzyTwTzzvzzzzzDyDzzw000007z7nsy3zzzw0DXzzz1zzzy07lzzzUzzzz03szzzkTzzzU1wTzzsDU07k0yDXlw7zzzs0T7lzy3zzzw0DXsxz1zzzy07lwSz0zzzz07wwDD0T00DU7zk000DzzzkDzzzzy7zzzs7tzzzz3zzzw1sDzzz1zzzy0M1zzzUy00z0000Q04", 1)
FindText().PicLib("|<准备>*200$52.zzzzzyTzzzlXzzkzzlyC7zy00z7swTzk00yDXlzy007sQ00DUDkzlU00w0S7z67VzlU0zwkT7zz07zy1wTzw0Dzk007s000T000A07U0yE01s3zk7z7lzUTznyQT7zk00DslsTz000z3003wS7XwQ00TlsSDVlwTz000y77lzw003swT7zlsSD3k00z7VswT001w003tw00Dk00Dzlzzz000y", 1)
;tag 剧情模式
FindText().PicLib("|<SKIP的图标>*200$20.7szky7w7Uz0M3k20Q00100000040030M3kC1wDVz7sznyTy", 1)
FindText().PicLib("|<1>*200$10.zzzz3kD0zXyDszXyDszXyDszXyDzzzU", 1)
FindText().PicLib("|<2>*150$14.zzzzzU7k0w0D7XzszkDk3s3w7z7zlzw0D03k0zzzzzU", 1)
FindText().PicLib("|<AUTO>*200$66.z3zXyD00S03y1zXyD00Q01y1zXyD00Q01y1zXyDyDwDkwEzXyDyDwTkwMzXyDyDwTkwMzXyDyDwTksMTXyDyDwTkswTXyDyDwTkswTXyDyDwTkkwTXyDyDwTkk0DXyDyDwTkk0DXyDyDwTkU0DXyDyDwTkVy7XyDyDwTkXz7VwDyDwDkXz7U0DyDw013z3k0DyDy017z3s0zyDz03U", 1)
FindText().PicLib("|<灰色的星星>5B5D5F-0.90$26.00E000C0007U001w000z000Ds007y001zk0DzzszzzzzzzzxzzzyDzzz0zzzU7zzk0zzs0Dzw03zzU0zzs0Dzy07zzU1zjs0TUy07U7k1U0Q8", 1)
FindText().PicLib("|<记录播放的播放>*200$53.sTzlztz3zks01zVy7zVk03z3wDz3U0Dz7sTy7W4D00kzk328y0100U601w02010000w7w03VU01wDkMD3U03sTUky7k0Tk01VwC00TU037s08ED000DU0sky480Q0003w8S0w3U07sEw3s700DlVs7wC4ATX3sDsQ00y67kTks01wAD0TVk03sMM0T3V37VkU08700C001UES00SA67Vkw00ysQzb", 1)
;endregion 识图素材
;region 运行前提示
if g_numeric_settings["Username"] != A_Username
ClickOnHelp
if g_numeric_settings["Username"] != A_Username {
N := Random(1, 2)
if N = 1 {
verify := "你是否想继续程序"
}
if N = 2 {
verify := "你是否想关闭程序"
}
Result := msgbox(
(
"" A_Username
"`n"
"`n使"
"`n==========================="
"`n" verify
"`nsettings.iniUsername"
"`n==========================="
"`n"
"`n==========================="
"`n1080p使"
"`n"
"`n"
), , "YesNo")
if (Result = "Yes" and N = 2) or (Result = "No" and N = 1) {
msgbox("人机检测失败,你有认真看公告吗?")
ExitApp
}
}
;endregion 运行前提示
;region 创建gui
doroGui := Gui("+Resize", "DoroHelper - " currentVersion)
doroGui.Tips := GuiCtrlTips(doroGui) ; 为 doroGui 实例化 GuiCtrlTips
doroGui.Tips.SetBkColor(0xFFFFFF)
doroGui.Tips.SetTxColor(0x000000)
doroGui.Tips.SetMargins(3, 3, 3, 3)
doroGui.MarginY := Round(doroGui.MarginY * 0.9)
doroGui.SetFont("cred s11 Bold")
TextKeyInfo := doroGui.Add("Text", "R1 +0x0100", "关闭ctrl + 1 终止:+ 2 调整窗口:+ 3")
doroGui.Tips.SetTip(TextKeyInfo, "DoroHelper 快捷键提示:`r`nCtrl+1: 立即关闭程序`r`nCtrl+2: 暂停当前正在执行的任务`r`nCtrl+3: 初始化程序并尝试调整游戏窗口至推荐状态")
LinkProject := doroGui.Add("Link", " R1 xs", '<a href="https://github.com/kyokakawaii/DoroHelper"></a>')
doroGui.Tips.SetTip(LinkProject, "点击访问 DoroHelper 在 Github 上的官方项目页面,可以获取最新版本、查看源码或反馈问题")
doroGui.SetFont()
BtnSponsor := doroGui.Add("Button", "R1 x+8", "赞助")
doroGui.Tips.SetTip(BtnSponsor, "如果你觉得 DoroHelper 对你有帮助,可以考虑点击这里支持开发者,激励项目持续更新与维护")
BtnSponsor.OnEvent("Click", MsgSponsor)
BtnHelp := doroGui.Add("Button", "R1 x+8", "帮助")
doroGui.Tips.SetTip(BtnHelp, "点击查看 DoroHelper 的详细使用说明、注意事项以及常见问题解答")
BtnHelp.OnEvent("Click", ClickOnHelp)
BtnUpdate := doroGui.Add("Button", "R1 x+8", "检查更新")
doroGui.Tips.SetTip(BtnUpdate, "手动检查 DoroHelper 是否有新版本发布。建议定期检查以获取最新功能和修复")
BtnUpdate.OnEvent("Click", ClickOnCheckForUpdate)
BtnClear := doroGui.Add("Button", "R1 x+8", "清空日志")
doroGui.Tips.SetTip(BtnClear, "点击清除下方日志标签页中当前显示的所有运行记录")
BtnClear.OnEvent("Click", (*) => LogBox.Value := "")
Tab := doroGui.Add("Tab3", "xm") ;由于autohotkey有bug只能这样写
Tab.Add(["设置", "任务", "商店", "战斗", "奖励", "日志"])
Tab.UseTab("设置")
cbAutoCheckUpdate := AddCheckboxSetting(doroGui, "AutoCheckUpdate", "自动检查更新", "Section R1.2")
doroGui.Tips.SetTip(cbAutoCheckUpdate, "勾选后DoroHelper 启动时会自动连接到 Github 检查是否有新版本")
AddCheckboxSetting(doroGui, "isPreRelease", "测试版渠道", "x+5 R1.2")
MirrorChyan := AddCheckboxSetting(doroGui, "MirrorUpdate", "改用Mirror酱", "R1.2 xs+15")
doroGui.Tips.SetTip(MirrorChyan, "Mirror酱是一个第三方应用分发平台让你能在普通网络环境下更新应用`r`n网址https://mirrorchyan.com/zh/(付费使用)")
MirrorEditControl := doroGui.Add("Edit", "x+5 yp w145 h20")
doroGui.Tips.SetTip(MirrorEditControl, "输入你的Mirror酱CDK")
MirrorEditControl.Value := g_numeric_settings["MirrorCDK"]
MirrorEditControl.OnEvent("Change", (Ctrl, Info) => g_numeric_settings["MirrorCDK"] := Ctrl.Value)
cbAdjustSize := AddCheckboxSetting(doroGui, "AdjustSize", "启用窗口调整", "xs R1.2")
doroGui.Tips.SetTip(cbAdjustSize, "勾选后DoroHelper运行前会尝试将窗口调整至合适的尺寸并在运行结束后还原")
cbOpenBlablalink := AddCheckboxSetting(doroGui, "OpenBlablalink", "任务完成后自动打开Blablalink", "R1.2")
doroGui.Tips.SetTip(cbOpenBlablalink, "勾选后,当 DoroHelper 完成所有已选任务后,会自动在你的默认浏览器中打开 Blablalink 网站")
cbSelfClosing := AddCheckboxSetting(doroGui, "SelfClosing", "任务完成后自动关闭程序", "R1.2")
doroGui.Tips.SetTip(cbSelfClosing, "勾选后,当 DoroHelper 完成所有已选任务后,程序将自动退出`r`n注意测试版本中此功能可能会被禁用")
TextToleranceLabel := doroGui.Add("Text", "Section +0x0100", "识图宽容度")
doroGui.Tips.SetTip(TextToleranceLabel, "调整图像识别的相似度阈值`r`n数值越高匹配越宽松更容易识别到目标但也可能发生误判`r`n数值越低匹配越严格准确性更高但可能错过一些稍有差异的目标`r`n请根据你的游戏分辨率和缩放情况适当调整")
SliderTolerance := doroGui.Add("Slider", "w200 Range100-200 TickInterval1 ToolTip vToleranceSlider", g_numeric_settings["Tolerance"] * 100)
doroGui.Tips.SetTip(SliderTolerance, "拖动滑块来调整识图的宽容度`r`n范围从 1.00 (最严格) 到 2.00 (最宽松)`r`n具体数值会显示在右侧的文本框中")
SliderTolerance.OnEvent("Change", (CtrlObj, Info) => ChangeSlider("Tolerance", CtrlObj))
toleranceDisplayEditControl := doroGui.Add("Edit", "x+10 yp w50 ReadOnly h20 vToleranceDisplay", Format("{:.1f}", g_numeric_settings["Tolerance"]))
doroGui.Tips.SetTip(toleranceDisplayEditControl, "当前识图宽容度的精确数值,由左侧滑块控制")
BtnSaveSettings := doroGui.Add("Button", "xs R1 +0x4000", "保存当前设置")
doroGui.Tips.SetTip(BtnSaveSettings, "点击此按钮会将当前所有标签页中的设置(包括开关选项和数值调整)保存到配置文件 (settings.ini) 中,以便 DoroHelper 下次启动时自动加载")
BtnSaveSettings.OnEvent("Click", SaveSettings)
TextMiaoMiaoTitle := doroGui.Add("Text", " R1 +0x0100", "===妙妙工具===")
doroGui.Tips.SetTip(TextMiaoMiaoTitle, "这里提供一些与日常任务流程无关的额外小功能")
TextStoryModeLabel := doroGui.Add("Text", "R1.2 Section +0x0100", "剧情模式")
doroGui.Tips.SetTip(TextStoryModeLabel, "尝试自动点击对话选项`r`n自动进行下一段剧情自动启动auto")
AddCheckboxSetting(doroGui, "StoryModeAutoStar", "自动收藏", "x+5 R1.2")
AddCheckboxSetting(doroGui, "StoryModeAutoChoose", "自动抉择", "x+5 R1.2")
BtnStoryMode := doroGui.Add("Button", " x+5 yp-5", "←启动").OnEvent("Click", StoryMode)
TextTestModeLabel := doroGui.Add("Text", "xs R1.2 Section +0x0100", "调试模式")
doroGui.Tips.SetTip(TextTestModeLabel, "直接执行对应任务")
TestModeEditControl := doroGui.Add("Edit", "x+10 yp-5 w145 h20")
doroGui.Tips.SetTip(TestModeEditControl, "输入要执行的任务的函数名")
BtnTestMode := doroGui.Add("Button", "x+5", "←启动").OnEvent("Click", TestMode)
Tab.UseTab("任务")
TextTaskInfo := doroGui.Add("Text", " R1.2 +0x0100", "只有下方的内容被勾选后才会执行,右侧是详细设置")
cbLogin := AddCheckboxSetting(doroGui, "Login", "登录", "R1.2")
doroGui.Tips.SetTip(cbLogin, "是否先尝试登录游戏")
cbShop := AddCheckboxSetting(doroGui, "Shop", "商店购买", "R1.2")
doroGui.Tips.SetTip(cbShop, "总开关:控制是否执行所有与商店购买相关的任务`r`n具体的购买项目请在「商店」标签页中详细设置")
cbSimulationRoom := AddCheckboxSetting(doroGui, "SimulationRoom", "模拟室", "R1.2")
doroGui.Tips.SetTip(cbSimulationRoom, "总开关:控制是否执行模拟室相关的任务,包括普通模拟室的快速战斗和模拟室超频`r`n详细设置请前往「战斗」标签页")
cbArena := AddCheckboxSetting(doroGui, "Arena", "竞技场", "R1.2 Section")
doroGui.Tips.SetTip(cbArena, "总开关:控制是否执行竞技场相关的任务,如领取奖励、挑战不同类型的竞技场`r`n详细设置请前往「战斗」标签页")
cbTower := AddCheckboxSetting(doroGui, "Tower", "无限之塔", "R1.2 xs")
doroGui.Tips.SetTip(cbTower, "总开关:控制是否执行无限之塔相关的任务,包括企业塔和通用塔的挑战`r`n详细设置请前往「战斗」标签页")
cbInterception := AddCheckboxSetting(doroGui, "Interception", "异常拦截", "R1.2 xs")
doroGui.Tips.SetTip(cbInterception, "总开关:控制是否执行异常拦截战任务`r`nBOSS选择、是否截图等详细设置请前往「战斗」标签页")
cbAward := AddCheckboxSetting(doroGui, "Award", "奖励收取", "R1.2 xs")
doroGui.Tips.SetTip(cbAward, "总开关:控制是否执行各类日常奖励的收取任务`r`n具体的奖励项目请在「奖励」标签页中选择")
Tab.UseTab("商店")
TextCashShopTitle := doroGui.Add("Text", "R1.2 Section +0x0100", "===付费商店===")
doroGui.Tips.SetTip(TextCashShopTitle, "设置与游戏内付费商店相关购买选项")
cbCashShop := AddCheckboxSetting(doroGui, "CashShop", "领取免费珠宝", "R1.2 xs")
doroGui.Tips.SetTip(cbCashShop, "自动领取付费商店中每日、每周、每月可获得的免费珠宝`r`n重要如果你的游戏账号因网络原因无法正常进入付费商店请不要勾选此项否则可能导致程序卡住")
TextNormalShopTitle := doroGui.Add("Text", "R1.2 xs Section +0x0100", "===普通商店===")
doroGui.Tips.SetTip(TextNormalShopTitle, "设置与游戏内普通商店(使用信用点购买)相关选项")
cbNormalShop := AddCheckboxSetting(doroGui, "NormalShop", "每日白嫖2次", "R1.2 ")
doroGui.Tips.SetTip(cbNormalShop, "自动领取普通商店中每日提供的免费商品,然后利用免费刷新再领一次")
cbNormalShopDust := AddCheckboxSetting(doroGui, "NormalShopDust", "用信用点买芯尘盒", "R1.2 ")
doroGui.Tips.SetTip(cbNormalShopDust, "勾选后,在普通商店中如果出现可用信用点购买的芯尘盒,则自动购买")
cbNormalShopPackage := AddCheckboxSetting(doroGui, "NormalShopPackage", "购买简介个性化礼包", "R1.2 ")
doroGui.Tips.SetTip(cbNormalShopPackage, "勾选后,在普通商店中如果出现可用游戏内货币购买的简介个性化礼包,则自动购买")
TextArenaShopTitle := doroGui.Add("Text", " R1 xs +0x0100", "===竞技场商店===")
doroGui.Tips.SetTip(TextArenaShopTitle, "设置与游戏内竞技场商店(使用竞技场代币购买)相关选项")
cbBookFire := AddCheckboxSetting(doroGui, "BookFire", "燃烧", "R1.2")
doroGui.Tips.SetTip(cbBookFire, "在竞技场商店中自动购买所有的燃烧代码手册")
cbBookWater := AddCheckboxSetting(doroGui, "BookWater", "水冷", "R1.2 X+0.5")
doroGui.Tips.SetTip(cbBookWater, "在竞技场商店中自动购买所有的水冷代码手册")
cbBookWind := AddCheckboxSetting(doroGui, "BookWind", "风压", "R1.2 X+0.5")
doroGui.Tips.SetTip(cbBookWind, "在竞技场商店中自动购买所有的风压代码手册")
cbBookElec := AddCheckboxSetting(doroGui, "BookElec", "电击", "R1.2 X+0.5")
doroGui.Tips.SetTip(cbBookElec, "在竞技场商店中自动购买所有的电击代码手册")
cbBookIron := AddCheckboxSetting(doroGui, "BookIron", "铁甲", "R1.2 X+0.5")
doroGui.Tips.SetTip(cbBookIron, "在竞技场商店中自动购买所有的铁甲代码手册")
cbBookBox := AddCheckboxSetting(doroGui, "BookBox", "购买代码手册宝箱", "xs R1.2")
doroGui.Tips.SetTip(cbBookBox, "在竞技场商店中自动购买代码手册宝箱,可随机开出各种属性的代码手册")
cbArenaShopPackage := AddCheckboxSetting(doroGui, "ArenaShopPackage", "购买简介个性化礼包", "R1.2")
doroGui.Tips.SetTip(cbArenaShopPackage, "在竞技场商店自动购买简介个性化礼包")
cbArenaShopFurnace := AddCheckboxSetting(doroGui, "ArenaShopFurnace", "购买公司武器熔炉", "R1.2")
doroGui.Tips.SetTip(cbArenaShopFurnace, "在竞技场商店中自动购买公司武器熔炉,用于装备转化")
TextScrapShopTitle := doroGui.Add("Text", "R1.2 xs Section +0x0100", "===废铁商店===")
doroGui.Tips.SetTip(TextScrapShopTitle, "设置与游戏内废铁商店(使用废铁购买)相关选项")
cbScrapShopGem := AddCheckboxSetting(doroGui, "ScrapShopGem", "购买珠宝", "R1.2")
doroGui.Tips.SetTip(cbScrapShopGem, "在废铁商店中自动购买珠宝")
cbScrapShopVoucher := AddCheckboxSetting(doroGui, "ScrapShopVoucher", "购买全部好感券", "R1.2")
doroGui.Tips.SetTip(cbScrapShopVoucher, "在废铁商店中自动购买所有好感券,用于提升妮姬好感度")
cbScrapShopResources := AddCheckboxSetting(doroGui, "ScrapShopResources", "购买全部养成资源", "R1.2")
doroGui.Tips.SetTip(cbScrapShopResources, "在废铁商店中自动购买所有可用的养成资源")
Tab.UseTab("战斗")
TextArenaTitleBattle := doroGui.Add("Text", "R1.2 Section +0x0100", "===竞技场===")
doroGui.Tips.SetTip(TextArenaTitleBattle, "设置与各类竞技场挑战相关的选项")
cbRookieArena := AddCheckboxSetting(doroGui, "RookieArena", "新人竞技场", "R1.2")
doroGui.Tips.SetTip(cbRookieArena, "使用五次每日免费挑战次数挑战第三位")
cbSpecialArena := AddCheckboxSetting(doroGui, "SpecialArena", "特殊竞技场", "R1.2")
doroGui.Tips.SetTip(cbSpecialArena, "使用两次每日免费挑战次数挑战第三位")
cbChampionArena := AddCheckboxSetting(doroGui, "ChampionArena", "冠军竞技场", "R1.2")
doroGui.Tips.SetTip(cbChampionArena, "在活动期间进行跟风竞猜")
TextInterceptionTeamTitle := doroGui.Add("Text", "R1.2 xs Section +0x0100", "===异常拦截编队===")
doroGui.Tips.SetTip(TextInterceptionTeamTitle, "设置在执行异常拦截任务时针对不同BOSS使用的队伍")
DropDownListBoss := doroGui.Add("DropDownList", "Choose" String(g_numeric_settings["InterceptionBoss"]), ["克拉肯(石)编队1", "镜像容器(手)编队2", "茵迪维利亚(衣)编队3", "过激派(头)编队4", "死神(脚)编队5"])
doroGui.Tips.SetTip(DropDownListBoss, "在此选择异常拦截任务中优先挑战的BOSS`r`n请确保游戏内对应编号的队伍已经配置好针对该BOSS的阵容`r`n例如选择克拉肯(石)编队1则程序会使用你的编队1去挑战克拉肯`r`n会使用3号位的狙击或发射器角色打红圈")
DropDownListBoss.OnEvent("Change", (CtrlObj, Info) => ChangeNum("InterceptionBoss", CtrlObj))
cbInterceptionShot := AddCheckboxSetting(doroGui, "InterceptionShot", "结果截图", "x+5 yp+3 R1.2")
doroGui.Tips.SetTip(cbInterceptionShot, "勾选后,在每次异常拦截战斗结束后,自动截取结算画面的图片,并保存在程序目录下的「截图」文件夹中")
TextSimRoomTitleBattle := doroGui.Add("Text", "R1.2 xs Section +0x0100", "===模拟室===")
doroGui.Tips.SetTip(TextSimRoomTitleBattle, "设置与模拟室挑战相关的选项")
TextNormalSimRoomLabel := doroGui.Add("Text", "R1.2 xs Section +0x0100", "普通模拟室")
doroGui.Tips.SetTip(TextNormalSimRoomLabel, "普通模拟室的日常扫荡。此功能需要你在游戏内已经解锁了快速模拟功能才能正常使用需要预勾选5C`r`n此选项的勾选在「任务」标签里")
cbSimulationOverClock := AddCheckboxSetting(doroGui, "SimulationOverClock", "模拟室超频", "R1.2")
doroGui.Tips.SetTip(cbSimulationOverClock, "勾选后,自动进行模拟室超频挑战`r`n程序会默认尝试使用你上次进行超频挑战时选择的增益标签组合`r`n挑战难度必须是25")
TextTowerTitleBattle := doroGui.Add("Text", "R1.2 xs Section +0x0100", "===无限之塔===")
doroGui.Tips.SetTip(TextTowerTitleBattle, "设置与无限之塔挑战相关的选项")
cbCompanyTower := AddCheckboxSetting(doroGui, "CompanyTower", "爬企业塔", "R1.2")
doroGui.Tips.SetTip(cbCompanyTower, "勾选后,自动挑战当前可进入的所有企业塔,直到无法通关或每日次数用尽`r`n只要有一个是0/3就会判定为打过了从而跳过该任务")
cbUniversalTower := AddCheckboxSetting(doroGui, "UniversalTower", "爬通用塔", "R1.2")
doroGui.Tips.SetTip(cbUniversalTower, "勾选后,自动挑战通用无限之塔,直到无法通关")
Tab.UseTab("奖励")
TextNormalAwardTitle := doroGui.Add("Text", "R1.2 Section +0x0100", "===常规奖励===")
doroGui.Tips.SetTip(TextNormalAwardTitle, "设置各类日常可领取的常规奖励项目")
cbOutpostDefence := AddCheckboxSetting(doroGui, "OutpostDefence", "领取前哨基地防御奖励+1次免费歼灭", "R1.2 Y+M Section")
doroGui.Tips.SetTip(cbOutpostDefence, "自动领取前哨基地的离线挂机收益,并执行一次每日免费的快速歼灭以获取额外资源")
cbExpedition := AddCheckboxSetting(doroGui, "Expedition", "领取并重新派遣委托", "R1.2 xs+15")
doroGui.Tips.SetTip(cbExpedition, "自动领取已完成的派遣委托奖励,并根据当前可用妮姬重新派遣新的委托任务")
cbLoveTalking := AddCheckboxSetting(doroGui, "LoveTalking", "咨询妮姬", "R1.2 xs Section")
doroGui.Tips.SetTip(cbLoveTalking, "自动进行每日的妮姬咨询,以提升好感度`r`n你可以通过在游戏内将妮姬设置为收藏状态来调整咨询的优先顺序`r`n会循环直到次数耗尽")
cbAppreciation := AddCheckboxSetting(doroGui, "Appreciation", "花絮鉴赏", "R1.2 xs+15")
doroGui.Tips.SetTip(cbAppreciation, "自动观看并领取花絮鉴赏中当前可领取的奖励")
cbFriendPoint := AddCheckboxSetting(doroGui, "FriendPoint", "好友点数收取", "R1.2 xs")
doroGui.Tips.SetTip(cbFriendPoint, "收取并回赠好友点数")
cbMail := AddCheckboxSetting(doroGui, "Mail", "邮箱收取", "R1.2")
doroGui.Tips.SetTip(cbMail, "收取邮箱中所有奖励")
cbRankingReward := AddCheckboxSetting(doroGui, "RankingReward", "方舟排名奖励", "R1.2")
doroGui.Tips.SetTip(cbRankingReward, "自动领取方舟内各类排名活动(如无限之塔排名、竞技场排名等)的结算奖励")
cbMission := AddCheckboxSetting(doroGui, "Mission", "任务收取", "R1.2")
doroGui.Tips.SetTip(cbMission, "收取每日任务、每周任务、主线任务以及成就等已完成任务的奖励")
cbSession := AddCheckboxSetting(doroGui, "Session", "小活动", "R1.2")
doroGui.Tips.SetTip(cbSession, "对最新的挑战关卡进行战斗或快速战斗`r`n然后对主要活动的第11关消耗所有次数进行快速战斗")
cbFestival := AddCheckboxSetting(doroGui, "Festival", "大活动", "R1.2")
doroGui.Tips.SetTip(cbFestival, "进行签到`r`n对最新的挑战关卡进行战斗或快速战斗`r`n然后对主要活动的第11关消耗所有次数进行快速战斗")
cbPass := AddCheckboxSetting(doroGui, "Pass", "通行证收取", "R1.2")
doroGui.Tips.SetTip(cbPass, "收取当前通行证中所有可领取的等级奖励")
TextLimitedAwardTitle := doroGui.Add("Text", "R1.2 Section +0x0100", "===限时奖励===")
doroGui.Tips.SetTip(TextLimitedAwardTitle, "设置在特定活动期间可领取的限时奖励或可参与的限时活动")
cbFreeRecruit := AddCheckboxSetting(doroGui, "FreeRecruit", "活动期间每日免费招募", "R1.2")
doroGui.Tips.SetTip(cbFreeRecruit, "勾选后,如果在特定活动期间有每日免费招募机会,则自动进行募")
cbCooperate := AddCheckboxSetting(doroGui, "Cooperate", "协同作战", "R1.2")
doroGui.Tips.SetTip(cbCooperate, "参与每日三次的普通难度协同作战`r`n也可参与大活动的协同作战")
cbSoloRaid := AddCheckboxSetting(doroGui, "SoloRaid", "单人突击日常", "R1.2")
doroGui.Tips.SetTip(cbSoloRaid, "参与单人突击,自动对最新的关卡进行战斗或快速战斗")
cbRoadToVillain := AddCheckboxSetting(doroGui, "RoadToVillain", "德雷克·反派之路", "R1.2")
doroGui.Tips.SetTip(cbRoadToVillain, "针对德雷克·反派之路的特殊限时活动,自动领取相关的任务奖励和进度奖励")
Tab.UseTab("日志")
LogBox := doroGui.Add("Edit", "r20 w270 ReadOnly")
LogBox.Value := "日志开始...`r`n" ;初始内容
Tab.UseTab()
BtnDoro := doroGui.Add("Button", "Default w80 xm+100", "DORO!")
doroGui.Tips.SetTip(BtnDoro, "点击启动 DoroHelper 主程序!`r`nDoro 将会按照你在各个标签页中的设置,开始自动执行所有已勾选的任务`r`n在点击前请确保游戏客户端已在前台运行并处于大厅界面")
BtnDoro.OnEvent("Click", ClickOnDoro)
if g_settings["AutoCheckUpdate"]
CheckForUpdate(false)
doroGui.Show()
;endregion 创建gui
;region 点击运行
ClickOnDoro(*) {
Initialization
if g_settings["Login"]
Login() ;登陆到主界面
if g_settings["Shop"] {
if g_settings["CashShop"]
CashShop()
if g_settings["NormalShop"]
NormalShop()
if g_settings["ArenaShop"]
ArenaShop()
if g_settings["ScrapShop"]
ScrapShop()
BackToHall
}
if g_settings["SimulationRoom"] {
SimulationRoom()
if g_settings["SimulationOverClock"] ;模拟室超频
SimulationOverClock()
BackToHall
}
if g_settings["Arena"] {
Arena()
if g_settings["RookieArena"] ;新人竞技场
RookieArena()
if g_settings["SpecialArena"] ;特殊竞技场
SpecialArena()
if g_settings["ChampionArena"] ;冠军竞技场
ChampionArena()
BackToHall
}
if g_settings["Tower"] {
if g_settings["CompanyTower"]
CompanyTower()
if g_settings["UniversalTower"]
UniversalTower()
BackToHall
}
if g_settings["Interception"]
Interception()
if g_settings["Award"] {
if g_settings["OutpostDefence"] ;使用键名检查 Map
OutpostDefence()
if g_settings["LoveTalking"]
LoveTalking()
if g_settings["FriendPoint"]
FriendPoint()
if g_settings["Mail"]
Mail()
if g_settings["RankingReward"] ;方舟排名奖励
RankingReward()
if g_settings["Mission"]
Mission()
if g_settings["Session"]
Session()
if g_settings["Festival"]
Festival()
if g_settings["Pass"]
Pass()
if g_settings["FreeRecruit"]
FreeRecruit()
if g_settings["Cooperate"]
Cooperate()
if g_settings["SoloRaid"]
SoloRaid()
if g_settings["RoadToVillain"]
RoadToVillain()
BackToHall
}
if g_settings["AdjustSize"] {
AdjustSize(OriginalW, OriginalH)
}
CalculateAndShowSpan()
Result := MsgBox("Doro完成任务" outputText "`n可以支持一下Doro吗", , "YesNo")
if Result = "Yes"
MsgSponsor
if g_settings["OpenBlablalink"]
Run("https://www.blablalink.com/")
if g_settings["SelfClosing"] {
if InStr(currentVersion, "beta") {
MsgBox ("测试版本禁用自动关闭!")
Pause
}
ExitApp
}
}
;endregion 点击运行
;region 初始化
Initialization() {
;检测管理员身份
if !A_IsAdmin {
MsgBox "请以管理员身份运行Doro"
ExitApp
}
global stdScreenW := 3840
global stdScreenH := 2160
global nikkeID := ""
global NikkeX := 0
global NikkeY := 0
global NikkeW := 0
global NikkeH := 0
global NikkeXP := 0
global NikkeYP := 0
global NikkeWP := 0
global NikkeHP := 0
global scrRatio := 1
global currentScale := 1
global WinRatio := 1
global TrueRatio := 1
LogBox.Value := ""
WriteSettings()
;设置窗口标题匹配模式为完全匹配
SetTitleMatchMode 3
targetExe := "nikke.exe"
if WinExist("ahk_exe " . targetExe) {
winID := WinExist("ahk_exe " . targetExe) ;获取窗口ID
actualWinTitle := WinGetTitle(winID) ;获取实际窗口标题
AddLog("找到了进程为 '" . targetExe . "' 的窗口!`n实际窗口标题是: " . actualWinTitle)
if actualWinTitle = "胜利女神:新的希望" {
MsgBox ("不支持国服,自动关闭!")
ExitApp
}
;激活该窗口
WinActivate(winID)
}
else {
;没有找到该进程的窗口
MsgBox("没有找到进程为 '" . targetExe . "' 的窗口,初始化失败!")
Pause
}
nikkeID := winID
WinGetClientPos &NikkeX, &NikkeY, &NikkeW, &NikkeH, nikkeID
WinGetPos &NikkeXP, &NikkeYP, &NikkeWP, &NikkeHP, nikkeID
currentScale := A_ScreenDPI / 96 ;确定dpi缩放比例主要影响识图
scrRatio := NikkeH / stdScreenH ;确定nikke尺寸之于额定尺寸的比例4K主要影响点击
WinRatio := Round(NikkeW / 2331, 3) ;确定nikke尺寸之于额定nikke尺寸的比例我是在nikke工作区宽度2331像素的情况下截图的主要影响识图
; TrueRatio := Round(currentScale * WinRatio, 3)
TrueRatio := Round(1 * WinRatio, 3)
GameRatio := Round(NikkeW / NikkeH, 3)
AddLog("`n当前的doro版本是" currentVersion "`n屏幕宽度是" A_ScreenWidth "`n屏幕高度是" A_ScreenHeight "`nnikkeX坐标是" NikkeX "`nnikkeY坐标是" NikkeY "`nnikke宽度是" NikkeW "`nnikke高度是" NikkeH "`n游戏画面比例是" GameRatio "`ndpi缩放比例是" currentScale "`n额定缩放比例是" WinRatio "`n图片缩放系数是" TrueRatio "`n识图宽容度是" PicTolerance)
AddLog("如有问题请加入反馈qq群584275905反馈请附带日志或录屏")
if g_settings["AdjustSize"] {
global OriginalW := NikkeW
global OriginalH := NikkeH
; 尝试归类为2160p (4K) 及其变种
if (A_ScreenWidth >= 3840 and A_ScreenHeight >= 2160) {
if (A_ScreenWidth = 3840 and A_ScreenHeight = 2160) {
AddLog("标准4K分辨率 (2160p)")
} else if (A_ScreenWidth = 5120 and A_ScreenHeight = 2160) {
AddLog("4K 加宽 (21:9 超宽屏)")
} else if (A_ScreenWidth = 3840 and A_ScreenHeight = 2400) {
AddLog("4K 增高 (16:10 宽屏)")
} else {
AddLog("4K 及其它变种分辨率")
}
AdjustSize(2331, 1311)
}
; 尝试归类为1440p (2K) 及其变种
else if (A_ScreenWidth >= 2560 and A_ScreenHeight >= 1440) {
if (A_ScreenWidth = 2560 and A_ScreenHeight = 1440) {
AddLog("标准2K分辨率 (1440p)")
} else if (A_ScreenWidth = 3440 and A_ScreenHeight = 1440) {
AddLog("2K 加宽 (21:9 超宽屏)")
} else if (A_ScreenWidth = 5120 and A_ScreenHeight = 1440) {
AddLog("2K 超宽 (32:9 超级带鱼屏)")
} else if (A_ScreenWidth = 2560 and A_ScreenHeight = 1600) {
AddLog("2K 增高 (16:10 宽屏)")
} else {
AddLog("2K 及其它变种分辨率")
}
AdjustSize(2331, 1311)
}
; 尝试归类为1080p 及其变种
else if (A_ScreenWidth >= 1920 and A_ScreenHeight >= 1080) {
if (A_ScreenWidth = 1920 and A_ScreenHeight = 1080) {
AddLog("标准1080p分辨率")
} else if (A_ScreenWidth = 2560 and A_ScreenHeight = 1080) {
AddLog("1080p 加宽 (21:9 超宽屏)")
} else if (A_ScreenWidth = 3840 and A_ScreenHeight = 1080) {
AddLog("1080p 超宽 (32:9 超级带鱼屏)")
} else if (A_ScreenWidth = 1920 and A_ScreenHeight = 1200) {
AddLog("1080p 增高 (16:10 宽屏)")
} else {
AddLog("1080p 及其它变种分辨率")
}
}
else {
AddLog("不足1080p分辨率")
}
}
}
;endregion 初始化
;region 软件更新
;tag 统一检查更新
CheckForUpdate(isManualCheck) {
; 全局变量声明 - 确保这些在函数外部有定义
global currentVersion, usr, repo, latestObj, g_settings, g_numeric_settings
latestObj := Map( ; 初始化 latestObj Map
"version", "",
"change_notes", "无更新说明。",
"download_url", "",
"source", "",
"display_name", ""
)
local foundNewVersion := false
local sourceName := ""
local channelInfo := g_settings["isPreRelease"] ? "预发布" : "稳定"
; ==================== Mirror酱 更新检查 ====================
if g_settings["MirrorUpdate"] {
latestObj.source := "mirror"
latestObj.display_name := "Mirror酱"
sourceName := "Mirror酱"
AddLog(sourceName . " 更新检查:开始 (" . channelInfo . " 渠道)...")
if Trim(g_numeric_settings["MirrorCDK"]) = "" {
if (isManualCheck) {
MsgBox("Mirror酱 CDK 为空,无法检查更新。", sourceName . "检查更新错误", "IconX")
}
AddLog(sourceName . " 更新检查CDK为空")
return
}
local apiUrl := "https://mirrorchyan.com/api/resources/DoroHelper/latest?"
apiUrl .= "cdk=" . g_numeric_settings["MirrorCDK"]
if g_settings["isPreRelease"] {
apiUrl .= "&channel=beta"
}
local HttpRequest := ""
local ResponseStatus := 0
local ResponseBody := "" ; 用于存储原始字节流
try {
HttpRequest := ComObject("WinHttp.WinHttpRequest.5.1")
HttpRequest.Open("GET", apiUrl, false)
HttpRequest.SetRequestHeader("User-Agent", "DoroHelper-AHK-Script/" . currentVersion)
HttpRequest.Send()
ResponseStatus := HttpRequest.Status
if (ResponseStatus = 200) { ; 仅当成功时获取 ResponseBody
ResponseBody := HttpRequest.ResponseBody
}
} catch as e {
if (isManualCheck) {
MsgBox(sourceName . " API 请求失败: " . e.Message, sourceName . "检查更新错误", "IconX")
}
AddLog(sourceName . " API 请求失败: " . e.Message)
return
}
local ResponseTextForJson := "" ; 用于 JSON 解析的文本
if (ResponseStatus = 200) {
if (IsObject(ResponseBody) && (ComObjType(ResponseBody) & 0x2000)) { ; 检查是否为 SafeArray (VT_ARRAY)
try {
local dataPtr := 0
local lBound := 0
local uBound := 0
DllCall("OleAut32\SafeArrayGetLBound", "Ptr", ComObjValue(ResponseBody), "UInt", 1, "Int64*", &lBound)
DllCall("OleAut32\SafeArrayGetUBound", "Ptr", ComObjValue(ResponseBody), "UInt", 1, "Int64*", &uBound)
local actualSize := uBound - lBound + 1
if (actualSize > 0) {
DllCall("OleAut32\SafeArrayAccessData", "Ptr", ComObjValue(ResponseBody), "Ptr*", &dataPtr)
ResponseTextForJson := StrGet(dataPtr, actualSize, "UTF-8")
DllCall("OleAut32\SafeArrayUnaccessData", "Ptr", ComObjValue(ResponseBody))
AddLog(sourceName . " DEBUG: ResponseBody (SafeArray) converted to UTF-8 string using StrGet.")
} else {
AddLog(sourceName . " 警告: SafeArray 大小为0或无效")
ResponseTextForJson := "" ; 确保 ResponseTextForJson 有定义
}
} catch as e_sa {
AddLog(sourceName . " 错误: 处理 ResponseBody (SafeArray) 失败: " . e_sa.Message ". 类型: " . ComObjType(ResponseBody, "Name"))
ResponseTextForJson := HttpRequest.ResponseText ; 回退
AddLog(sourceName . " 警告: SafeArray 处理失败,回退到 HttpRequest.ResponseText可能存在编码问题")
}
} else if (IsObject(ResponseBody)) {
AddLog(sourceName . " 警告: ResponseBody 是对象但不是 SafeArray (类型: " . ComObjType(ResponseBody, "Name") . "),尝试 ADODB.Stream")
try {
local Stream := ComObject("ADODB.Stream")
Stream.Type := 1 ; adTypeBinary
Stream.Open()
Stream.Write(ResponseBody)
Stream.Position := 0
Stream.Type := 2 ; adTypeText
Stream.Charset := "utf-8"
ResponseTextForJson := Stream.ReadText()
Stream.Close()
AddLog(sourceName . " DEBUG: ResponseBody (non-SafeArray COM Object) converted to UTF-8 string using ADODB.Stream.")
} catch as e_adodb {
AddLog(sourceName . " 错误: ADODB.Stream 处理 ResponseBody (non-SafeArray COM Object) 失败: " . e_adodb.Message)
ResponseTextForJson := HttpRequest.ResponseText ; 最终回退
AddLog(sourceName . " 警告: ADODB.Stream 失败,回退到 HttpRequest.ResponseText可能存在编码问题")
}
} else {
AddLog(sourceName . " 警告: ResponseBody 不是 COM 对象,或请求未成功。将直接使用 HttpRequest.ResponseText")
ResponseTextForJson := HttpRequest.ResponseText
}
AddLog(sourceName . " API Response Status 200. Decoded ResponseTextForJson (first 500 chars): " . SubStr(ResponseTextForJson, 1, 500))
try {
local JsonData := Json.Load(&ResponseTextForJson)
if (!IsObject(JsonData)) {
if (isManualCheck) MsgBox(sourceName . " API 响应格式错误。", sourceName . "检查更新错误", "IconX")
AddLog(sourceName . " API 响应未能解析为JSON. ResponseText (first 200): " . SubStr(ResponseTextForJson, 1, 200))
return
}
local jsonDataCode := JsonData.Get("code", -1)
local potentialData := JsonData.Get("data", unset)
if (jsonDataCode != 0) {
local errorMsg := sourceName . " API 返回错误。 Code: " . jsonDataCode . "."
if (JsonData.Has("msg") && Trim(JsonData.msg) != "") {
errorMsg .= " 消息: " . JsonData.msg
} else {
errorMsg .= " (API未提供详细错误消息)"
}
if (isManualCheck) {
MsgBox(errorMsg, sourceName . "检查更新错误", "IconX")
}
AddLog(errorMsg)
return
}
if (!IsSet(potentialData) || !IsObject(potentialData)) {
local errorMsg := sourceName . " API 响应成功 (code 0),但 'data' 字段缺失或非对象类型。"
if (JsonData.Has("msg") && Trim(JsonData.msg) != "") {
errorMsg .= " API 消息: " . JsonData.msg
}
if (isManualCheck) {
MsgBox(errorMsg, sourceName . "检查更新错误", "IconX")
}
AddLog(errorMsg . " Type of 'data' retrieved: " . Type(potentialData))
return
}
local mirrorData := potentialData
latestObj.version := mirrorData.Get("version_name", "")
latestObj.change_notes := mirrorData.Get("release_note", "无更新说明")
latestObj.download_url := mirrorData.Get("url", "")
if latestObj.version = "" {
if (isManualCheck) {
MsgBox(sourceName . " API 响应中版本信息为空。", sourceName . "检查更新错误", "IconX")
}
AddLog(sourceName . " 更新检查API响应中版本信息为空")
return
}
AddLog(sourceName . " 更新检查:获取到版本 " . latestObj.version)
if (CompareVersionsSemVer(latestObj.version, currentVersion) > 0) {
foundNewVersion := true
AddLog(sourceName . " 版本比较:发现新版本")
} else {
AddLog(sourceName . " 版本比较:当前已是最新或更新")
}
} catch as e {
local errorDetails := "错误类型: " . Type(e) . ", 消息: " . e.Message
if e.HasProp("What") errorDetails .= "`n触发对象/操作: " . e.What
if e.HasProp("File") errorDetails .= "`n文件: " . e.File
if e.HasProp("Line") errorDetails .= "`n行号: " . e.Line
if (isManualCheck) MsgBox("处理 " . sourceName . " JSON 数据时发生内部错误: `n" . errorDetails, sourceName . "检查更新错误", "IconX")
AddLog(sourceName . " 更新检查处理JSON时发生内部错误: " . errorDetails)
AddLog(sourceName . " 相关的 ResponseTextForJson (前1000字符): " . SubStr(ResponseTextForJson, 1, 1000))
return
}
} else { ; ResponseStatus != 200
local errorResponseText := HttpRequest.ResponseText ; 尝试获取错误响应文本
local responseTextPreview := SubStr(errorResponseText, 1, 300)
if (isManualCheck) {
MsgBox(sourceName . " API 请求失败!`n状态码: " . ResponseStatus . "`n响应预览:`n" . responseTextPreview, sourceName . " API 错误", "IconX")
}
AddLog(sourceName . " API 请求失败!状态码: " . ResponseStatus . ", 响应预览: " . responseTextPreview)
return
}
; ==================== Github 更新检查 (如果 MirrorUpdate 未启用) ====================
} else {
latestObj.source := "github"
latestObj.display_name := "Github"
sourceName := "Github"
AddLog(sourceName . " 更新检查:开始 (" . channelInfo . " 渠道)...")
try {
local allReleases := Github.historicReleases(usr, repo) ; 获取所有版本
if !(allReleases is Array) || !allReleases.Length { ; AHK v2: is Array
if (isManualCheck) {
MsgBox("无法获取 Github 版本列表,请检查网络或仓库信息。", sourceName . "检查更新错误", "IconX")
}
AddLog(sourceName . " 更新检查:无法获取版本列表")
return
}
local targetRelease := ""
if g_settings["isPreRelease"] {
targetRelease := allReleases[1]
if !(IsObject(targetRelease) && (targetRelease.HasProp("version") || targetRelease.HasProp("tag_name"))) {
local errMsg := sourceName . " 更新检查:获取到的最新预发布 Release 对象无效或缺少版本信息。"
if (isManualCheck) MsgBox(errMsg, sourceName . "检查更新错误", "IconX")
AddLog(errMsg)
return
}
AddLog(sourceName . " 更新检查:预发布版优先,已选定 Release")
} else {
AddLog(sourceName . " 更新检查:稳定版优先,正在查找...")
for release_item in allReleases {
if !(IsObject(release_item) && (release_item.HasProp("version") || release_item.HasProp("tag_name"))) {
AddLog(sourceName . " DEBUG: 跳过一个无效的或缺少版本信息的 Release 对象")
continue
}
local current_release_version := release_item.HasProp("version") ? release_item.version : release_item.tag_name
if !(InStr(current_release_version, "beta") || InStr(current_release_version, "alpha") || InStr(current_release_version, "rc")) {
targetRelease := release_item
AddLog(sourceName . " 更新检查:找到稳定版 " . current_release_version)
break
}
}
if !IsObject(targetRelease) {
AddLog(sourceName . " 更新检查:未找到稳定版,将使用最新版本进行比较")
targetRelease := allReleases[1]
if !(IsObject(targetRelease) && (targetRelease.HasProp("version") || targetRelease.HasProp("tag_name"))) {
local errMsg := sourceName . " 更新检查:回退到的最新 Release 对象也无效或缺少版本信息。"
if (isManualCheck) MsgBox(errMsg, sourceName . "检查更新错误", "IconX")
AddLog(errMsg)
return
}
}
}
if !IsObject(targetRelease) {
local errMsg := sourceName . " 更新检查:最终未能确定有效的 targetRelease 对象。"
if (isManualCheck) MsgBox(errMsg, sourceName . "检查更新错误", "IconX")
AddLog(errMsg)
return
}
; 版本号
if (targetRelease.HasProp("version")) {
latestObj.version := targetRelease.version
} else if (targetRelease.HasProp("tag_name")) {
latestObj.version := targetRelease.tag_name
} else {
latestObj.version := ""
AddLog(sourceName . " 警告: Release 对象缺少 'version' 或 'tag_name' 属性")
}
; 更新内容
if (targetRelease.HasProp("change_notes")) {
latestObj.change_notes := targetRelease.change_notes
} else if (targetRelease.HasProp("body")) {
latestObj.change_notes := targetRelease.body
} else {
latestObj.change_notes := "无更新说明。"
}
if Trim(latestObj.change_notes) = "" {
latestObj.change_notes := "无更新说明。"
}
; 下载链接
latestObj.download_url := "" ; 初始化
if (targetRelease.HasProp("downloadURL") && Trim(targetRelease.downloadURL) != "") {
latestObj.download_url := targetRelease.downloadURL
AddLog(sourceName . " 找到下载链接 (from downloadURL): " . latestObj.download_url)
}
else if (targetRelease.HasProp("assets") && targetRelease.assets is Array && targetRelease.assets.Length > 0) { ; AHK v2: is Array
AddLog(sourceName . " DEBUG: (Fallback) 'downloadURL' not found. Checking 'assets'.")
for asset in targetRelease.assets {
if IsObject(asset) && asset.HasProp("name") && asset.HasProp("browser_download_url") {
AddLog(sourceName . " DEBUG: Checking asset: " . asset.name)
if (InStr(asset.name, "DoroHelper") && InStr(asset.name, ".exe")) {
latestObj.download_url := asset.browser_download_url
AddLog(sourceName . " 找到 .exe asset 下载链接 (from assets): " . latestObj.download_url)
break
}
}
}
if (latestObj.download_url = "")
AddLog(sourceName . " 警告: 在 'assets' 中未精确匹配到 'DoroHelper*.exe' 或 'assets' 结构不符")
}
else if (targetRelease.HasProp("downloadURLs") && targetRelease.downloadURLs is Array && targetRelease.downloadURLs.Length > 0 && Trim(targetRelease.downloadURLs[1]) != "") { ; AHK v2: is Array
latestObj.download_url := targetRelease.downloadURLs[1]
AddLog(sourceName . " 使用 downloadURLs[1] 作为下载链接 (Fallback): " . latestObj.download_url)
}
else if (targetRelease.HasProp("download_url") && Trim(targetRelease.download_url) != "") {
latestObj.download_url := targetRelease.download_url
AddLog(sourceName . " 使用顶层 download_url 属性作为下载链接 (Fallback): " . latestObj.download_url)
}
else {
AddLog(sourceName . " 警告: Release 对象未找到任何有效的下载链接属性 (已尝试: downloadURL, assets, downloadURLs, download_url)")
}
if latestObj.version = "" {
local errMsg := sourceName . " 更新检查:未能从选定的 Release 对象获取版本号。"
if (isManualCheck) MsgBox(errMsg, sourceName . "检查更新错误", "IconX")
AddLog(errMsg)
return
}
if latestObj.download_url = "" {
AddLog(sourceName . " 警告: 未能为版本 " . latestObj.version . " 找到有效的下载链接")
}
AddLog(sourceName . " 更新检查:获取到版本 " . latestObj.version . (latestObj.download_url ? "" : " (下载链接未找到)"))
if (CompareVersionsSemVer(latestObj.version, currentVersion) > 0) {
foundNewVersion := true
AddLog(sourceName . " 版本比较:发现新版本")
} else {
AddLog(sourceName . " 版本比较:当前已是最新或更新")
}
} catch as githubError {
if (isManualCheck) {
MsgBox("Github 检查更新失败: `n" . githubError.Message . (githubError.HasProp("Extra") ? "`nExtra: " . githubError.Extra : ""), sourceName . "检查更新错误", "IconX")
}
AddLog(sourceName . " 检查更新失败: " . githubError.Message . (githubError.HasProp("Extra") ? ". Extra: " . githubError.Extra : ""))
return
}
}
; ==================== 处理检查结果 ====================
if foundNewVersion {
AddLog(sourceName . " 更新检查:发现新版本 " . latestObj.version . ",准备提示用户")
if (latestObj.download_url = "" && isManualCheck) {
MsgBox("已检测到新版本 " . latestObj.version . ",但未能获取到下载链接。请检查 Github 库或手动下载。", "更新提示", "IconW")
}
local MyGui := Gui("+Resize", "更新提示 (" . latestObj.display_name . ")")
MyGui.SetFont("s10", "Microsoft YaHei UI")
MyGui.Add("Text", "w300 xm ym", "发现 DoroHelper 新版本 (" . channelInfo . " - " . latestObj.display_name . "):")
MyGui.Add("Text", "xp+10 yp+25 w300", "最新版本: " . latestObj.version)
MyGui.Add("Text", "xp yp+20 w300", "当前版本: " . currentVersion)
MyGui.Add("Text", "xp yp+25 w300", "更新内容:")
local notes_for_edit := latestObj.change_notes
notes_for_edit := StrReplace(notes_for_edit, "`r`n", "`n") ; 先统一为 \n
notes_for_edit := StrReplace(notes_for_edit, "`r", "`n") ; \r 也统一为 \n
notes_for_edit := StrReplace(notes_for_edit, "`n", "`r`n") ; 再统一为 Edit 控件的 \r\n
MyGui.Add("Edit", "w250 h200 ReadOnly VScroll Border", notes_for_edit)
MyGui.Add("Button", "xm+20 w100 h30 yp+220", "立即下载").OnEvent("Click", DownloadUpdate)
MyGui.Add("Button", "x+20 w100 h30", "稍后提醒").OnEvent("Click", (*) => MyGui.Destroy())
MyGui.Show("w320 h400 Center")
} else if latestObj.version != "" {
AddLog(sourceName . " 更新检查:当前已是最新版本 " . currentVersion)
if (isManualCheck) {
MsgBox("当前通道为:" . channelInfo . "通道 - " . latestObj.display_name . "`n最新版本为:" . latestObj.version "`n当前版本为:" . currentVersion "`n当前已是最新版本", "检查更新", "IconI")
}
} else {
AddLog((sourceName ? sourceName : "更新") . " 更新检查:未能获取到有效的版本信息或检查被中止")
if (isManualCheck) {
MsgBox("未能完成更新检查。请查看日志了解详情。", "检查更新", "IconX")
}
}
}
;tag 统一更新下载
DownloadUpdate(*) {
global latestObj
if !IsObject(latestObj) || !latestObj.Has("source") || latestObj.source = "" || !latestObj.Has("version") || latestObj.version = "" {
MsgBox("下载错误:更新信息不完整,无法开始下载。", "下载错误", "IconX")
AddLog("下载错误latestObj 信息不完整。 Source: " . latestObj.Get("source", "N/A") . ", Version: " . latestObj.Get("version", "N/A"))
return
}
downloadTempName := "DoroDownload.exe"
finalName := "DoroHelper-" latestObj.version ".exe"
downloadUrlToUse := latestObj.download_url
if downloadUrlToUse = "" {
MsgBox("错误:找不到有效的 " . latestObj.display_name . " 下载链接。", "下载错误", "IconX")
AddLog(latestObj.display_name . " 下载错误:下载链接为空")
return
}
AddLog(latestObj.display_name . " 下载:开始下载 " . downloadUrlToUse . "" . A_ScriptDir "\" finalName)
local downloadStatusCode := 0 ; 用于存储下载结果
try {
if latestObj.source == "github" {
ErrorLevel := 0
Github.Download(downloadUrlToUse, A_ScriptDir "\" downloadTempName)
downloadStatusCode := ErrorLevel
if downloadStatusCode != 0 {
throw Error("Github 下载失败 (ErrorLevel: " . downloadStatusCode . "). 检查 Github.Download 库的内部提示或网络")
}
} else if latestObj.source == "mirror" {
ErrorLevel := 0
Download downloadUrlToUse, A_ScriptDir "\" downloadTempName
downloadStatusCode := ErrorLevel
if downloadStatusCode != 0 {
throw Error("Mirror酱下载失败 (错误代码: " . downloadStatusCode . ")")
}
} else {
throw Error("未知的下载源: " . latestObj.source)
}
FileMove A_ScriptDir "\" downloadTempName, A_ScriptDir "\" finalName, 1
MsgBox("新版本已通过 " . latestObj.display_name . " 下载至当前目录: `n" . A_ScriptDir "\" finalName, "下载完成")
AddLog(latestObj.display_name . " 下载:成功下载并保存为 " . finalName)
ExitApp
} catch as downloadError {
MsgBox(latestObj.display_name . " 下载失败: `n" . downloadError.Message, "下载错误", "IconX")
AddLog(latestObj.display_name . " 下载失败: " . downloadError.Message)
if FileExist(A_ScriptDir "\" downloadTempName) {
try {
FileDelete(A_ScriptDir "\" downloadTempName)
} catch {
; 忽略删除临时文件失败
}
}
}
}
;tag 点击检查更新
ClickOnCheckForUpdate(*) {
AddLog("=== 更新检查启动 (手动) ===")
CheckForUpdate(true)
}
;tag 版本比较
CompareVersionsSemVer(v1, v2) {
_IsNumericString(str) => RegExMatch(str, "^\d+$")
v1 := RegExReplace(v1, "^v", "")
v2 := RegExReplace(v2, "^v", "")
v1Parts := StrSplit(v1, "+", , 2)
v2Parts := StrSplit(v2, "+", , 2)
v1Base := v1Parts[1]
v2Base := v2Parts[1]
v1CoreParts := StrSplit(v1Base, "-", , 2)
v2CoreParts := StrSplit(v2Base, "-", , 2)
v1Core := v1CoreParts[1]
v2Core := v2CoreParts[1]
v1Pre := v1CoreParts.Length > 1 ? v1CoreParts[2] : ""
v2Pre := v2CoreParts.Length > 1 ? v2CoreParts[2] : ""
v1CoreNums := StrSplit(v1Core, ".")
v2CoreNums := StrSplit(v2Core, ".")
loop 3 {
local seg1Str := A_Index <= v1CoreNums.Length ? Trim(v1CoreNums[A_Index]) : "0"
local seg2Str := A_Index <= v2CoreNums.Length ? Trim(v2CoreNums[A_Index]) : "0"
if !_IsNumericString(seg1Str) {
seg1Str := "0"
}
if !_IsNumericString(seg2Str) {
seg2Str := "0"
}
num1 := Integer(seg1Str)
num2 := Integer(seg2Str)
if (num1 > num2) {
return 1
}
if (num1 < num2) {
return -1
}
}
hasV1Pre := v1Pre != ""
hasV2Pre := v2Pre != ""
if (hasV1Pre && !hasV2Pre) {
return -1
}
if (!hasV1Pre && hasV2Pre) {
return 1
}
if (!hasV1Pre && !hasV2Pre) {
return 0
}
v1PreSegments := StrSplit(v1Pre, ".")
v2PreSegments := StrSplit(v2Pre, ".")
maxLen := Max(v1PreSegments.Length, v2PreSegments.Length)
loop maxLen {
if (A_Index > v1PreSegments.Length) {
return -1
}
if (A_Index > v2PreSegments.Length) {
return 1
}
seg1 := Trim(v1PreSegments[A_Index])
seg2 := Trim(v2PreSegments[A_Index])
isNum1 := _IsNumericString(seg1)
isNum2 := _IsNumericString(seg2)
if (isNum1 && isNum2) {
numSeg1 := Integer(seg1)
numSeg2 := Integer(seg2)
if (numSeg1 > numSeg2)
return 1
if (numSeg1 < numSeg2)
return -1
} else if (!isNum1 && !isNum2) {
; 强制进行字符串比较
compareResult := StrCompare(seg1, seg2)
if (compareResult > 0)
return 1
if (compareResult < 0)
return -1
} else {
if (isNum1)
return -1
if (isNum2)
return 1
}
}
return 0
}
;endregion 软件更新
;region 消息辅助函数
MsgSponsor(*) {
Run("https://github.com/1204244136/DoroHelper?tab=readme-ov-file#%E6%94%AF%E6%8C%81%E5%92%8C%E9%BC%93%E5%8A%B1")
}
ClickOnHelp(*) {
msgbox "
(
1. **16:9** 1080p
- 1080p1080pctrl+3nikke
- 2k4kctrl+3nikke1
<!-- 2. ~~使**** **16:9**使~~
- -->
2. 使****
-
- 使
-
- 60
3.
-
- HDR
4. ****----使
5. **** DoroHelper
)"
}
;endregion 消息辅助函数
;region 数据辅助函数
;tag 写入数据
WriteSettings(*) {
global g_settings, g_numeric_settings
;从 g_settings Map 写入开关设置
for key, value in g_settings {
IniWrite(value, "settings.ini", "Toggles", key)
}
for key, value in g_numeric_settings {
IniWrite(value, "settings.ini", "NumericSettings", key)
}
}
;tag 读入数据
LoadSettings() {
global g_settings, g_numeric_settings
default_settings := g_settings.Clone()
;从 Map 加载开关设置
for key, defaultValue in default_settings {
readValue := IniRead("settings.ini", "Toggles", key, defaultValue)
g_settings[key] := readValue
}
default_numeric_settings := g_numeric_settings.Clone() ; 保留一份默认数值设置
for key, defaultValue in default_numeric_settings {
; 不再检查是否为数字,直接读取并赋值
readValue := IniRead("settings.ini", "NumericSettings", key, defaultValue)
g_numeric_settings[key] := readValue
}
}
;tag 改变滑条数据
ChangeSlider(settingName, CtrlObj) {
global g_numeric_settings, toleranceDisplayEditControl
; 将滑动条的整数值除以100以获得1.00到2.00之间的浮点数
local actualValue := CtrlObj.Value / 100.0
g_numeric_settings[settingName] := actualValue
; 使用 Format 函数将浮点数格式化为小数点后两位
local formattedValue := Format("{:.2f}", actualValue)
toleranceDisplayEditControl.Value := formattedValue
}
;tag 保存数据
SaveSettings(*) {
WriteSettings()
MsgBox "设置已保存!"
AddLog("设置已保存!", true)
}
IsCheckedToString(foo) {
if foo
return "Checked"
else
return ""
}
/**
* 添加一个与 g_settings Map 关联的复选框到指定的 GUI 对象.
* @param guiObj Gui - 要添加控件的 GUI 对象.
* @param settingKey String - 在 g_settings Map 中对应的键名.
* @param displayText String - 复选框旁边显示的文本标签.
* @param options String - (可选) AutoHotkey GUI 布局选项字符串 (例如 "R1.2 xs+15").
*/
AddCheckboxSetting(guiObj, settingKey, displayText, options := "") {
global g_settings ;确保能访问全局 Map 和处理函数
;检查 settingKey 是否存在于 g_settings 中
if !g_settings.Has(settingKey) {
MsgBox("错误: Setting key '" settingKey "' 在 g_settings 中未定义!", "添加控件错误", "IconX")
return ;或者抛出错误
}
;构建选项字符串,确保 Checked/空字符串 在选项之后,文本之前
initialState := IsCheckedToString(g_settings[settingKey])
fullOptions := options (options ? " " : "") initialState ;如果有 options加空格分隔
;添加复选框控件,并将 displayText 作为第三个参数
cbCtrl := guiObj.Add("Checkbox", fullOptions, displayText)
;绑定 Click 事件,使用胖箭头函数捕获当前的 settingKey
cbCtrl.OnEvent("Click", (guiCtrl, eventInfo) => ToggleSetting(settingKey, guiCtrl, eventInfo))
;返回创建的控件对象 (可选,如果需要进一步操作)
return cbCtrl
}
;通用函数,用于切换 g_settings Map 中的设置值
ToggleSetting(settingKey, guiCtrl, *) {
global g_settings
;切换值 (0 变 1, 1 变 0)
g_settings[settingKey] := 1 - g_settings[settingKey]
;可选: 如果需要,可以在这里添加日志记录
;ToolTip("切换 " settingKey " 为 " g_settings[settingKey])
}
;切换数字
ChangeNum(settingKey, GUICtrl, *) {
global g_numeric_settings
g_numeric_settings[settingKey] := GUICtrl.Value
}
;endregion 数据辅助函数
;region 坐标辅助函数
;tag 点击
UserClick(sX, sY, k) {
uX := Round(sX * k) ;计算转换后的坐标
uY := Round(sY * k)
CoordMode "Mouse", "Client"
Send "{Click " uX " " uY "}" ;点击转换后的坐标
}
;tag 按住
UserPress(sX, sY, k) {
uX := Round(sX * k) ;计算转换后的坐标
uY := Round(sY * k)
CoordMode "Mouse", "Client"
Send "{Click " uX " " uY "}" ;点击转换后的坐标
}
;tag 移动
UserMove(sX, sY, k) {
uX := Round(sX * k) ;计算转换后的坐标
uY := Round(sY * k)
Send "{Click " uX " " uY " " 0 "}" ;点击转换后的坐标
}
;tag 颜色判断
IsSimilarColor(targetColor, color) {
tr := Format("{:d}", "0x" . substr(targetColor, 3, 2))
tg := Format("{:d}", "0x" . substr(targetColor, 5, 2))
tb := Format("{:d}", "0x" . substr(targetColor, 7, 2))
pr := Format("{:d}", "0x" . substr(color, 3, 2))
pg := Format("{:d}", "0x" . substr(color, 5, 2))
pb := Format("{:d}", "0x" . substr(color, 7, 2))
distance := sqrt((tr - pr) ** 2 + (tg - pg) ** 2 + (tb - pb) ** 2)
if (distance < 15)
return true
return false
}
;tag 颜色
UserCheckColor(sX, sY, sC, k) {
loop sX.Length {
uX := Round(sX[A_Index] * k)
uY := Round(sY[A_Index] * k)
uC := PixelGetColor(uX, uY)
if (!IsSimilarColor(uC, sC[A_Index]))
return 0
}
return 1
}
;tag 画面调整
AdjustSize(TargetX, TargetY) {
WinGetPos(&X, &Y, &Width, &Height, nikkeID)
WinGetClientPos(&ClientX, &ClientY, &ClientWidth, &ClientHeight, nikkeID)
; 计算非工作区(标题栏和边框)的高度和宽度
NonClientHeight := Height - ClientHeight
NonClientWidth := Width - ClientWidth
NewClientX := (A_ScreenWidth / 2) - (NikkeWP / 2)
NewClientY := (A_ScreenHeight / 2) - (NikkeHP / 2)
NewClientWidth := TargetX
NewClientHeight := TargetY
; 计算新的窗口整体大小,以适应新的工作区大小
NewWindowX := NewClientX
NewWindowY := NewClientY
NewWindowWidth := NewClientWidth + NonClientWidth
NewWindowHeight := NewClientHeight + NonClientHeight
; 使用 WinMove 移动和调整窗口大小
WinMove 0, 0, NewWindowWidth, NewWindowHeight, nikkeID
}
;endregion 坐标辅助函数
;region 日志辅助函数
;tag 添加日志
AddLog(text, forceOutput := false) { ;默认参数设为false
if (!IsObject(LogBox) || !LogBox.Hwnd) {
return
}
static lastText := "" ;静态变量保存上一条内容
global LogBox
;如果内容与上一条相同且不强制输出,则跳过
if (text = lastText && !forceOutput)
return
lastText := text ;保存当前内容供下次比较
timestamp := FormatTime(, "HH:mm:ss")
LogBox.Value .= timestamp " - " text "`r`n"
SendMessage(0x0115, 7, 0, LogBox) ;自动滚动到底部
}
;tag 日志的时间戳转换
TimeToSeconds(timeStr) {
;期望 "HH:mm:ss" 格式
parts := StrSplit(timeStr, ":")
if (parts.Length != 3) {
return -1 ;格式错误
}
;确保部分是数字
if (!IsInteger(parts[1]) || !IsInteger(parts[2]) || !IsInteger(parts[3])) {
return -1 ;格式错误
}
hours := parts[1] + 0 ;强制转换为数字
minutes := parts[2] + 0
seconds := parts[3] + 0
;简单的验证范围(不严格)
if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59 || seconds < 0 || seconds > 59) {
return -1 ;无效时间
}
return hours * 3600 + minutes * 60 + seconds
}
;tag 读取日志框内容 根据 HH:mm:ss 时间戳推算跨度,输出到日志框
CalculateAndShowSpan(ExitReason := "", ExitCode := "") {
global outputText
local logContent := LogBox.Value
local lines := StrSplit(logContent, "`n") ;按换行符分割
local timestamps := []
local match := ""
;提取所有时间戳(格式 HH:mm:ss
for line in lines {
if (RegExMatch(line, "^\d{2}:\d{2}:\d{2}(?=\s*-\s*)", &match)) {
timestamps.Push(match[])
}
}
;直接取最早正式运行时的第5个和最晚最后1个时间戳日志已按时间顺序追加
earliestTimeStr := timestamps[5]
latestTimeStr := timestamps[timestamps.Length]
;转换为秒数
earliestSeconds := TimeToSeconds(earliestTimeStr)
latestSeconds := TimeToSeconds(latestTimeStr)
;检查转换是否有效
if (earliestSeconds = -1 || latestSeconds = -1) {
AddLog("推算跨度失败:日志时间格式错误")
return
}
;处理跨午夜情况(如 23:59:59 → 00:00:01
if (latestSeconds < earliestSeconds) {
latestSeconds += 24 * 3600 ;加上一天的秒数86400
}
;计算总时间差(秒)
spanSeconds := latestSeconds - earliestSeconds
spanMinutes := Floor(spanSeconds / 60)
remainingSeconds := Mod(spanSeconds, 60)
;格式化输出
outputText := "已帮你节省时间: "
if (spanMinutes > 0) {
outputText .= spanMinutes " 分 "
}
outputText .= remainingSeconds " 秒"
;添加到日志
AddLog(outputText)
}
;endregion 日志辅助函数
;region 流程辅助函数
;tag 点左下角的小房子的对应位置的右边(不返回)
Confirm() {
UserClick(474, 2028, scrRatio)
Sleep 500
}
;tag 按Esc
GoBack() {
AddLog("返回")
Send "{Esc}"
Sleep 1000
}
;tag 结算招募
Recruit() {
AddLog("结算招募")
while !(ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.944 * NikkeW . " ", NikkeY + 0.011 * NikkeH . " ", NikkeX + 0.944 * NikkeW + 0.015 * NikkeW . " ", NikkeY + 0.011 * NikkeH + 0.029 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("SKIP的箭头"), , 0, , , , , TrueRatio, TrueRatio)) { ;如果没找到SKIP就一直点左下角加速动画
Confirm
}
FindText().Click(X, Y, "L") ;找到了就点
Sleep 1000
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.421 * NikkeW . " ", NikkeY + 0.889 * NikkeH . " ", NikkeX + 0.421 * NikkeW + 0.028 * NikkeW . " ", NikkeY + 0.889 * NikkeH + 0.027 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("确认"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
}
;tag 点掉推销
RefuseSale() {
sleep 3000
AddLog("尝试关闭可能的推销页面")
Confirm
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.518 * NikkeW . " ", NikkeY + 0.609 * NikkeH . " ", NikkeX + 0.518 * NikkeW + 0.022 * NikkeW . " ", NikkeY + 0.609 * NikkeH + 0.033 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
sleep 1000
}
;tag 判断是否开启自动
CheckAuto() {
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.005 * NikkeW . " ", NikkeY + 0.012 * NikkeH . " ", NikkeX + 0.005 * NikkeW + 0.073 * NikkeW . " ", NikkeY + 0.012 * NikkeH + 0.043 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("AUTO的图标"), , , , , , , TrueRatio, TrueRatio)) {
Send "{Tab}"
}
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.005 * NikkeW . " ", NikkeY + 0.012 * NikkeH . " ", NikkeX + 0.005 * NikkeW + 0.073 * NikkeW . " ", NikkeY + 0.012 * NikkeH + 0.043 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("射击的图标"), , , , , , , TrueRatio, TrueRatio)) {
Send "{LShift}"
}
}
;tag 进入战斗
EnterToBattle() {
global BattleActive
AddLog("尝试进入战斗")
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.506 * NikkeW . " ", NikkeY + 0.826 * NikkeH . " ", NikkeX + 0.506 * NikkeW + 0.145 * NikkeW . " ", NikkeY + 0.826 * NikkeH + 0.065 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("快速战斗的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击快速战斗")
FindText().Click(X + 50 * TrueRatio, Y, "L")
Sleep 500
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.553 * NikkeW . " ", NikkeY + 0.683 * NikkeH . " ", NikkeX + 0.553 * NikkeW + 0.036 * NikkeW . " ", NikkeY + 0.683 * NikkeH + 0.040 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("MAX"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("进行战斗的进"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
}
else if (ok := FindText(&X := "wait", &Y := 1, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("进入战斗的进"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击进入战斗")
BattleActive := 1
FindText().Click(X + 50 * TrueRatio, Y, "L")
}
else {
BattleActive := 0
AddLog("无法战斗")
GoBack
}
}
;tag 战斗结算
BattleSettlement(Screenshot := false) {
global Victory
if (BattleActive = 0) {
AddLog("由于无法战斗,跳过战斗结算")
return
}
checkend := 0
checkred := 0
AddLog("等待战斗结算")
while true {
; 检测自动战斗和爆裂
if (A_Index = 20) {
CheckAuto
}
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("TAB的图标"), , 0, , , , , TrueRatio, TrueRatio)) {
checkend := checkend + 1
;AddLog("TAB已命中共" checkend "次")
}
else if (ok := FindText(&X, &Y, NikkeX + 0.012 * NikkeW . " ", NikkeY + 0.921 * NikkeH . " ", NikkeX + 0.012 * NikkeW + 0.036 * NikkeW . " ", NikkeY + 0.921 * NikkeH + 0.072 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("重播的图标"), , , , , , , TrueRatio, TrueRatio)) {
checkend := checkend + 1
;AddLog("重播的图标已命中,共" checkend "次")
}
else if (ok := FindText(&X, &Y, NikkeX + 0.453 * NikkeW . " ", NikkeY + 0.866 * NikkeH . " ", NikkeX + 0.453 * NikkeW + 0.094 * NikkeW . " ", NikkeY + 0.866 * NikkeH + 0.056 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("点击"), , , , , , , TrueRatio, TrueRatio)) {
checkend := checkend + 1
;AddLog("点击已命中,共" checkend "次")
}
else {
;AddLog("均未命中,重新计数")
checkend := 0
}
;需要连续三次命中代表战斗结束
if (checkend = 3) {
break
}
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("红圈的上边缘黄边"), , 0, , , , , TrueRatio, TrueRatio)) or (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("红圈的下边缘黄边"), , 0, , , , , TrueRatio, TrueRatio)) {
checkred := checkred + 1
if checkred = 3 {
AddLog("检测到红圈,尝试打红圈")
loop 20 {
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("红圈的上边缘黄边"), , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y + 30 * TrueRatio, 0)
Click "Down"
Sleep 700
Click "Up"
}
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("红圈的下边缘黄边"), , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y - 30 * TrueRatio, 0)
Click "Down"
Sleep 700
Click "Up"
}
}
}
}
else {
checkred := 0
}
}
;是否需要截图
if Screenshot {
TimeString := FormatTime(, "yyyyMMdd_HHmmss")
FindText().SavePic(A_ScriptDir "\截图\" TimeString ".jpg", NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, ScreenShot := 1)
}
;有编队代表输了点Esc
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("编队的图标"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("战斗失败!尝试返回")
GoBack
Sleep 1000
return False
}
;如果有下一关,就点下一关(爬塔的情况)
else if (ok := FindText(&X, &Y, NikkeX + 0.887 * NikkeW . " ", NikkeY + 0.909 * NikkeH . " ", NikkeX + 0.887 * NikkeW + 0.105 * NikkeW . " ", NikkeY + 0.909 * NikkeH + 0.081 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("下一关卡的图标"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("战斗成功!尝试进入下一关")
Victory := Victory + 1
if Victory > 1 {
AddLog("共胜利" Victory "次")
}
FindText().Click(X, Y + 20 * TrueRatio, "L")
Sleep 5000
BattleSettlement
}
;没有编队也没有下一关就点Esc普通情况或者爬塔次数用完了
else {
AddLog("战斗结束!")
GoBack
Sleep 1000
return True
}
;递归结束时清零
Victory := 0
}
;tag 返回大厅
BackToHall() {
AddLog("返回大厅")
while !(ok := FindText(&X, &Y, NikkeX + 0.658 * NikkeW . " ", NikkeY + 0.639 * NikkeH . " ", NikkeX + 0.658 * NikkeW + 0.040 * NikkeW . " ", NikkeY + 0.639 * NikkeH + 0.066 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("方舟的眼睛"), , 0, , , , , TrueRatio, TrueRatio)) {
; 点左下角的小房子的位置
UserClick(333, 2041, scrRatio)
Sleep 500
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 500
}
}
if !WinActive(nikkeID) {
MsgBox "窗口未聚焦,程序已中止"
Pause
}
Sleep 1000
}
;tag 进入方舟
EnterToArk() {
AddLog("尝试进入方舟")
while True {
Sleep 1000
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.658 * NikkeW . " ", NikkeY + 0.639 * NikkeH . " ", NikkeX + 0.658 * NikkeW + 0.040 * NikkeW . " ", NikkeY + 0.639 * NikkeH + 0.066 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("方舟的眼睛"), , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X + 50 * TrueRatio, Y, "L") ;找得到就尝试进入
}
if (ok := FindText(&X := "wait", &Y := 5, NikkeX + 0.005 * NikkeW . " ", NikkeY + 0.010 * NikkeH . " ", NikkeX + 0.005 * NikkeW + 0.052 * NikkeW . " ", NikkeY + 0.010 * NikkeH + 0.058 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("左上角的方舟文本"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("已进入方舟")
break
}
else BackToHall() ;找不到就先返回大厅
}
Sleep 2000
}
;endregion 流程辅助函数
;region 登录
Login() {
check := 0
while True {
AddLog("正在登录")
if (check = 3) {
break
}
if (ok := FindText(&X, &Y, NikkeX + 0.658 * NikkeW . " ", NikkeY + 0.639 * NikkeH . " ", NikkeX + 0.658 * NikkeW + 0.040 * NikkeW . " ", NikkeY + 0.639 * NikkeH + 0.066 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("方舟的眼睛"), , 0, , , , , TrueRatio, TrueRatio)) {
check := check + 1
continue
}
else check := 0
;点击蓝色的确认按钮(如果出现更新提示等消息)
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("确认的白色勾"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("发现更新,尝试点击")
FindText().Click(X + 50 * TrueRatio, Y, "L")
Sleep 1000
}
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("灰色空心方框"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("发现公告,尝试勾选一周内不再提示")
FindText().Click(X, Y, "L")
}
if (ok := FindText(&X, &Y, NikkeX + 0.534 * NikkeW . " ", NikkeY + 0.906 * NikkeH . " ", NikkeX + 0.534 * NikkeW + 0.114 * NikkeW . " ", NikkeY + 0.906 * NikkeH + 0.062 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("勾"), , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
Confirm
Sleep 500
if !WinActive(nikkeID) {
MsgBox "窗口未聚焦,程序已中止"
Pause
}
}
AddLog("已处于大厅页面,登录成功")
}
;endregion 登录
;region 商店
;tag 付费商店
CashShop() {
BackToHall
AddLog("===付费商店任务开始===")
AddLog("寻找付费商店")
if (ok := FindText(&X, &Y, NikkeX + 0.329 * NikkeW . " ", NikkeY + 0.583 * NikkeH . " ", NikkeX + 0.329 * NikkeW + 0.012 * NikkeW . " ", NikkeY + 0.583 * NikkeH + 0.022 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击付费商店")
FindText().Click(X, Y, "L")
Sleep 1000
if (ok := FindText(&X := "wait", &Y := 2, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("灰色空心方框"), , , , , , 3, TrueRatio, TrueRatio)) {
AddLog("发现日服特供的框")
FindText().Click(X, Y, "L")
Sleep 1000
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("点击确认")
FindText().Click(X, Y, "L")
}
}
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.182 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.330 * NikkeW . " ", NikkeY + 0.182 * NikkeH + 0.075 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("礼物的图标"), , , , , , , TrueRatio, TrueRatio)) {
Sleep 1000
AddLog("点击一级页面")
FindText().Click(X + 20 * TrueRatio, Y + 20 * TrueRatio, "L")
Sleep 1000
}
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.010 * NikkeW . " ", NikkeY + 0.259 * NikkeH . " ", NikkeX + 0.010 * NikkeW + 0.351 * NikkeW . " ", NikkeY + 0.259 * NikkeH + 0.051 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击二级页面")
FindText().Click(X - 20 * TrueRatio, Y + 20 * TrueRatio, "L")
Sleep 1000
if (ok := FindText(&X := "wait", &Y := 2, NikkeX + 0.089 * NikkeW . " ", NikkeY + 0.334 * NikkeH . " ", NikkeX + 0.089 * NikkeW + 0.019 * NikkeW . " ", NikkeY + 0.334 * NikkeH + 0.034 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击三级页面")
FindText().Click(X - 20 * TrueRatio, Y + 20 * TrueRatio, "L")
Sleep 1000
Confirm
}
}
}
else {
AddLog("付费商店已领取!")
AddLog("===付费商店任务结束===")
return
}
AddLog("===付费商店任务结束===")
BackToHall
}
;tag 普通商店
NormalShop() {
AddLog("===普通商店任务开始===")
BackToHall
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.236 * NikkeW . " ", NikkeY + 0.633 * NikkeH . " ", NikkeX + 0.236 * NikkeW + 0.118 * NikkeW . " ", NikkeY + 0.633 * NikkeH + 0.103 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("商店的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击商店图标")
FindText().Click(X + 20 * TrueRatio, Y - 20 * TrueRatio, "L")
}
else {
MsgBox("商店图标未找到")
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.005 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.065 * NikkeW . " ", NikkeY + 0.005 * NikkeH + 0.055 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("已进入百货商店")
}
Sleep 1000
; 定义所有可购买物品的信息 (使用 Map)
PurchaseItems := Map(
"免费商品", {
Text: FindText().PicLib("红点"),
Setting: true,
Tolerance: 0.4 * PicTolerance },
"芯尘盒", {
Text: FindText().PicLib("芯尘盒"),
Setting: g_settings["NormalShopDust"],
Tolerance: 0.3 * PicTolerance },
"简介个性化礼包", {
Text: FindText().PicLib("简介"),
Setting: g_settings["NormalShopPackage"],
Tolerance: 0.3 * PicTolerance }
)
loop 2 {
for Name, item in PurchaseItems {
if (!item.Setting) {
continue ; 如果设置未开启,则跳过此物品
}
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.057 * NikkeW . " ", NikkeY + 0.483 * NikkeH . " ", NikkeX + 0.057 * NikkeW + 0.938 * NikkeW . " ", NikkeY + 0.483 * NikkeH + 0.050 * NikkeH . " ", item.Tolerance, item.Tolerance, item.Text, , , , , , , TrueRatio, TrueRatio)) {
loop ok.Length {
FindText().Click(ok[A_Index].x, ok[A_Index].y, "L")
Sleep 1000
if name = "芯尘盒" {
if (ok0 := FindText(&X := "wait", &Y := 2, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("信用点的图标"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("检测到信用点支付选项")
}
else {
AddLog("未检测到信用点支付选项")
Confirm
Sleep 1000
continue
}
}
if (ok1 := FindText(&X := "wait", &Y := 2, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("购买" . Name)
FindText().Click(X, Y, "L")
Sleep 500
}
while !(ok2 := FindText(&X := "wait", &Y := 3, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.005 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.065 * NikkeW . " ", NikkeY + 0.005 * NikkeH + 0.055 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
}
} else {
AddLog(Name . "未找到,跳过购买")
}
}
while (ok := FindText(&X, &Y, NikkeX + 0.173 * NikkeW . " ", NikkeY + 0.423 * NikkeH . " ", NikkeX + 0.173 * NikkeW + 0.034 * NikkeW . " ", NikkeY + 0.423 * NikkeH + 0.050 * NikkeH . " ", 0.25 * PicTolerance, 0.25 * PicTolerance, FindText().PicLib("FREE"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X - 50 * TrueRatio, Y + 30 * TrueRatio, "L")
if (ok1 := FindText(&X := "wait", &Y := 1, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
AddLog("刷新成功")
}
} else {
AddLog("没有免费刷新次数了,跳过刷新")
break ; 退出外层 loop 2 循环,因为没有免费刷新了
}
Sleep 3000
}
AddLog("===普通商店任务结束===")
}
;tag 竞技场商店
ArenaShop() {
AddLog("===竞技场商店任务开始===")
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.355 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.041 * NikkeW . " ", NikkeY + 0.355 * NikkeH + 0.555 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("竞技场商店的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("进入竞技场商店")
FindText().Click(X, Y, "L")
Sleep 1000
}
; 定义所有可购买物品的信息 (使用 Map)
PurchaseItems := Map(
"燃烧代码手册", {
Text: FindText().PicLib("燃烧代码的图标"),
Setting: g_settings["BookFire"],
Tolerance: 0.2 * PicTolerance },
"水冷代码手册", {
Text: FindText().PicLib("水冷代码的图标"),
Setting: g_settings["BookWater"],
Tolerance: 0.2 * PicTolerance },
"风压代码手册", {
Text: FindText().PicLib("风压代码的图标"),
Setting: g_settings["BookWind"],
Tolerance: 0.2 * PicTolerance },
"电击代码手册", {
Text: FindText().PicLib("电击代码的图标"),
Setting: g_settings["BookElec"],
Tolerance: 0.2 * PicTolerance },
"铁甲代码手册", {
Text: FindText().PicLib("铁甲代码的图标"),
Setting: g_settings["BookIron"],
Tolerance: 0.2 * PicTolerance },
"代码手册宝箱", {
Text: FindText().PicLib("代码手册宝箱的图标"),
Setting: g_settings["BookBox"],
Tolerance: 0.3 * PicTolerance },
"简介个性化礼包", {
Text: FindText().PicLib("简介"),
Setting: g_settings["ArenaShopPackage"],
Tolerance: 0.3 * PicTolerance },
"公司武器熔炉", {
Text: FindText().PicLib("熔炉"),
Setting: g_settings["ArenaShopFurnace"],
Tolerance: 0.3 * PicTolerance }
)
; 遍历并购买所有物品
for Name, item in PurchaseItems {
if (!item.Setting) {
continue ; 如果设置未开启,则跳过此物品
}
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.055 * NikkeW . " ", NikkeY + 0.475 * NikkeH . " ", NikkeX + 0.055 * NikkeW + 0.509 * NikkeW . " ", NikkeY + 0.475 * NikkeH + 0.253 * NikkeH . " ", item.Tolerance, item.Tolerance, item.Text, , , , , , , TrueRatio, TrueRatio)) {
; 手册要根据找到个数多次执行
loop ok.Length {
FindText().Click(ok[A_Index].x, ok[A_Index].y, "L")
if (ok1 := FindText(&X := "wait", &Y := 2, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("购买" . Name)
FindText().Click(X, Y, "L")
Sleep 1000
while !(ok2 := FindText(&X := "wait", &Y := 3, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.005 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.065 * NikkeW . " ", NikkeY + 0.005 * NikkeH + 0.055 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
}
}
}
else {
AddLog(Name . "未找到,跳过购买")
}
}
AddLog("===竞技场商店任务结束===")
}
;tag 废铁商店
ScrapShop() {
AddLog("===废铁商店任务开始===")
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.355 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.041 * NikkeW . " ", NikkeY + 0.355 * NikkeH + 0.555 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("废铁商店的图标"), , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
; 定义所有可购买物品的信息 (使用 Map)
PurchaseItems := Map(
"珠宝", {
Text: "|<珠宝>*150$39.00k01k7wb00C0zis3zzrxz0zzzCDz7zztnzww07CTs7U0zzb0Tzzzcs1zzrzzw7zwCTzU1k1nzw3zsC3w0zzVkTk7zwDbz03r7xzw0Cwzyvk3rb7bQTzz0Mt3zzs070TzzU",
Setting: g_settings["ScrapShopGem"],
Tolerance: 0.1 * PicTolerance },
"好感券", {
Text: FindText().PicLib("黄色的礼物图标"),
Setting: g_settings["ScrapShopVoucher"],
Tolerance: 0.2 * PicTolerance },
"养成资源", {
Text: "|<资源的图标>*170$17.1zU7zUS7VnnWTtgTnMCqk7hUTP0yq1xb3i7ZtDzl7y73k1U01zzU",
Setting: g_settings["ScrapShopResources"],
Tolerance: 0.2 * PicTolerance },
"信用点", {
Text: "|<信用点的图标>*125$31.zXzs0TUzw0DUDz0703zk3U1zw1k3zy0w3zzUT3zzsDnzzy7ztzzXzw0Tlzk07wzw07zTy0zzzz2Djzz0bbzzWNlzzlaMzzsl4TzwQkTzz7ADzzVm7zzsM3zzyA1wzzi7xzzzzxzzzzszzzzsPzzzsB",
Setting: g_settings["ScrapShopResources"],
Tolerance: 0.1 * PicTolerance }
)
; 遍历并购买所有物品
for Name, item in PurchaseItems {
if (!item.Setting) {
continue ; 如果设置未开启,则跳过此物品
}
if (ok := FindText(&X, &Y, NikkeX + 0.054 * NikkeW . " ", NikkeY + 0.485 * NikkeH . " ", NikkeX + 0.054 * NikkeW + 0.939 * NikkeW . " ", NikkeY + 0.485 * NikkeH + 0.419 * NikkeH . " ", item.Tolerance, item.Tolerance, item.Text, , , , , , , TrueRatio, TrueRatio)) {
; 根据找到的同类图标数量进行循环购买
loop ok.Length {
FindText().Click(ok[A_Index].x, ok[A_Index].y, "L")
if (okMax := FindText(&X := "wait", &Y := 2, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("MAX"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("点击max")
FindText().Click(X, Y, "L")
}
if (ok1 := FindText(&X := "wait", &Y := 2, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("购买" . Name)
FindText().Click(X, Y, "L")
Sleep 1000
while !(ok2 := FindText(&X := "wait", &Y := 3, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.005 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.065 * NikkeW . " ", NikkeY + 0.005 * NikkeH + 0.055 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
}
}
} else {
AddLog(Name . "未找到,跳过购买")
}
}
AddLog("===废铁商店任务结束===")
}
;endregion 商店
;region 模拟室
;tag 模拟室
SimulationRoom() {
EnterToArk
AddLog("===模拟室任务开始===")
AddLog("查找模拟室入口")
while (ok := FindText(&X, &Y, NikkeX + 0.370 * NikkeW . " ", NikkeY + 0.596 * NikkeH . " ", NikkeX + 0.370 * NikkeW + 0.069 * NikkeW . " ", NikkeY + 0.596 * NikkeH + 0.031 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("模拟室"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("进入模拟室")
FindText().Click(X, Y - 50 * TrueRatio, "L")
}
while true {
if (ok := FindText(&X, &Y, NikkeX + 0.442 * NikkeW . " ", NikkeY + 0.535 * NikkeH . " ", NikkeX + 0.442 * NikkeW + 0.118 * NikkeW . " ", NikkeY + 0.535 * NikkeH + 0.101 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("开始模拟的开始"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击开始模拟")
FindText().Click(X + 30 * TrueRatio, Y, "L")
Sleep 1000
break
}
else Confirm
}
while (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.502 * NikkeW . " ", NikkeY + 0.814 * NikkeH . " ", NikkeX + 0.502 * NikkeW + 0.147 * NikkeW . " ", NikkeY + 0.814 * NikkeH + 0.063 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("快速模拟的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击快速模拟")
FindText().Click(X + 100 * TrueRatio, Y, "L")
Sleep 1000
}
while (ok := FindText(&X := "wait", &Y := 1, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("跳过增益效果选择的图标"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("跳过增益选择")
FindText().Click(X + 100 * TrueRatio, Y, "L")
}
EnterToBattle
BattleSettlement
sleep 5000
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.364 * NikkeW . " ", NikkeY + 0.323 * NikkeH . " ", NikkeX + 0.364 * NikkeW + 0.272 * NikkeW . " ", NikkeY + 0.323 * NikkeH + 0.558 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("模拟结束的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击模拟结束")
FindText().Click(X + 50 * TrueRatio, Y, "L")
Sleep 1000
}
while !(ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.005 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.065 * NikkeW . " ", NikkeY + 0.005 * NikkeH + 0.055 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
AddLog("===模拟室任务结束===")
}
;tag 模拟室超频
SimulationOverClock() {
AddLog("===模拟室超频任务开始===")
Text := "|<剩余奖励的0>*80$26.s001wTzyCDzzl600C3001lU00AE0014000F0004E3w141VUF0E84E421410UF0E84E66140z0F0004E0014000FU00AA0071U03WDzzllzzsy000S"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("模拟室超频未完成")
Text := "|<开始超频>*173$63.zzyD7ztzwzs01nszyA1a000CTBX0FY077DUF4Q6Abnttw2QXtk4k7DDU00M0E0000C40E7z02001UrrHUACE00A7zs41U27DDkk70aA0Eltz60kA1806DDs3a3UD34Xty0QkDzsw8zDXk6E0AC0jtyy0n01Xlo"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
}
else {
AddLog("模拟室超频已完成!")
return
}
Text := "|<BIOS>*168$49.03wzVzk3U0yT0Dk0E0DD03k09z7b3kszUzXn7wQzy01tXz60D00wlzX01U0CMzls0Hz7ATszz1zlaDwTzUzsnXwQzkDstk0S7k00Qy0TU0U0STUTs0s"
if (ok := FindText(&X := "wait", &Y := 5, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
Text := "|<25>*121$44.U00y000k007U00A000s003000C000k001000DzzUEDzzzzw63zzzzz1Uzzzk00M00Dk006000w003U00C001s001U00y0000Dzzzzw03zzzzz00zzzzzk0001U000000E0010006000s001U00S000M00DU"
if (ok := !FindText(&X := "wait", &Y := 5, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("难度不是25跳过")
return
}
Text := "|<开始模拟>*177$110.zzzzzzzzzzTztzzzzzzzzzzlzszzXwQDwTzyT0003wTwDzkw00z7Xz3U000T7z7zwC007lsTks000DlzVzz3U01wS0wS0003wTsszkz73z3UD7z3wDw0QCDk3ttz08Flzkz3y077ls0k07U2AQTwDkzU1VwD0A00w1X37z3wDyAEE3wD00Tlsslzkz3zX000T3lz7wSCATwDkzsl007kM00z7XX7U008QQEDlw200Tkszlk00076Dzzy0Vz3w2DsQ0001lXzzzU000w0XyDU000w8s03k000S0MzXzlz3z0C00w3z1zUCCkTsTkzw3U0C0zszx7U47y7wDzUszXUC007ls00zVz3zsCDss3001wS0UDkzkzy1XyDMk00T7UM1sDwDz0MzXyDs1zlkQ8Q7z3zVa7kzXwADwQC763zkzkTU0Dss70S7b1k0zwDwDs03wA3s71zkwMTz3z7y60z33zXkTyTjTzlzzzbzTtzzzyzzzzU"
if (ok := FindText(&X := "wait", &Y := 5, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
final := false
while true {
Text := "|<获得>*120$30.xvzzzU0D8000C8sstwM0duxcsVkT80XnSA100A80s0880llwDlVlz009UzBntYTAnkCDCHWTDD3U"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
Text := "|<模拟通关>*103$63.rqzTzzzzzzyM1tbbQ0TDXm07AAkk3sswAHl1b71z2700A04yk3U0AM1l47w0C03V0DAUtUFz7w01s7640DszU0A0ssUF00001V67Y0A0130CA0wUFy3sE0t03YkDUDnUT8UM63sMSMEl8E0087UmD4TaHU1Xy4"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
final := True
AddLog("挑战最后一关")
FindText().Click(X, Y, "L")
Sleep 1000
}
EnterToBattle
BattleSettlement
if final = True {
break
}
AddLog("模拟室超频第" A_Index "关已通关!")
Text := "|<对象>*200$24.zvxzzvsD1vXDt1U1tnm91vk1XPURn/g3lvk3Zvk9DXVAzbyTU"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("获取第" A_Index "次增益")
FindText().Click(X, Y + 100 * TrueRatio, "L")
Sleep 500
FindText().Click(X, Y + 100 * TrueRatio, "L")
Sleep 500
FindText().Click(X, Y + 100 * TrueRatio, "L")
}
Text := "|<确认的图标>*184$34.zy03zzzU07zzs00zzz0Tzzzs7zzvz1zzz7sDzzsD1zzz1wDzzsDVzzz1y7zzsDkzzz1z3zzsDwDzz1zlyTsDz7kz1zwT1sDzly31zk7w0Dz0Ts1zw0zkDzl3zVzz6DzDzsMTzzzXkzzzwD3zzzVy7zzw7wDzzUzkDzw7zkDz0zzU007zz001zzz00TzzzkDzy"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
}
Text := "|<模拟结束的图标>*159$38.03zzzy01zzzzs0zzzzy0Dk00Dk3k001w0w000D0D0003k00000w00000D000003k0U000w0M000D0S0003kDU000w7zzU0D3zzs03nzzy00xzzzU0Dzzzs03zzzy00xzzzU0DDzzs03lzzy00wDzzU0D0y0003k7U000w0s000D020003k00000w00000D000003k3k000w0w000T0DU00Dk3zzzzw0Tzzzy03zzzz0000302"
if (ok := FindText(&X := "wait", &Y := 5, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("模拟结束")
FindText().Click(X, Y, "L")
Sleep 1000
}
Text := "|<确认的图标>*184$34.zy03zzzU07zzs00zzz0Tzzzs7zzvz1zzz7sDzzsD1zzz1wDzzsDVzzz1y7zzsDkzzz1z3zzsDwDzz1zlyTsDz7kz1zwT1sDzly31zk7w0Dz0Ts1zw0zkDzl3zVzz6DzDzsMTzzzXkzzzwD3zzzVy7zzw7wDzzUzkDzw7zkDz0zzU007zz001zzz00TzzzkDzy"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("确认模拟结束")
FindText().Click(X, Y, "L")
Sleep 1000
}
Text := "|<Lv>*215$15.k0600k0K1bkAy1qk7q0wz3bwMU"
if (ok := FindText(&X := "wait", &Y := 5, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("获取最后的增益")
FindText().Click(X, Y, "L")
Sleep 500
FindText().Click(X, Y, "L")
Sleep 500
FindText().Click(X, Y, "L")
}
Text := "|<确认的图标>*184$34.zy03zzzU07zzs00zzz0Tzzzs7zzvz1zzz7sDzzsD1zzz1wDzzsDVzzz1y7zzsDkzzz1z3zzsDwDzz1zlyTsDz7kz1zwT1sDzly31zk7w0Dz0Ts1zw0zkDzl3zVzz6DzDzsMTzzzXkzzzwD3zzzVy7zzw7wDzzUzkDzw7zkDz0zzU007zz001zzz00TzzzkDzy"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
AddLog("===模拟室超频任务结束===")
}
;endregion 模拟室
;region 竞技场
;tag 竞技场收菜
Arena() {
EnterToArk()
AddLog("===竞技场收菜任务开始===")
AddLog("查找奖励")
foundReward := false
while (ok := FindText(&X := "wait", &Y := 2, NikkeX + 0.552 * NikkeW . " ", NikkeY + 0.493 * NikkeH . " ", NikkeX + 0.552 * NikkeW + 0.075 * NikkeW . " ", NikkeY + 0.493 * NikkeH + 0.053 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("SPECIAL"), , 0, , , , , TrueRatio, TrueRatio)) {
foundReward := true
AddLog("点击奖励")
FindText().Click(X + 30 * TrueRatio, Y, "L")
}
if foundReward {
while (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("点击领取")
FindText().Click(X + 50 * TrueRatio, Y, "L")
}
AddLog("尝试确认并返回方舟大厅")
while !(ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.005 * NikkeW . " ", NikkeY + 0.010 * NikkeH . " ", NikkeX + 0.005 * NikkeW + 0.052 * NikkeW . " ", NikkeY + 0.010 * NikkeH + 0.058 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("左上角的方舟文本"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
}
}
else AddLog("未找到奖励")
AddLog("===竞技场收菜任务结束===")
AddLog("进入竞技场")
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.541 * NikkeW . " ", NikkeY + 0.712 * NikkeH . " ", NikkeX + 0.541 * NikkeW + 0.068 * NikkeW . " ", NikkeY + 0.712 * NikkeH + 0.030 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("竞技场"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击竞技场")
FindText().Click(X, Y - 50 * TrueRatio, "L")
Sleep 1000
}
while !(ok := FindText(&X, &Y, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.002 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.060 * NikkeW . " ", NikkeY + 0.002 * NikkeH + 0.060 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("左上角的竞技场"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
}
}
;tag 新人竞技场
RookieArena() {
AddLog("===新人竞技场任务开始===")
AddLog("查找新人竞技场")
while (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.372 * NikkeW . " ", NikkeY + 0.542 * NikkeH . " ", NikkeX + 0.372 * NikkeW + 0.045 * NikkeW . " ", NikkeY + 0.542 * NikkeH + 0.024 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("新人"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击新人竞技场")
FindText().Click(X + 20 * TrueRatio, Y, "L")
Sleep 1000
if A_Index > 3 {
AddLog("新人竞技场未在开放期间,跳过任务")
AddLog("===新人竞技场任务结束===")
return
}
}
AddLog("检测免费次数")
skip := false
while True {
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.565 * NikkeW . " ", NikkeY + 0.775 * NikkeH . " ", NikkeX + 0.565 * NikkeW + 0.082 * NikkeW . " ", NikkeY + 0.775 * NikkeH + 0.101 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("免费"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("有免费次数,尝试进入战斗")
FindText().Click(X, Y + 10 * TrueRatio, "L")
Sleep 1000
}
else break
if skip = false {
if (ok := FindText(&X, &Y, NikkeX + 0.393 * NikkeW . " ", NikkeY + 0.815 * NikkeH . " ", NikkeX + 0.393 * NikkeW + 0.081 * NikkeW . " ", NikkeY + 0.815 * NikkeH + 0.041 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("ON"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("快速战斗已开启")
skip := true
}
else if (ok := FindText(&X, &Y, NikkeX + 0.393 * NikkeW . " ", NikkeY + 0.815 * NikkeH . " ", NikkeX + 0.393 * NikkeW + 0.081 * NikkeW . " ", NikkeY + 0.815 * NikkeH + 0.041 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("OFF"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("有笨比没开快速战斗,帮忙开了!")
FindText().Click(X, Y, "L")
Sleep 1000
}
}
EnterToBattle
BattleSettlement
while !(ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.005 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.065 * NikkeW . " ", NikkeY + 0.005 * NikkeH + 0.055 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
}
AddLog("没有免费次数,尝试返回")
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.001 * NikkeW . " ", NikkeY + 0.005 * NikkeH . " ", NikkeX + 0.001 * NikkeW + 0.065 * NikkeW . " ", NikkeY + 0.005 * NikkeH + 0.055 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , 0, , , , , TrueRatio, TrueRatio)) {
GoBack
}
AddLog("已返回竞技场页面")
AddLog("===新人竞技场任务结束===")
}
;tag 特殊竞技场
SpecialArena() {
AddLog("===特殊竞技场任务开始===")
AddLog("查找特殊竞技场")
while (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.516 * NikkeW . " ", NikkeY + 0.543 * NikkeH . " ", NikkeX + 0.516 * NikkeW + 0.045 * NikkeW . " ", NikkeY + 0.543 * NikkeH + 0.022 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("特殊"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击特殊竞技场")
FindText().Click(X + 20 * TrueRatio, Y, "L")
Sleep 1000
if A_Index > 3 {
AddLog("特殊竞技场未在开放期间,跳过任务")
AddLog("===特殊竞技场任务结束===")
return
}
}
AddLog("检测免费次数")
skip := false
while True {
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.565 * NikkeW . " ", NikkeY + 0.775 * NikkeH . " ", NikkeX + 0.565 * NikkeW + 0.082 * NikkeW . " ", NikkeY + 0.775 * NikkeH + 0.101 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("免费"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("有免费次数,尝试进入战斗")
FindText().Click(X, Y + 10 * TrueRatio, "L")
Sleep 1000
}
else break
if skip = false {
if (ok := FindText(&X, &Y, NikkeX + 0.393 * NikkeW . " ", NikkeY + 0.815 * NikkeH . " ", NikkeX + 0.393 * NikkeW + 0.081 * NikkeW . " ", NikkeY + 0.815 * NikkeH + 0.041 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("ON"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("快速战斗已开启")
skip := true
}
else if (ok := FindText(&X, &Y, NikkeX + 0.393 * NikkeW . " ", NikkeY + 0.815 * NikkeH . " ", NikkeX + 0.393 * NikkeW + 0.081 * NikkeW . " ", NikkeY + 0.815 * NikkeH + 0.041 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("OFF"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("有笨比没开快速战斗,帮忙开了!")
FindText().Click(X, Y, "L")
Sleep 1000
}
}
EnterToBattle
BattleSettlement
while !(ok := FindText(&X, &Y, NikkeX + 0.002 * NikkeW . " ", NikkeY + 0.003 * NikkeH . " ", NikkeX + 0.002 * NikkeW + 0.083 * NikkeW . " ", NikkeY + 0.003 * NikkeH + 0.059 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
}
}
AddLog("没有免费次数,尝试返回")
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.002 * NikkeW . " ", NikkeY + 0.006 * NikkeH . " ", NikkeX + 0.002 * NikkeW + 0.078 * NikkeW . " ", NikkeY + 0.006 * NikkeH + 0.049 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , 0, , , , , TrueRatio, TrueRatio)) {
GoBack
}
AddLog("已返回竞技场页面")
AddLog("===特殊竞技场任务结束===")
}
;tag 冠军竞技场
ChampionArena() {
AddLog("===冠军竞技场任务开始===")
AddLog("查找冠军竞技场")
Text := "|<应援>*80$30.z7yQ0z3yM500CRg7zw4VDjQ80BjCQ09aSQDBaS00Aaw6TAkwS0CwyQ9DtyQ9DlyNX006F0M0AKQU"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
AddLog("已找到一级应援文本")
Sleep 1000
}
else {
AddLog("未在应援期间")
AddLog("===冠军竞技场任务结束===")
return
}
Text := "|<冠军竞技场内部的应援>*140$29.zbyTlyDwk200toYxrVd9vr20GbDA0YaSM19AwE2GHkk4X7XU3iTb27wzA1CUyN2E0MY2"
while (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y - 50 * TrueRatio, "L")
AddLog("已找到二级应援文本")
Sleep 1000
}
Text := "|<晋级赛内部的应援>*100$41.0D00kzy0S01Xzzzzy33yrzzwD6NzzzszCnQ001yTzsC71tzzzQC1VzzyMQ31s7Qts7DzyRnUTzzwvb3zDytzw7wTzlps7UzzX3U73xy07067vg0S0ATzTzzkttyzzzXrzzDzz7aSy"
while true {
if !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
else {
while (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
Sleep 3000
break
}
}
if UserCheckColor([1926], [1020], ["0xF2762B"], scrRatio) {
AddLog("左边支持的人多")
UserClick(1631, 1104, scrRatio)
}
else {
AddLog("右边支持的人多")
UserClick(2097, 1096, scrRatio)
}
Sleep 1000
Text := "|<确认的图标>*184$34.zy03zzzU07zzs00zzz0Tzzzs7zzvz1zzz7sDzzsD1zzz1wDzzsDVzzz1y7zzsDkzzz1z3zzsDwDzz1zlyTsDz7kz1zwT1sDzly31zk7w0Dz0Ts1zw0zkDzl3zVzz6DzDzsMTzzzXkzzzwD3zzzVy7zzw7wDzzUzkDzw7zkDz0zzU007zz001zzz00TzzzkDzy"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
AddLog("===冠军竞技场任务结束===")
BackToHall
}
;endregion 竞技场
;region 无限之塔
;tag 企业塔
CompanyTower() {
EnterToArk
AddLog("===企业塔任务开始===")
while (ok := FindText(&X, &Y, NikkeX + 0.559 * NikkeW . " ", NikkeY + 0.423 * NikkeH . " ", NikkeX + 0.559 * NikkeW + 0.069 * NikkeW . " ", NikkeY + 0.423 * NikkeH + 0.029 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("无限之塔的无限"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("进入无限之塔")
FindText().Click(X, Y - 50 * TrueRatio, "L")
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.353 * NikkeW . " ", NikkeY + 0.827 * NikkeH . " ", NikkeX + 0.353 * NikkeW + 0.290 * NikkeW . " ", NikkeY + 0.827 * NikkeH + 0.029 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("每日通关"), , , , , , 1, TrueRatio, TrueRatio)) {
count := ok.Length
AddLog("今天有" count "座塔要打")
Sleep 1000
FindText().Click(X, Y, "L")
loop count {
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.426 * NikkeW . " ", NikkeY + 0.405 * NikkeH . " ", NikkeX + 0.426 * NikkeW + 0.025 * NikkeW . " ", NikkeY + 0.405 * NikkeH + 0.024 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("STAGE"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("已进入塔的内部")
Sleep 1000
FindText().Click(X + 100 * TrueRatio, Y, "L")
EnterToBattle
BattleSettlement
if BattleActive = 1 {
RefuseSale
}
}
if !(A_Index = count) {
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("无限之塔·向右的箭头"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X + 30 * TrueRatio, Y, "L")
}
}
Sleep 3000
}
AddLog("所有塔都打过了")
}
AddLog("===企业塔任务结束===")
BackToHall
}
;tag 通用塔
UniversalTower() {
EnterToArk
AddLog("===通用塔任务开始===")
while (ok := FindText(&X, &Y, NikkeX + 0.559 * NikkeW . " ", NikkeY + 0.423 * NikkeH . " ", NikkeX + 0.559 * NikkeW + 0.069 * NikkeW . " ", NikkeY + 0.423 * NikkeH + 0.029 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("无限之塔的无限"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("进入无限之塔")
FindText().Click(X, Y - 50 * TrueRatio, "L")
}
while (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.548 * NikkeW . " ", NikkeY + 0.312 * NikkeH . " ", NikkeX + 0.548 * NikkeW + 0.096 * NikkeW . " ", NikkeY + 0.312 * NikkeH + 0.172 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("塔内的无限之塔"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击塔内的无限之塔")
FindText().Click(X, Y, "L")
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.426 * NikkeW . " ", NikkeY + 0.405 * NikkeH . " ", NikkeX + 0.426 * NikkeW + 0.025 * NikkeW . " ", NikkeY + 0.405 * NikkeH + 0.024 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("STAGE"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("已进入塔的内部")
FindText().Click(X + 100 * TrueRatio, Y, "L")
EnterToBattle
BattleSettlement
RefuseSale
}
AddLog("===通用塔任务结束===")
BackToHall
}
;endregion 无限之塔
;region 拦截战
;tag 异常拦截
Interception() {
BackToHall
EnterToArk
AddLog("===异常拦截任务开始===")
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.431 * NikkeW . " ", NikkeY + 0.869 * NikkeH . " ", NikkeX + 0.431 * NikkeW + 0.069 * NikkeW . " ", NikkeY + 0.869 * NikkeH + 0.031 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("拦截战"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y - 50 * TrueRatio, "L")
Sleep 1000
}
Sleep 500
Confirm
while !(ok := FindText(&X, &Y, NikkeX + 0.580 * NikkeW . " ", NikkeY + 0.956 * NikkeH . " ", NikkeX + 0.580 * NikkeW + 0.074 * NikkeW . " ", NikkeY + 0.956 * NikkeH + 0.027 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("红字的异常"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
if A_Index > 20 {
MsgBox("异常个体拦截战未解锁!本脚本暂不支持普通拦截!")
Pause
}
}
AddLog("已进入异常拦截界面")
loop 5 {
switch g_numeric_settings["InterceptionBoss"] {
case 1:
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.438 * NikkeW . " ", NikkeY + 0.723 * NikkeH . " ", NikkeX + 0.438 * NikkeW + 0.119 * NikkeW . " ", NikkeY + 0.723 * NikkeH + 0.061 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("克拉肯的克"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("已选择BOSS克拉肯")
break
}
case 2:
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.438 * NikkeW . " ", NikkeY + 0.723 * NikkeH . " ", NikkeX + 0.438 * NikkeW + 0.119 * NikkeW . " ", NikkeY + 0.723 * NikkeH + 0.061 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("镜像容器的镜"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("已选择BOSS镜像容器")
break
}
case 3:
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.438 * NikkeW . " ", NikkeY + 0.723 * NikkeH . " ", NikkeX + 0.438 * NikkeW + 0.119 * NikkeW . " ", NikkeY + 0.723 * NikkeH + 0.061 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("茵迪维利亚的茵"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("已选择BOSS茵迪维利亚")
break
}
case 4:
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.438 * NikkeW . " ", NikkeY + 0.723 * NikkeH . " ", NikkeX + 0.438 * NikkeW + 0.119 * NikkeW . " ", NikkeY + 0.723 * NikkeH + 0.061 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("过激派的过"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("已选择BOSS过激派")
break
}
case 5:
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.438 * NikkeW . " ", NikkeY + 0.723 * NikkeH . " ", NikkeX + 0.438 * NikkeW + 0.119 * NikkeW . " ", NikkeY + 0.723 * NikkeH + 0.061 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("死神的死"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("已选择BOSS死神")
break
}
default:
MsgBox "BOSS选择错误"
Pause
}
AddLog("非对应BOSS尝试切换")
if (ok := FindText(&X, &Y, NikkeX + 0.584 * NikkeW . " ", NikkeY + 0.730 * NikkeH . " ", NikkeX + 0.584 * NikkeW + 0.023 * NikkeW . " ", NikkeY + 0.730 * NikkeH + 0.039 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("异常拦截·向右的箭头"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X + 10 * TrueRatio, Y, "L")
}
Sleep 1000
}
FindText().Click(X, Y + 100 * TrueRatio, "L")
Sleep 1000
switch g_numeric_settings["InterceptionBoss"] {
case 1:
if (ok := FindText(&X, &Y, NikkeX + 0.472 * NikkeW . " ", NikkeY + 0.648 * NikkeH . " ", NikkeX + 0.472 * NikkeW + 0.179 * NikkeW . " ", NikkeY + 0.648 * NikkeH + 0.060 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("01"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
case 2:
if (ok := FindText(&X, &Y, NikkeX + 0.472 * NikkeW . " ", NikkeY + 0.648 * NikkeH . " ", NikkeX + 0.472 * NikkeW + 0.179 * NikkeW . " ", NikkeY + 0.648 * NikkeH + 0.060 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("02"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
case 3:
if (ok := FindText(&X, &Y, NikkeX + 0.472 * NikkeW . " ", NikkeY + 0.648 * NikkeH . " ", NikkeX + 0.472 * NikkeW + 0.179 * NikkeW . " ", NikkeY + 0.648 * NikkeH + 0.060 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("03"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
case 4:
if (ok := FindText(&X, &Y, NikkeX + 0.472 * NikkeW . " ", NikkeY + 0.648 * NikkeH . " ", NikkeX + 0.472 * NikkeW + 0.179 * NikkeW . " ", NikkeY + 0.648 * NikkeH + 0.060 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("04"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
case 5:
if (ok := FindText(&X, &Y, NikkeX + 0.472 * NikkeW . " ", NikkeY + 0.648 * NikkeH . " ", NikkeX + 0.472 * NikkeW + 0.179 * NikkeW . " ", NikkeY + 0.648 * NikkeH + 0.060 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("05"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
default:
MsgBox "BOSS选择错误"
Pause
}
AddLog("已切换到对应队伍")
while True {
if !(ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.503 * NikkeW . " ", NikkeY + 0.879 * NikkeH . " ", NikkeX + 0.503 * NikkeW + 0.150 * NikkeW . " ", NikkeY + 0.879 * NikkeH + 0.102 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("拦截战·进入战斗的进"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("异常拦截次数已耗尽")
break
}
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.506 * NikkeW . " ", NikkeY + 0.826 * NikkeH . " ", NikkeX + 0.506 * NikkeW + 0.145 * NikkeW . " ", NikkeY + 0.826 * NikkeH + 0.065 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("拦截战·快速战斗的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("已激活快速战斗")
FindText().Click(X + 50 * TrueRatio, Y, "L")
}
else if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.503 * NikkeW . " ", NikkeY + 0.879 * NikkeH . " ", NikkeX + 0.503 * NikkeW + 0.150 * NikkeW . " ", NikkeY + 0.879 * NikkeH + 0.102 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("拦截战·进入战斗的进"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("未激活快速战斗,尝试普通战斗")
FindText().Click(X, Y, "L")
Sleep 1000
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("ESC"), , 0, , , , , TrueRatio, TrueRatio)) {
UserClick(2123, 1371, scrRatio)
Sleep 500
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
AddLog("跳过动画")
break
}
if (A_Index > 30) {
break
}
}
}
if g_settings["InterceptionShot"] {
BattleSettlement(true)
}
else BattleSettlement
Sleep 2000
}
AddLog("===异常拦截任务结束===")
BackToHall
}
;endregion 拦截战
;region 前哨基地
;tag 前哨基地收菜
OutpostDefence() {
BackToHall
AddLog("===前哨基地收菜任务开始===")
if (ok := FindText(&X := "wait", &Y := 5, NikkeX + 0.240 * NikkeW . " ", NikkeY + 0.755 * NikkeH . " ", NikkeX + 0.240 * NikkeW + 0.048 * NikkeW . " ", NikkeY + 0.755 * NikkeH + 0.061 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("前哨基地的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击进入前哨基地")
FindText().Click(X, Y, "L")
Sleep 1000
}
else {
AddLog("未找到前哨基地!")
return
}
while !(ok := FindText(&X, &Y, NikkeX + 0.884 * NikkeW . " ", NikkeY + 0.904 * NikkeH . " ", NikkeX + 0.884 * NikkeW + 0.114 * NikkeW . " ", NikkeY + 0.904 * NikkeH + 0.079 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("溢出资源的图标"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
}
while (ok := FindText(&X, &Y, NikkeX + 0.884 * NikkeW . " ", NikkeY + 0.904 * NikkeH . " ", NikkeX + 0.884 * NikkeW + 0.114 * NikkeW . " ", NikkeY + 0.904 * NikkeH + 0.079 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("溢出资源的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击左下角资源")
FindText().Click(X - 100 * TrueRatio, Y, "L")
Sleep 1000
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.490 * NikkeW . " ", NikkeY + 0.820 * NikkeH . " ", NikkeX + 0.490 * NikkeW + 0.010 * NikkeW . " ", NikkeY + 0.820 * NikkeH + 0.017 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X - 50 * TrueRatio, Y + 50 * TrueRatio, "L")
Sleep 1000
if (ok := FindText(&X, &Y, NikkeX + 0.465 * NikkeW . " ", NikkeY + 0.738 * NikkeH . " ", NikkeX + 0.465 * NikkeW + 0.163 * NikkeW . " ", NikkeY + 0.738 * NikkeH + 0.056 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("歼灭"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击进行歼灭")
FindText().Click(X, Y, "L")
Sleep 1000
while !(ok := FindText(&X, &Y, NikkeX + 0.503 * NikkeW . " ", NikkeY + 0.825 * NikkeH . " ", NikkeX + 0.503 * NikkeW + 0.121 * NikkeW . " ", NikkeY + 0.825 * NikkeH + 0.059 * NikkeH . " ", 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("获得奖励的图标"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
Sleep 1000
}
}
}
else AddLog("没有免费一举歼灭")
AddLog("尝试常规收菜")
if (ok := FindText(&X, &Y, NikkeX + 0.503 * NikkeW . " ", NikkeY + 0.825 * NikkeH . " ", NikkeX + 0.503 * NikkeW + 0.121 * NikkeW . " ", NikkeY + 0.825 * NikkeH + 0.059 * NikkeH . " ", 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("获得奖励的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击收菜")
FindText().Click(X, Y, "L")
Sleep 1000
}
AddLog("尝试返回前哨基地主页面")
while !(ok := FindText(&X, &Y, NikkeX + 0.884 * NikkeW . " ", NikkeY + 0.904 * NikkeH . " ", NikkeX + 0.884 * NikkeW + 0.114 * NikkeW . " ", NikkeY + 0.904 * NikkeH + 0.079 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("溢出资源的图标"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
}
AddLog("已返回前哨基地主页面")
AddLog("===前哨基地收菜任务结束===")
if g_settings["Expedition"] ;派遣
Expedition()
BackToHall()
}
;tag 派遣
Expedition() {
AddLog("===派遣委托任务开始===")
AddLog("查找派遣公告栏")
if (ok := FindText(&X := "wait", &Y := 5, NikkeX + 0.500 * NikkeW . " ", NikkeY + 0.901 * NikkeH . " ", NikkeX + 0.500 * NikkeW + 0.045 * NikkeW . " ", NikkeY + 0.901 * NikkeH + 0.092 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("派遣公告栏的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击派遣公告栏")
FindText().Click(X, Y, "L")
while (ok := FindText(&X := "wait", &Y := 2, NikkeX + 0.547 * NikkeW . " ", NikkeY + 0.807 * NikkeH . " ", NikkeX + 0.547 * NikkeW + 0.087 * NikkeW . " ", NikkeY + 0.807 * NikkeH + 0.066 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("获得奖励的图标"), , , , , , , TrueRatio * 0.8, TrueRatio * 0.8)) {
AddLog("点击全部领取")
FindText().Click(X, Y, "L")
Sleep 1000
}
else AddLog("没有可领取的奖励")
while !(ok := FindText(&X, &Y, NikkeX + 0.378 * NikkeW . " ", NikkeY + 0.137 * NikkeH . " ", NikkeX + 0.378 * NikkeW + 0.085 * NikkeW . " ", NikkeY + 0.137 * NikkeH + 0.040 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("派遣公告栏的派遣"), , , , , , , TrueRatio, TrueRatio)) {
UserClick(1595, 1806, scrRatio)
Sleep 500
}
AddLog("点击全部派遣")
if (ok := FindText(&X := "wait", &Y := 2, NikkeX + 0.456 * NikkeW . " ", NikkeY + 0.807 * NikkeH . " ", NikkeX + 0.456 * NikkeW + 0.087 * NikkeW . " ", NikkeY + 0.807 * NikkeH + 0.064 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("全部派遣的图标"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
if (ok := FindText(&X := "wait", &Y := 2, NikkeX + 0.501 * NikkeW . " ", NikkeY + 0.814 * NikkeH . " ", NikkeX + 0.501 * NikkeW + 0.092 * NikkeW . " ", NikkeY + 0.814 * NikkeH + 0.059 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白底蓝色右箭头"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击全部派遣")
FindText().Click(X, Y, "L")
Sleep 1000
}
}
else AddLog("派遣公告栏未找到!")
AddLog("===派遣委托任务结束===")
BackToHall()
}
;endregion 前哨基地
;region 咨询
;tag 好感度咨询
LoveTalking() {
BackToHall
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.370 * NikkeW . " ", NikkeY + 0.883 * NikkeH . " ", NikkeX + 0.370 * NikkeW + 0.039 * NikkeW . " ", NikkeY + 0.883 * NikkeH + 0.066 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("妮姬的图标"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X + 10 * TrueRatio, Y, "L")
AddLog("点击妮姬的图标,进入好感度咨询")
Sleep 1000
}
else {
AddLog("妮姬的图标未找到,无法进行好感度咨询,`n请尝试更换背景图")
return
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.818 * NikkeW . " ", NikkeY + 0.089 * NikkeH . " ", NikkeX + 0.818 * NikkeW + 0.089 * NikkeW . " ", NikkeY + 0.089 * NikkeH + 0.056 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("咨询的图标"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
while !(ok := FindText(&X, &Y, NikkeX + 0.471 * NikkeW . " ", NikkeY + 0.079 * NikkeH . " ", NikkeX + 0.471 * NikkeW + 0.019 * NikkeW . " ", NikkeY + 0.079 * NikkeH + 0.037 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("咨询的图标"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
}
AddLog("已进入好感度咨询界面")
; 花絮鉴赏会
if g_settings["Appreciation"] {
Appreciation
}
Sleep 1000
while (ok := FindText(&X, &Y, NikkeX + 0.118 * NikkeW . " ", NikkeY + 0.356 * NikkeH . " ", NikkeX + 0.118 * NikkeW + 0.021 * NikkeW . " ", NikkeY + 0.356 * NikkeH + 0.022 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("》》》"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X + 50 * TrueRatio, Y, "L")
AddLog("点击左上角的妮姬")
Sleep 500
}
Sleep 1000
AddLog("===妮姬咨询任务开始===")
while true {
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.15 * PicTolerance, 0.15 * PicTolerance, FindText().PicLib("20/"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("图鉴已满")
if (ok := FindText(&X, &Y, NikkeX + 0.541 * NikkeW . " ", NikkeY + 0.637 * NikkeH . " ", NikkeX + 0.541 * NikkeW + 0.030 * NikkeW . " ", NikkeY + 0.637 * NikkeH + 0.028 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("咨询·MAX"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("好感度也已满,跳过")
if (ok := FindText(&X, &Y, NikkeX + 0.361 * NikkeW . " ", NikkeY + 0.512 * NikkeH . " ", NikkeX + 0.361 * NikkeW + 0.026 * NikkeW . " ", NikkeY + 0.512 * NikkeH + 0.046 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("收藏的图标"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
AddLog("尝试取消收藏该妮姬")
}
}
else if (ok := FindText(&X, &Y, NikkeX + 0.501 * NikkeW . " ", NikkeY + 0.726 * NikkeH . " ", NikkeX + 0.501 * NikkeW + 0.130 * NikkeW . " ", NikkeY + 0.726 * NikkeH + 0.059 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("快速咨询的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("图鉴已满,尝试快速咨询")
FindText().Click(X, Y, "L")
Sleep 1000
Text := "|<确认的图标>*184$34.zy03zzzU07zzs00zzz0Tzzzs7zzvz1zzz7sDzzsD1zzz1wDzzsDVzzz1y7zzsDkzzz1z3zzsDwDzz1zlyTsDz7kz1zwT1sDzly31zk7w0Dz0Ts1zw0zkDzl3zVzz6DzDzsMTzzzXkzzzwD3zzzVy7zzw7wDzzUzkDzw7zkDz0zzU007zz001zzz00TzzzkDzy"
if (ok := FindText(&X, &Y, NikkeX + 0.506 * NikkeW . " ", NikkeY + 0.600 * NikkeH . " ", NikkeX + 0.506 * NikkeW + 0.125 * NikkeW . " ", NikkeY + 0.600 * NikkeH + 0.054 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
AddLog("已咨询" A_Index "次")
Sleep 1000
}
}
else AddLog("该妮姬已咨询")
}
else {
AddLog("图鉴未满")
if (ok := FindText(&X, &Y, NikkeX + 0.502 * NikkeW . " ", NikkeY + 0.780 * NikkeH . " ", NikkeX + 0.502 * NikkeW + 0.131 * NikkeW . " ", NikkeY + 0.780 * NikkeH + 0.088 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("咨询的咨"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("尝试普通咨询")
FindText().Click(X + 50 * TrueRatio, Y, "L")
Sleep 1000
if (ok := FindText(&X, &Y, NikkeX + 0.506 * NikkeW . " ", NikkeY + 0.600 * NikkeH . " ", NikkeX + 0.506 * NikkeW + 0.125 * NikkeW . " ", NikkeY + 0.600 * NikkeH + 0.054 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
AddLog("已咨询" A_Index "次")
}
Sleep 3000
while !(ok := FindText(&X, &Y, NikkeX + 0.003 * NikkeW . " ", NikkeY + 0.009 * NikkeH . " ", NikkeX + 0.003 * NikkeW + 0.069 * NikkeW . " ", NikkeY + 0.009 * NikkeH + 0.050 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , , , , , , TrueRatio, TrueRatio)) {
UserClick(1894, 1440, scrRatio) ;点击1号位默认位置
Sleep 200
UserClick(1903, 1615, scrRatio) ;点击2号位默认位置
Sleep 200
Send "{]}" ;尝试跳过
Sleep 200
}
Sleep 1000
}
else {
AddLog("该妮姬已咨询")
}
}
if (ok := FindText(&X, &Y, NikkeX + 0.502 * NikkeW . " ", NikkeY + 0.780 * NikkeH . " ", NikkeX + 0.502 * NikkeW + 0.131 * NikkeW . " ", NikkeY + 0.780 * NikkeH + 0.088 * NikkeH . " ", 0.2 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("0/"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("咨询次数已耗尽")
break
}
while !(ok := FindText(&X, &Y, NikkeX + 0.003 * NikkeW . " ", NikkeY + 0.009 * NikkeH . " ", NikkeX + 0.003 * NikkeW + 0.069 * NikkeW . " ", NikkeY + 0.009 * NikkeH + 0.050 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("圈中的感叹号"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
}
if (ok := FindText(&X, &Y, NikkeX + 0.970 * NikkeW . " ", NikkeY + 0.403 * NikkeH . " ", NikkeX + 0.970 * NikkeW + 0.024 * NikkeW . " ", NikkeY + 0.403 * NikkeH + 0.067 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("咨询·向右的图标"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("下一个妮姬")
FindText().Click(X - 30 * TrueRatio, Y, "L")
Sleep 1000
}
}
AddLog("===妮姬咨询任务结束===")
BackToHall
}
;tag 花絮鉴赏
Appreciation() {
AddLog("===花絮鉴赏任务开始===")
Sleep 1000
Text := "|<花絮>*200$44.zTrzzzzzXszyDzzkQ6y0A000070300001sElXsyDyCQwyTrzU7DDbzzw1lXsszzUQ0wSDTU00C7X3ksAzXs0zsCDky0zs63sD0zy07Q3Uzzk7XUkDzw1UTA3zw003XsyT01gsyDbwwnzDXly7ADns0S7Xkwz0DXUyDDzzzwzy"
while (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X + 50 * TrueRatio, Y, "L")
AddLog("点击花絮")
}
Text := "|<EPISO>*191$67.DztzwC7zU7sDzwzzb7zsDzDzyTznbzyDzr00C0tnU77VvU070Qtk070Tzy3zyQzy3U7zz1zyCDzXU3zzUzy73ztk1y00Q03U0SQ0z00C01k07C0TU0700tk3bUTk03U0Qw3lsSzztk0CDzkTyDzws077zs7y3zyQ03Uzk0w4"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("播放第一个片段")
FindText().Click(X, Y, "L")
}
else {
AddLog("花絮鉴赏任务已完成")
AddLog("===花絮鉴赏任务结束===")
Text := "|<左上角的咨询>*200$35.zbzzvz60DbXzw0Db3zn6zw0DiRzlyTwTznyVkTXUQDCTbavsyDjBrvyzS3DXvywqM07wtglzDsENbzTlbn7wz7za01yTsSTnzztk"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
return
}
Text领取 := "|<领取>*200$40.wzzzzzzVU1U1zy706000kD3wEU24QTl608E070Qs0U0Q1n4lkFl74P7976QFUAYQ1s60GFk7UzX970S3yA4QMwDtkFl1ls716063Uz1s0E7Xs3V60D767yMsyswTtbrzrzzbzs"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text领取, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("播放下一个片段")
Send "{]}" ;尝试跳过
Text播放 := "|<播放>*200$53.sTzlztz7zks01zVy7zVk03z3wDz3U0Dz7sTy7W4D01kzk328y0100U601w02010000w7w03VU01wDkMT3U03sTUky7k0Tk01VwC00TU037s0AED000DU0sky480Q0003w8S0w3U07sEw3s700DlVs7wC4ATX3sTsQ00y67kTks01wAD0TVk03sMM0T3V37VkU0M700C001UES00SA67Vkw00ysQzr"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text播放, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
}
FindText().Click(X, Y, "L")
AddLog("领取奖励")
Text := "|<左上角的咨询>*200$35.zbzzvz60DbXzw0Db3zn6zw0DiRzlyTwTznyVkTXUQDCTbavsyDjBrvyzS3DXvywqM07wtglzDsENbzTlbn7wz7za01yTsSTnzztk"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
AddLog("===花絮鉴赏任务结束===")
}
;endregion 咨询
;region 好友点数收取
FriendPoint() {
BackToHall
AddLog("===好友点数任务开始===")
while (ok := FindText(&X, &Y, NikkeX + 0.980 * NikkeW . " ", NikkeY + 0.213 * NikkeH . " ", NikkeX + 0.980 * NikkeW + 0.009 * NikkeW . " ", NikkeY + 0.213 * NikkeH + 0.016 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击好友")
FindText().Click(X, Y, "L")
Sleep 1000
}
while (ok := FindText(&X, &Y, NikkeX + 0.628 * NikkeW . " ", NikkeY + 0.822 * NikkeH . " ", NikkeX + 0.628 * NikkeW + 0.010 * NikkeW . " ", NikkeY + 0.822 * NikkeH + 0.017 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击赠送")
FindText().Click(X, Y, "L")
Sleep 1000
}
AddLog("===好友点数任务结束===")
BackToHall
}
;endregion 好友点数收取
;region 邮箱收取
Mail() {
BackToHall
AddLog("===邮箱任务开始===")
while (ok := FindText(&X, &Y, NikkeX + 0.962 * NikkeW . " ", NikkeY + 0.017 * NikkeH . " ", NikkeX + 0.962 * NikkeW + 0.008 * NikkeW . " ", NikkeY + 0.017 * NikkeH + 0.015 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击邮箱")
FindText().Click(X, Y, "L")
Sleep 1000
}
else {
AddLog("邮箱已领取")
AddLog("===邮箱任务结束===")
return
}
while (ok := FindText(&X, &Y, NikkeX + 0.519 * NikkeW . " ", NikkeY + 0.817 * NikkeH . " ", NikkeX + 0.519 * NikkeW + 0.110 * NikkeW . " ", NikkeY + 0.817 * NikkeH + 0.063 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("白底蓝色右箭头"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击全部领取")
FindText().Click(X + 50 * TrueRatio, Y, "L")
}
AddLog("===邮箱任务结束===")
BackToHall
}
;endregion 邮箱收取
;region 方舟排名奖励
;tag 排名奖励
RankingReward() {
EnterToArk()
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.979 * NikkeW . " ", NikkeY + 0.138 * NikkeH . " ", NikkeX + 0.979 * NikkeW + 0.010 * NikkeW . " ", NikkeY + 0.138 * NikkeH + 0.018 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X - 30 * TrueRatio, Y + 30 * TrueRatio, "L")
}
else {
AddLog("没有可领取的排名奖励,跳过")
return
}
AddLog("===排名奖励任务开始===")
loop 2 {
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.623 * NikkeW . " ", NikkeY + 0.213 * NikkeH . " ", NikkeX + 0.623 * NikkeW + 0.047 * NikkeW . " ", NikkeY + 0.213 * NikkeH + 0.125 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击大标题上的红点")
FindText().Click(X, Y, "L")
Sleep 1000
while (ok1 := FindText(&X := "wait", &Y := 3, NikkeX + 0.632 * NikkeW . " ", NikkeY + 0.799 * NikkeH . " ", NikkeX + 0.632 * NikkeW + 0.012 * NikkeW . " ", NikkeY + 0.799 * NikkeH + 0.023 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击领取")
FindText().Click(X, Y, "L")
}
Confirm
GoBack
}
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.330 * NikkeW . " ", NikkeY + 0.513 * NikkeH . " ", NikkeX + 0.330 * NikkeW + 0.340 * NikkeW . " ", NikkeY + 0.513 * NikkeH + 0.109 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
loop ok.Length {
FindText().Click(ok[A_Index].x, ok[A_Index].y, "L")
AddLog("点击小标题上的红点")
Sleep 1000
while (ok1 := FindText(&X := "wait", &Y := 3, NikkeX + 0.632 * NikkeW . " ", NikkeY + 0.799 * NikkeH . " ", NikkeX + 0.632 * NikkeW + 0.012 * NikkeW . " ", NikkeY + 0.799 * NikkeH + 0.023 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("点击领取")
FindText().Click(X, Y, "L")
}
Confirm
GoBack
}
}
UserMove(1858, 615, scrRatio)
Send "{WheelDown 30}"
Sleep 1000
}
AddLog("===排名奖励任务结束===")
BackToHall
}
;endregion 方舟排名奖励
;region 每日任务收取
Mission() {
BackToHall
AddLog("===每日任务奖励领取开始===")
while (ok := FindText(&X, &Y, NikkeX + 0.874 * NikkeW . " ", NikkeY + 0.073 * NikkeH . " ", NikkeX + 0.874 * NikkeW + 0.011 * NikkeW . " ", NikkeY + 0.073 * NikkeH + 0.019 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 3000
}
else {
AddLog("每日任务奖励已领取")
AddLog("===每日任务奖励领取结束===")
return
}
while true {
while !(ok := FindText(&X, &Y, NikkeX + 0.548 * NikkeW . " ", NikkeY + 0.864 * NikkeH . " ", NikkeX + 0.548 * NikkeW + 0.093 * NikkeW . " ", NikkeY + 0.864 * NikkeH + 0.063 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("灰色的全部"), , , , , , , TrueRatio, TrueRatio)) {
UserClick(2412, 1905, scrRatio)
Sleep 1000
}
if (ok := FindText(&X, &Y, NikkeX + 0.354 * NikkeW . " ", NikkeY + 0.154 * NikkeH . " ", NikkeX + 0.354 * NikkeW + 0.292 * NikkeW . " ", NikkeY + 0.154 * NikkeH + 0.023 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("浅红点"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
else break
}
AddLog("===每日任务奖励领取结束===")
BackToHall
}
;endregion 每日任务收取
;region 剧情活动
;tag 小活动
Session() {
BackToHall
if (ok := FindText(&X, &Y, NikkeX + 0.645 * NikkeW . " ", NikkeY + 0.719 * NikkeH . " ", NikkeX + 0.645 * NikkeW + 0.123 * NikkeW . " ", NikkeY + 0.719 * NikkeH + 0.131 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("作战出击的击"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y + 100 * TrueRatio, "L")
}
Text := "|<挑战>*200$42.vxrzzyznwrznyPnwrznyPngrTnyT00qTkCT0kkzlyRnkkzns0nwrznsDnwrznyTkwnzVyRUsky0CN3kkSSD3nVqSzD3ndrSzD7ntryzDDntryzCCnnrC0A6nXnC08UXDkST9lU"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , , , , , , TrueRatio, TrueRatio)) {
Confirm
Send "{]}"
}
AddLog("===剧情活动任务开始===")
AddLog("尝试完成挑战任务")
Text := "|<挑战>*200$42.vxrzzyznwrznyPnwrznyPngrTnyT00qTkCT0kkzlyRnkkzns0nwrznsDnwrznyTkwnzVyRUsky0CN3kkSSD3nVqSzD3ndrSzD7ntryzDDntryzCCnnrC0A6nXnC08UXDkST9lU"
if (ok := FindText(&X := "wait", &Y := 5, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 3000
Text红 := "|<红色的关卡的循环图标>B40000-0.70$61.00000000000000000000000000000000000000000000000000000000000000000000000000001U000000000w000000000TU0000003zzsDzs0001zzz7zw0000zzzvzy0000Tzztzz0000DzzkzzU0007kTU07k0003sD003s0001w7001w0000y2000y0000T0000T0000DU000DU0007k0007k0003s0063s0001w00D1w0000y00TUy0000T00TkT0000DzkzzzU0007ztzzzk0003zwzzzs0001zy7zzw0000000zU000000007k000000001s000000000A00000000000000000000000000000000000000000000000000004"
Text黄 := "|<黄色的关卡的循环图标>F5A317-0.60$49.0000000000000000000000000000000000000000000000000000A00000007U0000003w00000Dzz1zy00DzzszzU07zzyTzk03zzyDzs01zzw7zw00y3w00y00T1s00T00DUk00DU07k0007k03s0003s01w0001w00y0000y00T000kT00DU01sDU07k03w7k03s03y3s01zy7zzw00zzDzzy00TzXzzz00DzkTzz000007w0000000y0000000700000000U000000000000000001"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text红, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
else if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text黄, , 0, , , , 3, TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
Text := "|<快速战斗的图标>*194$29.UD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0Ty0w1zs3k7zUD0Ty0w1zs3k7zUD0Ty0w1zs3k7zUD0Ty0w1zs3k7zs"
if (ok := FindText(&X := "wait", &Y := 1, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("快速战斗已激活")
FindText().Click(X, Y, "L")
Text := "|<进行战斗的战斗>*186$45.zzrzzzbzbwPzzwTszWDyDXz3wMzUwTs3X7y1Xz0ARzwATs1VbzvXz3s0TTwTsy07kzXz7k9y3wTsTlbsDXs0C8zlwT01k7zTXs0C1zzs07lkDzk00yD3w0007lsz003syC6M1wT01U3zzXs000TzwT0047zzXsy1kzzwTzzzDzzbw"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
Text := "|<左上角的挑战>*110$38.ls7yT7wS1z7kD607kwF000w16k00T0Ea207ss1lU3yS0QC1z7Ui30D061001k1UEE0A0MC44H763l15llVwMFAMM76AH040V30k00MFkAM66TzDzznU"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
AddLog("完成挑战任务")
}
else {
EnterToBattle
BattleSettlement
AddLog("完成挑战任务")
}
}
Text := "|<剧情活动>*200$73.zzvvyTzztzzrk3xxk0wS0y1vs1ayM0zC1z0xwynT7XzztzzwS0Ni00Dzwzzw10Ar3wzzwDzy0aSPX01lk0M1bH7Blzzwz3w1nc0ayw0zznzbtolnTQ0TztzrwsttjiTjzU3viQ04rr07xk1tnQ03vvXnwvww1C1txxk1wxyQ072wyys0ySTDDXX0QTQzST07zn3aSTiSDzU3zzX"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
GoBack
}
Text := "|<加成>*200$32.nzzzawzzztbDYw00UPjDbwqvntzRiwyNrPj0qxqvnBDRiwn7rPjAltqvrAyxixbCiMCTdbCvbr6"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y - 100 * TrueRatio, "L")
Sleep 1000
;Text := "|<离活动开始还剩下的剩下>*200$36.zbtzzzU7tzzzwztU00yTNznz01NznzyzNznzqbNzlzaXNzkTqbNzk7qrNznXalNznnwTNznzsDtznzsXtznzavtznziznznzyzXznzU"
;if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
; AddLog("困难未在开放期间,可以继续")
;}
UserClick(1662, 2013, scrRatio)
Sleep 1000
UserClick(1662, 2013, scrRatio)
Sleep 1000
UserClick(1662, 2013, scrRatio)
Sleep 1000
Text := "|<1-11>*100$53.y3zzzw7z1k7zzzUDs20Dzzw0T040Tzzs0y001zzzU3s0q3zzzA7n1w7zzzsDy3sDzzzkTw7kzzzzVzsT1zzzy3zUy3s07w7z1w7k0TsDy3sTU0zkzwDUz01z1zkT1zzzy3zUy3zzzw7z1wDzzzsTy7kTzzzUzsDUzzzz1zkT1zzzy3zUy7zzzwDz3sDzzzkTw7s"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("刷11关")
FindText().Click(X, Y, "L")
Text := "|<快速战斗的图标>*194$29.UD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0Ty0w1zs3k7zUD0Ty0w1zs3k7zUD0Ty0w1zs3k7zUD0Ty0w1zs3k7zs"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("快速战斗已激活")
FindText().Click(X, Y, "L")
Text := "|<MAX>*130$23.66CMAAQYMMt8klkFV1lX2HX64b649CA2GQM4Ysk91lUG399UWGH3YZa73XBiLM"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.15 * PicTolerance, 0.15 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("进行多倍率快速战斗")
FindText().Click(X, Y, "L")
Sleep 1000
}
Text := "|<进行战斗的战斗>*186$45.zzrzzzbzbwPzzwTszWDyDXz3wMzUwTs3X7y1Xz0ARzwATs1VbzvXz3s0TTwTsy07kzXz7k9y3wTsTlbsDXs0C8zlwT01k7zTXs0C1zzs07lkDzk00yD3w0007lsz003syC6M1wT01U3zzXs000TzwT0047zzXsy1kzzwTzzzDzzbw"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
AddLog("完成活动关卡")
}
else {
EnterToBattle
BattleSettlement
AddLog("完成活动关卡")
}
}
else {
AddLog("未找到第11关")
}
}
Text := "|<剧情活动>*200$73.zzvvyTzztzzrk3xxk0wS0y1vs1ayM0zC1z0xwynT7XzztzzwS0Ni00Dzwzzw10Ar3wzzwDzy0aSPX01lk0M1bH7Blzzwz3w1nc0ayw0zznzbtolnTQ0TztzrwsttjiTjzU3viQ04rr07xk1tnQ03vvXnwvww1C1txxk1wxyQ072wyys0ySTDDXX0QTQzST07zn3aSTiSDzU3zzX"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
GoBack
}
AddLog("===剧情活动任务结束===")
BackToHall
}
;tag 大活动
Festival() {
BackToHall
AddLog("===大活动任务开始===")
BackToHall
if (ok := FindText(&X, &Y, NikkeX + 0.645 * NikkeW . " ", NikkeY + 0.719 * NikkeH . " ", NikkeX + 0.645 * NikkeW + 0.123 * NikkeW . " ", NikkeY + 0.719 * NikkeH + 0.131 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("作战出击的击"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y + 100 * TrueRatio, "L")
Sleep 500
}
while !(ok := FindText(&X, &Y, NikkeX + 0.002 * NikkeW . " ", NikkeY + 0.002 * NikkeH . " ", NikkeX + 0.002 * NikkeW + 0.061 * NikkeW . " ", NikkeY + 0.002 * NikkeH + 0.053 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("活动地区"), , , , , , , TrueRatio, TrueRatio)) {
Confirm
}
AddLog("已进入活动地区")
AddLog("===签到===")
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.553 * NikkeW . " ", NikkeY + 0.781 * NikkeH . " ", NikkeX + 0.553 * NikkeW + 0.105 * NikkeW . " ", NikkeY + 0.781 * NikkeH + 0.058 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("签到"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X - 50 * TrueRatio, Y, "L")
Sleep 500
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.530 * NikkeW . " ", NikkeY + 0.915 * NikkeH . " ", NikkeX + 0.530 * NikkeW + 0.106 * NikkeW . " ", NikkeY + 0.915 * NikkeH + 0.049 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("全部领取的全部"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X + 50 * TrueRatio, Y, "L")
AddLog("点击全部领取")
}
Sleep 1000
Confirm
while !(ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.002 * NikkeW . " ", NikkeY + 0.002 * NikkeH . " ", NikkeX + 0.002 * NikkeW + 0.061 * NikkeW . " ", NikkeY + 0.002 * NikkeH + 0.053 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("活动地区"), , , , , , , TrueRatio, TrueRatio)) {
GoBack
Sleep 1000
}
AddLog("===刷挑战===")
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.356 * NikkeW . " ", NikkeY + 0.840 * NikkeH . " ", NikkeX + 0.356 * NikkeW + 0.107 * NikkeW . " ", NikkeY + 0.840 * NikkeH + 0.060 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("挑战"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X - 50 * TrueRatio, Y, "L")
Sleep 500
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.003 * NikkeW . " ", NikkeY + 0.005 * NikkeH . " ", NikkeX + 0.003 * NikkeW + 0.063 * NikkeW . " ", NikkeY + 0.005 * NikkeH + 0.050 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("挑战关卡"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("进入挑战关卡页面")
}
Sleep 1000
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.354 * NikkeW . " ", NikkeY + 0.344 * NikkeH . " ", NikkeX + 0.354 * NikkeW + 0.052 * NikkeW . " ", NikkeY + 0.344 * NikkeH + 0.581 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("红色的关卡的循环图标"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X + 50 * TrueRatio, Y, "L")
Sleep 1000
}
else if (ok := FindText(&X, &Y, NikkeX + 0.354 * NikkeW . " ", NikkeY + 0.344 * NikkeH . " ", NikkeX + 0.354 * NikkeW + 0.052 * NikkeW . " ", NikkeY + 0.344 * NikkeH + 0.581 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("黄色的关卡的循环图标"), , , , , , 3, TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
EnterToBattle
BattleSettlement
while !(ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.002 * NikkeW . " ", NikkeY + 0.002 * NikkeH . " ", NikkeX + 0.002 * NikkeW + 0.061 * NikkeW . " ", NikkeY + 0.002 * NikkeH + 0.053 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("活动地区"), , , , , , , TrueRatio, TrueRatio)) {
GoBack
Sleep 1000
}
AddLog("===刷11关===")
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.355 * NikkeW . " ", NikkeY + 0.719 * NikkeH . " ", NikkeX + 0.355 * NikkeW + 0.107 * NikkeW . " ", NikkeY + 0.719 * NikkeH + 0.062 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("STORY"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X - 50 * TrueRatio, Y, "L")
Sleep 500
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.002 * NikkeW . " ", NikkeY + 0.005 * NikkeH . " ", NikkeX + 0.002 * NikkeW + 0.060 * NikkeW . " ", NikkeY + 0.005 * NikkeH + 0.052 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("剧情活动"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("进入剧情活动页面")
}
else MsgBox("进入剧情活动超时")
Sleep 500
Confirm
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.453 * NikkeW . " ", NikkeY + 0.769 * NikkeH . " ", NikkeX + 0.453 * NikkeW + 0.040 * NikkeW . " ", NikkeY + 0.769 * NikkeH + 0.031 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("时间"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y - 50 * TrueRatio, "L")
}
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.003 * NikkeW . " ", NikkeY + 0.002 * NikkeH . " ", NikkeX + 0.003 * NikkeW + 0.054 * NikkeW . " ", NikkeY + 0.002 * NikkeH + 0.058 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("活动关卡"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("进入活动关卡页面")
Sleep 500
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.499 * NikkeW . " ", NikkeY + 0.523 * NikkeH . " ", NikkeX + 0.499 * NikkeW + 0.079 * NikkeW . " ", NikkeY + 0.523 * NikkeH + 0.089 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("REPEAT"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
EnterToBattle
BattleSettlement
}
}
while !(ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.002 * NikkeW . " ", NikkeY + 0.002 * NikkeH . " ", NikkeX + 0.002 * NikkeW + 0.061 * NikkeW . " ", NikkeY + 0.002 * NikkeH + 0.053 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("活动地区"), , , , , , , TrueRatio, TrueRatio)) {
GoBack
Sleep 1000
}
AddLog("===协同作战===")
if g_settings["Cooperate"] {
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.463 * NikkeW . " ", NikkeY + 0.895 * NikkeH . " ", NikkeX + 0.463 * NikkeW + 0.073 * NikkeW . " ", NikkeY + 0.895 * NikkeH + 0.043 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("协同作战的协同"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X - 50 * TrueRatio, Y, "L")
Sleep 500
}
if (ok := FindText(&X, &Y, NikkeX + 0.367 * NikkeW . " ", NikkeY + 0.796 * NikkeH . " ", NikkeX + 0.367 * NikkeW + 0.269 * NikkeW . " ", NikkeY + 0.796 * NikkeH + 0.040 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("捍卫者"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y - 50 * TrueRatio, "L")
}
CooperateBattle
while !(ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.002 * NikkeW . " ", NikkeY + 0.002 * NikkeH . " ", NikkeX + 0.002 * NikkeW + 0.061 * NikkeW . " ", NikkeY + 0.002 * NikkeH + 0.053 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("活动地区"), , , , , , , TrueRatio, TrueRatio)) {
GoBack
Sleep 1000
}
}
AddLog("===领取奖励===")
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.951 * NikkeW . " ", NikkeY + 0.230 * NikkeH . " ", NikkeX + 0.951 * NikkeW + 0.045 * NikkeW . " ", NikkeY + 0.230 * NikkeH + 0.072 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("任务的图标"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
while !(ok := FindText(&X, &Y, NikkeX + 0.548 * NikkeW . " ", NikkeY + 0.864 * NikkeH . " ", NikkeX + 0.548 * NikkeW + 0.093 * NikkeW . " ", NikkeY + 0.864 * NikkeH + 0.063 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("灰色的全部"), , , , , , , TrueRatio, TrueRatio)) {
UserClick(2412, 1905, scrRatio)
Sleep 1000
}
AddLog("===已领取全部奖励===")
AddLog("===大活动任务结束===")
BackToHall
}
;endregion 剧情活动
;region 通行证收取
;tag 查找通行证
Pass() {
BackToHall()
AddLog("===通行证任务开始===")
loop 4 {
t := 0
if (ok := FindText(&X, &Y, NikkeX + 0.988 * NikkeW . " ", NikkeY + 0.127 * NikkeH . " ", NikkeX + 0.988 * NikkeW + 0.010 * NikkeW . " ", NikkeY + 0.127 * NikkeH + 0.020 * NikkeH . " ", 0.4 * PicTolerance, 0.4 * PicTolerance, FindText().PicLib("红点"), , , , , , , TrueRatio, TrueRatio)) {
t := t + 1
AddLog("执行第" t "个通行证")
OnePass()
}
UserMove(3787, 369, scrRatio)
Click "Down"
UserMove(3458, 369, scrRatio)
Click "Up"
Sleep 500
}
AddLog("===通行证任务结束===")
BackToHall()
}
;tag 执行一次通行证
OnePass() {
UserClick(3633, 405, scrRatio)
loop 2 {
Sleep 1000
if A_Index = 1 {
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.498 * NikkeW . " ", NikkeY + 0.280 * NikkeH . " ", NikkeX + 0.498 * NikkeW + 0.145 * NikkeW . " ", NikkeY + 0.280 * NikkeH + 0.086 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("任务"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
}
if A_Index = 2 {
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.356 * NikkeW . " ", NikkeY + 0.278 * NikkeH . " ", NikkeX + 0.356 * NikkeW + 0.145 * NikkeW . " ", NikkeY + 0.278 * NikkeH + 0.070 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("奖励"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
}
while !(ok := FindText(&X, &Y, NikkeX + 0.429 * NikkeW . " ", NikkeY + 0.903 * NikkeH . " ", NikkeX + 0.429 * NikkeW + 0.143 * NikkeW . " ", NikkeY + 0.903 * NikkeH + 0.050 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("灰色的全部"), , , , , , , TrueRatio, TrueRatio)) {
UserClick(2168, 2020, scrRatio) ;点领取
Sleep 200
UserClick(2168, 2020, scrRatio) ;点领取
Sleep 200
UserClick(2168, 2020, scrRatio) ;点领取
Sleep 200
}
}
BackToHall()
}
;endregion 通行证收取
;region 招募
;tag 每日免费招募
FreeRecruit() {
BackToHall()
AddLog("===每日免费招募开始===")
Text每天免费 := "|<每天免费>*156$64.wzzzzzbzz9zU0s03w1z00S01U0DU7zmNnzzyTwQzk0601ztzU07Abs07zby00Q00t6S00QttwNna9s01nba3aE01z3z00Q03167wDw03s0DgNzUTz9zbAw03wMzsbSNnk07Xky6Qt0TztsTVUs20kTyDbzbDUMTsU"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text每天免费, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
AddLog("进入招募页面")
Sleep 1000
while (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text每天免费, , 0, , , , , TrueRatio, TrueRatio)) {
Text每日免费 := "|<每日免费>*122$73.szzs07z3zw00s01w01z07y00A00y00z03zU04TzzDwT3XzU0001zbyD007k0200Dnz7U01s00U07szXkkkw00MlXw01wQwS3W0E0y00y00C1l800D7wT007U04007byDk07s03a6Tnz7z0zwtll07tzXz2TyQss01w01z3DDA0w00y00y3X7UEDz1z00S3k30S3zVzbzDjw3Vzt"
if (ok := FindText(&X := "wait", &Y := 2, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.3 * PicTolerance, 0.3 * PicTolerance, Text每日免费, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("进行招募")
FindText().Click(X, Y, "L")
Recruit()
}
else {
;点击翻页
Sleep 1000
UserClick(3774, 1147, scrRatio)
Sleep 1000
}
}
}
AddLog("===每日免费招募结束===")
UserClick(1929, 1982, scrRatio) ;点击大厅
}
;endregion 招募
;region 协同作战
Cooperate() {
BackToHall
AddLog("===协同作战任务开始===")
;把鼠标移动到活动栏
UserMove(150, 257, scrRatio)
Text := "|<COOP的P>*40$40.00000Q000001U00000A000001U00000A000001U00000A000001U00000A000003U000Dzw00E0zzU0303zw00Q0C0003k0s000T03U003w0C000Tk0s003z03U00Tw0C003zk0s00Tz03U03zw0Dzzzzk0zzzzz03zzzzw0Dzzzzk0zzzzz03zzzzw0Dzzzzk0zzzzz03zzzzw0Dzzzzk0zzzzz03zzzzw0Dzzzzs"
while true {
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
break
}
else {
AddLog("尝试滑动左上角的活动栏")
Send "{WheelDown 3}"
Sleep 500
}
if (A_Index > 15) {
AddLog("未能找到协同作战")
return
}
}
CooperateBattle
AddLog("===协同作战任务结束===")
BackToHall
}
CooperateBattle() {
while true {
if (ok := FindText(&X := "wait", &Y := 10, NikkeX + 0.851 * NikkeW . " ", NikkeY + 0.750 * NikkeH . " ", NikkeX + 0.851 * NikkeW + 0.134 * NikkeW . " ", NikkeY + 0.750 * NikkeH + 0.068 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("开始匹配的开始"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 500
}
else {
AddLog("协同作战次数已耗尽或未在开放时间")
AddLog("===协同作战任务结束===")
return
}
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.508 * NikkeW . " ", NikkeY + 0.600 * NikkeH . " ", NikkeX + 0.508 * NikkeW + 0.120 * NikkeW . " ", NikkeY + 0.600 * NikkeH + 0.053 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , , , , , , TrueRatio, TrueRatio)) {
AddLog("协同作战次数已耗尽")
return
}
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.375 * NikkeW . " ", NikkeY + 0.436 * NikkeH . " ", NikkeX + 0.375 * NikkeW + 0.250 * NikkeW . " ", NikkeY + 0.436 * NikkeH + 0.103 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("普通"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 500
}
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.373 * NikkeW . " ", NikkeY + 0.644 * NikkeH . " ", NikkeX + 0.373 * NikkeW + 0.253 * NikkeW . " ", NikkeY + 0.644 * NikkeH + 0.060 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("确认"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
while true {
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.511 * NikkeW . " ", NikkeY + 0.660 * NikkeH . " ", NikkeX + 0.511 * NikkeW + 0.106 * NikkeW . " ", NikkeY + 0.660 * NikkeH + 0.054 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("白色的圆圈加勾"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.444 * NikkeW . " ", NikkeY + 0.915 * NikkeH . " ", NikkeX + 0.444 * NikkeW + 0.112 * NikkeW . " ", NikkeY + 0.915 * NikkeH + 0.052 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("准备"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
break
}
}
BattleSettlement
sleep 5000
}
}
;endregion 协同作战
;region 单人突击
SoloRaid() {
BackToHall
AddLog("===单人突击任务开始===")
Text := "|<单人突击的图标>*101$54.zU3w0D303z01s0D301z00s0C301z00k06200y00k06600y3kkw467Uy3UUw447Vy7UUwAA71w7VUs8AD1w710088D3s0100MMC3s0300MMS3s0700EES7s023kkkS7k063Ukkw7kQ67UUUw7kw47VVUwDUwA71VVsDUsAD11VsDVs8D3100T1sMC3300z1kMS2301z3kES6203z7ksy6607zzUzw7zzzzzVzwDzzzzzbzwzzzzzzjztzzzzzU"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
else {
AddLog("不在单人突击活动时间")
AddLog("===单人突击任务结束===")
return
}
Text := "|<左上角的单人突击>*112$73.syDzVzzkzzwTwT7zkzs00TyDy73zsTw00700400TwDy003U0200Dy7z4Qlk01667z3zUA3zszU03zVzsDUzsDk01zUTwQEs008kkzkDzy1y00400Ts3zy0T11200DsFz001llny7zsMTU00sss001wC7zUTwQQ000wD1zU7yCA000MDkT0Uz007wTwDw61s3U03yDyDzb1z3k01"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
Text := "|<奖励内容的图标>*183$30.zkT3zzWSFzzbAxzzjgwzzbVxzzXVlzzkn3zU0001bzUztDzVzwDzVzw00000TzVzyTzVzyTzVzyTzVzyTzVzyTzVzyTzVzyTzVzy00000U0001bzVztbzVztbzVztbzVztbzVztbzVztbzVztbzVztbzVztk0001U"
Confirm
Text方舟 := "|<方舟的图标>*200$57.0000w00000003zzU000003zzzk00003zzzzU0000zzzzz0000Tzzzzz0007zzzzzw003zzxzzzk00zzw7bzz00Dzz0wDzw03zzk7UTzk0Tzs0w1zz07zz0Tk7zw1zzkDzUzzkDzy3zy3zz3zzUzzkTzsTzw7zz3zzbzzzzzsDzyTzzzzzzzznzzzzzzzzzDzxzzzzzztzzUzzzzzz7zy7zz1zzsTzkTzsTzy3zz1zy3zzUDzs7zUTzw0zzUDk7zz03zy0w1zzk0Dzs7UTzy00zzkw7zzU03zz7Vzzs00Dzzzzzy000zzzzzz0001zzzzzk0003zzzzs00007zzzw000007zzy0000007zw000U"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text方舟, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("单人突击活动已结束")
AddLog("===单人突击任务结束===")
return
}
}
;选中第七关
UserClick(2270, 231, scrRatio)
Sleep 1000
while True {
Text := "|<左上角的单人突击>*112$73.syDzVzzkzzwTwT7zkzs00TyDy73zsTw00700400TwDy003U0200Dy7z4Qlk01667z3zUA3zszU03zVzsDUzsDk01zUTwQEs008kkzkDzy1y00400Ts3zy0T11200DsFz001llny7zsMTU00sss001wC7zUTwQQ000wD1zU7yCA000MDkT0Uz007wTwDw61s3U03yDyDzb1z3k01"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
Confirm
}
Sleep 1000
Text := "|<快速战斗的图标>*194$29.UD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0TzUD0Ty0w1zs3k7zUD0Ty0w1zs3k7zUD0Ty0w1zs3k7zUD0Ty0w1zs3k7zs"
if (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("快速战斗已激活")
FindText().Click(X, Y, "L")
Sleep 1000
Text := "|<MAX>*130$23.66CMAAQYMMt8klkFV1lX2HX64b649CA2GQM4Ysk91lUG399UWGH3YZa73XBiLM"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.15 * PicTolerance, 0.15 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("进行多倍率快速战斗")
FindText().Click(X, Y, "L")
Sleep 1000
}
Text := "|<进行战斗>*200$93.zzzzzzzzzzzzzzrxzbbzbzzzbwTzzwTXwszss07wzWTyTXwDb7yD01zbwNzkwTlsET3zzzwTXDz3XzQ00szzzzUCTzwQTzU0DCTzzw3XzzzXzz37zXzzzbw0zzwTzwszsM07wy07lzXsDb7z600zbkDy3wT1sMTls07sznjwDXw800sDz7w0SMzlwTlU071zsz03lDzzXyD77sDz7swS1zzw0ltsztzsz7nkTzs06CD7zDz7syT3y001lVsztzszDnsz003yCT7zDz7syS6s7wTUrxztzsz1XUnzzXs0TwzDz7s080zzwTC007tz0z00A7zzXvy00zDsDtyPkzzwTzzzzxzzzzzzzzzrw"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
AddLog("===单人突击任务结束===")
BackToHall
return
}
Text := "|<挑战>*180$55.szbDzzzkzwTV3zwTsNyDkVzy7w8z7sEzz3y4DXY8FzVz320048Tk1VX0020Ts0kzU010Dw0M0E20UDy7k0C3UE7z3s07Xk87zVw03kS4Dzky0rs723y01sEk3V0T00w8E10U7U0S0M30E1k0D0A2080sS7UDVU48QDXk7sk66S7lw7wR33T3sy2yD1VbVsS3D7Uklk0C03XUsMs040210w0Q00010kS0C0030kQzUD3snkszzwTzzzww"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
else {
AddLog("已无挑战次数,返回")
AddLog("===单人突击任务结束===")
BackToHall
return
}
Text := "|<确认的图标>*184$34.zy03zzzU07zzs00zzz0Tzzzs7zzvz1zzz7sDzzsD1zzz1wDzzsDVzzz1y7zzsDkzzz1z3zzsDwDzz1zlyTsDz7kz1zwT1sDzly31zk7w0Dz0Ts1zw0zkDzl3zVzz6DzDzsMTzzzXkzzzwD3zzzVy7zzw7wDzzUzkDzw7zkDz0zzU007zz001zzz00TzzzkDzy"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
Sleep 3000
Text := "|<进入战斗>*200$109.zzzzzzzzzzbzbzzzwTtzXXzzbzzzlzXjzzyDsTlkzzVzzzszlXzlz7y7ssTzkTzzwTslzsDXzVsQDzw7zzyDwQTy1lztU00zz1zzz0CDzzUszzk00TzkzzzU7bzzwwTzw00TzwDzzkzV3zzyDzzlkzzw3zzsz00yTz7zzssTzy1zzwT01z3zXw3wQDzz0TzyDkDzUTly0yC7zzUDzz7z7Ts7szUE00TzV3zw0DX7z3wTw800Dzklzw03lXzvyDyC007zksTy01sXzzz7z7lsTzsS7z7sw1zzz03XswDzsT3zXwT1zzs01lsS7zsDkzlyDUzs001ssT3zsDsDsz7kzU00TwADVzwDy3wTXsPk1yDw7DtzwDzUyDlsAtzz7w0zzzs7zsD00k4TzzXw8001s7zy3U0E0DzzlyD000wDzzXk00MDzzszjs00TDzztsz4w7zzwTzzzzzzzzzzzzzbzzyTs"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
BattleSettlement()
}
}
AddLog("===单人突击任务结束===")
BackToHall
}
;endregion 单人突击
;region 其他限时活动
;tag 德雷克·反派之路
RoadToVillain() {
BackToHall()
AddLog("===反派之路任务开始===")
Text := "|<ROAD>*200$29.zzzznzzzy3zzwtbztlnCDbVaEC73BaNA6HQaPAYtAqN9WPgWOAq11kNw270XNYSN6bzxm9DznY5zy7AzzwCTzzzU"
while (ok := FindText(&X := "wait", &Y := 3, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 1000
}
else {
AddLog("===找不到反派之路任务===")
return
}
loop 3 {
if A_Index = 1 {
Text := "|<任务>*181$41.1U103U03Uz0D00Dzz0zzkTzs3zzVvz0Tzy7US0zXsD0w0rzUy1s0Tz3w3kDzzvzzyTsznzzwQQ33zzs0w070w1zzwC1s3zzsQ3k0T3ks7U0w71nzw7kC3bztzDw7DzlsTkC0030T2"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("点击任务")
FindText().Click(X, Y, "L")
Sleep 1000
}
}
if A_Index = 2 {
Text := "|<周任务>*183$62.7zz0Q1s0s03zzs7zz0TzUzzy3zzkDzwDzzUzzkDzz3XlsSTk7yTUzzyDUw1zzkDzzbsD0Bzs3zxty3k7zzszzyTzztzzzDzzXzzyTwzXzzsTzzX7U0vzS7zzkzzwSzrVsD0Dzz7jxsS3k3zzlvrS7Uw07kwQzrUsDU3sDDDzsCzzXw7nnny3jztyTsMET0vzyS3w003UC0000Q2"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("点击周任务")
FindText().Click(X, Y, "L")
Sleep 1000
}
}
if A_Index = 3 {
Text := "|<奖励>*181$40.3VU0031CD0DzQCtzszxkzzzXzr1jwSC0Q1vvkzzzTXy3zzzyDkDzzyzy0z1rnjU3zbQCs0TyRk3U1rtrzzzbRbTzzyRytzzztrvb0zU7zyQTzUTjlzwTtzzyzUzjzttk0Q/Mb8"
if (ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1 * PicTolerance, 0.1 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("点击奖励")
FindText().Click(X, Y, "L")
Sleep 1000
}
}
Text := "|<灰色的全部领取>*170$81.zrzzbzzxzzzzzzwTzwz0zDU707zzVzw0s7sy0s107lbz07Qy3xzbA0wSDwsvbrDjwvX67szrjRww0DUSw1zUytvD9wsw3rcDw7nDPzjjbaSNs07s0PDxxgwvnDwDz03Rw3hbaTNznzzzvbkBgw3sTyTzzzQznhbWT3w0Dw0vbyRgwlwTU1zU7QzrVba7Xznzwwv7kzDs0sTyTzjbNyDsz0C1znzwsvztyNzlX400DU7TzbbbzQwU"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("点击全部领取")
UserClick(1662, 2013, scrRatio)
Sleep 500
}
Text := "|<活动结束>*150$67.byDztzbnzwzsUDUQzXsy00SuDzyTnU300Dzjzw1nQDzbzzXzy0FDDw06A040n873w03Xsz0ta60SQtzyznwnbzzCQzyDtivUzzU0TM0xqRUM3s0D4yQlCvwtz0zaTC06Tywz07bDb77D1SS4lnU3zW61UCCQ/k1zv3jk7DDg"
while !(ok := FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2 * PicTolerance, 0.2 * PicTolerance, Text, , 0, , , , , TrueRatio, TrueRatio)) {
AddLog("点击全部领取")
UserClick(1662, 2013, scrRatio)
Sleep 500
}
Sleep 1000
}
AddLog("===反派之路任务结束===")
BackToHall()
}
;endregion 其他限时活动
;region 妙妙工具
;tag 剧情模式
StoryMode(*) {
Initialization
WriteSettings
while True {
while (ok := FindText(&X, &Y, NikkeX + 0.936 * NikkeW . " ", NikkeY + 0.010 * NikkeH . " ", NikkeX + 0.936 * NikkeW + 0.051 * NikkeW . " ", NikkeY + 0.010 * NikkeH + 0.025 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("SKIP的图标"), , , , , , , TrueRatio, TrueRatio)) {
if (ok := FindText(&X, &Y, NikkeX + 0.361 * NikkeW . " ", NikkeY + 0.638 * NikkeH . " ", NikkeX + 0.361 * NikkeW + 0.018 * NikkeW . " ", NikkeY + 0.638 * NikkeH + 0.282 * NikkeH . " ", 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("1"), , , , , , , TrueRatio, TrueRatio)) {
if !g_settings["StoryModeAutoChoose"] {
if (ok := FindText(&X, &Y, NikkeX + 0.361 * NikkeW . " ", NikkeY + 0.638 * NikkeH . " ", NikkeX + 0.361 * NikkeW + 0.018 * NikkeW . " ", NikkeY + 0.638 * NikkeH + 0.282 * NikkeH . " ", 0.1 * PicTolerance, 0.1 * PicTolerance, FindText().PicLib("2"), , , , , , , TrueRatio, TrueRatio)) {
continue
}
}
Sleep 800
Send "{1}"
Sleep 500
}
if (ok := FindText(&X, &Y, NikkeX + 0.785 * NikkeW . " ", NikkeY + 0.004 * NikkeH . " ", NikkeX + 0.785 * NikkeW + 0.213 * NikkeW . " ", NikkeY + 0.004 * NikkeH + 0.071 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("AUTO"), , , , , , , TrueRatio, TrueRatio)) {
Send "{LShift Down}"
Sleep 500
Send "{LShift Up}"
Click NikkeX + NikkeW, NikkeY + NikkeH, 0
}
}
if g_settings["StoryModeAutoStar"] {
Sleep 3000
while (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.353 * NikkeW . " ", NikkeY + 0.319 * NikkeH . " ", NikkeX + 0.353 * NikkeW + 0.293 * NikkeW . " ", NikkeY + 0.319 * NikkeH + 0.361 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("灰色的星星"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 500
}
}
if (ok := FindText(&X := "wait", &Y := 3, NikkeX + 0.500 * NikkeW . " ", NikkeY + 0.514 * NikkeH . " ", NikkeX + 0.500 * NikkeW + 0.139 * NikkeW . " ", NikkeY + 0.514 * NikkeH + 0.070 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("记录播放的播放"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
Sleep 500
FindText().Click(X, Y, "L")
Sleep 2000
}
if !WinActive(nikkeID) {
MsgBox "窗口未聚焦,程序已终止"
Pause
}
}
}
TestMode(BtnTestMode, Info) {
; 获取 TestModeEditControl 文本框中的内容
funcName := TestModeEditControl.Value
; 检查函数名是否为空
if (funcName = "") {
MsgBox("请输入要执行的函数名!")
return
}
; 尝试动态调用函数
Initialization()
%funcName%() ; 无参数调用
}
;endregion 妙妙工具
;region 快捷键
;tag 关闭程序
^1:: {
ExitApp
}
;tag 暂停程序
^2:: {
try {
if g_settings["AdjustSize"] {
AdjustSize(OriginalW, OriginalH)
}
}
Pause
}
;tag 初始化并调整窗口大小
^3:: {
Initialization()
AdjustSize(2331, 1311)
}
^4:: {
Initialization()
AdjustSize(1920, 1080)
}
^5:: {
initialization()
AddLog("===领取奖励===")
if (ok := FindText(&X := "wait", &Y := 1, NikkeX + 0.951 * NikkeW . " ", NikkeY + 0.230 * NikkeH . " ", NikkeX + 0.951 * NikkeW + 0.045 * NikkeW . " ", NikkeY + 0.230 * NikkeH + 0.072 * NikkeH . " ", 0.2 * PicTolerance, 0.2 * PicTolerance, FindText().PicLib("任务的图标"), , , , , , , TrueRatio, TrueRatio)) {
FindText().Click(X, Y, "L")
}
while !(ok := FindText(&X, &Y, NikkeX + 0.548 * NikkeW . " ", NikkeY + 0.864 * NikkeH . " ", NikkeX + 0.548 * NikkeW + 0.093 * NikkeW . " ", NikkeY + 0.864 * NikkeH + 0.063 * NikkeH . " ", 0.3 * PicTolerance, 0.3 * PicTolerance, FindText().PicLib("灰色的全部"), , , , , , , TrueRatio, TrueRatio)) {
UserClick(2412, 1905, scrRatio)
Sleep 1000
}
}
^9:: {
;添加基本的依赖
Initialization()
;下面写要调试的函数
AdjustSize(1920, 1080)
}
;tag 调试指定函数
^0:: {
;添加基本的依赖
Initialization()
;下面写要调试的函数
; AdjustSize(1280, 720)
; AdjustSize(1920, 1080)
AdjustSize(2331, 1311)
}
;endregion 快捷键