快速交易(实验性)

快速交易(实验性)

跳过与商人交谈这一环节的关键。瞄准目标,按下Shift+F,你便进入交易窗口。按Esc,你便回到禁区。

快速交易实验版(QUICK TRADE EXPERIMENTAL)

一键跳过与商人交谈的繁琐流程。瞄准,按下 Shift+F,进入交易窗口。按 Esc,返回 Zone。

跳过问候语,直接打开交易或升级菜单,退出时跳过告别语并离开对话。

交易与升级 • 即时快速退出 • 全面可调时序 • 不修改存档


先读这里 —— 高度实验性

这是一个个人生活质量小工具,后来变得一发不可收拾。我和仓库销售之间的互动提示和对话台词多到让我抓狂,所以我把它自动化了。

不是一个干净、带事件钩子的模组。S.T.A.L.K.E.R. 2 所需的实验性 RE-UE4SS 构建禁用了大部分有用的钩子,因此该模组从外部、盲目地、按定时器驱动原版对话界面。它大约有 十分之九 的概率正常工作。剩下十分之一的情况在下面详细描述,而且随时可以按一次 F 键恢复。

如果你想要绝对稳定的东西,这个还不是。如果你也只是想免去点击商人寒暄,试试它并根据自己的机器调整参数吧。


功能说明

  • 快速进入
    瞄准商人或技师,按下 Shift+F,模组会快进问候语并直接打开交易(或升级)菜单 —— 大约一秒钟,无需手动操作。

  • 自动区分交易与升级
    模组会同时尝试交易和升级动作,并保留 NPC 实际提供的选项。商人打开交易菜单,技师打开升级菜单。

  • 快速退出
    Esc 关闭交易/升级窗口,模组会立即退出整个对话并跳过商人的告别语。只需按一次 Esc 就能回到游戏世界,而无需按 Esc(关闭菜单)→ Esc(离开对话)→ Space(跳过告别)。

  • 进入时无持续轮询
    进入序列是一个固定、按计划执行的脚本——它不会每帧扫描游戏——因此在你走动时不会增加持续的后台开销。

  • 所有参数均可调整
    每个延迟、重复次数和间隔都位于 config.lua 中。如果默认值在你的系统上不合适,你几乎肯定可以调整到位。

  • 存档安全
    无 pak 文件,不修改存档,不改动物品栏。它只调用游戏自带的对话函数。删除文件夹即可完全移除。


工作原理

由于实验性 UE4SS 构建无法可靠地挂钩对话系统,模组无法"监听"对话的打开。为此,它模拟你手动操作的过程,并精确计时:

  1. 你按下 Shift+F。 UE4SS 检测到组合键但不会吞掉它,所以游戏仍然会收到真实的 F 键按下。那个 F——而非模组——才是真正启动与 NPC 对话的按键。

  2. 问候语跳过连发。 几毫秒后,模组连续多次注入游戏自带的 IA_SkipDialog 动作。在对话出现之前的注入不会产生任何效果,所以连发会在问候语出现的那一刻"抓住"它并快进。

  3. 打开菜单连发。 稍后,模组反复调用对话视图自带的"打开交易/打开升级"函数。它会调用多次,因为如果单次调用恰好落在界面过渡期间,就会静默无效。

  4. 回复跳过连发。 再注入几次 IA_SkipDialog 以跳过商人的一句话回复,让菜单干净地接管。

  5. 快速退出监控。 一旦确认交易/升级菜单已打开,一个非常轻量的监视器会每隔 ExitWatchPollMs一次廉价检查,看菜单是否已关闭。当你按下 Esc 时,它会调用对话视图自带的"离开对话"函数并脉冲式触发跳过动作,使告别语永远不会播放。

使用默认参数时,整个进入序列在按键后约 40 毫秒1200 毫秒 之间执行。


触发按键 —— 你可能需要重新设置

模组本身不会打开对话。是你的真实按键打开的。 模组的 Key 必须与你游戏中的 互动/使用 键相同——默认为 F

