此次使用到FindText工具进行判断钟离和猫猫的元素战技,然后触发长按技能进行套盾,之后血量条上面会出现倒计时和倒计时条,可用于查看护盾的持续时间,让自己可以更加从容,同时简化操作,毕竟懒惰使人进步嘛。
教学视频:
[[原神]猫猫钟离一键套盾 倒计时显示持续时间 电脑玩家必备!]▸
效果GIF:
切人不想放技能就按住Ctrl然后按1就可以了,软件在视频评论区。
代码:
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 脚本设定 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
#NoEnv ; 不检查空变量是否为环境变量(建议所有新脚本使用).
#SingleInstance force
#Persistent ;让脚本持续运行(即直到用户关闭或遇到 ExitApp).
#InstallKeybdHook ;强制无条件安装键盘钩子.
#InstallMouseHook
#UseHook ;强制使用钩子实现全部或部分键盘热键.
#KeyHistory, 0 ;置为 0 来禁用按键历史.
SetKeyDelay,-1, 1 ;设置每次 Send 和 ControlSend 发送键击后自动的延时.
SetControlDelay, -1 ;设置在每次控件修改命令执行后自动的延时.
SetMouseDelay, -1 ;设置每次鼠标移动或点击后自动的延时.
SetWinDelay,-1 ;设置在每次执行窗口命令(例如 WinActivate) 后自动的延时.
SetBatchLines,-1 ;使用 SetBatchLines -1 让脚本无休眠运行(即让脚本以全速运行).
ListLines, Off ;在历史中略去后续执行的行.
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 参数设置 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
WinSet, AlwaysOnTop, Off, ahk_exe YuanShen.exe
WinGetPos, pX, pY, pW, pH, ahk_exe YuanShen.exe ; 获取画图窗口的位置和大小
SetTimer, LoopTimer, 50
Gosub 窗口位置
gosub createGUI8 ;倒计时条UI
#Include FindText.ahk
return
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 热 键 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
#IfWinActive ahk_exe YuanShen.exe
~1::
Text:="|<>#16@0.97$6.0AyzSAU" ;颜色位置模式 #21 从左到右,从上到下第21个像素开始 @0.97:相似度为(97%) $6:图像宽度是6
Text.="|<mao>#35@0.97$10.7Uz7yzzzzzwy" ;猫盾 注意冒号(:)要改为英文下的点(.) 表示和上面一条一起查找 <>中间加识别用的名称 例如mao
WinGetPos, pX, pY, pW, pH, ahk_exe YuanShen.exe ; 获取画图窗口的位置和大小
if (ok:=FindText(X:="wait", Y:=1, pX+1176, pY+705, pX+1238, pY+753, 0, 0, Text))
{
Gui, 8:Destroy
Gosub 窗口位置
if (ok[1].id == "mao") ;如果是猫(mao)的话
cdtime1:=12000 ;倒计时就设置为12秒
Gosub createGUI8
Sleep(20)
Send {e Down}
Sleep(980)
Send {e Up}
Progress1 := A_TickCount
}
return
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 标 签 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
窗口位置:
cd1:= 1
cdtime1:=20500
pH2:=pW*9/16 ;游戏16比9分辨率计算去标题栏窗口高度
PY2:=pY+(pH-pH2) ;游戏去标题栏窗口左上角Y坐标
UI_Y:=Ceil(pY2+pH2*0.873) ;GUI的Y坐标
UI_W:=Ceil(0.154*pW) ;GUI的宽度
UI_H:=Ceil(0.012*pH)*2 ;GUI的高度
UI_P:=Ceil(0.00732*pW) ;进度条的高度
UI_X:=Ceil(pX+pW/2-UI_W/2)
Return
createGUI8:
colorBG = 11213a
Gui, 8:Font, s15 bold
Gui, 8:+ToolWindow
Gui, 8:Color, %colorBG%
Gui, 8:Show, x%UI_X% y%UI_Y% w%UI_W% h%UI_H% NA ;NA: 显示窗口但不进行激活
Gui, 8:-Caption +AlwaysOnTop +Disabled +E0x20 +LastFound
WinSet, TransColor, 0x%colorBG% 250
if cd1 and cdtime1
{
Gui, 8:Add, Text , x0 y0 w%UI_W% h%UI_H% cE6C04D BackGround%colorBG% vjisi1 Center
Gui, 8:Add, Progress, x0 w%UI_W% h%UI_P% cE6C04D BackGround%colorBG% vProgress1
}
Return
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 函 键 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sleep(duration) ;高精度睡眠时间
{
SleepDuration:= duration
DllCall("Sleep", UInt, SleepDuration)
DllCall("Winmm\timeEndPeriod", UInt, TimePeriod) ; 应该进行调用来让系统恢复正常.
}
LoopTimer() ;实现按时间减少进度条;倒计时
{
global
if cd1 and cdtime1 ;不为空值和0值
{
tickCount := Progress1 + cdtime1 +100 ;释放技能时的时间+角色技能时间+100
If A_TickCount < %tickCount% ;如果当前时间 小于(释放技能时的时间+角色技能时间+100)
{
t2 := Round(-(A_TickCount -Progress1-cdtime1)/1000, 2) ;t2 时间 越来越小 显示倒计时效果
p3 := 100 - (A_TickCount -Progress1)/(cdtime1/100) ;p3 越来越小 调整计时条长度
;ToolTip % t2 "####" p3 "####" (A_TickCount -Progress1)/(cdtime1/100) ;debug
if t2>0.3
GuiControl,8:,jisi1,%t2% ;倒计时数字
else
GuiControl,8:,jisi1, ̄▽ ̄
GuiControl,8:,Progress1,%p3% ;调整计时条
}
}
}
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 全局热键 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
#IfWinActive
F2:: ;保存(使用AutoAHK编辑器才会保存)之后重启
ControlSend,ahk_parent,^s,ahk_exe AutoAHK.exe
sleep 50
ControlSend,ahk_parent,^s,ahk_exe AutoAHK.exe
sleep 100
Reload
return
!F1:: ;Alt+F1获取鼠标停留处的坐标、色值代码
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%, RGB
StringLeft color,color,10
ToolTip, GetColor(%MouseX%`,%MouseY%)=="%color%"
clipboard = GetColor(%MouseX%,%MouseY%)=="%color%"
return
!F2:: ;Alt+F2获取鼠标停留处的游戏类名的代码
WinGetClass, class, A
ToolTip, #IfWinActive ahk_class %class%
clipboard = #IfWinActive ahk_class %class%
return
!F3:: ;Alt+F3获取鼠标停留处的代码,用于快速移动鼠标并点击此处
MouseGetPos, MouseX, MouseY
ToolTip, SendInput {Click %MouseX%`,%MouseY%}
clipboard =SendInput {Click %MouseX%,%MouseY%}
return
!F4:: ;Alt+F4获取鼠标停留处的代码,用于快速移动鼠标到此处丹不点击
MouseGetPos, MouseX, MouseY
ToolTip, MouseMove %MouseX%`,%MouseY%
clipboard =MouseMove %MouseX%,%MouseY%
return
!F5:: ;Alt+F1鼠标停留处的窗口置顶或取消置顶
WinSet, AlwaysOnTop, Toggle,A
WinGetTitle, getTitle, A
WinGet, getTop,ExStyle,A
if (getTop & 0x8)
ToolTip 已置顶 `n%getTitle% , , , 2
else
ToolTip 取消置顶,,,2
return
!Left::MouseMove, -1, 0, 0, R ;鼠标左移一个像素
!Right::MouseMove, 1, 0, 0, R ;鼠标右移一个像素
!Up::MouseMove, 0, -1, 0, R ;鼠标上移一个像素
!Down::MouseMove, 0, 1, 0, R ;鼠标下移一个像素
F8:: ;窗口化的原神左上角对其,用于snipaste截图软件定格画面后再用本AHK的Alt+F1热键取色
WinMove 原神,, 0, 0
Return
感谢大佬分享,谢谢备注了每行代码的意思.