DigitalVixen Core

DigitalVixen Core

这个模块仅用于以集中函数支持我现有和即将发布的模组。

- 简介 -

本模组仅包含我其他一些模组所需的功能,例如集中设置热键的地方。仅在需要时由我的其他模组要求下载和安装。

本模组现在还包含适用于我的 Shattered ChromeChrome Plating 模组的义体和注射器。即使没有安装这些模组,它们也会出现在义体医生的库存中,但如果你用不到它们,它们是无害的,只是放在那里,不会有任何作用。

现在还包含了对我的其他模组有用的各种 API——以及其他任何可能想使用它们的模组!

4.3.0 版本起,它还包含了我模组的物品数据库——一个集中知晓某件装备是什么(负重容量、枪套槽位、护甲等)的地方,并带有游戏内编辑器——并且它绘制了我的模组添加到物品上的提示行。

摘要 - 我的其他模组赖以生存的东西! (✿◠‿◠)

- 翻译层 -

我正在将所有翻译整合到这个模组中,这意味着作为翻译者,您可以在一个地方完成对我所有模组的翻译工作。不幸的是,这是一项需要大量时间的手动工作——尤其是我某些模组有非常多的选项——但这项工作将会完成。

- 翻译说明 -

a) 首先,在已安装模组之外的某个位置(这将简化打包),为您要翻译的模组创建以下文件夹结构:

r6\scripts\DigitalVixenCore\translations\<您想翻译的模组>

b) 接下来,打开已装模组中该目录下的 <语言>.reds 文件,并将其放入您新建的文件夹结构中。

c) 接着,打开文件并开始翻译!

d) 现在翻译过程本身已完成,是时候打包模组以便您安装了。这很简单,只需几个步骤!

要创建翻译模组本身:(这是针对 W10 的,W11/Linux/其他系统可能不同):

  1. 右键单击您自己的文件夹结构中的 r6 文件夹。
  2. 选择 "发送到"。
  3. 选择 "压缩的 Zip 文件夹"。
  4. 将 Zip 文件命名为合适的内容,例如 "SarahsTranslation-CE-SE-v4.8.3.zip"——最好使用与您所翻译模组相同的版本号。
  5. 您现在可以将该 Zip 文件作为新模组安装到 MO2 或 Vortex 中,在我的模组之后加载它,这样就大功告成了!
  6. 此外,只要仅包含翻译后的文件,非常欢迎您将翻译上传到 Nexus。

最后——非常感谢您的贡献!

- 选项 -

该模组集中托管我所有模组的热键设置。从 4.1.0 开始,它们位于我的 Redscript Config Framework 中心中:在游戏中按 F8(或在主菜单中使用“配置模组”按钮),打开 DigitalVixen Core,我的每个已安装模组都有自己的热键部分。键盘和手柄绑定均受支持,并且不再需要 Mod Settings 来处理这些设置。

追踪器状态窗口:可选,需要 RedWindows。 一个用于故障排除的实时诊断覆盖层:从 RedWindows 扩展坞打开 DVCore Tracker Status 来查看追踪器当前所认为的状态——玩家状态、义体区域、每件已穿戴物品及其物品数据库行、活动场景和工作点、物品门控。游戏保持不暂停。

物品编辑器窗口:可选,需要 RedWindows(以及用于保存的 RedFileSystem)。 从 RedWindows 窗口管理器打开 DVCore Item Editor。它分两个部分列出您穿戴的物品——Equipment-EX 服装和原版槽位——并列出每件物品的属性(负重、枪套、护甲、风格、派系、头部/面部遮盖、鞋类)。点击一件物品,从下拉菜单中选择数值,点击 “SAVE ROW”:只有您更改的列才会写入 r6\storages\DigitalVixenCore\itemfacts.user.json,数据库会重新加载,并且 FAC Carry Capacity / Chrome Plating / Street Sense 会在下次扫描时获取到更改。Pattern 字段默认为记录路径——将其缩短为前缀(例如 Items.Jacket_01_)即可覆盖所有颜色变体。点击 “REMOVE USER ROW” 会恢复为随附数据及启发式规则。随附文件与编辑后的文件不同,因此更新是安全的。Developer 复选框会添加第三个列表——您库存中的所有服装物品,无论是否穿戴——以便处理整个衣橱。

