商人刷新

商人刷新

出售物品自动清理、商人库存补货(修复商人库存消失的bug)、商人金币储备刷新。

[youtube]zy8Nyzwxwgs[/youtube]

描述

  1. 定期自动清理玩家出售给商人的物品。
  2. 商人库存补货。(修复了这样一个问题:如果某个为商人添加物品的模组被移除,商人的库存会消失。)
  3. 在模组设置中新增“商人出售价格倍率”选项。
  • 角色出售价格倍率:影响玩家获得的金钱数量。
  1. 在模组设置中新增“商人购买价格倍率”选项。
  • 商人购买价格倍率:影响玩家支付的金钱数量。
  1. 在模组设置中新增“商人库存数量倍率”选项。
  • 范围:1倍至10倍(以0.5倍为增量;默认1倍)。
  1. 在模组设置中新增“商人资金”(初始金币)选项。
  • 滑块范围:1至100(以1,000克朗为增量)。

主要目的

  1. 我出售的物品会定期自动清理。
  2. 商人库存补货。(修复了模组物品商人出售物品时,移除模组后商人库存消失的bug)
  3. 在模组设置中新增“商人出售价格倍率”选项。
  • 角色物品出售价格倍率:角色获得的金额
  1. 在模组设置中新增“商人购买价格倍率”选项。
  • 商人物品购买价格倍率:角色支付的金额
  1. 在模组设置中新增“商人库存数量倍率”选项。
  • 1至10倍(0.5倍间隔,默认1倍)
  1. 在模组设置中新增“商人持有金”选项。
  • 滑块改为1至100,单位×1,000克朗。

安装说明

  1. 将文件解压到 SteamLibrary\steamapps\common\The Witcher 3 文件夹中。

安装方法

  1. 解压缩后,将压缩包解压到 SteamLibrary\steamapps\common\The Witcher 3 文件夹中。

