0-引擎增强模组

0-引擎增强模组

社区模组由0引擎增强 - 统一生命周期、共享状态和无缝兼容性。

杂项

- 介绍 -

本页面将收集我已为其添加 0-Engine 集成的模组。此处放置的模组已获得原作者明确许可,并进行了增强发布。

此处发布的所有模组均需先下载并安装原始模组。

我明确希望并期待能有更多模组作者允许进一步的增强,并发布他们自己的增强版本,因为这将对整个社区有益。

i 我不会将此模组页面或其内部的增强内容加入捐赠系统。

- 重要提醒 -

重要的一点是需要明白,虽然这有助于减轻系统负担,但它并非万能灵药。你仍然可能拥有过多的 CET 模组,如果你将这些增强版与其他占用资源较多的模组一起运行,这些模组的表现可能不佳,而且由于设计要求,它甚至可能使增强版模组的运行效果不如原始版本,尽管脚本负载更低。

原因如下:

  • CET 在单个线程上运行,所有模组在该线程中串行执行,一个接一个。
  • 执行代码时,完全由当前正在运行的模组来决定执行什么代码
  • 当 CET 运行时,游戏引擎会等待它完成后再进入下一帧 -> 这就是为什么在 CET 模组列表负载较高时会出现卡顿的原因。
  • 仅仅一个糟糕的模组就可能阻塞队列,而设计良好的模组会等待事件来告知它们何时运行代码、何时处于空闲状态。
  • 某些模组必须在每一帧都运行才能正常工作 -> 并非所有模组都能通过增强以使用 0-Engine 而获益。
  • 只修复十个模组中的一个不会有太大帮助。
  • 由于涉及范围的性质,我无法始终全面测试所有功能 -> 如有任何问题,请报告。

如有任何其他问题,请随时在评论区留言或给我发私信。

- 已增强的模组 -

Marmur Bank 作者:prius310l

此模组允许你从夜之城的任何自动售货点存款和取款!存入的资金会随时间推移产生利息。如果你同时安装了地点模组,还可以造访距离 H10 公寓仅一步之遥的宏伟银行总部。现在,当你接近终端时,交互提示将几乎立即出现。

原始模组:Marmur Bank - NC Bank add-on v1.0.5 (主版本)

  • 移除了每帧的 onUpdate - 通过 0-Engine 管理的定时器进行接近度检查(零空闲开销)
  • 107 个 ATM/银行职员位置已索引到 0-Engine 的空间哈希表中 - O(1) 最近邻查找取代了每帧的距离扫描
  • ATM 检测间隔从 1.0 秒缩短至 0.3 秒
  • 通过 0-Engine 事件(PlayerReady, PlayerInvalidated, MenuOpen)管理会话生命周期——取代了捆绑的 GameUI/Cron 库和 20 状态菜单监听器
  • 在 PlayerInvalidated 时进行正确的会话清理——停止所有定时器,重置银行定时器状态
  • 移除了主支行外的银行出纳员 NPC

NC Courier Jobs 作者:elminster

添加了一个快递和数据递送任务系统!内容丰富!

原始模组:NC Courier Jobs v3.1

  • 空闲门控——当没有快递任务进行时,模组完全休眠。正常游戏期间零每帧开销(6 次布尔检查 + 返回)
  • 所有备用的双重路径已被剥离——playerPos2D()、mountedVehicle()、isInVehicle()、取货/交付范围检查均直接使用 0-Engine 的缓存状态和 IsNear()
  • 通过 0-Engine 事件(PlayerReady, PlayerInvalidated, VehicleMount, VehicleUnmount)管理会话生命周期
  • tickJob() HUD 自动隐藏 + FX 状态机仅在活跃递送期间每帧运行
  • 一次性初始化任务(欢迎横幅、HUD 样式、引脚确保、存档恢复)由仅触发一次并成为永久无操作的标志控制

Dedka Car Dealership 作者:dederara

一个用于购买汽车的游戏中商店!无需只在电脑上购买你梦寐以求的汽车,快来光顾这家精彩的商店,在购买前亲眼看看实车吧!

原始模组:Dedka Car Dealership v1.2

  • 2 个接近区域(每个 200 米)——当你在其他地方时,模组完全休眠
  • 自定义 os.clock() 任务调度器替换为 0-Engine 定时器
  • 通过 0-Engine 事件处理车辆上下车——取代了每帧的 GetMountedVehicle() 轮询
  • 所有距离检查从每帧移至 5Hz 间隔,仅当在区域内时执行
  • 通过 PlayerInvalidated 进行会话清理 - 销毁车辆,重置商店状态
  • onUpdate 从 109 行减少到 18 行(受区域门控)