如果你在游戏控制选项中重新绑定了互动键,你必须config.lua 中的 Key 改为与你的互动键一致,否则按下模组快捷键会在从未打开的对话上触发跳过/打开脚本,结果什么都不会发生。

  • 默认组合键是 Shift + FShift 也是疾跑键,在某些配置下会导致组合键触发不稳定。如果快速交易感觉不灵敏,试试改用 CtrlAlt —— 设置
    Modifiers = { "CONTROL" }

    Modifiers = { "ALT" }

  • 除非你真的想这样,否则不要使用无修饰键的裸按键(Modifiers = {})——那样游戏中的每一次互动都会变成快速交易尝试。

  • 进入序列偶尔失败是无害的:真实的 F 已经打开了普通对话,你只需用原版方式与商人交谈,或再次按下 Shift+F


已知问题(约 9/10 成功率)

以下所有问题都源于同一个根本原因:模组从外部对原版界面计时,而非挂钩游戏的对话事件,因为那些钩子在此 UE4SS 构建中被禁用了。

1. 快速交易未触发——只开始了普通对话

对话打开的速度慢于脚本窗口的预期(流式加载卡顿、场景繁忙、存档读取缓慢)。跳过和打开连发在还没有可操作对象时就已经触发,然后停止。

临时解决: 再次按下 Shift+F,或直接正常对话。
永久解决: 增加 OpenStartMsGreetingSkipStartMs,和/或提高 GreetingSkipCountOpenCount,使连发覆盖更宽的时间窗口。参见下方的调参说明。

2. 快速退出未触发——出现告别语/仍停留在对话中

监视器通过每 ExitWatchPollMs 检查交易菜单的 widget 来检测其关闭。如果菜单在两次检查之间完全关闭并出现告别界面,或 widget 滞留一帧,监视器可能会错过窗口,离开序列永远不会启动。

临时解决:SpaceF 跳过告别并正常离开。
永久解决: 降低 ExitWatchPollMs(例如 60–80),以便更快捕获关闭事件;提高 ExitLeaveAttempts;降低 ExitLeaveRepeatMs

3. 对话"卡住"且无界面——没有商人台词,没有菜单,什么都没有

打开调用全部落在同一次界面过渡期间,每次调用都静默无效,而问候语已经被跳过。你会停留在一个空的对话状态,没有任何可见提示。

临时解决: 按一次 F。它会推进卡住的对话,交易窗口通常会立即打开(再次按快速交易组合键也有效)。
永久解决: 提高 OpenCountOpenStepMs,让打开调用分散到整个过渡期间,而不是集中在同一个糟糕的帧。

以上任何情况都不会损坏任何东西。最坏情况下按一次 F 即可继续。


交易时的卡顿

进入序列不会轮询,但快速退出监视器会。当交易或升级菜单打开时,模组每 ExitWatchPollMs(默认 100 毫秒)执行一次轻量检查来感知何时关闭,而 Esc 的离开序列会运行一小段检查和调用连发。每次检查都会遍历游戏的对象列表,在较弱的 CPU 或大量模组的环境中,浏览商人时可能会出现轻微的微卡顿,退出时也可能出现短暂卡顿。

如何减少:

  • ExitWatchPollMs 提高到 150–300。代价是退出时跳过告别语会稍慢。
  • 提高 ExitLeaveRepeatMs 并降低 ExitLeaveAttempts,让退出连发更廉价。
  • 设置 QuickExitOnTradeClose = false 可完全禁用监视器。快速进入仍然有效;只是离开对话时使用原版方式。
  • 保持 DumpExitFunctions = false。设为 true 会在首次退出时执行一次重量级的一次性反射遍历,导致明显的卡顿。

如果离开商人后卡顿仍然持续: 可能是某个监视器偶尔未能自行清理。只需走回去,再次打开交易并按 Esc 退出一次——重新启动快速交易会清除任何残留的监视器,卡顿即停止。


调参 —— config.lua

打开:

<game>\Stalker2\Binaries\Win64\ue4ss\Mods\QuickTrade\Scripts\config.lua

默认值:

return {
Key = "F",
Modifiers = { "SHIFT" },

GreetingSkipStartMs = 40,
GreetingSkipCount = 9,
SkipStepMs = 55,

OpenStartMs = 320,
OpenCount = 4,
OpenStepMs = 160,

ReplySkipCount = 4,

UseSyntheticSpace = false,

QuickExitOnTradeClose = true,
ExitWatchPollMs = 100,
ExitTimeoutMs = 2500,
ExitLeaveRepeatMs = 90,
ExitLeaveAttempts = 8,

DumpExitFunctions = false,
}

