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

截图要求:尽可能紧贴着文字,并且保持默认的按钮背景(如“开始竞赛赛事”正常情况下是黑色背景,除非鼠标移动到其他按钮上)。将截图名称修改为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()Beta版脚本
支持开启后自动按压前进键(键位可自行修改),并且可以读取全局快捷键(默认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()