Dedka Car Dealership Reimagined 由 ApoKrytia 在以上 0-Engine 转换的基础上衍生而来

原始模组:Dedka Car Dealership v1.2

此版本改动如此之大,以至于我将来可能会自行维护或重复使用某些概念。 我曾考虑单独发布,但算了,因为我不想处理 Nexus 的规则,或者为了“修复”而请求许可,并且仍然需要原始模组。

  • 车辆展示顺序现在每次加载时都会随机打乱,而不是遵循固定顺序。
  • Virtual Car Dealer 支持:兼容的 VCD 车辆会被自动检测并添加到轮换列表中,无需 JSON 配置。
  • 轮换崩溃已修复:快速连续点击“下一辆/上一辆”不再累积实体生成;新请求将排队等待,直到当前批次完成。快速点击仍然可能崩溃,但这应该比原始有问题的版本好得多。支持 CET 实时调校车辆。
  • 更好的分类排序:车辆现在使用游戏内的“visualTags”将其分类为廉价 / 重型 / 高档,仅当车辆没有标签时回退到调整后的价格阈值。
  • 在第五个位置添加了“今日特价”:这个特殊位置展示一辆随机选择的 Premium/Sport 车辆,其标价享受 35–50% 的折扣,在当前游戏日内固定,并在午夜刷新。
  • 车辆所有权保护:商店现在会检测你的车库。已拥有的车辆会在菜单中清晰地标记为 [OWNED] 标签,并阻止重复购买。

定价:

每辆车都有一个正常的商店价格范围,包含最小值和最大值。显示的价格在该范围内随机生成。价格现在按轮换集缓存。在折扣日,游戏会从一个更窄的折扣范围内进行随机。折扣日是每辆车设定的(1 = 周日 ... 7 = 周六),因此每辆车可以在不同的工作日进行促销。

对于 VCD 自动检测的车辆,其价格范围会根据原始经销商价格自动生成,以便进行有意义的访问:

  • 摩托车:原始经销商价格的 35–60%。
  • 廉价车:原始经销商价格的 30–60%。
  • 重型车:原始经销商价格的 45–70%。
  • 高档车:原始经销商价格的 65–80%。
  • 硬上限:商店最高价格严格限制在原始 VCD 经销商价格的 90%。
  • 折扣日:从 {周一, 周二, 周三, 周五, 周六} 中随机选取 2-3 天。
  • 折扣范围:具体计算为比该车辆最低标准日价格低约 10% 到 25%,确保促销总是真正的优惠。

“今日特价”在标价基础上额外应用 35–50% 的固定折扣,每个游戏日刷新一次。

Dedra's Truck Simulator 作者:dederara

找一份日结工作——在夜之城内运送货物!取货并交付货物,随着完成任务解锁新的仓库。

原始模组:Dedra's Truck Simulator v3.1

  • 完全移除了 onUpdate - 通过 0-Engine 帧调度器(每 5 帧)处理主要逻辑
  • 智能自门控:在空闲阶段,检查与 3 个基地的接近度,当你远离所有仓库时跳过所有操作
  • 在活跃交付期间,以全频率运行,用于检测取货/卸货/完成
  • 通过 PlayerInvalidated 进行会话清理 - 销毁卡车,清除引脚,重置阶段

Immersive Meditations - Unmarked Locations 作者:dederara

在夜之城和恶土风景优美的地方冥想!在 49 个地点之一坐下,等待 17 秒,即可获得“休息过”增益效果以及“黑暗未来”神经恢复。非常适合沉浸式角色扮演。

原始模组:Immersive Meditations - Unmarked Locations v4.0

  • 49 个微型区域(每个半径 3 米)——每个冥想点一个。除非你站在其中一个点上,否则模组完全不执行任何操作。
  • 零 onUpdate - 完全没有每帧代码。冥想计时器以 0.5 秒的间隔运行,受区域接近度门控。
  • 通过 PlayerInvalidated 进行会话清理 - 重置计时器和区域状态

R.A. Militech Behemoth Mobile Living Conversion - Fully Drivable Homebase (Truck) 作者:dederara

拥有一辆房车——一辆完全可驾驶并附带可以前往任何地方的家的卡车!

