脚本由ai编写+人工审查,基本没逻辑问题,代码全开放,如有需求、意见可在本文评论区回复留言
脚本非进程注入,而是采用 DirectX 底层输入接口-DirectInput 方式输入,基本和外设输入一致。运行期间请勿切屏其他软件(虽然我也不知道有啥影响),因为输入是全局的,不用时可以关掉脚本
1、需要安装python环境,当前在测试阶段所以没打包exe,可以根据自身需求修改
2、脚本运行过程中依然需要手动长按前进键,如果不想手动按前进键,可尝试文章末尾的beta版脚本,可开局自动按前进键,但测试时间较少可能有bug
3、建议将输入法开大写锁定或者切换ENG输入法,否则“X”键重开可能会失效导致直接按下回车回到主菜单
PyDirectInput==1.0.4
PyAutoGUI==0.9.54
opencv_python==4.13.0.92pip install pyautogui pydirectinput opencv-python或 将上方requirements.txt保存下来:
pip install -r .\requirements.txt1、需要对特定按键进行截图,如下图:

截图要求:尽可能紧贴着文字,并且保持默认的按钮背景(如“开始竞赛赛事”正常情况下是黑色背景,除非鼠标移动到其他按钮上)。将截图名称修改为restart.png、start_race.png放到脚本相同目录下
2、修改代码区域:
在代码的检测区域修改坐标。我预设的是2k屏幕的坐标,如果不确定可以使用qq截图来确认坐标,选取文字左上角的X Y坐标,并设置区域高度与宽度(向下和向右的边长),建议要比截图大50左右。
3、先选好蓝图进入到有“开始竞赛赛事”按钮的页面,之后再运行脚本,防止在其他页面误触。
# 需手动按住前进键版本,可将前进键改成空格键方便按压
import time
import pyautogui
import pydirectinput
import random
# =================================================
# 提前准备好的 UI 截图文件名
IMG_RESTART = 'restart.png'
IMG_START_RACE = 'start_race.png'
# 扩大检测区域 (左上角X, 左上角Y, 宽度, 高度) (注:建议坐标设定要比截图的坐标大一些,提供容错区域)
RESTART_REGION = (280, 1280, 200, 100)
START_RACE_REGION = (70, 830, 300, 120)
# =================================================
def check_ui(img_name, search_region, conf):
"""封装检测函数,处理异常并返回布尔值"""
try:
pos = pyautogui.locateOnScreen(img_name, region=search_region, confidence=conf)
return True if pos else False
except pyautogui.ImageNotFoundException:
return False
def wait_and_click():
print("🚗 地平线刷点辅助脚本已启动,5秒后开始监测,请切回游戏...")
time.sleep(5)
while True:
# 1. 独立检测“重新开始”
if check_ui(IMG_RESTART, RESTART_REGION, 0.8):
print("🎯 检测到结算界面:按下 X 并 回车...")
time.sleep(0.5 + random.uniform(-0.05, 0.2))
pydirectinput.press('x')
time.sleep(0.5 + random.uniform(-0.05, 0.2))
pydirectinput.press('enter')
time.sleep(5)
continue
# 2. 独立检测“开始竞赛赛事”
if check_ui(IMG_START_RACE, START_RACE_REGION, 0.7):
print("🚀 检测到发车界面:自动回车!")
time.sleep(0.5 + random.uniform(-0.05, 0.3))
pydirectinput.press('enter')
time.sleep(5)
continue
time.sleep(1.5)
if __name__ == "__main__":
wait_and_click()支持开启后自动按压前进键(键位可自行修改),并且可以读取全局快捷键(默认F9开关脚本)。缺点是必须要管理员权限运行脚本,否则脚本虽然没报错但无法读取到全局快捷键。
requirements.txt:
PyDirectInput==1.0.4
PyAutoGUI==0.9.54
opencv_python==4.13.0.92
keyboard==0.13.5main.py
import time
import pyautogui
import pydirectinput
import random
import keyboard
# ================= 配置区 =================
# 提前准备好的 UI 截图文件名
IMG_RESTART = 'restart.png'
IMG_START_RACE = 'start_race.png'
# 检测区域 (左上角X, 左上角Y, 宽度, 高度)
RESTART_REGION = (280, 1280, 200, 100)
START_RACE_REGION = (70, 830, 300, 120)
FORWARD_KEY = 'space' # 前进键,可以自行修改为 'w' 或其他键
HOTKEY = 'f9' # 脚本启停的快捷键
# ================= 状态变量 =================
is_running = False # 脚本默认处于停止状态,按下热键后启动
is_driving = False # 标记当前是否正在按压前进键
def toggle_script():
"""热键触发的回调函数:切换脚本启停状态"""
global is_running, is_driving
is_running = not is_running
if is_running:
print(f"\n▶️ [状态] 脚本已启动!正在监测游戏画面...")
else:
print(f"\n⏸️ [状态] 脚本已暂停!你可以安全地切换到其他窗口。")
# 安全机制:如果在比赛中途暂停脚本,必须释放前进键,否则会一直往前冲
if is_driving:
pydirectinput.keyUp(FORWARD_KEY)
is_driving = False
print("🛑 [安全] 已强制释放前进键。")
def check_ui(img_name, search_region, conf):
"""封装检测函数,处理异常并返回布尔值"""
try:
pos = pyautogui.locateOnScreen(img_name, region=search_region, confidence=conf)
return True if pos else False
except pyautogui.ImageNotFoundException:
return False
def main_loop():
global is_driving
print(f"🚗 地平线全自动刷点脚本已加载。")
print(f"💡 请将输入法切换为纯英文 (ENG) 以防万一。")
print(f"⌨️ 按下 【{HOTKEY.upper()}】 键来 启动/暂停 脚本!\n")
# 注册全局热键
keyboard.add_hotkey(HOTKEY, toggle_script)
while True:
# 如果脚本被暂停,则休眠等待,不执行任何操作
if not is_running:
time.sleep(0.5)
continue
# 1. 检测“重新开始” (比赛结束)
if check_ui(IMG_RESTART, RESTART_REGION, 0.8):
print("🎯 检测到结算界面:准备重新开始...")
# 停止按压前进键
if is_driving:
pydirectinput.keyUp(FORWARD_KEY)
is_driving = False
time.sleep(0.2)
pydirectinput.press('x')
time.sleep(0.5 + random.uniform(-0.05, 0.15))
pydirectinput.press('enter')
# 结算动画较长,休眠防止重复触发
print("⏳ 等待加载下一局...")
time.sleep(5)
continue
# 2. 检测“开始竞赛赛事” (新局开始)
if check_ui(IMG_START_RACE, START_RACE_REGION, 0.7):
print("🚀 检测到发车界面:自动回车!")
time.sleep(0.5 + random.uniform(-0.05, 0.15))
pydirectinput.press('enter')
# 等待几秒钟黑屏/发车倒计时结束
time.sleep(4)
print(f"🏎️ 开始按压前进键 ({FORWARD_KEY}) 跑图...")
pydirectinput.keyDown(FORWARD_KEY)
is_driving = True
# 跑图过程中不需要高频检测,休眠几秒降低CPU占用
time.sleep(5)
continue
# 常规休眠,避免死循环占满单核 CPU
time.sleep(1)
if __name__ == "__main__":
main_loop()
]]>偶然发现个开源的js项目,部署到服务器上玩玩~
该项目名为 lifeRestart ,开源在github,源码主要为JS编写,可同时运行在本地控制台、网页上。
以下为控制台截图:
由于本项目为js项目,依赖于Node运行,因此先在服务器安装上NodeJS与npm:
sudo apt install nodejs
sudo apt install npm如果报错找不到该软件包,请先执行sudo apt update 与 sudo apt upgrade
安装完后输入node -v即可查看安装版本,验证是否安装成功
如果出现的版本号为14版本以下的旧版本,可能运行不了项目,请输入sudo apt autoremove nodejs来卸载旧版本node,然后跟着下面的教程安装最新版node:
去 node官网 找到最新版后,选择Linux 二进制文件 (x64) 或者选择自己平台的下载,复制下载链接,然后进入ssh。
先新建文件夹为node(个人习惯,不想把目录搞的很乱),再使用wget将node下载下来并解压,下载链接与安装包名不一定一致,自行变通:
mkdir node
cd node
wget https://npm.taobao.org/mirrors/node/v16.10.0/node-v16.10.0-linux-x64.tar.xz
tar –xvf node-v16.10.0-linux-x64.tar.xz再将解压后的重命名,然后移动到要长期存放的地方,个人推荐在usr文件夹下创建,以下教程就是在usr下创建个soft,防止目录管理起来乱:
mv node-v16.10.0-linux-x64 node
mkdir /usr/soft
mv node /usr/soft/node最后一步,将node添加到系统环境变量:
sudo nano /etc/profile
在文档最下面回车一行,并添加:
export NODE_HOME=/usr/soft/node (此处填Node所在路径)(注释不要复制!)
export PATH=$NODE_HOME/bin:$PATH
然后输入source /etc/profile刷新环境变量,再输入node -v确认版本
如果是用上述链接下载,应该是显示 v16.10.0

