拾取便利性优化

拾取便利性优化

搞清楚你在打劫谁或者什么东西。

中心图片

Looting QoL 会根据你搜刮的对象或内容来修改搜刮界面中的标题。

  • 容器:在物品上方显示容器名称,而不是“内容物”(CONTENTS)。
  • 物品:不显示标题。因为事实证明,物品的“内容物”确实就是物品本身。
  • 被击败的敌人:显示其所属派系和名字——如果已死亡,会标记为“已死亡”。
  • 已扫描的被击败敌人:显示其真实姓名——如果已死亡,会标记为“已死亡”。
  • 如果某事物因某些原因没有名字,则会显示“...”。
  • 如果你是模组作者,你可以使用 redscript 动态地为容器或 NPC 设置自定义名称。请参阅下文。

Looting QoL 与以下模组搭配效果良好 ...

  • Loot Icons Extension - 更多样化且可自定义的战利品图标,并可在战利品窗口中自行排序。
  • Numerals Get Commas - 也是一个 QoL 模组。如果你希望战利品窗口和其他地方的数字用逗号分隔。
  • Loot Quantity Text - 也是一个 QoL 模组。如果你希望战利品窗口中显示物品在 9999 以上的确切数量。
  • Flavorful Descriptions - 也是一个 QoL 模组。如果你希望在更多战利品上看到原版传说文本。

更新日志

  • v1.0:初始发布
  • v1.1:为模组作者添加自定义命名功能(见下文)
  • v1.2:添加 Codeware 作为模组依赖项
  • v1.3:稳定性小幅改进
  • v1.4:改进了标记敌人死亡时的死亡侦测逻辑
  • v1.5:稳定性与效率小幅改进
  • v1.6:增加了对重复派系名称与显示/原型名称的检查
  • v1.7:小幅代码改进以保持最新和稳定
  • v1.7:未命名的容器仅显示“...”代替名称
  • v1.8:标题中的分隔符(“·”)现在可翻译
  • v1.9:芯片(Shards)已移除“内容物”标题
  • v2.0:修复了扫描任务 NPC 命名的小错误

模组冲突

  • 此模组可能与任何修改搜刮界面的模组冲突。

前置需求

模组开发者信息 要给予容器或非任务 NPC 自定义名称,只需添加并使用以下 redscript 脚本。

// 条件导入:

@if(ModuleExists("LootingQoL"))
import LootingQoL.*

// 更改 NPC 派系名称(显示在显示名称之前,后跟一个空格):

@if(!ModuleExists("LootingQoL"))
public static func SetCustomFactionName(gameObject: ref<GameObject>, s: String) { return; }

@if(ModuleExists("LootingQoL"))
public static func SetCustomFactionName(gameObject: ref<GameObject>, s: String) { gameObject.m_customFactionName = s; }

// 更改 NPC 或容器的显示名称:

@if(!ModuleExists("LootingQoL"))
public static func SetCustomDisplayName(gameObject: ref<GameObject>, s: String) { return; }

@if(ModuleExists("LootingQoL"))
public static func SetCustomDisplayName(gameObject: ref<GameObject>, s: String) { gameObject.m_customDisplayName = s; }

// 使 NPC 派系名称覆盖扫描后给出的名称:

@if(!ModuleExists("LootingQoL"))
public static func SetCustomFactionNameOverridesScanner(gameObject: ref<GameObject>, b: Bool) { return; }

@if(ModuleExists("LootingQoL"))
public static func SetCustomFactionNameOverridesScanner(gameObject: ref<GameObject>, b: Bool) { gameObject.m_customFactionNameOverridesScanner = b; }

// 使 NPC 显示名称覆盖扫描后给出的名称:

@if(!ModuleExists("LootingQoL"))
public static func SetCustomDisplayNameOverridesScanner(gameObject: ref<GameObject>, b: Bool) { return; }

@if(ModuleExists("LootingQoL"))
public static func SetCustomDisplayNameOverridesScanner(gameObject: ref<GameObject>, b: Bool) { gameObject.m_customDisplayNameOverridesScanner = b; }

// 使 NPC 派系名称仅在其被扫描后才出现:

@if(!ModuleExists("LootingQoL"))
public static func SetCustomFactionNameOnlyIfScanned(gameObject: ref<GameObject>, b: Bool) { return; }

@if(ModuleExists("LootingQoL"))
public static func SetCustomFactionNameOnlyIfScanned(gameObject: ref<GameObject>, b: Bool) { gameObject.m_customFactionNameOnlyIfScanned = b; }

// 使 NPC 显示名称仅在其被扫描后才出现:

@if(!ModuleExists("LootingQoL"))
public static func SetCustomDisplayNameOnlyIfScanned(gameObject: ref<GameObject>, b: Bool) { return; }

@if(ModuleExists("LootingQoL"))
public static func SetCustomDisplayNameOnlyIfScanned(gameObject: ref<GameObject>, b: Bool) { gameObject.m_customDisplayNameOnlyIfScanned = b; }

// 最后,若仅需检查是否安装了 Looting QoL,请将此布尔值添加到你的 ScriptableSystem:

@if(!ModuleExists("LootingQoL"))
public static const let bLootingQoL: Bool = false;

@if(ModuleExists("LootingQoL"))
public static const let bLootingQoL: Bool = true;

我的《赛博朋克 2077》模组列表