No Combat Weapon Swap(战斗中禁止切换武器)

战斗开始后锁定三个武器栏,不能通过背包临时更换装备;正常切换已装备武器、投掷物、消耗品等不受影响。版本 1.1 新增弹尽时从地面拾取武器并替换当前栏位的功能。适用于《赛博朋克 2077》2.3 或更新版本;需要 redscript。

0浏览
0下载点击
0点赞
0收藏

关于这个 Mod

No Combat Weapon Swap(战斗中禁止切换武器)

你的装备配置应该在枪声响起前决定,而不是交火过程中临时调整。

1.1 版本更新

1.1 新增地面武器替换功能。原版在所有武器都打空后,会让战斗陷入无趣的死局;现在,如果你在战斗中弹药完全耗尽,可以拾取地面武器,将它直接换到当前手持武器所在栏位。被换下的空枪会回到背包。不能浏览或挑选:拿起地上的武器,继续战斗即可。

1.0 的其他功能保持不变。

功能说明

进入战斗后,三个武器栏会锁定。你不能打开背包,把其他枪械换进武器栏;尝试操作时会收到通知,装备操作会被拒绝。

以下功能不受影响:

  • 在已装备武器之间切换,包括武器栏 1、2、3、滚轮和快速切换。
  • 手雷、消耗品和治疗物品。
  • 网络骇入、快速破解和服装。
  • 潜行期间的装备调整。只要尚未被发现,就能自由更换配置;被发现并进入战斗时才会锁定。
  • 地面武器拾取,但只有在弹药完全耗尽时才能触发替换,详见下文。

设计意图

《赛博朋克 2077》允许玩家在交火中暂停战斗、打开背包并重组配置,以应对刚遇到的敌人。例如,遇到装甲敌人时换上技术狙击枪,或针对抗性改用热能武器。这种做法让玩家能迅速从菜单中解决问题,也削弱了遭遇战的紧张感。

如果可以在战斗中随时用背包解决问题,战前准备就不再重要,三个武器栏的限制也失去了意义。本模组让配置选择重新具有代价:

  • 侦察更有价值。交战前标记敌人,可以帮助你在仍有选择时决定应对方式。
  • 三个栏位具有真实的取舍。带上霰弹枪,就意味着不带狙击枪。
  • 战斗可能出现不利局面,需要用走位、掩体、手雷和快速破解来脱困,而不是打开菜单换装备。
  • 潜行带来灵活性。保持不被发现,就能保留更多选择。

本模组只限制战斗中通过菜单更换武器,不调整伤害、敌人生命值、武器操控或其他构筑内容。它可以与战斗改造和难度模组搭配,也可以单独使用。

弹药耗尽时的地面替换

地面替换仅在以下条件全部满足时触发:

  1. 处于战斗中。
  2. 手持武器的弹匣和储备弹药都为零。
  3. 三个武器栏都已占满。

此时拾起武器,它会直接进入当前手持武器所在的栏位。若仍有弹药,即使在战斗中搜刮尸体,也不会触发替换。

被换下的武器会回到背包,而不是掉在地上。这是刻意设计的,避免独特或标志性武器因物理问题在战斗中遗失。

近战武器没有弹药类型,不会被判定为弹尽;任务武器也不会被替换。战斗外该功能关闭,普通拾取行为照常进行。两项触发条件都可以通过修改一行配置放宽。

工作原理

模组通过包装游戏装备系统中的装备和卸下请求来实现限制。只有以下三项条件全部成立时,手动装备请求才会被拒绝:

  1. 物品属于武器装备栏。
  2. 玩家状态机判定玩家正在战斗。
  3. 当前有菜单打开。

第三项是为了避免影响任务、过场动画及其他脚本控制的武器装备行为。例如,约翰尼接管或剧情中发放武器时,操作并非来自打开的菜单,因此仍会正常执行。只有玩家手动进行的菜单操作会被阻止。

提示使用游戏自身的菜单通知系统,与战斗中尝试出售技能点时出现的弹窗相同,并使用游戏提供的本地化文本。

拾取地面武器不会经过装备系统;当武器栏已满时,物品会直接进入背包。因此,地面替换功能改为监听物品加入背包的事件。这个事件也可能由搜刮尸体、商人、制作或任务奖励触发。游戏没有明确区分物品来自地面还是其他来源的信号,所以“手持武器完全弹尽”被用作判别条件。它能让误触发较少,但只是近似判定:战斗中手持完全没弹药的武器、三个栏位已满时,无论何种原因有武器进入背包,都可能触发替换。通常这意味着拾取了地面武器,偶尔也可能是在不合时宜的时刻搜刮尸体。

条件满足后,模组会为当前栏位排入标准装备请求,后续交由游戏自身的装备流程处理。

前置要求

  • 《赛博朋克 2077》2.3 或更新版本。2.3 是确认过钩子可用的版本,不一定是能够运行的最早版本。较旧版本可能正常运行,也可能在启动时因编译错误而失败;无论哪种情况都不会损坏存档。
  • redscript。

不需要 Cyber Engine Tweaks、TweakXL、ArchiveXL、Codeware 或 Mod Settings。

兼容性与存档安全

存档安全:模组不保存持久数据、不向游戏类添加字段,也不创建 TweakDB 记录。可以在游玩过程中安装或移除;移除后不会在存档中留下内容。

模组不含 Archive 文件,因此不会与纹理、网格或模型模组冲突。