提示行:自动,此处无设置。 物品提示会以属性行的形式显示我的已安装模组所了解的关于该物品的信息。Chrome Plating 的护甲描述会接管游戏原有的护甲行(中型镀层 - 200 护甲 - 75% 状态),然后是 FAC Carry Capacity 的负重和枪套行(增加 15 负重可收纳 2 把手枪),True Sunglasses 的镜片色调(玫瑰色镜片),Street Sense 的鞋类、风格和遮盖行(运动鞋 - 脚步安静展现你的身体曲线遮住你的脸)。每个模组自己的设置决定其行是否显示。所有内容都来自游戏玩法所使用的同一物品数据库事实。

命中指示器:可选,需要 RedWindows v1.1.0+。 一个绘制的人形图形,会在每次射击击中您的位置亮起并逐渐消退,带有按区域划分的计数器以及持续的射击命中/击中统计。它根据您 V 的体型绘制,并跟随您当前所处的身体——播放强尼片段时图形就是强尼。从 RedWindows 扩展坞打开它。开启 Hit Indicator: Figure Only 后,边框、标题和计数器会消失,只留下人形图形作为 HUD 元素;您可以将其拖到任何位置,并使用窗口本身上的滑块或设置菜单中的 Hit Indicator: Figure Size 调整其大小。位置、大小和固定都会被记住,并且只要覆盖层打开,完整控件就会重新出现。

其他模组也可以在这个图形上绘制。如果安装了 Injuries,受伤的肢体(腿)会根据严重程度显示为黄色、橙色或红色标记,而新的命中仍然会闪烁在标记之上。

命中位置:同一配置页面上的部分。 决定来袭火力命中您身体的哪个部位。默认值已调校好;滑块是为那些想要不同“不公平”体验的人准备的。Cover-Aware Hit Zones 从射击者方向发射射线,以确定您身体的哪些部分实际暴露在外,因此命中只会落在未被掩体遮挡的区域——蹲在墙后只露出头部,你的腿就不会被击中。头/躯干/手臂滑块是在剩余部位上掷骰的权重,腿部则承担三个滑块决定后剩余的部分,而 Side Bias 决定从左方来的射击在多大程度上倾向于您的左侧肢体。Advanced Tuning 包含掩体擦边容差、瞄准点带和冲击高度带——除非感觉不对劲,否则请勿更改。

这整个层级在 4.7.0 中来自 Combat Evolved。现在它在这里,因为 Injuries 和 Shattered Chrome 都使用它,而且作为中心模组本来也不是 CE 的职责。

添加 DVCore 物品:开关。默认开启。位于同一页面顶部的“常规”部分。 向供应商库存中添加 DVCore 物品:纳米机器人注射器及其配方、Nanomend 植入体和 Tool Hands。如果您仅将 DVCore 作为其他模组的依赖项运行,并且不希望有额外的购物内容,则可以将其关闭——这样供应商就不会库存这些物品。更改将在下次加载游戏时生效;您已拥有的任何物品不受影响。

- API -

该模组包含多个 API,主要供我自己的模组使用,但其他模组也可以查询这些信息。

- DVPlayerState -

import DigitalVixenCore.*

DVPlayerState.IsRealPlayer(game)                // 在强尼 + 超梦中为 false
DVPlayerState.IsJohnny(game)                    // 狭义的:强尼木偶替换器
DVPlayerState.IsInBraindance(game)              // 狭义的:BraindanceSystem.GetIsInBraindance
DVPlayerState.WasUserInitiatedTimeSkip(game)    // 等待/睡眠后约60秒内为 true,然后过期
DVPlayerState.ConsumeUserInitiatedTimeSkip(game) // 同样的检查,但会清除标志

- DVPlayerOutfit -

public struct DVOutfitEntry {
  public let slotID: TweakDBID;   // EquipmentEx 服装槽位
  public let itemID: ItemID;      // 已装备的物品
  public let tdbid: TweakDBID;    // 预计算的 ItemID.GetTDBID
}

DVPlayerOutfit.GetEquippedItems(game)         -> array<DVOutfitEntry>  // 完整快照
DVPlayerOutfit.IsEquipped(game, tdbid)        -> Bool
DVPlayerOutfit.GetItemInSlot(game, slotID)    -> ItemID
DVPlayerOutfit.Invalidate(game)               -> Void

- DVClothing -

关于玩家所穿物品的分类事实,兼容 Equipment-EX,带衣橱事件失效的缓存。事实存储在这里;它们的含义(侦测分数、噪音乘数)保留在使用方模组中。

import DigitalVixenCore.*

DVClothing.GetWornFacts(game)         -> array<ref<DVWornItemFacts>>  // 每件穿着的物品及其事实(如下)
DVClothing.GetItemFacts(tdbid)        -> ref<DVItemFacts>            // 任何记录,无论是否穿着(用于提示)
DVClothing.GetAllClothingItems(game)  -> array<ItemID>  // EX 服装槽位,原版区域作为后备
DVClothing.Invalidate(game)           -> Void

一件穿戴物品是一个 DVWornItemFacts:itemID、tdbid、recordPath、area、slotID(Equipment-EX 槽位)、fromOutfit——加上 DVItemFacts 列:carry、holsterRanged / holsterRangedLarge / holsterMelee / holsterMeleeLarge、armorTier (0-3) + armorValue、style(DVClothingStyle: revealing / positive / intimidating / fear / annoyed)、faction(物品标签 CName)、headCover / faceCover(DVCoverClass none / partial / full)、footwear(DVFootwearClass, -1 = 非鞋类)、isBag / isHolster / isGearProp,以及来源标志(carryFromHeuristic、holsterFromHeuristic、fromUserOverride、inDatabase)。

- DVItemDatabase -

支撑这些事实的物品数据库。随附的数据行位于 r6\storages\DigitalVixenCore\itemfacts.json(pattern -> facts,按记录路径的子字符串不区分大小写匹配,每列最长匹配的 pattern 胜出)。您自己的数据行放在旁边的 itemfacts.user.json 中,格式相同——它优先于随附文件,并且模组更新永远不会覆盖它。在 JSON 之下,数据库读取 FACC 物品标签(FACCCarry20、FACCHolsterRanged...),最后是名称启发式规则(包、枪套、头盔、面具、派系、鞋类)。JSON 层需要 RedFileSystem + RedData;没有它们,则仅由标签 + 启发式规则响应。

DVItemDatabase.Get(tdbid)             -> ref<DVItemFacts>
DVItemDatabase.GetByPath(recordPath)  -> ref<DVItemFacts>   // NPC 装备路径等
DVItemDatabase.IsLoaded()             -> Bool               // 已读取 JSON 文件
DVItemDatabase.EntryCount()           -> Int32
DVItemDatabase.Reload(game)           -> Void               // 重新读取两个文件,然后触发 DVCore/ItemFactsChanged
// subscribe: GameInstance.GetCallbackSystem().RegisterCallback(n"DVCore/ItemFactsChanged", this, n"OnX")
//            private cb func OnX(event: ref<DVItemFactsChangedEvent>) -> Void

派系身份使用原版物品标签 CName(Maelstrom、TygerClaws、... AfterlifeMercs);没有标签的物品则回退到记录路径/名称匹配。面部遮盖理解头盔、巴拉克拉瓦面罩、面具、呼吸器和围巾(按记录路径)。

- DVTooltipRows -

不是一个公共 API,但如果您构建物品提示,值得了解:DVCore 仅挂钩一次游戏的两个提示统计容器(用于物品栏中心的 ItemTooltipCommonController.UpdateDetailsModule,用于背包/供应商/储物箱/战利品的 UIInventoryItemStatsManager.Size()),并在编译时向每个已安装的套件模组请求其行。

- DVCyberware -

按区域划分的义体占据度,缓存并定期重新计算。五个区域:头部(额叶皮层 + 系统替换件 + 眼睛)、躯干(心血管 + 神经 + 皮层)、手臂(手臂 + 手)、腿部、骨架。最初是为了在游戏中进行义体改造时产生渐进效果而制作——受伤风险、受击硬直衰减等。

import DigitalVixenCore.*

// 区域常量
DVCyberwareRegion.Head()       -> Int32  // 0
DVCyberwareRegion.Torso()      -> Int32  // 1
DVCyberwareRegion.Arms()       -> Int32  // 2
DVCyberwareRegion.Legs()       -> Int32  // 3
DVCyberwareRegion.Skeleton()   -> Int32  // 4
DVCyberwareRegion.Count()      -> Int32  // 5
DVCyberwareRegion.Name(region) -> String // 'Head' / 'Torso' / ...

// 单例
let dvc: ref<DVCyberware> = DVCyberware.Get(game);
if !IsDefined(dvc) { return; }

dvc.GetRegionFullness(region)   -> Float  // 0.0 (空) 到 1.0 (满)
dvc.IsRegionFull(region)        -> Bool   // fullness >= 0.999
dvc.GetEquippedCount(region)    -> Int32  // 该区域已安装的义体
dvc.GetMaxCount(region)         -> Int32  // 该区域可用的槽位
dvc.RecomputeNow()              -> Void   // 强制重新读取(否则每5秒自动进行)

4.2.0 起,这些区域来源于更精细的层级:游戏中所有十一个义体装备区域,单独追踪。五区域视图是命中位置形状的,这适合渐进效果,但合并了义体医生区分的区域——手臂包括手,头部包括操作系统和眼睛。当您需要每个槽位的细节时,请读取这些区域:

十一个区域,不是十个。义体屏幕显示十个类别,但游戏在移动底层记录时整合了界面——Pain Editor、Painducer 和 Shock-N-Awe 仍然装备到旧的免疫系统区域,同时列在皮层系统下。此层级统计引擎实际装备到的区域,因此索引 6 必须存在,否则这些植入体将不被计数。任何您放置在玩家面前的东西都应隐藏它,并将其计数添加到皮层系统——使用 DVCyberwareArea.IsPlayerVisible(idx)DVCyberwareArea.DisplayMergeTarget(idx) 来实现。

DVCyberwareArea.Count()        -> Int32   // 11 (装备区域,不是 UI 类别)
DVCyberwareArea.IsPlayerVisible(idx)    -> Bool   // 对整合后的免疫区域为 false
DVCyberwareArea.DisplayMergeTarget(idx) -> Int32  // 其显示在其下的可见区域
DVCyberwareArea.Name(idx)     -> String  // 'Frontal Cortex' / 'Operating System' /
                                          // 'Ocular System' / 'Circulatory System' /
                                          // 'Nervous System' / 'Integumentary System' /
                                          // 'Immune System' (玩家不可见) / 'Skeleton' / 'Arms' /
                                          // 'Hands' / 'Legs'

dvc.GetAreaEquippedCount(idx) -> Int32
dvc.GetAreaMaxCount(idx)      -> Int32
dvc.GetAreaFullness(idx)      -> Float

区域 API 及其事件保持不变,因此任何已在读取区域的模组都能继续正常工作。

- DVNIFTracker -

NIF(原生交互框架)场景追踪器。同时捕获标准的 nif_interaction_id 任务事实路径和后备的资源加载路径,因此绕过式活动(跳过事实的场景)也应该会被记录。API 支持推送和拉取。

推送 API - 订阅以在玩家开始任何 NIF 活动时触发。

import DigitalVixenCore.*

// 在 OnLoad / OnAttach 时订阅一次:
GameInstance.GetCallbackSystem()
.RegisterCallback(n"DV/NIFActivity", this, n"OnNIFActivity")
.SetLifetime(CallbackLifetime.Forever);