触发设置

  • Key — 必须与你游戏中的互动/使用键一致。默认 F
  • Modifiers — 可为 CONTROLSHIFTALT 之一,或 {} 表示无修饰键。默认 { "SHIFT" }

问候语/回复跳过 —— 所有时间以毫秒为单位,从按键按下时开始计算

  • GreetingSkipStartMs — 首次跳过注入前的等待时间。对话打开较慢时增大;想更早抓住问候语则减小。
  • GreetingSkipCount — 开场连发中的跳过注入次数。问候语仍会播放就增大;连发会覆盖更长的时间窗口。
  • SkipStepMs — 跳过注入之间的间隔。更小 = 同一窗口内跳过更激进;更大 = 连发覆盖范围更广。
  • ReplySkipCount — 打开调用后额外的跳过注入,用于截断商人的回复台词。

打开菜单

  • OpenStartMs — 首次"打开交易/升级"调用前的等待时间。如果快速交易经常毫无反应,这个数字要调大——说明调用触发时对话尚未就绪。
  • OpenCount — 调用打开函数的次数。菜单有时打不开或出现"卡住无界面"状态时增大。
  • OpenStepMs — 打开调用之间的间隔。增大以使调用分散到界面过渡期间,而不是全部集中在同一帧。

物理空格键(可选)

  • UseSyntheticSpace — 每次跳过的同时发送真实的 Space 键。默认关闭:合成空格键无法可靠到达对话界面,并可能泄漏到游戏世界中导致跳跃。仅在 IA_SkipDialog 单独无法在你的构建中跳过台词时尝试设为 true

快速退出

  • QuickExitOnTradeClose — 整个快速退出+跳过告别功能及其后台监视器的总开关。设为 false 可完全禁用。
  • ExitWatchPollMs — 购物时监视器检查菜单关闭的频率。越小 = 退出越灵敏,后台开销越大。越大 = 交易时卡顿越少,跳过告别稍慢。
  • ExitTimeoutMs — 退出序列运行时间的安全上限,超过后模组将放弃。除非感觉退出拖沓,否则保持默认。
  • ExitLeaveRepeatMs — 退出连发中每次尝试之间的间隔。
  • ExitLeaveAttempts — 放弃前尝试离开的次数。告别语偶尔仍会播放时增大;想让连发更廉价则减小。

诊断

  • DumpExitFunctions — 首次退出时记录对话视图的函数名称,以帮助识别离开函数。会造成一次性卡顿。除非被要求启用,否则保持 false

默认值不合适时的建议起点: 慢速机器 / 频繁"无反应": OpenStartMs = 550GreetingSkipStartMs = 120GreetingSkipCount = 14OpenCount = 6。 经常"卡住、无界面": OpenCount = 6OpenStepMs = 220。 购物时卡顿: ExitWatchPollMs = 250ExitLeaveRepeatMs = 120ExitLeaveAttempts = 6。 然后重启游戏并在你最常用的商人处测试。

编辑 config.lua 后请完全重启游戏。 绑定和时序在模组加载时只读取一次。


系统需求

  • S.T.A.L.K.E.R. 2:切尔诺贝利之心 — Update 2.0
  • 来自官方 GitHub 发布页的 RE-UE4SS 实验版 NexusMods 构建
  • Windows x64
  • 附带的原生辅助 QuickTradeInput.dll(仅用于可选的合成按键)

兼容性: 针对 Update 2.0 Steam 可执行文件及下文所述实验性 UE4SS 设置构建并测试。游戏更新可能导致模组失效,需要新版本。


安装方法

