Skip to content

[feature] 建议增加当日已伐木材数量记录,避免同一天多次运行时空跑 #3624

Description

@this-Fish

提交确认

  • 我已搜索现有 Issue
  • 我已确认当前脚本或仓库尚无等价能力
  • 该需求不仅是个人操作习惯
  • 我理解需求可能受兼容性和维护成本限制

涉及范围

JS 脚本

相关脚本名称与版本

AutoWoodcutting-Pathing 自动伐木-地图追踪版

需求或建议

问题描述

当前脚本每次运行都是独立、无状态的。当用户设定某种木材的目标数量(例如 8000)超过单次运行上限(2000)时,需要分多次运行才能达成。但在同一天内多次运行脚本时,由于脚本没有记录“今天已经砍了多少”,每次都会根据背包当前库存计算缺口,并再次尝试砍伐 2000。

然而原神中单个木材每天有 2000 的获取上限(或用户自行设定的每日限额),当第二次运行时,如果当天已经砍满 2000,脚本仍然会执行砍伐动作,但实际上无法获得任何木材,导致空跑,浪费时间和资源。

使用场景

复现步骤

  1. 设定 targetInventoryNumber = 8000,开启背包检测,woodInventoryNumber = 2000
  2. 当天首次运行脚本:背包中该木材为 0,计算出需砍 6000(但受上限限制,实际砍 2000),运行后背包变为 2000。
  3. 当天第二次运行脚本(假设背包仍为 2000):脚本再次计算需砍 6000,上限 2000,仍会执行砍伐 2000 的循环。
  4. 但当天该木材已砍 2000,游戏内无法再获得,所以此次运行所有砍伐动作均无效,脚本空跑。

要调整

预期收益

期望行为

  • 脚本应能记录当天(以自然日或服务器重置时间为准)每种木材已砍伐的数量
  • 在计算本次运行需要砍伐的数量时,应减去当天已砍量,若已满 2000 则直接跳过该木材。
  • 记录应持久化,例如保存在本地 JSON 文件中,并支持跨运行读取和更新。
  • 每天第一次运行时自动清零记录,或按日期区分。

影响与约束

建议方案

  1. 引入本地状态文件:在脚本目录下创建 records/ 文件夹,并按用户名分目录存放记录文件,路径为 records/用戶名字/record.json,结构如下:

    {
      "2026-09-06": {
        "雪杨木": 2000,
        "白桦木": 1200
      }
    }

    其中 用戶名字 建议从 settings 中读取(如新增 username 配置项),若未配置则使用默认值 default

  2. 读取记录:每次脚本启动时,根据当前用户名读取对应 records/用戶名字/record.json 中当天日期的记录。若文件或当天记录不存在,则视为今日尚未砍伐。

  3. 计算砍伐量:在 woodInventorymapWoodsToNumbers 阶段,将计算出的本次目标砍伐量减去当日已砍量(若结果为负则设为 0),避免重复执行已满额的木材路线。

  4. 更新记录:每次实际砍伐完成后(runPathingNTimes 执行完毕),将该木材本次实际获得的数量累加到当日已砍量中,并立即写回 records/用戶名字/record.json,确保中途中断也不会丢失进度。

  5. 跨天自动重置:以游戏每日刷新时间(北京时间 04:00)为界,若当前时间已过 04:00,则使用新的日期键记录当日砍伐量;若当前时间在 00:00~03:59 之间,仍归属前一日记录。旧记录可保留用于历史查看,或由用户手动清理。

  6. 目录自动创建:脚本首次运行时,若 records/records/用戶名字/ 目录不存在,应自动创建,避免因路径不存在而报错。

补充信息

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancement新功能建议或现有能力改进。

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions