无限弹药

无限弹药

所有远程武器真正无限弹药。永久开火,再也不用制造一颗子弹。

游戏玩法

无限弹药

所有远程武器真正无限弹药。永远开火,从此无需再制作一枚子弹。


这个模组的作用

这是 完整沙盒/作弊模式 的 NoReloadWeapons 配套内容。对你装备的每个远程武器都结合了两种效果:

  • 无限弹药 — 永远不会播放换弹动画(仅限枪械)。
  • 库存返还 — 每次射击后,下一帧会自动将弹药返还至库存。每次射击的净弹药变化:

结果:你的库存子弹数量永远保持不变。连续射击加特林一小时,你的弹药储备数字仍会与开始时一模一样。你再也无需制作任何子弹了。

弓和弩获得仅退还处理——它们的箭矢正常搭箭和射击,但消耗的箭矢会立即返还到你的箭袋中。

想要一个不那么激进的版本吗?

姐妹模组 NoReloadWeapons 会给你无限弹匣,但 仍会消耗你背包中的弹药 —— 因此弹药制作和资源管理依然重要。请二选一安装,不要同时安装两者


本模组未涉及的内容

  • 捕捉球 — 保持原版不变。自由捕捉会破坏整个核心游戏循环。
  • 工具 — 镐、斧、锤、水壶使用不同的耐久度系统,本模组不干预。
  • 近战武器 — 棍棒、小刀、剑保持原版设置。
  • NPC武器 — 敌方士兵仍正常消耗弹药。走错路也不会获得不公平的优势。
  • 炮塔和基地防御发射器 — 默认情况下保持不变。
  • 安装武器 — 默认未触碰。

支持的武器

枪械(无限弹匣 + 回弹)

  • 突击步枪 / 简易突击步枪
  • 手枪
  • 狙击步枪 / 企鹅发射器
  • 火焰喷射器
  • 加特林机枪
  • 多管导弹发射器
  • 榴弹发射器
  • 很可能还有:霰弹枪、火箭发射器、单发枪

弓级(仅退款)

  • 复合弓
  • 十字弩

如果你有一把该模组似乎无法影响的远程武器,请打开 UE4SS.log 并查找类似以下内容的行:

[UnlimitedAmmo] 职业=...首次发现武器类型=N (处理方式: ...)

在评论中发布该行——整数将在下一版本中添加。


安装

要求: UE4SS 3.0.1+(从官方GitHub下载最新版本)。

漩涡(推荐)

  1. 请先安装 UE4SS
  2. 点击上方的 模组管理器下载
  3. 在Vortex中部署模组,就这样。

手动安装

  1. 如果尚未安装,请安装 UE4SS
  2. 从此页面下载存档。
  3. UnlimitedAmmo 文件夹解压至 \Pal\Binaries\Win64\ue4ss\Mods\
  4. 打开 \Pal\Binaries\Win64\ue4ss\Mods\mods.txt 并添加一行:UnlimitedAmmo : 1
  5. 启动游戏。

验证它是否有效

打开 \Pal\Binaries\Win64\ue4ss\UE4SS.log 并搜索 [UnlimitedAmmo]。你应该看到像这样的行:

[UnlimitedAmmo] Hooked PalShooterComponent:OnShootBullet
[UnlimitedAmmo] 退还子弹 'RoughBullet' (WeaponType=3)

第二行在你首次使用该武器射击时,每种子弹类型会出现一次。


配置

编辑 \Pal\Binaries\Win64\ue4ss\Mods\UnlimitedAmmo\config.txt。修改后请重启游戏。

  • 模式无限弹匣(默认)。
  • 滤镜模式FIREARMS(默认,推荐)。使用 白名单 / BLACKLIST 用于覆盖特定的武器类型整数。
  • 白名单类型 / 黑名单类型 — 用逗号分隔的武器类型整数。
  • AFFECT_STATIONARY / AFFECT_MOUNT_WEAPONS — 同时默认为 false
  • LOG_LEVELINFO(默认) DEBUG 安静

兼容性

  • 单人:已测试,有效。
  • 合作模式(主机):主机应能正常工作。其他玩家也需要安装此模组。
  • 专用服务器:尚未经过测试。退款机制使用 AddItem_ServerInternal 这是一个服务端内部调用,所以它应该在专用服务器上有效,但欢迎报告反馈。
  • 其他模组:无已知冲突。与大多数生活质量模组和内容模组兼容。
  • 存档文件:100%安全。此模组不会修改存档数据 —— 它仅将引擎移除的物品重新添加回来。

工作原理(技术说明,可选阅读)

这个模组写起来比看起来要难。经过九次迭代,最终可行的方案是:

  • 钩子 PalShooterComponent:OnShootBullet(不是 使用子弹 或者 RequestConsumeItem——这些不会在实际的射击路径上触发。
  • 从子弹名称中读取 PalWeaponBase.BulletItemName 作为名称属性(非调用 GetRequiredBulletName()— 其输出参数签名在 UE4SS Lua 中会抛出异常。
  • 通过 FName 进行转换 raw:ToString()(非 tostring(raw) 返回垃圾内容)。
  • 通过以下方式获取库存 PalUtility:GetLocalInventoryData(world) 通过CDO(非 FindFirstOf("PalPlayerInventoryData") 可能会返回错误的实例。
  • 通过退款 AddItem_ServerInternal(不 RequestAddItem(该请求会被静默丢弃)。
  • 通过一个滴答延迟退款 ExecuteWithDelay(0) 这样引擎的递减操作会先执行。

如果这些步骤中的任何一个失败了,模组会静默地不执行任何操作,或者退还给一个幽灵库存。所有这些失败模式都在测试中观察到了——每一个


已知限制

  • 工具(镐、斧等)通过不同的机制消耗耐久度 OnShootBullet 不进行拦截。它们不受此模组影响,这是设计使然。
  • 捕捉球被有意保留为原版风格——让捕捉变得过于简单会削弱游戏的核心循环。如果你真的想要无限球,上游的作弊控制台可以实现这一点。
  • 退款会在库存计数器上产生一帧的-1/+1"闪烁",通常肉眼不可见,但在慢动作镜头中可以看到。

致谢与许可

  • DresseurNomade 和 YellowChick 制作。
  • 构建于 UE4SS — 去支持他们吧。
  • 许可: 任意使用,只需注明来源。欢迎分叉和变体——但不要以不同名称重新打包此确切模组。

报告问题

如果某个功能没有按预期工作:

  1. 重现该问题。
  2. 打开 \Pal\Binaries\Win64\ue4ss\UE4SS.log
  3. 复制包含内容的行 [UnlimitedAmmo]
  4. 请将其发布在 Bug 标签页中,并附上你的操作描述。日志能告诉我们所需信息的 90%。

如果你也喜欢生存大修模组,可以看看我的另一个模组 PalOverhaul:生存版