原始模组:R.A. Militech Behemoth Mobile Living Conversion - Fully Drivable Homebase (Truck) v1.5

  • 消除了 onUpdate 轮询:完全移除了以前每帧处理 9 个不同问题的 260+ 行 onUpdate 循环。
  • 事件驱动转换:用 0-Engine 的 Subscribe 调用来替换 ObserveAfter 和每帧车辆记录轮询,用于处理 VehicleMount、VehicleUnmount 和 PlayerReady 事件。
  • 动态接近区域:用 4 个高效的 RegisterZone 句柄替换了手动的 os.time() 距离检查,用于处理后备箱交互、传送目的地、保存锁定和召唤停用。
  • 原生定时器管理:用非阻塞的 SetTimeout 和 SetInterval 调用替换了手动的增量时间轮询,以处理传送延迟、车辆旋转和生命值监控。
  • 生命周期清理:实现了一个由 PlayerInvalidated 触发的集中式 clearAllHandles 流程,以确保在会话结束时正确销毁所有区域、定时器和保存锁。

Go on a Date (Panam) - Side romance activity 作者:dederara

“与帕南约会”功能增加了与帕南的额外浪漫约会,通过手机消息触发,并以迷你开放世界支线任务的形式展开。

原始模组:Go on a Date (Panam) - Side romance activity v2.1

  • 消除了 onUpdate 轮询:完全移除了 onUpdate 循环,用基于事件的高效状态转换替换了海滩、射击场和自动修复场景的每帧状态轮询。
  • 事件驱动的生命周期:从传统的 Observe 钩子和会话检查迁移到原生的 PlayerReady 和 PlayerInvalidated 订阅,确保模组只在游戏世界完全稳定时初始化。
  • 高效接近区域:用原生的 RegisterZone 句柄替换了手动的 3D 距离计算和坐标轮询,以零 CPU 开销管理环境特定触发器和语音对话序列。
  • 原生定时器实现:放弃了对 Cron 库的依赖,改用非阻塞的 SetTimeout 和 SetInterval 调用来管理定时逻辑,例如射击场提示和延迟状态重置。
  • 集中化生命周期清理:在 PlayerInvalidated 中实现了一个统一的销毁流程,自动清除所有活跃区域、间隔和数据句柄,以确保在会话之间保持干净状态。

Dedra's Jobs of Night City - Joytoy - Full version 作者:dederara

在这里,你有机会扮演一个“欢愉玩具”,赚取欧元并承担后果。支持所有游戏内语言。支持 V 的两种性别版本!

原始模组:Dedra's Jobs of Night City - Joytoy - Full version v1.21

  • 消除了 onUpdate 轮询:完全移除了两个脚本中的重量级 onUpdate 循环,根除了手动的每帧距离轮询、精细计时器滴答和基于模数的帧跳过操作。
  • 事件驱动转换:用稳健的 0-Engine Subscribe 调用来替换 GameSession 生命周期钩子(OnStart, OnLoad, OnEnd),以一致地处理 PlayerReady 和 PlayerInvalidated 的会话设置、变体重置和状态清理。
  • 动态接近区域:在教学脚本中,用高效的 RegisterZone 句柄替换了手动的 sqrDist 坐标检查,这些句柄监听玩家,执行 onEnter 回调,并在成功显示弹出窗口后干净地取消注册。
  • 原生定时器管理:用原生的非阻塞 SetTimeout 和 SetInterval 调用替换了自定义的 _timers 表格和手动增量时间计算,将主逻辑、音乐循环和 HUD 强制更新清晰地划分为不同的优化频率(例如 0.083 秒、0.167 秒、0.25 秒)。
  • 自动化会话清理:增强了 GameSession 模块,引入智能文件轮换系统,自动清除旧会话数据,严格只保留最近的 5 个存档文件,以防止目录混乱并优化存储。
  • 生命周期清理:实现了由 PlayerInvalidated 和 onShutdown 触发的集中清理流程,确保在离开存档时正确清除所有音频循环、会话限制、区域和动态预制件变体。

Card Collection - Treasure Hunt 作者:Namoriz

收集散落在夜之城的隐藏卡片!找到所有卡片以获得额外奖励。每张卡片都放置在特定的世界位置,并附有神秘的提示来引导你。

原始模组:Card Collection - Treasure Hunt v2

  • 消除了 onUpdate 接近度循环——原始版本每帧检查与所有 ~100 张卡片的距离。替换为 0-Engine 空间哈希集合(网格索引,O(1) 查找)。
  • 零空闲成本——只有当玩家在任何卡片单元格的范围内时,空间集合才会自动轮询,否则完全休眠。
  • 对 100 张卡片的每帧 GetWorldPosition() + 距离计算 → 带有进入/退出回调的单次空间哈希查询。
  • 通过 0-Engine 事件(PlayerReady, PlayerInvalidated)管理会话生命周期——加载时注册空间集合,会话结束时清理。