// 处理函数:
private cb func OnNIFActivity(event: ref<DVNIFActivityEvent>) -> Void {
  if Equals(event.sceneId, n"dance") { ... }
  if Equals(event.sceneId, n"sleep") { ... }
}

public class DVNIFActivityEvent extends CallbackSystemEvent {
  public let sceneId: CName;
}

每次活动发生触发一次(3秒去重窗口抑制重复触发)。

已跟踪的 sceneIds:wardrobe, sit, tea, sleep, shower, coffee, bar, incense, guitar, mirror, biliard, meditate, dance, chair, lean, netrunnerChair, iguana, yakitori, basketball, apartment, appearance, teleport.

拉取 API - 如果您更愿意自行轮询。

let tracker: ref<DVNIFTracker> = DVNIFTracker.Get(game);
if !IsDefined(tracker) { return; }

tracker.IsSceneActive(n"dance")          -> Bool  // 当前正在运行的场景
tracker.WasSceneJustLoaded(n"dance")     -> Bool  // 查看 60 秒窗口
tracker.ConsumeSceneJustLoaded(n"dance") -> Bool  // 查看并清除
tracker.WasNIFBedRecentlyLoaded(game)    -> Bool  // 专用的床加载辅助函数,5 分钟窗口
tracker.ConsumeNIFBedFlag()              -> Void

- DVWorkspotTracker -

通过 PlayerPuppet 工作点事件实现的通用原版+NIF 活动识别器。公开引擎附加到每个启动的工作点上的标签数组和状态效果 ID,因此使用者可以按标签匹配,而无需解析场景 ID。

import DigitalVixenCore.*

let tracker: ref<DVWorkspotTracker> = DVWorkspotTracker.Get(game);
if !IsDefined(tracker) { return; }

tracker.IsWorkspotActiveWithTag(n"sit")    -> Bool          // 玩家当前处于带 'sit' 标签的工作点
tracker.WasWorkspotJustStarted(n"sit")     -> Bool          // 查看 60 秒窗口
tracker.ConsumeWorkspotJustStarted(n"sit") -> Bool          // 查看并清除
tracker.GetCurrentWorkspotTags()           -> array<CName>  // 当前工作点的原始标签
tracker.GetCurrentWorkspotStatusEffect()   -> TweakDBID     // 工作点施加的 SE
tracker.IsInAnyWorkspot()                  -> Bool

与 DVNIFTracker 搭配使用效果很好——DVWorkspotTracker 告诉您引擎看到了什么活动(原版或 NIF,同一代码路径);DVNIFTracker 告诉您涉及到了哪个特定的 NIF 场景文件(如果这是您需要的)。

玩家命中位置

对“那一击命中你哪里”的唯一权威回答,这样单次射击就不会同时击碎您的头部义体并造成腿部受伤。在护甲和抗性之后触发,因此伤害是护甲减免后的;仅在目标是本地玩家且计算伤害大于零时触发。

import DigitalVixenCore.*

public class MyHitListener extends ScriptableSystem {

  private func OnAttach() -> Void {
    GameInstance.GetCallbackSystem()
    .RegisterCallback(n"DVCore/PlayerHit", this, n"OnPlayerHit")
    .SetLifetime(CallbackLifetime.Forever);
  }

  // 必须是 -> Void。-> Bool 的处理程序可以编译但会静默永不触发。
  private cb func OnPlayerHit(event: ref<DVPlayerHitEvent>) -> Void {
    if !IsDefined(event) { return; }
    // event.region Int32, 0..5
    // event.damage Float, 护甲减免后的生命值伤害
    // event.hitEvent ref<gameHitEvent>, 原始引擎事件
  }
}
public class DVHitRegion {
  public static func Head() -> Int32 = 0
  public static func Torso() -> Int32 = 1
  public static func ArmL() -> Int32 = 2
  public static func ArmR() -> Int32 = 3
  public static func LegL() -> Int32 = 4
  public static func LegR() -> Int32 = 5
  public static func Count() -> Int32 = 6
  public static func Name(region: Int32) -> String
  public static func ToCyberwareRegion(region: Int32) -> Int32 // 去除左右,映射到 DVCyberwareRegion
}