如果你已经使用下述设置运行其他基于实验性 RE-UE4SS 构建的模组,直接跳到第 3 步。

  1. 安装实验性 RE-UE4SS。
    备份现有的
    <game>\Stalker2\Binaries\Win64\ue4ss
    文件夹,然后从官方发布页下载最新的实验版构建:
    RE-UE4SS 实验版发布页
    将其解压到
    <game>\Stalker2\Binaries\Win64
    使
    <game>\Stalker2\Binaries\Win64\ue4ss
    存在。

  2. 为 S.T.A.L.K.E.R. 2 配置 UE4SS。
    打开
    <game>\Stalker2\Binaries\Win64\ue4ss\UE4SS-Settings.ini
    并设置:

    bUseUObjectArrayCache = false
    DefaultFNameToStringMethod = Conv_NameToString
    
    HookInitGameState = 0
    HookLoadMap = 0
    HookCallFunctionByNameWithArguments = 0
    HookBeginPlay = 0
    HookEndPlay = 0
    HookLocalPlayerExec = 0
    HookAActorTick = 0
    HookEngineTick = 0
    HookGameViewportClientTick = 0
    

    保存文件。此处设置不正确可能导致游戏启动时崩溃。

  3. 安装 Quick Trade 实验版。
    将完整的 QuickTrade 文件夹复制到:

    <game>\Stalker2\Binaries\Win64\ue4ss\Mods
    

    最终路径:

    <game>\Stalker2\Binaries\Win64\ue4ss\Mods\QuickTrade
    
  4. 验证文件夹结构。

    Win64
    └── ue4ss
        ├── UE4SS.dll
        ├── UE4SS-Settings.ini
        └── Mods
            └── QuickTrade
                ├── enabled.txt
                ├── README.md
                └── Scripts
                    ├── config.lua
                    ├── main.lua
                    └── QuickTradeInput.dll
    
  5. 启动游戏。
    正常启动。UE4SS 会自动加载模组。瞄准商人并按 Shift+F

无需 .pak 文件。 附带的 enabled.txt 会自动启用模组;通常无需手动修改 mods.txt


故障排除

按下快捷键后完全无反应

  • 确认游戏中的互动/使用键,并将 config.lua 中的 Key 设为相同值。
  • 尝试将 Modifiers{ "SHIFT" } 改为 { "CONTROL" }{ "ALT" }
  • 确保你瞄准的商人/技师距离足够近,能显示正常互动提示。
  • 编辑配置后重启游戏——绑定仅在加载时读取一次。
  • 查看 ue4ss\UE4SS.log 中以 [QuickTrade] 开头的行。加载行会报告当前组合键和时序。

快速交易只是偶尔有效 这是预期行为——参见已知问题。提高 OpenStartMsGreetingSkipCountOpenCount,使脚本窗口更宽、更能容忍对话缓慢打开。在你最常用的商人处测试并小步调整。

对话打开但冻结,无菜单也无台词 按一次 F 解除卡住状态;交易窗口通常紧接着就会打开。要减少发生频率,提高 OpenCountOpenStepMs

快速退出未能离开对话SpaceF 跳过告别。然后降低 ExitWatchPollMs 并提高 ExitLeaveAttempts,以便更快地捕获关闭事件并采取行动。

在商人处购物时卡顿 提高 ExitWatchPollMs(150–300),提高 ExitLeaveRepeatMs,降低 ExitLeaveAttempts,或设置 QuickExitOnTradeClose = false。如果离开商人后卡顿仍继续,再打开交易并按 Esc 退出一次以清除残留监视器。

游戏启动时崩溃 使用 GitHub 上的实验版 RE-UE4SS 构建(而非 NexusMods 版本),并逐一检查安装方法第 2 步设置列表中的每个值。

DLL 触发杀毒软件警告 QuickTradeInput.dll 是一个用于可选合成按键的小型原生辅助。未签名、不常见的 DLL 可能触发启发式扫描器。只从可信来源下载。

游戏最近更新过 可执行文件可能已变更。移除此模组版本并到页面查看是否有更新。


卸载方法

  1. 关闭游戏。
  2. 删除
    <game>\Stalker2\Binaries\Win64\ue4ss\Mods\QuickTrade

或者删除模组文件夹中的 enabled.txt,保留文件但停止加载。无需清理存档。


我的其他模组


鸣谢

  • RE-UE4SS 贡献者 — 模组框架
  • S.T.A.L.K.E.R. 2 模组社区 — 工具与共享知识

祝狩猎愉快,潜行者。

高度实验性的社区模组。与 GSC Game World、Epic Games 或 RE-UE4SS 项目无关联或未经其认可。使用第三方模组风险自负。