yanhy的学习记录匣 - 娱乐 2026-05-21T00:26:00+08:00 Typecho https://yanhy.top/index.php/feed/atom/tag/%E5%A8%B1%E4%B9%90/ <![CDATA[地平线6自动反复刷技能点脚本]]> https://yanhy.top/index.php/archives/492/ 2026-05-21T00:26:00+08:00 2026-05-21T00:26:00+08:00 yanhy2000 https://yanhy.top

脚本由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、需要对特定按键进行截图,如下图:

2026-05-20T16:15:55.png

截图要求:尽可能紧贴着文字,并且保持默认的按钮背景(如“开始竞赛赛事”正常情况下是黑色背景,除非鼠标移动到其他按钮上)。将截图名称修改为restart.pngstart_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.5

main.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()
]]>
<![CDATA[服务器上部署小游戏之《人生重开模拟器》(附screen使用方法)]]> https://yanhy.top/index.php/archives/118/ 2021-10-11T00:12:00+08:00 2021-10-11T00:12:00+08:00 yanhy2000 https://yanhy.top

偶然发现个开源的js项目,部署到服务器上玩玩~

简介

该项目名为 lifeRestart ,开源在github,源码主要为JS编写,可同时运行在本地控制台、网页上。

以下为控制台截图:
QQ图片20211010161706.png


步骤

环境安装

由于本项目为js项目,依赖于Node运行,因此先在服务器安装上NodeJS与npm:

sudo apt install nodejs
sudo apt install npm

如果报错找不到该软件包,请先执行sudo apt updatesudo 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

3.png

然后输入source /etc/profile刷新环境变量,再输入node -v确认版本
如果是用上述链接下载,应该是显示 v16.10.0

4.png

至此,node算是安装完成(如果在其他地方输入node -v没有反应,可以重新输入source /etc/profile来刷新,或者重启后也可以全局刷新)

运行环境安装完成后,还需要有个能在服务器上持续运行该项目的环境,否则ssh连接一旦断开项目将会被终止。如果服务器已经安装了VNC或者Xrdp,可无视下面的安装,直接远程连接后到部署项目步骤即可。


为了让项目在服务器持续运行且不需要值守,只需要使用Screen软件包即可:

sudo apt install screen

安装后可输入screen -v查看版本来验证是否安装成功。


附:Screen使用方法简要总结(指令区分大小写!)

  • screen -ls 列出所有创建的窗口
  • screen -S xxxx 新建一个名字为xxxx的新窗口并进入
  • screen -r xxxx 进入一个名字为xxxx的窗口,如果没有这个名字的窗口会显示There is no screen to be resumed matching xxxx.
  • screen -R xxxx 进入一个名字为xxxx的窗口,如果没有这个窗口会自动创建新窗口且名字为xxxx
  • 关闭screen : 进入一个窗口,然后关闭当前的项目,再输入exit,即可退出窗口并从列表中移除
  • Ctrl + a + d 暂离当前窗口(进入一个窗口后,先按ctrl+a,保持ctrl键再按d即可离开该窗口,不影响运行的项目)
  • screen -wipe 列出全部窗口并自动移除无效的窗口
  • 出现名字相同的多个窗口时,进入窗口时需要输入id而不是窗口名,如:列表中有114514.test 1919810.test,进入窗口时需要输入screen -r 114514
  • kill 9 id号 强制杀死窗口进程(id号为23333.Name中的23333,如 kill 9 23333,不能输入窗口名)


项目部署

1、先创建一个窗口用于专门跑项目:

screen -S lifeRestart

2、根据github文档,首先需要下载项目包:

git clone https://github.com/VickScarlet/lifeRestart.git lifeRestart
cd lifeRestart

1.png

3、进入文件夹后,先安装依赖(如果服务器是第一次安装node环境,可能会安装久一些):

npm install

2.png

4、启动本地服务器:

npm run dev

5.png

5、开放端口8080

各服务商开放端口的方法自行百度,如果是使用宝塔面板的,可以在宝塔后台-安全-添加放行端口,手动添加8080即可(暂时没找到哪里可以改端口,待我琢磨一下...)

6、连接网页

在浏览器输入

http://服务器ip地址:8080/view/index.html

本文到此结束,感谢支持!

]]>