左右方位是图形自身的,不是观察者镜像。区域在三个阶段中决定,最先应用的获胜:范围伤害在整个身体上掷骰,躯干权重较高,腿优先于手臂,因为爆炸会波及身体的任何部分;直接读取引擎报告的真正冲击位置;否则,从射手方向发射射线,屏蔽掉所有被掩体阻挡的部分,然后按配置的权重对剩余部分进行掷骰。

身体地图颜色

一个模组可以在命中指示器图形上绘制——Injuries 会在腿部受伤时以黄色/橙色/红色标记,随着伤害进展而变化。DVCore 拥有图形、美术和命中闪光;模组仅提供标记,没有其他。拉取是在编译时进行的,因此无需注册也无需清理。

暴露一个名为 <模组名>BodyMapLayer 的类,其中包含静态的 Current(),然后告诉我,我会添加该插槽:

import DigitalVixenCore.*

public class MyModBodyMapLayer {
  public static func Current() -> ref<DVBodyMapLayer> {
    let layer: ref<DVBodyMapLayer> = DVBodyMap.NewLayer();
    layer.Mark(DVHitRegion.LegL(), DVBodyMap.Critical(), 1.0);
    return layer;
  }
}

标记是持久状态——“这条腿现在受伤了”——命中闪光会合成在其之上,因此在已标记的肢体上,新的命中仍然可读。权重范围从 0 到 1,决定区域从其空闲的灰色向您的颜色色调渐变的程度。当两个模组标记同一区域时,更高的权重直接胜出:将两种颜色平均会产生一种毫无意义的第三种颜色,而固定的优先级顺序会静默贬低先添加的任何模组。Minor()Serious()Critical()Chrome() 是一个建议的调色板,因此使用它的模组读起来像是一个系统,而不是两种配色方案之间的争斗。

- 更新 -