主要功能

  1. 简介
  • 本模组会在设定时间后清理出售给商人的物品,并补充商人原有库存中已 depleted 的货品。(同时修复了一个bug:如果某个为商人添加物品的模组被卸载,商人的库存会消失。)
  • 每当补货流程发生时,商人的金币余额也会重置为10,000克朗。
  • 核心功能自动运行,无需单独的设置菜单、快捷键或控制台命令。
  1. 基本机制
  • 时间阈值:7小时30分钟的游戏内时间(27,000秒)。
  • 在默认游戏时间倍率下,约等于现实时间30分钟。如果使用改变时间流速的模组,该时长可能有所不同。
  • 通过冥想等操作跳过的时间也会计入。
  • 模组不会在时间阈值一过就立即更新商人库存;而是在你下一次打开该商人交易窗口时进行处理。
  • 补货周期按商人单独追踪,从你首次打开其交易窗口时开始。首次登记时不会立即将商人金币余额设为10,000。
  • 已售物品的清理基于每件物品的具体售出时间计算,与补货周期无关。
  1. 已售物品自动清理
  • 模组仅追踪模组激活期间售出的物品。
  • 售出超过7小时30分钟(游戏内时间)的物品会在你下次打开交易窗口时被移除。
  • 如果你回购了其中任何物品,数量会从销售记录中扣除。
  • 如果已售物品与商人原有库存合并为同一堆叠,模组会对其进行区分,以确保原始库存数量保持不变。
  • 如果其他模组移动了物品或更改了物品ID,模组会将当前库存与其记录进行核对。它使用物品名称来识别和处理缺失的ID,确保其他物品堆叠不会被误删。
  • 对于安装前售出的物品,或销售记录已被重置的情况,无法准确判断某物品是否在过去被售出。
  1. 补货与商人资金
  • 补货列表通过观察商人库存中实际出现的物品名称和数量来构建。
  • 这适用于基础游戏物品和模组添加的物品,只要它们在商人库存中被观察到。
  • 仅补充差额——即达到目标数量所需的数量。系统不会完全删除现有库存或生成完全随机的新库存列表。
  • 玩家出售的物品(正在被追踪的)会被排除在库存观察流程之外,以防止它们被重新生成。
  • 补货时,商人资金会被精确调整为10,000克朗。如果商人资金较少,则补足;如果较多,则移除超出部分。这并不意味着每次额外发放10,000克朗。
  • 物品价格和退款规则保持不变。
  • 克朗、昆特牌以及带有“Quest”、“QuestEP1”或“QuestEP2”标签的物品不参与自动整理和补货。
  • 补货后,游戏内置的昆特牌、藏宝图和已知识别配方过滤器会被应用。
  1. 区域切换与补货列表重建
  • 当切换到不同世界(加载新区域)时,之前的补货列表被丢弃,并根据当前时间应用重置标记。
  • 在下一次交易时,会观察商人库存以生成新的补货列表。
  • 销售记录独立于补货列表维护。玩家出售的物品(正在被追踪的)不会被添加到新的补货列表中。
  • 区域切换后,补货和清理剩余已售物品的计时器会重新计算,从玩家首次与该商人互动时开始。
  • 示例:如果你在另一个区域等待10小时然后返回打开交易窗口,等待时间不会基于那10小时进行更新。相反,从返回后首次交易时起,开始新的7小时30分钟等待期。
  • 在同一世界内移动——无论是快速旅行还是步行——不会触发区域移动/补货计时器的重置。
  • 在列表重建时已售罄的物品将被排除在新列表之外。只有再次被观察到时(例如通过自然补货),它们才会被重新加入补货池。
  1. 已删除物品的定义与支持范围
  • 无法通过定义管理器分类的物品会被排除在补货列表之外,即使再次被观察到也不会被添加。
  • 此检查依赖于基础脚本中提供的分类查找功能;它不使用专用的 ItemExists 函数,也不验证其他模组定义的独特销售条件。
  • 将物品从列表中排除仅影响补货记录;不会从商人当前库存中移除该物品。
  • 从未被观察到的物品(且当前已售罄)或尚未满足出现条件的物品不会被恢复。
  • 由于新物品是基于名称生成的,其他模组通过脚本赋予特定物品的任何独特状态或属性不会被复制。
  • 此系统适用于标准NPC商人交易窗口;不保证支持远程、临时或自定义商店。
  1. 保存与加载
  • 用于追踪的自定义字段未声明为“已保存”数据,玩家存档中不会存储任何商人特定记录。
  • 数据仅在游戏运行时保留在内存中。每次启动游戏或加载存档时,补货列表和销售历史都会重置。
  • 因此,加载存档前售出的物品无法再被准确识别为已售出。此后首次观察时,这些物品可能会被识别为商人现有库存。
  • 游戏的实际状态——如商人库存、已整理物品以及商人克朗余额的变化——受游戏标准保存机制约束。这并不意味着这些更改被排除在保存之外;而只是表明“非保存”追踪方式不会独立存储此类修改。
  1. 兼容性与验证
  • 本模组包装了与打开商人界面、购买/出售、启动游戏以及世界区域切换相关的函数。如果其他模组也修改了这些相同函数,结果可能因执行顺序而异。
  • “FullRefund”、“MRR”和“ServicesAnywhere”作为开发参考;它们不是必需的依赖项。尚未验证所有可能组合的兼容性。
  • 已售物品自动整理和10,000克朗补充功能已在0.1.6版本中由用户验证。但这并不意味着后续所有更改——如“非保存”追踪、区域重置和库存清理——都经过了同等程度的验证。
  • 测试步骤:打开商人交易窗口,出售一件便宜物品,在同一区域内冥想至少8小时,然后重新打开交易窗口。在进行任何进一步交易之前,检查已售物品和商人克朗余额。
  • 切换到不同区域后,时间追踪会重置,时长从后续首次访问时重新计算。
  1. 诊断命令(可选) 如果控制台已启用,你可以在商人交易窗口打开时输入 mr_status()。 hook:表示商人链接函数是否处于活动状态。 key / record:当前正在处理的商人的标识符 / 记录编号。 elapsedGameSecs:自该商人上次更新以来经过的游戏内秒数。 interval=27000:更新阈值,设为7小时30分钟。 sales:当前正在追踪的销售批次数量。 stock:已记录的补货物品类型数量。 money:商人当前的金币(克朗)数量。 成功更新后,elapsedGameSecs 会立即接近0。本模组的标准使用不需要控制台。

  2. 卸载 关闭游戏后,删除 Mods/mod__MerchantRefresh 文件夹。 卸载模组不会还原已清理的库存、已补货的物品或已修改的金币数量等更改。如果你想恢复之前的状态,请加载进行更改之前的存档。