Rent a Motel 作者:Hepero

在夜之城的五家汽车旅馆租用房间!在终端付款,房间就是你的了。超过租期将收到罚款。在 5 个独特房间中的每一个都包含淋浴、睡眠和其他互动。

原始模组:Rent a Motel v6.0

  • Cron 库被猴子补丁,路由到 0-Engine 定时器。
  • 每个汽车旅馆的接近区域都注册到 0-Engine,由其自带的帧循环进行检查。
  • onUpdate 减少为一个门控的 interactionUI 滴答——仅在租用提示实际显示时运行。
  • 当你处于接近区域之外并做其他任何事情时,CPU 成本为零空闲。
  • 区域和定时器在会话结束时取消注册,并在会话开始时重新注册。

- 已停用的增强 -

移到此部分的模组表示我们不再积极维护其 0-Engine 版本。模组保留在此部分,文件仍在文件选项卡的“旧版”部分,以防任何人出于任何原因继续使用它们——但不再提供支持

原因可能包括:

  • 该模组已由其原作者迁移到 0-Engine,使此处的版本过时。
  • 该模组已被另一个模组取代,我们认为迁移到那个模组更可取。
  • 任何其他我们不再想维护它的原因。

- 已有原作者提供的 0-Engine 版本 -

Immersive Odometer and Fuel System 作者:elminster

为所有夜之城的汽车添加了里程表和燃料系统!现在你必须留意你的汽车消耗了多少汽油,并在油量低时加油! 这个模组对沉浸感非常有益,并且利用了夜之城及周边地区众多加油站,以及其他一些地方。请查看主页了解任何配置选项等。

原始模组:Immersive Odometer and Fuel System v4.3

  • onUpdate 被大幅精简——所有启动任务(存档恢复、小部件重新断言、配置重载、价格更新、被窃车辆垃圾回收)都移至自停止的 0-Engine 间隔。仅保留里程表/燃料循环,且仅在你在车辆内时运行。
  • 通过 0-Engine 事件处理车辆上下车——取代了每帧的 GetMountedVehicle() 轮询。
  • 机油温度模拟在未上车时被限制为间隔运行——当所有车辆达到环境温度时自行停止。
  • 通过 0-Engine 事件(PlayerReady, SessionEnd, MenuClose)管理会话生命周期——取代了捆绑的 GameUI 库和手动会话监视器。
  • 存档恢复从永久的 20hz 轮询转换为停止后即结束的一次性重试链。
  • 清理旧的会话存档文件,最多保留 5 个。

- 更新日志 -

1.0.0 - 初始发布。添加了 Marmur Bank 2.0.0 - 添加了 Immersive Odometer and Fuel System 2.0.1 - 修复了 Immersive Odometer and Fuel System 的 Bug 3.0.0 - 添加了 Dedka Car Dealership, NC Courier Jobs, Dedra's Truck Simulator, Immersive Meditations - Unmarked Locations, R.A. Militech Behemoth Mobile Living Conversion。更新了 Marmur Bank(更快的 ATM 检测,会话清理修复)。 3.1.0 - 添加了 Go on a Date (Panam), Dedra's Jobs of Night City - Joytoy - Full version。 3.1.1 - 修复了 Courier Job 自动隐藏。 4.0.0 - 添加了 Card Collection - Treasure Hunt 4.1.1 - 将 Immersive Odometer and Fuel System 更新至 4.3 5.0.0 - 添加了 Dedka Car Dealership Re-Imagined 6.0.0 - 添加了 Rent a Motel

- 前置需求 -

这些模组增强需要你安装以下内容:

0-Engine 及其所有依赖项。目前推荐使用 Pure CET 版本。

- 安装 -

  1. 安装所有依赖项。
  2. 根据各自模组的安装说明(在原始页面上)安装原始模组。

如果进行手动安装: 3. 将下载的文件解压到你的主游戏目录,如果提示则选择覆盖。

如果使用模组管理器: 3. 使用模组管理器安装。 4. 确保增强版最后加载,以便覆盖原始版本。

- 卸载 -

请遵循相应原始模组页面上的卸载说明。

- 致谢 -

感谢 CET 和 redscript 社区提供的工具和文档。

感谢所有精彩的模组作者,他们持续创作内容供我们免费享用!