至此,node算是安装完成(如果在其他地方输入node -v没有反应,可以重新输入source /etc/profile来刷新,或者重启后也可以全局刷新)
运行环境安装完成后,还需要有个能在服务器上持续运行该项目的环境,否则ssh连接一旦断开项目将会被终止。如果服务器已经安装了VNC或者Xrdp,可无视下面的安装,直接远程连接后到部署项目步骤即可。
为了让项目在服务器持续运行且不需要值守,只需要使用Screen软件包即可:
sudo apt install screen安装后可输入screen -v查看版本来验证是否安装成功。
附:Screen使用方法简要总结(指令区分大小写!)
xxxx的新窗口并进入xxxx的窗口,如果没有这个名字的窗口会显示There is no screen to be resumed matching xxxx.xxxx的窗口,如果没有这个窗口会自动创建新窗口且名字为xxxx114514.test 1919810.test,进入窗口时需要输入screen -r 11451423333.Name中的23333,如 kill 9 23333,不能输入窗口名)1、先创建一个窗口用于专门跑项目:
screen -S lifeRestart2、根据github文档,首先需要下载项目包:
git clone https://github.com/VickScarlet/lifeRestart.git lifeRestart
cd lifeRestart
3、进入文件夹后,先安装依赖(如果服务器是第一次安装node环境,可能会安装久一些):
npm install
4、启动本地服务器:
npm run dev
5、开放端口8080
各服务商开放端口的方法自行百度,如果是使用宝塔面板的,可以在宝塔后台-安全-添加放行端口,手动添加8080即可(暂时没找到哪里可以改端口,待我琢磨一下...)
6、连接网页
在浏览器输入
http://服务器ip地址:8080/view/index.html