主要功能

  1. 简介
  • 本模组会在一定时间后清理出售给商人的物品,并补充已确认的商人商品中不足的库存。(修复了因删除模组导致曾出售模组添加物品的商人库存消失的bug)
  • 补货执行时,商人持有金也会调整为10,000克朗。
  • 无需单独的设置菜单、快捷键或控制台命令,基本功能自动运行。
  1. 基本行为
  • 基准时间:游戏时间7小时30分钟(27,000秒)。
  • 在默认时间倍率下约为现实时间30分钟。使用改变时间流速的模组时会有所不同。
  • 通过冥想等跳过的游戏时间也会计入。
  • 时间过去后不会立即更改远处商人。而是在再次打开该商人交易窗口时处理。
  • 补货周期按商人单独计算。从首次打开交易窗口创建记录时开始。首次登记时不会立即将持有金改为10,000。
  • 已售物品的清理时间以各物品的售出时间为基准计算,与补货时间分开判定。
  1. 已售物品自动清理
  • 仅追踪模组当前运行期间记录的实际销售数量。
  • 售出后游戏时间经过7小时30分钟的的物品,在下次进入交易窗口时被清理。
  • 如果回购部分物品,相应数量会从销售记录中扣除。
  • 如果已售物品与商人原有商品合并为同一堆叠,会进行区分以保留原有商品数量。
  • 如果其他模组移动了物品或更改了物品ID,会将当前库存与记录重新核对。仅用名称替代消失的ID,不会删除其他堆叠。
  • 安装前售出的物品或记录已重置的已售物品,无法准确区分过去是否售出。
  1. 补货与商人持有金
  • 通过观察商人实际出现的商品名称和数量来构建补货列表。
  • 不仅是基础商品,观察到的模组添加商品也以相同方式登记。
  • 仅补充低于记录目标数量的部分。并非每次完全删除剩余库存或生成随机新商品列表的功能。
  • 追踪中的玩家销售数量会从原有库存观察中排除,以防止已售物品被持续重新生成。
  • 补货时将商人持有金精确调整为10,000克朗。不足则补足,超出则移除超出部分。并非每次额外发放10,000克朗的方式。
  • 不更改商品价格和退款规则。
  • Crowns、昆特牌(gwent)、Quest/QuestEP1/QuestEP2标签物品不参与自动清理和补货。
  • 补货后应用游戏的昆特牌/藏宝图/已知识别配方过滤器。
  1. 区域移动与补货列表重建
  • 加载其他世界的区域移动时,丢弃之前的补货列表,并在时间上附加初始化标记。
  • 在下一次交易时观察该时点的商人商品,创建新列表。
  • 销售记录与补货列表分开维护。追踪中的已售物品不会在新列表中登记为原有商品。
  • 区域移动后,从首次与该商人交易时点起重新计算补货和剩余已售物品清理时间。
  • 示例:在其他区域等待10小时后返回打开交易窗口,也不会立即以该等待时间进行更新。以返回后首次交易时点为基准,需再次等待7小时30分钟。
  • 仅在同一世界内快速旅行或步行移动不会执行此区域移动初始化。
  • 列表重建时已售罄的商品会从新列表中排除。之后需通过自然补货等再次被观察到,才会登记为补货对象。
  1. 已删除物品定义与支持范围
  • 定义管理器中无法查询到物品分类(category)的品项会从补货列表中排除。新观察到时也不会登记。
  • 这是利用所提供的基础脚本中的分类查询进行的检查。并非专用 ItemExists 函数或验证所有模组独立销售条件的功能。
  • 列表排除仅更改补货记录。不会从当前商人库存中批量删除该品项。
  • 不会任意恢复从未观察到的已售罄商品或尚未满足出现条件的商品。
  • 由于按名称生成新物品,不会复制其他模组通过脚本附加到个别物品上的独特状态。
  • 以普通NPC商人交易窗口为对象。不保证支持单独的远程/临时/自定义商店。
  1. 保存与加载
  • 用于追踪的自定义字段未声明为saved,配置为不在玩家存档中单独保存商人记录。
  • 记录仅在游戏运行期间保留在内存中。游戏启动/加载存档时初始化补货列表和销售记录。
  • 因此,加载前售出的物品无法再准确区分为已售物品。之后首次观察时可能被识别为现有商人商品。
  • 商人库存、已清理物品及克朗变更等实际游戏状态属于游戏的一般保存对象。并非表示非保存追踪方式连这些变更也不会被保存。
  1. 兼容性与确认方法
  • 包装商店进入、购买/出售、游戏启动及世界移动函数。与修改相同函数的其他模组可能因执行顺序不同而产生不同结果。
  • FullRefund/MRR/ServicesAnywhere 为开发参考资料。不是必须一起安装的必需组件。并非所有组合的同时运行均已验证。
  • 已售物品自动清理和10,000克朗更新在之前的0.1.6中已获得用户运行确认。并非表示之后的非保存/区域初始化/列表丢弃变更整体都经过了同等水平的验证。
  • 测试:打开一次商人交易窗口,新出售一件便宜物品,然后在同一区域冥想8小时以上并再次打开交易窗口。交易前确认已售物品和商人余额。
  • 区域移动后,从首次重访交易起重新计算时间。
  1. 诊断命令(可选) 如果可以使用控制台,在打开交易窗口的状态下输入 mr_status()。 hook:商店连接函数是否执行 key / record:运行中商人标识值 / 记录编号 elapsedGameSecs:该商人自上次更新以来的游戏秒数 interval=27000:更新基准7小时30分钟 sales:追踪中的销售批次记录数 stock:已记录的补货商品种类数 money:当前商人持有金 正常更新后 elapsedGameSecs 接近0。控制台不是使用基本功能的必需品。

  2. 移除 游戏结束后删除 Mods/mod__MerchantRefresh 文件夹。 已清理的已售物品、补充的商品及变更的克朗不会仅通过移除模组恢复原状。如需之前的状态,请加载变更前的存档。

致谢

以下是我创建的其他一些模组: Skill Point Plus - Named Monster - Merchant Refresh - Immortal Ciri - Immortal Geralt - The Wisp REMASTER - Drops Auto Recovery - Whirl Area - Random Option Enhancement - a record of destiny

----------------------------------------------------------

致谢

以下是我制作的其他模组…… Skill Point Plus - Named Monster - Merchant Refresh - Immortal Ciri - Immortal Geralt - The Wisp REMASTER - Drops Auto Recovery - Whirl Area - Random Option Enhancement - a record of destiny