永久提高生命值、护甲、DPS 等(适用于 PC 与 PS4 存档)
使用存档编辑器修改武器和服装属性;修改前务必备份存档。PS4 存档可用,但操作前需要使用 Save Wizard for PS4 MAX。DPS 示例是为武器添加 DPS Constant 属性并设置数值。
为模组提供玩家是否处于实际游戏操作状态的实时检测,可通过事件监听器在状态变化时更新,不依赖 onDraw 循环。覆盖游戏中、暂停、模糊菜单、手机菜单、过场、死亡和未加载等状态,并提供调试 HUD。需要 Cyber Engine Tweaks。
在研究模组时,我发现检测玩家是否处于实际游戏操作状态并不简单,因此制作了这个工具,为模组提供实时状态检测,避免编写繁重的帧循环或观察器。它会跟踪状态,并通过事件监听系统通知依赖它的模组;无需重复调用,也不依赖 onDraw。
工具会同时返回两个值:布尔值 isPlayerInControl 和字符串 currentControlState。
**说明:**此工具用于检测较高层级的宏观状态,判断游戏是否暂停,不提供细粒度的 UI 跟踪。例如,它不会识别具体打开的是哪个菜单或物品栏分页。
在使用此工具的模组页面将 GameplayState 列为硬性前置。
模组只需通过 GameplayState.OnStateChange 监听器调用一次即可。无需自行处理观察器,不要在 onDraw 中声明监听器。
请始终仅在原生 onInit 事件钩子中使用,示例如下:
local GameplayState = nil -- GameplayState 模组引用
local isPlayerInControl = false -- 在本地保存状态
local currentControlState = "Unknown"
registerForEvent('onInit', function()
GameplayState = GetMod('GameplayState') -- 使用 CET 标准方法获取 GameplayState 模组引用
-- 仅在模组初始化时添加监听器。GameplayState 会在状态变化时更新变量。
if GameplayState then
GameplayState.OnStateChange(function(inControl, stateName)
isPlayerInControl = inControl
currentControlState = stateName
end, 'Your Mod Name') -- 可选参数:用于在日志中标识你的模组
else
print('[Your Mod Name] ERROR: GameplayState mod not found, make sure you have it installed!')
end
-- 此后可在任何位置(包括 onDraw)使用本地变量;它们会随游戏状态更新。
if GameplayState then
if isPlayerInControl then
-- 玩家可控制且正在游戏中时执行的代码
else
if currentControlState == "In Cutscene" then
-- 隐藏自定义 HUD 控件,以增强剧情沉浸感
elseif currentControlState == "Paused" then
-- 保持 UI 覆盖层开启,同时安全暂停生存/状态机制
end
end
end
end)
如确有需要,也可以手动调用公开方法 GameplayState.isPlayerInControl(),它会返回当前的 inControl 和 stateName 值。
工具内置 HUD,可实时测试集成效果并确认返回值:
OnStateChange 后,工具会在 CET 控制台输出 INFO 信息。config.json,并在游戏重启后保留。CET 执行“Reload all mods”后也会保留,便于模组开发测试。特别感谢 psiberx 提供开源 CET KIT。此工具特别依赖其中的 GameSession,用于处理大部分底层检测。
作者:flepgg。前置:Cyber Engine Tweaks。
v1.01 - Small bug fix to stop writting log error on edge case. No functionality changes.
前往 N 网打开所选文件。安装与下载要求以原作者及平台说明为准。
<!-- aoe-mods-source:nexusmods:cyberpunk2077:30315 -->