始终首次装备 (Always First Equip) 封面

始终首次装备 (Always First Equip)

赛博朋克2077玩法

每次装备武器或按下快捷键时重复播放 firstEquip 动画。可触发额外的武器检视动画:IdleBreak 与 SafeAction。高度可配置。

预览

前置 Mod

详情

信息

  • 每次拔出武器时重复播放 firstEquip 动画,因为这样就是帅 :) 应请求制作。
  • 追踪不同的游戏事件,以在不应播放动画时跳过动画(交互之后、攀爬、处决敌人等)。
  • 动画可随时通过瞄准打断。
  • 可触发额外的武器检视动画(详见下文)。
  • 新增可自定义的快捷键,用于触发首次装备、待机小动作和安全动作动画
  • 新增可自定义的快捷键,用于在持枪准备与垂枪姿态之间切换

简短动画演示见此:https://imgur.com/a/wR3xBHc

支持的动画

firstEquip

通常,你会在 V 首次装备任意武器时看到此动画。

如何触发

在武器收起时按下相关快捷键,即可用 firstEquip 动画装备它。此外,当你以 FirstEquipConfig 设定的某个概率(默认 50%)装备武器时也会看到它。最后,你可以启用动画冷却选项,用“在设定的时间段内只播放一次”的逻辑取代基于概率的判定。使用 mod 主快捷键(默认 F2)。

IdleBreak

通常,你会在 V 拿着武器站立不动时以一定概率看到此动画,看起来像简短的武器检视。

如何触发

在武器出鞘时按下相关快捷键即可播放 IdleBreak 动画;此外,当 V 拿着武器站立不动时,也会以 IdleBreakConfig 设定的某个概率看到它。动画判定按周期运行,默认值意味着 IdleBreak 判定每 5 秒运行一次,以 10% 的概率播放动画。使用 mod 主快捷键(默认 F2)。

SafeAction

通常,你会在禁止使用武器的安全区域内尝试开火时看到此动画,对某些左轮手枪、手枪和步枪来说像是检查弹巢,对其他武器则是另一种简短检视。

如何触发

在武器出鞘时按住相关快捷键即可播放 SafeAction 动画。在你按住快捷键期间,V 会将已装备的武器保持在“检视”状态。使用 mod 主快捷键(默认 F2)。

垂下你的武器

通常,你会在安全区域中或在瞄准某些任务或重要 NPC 时看到此动画

如何触发

在武器出鞘时按下相关快捷键,即可在垂枪与准备姿态之间切换。使用 mod 附加快捷键(默认 F3)。

如何安装

  • 下载所有必需的前置依赖,并将其解压到游戏文件夹中
  • 下载 Always First Equip 压缩包并解压到游戏文件夹中
  • (可选)通过 mod 设置菜单配置该 mod

所需 redscript 版本:0.3.0+

如何卸载

  • 删除 Cyberpunk 2077\r6\scripts\alwaysFirstEquip.reds 文件
  • 删除 Cyberpunk 2077\r6\input\AlwaysFirstEquip.xml 文件
  • 删除 Cyberpunk 2077\archive\pc\mod\AlwaysFirstEquip.archive 和 Cyberpunk 2077\archive\pc\mod\AlwaysFirstEquip.archive.xl 文件

翻译

如果你想将 mod 设置菜单翻译成你自己的语言,请下载 Translation sources 压缩包,用任意文本编辑器(我推荐 Notepad++)打开 first-equip.json,并只翻译带有 "femaleVariant" 键的行(示例截图,你应该修改的文本已用黄色标出)。之后在此处下方的表格中查找你语言对应的代码,并将翻译好的文件发回给我。

当前支持的语言:

  • English
  • Russian
  • French (credits to Unseen Unit)
  • German (credits to vorgash)
  • Simplified Chinese (credits to Alk4idin)
  • Traditional Chinese (credits to hansdofer)
  • Japanese (credits to aile1111)
  • Spanish (credits to XHisparemiX and davoker)
  • Polish (credits to george173)
  • Brazilian Portuguese (credits to ProtonWave)
  • Czech (credits to TheWolfeus)
  • Thai (credits to L A T I N)
  • Turkish (credits to JDMlLegioNl)
  • Italian (credits to igorSPQR)

鸣谢

  • jekky 提供 redscript 编译器
  • RayNOS 提供 mod 创意
  • psiberx 提供基础快捷键监听器思路、archivexl 以及所有相关内容
  • CP77 modding discord

我的 mod

致 redscript mod 开发者

// Replacements
@replaceMethod(LocomotionEventsTransition)
public func OnEnter(stateContext: ref<StateContext>, scriptInterface: ref<StateGameScriptInterface>) -> Void

@replaceMethod(CarriedObjectEvents)
protected func OnEnter(stateContext: ref<StateContext>, scriptInterface: ref<StateGameScriptInterface>) -> Void

@replaceMethod(InteractiveDevice)
protected cb func OnInteractionUsed(evt: ref<InteractionChoiceEvent>) -> Bool

@replaceMethod(gamestateMachineComponent)
protected cb func OnStartTakedownEvent(startTakedownEvent: ref<StartTakedownEvent>) -> Bool

@replaceMethod(FirstEquipSystem)
public final const func HasPlayedFirstEquip(weaponID: TweakDBID) -> Bool

@replaceMethod(EquipmentBaseTransition)
protected final const func HandleWeaponEquip(scriptInterface: ref<StateGameScriptInterface>, stateContext: ref<StateContext>, stateMachineInstanceData: StateMachineInstanceData, item: ItemID) -> Void

@replaceMethod(ReadyEvents)
protected final func OnTick(timeDelta: Float, stateContext: ref<StateContext>, scriptInterface: ref<StateGameScriptInterface>) -> Void

// Added methods
@addMethod(ReadyEvents)
protected func OnDetach(const stateContext: ref<StateContext>, const scriptInterface: ref<StateGameScriptInterface>) -> Void