1.0.0 - 初始发布。 1.9.0 - 支持更多模组。 2.0.0 - 支持更多模组。 3.0.0 - 准备支持修饰键。各个模组仍需更新以支持。 3.1.0 - 修复了新物品的信息和名称。 3.2.0 - 支持某些模组在载具中使用热键,添加了对一个模组的支持。 3.2.1 - 修复了 SwitchableExtraQuickslots 的 ifModule。 3.3.0 - 为 TNV 和 TSG 添加了更多上下文。 3.3.1 - 为 Switchable Extra Quickslots 添加了修饰键支持。 3.3.2 - 为即将到来的更新提供内部支持。 3.3.3 - 为即将到来的更新提供内部支持。 3.4.0 - 代码清理。 3.5.0 - 支持更多模组,内部更改。 3.6.0 - 为即将到来的更新提供内部支持。 3.7.0 - 3.14.0 - 各种义体和注射器测试,但未达到预期效果。 3.15.0 - 添加了新的义体,可在脱战后于后台修复 Chrome Plating 护甲和 Shattered Chrome 义体。这些植入体非常昂贵但非常强大。当您脱战足够长时间且它们有时间稳定系统后,它们就会启动。 修复了注射器配方——基础和标准配方可用。军用只能从义体医生处购买。 3.16.0 - 为玩家状态添加了新 API - DVPlayerState。 3.17.0 - 为玩家状态添加了缓存系统。 3.18.0 - 为玩家穿戴物品添加了新 API - DVPlayerOutfit。 3.18.1 - 热修复:睡眠不再被错误分类为等待。 3.19.3 - 更新最高级义体 + 更多翻译。 3.19.4 - 移除了叠加选项:它只会造成混淆。注射器应恢复为一次性使用;增加了注射器重量。 3.19.5 - CE 引入翻译层。 3.19.6 - 为新治疗物品模组做准备,修复纳米机器人注射器;增加重量,确保仅限一次性使用。 3.19.8 - 为我的模组添加了共享的早期序章任务事实缓存。更多 Combat Evolved & Healing 本地化。Netrunner 本地化已更新。纳米机器人注射器现在可丢弃。 3.19.9 - 为 Healing 模组添加更多选项。 3.19.10 - 为 Combat Evolved 添加更多选项。 3.19.11 - 为以下模组添加更多翻译脚手架:Thread Locker, DigitalVixen Core, Combat Evolved, Night City Remembers。特别感谢 8LUMO8 完成的大量辛苦工作! 3.19.12 - 将 Calendar 添加到翻译层。 3.19.13 - 为 Combat Overhaul 添加更多选项。 3.19.14 - 为 Healing 添加更多翻译行。 3.19.15 - 为 Healing 模组做更多工作。 3.19.16 - Chrome Plating 获得翻译集成和更多选项。感谢 8LOMU8 的翻译脚手架工作! 3.19.17 - 调整时间跳跃检测。 3.19.18 - 自定义 NIF 场景追踪器,以可靠地检测模组公寓中的睡眠。 3.19.19 - 在车内睡眠通过 DVCore 通过 FAC 追踪。未添加依赖项。 3.19.20 - DVNIFTracker:完整场景覆盖。 3.19.21 - DVWorkspotTracker:通用的原版+NIF 活动识别器和公共 API。 3.20.0 - 新 API:DVCyberware - 由 Injuries 和 Combat Evolved 使用的集中式按区域义体占据度缓存(如果您想要,也可以用于您的模组)。为 Injuries + Combat Evolved 受击硬直添加了翻译脚手架。 3.20.1 - 较小的稳定性修复。 3.21.0 - DVNIFTracker 上新的推送 API。以及新的热键绑定以支持 Injuries 模组的医生访问交互。 3.21.1 - 修复:更正了 Nanomend Trauma Team / Trauma Team Plus GLP UIData 引用。BaseStats.ToolHandEquiped 从 Chrome Plating 移入此处。 3.22.0 - 支持新的 TFP 2.0 模组。 3.22.1 - 为 Street Sense 的 Ghost 功能添加脚手架。 3.22.2 - 纳米机器人注射器配方文本已更新。为 Injuries 1.1 模组做准备。 3.22.3 - 翻译脚手架。 3.22.4 - 同样。 3.22.5 - 同样。 3.22.6 - 移除了未使用的锁键。 3.22.7 - 更多脚手架工作。 3.22.8 - 修复了安装了 Dark Future 时的编译问题。感谢 gusvato3080 发布了修复,因为我没有时间处理这个问题! 3.22.9 - 为 TPC 添加了几个新选项。 3.22.10 - 更多 TPC 选项。 3.22.11 - 为即将到来的模组添加内容 + 新的 TFPC 选项。 3.22.12 - Street Sense 的完整本地化。 4.0.0 - 重大更新!我所有基于 Redscript 的模组(已发布的和部分正在开发中的)现在都可以通过这个核心模组完全支持翻译。我预先为18种语言制作了语言文件,加上英语,共19种。对于翻译者:这应该会显著减少工作量,每种语言每个模组只需要翻译一个文件。任何尚未翻译的文件包含英文默认值,因此您可以按照自己的节奏进行。 4.1.0 - 热键从 Mod Settings 移至我的 Redscript Config Framework:在中心中一个 DigitalVixen Core 页面,每个模组一个部分,支持键盘和手柄捕获,绑定无需任何重启即可生效。Mod Settings 依赖项已移除。 4.1.1 - 修复了几个模组的错误热键映射。 4.1.2 - 为 RCF 模组选择器添加了卡片 json;为日志添加了更多粒度。 4.1.3 - 为 TFPC 7.5.0 添加更多本地化。 4.1.4 - 修复:Nanomend 植入体效果(和纳米机器人注射器增益)在保存重载后消失——植入体处于停用状态,直到在义体医生处重新安装。感谢 hgfdstrew 提供的详细报告和正确的修复方案!也为 Street Sense 5.5.1 添加了新的本地化。 4.1.5 - 为 Street Sense 5.5.2 添加更多本地化。 4.2.0 - 新 API 和诊断窗口。 新增:

  • DVClothing - 其他模组可以读取的服装事实服务:面部遮盖 0..1(头盔、巴拉克拉瓦面罩、面具、呼吸器、围巾)、鞋类等级,以及您穿着多少特定派系的服装。仅限事实;它们的含义由询问的模组决定。
  • Tracker Status 窗口(可选,需要 RedWindows)。从 RedWindows 扩展坞打开它,查看每个追踪器当前相信的状态——玩家状态、义体、服装事实、活动场景和工作点、物品门控。每半秒刷新一次,并且可以在您关闭覆盖层后保留在 HUD 上。
  • 添加 DVCore 物品开关。将 DVCore 纯粹作为其他模组的基础设施运行,并关闭其自身的物品——纳米机器人注射器和配方、Nanomend 植入体、Tool Hands。供应商则不再库存这些物品。更改将在下次加载时生效;您拥有的物品仍会保留。
  • DVCyberware 现在单独追踪游戏自身的所有十一个义体装备区域。五个身体区域仍然和以前完全一样工作——它们只是现在从更精细的数据中派生出来的。 Bug 修复:
  • 在 4.0.1 之前保存的游戏上,已消耗的纳米机器人配方永远无法重新购买。旧的修复只对在其发布后制作的配方有效;现在,会话启动时的扫描会追溯清除那些陈旧的隐藏条目。
  • 更多本地化:Combat Evolved 4.12.0。 4.3.0 - 物品数据库。将各个模组的大部分物品功能迁移到这个统一的地方进行管理。新增:提示行——Chrome Plating、FAC Carry Capacity、True Sunglasses 和 Street Sense 添加到物品提示上的行现在由 DVCore 作为原生属性行绘制(参见选项)。添加了物品编辑器,Tracker Status 窗口现在可翻译,True Sunglasses 的整个 UI 也可翻译。 4.4.0 - 为 Drone Companions 添加更多脚手架。 4.5.0 - 翻译现在仅为实际安装的模组加载。 4.6.0 - 调色仲裁器:为即将到来的 True Sunglasses 和 True Night Vision 更新准备。 4.7.0 - 玩家命中位置层级从 Combat Evolved 移入此处:来袭火力命中您身体的位置、命中指示器图形及其设置。Injuries 和 Shattered Chrome 不再需要安装 Combat Evolved。新增:模组可以为图形着色——Injuries 会按严重程度标记受伤的肢体——并且图形会根据您的体型绘制。爆炸现在可以命中您身体的任何部位,而不仅仅是躯干和腿部,因此手榴弹可以使您脑震荡或打断手臂。 4.8.0 - 为 TFPC 添加新设置。 4.8.2 - 为 True Sunglasses 和 True Night Vision 添加新设置。 4.8.3 - Street Sense 5.6.1 措辞:一个潜行噪音滑块。

- 需求 -

本模组需要您安装以下内容: Redscript Codeware 及其所有依赖项。 TweakXL 及其所有依赖项。 Redscript Config Framework v2.0.0+ Input Loader 及其所有依赖项。

可选: RedWindows 用于新的覆盖层物品编辑器和调试数据。 RedFileSystem 用于编辑和保存物品。 RedData 用于编辑和保存物品。

- 安装 -

  1. 安装所有依赖项。
  2. 将下载的文件解压到您的主游戏目录中。

- 卸载 -

删除目录 \Cyberpunk 2077\r6\scripts\DigitalVixenCore\Cyberpunk 2077\r6\tweaks\DigitalVixenCore\Cyberpunk 2077\r6\storages\DigitalVixenCore 删除文件 \Cyberpunk 2077\r6\input\DigitalVixenCore.xml

您的存档中不会写入任何信息,因此随时移除都是安全的。

- 致谢 -

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

DigitalVixen 模组套件的一部分。 您现在可以在 Discord 上找到我:[点此加入!](https://