DoroHelper/DoroHelper.ahk

2815 lines
96 KiB
AutoHotkey
Raw Normal View History

#Requires AutoHotkey >=v2.0
2024-08-28 17:35:49 +08:00
#Include %A_ScriptDir%\lib\github.ahk
2024-08-18 14:40:04 +08:00
CoordMode "Pixel", "Client"
CoordMode "Mouse", "Client"
2024-07-16 17:27:29 +08:00
;操作间隔(单位:毫秒)
2024-08-18 13:17:53 +08:00
sleepTime := 1500
2024-07-16 17:27:29 +08:00
scrRatio := 1.0
;consts
stdScreenW := 3840
stdScreenH := 2160
2024-08-17 13:28:37 +08:00
waitTolerance := 50
2024-07-16 17:27:29 +08:00
colorTolerance := 15
2025-04-27 17:32:34 +08:00
currentVersion := "v0.1.23"
2024-08-28 17:35:49 +08:00
usr := "kyokakawaii"
repo := "DoroHelper"
2025-04-27 17:32:34 +08:00
;颜色判断
IsSimilarColor(targetColor, color) {
2024-07-16 17:27:29 +08:00
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))
;MsgBox tr tg tb pr pg pb
distance := sqrt((tr - pr) ** 2 + (tg - pg) ** 2 + (tb - pb) ** 2)
if (distance < colorTolerance)
return true
return false
}
2025-04-27 17:32:34 +08:00
;检查更新
CheckForUpdateHandler(isManualCheck) {
global currentVersion, usr, repo ; 确保能访问全局变量
try {
latestObj := Github.latest(usr, repo)
if (currentVersion != latestObj.version) {
userResponse := MsgBox( ; 发现新版本
"DoroHelper存在更新版本:`n"
"`nVersion: " latestObj.version
"`nNotes:`n"
. latestObj.change_notes
"`n`n是否下载?", , "36") ; 0x24 = Yes/No + Question Icon
if (userResponse = "Yes") {
; 用户选择下载
downloadTempName := "DoroDownload.exe" ; 临时文件名
finalName := "DoroHelper-" latestObj.version ".exe"
try {
Github.Download(latestObj.downloadURLs[1], A_ScriptDir "\" downloadTempName)
; 下载成功后重命名
FileMove(A_ScriptDir "\" downloadTempName, A_ScriptDir "\" finalName, 1) ; 1 = overwrite
MsgBox("新版本已下载至当前目录: " finalName, "下载完成")
ExitApp ; 下载完成后退出当前脚本
} catch as downloadError {
MsgBox("下载失败,请检查网络。`n(" downloadError.Message ")", "下载错误", "IconX")
; 删除临时文件
if FileExist(A_ScriptDir "\" downloadTempName)
FileDelete(A_ScriptDir "\" downloadTempName)
}
}
2025-04-27 17:32:34 +08:00
; else 用户选择不下载,什么也不做
} else {
; 没有新版本
if (isManualCheck) { ; 只有手动检查时才提示
MsgBox("当前Doro已是最新版本。", "检查更新")
2024-08-28 17:35:49 +08:00
}
}
2025-04-27 17:32:34 +08:00
} catch as githubError {
; 只有手动检查时才提示连接错误,自动检查时静默失败
if (isManualCheck) {
MsgBox("检查更新失败无法连接到Github或仓库信息错误。`n(" githubError.Message ")", "检查更新错误", "IconX")
2024-09-19 21:08:33 +08:00
}
}
}
2025-04-27 17:32:34 +08:00
ClickOnCheckForUpdate(*) {
CheckForUpdateHandler(true) ; 调用核心函数,标记为手动检查
}
;坐标转换-点击
UserClick(sX, sY, k) {
2024-10-15 21:27:55 +08:00
uX := Round(sX * k)
uY := Round(sY * k)
2024-07-16 17:27:29 +08:00
Send "{Click " uX " " uY "}"
}
2025-04-27 17:32:34 +08:00
;坐标转换-颜色
UserCheckColor(sX, sY, sC, k) {
2024-07-16 17:27:29 +08:00
loop sX.Length {
2024-10-15 21:27:55 +08:00
uX := Round(sX[A_Index] * k)
uY := Round(sY[A_Index] * k)
2024-07-16 17:27:29 +08:00
uC := PixelGetColor(uX, uY)
if (!IsSimilarColor(uC, sC[A_Index]))
return 0
}
return 1
}
2025-04-27 17:32:34 +08:00
;判断自动按钮颜色
isAutoOff(sX, sY, k) {
2024-10-15 21:27:55 +08:00
uX := Round(sX * k)
uY := Round(sY * k)
uC := PixelGetColor(uX, uY)
r := Format("{:d}", "0x" . substr(uC, 3, 2))
g := Format("{:d}", "0x" . substr(uC, 5, 2))
b := Format("{:d}", "0x" . substr(uC, 7, 2))
if Abs(r - g) < 10 && Abs(r - b) < 10 && Abs(g - b) < 10
return true
return false
}
2025-04-27 17:32:34 +08:00
;检查自动瞄准和自动爆裂按钮颜色
CheckAutoBattle() {
2025-04-27 17:32:34 +08:00
static autoBurstOn := false
static autoAimOn := false
; 检查并开启自动瞄准 (Auto Aim)
2024-10-15 21:27:55 +08:00
if !autoAimOn && UserCheckColor([216], [160], ["0xFFFFFF"], scrRatio) {
2025-04-27 17:32:34 +08:00
; 如果自动瞄准按钮是灰色/关闭状态
2024-10-15 21:27:55 +08:00
if isAutoOff(60, 57, scrRatio) {
2025-04-27 17:32:34 +08:00
UserClick(60, 71, scrRatio) ; 点击开启自动瞄准
2024-10-15 21:27:55 +08:00
Sleep sleepTime
}
2025-04-27 17:32:34 +08:00
autoAimOn := true ; 设置标志位,表示已尝试开启或已开启
2024-10-15 21:27:55 +08:00
}
2025-04-27 17:32:34 +08:00
; 检查并开启自动爆裂 (Auto Burst)
if !autoBurstOn && UserCheckColor([216], [160], ["0xFFFFFF"], scrRatio) { ; 假设检查点与 Auto Aim 相同
; 如果自动爆裂按钮是灰色/关闭状态
2024-10-15 21:27:55 +08:00
if isAutoOff(202, 66, scrRatio) {
2025-04-27 17:32:34 +08:00
Send "{Tab}" ; 发送 Tab 键尝试开启自动爆裂
2024-10-15 21:27:55 +08:00
Sleep sleepTime
}
2025-04-27 17:32:34 +08:00
autoBurstOn := true ; 设置标志位,表示已尝试开启或已开启
2024-10-15 21:27:55 +08:00
}
}
2025-04-27 17:32:34 +08:00
;登录
Login() {
2024-07-16 17:27:29 +08:00
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2024-09-07 21:01:33 +08:00
if UserCheckColor([1973, 1969], [1368, 1432], ["0x00ADFB", "0x00ADFB"], scrRatio) {
UserClick(2127, 1400, scrRatio)
Sleep sleepTime
}
2024-09-19 21:08:33 +08:00
if UserCheckColor([1965, 1871], [1321, 1317], ["0x00A0EB", "0xF7F7F7"], scrRatio) {
UserClick(2191, 1350, scrRatio)
Sleep sleepTime
}
2024-10-01 15:25:14 +08:00
if UserCheckColor([1720, 2111], [1539, 1598], ["0x00AEFF", "0x00AEFF"], scrRatio) {
UserClick(1905, 1568, scrRatio)
Sleep sleepTime
}
2024-10-15 21:27:55 +08:00
if A_Index > waitTolerance * 50 {
2024-07-16 17:27:29 +08:00
MsgBox "登录失败!"
ExitApp
}
}
}
2025-04-27 17:32:34 +08:00
;返回大厅
BackToHall() {
2024-08-17 11:27:31 +08:00
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
}
2024-07-16 17:27:29 +08:00
;1: 防御前哨基地奖励
OutpostDefence() {
2025-04-27 17:32:34 +08:00
; --- 函数开始 --- (移除了 Start: 标签)
2024-07-16 17:27:29 +08:00
stdTargetX := 1092
stdTargetY := 1795
2025-04-27 17:32:34 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio) ; 点击进入前哨基地
2024-07-16 17:27:29 +08:00
Sleep sleepTime
2025-04-27 17:32:34 +08:00
; 等待进入前哨基地的标准检查点
2024-07-16 17:27:29 +08:00
stdCkptX := [1500, 1847]
stdCkptY := [1816, 1858]
desiredColor := ["0xF8FCFD", "0xF7FCFD"]
2025-04-27 17:32:34 +08:00
loopCounter := 0 ; 独立的循环计数器
2024-07-16 17:27:29 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2025-04-27 17:32:34 +08:00
loopCounter += 1
if loopCounter > waitTolerance { ; 使用独立的计数器判断超时
MsgBox "进入防御前哨失败! (超时)"
2024-07-16 17:27:29 +08:00
ExitApp
}
2025-04-27 17:32:34 +08:00
if loopCounter > 10 { ; 尝试次数过多,可能卡住
MsgBox "进入防御前哨尝试次数过多,退出。"
; 可以选择是否在退出前尝试返回大厅
ExitApp
2024-08-17 11:27:31 +08:00
}
2024-07-16 17:27:29 +08:00
}
2025-04-27 17:32:34 +08:00
; 点击 "一举歼灭" 按钮
2024-07-16 17:27:29 +08:00
stdTargetX := 1686
stdTargetY := 1846
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2025-04-27 17:32:34 +08:00
; 等待 "一举歼灭" 界面加载完成(通过检查点消失判断)
stdCkptX := [1500, 1847] ; 使用与进入时相同的检查点
2024-07-16 17:27:29 +08:00
stdCkptY := [1816, 1858]
desiredColor := ["0xF8FCFD", "0xF7FCFD"]
2025-04-27 17:32:34 +08:00
loopCounter := 0 ; 重置计数器
2024-07-16 17:27:29 +08:00
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
2025-04-27 17:32:34 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio) ; 持续点击直到界面变化
2024-07-16 17:27:29 +08:00
Sleep sleepTime
2025-04-27 17:32:34 +08:00
loopCounter += 1
if loopCounter > waitTolerance {
MsgBox "进入一举歼灭失败! (超时)"
2024-07-16 17:27:29 +08:00
ExitApp
}
2025-04-27 17:32:34 +08:00
if loopCounter > 10 {
MsgBox "进入一举歼灭尝试次数过多,退出。"
ExitApp
2024-08-17 11:27:31 +08:00
}
2024-07-16 17:27:29 +08:00
}
2025-04-27 17:32:34 +08:00
; 检查是否有免费扫荡次数 (按钮非灰色)
sweepCkptX := [1933]
sweepCkptY := [1648]
sweepGrayColor := ["0xE9ECF0"] ; 灰色按钮颜色
if !UserCheckColor(sweepCkptX, sweepCkptY, sweepGrayColor, scrRatio) {
; --- 如果有免费次数,执行扫荡 ---
sweepTargetX := 2093 ; 扫荡按钮 X
sweepTargetY := 1651 ; 扫荡按钮 Y
UserClick(sweepTargetX, sweepTargetY, scrRatio)
2024-07-16 17:27:29 +08:00
Sleep sleepTime
2025-04-27 17:32:34 +08:00
sweepConfirmCkptX := [1933] ; 扫荡确认界面检查点 X
sweepConfirmCkptY := [1648] ; 扫荡确认界面检查点 Y
sweepConfirmColor := ["0x11ADF5"] ; 扫荡确认界面特征颜色
loopCounter := 0 ; 重置计数器
while UserCheckColor(sweepConfirmCkptX, sweepConfirmCkptY, sweepConfirmColor, scrRatio) {
UserClick(sweepTargetX, sweepTargetY, scrRatio) ; 持续点击扫荡按钮直到确认界面消失
2024-07-16 17:27:29 +08:00
Sleep sleepTime
2025-04-27 17:32:34 +08:00
; 检查并处理可能的次级弹窗 (例如资源不足提示)
2024-08-17 11:27:31 +08:00
if UserCheckColor([2088], [1327], ["0x00A0EB"], scrRatio) {
2025-04-27 17:32:34 +08:00
UserClick(2202, 1342, scrRatio) ; 点击次级弹窗确认
Sleep sleepTime ; 等待次级弹窗消失
2024-08-17 11:27:31 +08:00
}
2025-04-27 17:32:34 +08:00
loopCounter += 1
if loopCounter > 10 { ; 设置扫荡确认的超时次数
MsgBox "扫荡确认超时,退出。"
ExitApp
2024-08-17 11:27:31 +08:00
}
2024-07-16 17:27:29 +08:00
}
}
2025-04-27 17:32:34 +08:00
popupCkptX := [2356]
popupCkptY := [1870]
popupDesiredColor := ["0x0EAFF4"]
popupTargetX := 2156
popupTargetY := 1846
popupLoopCounter := 0 ; 为此弹窗处理循环设置独立计数器
while !UserCheckColor(popupCkptX, popupCkptY, popupDesiredColor, scrRatio) {
UserClick(popupTargetX, popupTargetY, scrRatio) ; 点击确认按钮区域
Sleep sleepTime
; 检查并处理另一个可能的次级弹窗
if UserCheckColor([2088], [1327], ["0x00A0EB"], scrRatio) {
UserClick(2202, 1342, scrRatio) ; 点击次级弹窗的确认
Sleep sleepTime ; 等待次级弹窗消失
}
popupLoopCounter += 1
if popupLoopCounter > 10 { ; 设置一个合理的超时次数
MsgBox("处理弹窗超时,退出。")
ExitApp
2024-07-16 17:27:29 +08:00
}
}
2025-04-27 17:32:34 +08:00
; 点击 "获得奖励" 按钮
rewardTargetX := 2156
rewardTargetY := 1846
UserClick(rewardTargetX, rewardTargetY, scrRatio)
2024-07-16 17:27:29 +08:00
Sleep sleepTime
2025-04-27 17:32:34 +08:00
; 等待返回大厅
hallCkptX := [64]
hallCkptY := [470]
hallDesiredColor := ["0xFAA72C"]
loopCounter := 0 ; 重置计数器
while !UserCheckColor(hallCkptX, hallCkptY, hallDesiredColor, scrRatio) {
UserClick(rewardTargetX, rewardTargetY, scrRatio) ; 持续点击直到返回大厅
Sleep sleepTime
; 再次检查并处理可能的次级弹窗
2024-08-17 11:27:31 +08:00
if UserCheckColor([2088], [1327], ["0x00A0EB"], scrRatio) {
UserClick(2202, 1342, scrRatio)
2025-04-27 17:32:34 +08:00
Sleep sleepTime
2024-08-17 11:27:31 +08:00
}
2025-04-27 17:32:34 +08:00
loopCounter += 1
if loopCounter > waitTolerance { ; 使用全局超时容忍度
MsgBox("前哨基地防御奖励领取后返回大厅异常! (超时)")
2024-07-16 17:27:29 +08:00
ExitApp
}
}
}
;2: 付费商店每日每周免费钻
CashShop() {
2024-07-16 17:27:29 +08:00
;进入商店
2024-07-18 14:44:02 +08:00
stdTargetX := 1163
stdTargetY := 1354
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2024-08-17 11:27:31 +08:00
stdCkptX := [158, 199]
stdCkptY := [525, 439]
desiredColor := ["0x0DC2F4", "0x3B3E41"]
2024-07-16 17:27:29 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
if UserCheckColor([2047], [1677], ["0x00A0EB"], scrRatio) or UserCheckColor([2047], [1677], ["0x9A9B9A"],
scrRatio) {
2024-09-01 16:45:45 +08:00
UserClick(1789, 1387, scrRatio)
Sleep sleepTime
UserClick(1789, 1387, scrRatio)
Sleep sleepTime
UserClick(2144, 1656, scrRatio)
Sleep sleepTime
while UserCheckColor([2047], [1677], ["0x00A0EB"], scrRatio) {
UserClick(2144, 1656, scrRatio)
Sleep sleepTime
}
break
}
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
2024-08-19 00:03:33 +08:00
Sleep sleepTime
2024-08-31 14:50:44 +08:00
if UserCheckColor([2088], [1327], ["0x00A0EB"], scrRatio) {
UserClick(2202, 1342, scrRatio)
}
2024-07-16 17:27:29 +08:00
if A_Index > waitTolerance {
MsgBox "进入付费商店失败!"
ExitApp
}
}
2024-09-01 16:45:45 +08:00
Sleep sleepTime
2024-10-01 15:25:14 +08:00
if UserCheckColor([2047], [1677], ["0x00A0EB"], scrRatio) or UserCheckColor([2047], [1677], ["0x9A9B9A"], scrRatio) {
2024-09-01 16:45:45 +08:00
UserClick(1789, 1387, scrRatio)
Sleep sleepTime
UserClick(1789, 1387, scrRatio)
Sleep sleepTime
UserClick(2144, 1656, scrRatio)
Sleep sleepTime
while UserCheckColor([2047], [1677], ["0x00A0EB"], scrRatio) {
UserClick(2144, 1656, scrRatio)
Sleep sleepTime
}
}
2024-08-17 11:27:31 +08:00
delta := false
2024-10-01 15:25:14 +08:00
stdCkptX := [52]
stdCkptY := [464]
desiredColor := ["0xF7FCFD"]
2024-08-17 11:27:31 +08:00
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio)
delta := true
2024-07-16 17:27:29 +08:00
stdTargetX := 256
2024-08-17 11:27:31 +08:00
if delta
stdTargetX := 432
2024-07-16 17:27:29 +08:00
stdTargetY := 486
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [194]
2024-08-17 11:27:31 +08:00
if delta
stdCkptX := [373]
2024-07-16 17:27:29 +08:00
stdCkptY := [436]
desiredColor := ["0x0FC7F5"]
2024-08-17 11:27:31 +08:00
if delta
desiredColor := ["0x0BC7F4"]
2024-07-16 17:27:29 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入礼包页面失败!"
ExitApp
}
}
2024-10-15 21:27:55 +08:00
stdCkptX := [514]
stdCkptY := [1018]
desiredColor := ["0xF2F8FC"]
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
stdTargetX := stdTargetX - 172
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
}
2024-10-01 15:25:14 +08:00
del := 336
stdCkptX := [1311]
stdCkptY := [612]
desiredColor := ["0xA0A0AC"]
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio)
del := 0
2024-07-16 17:27:29 +08:00
;每日
2024-10-01 15:25:14 +08:00
stdTargetX := 545 - del
2024-07-16 17:27:29 +08:00
stdTargetY := 610
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2024-10-01 15:25:14 +08:00
stdCkptX := [431 - del]
2024-07-16 17:27:29 +08:00
stdCkptY := [594]
desiredColor := ["0x0EC7F5"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入每日礼包页面失败!"
ExitApp
}
}
stdTargetX := 212
stdTargetY := 1095
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
;每周
2024-10-01 15:25:14 +08:00
stdTargetX := 878 - del
2024-07-16 17:27:29 +08:00
stdTargetY := 612
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2024-10-01 15:25:14 +08:00
stdCkptX := [769 - del]
2024-07-16 17:27:29 +08:00
stdCkptY := [600]
desiredColor := ["0x0CC8F4"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入每周礼包页面失败!"
ExitApp
}
}
stdTargetX := 212
stdTargetY := 1095
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
;每月
2024-10-01 15:25:14 +08:00
stdTargetX := 1211 - del
2024-07-16 17:27:29 +08:00
stdTargetY := 612
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2024-10-01 15:25:14 +08:00
stdCkptX := [1114 - del]
2024-07-16 17:27:29 +08:00
stdCkptY := [600]
desiredColor := ["0x0CC8F4"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入每月礼包页面失败!"
ExitApp
}
}
stdTargetX := 212
stdTargetY := 1095
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
;回到大厅
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "退出付费商店失败!"
ExitApp
}
}
}
2025-04-27 17:32:34 +08:00
;3: 免费商店 - 判断指定坐标的颜色对应哪种手册,并返回用户是否勾选了购买该手册
BuyThisBook(coor, k) {
2025-04-27 17:32:34 +08:00
global g_settings ; <--- 添加对全局 g_settings 的访问
2024-11-04 13:06:21 +08:00
uX := Round(coor[1] * k)
uY := Round(coor[2] * k)
uC := PixelGetColor(uX, uY)
2025-04-27 17:32:34 +08:00
; 将十六进制颜色代码转换为 RGB 十进制值
R := Format("{:d}", "0x" . SubStr(uC, 3, 2))
G := Format("{:d}", "0x" . SubStr(uC, 5, 2))
B := Format("{:d}", "0x" . SubStr(uC, 7, 2))
; 判断颜色并返回对应的 g_settings 值 (用户是否勾选了购买)
if (B > G and B > R) {
; 蓝色为主 -> 水冷手册 ("BookWater")
return g_settings["BookWater"] ;
}
if (G > R and G > B) {
; 绿色为主 -> 风压手册 ("BookWind")
return g_settings["BookWind"] ;
}
if (R > G and G > B and G > 80) {
; 铁甲手册 ("BookIron")
return g_settings["BookIron"] ;
}
if (R > B and B > G and B > 80) {
; 电击手册 ("BookElec")
return g_settings["BookElec"]
}
; 默认情况或主要是纯红色 -> 燃烧手册 ("BookFire")
return g_settings["BookFire"] ; (作为默认或纯红色的情况)
}
; 白嫖一次普通商店
ShopFreeClaim() {
local claimTargetX, claimTargetY, confirmCkptX, confirmCkptY, confirmColor, confirmTargetX, confirmTargetY,
shopCkptX, shopCkptY, shopColor, loopCounter ; 使用 local 避免污染全局
; --- 点击领取按钮 ---
claimTargetX := 383
claimTargetY := 1480
UserClick(claimTargetX, claimTargetY, scrRatio)
Sleep sleepTime
; --- 等待确认弹窗 ---
confirmCkptX := [2063]
confirmCkptY := [1821]
confirmColor := ["0x079FE4"]
loopCounter := 0
while !UserCheckColor(confirmCkptX, confirmCkptY, confirmColor, scrRatio) {
UserClick(claimTargetX, claimTargetY, scrRatio) ; 如果没等到,再点一下领取按钮
Sleep sleepTime // 2
loopCounter += 1
if loopCounter > waitTolerance {
MsgBox "普通商店免费领取:等待确认弹窗超时!"
ExitApp
}
2024-11-04 13:06:21 +08:00
}
2025-04-27 17:32:34 +08:00
; --- 点击确认按钮 ---
confirmTargetX := 2100
confirmTargetY := 1821
UserClick(confirmTargetX, confirmTargetY, scrRatio)
Sleep sleepTime
; --- 等待返回商店主界面 ---
shopCkptX := [118]
shopCkptY := [908]
shopColor := ["0xF99217"]
loopCounter := 0
while !UserCheckColor(shopCkptX, shopCkptY, shopColor, scrRatio) {
UserClick(confirmTargetX, confirmTargetY, scrRatio) ; 如果没等到,再点一下确认按钮
Sleep sleepTime // 2
loopCounter += 1
if loopCounter > waitTolerance {
MsgBox "普通商店免费领取:等待返回商店界面超时!"
ExitApp
}
2024-11-04 13:06:21 +08:00
}
2025-04-27 17:32:34 +08:00
; --- 单次免费领取完成 ---
2024-11-04 13:06:21 +08:00
}
FreeShop(numOfBook) {
2025-04-27 17:32:34 +08:00
global g_settings, isBoughtTrash, scrRatio, sleepTime, waitTolerance ; 确保访问全局变量
2024-07-16 17:27:29 +08:00
;进入商店
2024-07-18 14:44:02 +08:00
stdTargetX := 1193
stdTargetY := 1487
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2025-04-27 17:32:34 +08:00
shopCkptX := [118]
shopCkptY := [908]
shopDesiredColor := ["0xF99217"] ; 商店主界面特征颜色
loopCounter := 0
while !UserCheckColor(shopCkptX, shopCkptY, shopDesiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio) ; 点击进入商店
Sleep sleepTime
loopCounter += 1
if loopCounter > waitTolerance {
2024-07-16 17:27:29 +08:00
MsgBox "进入普通商店失败!"
ExitApp
}
}
2025-04-27 17:32:34 +08:00
; 检查第一次免费领取是否可用 (按钮非蓝色)
firstClaimCkptX := [349]
firstClaimCkptY := [1305]
firstClaimUsedColor := ["0x127CD7"] ; 领取过的按钮颜色
if !UserCheckColor(firstClaimCkptX, firstClaimCkptY, firstClaimUsedColor, scrRatio) {
ShopFreeClaim() ; 执行第一次免费领取
; 检查是否还有第二次免费次数 (刷新按钮是否有红点)
refreshCkptX := [697]
refreshCkptY := [949]
refreshAvailableColor := ["0xFB5C24"] ; 有免费刷新次数的红点颜色
if UserCheckColor(refreshCkptX, refreshCkptY, refreshAvailableColor, scrRatio) {
; --- 执行刷新操作 ---
refreshTargetX := 476
refreshTargetY := 981
UserClick(refreshTargetX, refreshTargetY, scrRatio) ; 点击刷新按钮
2024-07-16 17:27:29 +08:00
Sleep sleepTime
2025-04-27 17:32:34 +08:00
; 等待刷新确认弹窗
refreshPopupCkptX := [2133]
refreshPopupCkptY := [1345]
refreshPopupColor := ["0x00A0EB"]
loopCounter := 0 ; 重置计数器
while !UserCheckColor(refreshPopupCkptX, refreshPopupCkptY, refreshPopupColor, scrRatio) {
UserClick(refreshTargetX, refreshTargetY, scrRatio) ; 继续点刷新
2024-07-16 17:27:29 +08:00
Sleep sleepTime // 2
2025-04-27 17:32:34 +08:00
loopCounter += 1
if loopCounter > waitTolerance {
MsgBox "普通商店刷新:等待确认弹窗超时!"
2024-07-16 17:27:29 +08:00
ExitApp
}
}
2025-04-27 17:32:34 +08:00
; 点击刷新确认按钮
refreshConfirmX := 2221
refreshConfirmY := 1351
UserClick(refreshConfirmX, refreshConfirmY, scrRatio)
2024-07-16 17:27:29 +08:00
Sleep sleepTime
2025-04-27 17:32:34 +08:00
; 等待刷新完成,返回商店主界面
loopCounter := 0 ; 重置计数器
; 点击一个空白区域确保焦点不在按钮上,防止意外点击
fallbackClickX := 588
fallbackClickY := 1803
while !UserCheckColor(shopCkptX, shopCkptY, shopDesiredColor, scrRatio) {
UserClick(fallbackClickX, fallbackClickY, scrRatio) ; 点击空白区域
2024-07-16 17:27:29 +08:00
Sleep sleepTime // 2
2025-04-27 17:32:34 +08:00
loopCounter += 1
if loopCounter > waitTolerance {
MsgBox "普通商店刷新:确认后返回商店超时!"
2024-07-16 17:27:29 +08:00
ExitApp
}
}
2025-04-27 17:32:34 +08:00
Sleep 1000 ; 刷新后额外等待一下界面加载
ShopFreeClaim() ; 执行第二次免费领取
2024-07-16 17:27:29 +08:00
}
}
;废铁商店检查是否已经购买
stdTargetX := 137
stdTargetY := 1737
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [137]
stdCkptY := [1650]
desiredColor := ["0xFB931A"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "废铁商店进入异常!"
ExitApp
}
}
2024-07-18 14:06:18 +08:00
if sleepTime < 1500
Sleep 500
2024-07-16 17:27:29 +08:00
global isBoughtTrash
stdCkptX := [349]
stdCkptY := [1305]
desiredColor := ["0x137CD5"]
if !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
isBoughtTrash := 0
}
else {
isBoughtTrash := 1
}
;如果需要,则购买竞技场商店前三本书
2025-04-27 17:32:34 +08:00
if (numOfBook >= 1 or g_settings["CompanyWeapon"]) {
2024-07-16 17:27:29 +08:00
stdTargetX := 134
stdTargetY := 1403
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [134]
stdCkptY := [1316]
desiredColor := ["0xFA9318"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "竞技场商店进入异常!"
ExitApp
}
}
2024-07-18 14:06:18 +08:00
if sleepTime < 1500
Sleep 500
2024-07-16 17:27:29 +08:00
}
if numOfBook >= 1 {
;购买第一本书
;如果今天没买过
stdCkptX := [349]
stdCkptY := [1305]
desiredColor := ["0x127CD7"]
;如果今天没买过
2024-11-04 13:06:21 +08:00
if !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) and BuyThisBook([378, 1210], scrRatio) {
2024-07-16 17:27:29 +08:00
stdTargetX := 384
stdTargetY := 1486
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2067]
stdCkptY := [1770]
desiredColor := ["0x07A0E4"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "第一本书购买异常!"
ExitApp
}
}
stdTargetX := 2067
stdTargetY := 1770
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [134]
stdCkptY := [1316]
desiredColor := ["0xFA9318"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
2024-07-18 14:44:02 +08:00
if A_Index >= 2 {
stdTargetX := 2067
stdTargetY := 1970
}
2024-07-16 17:27:29 +08:00
if A_Index > waitTolerance {
MsgBox "第一本书购买异常!"
ExitApp
}
}
}
}
if numOfBook >= 2 {
;购买第二本书
;如果今天没买过
stdCkptX := [673]
stdCkptY := [1305]
desiredColor := ["0x137CD5"]
2024-11-04 13:06:21 +08:00
if !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) and BuyThisBook([702, 1210], scrRatio) {
2024-07-16 17:27:29 +08:00
stdTargetX := 702
stdTargetY := 1484
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2067]
stdCkptY := [1770]
desiredColor := ["0x07A0E4"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "第二本书购买异常!"
ExitApp
}
}
stdTargetX := 2067
stdTargetY := 1770
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [134]
stdCkptY := [1316]
desiredColor := ["0xFA9318"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
2024-07-18 14:44:02 +08:00
if A_Index >= 2 {
stdTargetX := 2067
stdTargetY := 1970
}
2024-07-16 17:27:29 +08:00
if A_Index > waitTolerance {
MsgBox "第二本书购买异常!"
ExitApp
}
}
}
}
if numOfBook >= 3 {
;购买第三本书
;如果今天没买过
stdCkptX := [997]
stdCkptY := [1304]
desiredColor := ["0x147BD4"]
2024-11-04 13:06:21 +08:00
if !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) and BuyThisBook([1025, 1210], scrRatio) {
2024-07-16 17:27:29 +08:00
stdTargetX := 1030
stdTargetY := 1485
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2067]
stdCkptY := [1770]
desiredColor := ["0x07A0E4"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "第三本书购买异常!"
ExitApp
}
}
stdTargetX := 2067
stdTargetY := 1770
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [134]
stdCkptY := [1316]
desiredColor := ["0xFA9318"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
2024-07-18 14:44:02 +08:00
if A_Index >= 2 {
stdTargetX := 2067
stdTargetY := 1970
}
2024-07-16 17:27:29 +08:00
if A_Index > waitTolerance {
MsgBox "第三本书购买异常!"
ExitApp
}
}
}
}
2025-04-27 17:32:34 +08:00
if g_settings["CompanyWeapon"] {
2024-08-26 13:58:09 +08:00
stdCkptX := [2011]
stdCkptY := [1213]
desiredColor := ["0xD65E46"]
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
stdTargetX := 2017
stdTargetY := 1485
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2067]
stdCkptY := [1770]
desiredColor := ["0x07A0E4"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "公司武器熔炉购买异常!"
ExitApp
}
}
stdTargetX := 2067
stdTargetY := 1770
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [134]
stdCkptY := [1316]
desiredColor := ["0xFA9318"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index >= 2 {
stdTargetX := 2067
stdTargetY := 1970
}
if A_Index > waitTolerance {
MsgBox "公司武器熔炉购买异常!"
ExitApp
}
}
}
}
2024-07-16 17:27:29 +08:00
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "退出免费商店失败!"
ExitApp
}
}
}
;4: 派遣
Expedition() {
2024-07-16 17:27:29 +08:00
;进入前哨基地
stdTargetX := 1169
stdTargetY := 1663
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入前哨基地失败!"
ExitApp
}
}
stdCkptX := [1907, 1963, 1838, 2034]
stdCkptY := [1817, 1852, 1763, 1877]
desiredColor := ["0xFFFFFF", "0xFFFFFF", "0x0B1219", "0x0B1219"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入前哨基地失败!"
ExitApp
}
}
;派遣公告栏
;收菜
stdTargetX := 2002
stdTargetY := 2046
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2113, 2119, 2387]
stdCkptY := [372, 399, 384]
desiredColor := ["0x404240", "0x404240", "0x404240"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入派遣失败!"
ExitApp
}
}
stdTargetX := 2268
stdTargetY := 1814
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
2024-08-22 13:32:10 +08:00
Sleep sleepTime
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
2024-08-22 13:32:10 +08:00
Sleep sleepTime
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2024-08-18 14:40:04 +08:00
Sleep 3000
2024-07-16 17:27:29 +08:00
;全部派遣
stdCkptX := [1869, 1977]
stdCkptY := [1777, 1847]
desiredColor := ["0xCFCFCF", "0xCFCFCF"]
;如果今天没派遣过
if !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
stdTargetX := 1930
stdTargetY := 1813
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2199, 2055]
stdCkptY := [1796, 1853]
desiredColor := ["0x00ADFF", "0x00ADFF"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "全部派遣失败!"
ExitApp
}
2024-08-28 17:35:49 +08:00
if UserCheckColor([1779], [1778], ["0xCFCFCF"], scrRatio)
break
2024-07-16 17:27:29 +08:00
}
stdTargetX := 2073
stdTargetY := 1818
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2199, 2055]
stdCkptY := [1796, 1853]
desiredColor := ["0x00ADFF", "0x00ADFF"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "全部派遣失败!"
ExitApp
}
}
}
;回到大厅
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退出前哨基地失败!"
ExitApp
}
}
}
;5: 好友点数收取
FriendPoint() {
2024-07-16 17:27:29 +08:00
stdTargetX := 3729
2024-09-19 21:08:33 +08:00
stdTargetY := 553
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
2024-08-17 11:27:31 +08:00
Sleep sleepTime
2024-07-16 17:27:29 +08:00
if A_Index > waitTolerance {
MsgBox "进入好友界面失败!"
ExitApp
}
}
stdCkptX := [2104, 2197]
stdCkptY := [1825, 1838]
desiredColor := ["0x0CAFF4", "0xF7FDFE"]
stdTargetX := 2276
stdTargetY := 1837
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) && !UserCheckColor([2104, 2054], [1825, 1876], [
"0x8B8788", "0x8B8788"], scrRatio) {
2024-09-15 11:46:23 +08:00
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入好友界面失败!"
ExitApp
}
}
2024-07-16 17:27:29 +08:00
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
2024-08-17 11:27:31 +08:00
Sleep sleepTime
2024-07-16 17:27:29 +08:00
if A_Index > waitTolerance {
MsgBox "赠送好友点数失败"
ExitApp
}
}
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退出好友界面失败!"
ExitApp
}
}
}
;6: 模拟室5C
2025-04-27 17:32:34 +08:00
SimulationRoom() {
2024-07-16 17:27:29 +08:00
stdTargetX := 2689
stdTargetY := 1463
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
stdCkptX := [1641]
stdCkptY := [324]
desiredColor := ["0x01D4F6"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
;进入模拟室
stdTargetX := 1547
stdTargetY := 1138
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [1829, 2024]
stdCkptY := [1122, 1094]
desiredColor := ["0xF8FCFD", "0xF8FCFD"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入模拟室失败!"
ExitApp
}
}
;开始模拟
stdTargetX := 1917
stdTargetY := 1274
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2025-04-20 11:50:05 +08:00
stdCkptX := [2054, 2331]
stdCkptY := [719, 746]
desiredColor := ["0xF8FBFD", "0xF8FBFD"]
2024-07-16 17:27:29 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入选关失败!"
ExitApp
}
}
;选择5C
stdTargetX := 2127
stdTargetY := 1074
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
stdTargetX := 2263
stdTargetY := 1307
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
;点击开始模拟
;开始模拟
2025-04-20 11:50:05 +08:00
stdTargetX := 2216
2024-07-16 17:27:29 +08:00
stdTargetY := 1818
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2025-04-20 11:50:05 +08:00
stdCkptX := [1991]
stdCkptY := [1814]
desiredColor := ["0xFA801A"]
2024-07-16 17:27:29 +08:00
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "开始模拟失败!"
ExitApp
}
}
2025-04-20 11:50:05 +08:00
stdTargetX := 1903
stdTargetY := 1369
stdCkptX := [304]
stdCkptY := [179]
desiredColor := ["0x858289"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入buff选择页面失败"
ExitApp
}
}
stdCkptX := [1760]
yy := 2160
stdCkptY := [yy]
desiredColor := ["0xDFE1E1"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
yy := yy - 30
stdCkptY := [yy]
if A_Index > waitTolerance {
ExitApp
}
}
stdTargetX := 1760
stdTargetY := yy
stdCkptX := [2053]
stdCkptY := [1933]
desiredColor := ["0x2E77C1"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入战斗准备页面失败!"
ExitApp
}
}
2024-07-16 17:27:29 +08:00
;点击进入战斗
stdTargetX := 2225
stdTargetY := 2004
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
2024-09-14 12:18:23 +08:00
stdCkptX := [1420, 2335]
2024-07-16 17:27:29 +08:00
stdCkptY := [1243, 1440]
desiredColor := ["0xFFFFFF", "0xFE0203"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
;UserClick(stdTargetX, stdTargetY - 300, scrRatio)
2024-10-15 21:27:55 +08:00
CheckAutoBattle()
2024-07-16 17:27:29 +08:00
Sleep sleepTime
2025-04-20 11:50:05 +08:00
if A_Index > waitTolerance * 2 {
;MsgBox "模拟室boss战异常"
break
2024-07-16 17:27:29 +08:00
}
}
stdTargetX := 1898
stdTargetY := 1996
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2115]
stdCkptY := [1305]
stdCkptX2 := [2115]
stdCkptY2 := [1556]
desiredColor := ["0xEFF3F5"]
2025-04-27 17:32:34 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) && !UserCheckColor(stdCkptX2, stdCkptY2,
desiredColor, scrRatio) {
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "模拟室结束异常!"
ExitApp
}
}
2024-08-19 00:03:33 +08:00
if colorTolerance != 15 {
Sleep 5000
}
2024-07-16 17:27:29 +08:00
;点击模拟结束
stdTargetX := 1923
stdTargetY := 1276
if UserCheckColor(stdCkptX2, stdCkptY2, desiredColor, scrRatio) {
stdTargetX := 1923
stdTargetY := 1552
}
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
;退回大厅
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
}
;7: 新人竞技场打第三位顺带收50%以上的菜
2025-04-27 17:32:34 +08:00
RookieArena(times) {
2024-07-16 17:27:29 +08:00
;进入方舟
stdTargetX := 2689
stdTargetY := 1463
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
stdCkptX := [1641]
stdCkptY := [324]
desiredColor := ["0x01D4F6"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
;收pjjc菜
2024-07-19 12:06:58 +08:00
if sleepTime < 1500
Sleep 1000
2024-07-16 17:27:29 +08:00
stdTargetX := 2278
stdTargetY := 1092
UserClick(stdTargetX, stdTargetY, scrRatio)
2024-09-14 12:18:23 +08:00
Sleep sleepTime
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
stdTargetX := 2129
stdTargetY := 1920
UserClick(stdTargetX, stdTargetY, scrRatio)
2024-09-14 12:18:23 +08:00
Sleep sleepTime
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
;进入竞技场
stdTargetX := 2208
stdTargetY := 1359
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2025-04-20 22:25:43 +08:00
stdCkptX := [1641]
stdCkptY := [324]
desiredColor := ["0x01D4F6"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入竞技场失败!"
ExitApp
}
}
2024-07-16 17:27:29 +08:00
stdCkptX := [1683]
stdCkptY := [606]
desiredColor := ["0xF7FCFE"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入竞技场失败!"
ExitApp
}
}
;进入新人竞技场
stdTargetX := 1647
stdTargetY := 1164
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [784]
2024-08-17 11:27:31 +08:00
stdCkptY := [1201]
2024-07-16 17:27:29 +08:00
desiredColor := ["0xF8FCFE"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2024-08-17 11:27:31 +08:00
if A_Index > 5 {
;退回大厅
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
return
}
2024-07-16 17:27:29 +08:00
if A_Index > waitTolerance {
MsgBox "进入新人竞技场失败!"
ExitApp
}
}
loop times {
;点击进入战斗
2024-08-22 13:32:10 +08:00
stdTargetX := 2371
stdTargetY := 1847
2024-07-16 17:27:29 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2024-08-22 13:32:10 +08:00
stdCkptX := [2700]
stdCkptY := [1691]
desiredColor := ["0xF7FCFE"]
2024-07-16 17:27:29 +08:00
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "选择对手失败!"
ExitApp
}
}
;点击进入战斗
stdTargetX := 2123
stdTargetY := 1784
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2784]
stdCkptY := [1471]
desiredColor := ["0xF8FCFD"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "新人竞技场作战失败!"
ExitApp
}
}
}
;退回大厅
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
}
;8: 对前n位nikke进行好感度咨询(可以通过收藏把想要咨询的nikke排到前面)
NotAllCollection() {
2024-09-19 21:08:33 +08:00
stdCkptX := [2447]
stdCkptY := [1464]
desiredColor := ["0x444547"]
return UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio)
}
LoveTalking(times) {
2024-07-16 17:27:29 +08:00
;进入妮姬列表
stdTargetX := 1497
stdTargetY := 2004
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入妮姬列表失败!"
ExitApp
}
}
stdCkptX := [1466, 1814]
stdCkptY := [428, 433]
desiredColor := ["0x3B3C3E", "0x3B3C3E"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入妮姬列表失败!"
ExitApp
}
}
;进入咨询页面
stdTargetX := 3308
stdTargetY := 257
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [1650]
stdCkptY := [521]
desiredColor := ["0x14B0F5"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
;如果没次数了,直接退出
if UserCheckColor(stdCkptX, stdCkptY, ["0xE0E0E2"], scrRatio) {
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
return
}
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入咨询页面失败!"
ExitApp
}
}
;点进第一个妮姬
stdTargetX := 736
stdTargetY := 749
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [1504]
stdCkptY := [1747]
desiredColor := ["0xF99F22"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入妮姬咨询页面失败!"
ExitApp
}
}
loop times {
stdCkptX := [1994]
stdCkptY := [1634]
desiredColor := ["0xFA6E34"]
;如果能够快速咨询
2025-04-27 17:32:34 +08:00
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) && !(g_settings["LongTalk"] && NotAllCollection()) {
2024-07-16 17:27:29 +08:00
;点击快速咨询
stdTargetX := 2175
stdTargetY := 1634
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [1994]
stdCkptY := [1634]
desiredColor := ["0xFA6E34"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入妮姬咨询页面失败!"
ExitApp
}
}
;点击确定
stdTargetX := 2168
stdTargetY := 1346
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [1504]
stdCkptY := [1747]
desiredColor := ["0xF99F22"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "快速咨询失败!"
ExitApp
}
}
}
else {
;如果不能快速咨询
stdCkptX := [1982]
stdCkptY := [1819]
desiredColor := ["0x4A4A4C"]
if !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
stdTargetX := 2168
stdTargetY := 1777
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [1504]
stdCkptY := [1747]
desiredColor := ["0xF99F22"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "咨询失败!"
ExitApp
}
}
;点击确认
stdTargetX := 2192
stdTargetY := 1349
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2109]
stdCkptY := [1342]
desiredColor := ["0x00A0EB"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "咨询失败!"
ExitApp
}
}
stdCkptX := [1504]
stdCkptY := [1747]
desiredColor := ["0xF99F22"]
stdTargetX := 1903
stdTargetY := 1483
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
if Mod(A_Index, 2) == 0
UserClick(stdTargetX, stdTargetY, scrRatio)
else
UserClick(stdTargetX, 1625, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance * 2 {
MsgBox "咨询失败!"
ExitApp
}
}
}
}
if A_Index >= times
break
;翻页
stdTargetX := 3778
stdTargetY := 940
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [1982]
stdCkptY := [1819]
desiredColor := ["0x4A4A4C"]
numOfTalked := A_Index
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
2024-10-15 21:27:55 +08:00
if A_Index + numOfTalked >= times + 2
2024-07-16 17:27:29 +08:00
break 2
if A_Index > waitTolerance {
MsgBox "咨询失败!"
ExitApp
}
}
}
;退回大厅
stdTargetX := 333
stdTargetY := 2041
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
}
;9: 爬塔一次(做每日任务)
TribeTower() {
2024-07-16 17:27:29 +08:00
stdTargetX := 2689
stdTargetY := 1463
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
stdCkptX := [1641]
stdCkptY := [324]
desiredColor := ["0x01D4F6"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
;进入无限之塔
stdTargetX := 2278
stdTargetY := 776
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2405]
stdCkptY := [1014]
desiredColor := ["0xF8FBFE"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入无限之塔失败!"
ExitApp
}
}
stdTargetX := 1953
stdTargetY := 934
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2129, 2305]
stdCkptY := [1935, 1935]
desiredColor := ["0x2E77C2", "0x2E77C2"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "选择作战失败!"
ExitApp
}
}
stdTargetX := 2242
stdTargetY := 2001
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2129, 2305]
stdCkptY := [1935, 1935]
desiredColor := ["0x2E77C2", "0x2E77C2"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入作战失败!"
ExitApp
}
}
;按esc
stdCkptX := [2065]
stdCkptY := [1954]
desiredColor := ["0x238CFD"]
stdTargetX := 3780
stdTargetY := 75
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "按esc失败"
ExitApp
}
}
;按放弃战斗
stdCkptX := [2065]
stdCkptY := [1954]
desiredColor := ["0x238CFD"]
stdTargetX := 1678
stdTargetY := 1986
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "放弃战斗失败!"
ExitApp
}
}
;退回大厅
stdTargetX := 301
stdTargetY := 2030
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
}
MissionCompleted() {
2024-09-06 10:37:12 +08:00
stdCkptX := [3451, 3756]
stdCkptY := [2077, 2075]
desiredColor := ["0x00A1FF", "0x00A1FF"]
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio)
return true
else
return false
}
MissionFailed() {
2024-09-08 12:25:26 +08:00
stdCkptX := [2306, 1920, 1590, 1560]
stdCkptY := [702, 1485, 1489, 1473]
2024-11-03 13:42:04 +08:00
desiredColor1 := ["0xB71013", "0xE9E9E7", "0x161515", "0xE9E9E7"]
desiredColor2 := ["0xAD080B", "0xE9E9E7", "0x161515", "0xE9E9E7"]
if UserCheckColor(stdCkptX, stdCkptY, desiredColor1, scrRatio) or UserCheckColor(stdCkptX, stdCkptY, desiredColor2,
scrRatio)
2024-09-06 10:37:12 +08:00
return true
else
return false
}
MissionEnded() {
2024-09-08 12:25:26 +08:00
stdCkptX := [3494, 3721, 3526, 3457, 3339, 3407]
stdCkptY := [2086, 2093, 2033, 2043, 2040, 2043]
desiredColor := ["0x6F6F6F", "0x6F6F6F", "0x030303", "0x434343", "0xE6E6E6", "0x000000"]
2024-09-06 10:37:12 +08:00
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio)
return true
else
return false
}
2025-04-27 17:32:34 +08:00
;输出失败的企业塔
2024-09-06 10:37:12 +08:00
failedTower := Array()
CompanyTowerInfo() {
2024-09-06 10:37:12 +08:00
info := ""
loop failedTower.Length {
info := info failedTower[A_Index] " "
}
if info != "" {
info := "`n" info "已经爬不动惹dororo..."
}
return info
}
;10: 企业塔
CompanyTower() {
2024-09-06 10:37:12 +08:00
stdTargetX := 2689
stdTargetY := 1463
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
stdCkptX := [1641]
stdCkptY := [324]
desiredColor := ["0x01D4F6"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
;进入无限之塔
stdTargetX := 2278
stdTargetY := 776
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [2405]
stdCkptY := [1014]
desiredColor := ["0xF8FBFE"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入无限之塔失败!"
ExitApp
}
}
Sleep 1500
;尝试进入每座企业塔
targX := [1501, 1779, 2061, 2332]
targY := [1497, 1497, 1497, 1497]
ckptX := [1383, 1665, 1935, 2222]
ckptY := [1925, 1925, 1925, 1925]
loop targX.Length {
i := A_Index
stdTargetX := targX[i]
stdTargetY := targY[i]
stdCkptX := [ckptX[i]]
stdCkptY := [ckptY[i]]
desiredColor := ["0x00AAF4"]
;如果未开放,则检查下一个企业
if !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio)
continue
;点击进入企业塔
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入企业塔失败!"
ExitApp
}
}
;直到成功进入企业塔
stdCkptX := [3738]
stdCkptY := [447]
desiredColor := ["0xF8FCFE"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入企业塔失败!"
ExitApp
}
}
;进入关卡页面
stdTargetX := 1918
stdTargetY := 919
stdCkptX := [992]
stdCkptY := [2011]
desiredColor := ["0x000000"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入企业塔关卡页面失败!"
ExitApp
}
}
;如果战斗次数已经用完
Sleep 1000
stdCkptX := [2038]
stdCkptY := [2057]
desiredColor := ["0x4D4E50"]
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
stdCkptX := [3738]
stdCkptY := [447]
desiredColor := ["0xF8FCFE"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Send "{Escape}"
Sleep sleepTime
}
stdCkptX := [2405]
stdCkptY := [1014]
desiredColor := ["0xF8FBFE"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio)
Sleep sleepTime
Sleep 1500
continue
}
;点击进入战斗
stdTargetX := 2249
stdTargetY := 1997
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
;等待战斗结束
WaitForBattleEnd:
2024-09-06 10:37:12 +08:00
while !(MissionCompleted() || MissionFailed() || MissionEnded()) {
2024-10-15 21:27:55 +08:00
CheckAutoBattle()
2024-09-06 10:37:12 +08:00
Sleep sleepTime
if A_Index > waitTolerance * 20 {
MsgBox "企业塔自动战斗失败!"
ExitApp
}
}
;如果战斗失败或次数用完
if MissionFailed() || MissionEnded() {
if MissionFailed() {
towerName := ""
global failedTower
switch i {
case 1:
towerName := "极乐净土塔"
case 2:
towerName := "米西利斯塔"
case 3:
towerName := "泰特拉塔"
case 4:
towerName := "朝圣者塔"
default:
towerName := ""
}
failedTower.Push towerName
}
Send "{Escape}"
Sleep sleepTime
while MissionFailed() || MissionEnded() {
Send "{Escape}"
Sleep sleepTime
}
stdCkptX := [3738]
stdCkptY := [447]
desiredColor := ["0xF8FCFE"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(3666, 1390, scrRatio)
Sleep sleepTime
if UserCheckColor([2088], [1327], ["0x00A0EB"], scrRatio) {
UserClick(2202, 1342, scrRatio)
Sleep sleepTime
}
}
2024-09-15 11:46:23 +08:00
Sleep 5000
2024-09-06 10:37:12 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(3666, 1390, scrRatio)
Sleep sleepTime
if UserCheckColor([2088], [1327], ["0x00A0EB"], scrRatio) {
UserClick(2202, 1342, scrRatio)
Sleep sleepTime
}
}
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Send "{Escape}"
Sleep sleepTime
}
stdCkptX := [2405]
stdCkptY := [1014]
desiredColor := ["0xF8FBFE"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio)
Sleep sleepTime
Sleep 1500
continue
}
;如果战斗胜利
while MissionCompleted() {
Send "t"
Sleep sleepTime
}
goto WaitForBattleEnd
}
;退回大厅
stdTargetX := 301
stdTargetY := 2030
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
}
;11: 进入异拦
Interception() {
2025-04-27 17:32:34 +08:00
global g_numeric_settings ;
2024-07-16 17:27:29 +08:00
stdTargetX := 2689
stdTargetY := 1463
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime // 2
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
stdCkptX := [1641]
stdCkptY := [324]
desiredColor := ["0x01D4F6"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入方舟失败!"
ExitApp
}
}
;进入拦截战
stdTargetX := 1781
stdTargetY := 1719
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [1641]
stdCkptY := [324]
desiredColor := ["0x01D4F6"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入拦截战失败!"
ExitApp
}
}
2024-09-19 21:08:33 +08:00
stdTargetX := 559
stdTargetY := 1571
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep 1000
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep 1000
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep 1000
2024-09-06 10:37:12 +08:00
;选择BOSS
2025-04-27 17:32:34 +08:00
switch g_numeric_settings["InterceptionBoss"] {
2024-09-06 10:37:12 +08:00
case 1:
stdTargetX := 1556
stdTargetY := 886
stdCkptX := [1907]
stdCkptY := [898]
desiredColor := ["0xFA910E"]
case 2:
stdTargetX := 2279
stdTargetY := 1296
stdCkptX := [1923]
stdCkptY := [908]
desiredColor := ["0xFB01F1"]
case 3:
stdCkptX := [1917]
stdCkptY := [910]
desiredColor := ["0x037EF9"]
case 4:
stdTargetX := 2281
stdTargetY := 899
stdCkptX := [1916]
stdCkptY := [907]
desiredColor := ["0x00F556"]
case 5:
stdTargetX := 1551
stdTargetY := 1299
stdCkptX := [1919]
stdCkptY := [890]
desiredColor := ["0xFD000F"]
default:
MsgBox "BOSS选择错误"
ExitApp
}
2024-09-19 21:08:33 +08:00
stdTargetX := 1556
stdTargetY := 886
2024-09-06 10:37:12 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
2024-09-19 21:08:33 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep 2000
2024-09-06 10:37:12 +08:00
if A_Index > waitTolerance {
MsgBox "选择BOSS失败"
ExitApp
}
}
;点击挑战按钮
if UserCheckColor([1735], [1730], ["0x28282A"], scrRatio) {
stdTargetX := 301
stdTargetY := 2030
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
return
}
stdTargetX := 1924
stdTargetY := 1779
stdCkptX := [1390]
stdCkptY := [1799]
desiredColor := ["0x01AEF3"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "点击挑战失败!"
ExitApp
}
}
;选择编队
2025-04-27 17:32:34 +08:00
switch g_numeric_settings["InterceptionBoss"] {
2024-09-06 10:37:12 +08:00
case 1:
stdTargetX := 1882
stdTargetY := 1460
stdCkptX := [1843]
stdCkptY := [1428]
case 2:
stdTargetX := 2020
stdTargetY := 1460
stdCkptX := [1981]
stdCkptY := [1428]
case 3:
stdTargetX := 2151
stdTargetY := 1460
stdCkptX := [2113]
stdCkptY := [1428]
case 4:
stdTargetX := 2282
stdTargetY := 1460
stdCkptX := [2248]
stdCkptY := [1428]
case 5:
stdTargetX := 2421
stdTargetY := 1460
stdCkptX := [2380]
stdCkptY := [1428]
default:
MsgBox "BOSS选择错误"
ExitApp
}
desiredColor := ["0x02ADF5"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep 1500
if A_Index > waitTolerance {
MsgBox "选择编队失败!"
ExitApp
}
}
;如果不能快速战斗,就进入战斗
stdCkptX := [1964]
stdCkptY := [1800]
desiredColor := ["0xF96B2F"]
if !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
stdTargetX := 2219
stdTargetY := 1992
stdCkptX := [1962]
stdCkptY := [1932]
desiredColor := ["0xD52013"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入战斗失败!"
ExitApp
}
}
;退出结算页面
stdTargetX := 904
stdTargetY := 1805
2024-09-14 12:18:23 +08:00
stdCkptX := [3731, 3713, 3638]
stdCkptY := [2040, 2034, 2091]
desiredColor := ["0xE6E6E6", "0xE6E6E6", "0x000000"]
2024-09-06 10:37:12 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
2024-10-15 21:27:55 +08:00
CheckAutoBattle()
2024-09-06 10:37:12 +08:00
Sleep sleepTime
if A_Index > waitTolerance * 20 {
MsgBox "自动战斗失败!"
ExitApp
}
}
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退出结算页面失败!"
ExitApp
}
}
}
;检查是否退出
stdCkptX := [1390]
stdCkptY := [1799]
desiredColor := ["0x01AEF3"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退出结算页面失败!"
ExitApp
}
}
;快速战斗
stdTargetX := 2229
stdTargetY := 1842
stdCkptX := [1964]
stdCkptY := [1800]
desiredColor := ["0xF96B2F"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "快速战斗失败!"
ExitApp
}
}
;退出结算页面
stdTargetX := 904
stdTargetY := 1805
2024-09-14 12:18:23 +08:00
stdCkptX := [2232, 2391, 2464]
stdCkptY := [2100, 2099, 2051]
desiredColor := ["0x000000", "0x000000", "0x000000"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "快速战斗结算失败!"
ExitApp
}
}
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退出结算页面失败!"
ExitApp
}
}
2024-09-06 10:37:12 +08:00
;检查是否退出
stdCkptX := [1390]
stdCkptY := [1799]
desiredColor := ["0x01AEF3"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退出结算页面失败!"
ExitApp
}
}
Sleep 1000
stdTargetX := 2229
stdTargetY := 1842
stdCkptX := [1964]
stdCkptY := [1800]
desiredColor := ["0xF96B2F"]
}
;退回大厅
stdTargetX := 301
stdTargetY := 2030
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退回大厅失败!"
ExitApp
}
}
2024-07-16 17:27:29 +08:00
}
;11: 邮箱收取
Mail() {
stdTargetX := 3667
stdTargetY := 81
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio) ;检测大厅点邮箱
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入邮箱失败!"
ExitApp
}
}
stdCkptX := [2085]
stdCkptY := [1809]
desiredColor := ["0xCAC7C4"] ;检测灰色的领取按钮
stdTargetX := 2085
stdTargetY := 1809
;Sleep sleepTime ;加载容错
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio) ;不是灰色就一直点全部领取
Sleep sleepTime
}
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
stdTargetX := 2394
stdTargetY := 291
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio) ;确认领取+返回直到回到大厅
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退出邮箱失败!"
ExitApp
}
}
}
;12: 任务收取
Mission() {
stdTargetX := 3341
stdTargetY := 206
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio) ;检测大厅点任务
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入任务失败!"
ExitApp
}
}
stdTargetX := 2286
stdTargetY := 1935
x0 := 1512 ;用于遍历任务
y0 := 395
while UserCheckColor([1365, 2087], [1872, 1997], ["0xF5F5F5", "0xF5F5F5"], scrRatio) { ;检测是否在任务界面
Sleep sleepTime
UserClick(x0, y0, scrRatio) ;点任务标题
2024-11-20 00:12:57 +08:00
Sleep sleepTime
if !UserCheckColor([1365, 2087], [1872, 1997], ["0xF5F5F5", "0xF5F5F5"], scrRatio) { ;退出
break
}
stdCkptX := [2276]
stdCkptY := [1899]
desiredColor := ["0x7B7C7B"]
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) { ;如果不是灰色就点
Sleep sleepTime
UserClick(stdTargetX, stdTargetY, scrRatio) ;点领取
}
x0 := x0 + 280 ;向右切换标题
}
}
2025-04-20 11:50:05 +08:00
;13: 通行证收取 兼容双通行证 兼容特殊活动
Pass() {
OnePass()
stdCkptX := [3395]
stdCkptY := [368]
stdCkptY1 := [468] ;活动可能偏移
desiredColor := ["0xFBFFFF"] ;白色的轮换按钮
stdTargetX := 3395
stdTargetY := 368
stdTargetY1 := 468
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) { ;如果轮换按钮存在
global PassRound
PassRound := 0
while (PassRound < 2) {
userClick(stdTargetX, stdTargetY, scrRatio) ;转一下
Sleep sleepTime
PassRound := PassRound + 1
stdCkptX := [3437]
stdCkptY := [338]
2025-04-20 11:50:05 +08:00
desiredColor := ["0xFE1809"] ;红点
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) { ;如果转出红点
Sleep sleepTime
userClick(stdTargetX, stdTargetY, scrRatio) ;再转一下
Sleep sleepTime
OnePass()
break
}
}
}
if UserCheckColor(stdCkptX, stdCkptY1, desiredColor, scrRatio) { ;检测是否偏移
global PassRound
PassRound := 0
while (PassRound < 2) {
userClick(stdTargetX, stdTargetY1, scrRatio) ;转一下
Sleep sleepTime
PassRound := PassRound + 1
stdCkptX := [3437]
stdCkptY := [438]
2025-04-20 11:50:05 +08:00
desiredColor := ["0xFE1809"] ;红点
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) { ;如果转出红点
Sleep sleepTime
userClick(stdTargetX, stdTargetY1, scrRatio) ;再转一下
Sleep sleepTime
OnePass()
break
}
}
}
}
OnePass() { ;执行一次通行证
2024-12-01 15:05:35 +08:00
stdTargetX := 3633
stdTargetY := 405
2024-12-01 15:05:35 +08:00
UserClick(stdTargetX, stdTargetY, scrRatio)
Sleep sleepTime
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
2024-12-01 15:05:35 +08:00
while UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio) ;检测大厅点通行证
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "进入通行证失败!"
ExitApp
}
}
stdCkptX := [1733]
stdCkptY := [699]
desiredColor := ["0xF1F5F6"]
stdTargetX := 2130
stdTargetY := 699
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) { ;左不是白则点右
UserClick(stdTargetX, stdTargetY, scrRatio)
2024-12-01 15:05:35 +08:00
Sleep sleepTime
}
stdCkptX := [1824]
stdCkptY := [1992]
desiredColor := ["0x7C7C7C"] ;检测灰色的全部领取
stdTargetX := 1824
stdTargetY := 1992
2024-12-01 15:05:35 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio) ;不是灰色就一直点领取
Sleep sleepTime
}
stdCkptX := [2130]
stdCkptY := [699]
desiredColor := ["0xF1F5F6"]
stdTargetX := 1733
stdTargetY := 699
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) { ;右不是白则点左
UserClick(stdTargetX, stdTargetY, scrRatio)
2024-12-01 15:05:35 +08:00
Sleep sleepTime
}
stdCkptX := [1824]
stdCkptY := [1992]
desiredColor := ["0x7C7C7C"] ;检测灰色的全部领取
stdTargetX := 1824
stdTargetY := 1992
2024-12-01 15:05:35 +08:00
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio) ;不是灰色就一直点领取
Sleep sleepTime
}
stdCkptX := [64]
stdCkptY := [470]
desiredColor := ["0xFAA72C"]
stdTargetX := 2418
stdTargetY := 185
while !UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
UserClick(stdTargetX, stdTargetY, scrRatio) ;确认领取+返回直到回到大厅
Sleep sleepTime
if A_Index > waitTolerance {
MsgBox "退出通行证失败!"
ExitApp
}
}
stdCkptX := [3395]
stdCkptY := [368]
desiredColor := ["0xFBFFFF"] ;检测是否多通行证
stdTargetX := 3395
stdTargetY := 368
if UserCheckColor(stdCkptX, stdCkptY, desiredColor, scrRatio) {
}
2024-12-01 15:05:35 +08:00
}
2025-04-27 17:32:34 +08:00
; 通用函数,用于切换 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])
2024-11-04 13:06:21 +08:00
}
ChangeOnNumOfBook(GUICtrl, *) {
2025-04-27 17:32:34 +08:00
global g_numeric_settings
g_numeric_settings["NumOfBook"] := GUICtrl.Value - 1
2024-07-16 17:27:29 +08:00
}
ChangeOnInterceptionBoss(GUICtrl, *) {
2025-04-27 17:32:34 +08:00
global g_numeric_settings
g_numeric_settings["InterceptionBoss"] := GUICtrl.Value
2024-09-06 10:37:12 +08:00
}
ChangeOnSleepTime(GUICtrl, *) {
2024-07-16 17:27:29 +08:00
global sleepTime
switch GUICtrl.Value {
case 1: sleepTime := 750
case 2: sleepTime := 1000
case 3: sleepTime := 1250
case 4: sleepTime := 1500
case 5: sleepTime := 1750
case 6: sleepTime := 2000
default: sleepTime := 1500
}
}
ChangeOnColorTolerance(GUICtrl, *) {
2024-08-19 00:03:33 +08:00
global colorTolerance
switch GUICtrl.Value {
case 1: colorTolerance := 15
case 2: colorTolerance := 35
default: colorTolerance := 15
}
}
ClickOnHelp(*) {
2024-08-18 21:26:47 +08:00
msgbox "
(
#############################################
使
Doro设置保持默认就好
Doro失控Ctrl + 1
Doro失控Ctrl + 1
Doro失控Ctrl + 1
#############################################
2024-10-15 21:27:55 +08:00
- -- + 16:9 16:9
2024-08-18 21:26:47 +08:00
- --
- --
-
- ****DoroHelper
2024-09-19 21:08:33 +08:00
- windows HDR显示
2024-08-18 21:26:47 +08:00
#############################################
2024-10-15 21:27:55 +08:00
-NIKKE启动器ACE反作弊系统扫完NIKKE主程序中央SHIFT UP logo出现之后DORO!Doro完成工作了
2024-08-19 00:19:37 +08:00
-DORO!
-使Doro
2024-08-18 21:26:47 +08:00
#############################################
其他:
2024-11-03 19:53:53 +08:00
2024-09-19 21:08:33 +08:00
-
2024-08-19 00:19:37 +08:00
-80%
-
2024-08-18 21:26:47 +08:00
)"
}
ClickOnDoro(*) {
2024-08-28 17:35:49 +08:00
WriteSettings()
2025-04-27 17:32:34 +08:00
global g_settings, g_numeric_settings ;
2024-08-28 21:47:39 +08:00
title := "勝利女神:妮姬"
2024-08-28 13:32:26 +08:00
try {
WinGetClientPos , , &userScreenW, &userScreenH, "勝利女神:妮姬"
2024-08-28 13:32:26 +08:00
} catch as err {
2024-09-08 12:25:26 +08:00
title := "ahk_exe nikke.exe"
2024-08-28 13:32:26 +08:00
}
2024-10-01 15:25:14 +08:00
numNikke := WinGetCount(title)
2024-11-03 19:53:53 +08:00
if numNikke = 0 {
MsgBox "未检测到NIKKE主程序"
ExitApp
}
2024-10-01 15:25:14 +08:00
loop numNikke {
nikkeID := WinGetIDLast(title)
WinGetClientPos , , &userScreenW, &userScreenH, nikkeID
2024-10-01 15:25:14 +08:00
global scrRatio
scrRatio := userScreenW / stdScreenW
;nikkeID := WinWait(title)
WinActivate nikkeID
Login() ;登陆到主界面
2025-04-27 17:32:34 +08:00
if g_settings["OutpostDefence"] ; 使用键名检查 Map
OutpostDefence()
if g_settings["CashShop"]
CashShop()
if g_settings["FreeShop"]
FreeShop(g_numeric_settings["NumOfBook"])
if g_settings["OutpostDefence"] ; 任务需要执行两次
OutpostDefence()
if g_settings["Expedition"]
Expedition()
if g_settings["FriendPoint"]
FriendPoint()
if g_settings["SimulationRoom"]
SimulationRoom()
if g_settings["RookieArena"]
RookieArena(g_numeric_settings["NumOfBattle"])
if g_settings["LoveTalking"]
LoveTalking(g_numeric_settings["NumOfLoveTalking"])
if g_settings["CompanyTower"] {
if g_settings["TribeTower"]
TribeTower() ; 执行每日任务版 (进塔就退)
else
CompanyTower() ; 执行完整爬塔版
} else if g_settings["TribeTower"] {
TribeTower() ; 即使 CompanyTower 未勾选,也要执行每日任务版
}
if g_settings["Interception"]
Interception()
if g_settings["Mail"]
Mail()
if g_settings["Mission"]
Mission()
if g_settings["Pass"]
Pass()
2024-10-01 15:25:14 +08:00
}
if isBoughtTrash == 0
2024-07-16 17:27:29 +08:00
MsgBox "协同作战商店似乎已经刷新了,快去看看吧"
2024-09-06 10:37:12 +08:00
MsgBox "Doro完成任务" CompanyTowerInfo()
;ExitApp
Pause
2024-07-16 17:27:29 +08:00
}
SleepTimeToLabel(sleepTime) {
2024-08-28 17:35:49 +08:00
return String(sleepTime / 250 - 2)
}
ColorToleranceToLabel(colorTolerance) {
2024-08-28 17:35:49 +08:00
switch colorTolerance {
case 15: return "1"
case 35: return "2"
default:
return "1"
}
}
IsCheckedToString(foo) {
2024-08-28 17:35:49 +08:00
if foo
return "Checked"
else
return ""
}
2025-04-27 17:32:34 +08:00
NumOfBookToLabel() {
global g_numeric_settings
return String(g_numeric_settings["NumOfBook"] + 1)
2024-08-28 17:35:49 +08:00
}
2025-04-27 17:32:34 +08:00
InterceptionBossToLabel() {
global g_numeric_settings
return String(g_numeric_settings["InterceptionBoss"])
2024-09-06 10:37:12 +08:00
}
WriteSettings(*) {
2025-04-27 17:32:34 +08:00
global g_settings, g_numeric_settings, sleepTime, colorTolerance
; 从 g_settings Map 写入开关设置
for key, value in g_settings {
IniWrite(value, "settings.ini", "Toggles", key)
2024-11-04 13:06:21 +08:00
}
2025-04-27 17:32:34 +08:00
for key, value in g_numeric_settings {
IniWrite(value, "settings.ini", "NumericSettings", key)
2024-11-04 13:06:21 +08:00
}
2025-04-27 17:32:34 +08:00
; 写入其他独立设置
IniWrite(sleepTime, "settings.ini", "Other", "sleepTime")
IniWrite(colorTolerance, "settings.ini", "Other", "colorTolerance")
}
2025-04-27 17:32:34 +08:00
LoadSettings() {
global g_settings, g_numeric_settings, sleepTime, colorTolerance
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)
; 确保读取的值是数字,如果不是则使用默认值
if IsNumber(readValue) {
g_numeric_settings[key] := Integer(readValue) ; 转换为整数
} else {
g_numeric_settings[key] := defaultValue
}
}
; 加载其他独立设置 (带默认值)
sleepTime := IniRead("settings.ini", "Other", "sleepTime", 1500)
colorTolerance := IniRead("settings.ini", "Other", "colorTolerance", 15)
2024-07-16 17:27:29 +08:00
}
2025-04-27 17:32:34 +08:00
SaveSettings(*) {
WriteSettings()
MsgBox "设置已保存!"
2024-08-19 00:03:33 +08:00
}
2025-04-27 17:32:34 +08:00
; 全局设置 Map 对象
global g_settings := Map(
"OutpostDefence", 1, ; 前哨基地防御
"CashShop", 1, ; 付费商店
"FreeShop", 1, ; 免费商店
"Expedition", 1, ; 派遣 (之前是 isCheckedExpedtion)
"FriendPoint", 1, ; 好友点数
"Mail", 1, ; 邮箱
"Mission", 1, ; 任务
"Pass", 1, ; 通行证
"SimulationRoom", 1, ; 模拟室
"RookieArena", 1, ; 新人竞技场
"LoveTalking", 1, ; 咨询
"CompanyWeapon", 0, ; 企业武器熔炉 (商店)
"Interception", 0, ; 拦截战
"CompanyTower", 1, ; 企业塔
"TribeTower", 0, ; 每日爬塔任务
"LongTalk", 1, ; 详细咨询 (若图鉴未满)
"AutoCheckUpdate", 0, ; 自动检查更新
"BookFire", 0, ; 手册:燃烧
"BookWater", 0, ; 手册:水冷
"BookWind", 0, ; 手册:风压
"BookElec", 0, ; 手册:电击
"BookIron", 0, ; 手册:铁甲
;"CheckBox",0 ; 简介个性化礼包
)
; 其他非简单开关的设置 Map 对象
global g_numeric_settings := Map(
"NumOfBook", 3, ; 购买手册数量
"NumOfBattle", 5, ; 新人竞技场次数
"NumOfLoveTalking", 10, ; 咨询次数
"InterceptionBoss", 1 ; 拦截战BOSS选择
)
global isBoughtTrash := 1 ; 检测废铁商店
;检测管理员身份
2024-10-01 15:25:14 +08:00
if !A_IsAdmin {
MsgBox "请以管理员身份运行Doro"
ExitApp
}
2024-08-28 17:35:49 +08:00
;读取设置
SetWorkingDir A_ScriptDir
2024-09-06 10:37:12 +08:00
try {
LoadSettings()
}
catch as err {
WriteSettings()
}
2025-04-27 17:32:34 +08:00
if g_settings["AutoCheckUpdate"] {
CheckForUpdateHandler(false) ; 调用核心函数,标记为非手动检查
}
/**
* 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, ToggleSetting ; 确保能访问全局 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
2024-09-19 21:08:33 +08:00
}
2024-07-16 17:27:29 +08:00
;创建gui
2024-08-28 17:35:49 +08:00
doroGui := Gui(, "Doro小帮手" currentVersion)
2024-11-05 12:50:10 +08:00
doroGui.Opt("+Resize")
doroGui.MarginY := Round(doroGui.MarginY * 0.9)
doroGui.SetFont("cred s12")
doroGui.Add("Text", "R1", "紧急停止按ctrl + 1 暂停按ctrl + 2")
doroGui.Add("Link", " R1", '<a href="https://github.com/kyokakawaii/DoroHelper"></a>')
2024-11-03 19:53:53 +08:00
doroGui.SetFont()
2024-11-17 14:18:02 +08:00
doroGui.Add("Button", "R1 x+10", "帮助").OnEvent("Click", ClickOnHelp)
doroGui.Add("Button", "R1 x+10", "检查更新").OnEvent("Click", ClickOnCheckForUpdate)
Tab := doroGui.Add("Tab3", "xm") ;由于autohotkey有bug只能这样写
2025-04-27 17:32:34 +08:00
Tab.Add(["设置", "收获", "商店", "日常", "默认"])
Tab.UseTab("设置")
AddCheckboxSetting(doroGui, "AutoCheckUpdate", "自动检查更新(确保能连上github)", "R2")
2025-04-20 11:50:05 +08:00
doroGui.Add("Text", , "点击间隔(单位毫秒),谨慎更改")
doroGui.Add("DropDownList", "Choose" SleepTimeToLabel(sleepTime), [750, 1000, 1250, 1500, 1750, 2000]).OnEvent("Change",
ChangeOnSleepTime)
doroGui.Add("Text", , "色差容忍度,能跑就别改")
doroGui.Add("DropDownList", "Choose" ColorToleranceToLabel(colorTolerance), ["严格", "宽松"]).OnEvent("Change",
ChangeOnColorTolerance)
doroGui.Add("Button", "R1", "保存当前设置").OnEvent("Click", SaveSettings)
2024-11-17 14:18:02 +08:00
Tab.UseTab("收获")
2025-04-27 17:32:34 +08:00
AddCheckboxSetting(doroGui, "OutpostDefence", "领取前哨基地防御奖励+1次免费歼灭", "R1.2")
AddCheckboxSetting(doroGui, "CashShop", "领取付费商店免费钻(进不了商店的别选)", "R1.2")
AddCheckboxSetting(doroGui, "Expedition", "派遣委托", "R1.2")
AddCheckboxSetting(doroGui, "FriendPoint", "好友点数收取", "R1.2")
AddCheckboxSetting(doroGui, "Mail", "邮箱收取", "R1.2")
AddCheckboxSetting(doroGui, "Mission", "任务收取", "R1.2")
AddCheckboxSetting(doroGui, "Pass", "通行证收取", "R1.2")
Tab.UseTab("商店")
doroGui.Add("Text", "R1.2 Section", "普通商店")
2025-04-27 17:32:34 +08:00
AddCheckboxSetting(doroGui, "FreeShop", "每日白嫖2次", "R1.2 xs+15")
doroGui.Add("Text", " R1.2 xs+15", "❌购买简介个性化礼包")
doroGui.Add("Text", "R1.2 xs", "竞技场商店")
doroGui.Add("Text", "R1.2 xs+15", "购买手册:")
2025-04-27 17:32:34 +08:00
AddCheckboxSetting(doroGui, "BookFire", "燃烧", "R1.2 xs+15")
AddCheckboxSetting(doroGui, "BookWater", "水冷", "R1.2 X+1")
AddCheckboxSetting(doroGui, "BookWind", "风压", "R1.2 X+1")
AddCheckboxSetting(doroGui, "BookElec", "电击", "R1.2 X+1")
AddCheckboxSetting(doroGui, "BookIron", "铁甲", "R1.2 X+1")
AddCheckboxSetting(doroGui, "CompanyWeapon", "购买公司武器熔炉", "R1.2 xs+15")
doroGui.Add("Text", " R1.2 xs+15", "❌购买简介个性化礼包")
doroGui.Add("Text", "R1.2 xs Section", "废铁商店")
doroGui.Add("Text", " R1.2 xs+15", "❌购买珠宝")
doroGui.Add("Text", " R1.2 xs+15", "购买好感券:")
2025-04-27 17:32:34 +08:00
doroGui.Add("Text", " R1.2 xs+15", "❌通用")
doroGui.Add("Text", " R1.2 x+1", "❌朝圣者")
doroGui.Add("Text", " R1.2 x+1", "❌反常")
doroGui.Add("Text", " R1.2 xs+15", "❌极乐净土")
doroGui.Add("Text", " R1.2 x+1", "❌米西利斯")
doroGui.Add("Text", " R1.2 x+1", "❌泰特拉")
doroGui.Add("Text", " R1.2 xs+15", "购买资源")
2025-04-27 17:32:34 +08:00
doroGui.Add("Text", " R1.2 xs+15", "❌信用点+盒")
doroGui.Add("Text", " R1.2 x+1", "❌战斗数据辑盒")
doroGui.Add("Text", " R1.2 x+1", "❌芯尘盒")
Tab.UseTab("日常")
2025-04-27 17:32:34 +08:00
AddCheckboxSetting(doroGui, "SimulationRoom", "模拟室5C(普通关卡需要快速战斗)", "R1.2")
AddCheckboxSetting(doroGui, "RookieArena", "新人竞技场(请点开快速战斗)", "R1.2")
2025-04-29 22:17:42 +08:00
AddCheckboxSetting(doroGui, "LoveTalking", "咨询妮姬(可以通过收藏改变妮姬排序)", "R1.2 Section") ; 注意 Section 选项用法(保存此控件位置并定义一个新控件段)
2025-04-27 17:32:34 +08:00
AddCheckboxSetting(doroGui, "CompanyTower", "爬企业塔", "R1.2 xs Section")
AddCheckboxSetting(doroGui, "TribeTower", "只完成每日任务,在进入后退出", "R1.2 XP+15 Y+M")
AddCheckboxSetting(doroGui, "Interception", "使用对应编队进行异常拦截自动战斗", "R1.2 xs")
doroGui.Add("DropDownList", "Choose" InterceptionBossToLabel(), ["克拉肯(石)编队1", "过激派(头)编队2", "镜像容器(手)编队3",
"茵迪维利亚(衣)编队4", "死神(脚)编队5"]).OnEvent("Change", ChangeOnInterceptionBoss)
Tab.UseTab("默认")
doroGui.Add("Text", , "购买几本代码手册?")
2025-04-27 17:32:34 +08:00
doroGui.Add("DropDownList", "Choose" NumOfBookToLabel(), [0, 1, 2, 3]).OnEvent("Change", ChangeOnNumOfBook)
2024-11-17 14:18:02 +08:00
Tab.UseTab()
doroGui.Add("Button", "Default w80 xm+100", "DORO!").OnEvent("Click", ClickOnDoro)
2024-07-16 17:27:29 +08:00
doroGui.Show()
^1:: {
2024-07-16 17:27:29 +08:00
ExitApp
}
^2:: {
Pause -1
}