装备功能使用 @wrapMethod 包装,而非替换原版方法,旨在与其他修改相同装备功能的模组串接共存,包括库存改造、Equipment-EX、All Cyberware-EX 和 Always First Equip。

已知交互点:

  • **自动拾取和吸附拾取模组:**任何未经玩家主动操作就把物品放入背包的功能,都可能与地面替换共用触发事件。如果它们在战斗中吸入武器,且你手持空枪、三个栏位已满,就可能意外触发替换。如果造成干扰,可以删除地面替换文件。
  • **弹药模组:**修改储备弹药计数或存储方式的模组会影响弹尽判定。隐藏储备弹药可能导致替换无法触发;增加弹尽频率的模组(例如弹药限制模组)则会让它更常触发。
  • **修改菜单通知的模组:**可选自定义文本文件会包装通知队列。如果其他模组直接替换同一函数,可能发生冲突。基础功能不受此问题影响;遇到冲突时删除可选文件。
  • **新增装备栏的模组:**只锁定标准武器栏。其他模组新增的武器栏不会自动纳入检查,需要自行添加,见“配置”。
  • **允许不打开菜单更换装备的模组:**若模组允许从 HUD 或轮盘更换装备,该路径不会满足“菜单已打开”的判定,因此不会被阻止。作者未发现此类模组,但这是该实现方式的限制。

安装与卸载

将压缩包解压到《赛博朋克 2077》安装目录,确保文件位于:

Cyberpunk 2077/r6/scripts/NoCombatWeaponSwap/NoCombatWeaponSwap.reds
Cyberpunk 2077/r6/scripts/NoCombatWeaponSwap/NoCombatWeaponSwap_GroundSwap.reds
Cyberpunk 2077/r6/scripts/NoCombatWeaponSwap/NoCombatWeaponSwap_CustomText.reds

Vortex 和 Mod Organizer 2 可以直接安装压缩包。

卸载时,删除 r6/scripts/NoCombatWeaponSwap 文件夹。

从 1.0 升级:先删除旧文件夹,再重新安装。1.1 重命名了一个配置函数,若保留旧文件,可能导致编译失败。

配置

没有设置菜单。每项配置只需修改一行;各功能也分别存放在独立文件中,删除文件即可移除相应功能。

  • **修改通知文本:**编辑 NoCombatWeaponSwap.reds 中的 NCWS_CustomMessage()。将其改为空字符串,或直接删除 NoCombatWeaponSwap_CustomText.reds,即可改用游戏默认的本地化战斗提示。
  • **同时锁定重型武器栏:**在 NoCombatWeaponSwap.reds 的 NCWS_IsWeaponArea() 中添加 gamedataEquipmentArea.WeaponHeavy。
  • **放宽地面替换条件:**在 NoCombatWeaponSwap_GroundSwap.reds 中将 NCWS_RequireEmptyWeapon() 设为 false,即可让任何武器拾取都能触发替换,而不只限于弹尽时;将 NCWS_SwapCombatOnly() 设为 false,则战斗外也会生效。关闭弹尽要求会明显削弱模组原本的设计目的。
  • **移除地面替换:**删除 NoCombatWeaponSwap_GroundSwap.reds。武器栏锁定功能会恢复为 1.0 的行为。

署名与来源

地面替换的想法来自 BALLSACKVLAD 的 DROP CURRENT WEAPON, CET, IMMERSIVE HOTKEY DROP AUTO SWAP。作者感谢其提出“满装备时仍应能拿起地面武器”的思路,并感谢其允许衍生创作。

本模组不是移植作品,两者实现方式和效果不同:

  • 对方使用 Cyber Engine Tweaks 和 Lua;本模组使用 redscript,不需要 CET。
  • 对方每帧轮询拾取动作;本模组直接监听物品加入背包事件,不轮询,也没有计时窗口。
  • 对方在符合条件的武器拾取时触发;本模组仅在手持武器完全弹尽且三个栏位都满时触发。
  • 对方会把旧武器丢在地上;本模组将旧武器放回背包。

两者有相同的基本思路,但实现和体验不同。本模组若有问题由本模组作者负责。若想要把武器丢在地上、使用快捷键或在战斗外也能使用的行为,请查看对方的模组。

故障排查

  • 如果启动时出现 redscript 编译错误,请打开 r6/logs/redscript_rCURRENT.log 并搜索 NoCombatWeaponSwap。最可能的原因是游戏版本中的装备函数与模组钩子不同;其次是升级时残留了 1.0 的旧文件夹。
  • 如果模组已编译但没有阻止更换,请确认当前确实处于战斗状态,而不是潜行状态;模组有意区分两者。
  • 如果地面替换没有触发,请逐项确认:正在战斗;手持武器的弹匣和储备弹药都为零;三个武器栏都已占用。任一条件不满足都不会触发。近战武器和任务武器不会触发替换。

来源与文件

  • 原作者:StoofyFrond
  • 原项目:No Combat Weapon Swap
  • 文件:NoCombatWeaponSwap 1.1.0(ID:153912)

文件说明

Updated v1.1.1. Fixed unguarded array index. Updated v1.1. Adds ability to swap weapon with weapon on ground. In case you go dry in combat, choom.

前往 N 网打开所选文件。安装与下载要求以原作者及平台说明为准。

<!-- aoe-mods-source:nexusmods:cyberpunk2077:31999 -->