SPT Realism Mod - 客户端
NOTE
这是 SPT Realism Mod 的客户端部分,需要配合服务端模组一起使用。 兼容 SPT 3.11.4 版本。
一、项目概述
SPT Realism Mod 是一款为离线版逃离塔科夫(SPT-AKI)打造的综合性玩法大修模组。它通过超过 120 个 Harmony 补丁,深度修改了 EFT 原版的武器后坐力、弹道学、医疗系统、换弹机制、武器姿态、音频(听力损伤)、危险区环境、装备系统等诸多核心玩法,使游戏趋近于现实军事模拟体验。
核心设计理念
- 完全替换而非修补 -- 模组使用 Harmony
Prefix+return false模式,彻底绕过 BSG 原版逻辑,用自身的物理/数学模型重新计算所有相关数值,而非在原版基础上微调参数。 - 数据驱动 -- 所有武器属性、弹药参数、药品效果、危险区配置均通过服务端传输的 JSON 数据驱动,客户端不硬编码游戏内容数据。
- 仅影响本地玩家 -- 大部分补丁通过
player.IsYourPlayer守护,确保只修改本地玩家的游戏体验,不影响 AI/PvE 的行为(但 AI 弹道和装甲穿透仍受影响,因为 Patch 是全局替换)。
版本信息
| 属性 | 值 |
|---|---|
| 客户端版本 | 1.6.3 |
| 程序集版本 | 0.14.8 |
| 目标框架 | .NET Standard 2.1 |
| 模组平台 | BepInEx 5 |
| 兼容版本 | SPT 3.11.4 |
| 许可证 | CC BY-NC-ND 4.0 |
二、项目架构
2.1 目录结构
RealismMod/
Plugin.cs -- 入口点,加载与管理所有子系统
PluginConfig.cs -- BepInEx 配置绑定(200+ 配置项)
ConfigurationManagerAttributes.cs -- 配置管理器 UI 属性
RealismMod.csproj -- .NET Standard 2.1 项目文件
Ballistics/ -- 弹道学与穿透系统
Weapons/ -- 武器后坐力/换弹/故障/动画
Health/ -- 医疗/药品/伤害/肾上腺素/毒性/辐射
Player/ -- 玩家姿态/移动/听力损伤/状态管理
Gear/ -- 装备系统(防毒面具/NVG/防弹衣/装置)
Audio/ -- 环境音/防毒面具呼吸/盖革计数器
GameWorld/ -- 危险区系统(辐射/毒气/安全区/任务区)
Stats/ -- 武器属性计算/UI 显示/模板数据
Controls/ -- 输入拦截(姿态/架枪/手动装膛)
VisualEffects/ -- 屏幕后期特效
SpecialEffects/ -- 核爆视觉特效
ToolsAndUtils/ -- 工具类/调试/Zone 编辑器
data/ -- 危险区 JSON 配置2.2 技术架构
SERVICE LAYER (SPT Server)
|
| JSON over HTTP
v
Config / Template Data / Mod Settings
|
v
BepInEx Plugin Entry (Plugin.cs)
|
+--> Harmony Patches (120+ patches)
| |
| +--> BallisticsPatches (12 patches)
| +--> WeaponPatches (30+ patches)
| +--> HealthPatches (20+ patches)
| +--> PlayerPatches (25+ patches)
| +--> GearPatches (5 patches)
| +--> AudioPatches (10+ patches)
| +--> GameWorldPatches (10+ patches)
| +--> StatsPatches/UIPatches (20+ patches)
|
+--> Static Controllers (business logic)
| |
| +--> BallisticsController -- 弹道数学模型
| +--> ShootController -- 自定义后坐力引擎
| +--> ReloadController -- 换弹速度计算
| +--> StanceController -- 武器姿态状态机
| +--> RealismHealthController-- 医疗/药品/毒性控制器
| +--> GearController -- 装备检查与修正
| +--> DeafenController -- 听力损伤模拟
| +--> StatCalc -- 武器属性计算引擎
|
+--> Monobehaviour Components (runtime objects)
|
+--> MountingUI -- 架枪指示器 HUD
+--> RealismWeatherController-- 事件天气
+--> RealismAudioController -- 音频管理
+--> GasZone / RadiationZone -- 危险区碰撞体
+--> PlayerZoneBridge -- 玩家-危险区交互桥接2.3 Harmony 补丁模式
所有补丁采用 [PatchPrefix] + return false; 模式,原因是 EFT 的原版方法常常包含大量互相关联的副作用,简单叠加 Postfix 会导致双倍计算或不一致。完全替换可以:
- 确保模组的逻辑是唯一生效的计算路径
- 避免与原版逻辑冲突(如双重穿甲计算、双重后坐力叠加)
代价是模组必须重新实现被替换方法的所有逻辑路径,包括边界情况和原版所有可能的代码分支,维护成本较高。
三、各子系统详解
3.1 弹道学系统
负责替换 EFT 原版的穿透、伤害、装甲耐久度、跳弹、碎片效应和布娃娃物理。
命中区域 (Hit Zones)
将身体精细划分为 6 个命中区域(A/C/D/心脏/脊椎/未知)和 6 个方向(正面/背面/左/右/上/下),使用碰撞网格的本地空间坐标和命中法线进行分类。不同区域有独立的伤害倍率和出血概率加成。
额外的肢体细分包括:大腿、小腿、前臂、上臂、骨盆、颈部、头部,各有独立的伤害/出血修正。
穿透系统
自定义穿透公式,使用装甲阻力、真实耐久度百分比和材料类型:
- 钛(Titan)/铝(Aluminium) 获得 1.5 倍耐久缩放
- 钢制身体装甲始终 100% 耐久计算
- 随机穿透判定(
shot.Randoms.GetRandomFloat) - "应该被挡住" 规则:耐久 >= 90% 且
armorResist - penPower >= 5
装甲伤害/耐久
使用动量模型代替原版公式:momentum = 质量 * 速度
- 装甲等级缩放:
armorClass^2 * sqrt(duraPercent) - 材料特定行为:ArmorSteel(钢甲)、Aramid(芳纶)、Ceramic(陶瓷)、UHMWPE(超高分子量聚乙烯)、Combined(复合材料)、Titan(钛)、Glass(玻璃)
- 穿甲后减伤:
CalcAfterPenStats根据装甲等级/耐久比降低穿过的伤害和穿透力
碎片效应 (Spalling)
当非霰弹、非近战攻击击中躯干并被装甲阻挡时触发碎片效应,模拟装甲背板碎裂后碎片对身体的二次伤害。碎片伤害由动能、穿透修正装甲等级、碎裂概率和防碎片减少量决定,并随机分布到身体各部位。
击倒与缴械
- 缴械:根据子弹动能和命中部位(前臂被击中概率翻倍),有几率使目标掉落武器
- 击倒:腿部中弹且血量归零时,有几率强制切换至匍匐姿态
- 两者均可针对玩家/Bot 独立开关
命中音效
新增 6 种装甲材料命中音效(芳纶/陶瓷/聚乙烯/钛钢/玻璃/默认)和 3 种跳弹变体,区分近距离/远距离播放。
装甲板碰撞体修改
通过 ModifyPlateColliders 调整装甲板碰撞体尺寸(胸部、背部、侧面、胸部顶部),使命中判定更贴近真实装甲板形状。
3.2 武器系统
后坐力系统
模组最核心的子系统之一。完全替换 EFT 原版的后坐力计算,采用自研物理模型:
- 参数初始化 (
RecalcWeaponParametersPatch):武器切换时,计算基础垂直后坐力/水平后坐力/相机后坐力/收敛速度/散布基础值,并设置 BSG 后坐力系统的底层参数(阻尼、强度、速度等) - 每发子弹计算 (
AddRecoilForcePatch):- 伤病修正(黑腿/断臂/骨折/疼痛)
- 姿态修正(低姿/高姿/短托/主动瞄准)
- 体重修正(负重影响)
- 架枪修正(架枪大幅降低后坐力)
- 射击计数修正(连射惩罚递增)
- 分解为
vertFactor/horzFactor/dispFactor/camFactor
- 每帧插值 (
ShootController):通过收敛速度(Convergence)对目标旋转进行缓动插值,实现枪口复位视觉效果 - 归零偏移 (Zero Shift):持续射击时,瞄具根据后坐力强度和瞄具精度随机产生瞄准点偏移
视觉后坐力:模组同时叠加了两层视觉后坐力 -- Realism 自定义视觉后坐力 + 可选的 BSG 原版视觉后坐力 -- 使武器在射击时呈现更真实的抖动效果。
换弹系统
完整覆盖所有换弹流程,根据每个武器的配件属性(人机工学/弹匣重量/枪托/握把等)、玩家状态(伤病/负重/技能/体力)和当前姿态(高姿/主动瞄准)计算换弹速度:
换弹速度 = Clamp(
武器换弹速度修正 * 弹匣重量因子 * 枪托修正 * 负重因子
* 技能修正 * 伤病修正 * 姿态buff * 手臂体力修正
* 装备修正 * 肾上腺素加成 * 全局倍率,
0.7f, 1.4f(常规) / 1.65f(快速)
)不同换弹类型(标准/快速/内部弹仓/转轮/管式弹仓/霰弹枪逐发装填)各有独立的速度计算路径。
手动装膛 (Manual Chambering)
模拟真实枪械操作:空膛时不会自动装填,玩家需要在弹匣有弹时按检查枪膛键手动将一发弹从弹匣推入枪膛。系统涉及一系列补丁链:
- 拦截装备武器逻辑,阻止自动装膛
- 从弹匣退一发弹到枪膛(弹药计数修正)
- UI 显示膛内弹药信息
- 强制弹药兼容性检查在操作期间放行
武器故障系统
完全替换故障概率计算:
故障率 = (武器基础故障率 + 消音器因子)
* 耐久度故障率 ^ N (N 取决于耐久档位)
* 过热故障率 ^ 3
* 弹药故障率 * 弹匣故障率
* 射击计数因子 * 射速因子
* 故障防护 * 全局倍率额外功能:
- 弹药不兼容检测(.366 弹装入 7.62x39 枪械、.300BLK 装入 5.56 枪械等)
- 爆炸性故障:特定低质量弹药(如 9x18 PM 弹)在低耐久枪械中可能引发炸膛
- 禁用 Boss 强制故障机制
- 治疗 BSG 原版已知故障类型检测问题
程序化动画
全面替换 EFT 的程序化武器动画系统(PWA):
- 瞄准速度:根据人机工学、姿态、伤病、负重、装备重量综合计算
- 呼吸晃动:完全替换
BreathEffector.Process,支持姿态/伤病/体力修正 - 武器晃动/惯性:替换
UpdateSwayFactors,根据武器重量、人机工学、操控性计算位移和惯性 - 相机后坐力:阻止相机跟随枪口,稳定瞄准画面
- 归零偏移(瞄具):红点和光学瞄具在射击时出现归零漂移
枪口特效 (Muzzle Effects)
根据弹药速度差异、枪口装置数据、武器系统类型(导气式/活塞式)、环境类型(室内/室外)、武器耐久度和热量、弹药口径校准系数等因素,动态调整枪口火焰、烟雾、火花的视觉表现。
3.3 健康系统
药品系统
12+ 种药品类型(止痛药/止痛针/医疗包/手术包/夹板/止血带/凡士林/药丸/酒精/食物等),每种药品有独立的强度/持续时间/延迟/回血量/止痛强度/隧道视觉强度等属性。
战局内使用:经过完整的验证链(物品可用性 > 身体部位检查 > 装备阻挡检查 > 止血带兼容性检查 > 双击解除穿戴检查) 战局外使用:通过 MedEffectStartedPatch 直接操作 HealthControllerClass
自定义效果系统
模组定义了 ICustomHealthEffect 接口和 13+ 种自定义效果:
| 效果类型 | 功能 |
|---|---|
| TourniquetEffect | 对肢体施加持续伤害(模拟止血带压迫),10 秒后止血 |
| SurgeryEffect | 缓慢回血至上限,施加疼痛惩罚,自动移除止血带效果 |
| HealthRegenEffect | 通用回血,按 DamageTracker 记录扣减 |
| PassiveHealthRegenEffect | 按水/能量比例和技能自动回血 |
| PainKillerEffect | 增加止痛强度,持续时间结束后递减 |
| FoodPoisoningEffect | 食物中毒:资源消耗 + 隧道视觉/脑震荡/颤抖 |
| ResourceRateEffect | 修改资源消耗率 |
| AdrenalineEffect | 肾上腺素效果 |
| ToxicityEffect | 毒性累积 HP 伤害(9 级分级) |
| RadiationEffect | 辐射累积 HP 伤害 + 随机轻出血 |
| DetoxificationEffect | 解毒处理 |
| RadationTreatmentEffect | 辐射治疗 |
肾上腺素系统
受到子弹/钝器/近战/狙击伤害时触发。效果包含:
- 正面:移动速度/换弹/姿态切换/开镜加速
- 负面:颤抖(Tremor),随时间消失
- 冷却时间基于抗压技能
刺激物/过量系统
12 种刺激物按类型分组(肾上腺/再生/伤害/凝血/体温/性能/通用/负重)。同类型使用超过 1 个时触发过量定时器,10 秒后施加 debuff。过量后阻止冲刺和战术冲刺。
受伤状态对移动的影响
根据各身体部位 HP 百分比、能量/水分百分比、骨折/零血/疲劳/脱水/中毒/毒性/辐射状态,计算 9 个运动乘数:
- 瞄准移动速度 / ADS / 姿态切换 / 换弹速度
- 冲刺速度 / 行走速度 / 体力恢复 / 人机工效 / 后坐力影响
装备阻挡治疗
头盔/耳机/面罩/防弹衣/战术背心阻挡对应身体部位的治疗。面罩/NVG 遮挡口部时阻止进食/吃药。双击装备移除热键可快速脱下阻挡装备。
3.4 音频系统
环境音效
AmbientAudioComponent 动态生成 3D 音源,随机播放环境音效片段(15-90 秒间隔,45-95 米范围),音量根据室内/室外/BTR 内部状态自动调整。
防毒面具
- 呼吸音效基于玩家健康状态(健康/受伤/重伤/濒死),使用不同呼吸音频片段
- 对玩家语音施加低通滤波效果
危险检测器
- 盖革计数器:7 级辐射强度,每级 4 个音频变体,声音频率随辐射强度升高
- 气体分析仪:计时蜂鸣,音高/频率随毒性浓度升高
- 均可通过快捷键静音
枪声与移动音量
- 全局枪声音量修正
- 射速变化时的音调修正
- 移动音量分离:玩家/ NPC/ 共享移动音量各自独立控制
- ADS 时音效降低
听力损伤系统 (Deafening)
模拟射击和爆炸对听力的影响:
- 玩家射击:根据弹药速度 * 后坐力 + 消音/亚音速因子计算致聋强度
- 附近 Bot 射击:根据距离 + 口径计算
- 爆炸/手榴弹:根据距离 + 护耳 + 室内加成计算
- 护耳:头盔致聋等级 + 耳机降噪分贝数
- 效果:主音量降低 + 音频模糊 + 画面暗角,随时间逐渐恢复
- 耳机增益:可通过快捷键 +/- 独立调整耳机增益
3.5 武器姿态与移动
武器姿态系统 (Stances)
7 种武器姿态,通过按键或滚轮切换:
| 姿态 | 说明 |
|---|---|
| 低姿 (Low Ready) | 枪口朝下,快速切换至瞄准。CQB 首选 |
| 高姿 (High Ready) | 枪口朝上,换弹速度加成,通过低矮空间 |
| 短托 (Short Stock) | 缩短持枪长度,通过狭窄空间 |
| 主动瞄准 (Active Aiming) | 动态瞄准姿态,枪口随鼠标微移 |
| 巡逻姿态 (Patrol Stance) | 放松持枪,节省体力 |
| 手枪压缩 (Pistol Compressed) | 手枪近身快速射击姿态 |
| 近战姿态 (Melee Stance) | 枪托攻击/刺刀冲锋 |
每种姿态有独立的:
- 位置偏移和旋转(Lerp/Slerp 缓动过渡)
- 手臂体力消耗/恢复速度
- 武器操控性修正(影响晃动和后坐力)
- 第三/第一人称动画效果
架枪系统 (Mounting)
通过射线检测和碰撞检测实现武器抵靠掩体/地面/墙壁的架枪效果:
- 双足架(bipod)完全展开时锁定旋转范围
- 大幅降低后坐力和晃动
- HUD 方向指示器显示可架设方向
- 强制低姿配合重型武器(机枪)
移动速度
- 地面材质影响:混凝土/草地/金属/玻璃/土路等不同材质有独立的速度修正
- 坡度影响:上坡/下坡的速度变化
- 武器重量影响:不同武器类型和装备重量影响移动速度
- 冲刺加速度:替换原版,根据装备/武器/坡度/材质/姿态计算
- 射击中移动速度惩罚
- 战术冲刺:比常规冲刺快 15%
体力系统
- 腰部射击姿势体力消耗与恢复
- 冲刺体力消耗与恢复
- 负重惩罚:超重时技能经验获取降低
- 手臂体力:不同姿态有独立的消耗/恢复速度
3.6 装备系统
防毒面具
- 自动/手动检测并穿戴防毒面具
- 滤罐耐久度消耗:根据所处危险区强度、包裹中有毒/放射性物品等因素综合计算
- 防护系数:滤罐剩余耐久度 * 装甲耐久度因子
- 呼吸阻力音频效果 + 语音低通滤波
防弹衣/头盔
- 自定义物品属性(舒适度/毒气防护/辐射防护/防碎片/钝伤穿透率)
- 防弹衣/背包/头盔/面罩的人机工学和速度惩罚
- 装备重量舒适度修正
部署装置
- 危险品分析仪:可放置在地面,采样分析所在区域的毒素/辐射数值。含启动动画和故障概率
- 发射器:任务装置,校检日期/时间/位置/节日条件后触发爆炸和任务触发器
3.7 危险区系统
动态生成辐射区、毒气区、安全区、任务区和可交互物件。
数据驱动
所有危险区在 JSON 文件中定义,按地图组织(海关/工厂/实验室/储备站/森林/海岸线/立交桥/灯塔/街区/塔科夫街道/GZ 等),支持概率生成和任务条件解锁/阻塞。
区类型
| 类型 | 功能 |
|---|---|
| 辐射区 (RadiationZone) | 距离衰减辐射强度,带视觉粒子效果 |
| 毒气区 (GasZone) | 距离衰减毒气强度,带视觉粒子效果,支持阀门交互 |
| 安全区 (LabsSafeZone) | 门关闭且密封时提供全面防护,含 HVAC 音效 |
| 任务区 (QuestZone) | 玩家进出检测触发器 |
| 交互区 (InteractionZone) | 阀门旋转/按钮按压,控制关联毒气区强度 |
| 资产区 (AssetZone) | 危险区内的装饰物/容器/光源生成 |
玩家交互桥接 (PlayerZoneBridge)
挂载在每个玩家身上:
- 追踪玩家所在区数量(辐射/毒气/安全)
- 累积所有区的暴露速率
- 安全区提供全面防护
- 在危险区中生成时将玩家传送到最近安全生成点
- Bot 每 10 秒检查防毒面具并承受伤害
游戏世界事件
- 毒气事件:随机雾浓度/云密度漂移
- 辐射事件:放射性降雨强度随机变化
- 爆炸事件:暴雨/闪电/浓云
- 爆炸前兆:温和但持续的天气
持久化
玩家的累计毒性和辐射值以 ProfileID 为键存储在 JSON 文件中,完成特定任务后清零。
3.8 武器属性计算与 UI 显示
属性计算引擎 (StatCalc.cs)
核心数学引擎,计算所有武器的最终属性:
- 人机工学:所有配件 ERGO 累加 + 枪托折叠惩罚 + 基础值
- 后坐力:配件水平/垂直后坐力 Delta 累加 + 抑制器/重量/力矩因子
- 散布:RecoilAngle +/- Dispersion 范围内的散布基础值
- 收敛速度:手枪/步枪分开乘数
- 阻尼:后坐力衰减速度
- 平衡:武器前后重量分布(影响枪口上跳角度)
- 操控性:武器长度/姿态综合修正
300 多行的 ModConditionalStatCalc 方法处理特殊配件交互:
- 折叠枪托的惩罚
- 缓冲管/枪托适配器
- 消音器在短枪管上的惩罚
- 泵动式握把
- SIG 锥形制退器适配器
- 各种特殊配件的条件性属性
口径效果映射
5 个独立的 switch 语句将口径字符串映射为枪口视觉效果参数:
- 烟雾量 (CaliberSmoke)
- 火焰量 (CaliberFlame)
- 火花量 (CaliberSparks)
- 枪口焰 (CaliberMuzzleFlash)
- 声音响度因子 (CaliberLoudnessFactor)
UI 覆盖
大量补丁覆盖 EFT 的物品属性 UI:
- 护甲等级字符串显示
- 弹药面板(热量/碎片概率/弹道系数/故障率/耐久度消耗)
- 武器配件属性(后坐力/操控性/散布/精度/射速/换弹速度)
- 自定义图标(平衡/后坐角度)
- 属性 Delta 显示(配件前后对比值)
四、配置系统
模组通过两层配置生效:
服务端配置 (ServerConfig)
通过 HTTP 从服务端获取,控制功能总开关:
recoil_attachment_overhaul-- 后坐力/附件大修realistic_ballistics-- 真实弹道学med_changes-- 医疗系统修改enable_stances-- 武器姿态系统headset_changes-- 听力损伤系统movement_changes-- 移动系统修改gear_weight-- 装备重量系统malf_changes-- 故障系统修改reload_changes-- 换弹系统修改enable_hazard_zones-- 危险区系统manual_chambering-- 手动装膛food_changes-- 食物系统修改- 等
客户端配置 (PluginConfig)
通过 BepInEx ConfigurationManager 暴露 200+ 个可调参数,涵盖:
- 后坐力强度/散布/相机后坐力/收敛/阻尼的各种倍率
- 换弹速度全局倍率(手枪/步枪/霰弹枪分开)
- 弹道学装甲耐久/阻力/伤害倍率
- 危险区装置音量/面罩呼吸音量
- 听力损伤恢复速度
- 装备阻挡治疗/进食
- 姿态过渡速度/旋转速度/位置偏移
- 各种调试开关
五、构建与安装
前置条件
- .NET Framework 4.7.2+ / .NET Standard 2.1 SDK
- SPT 3.11.4 安装目录
- BepInEx 5.x
构建
dotnet build -c Release输出路径通过 .csproj 中的 <OutDir> 配置,默认为 SPT 安装目录的 BepInEx\plugins\。
安装
- 将构建产物
RealismMod.dll放入BepInEx\plugins\Realism\ - 将
bundles\、sounds\、icons\、masks\目录放入BepInEx\plugins\Realism\ - 将
data\目录放入user\mods\RealismMod\ - 确保服务端 Realism Mod 已正确安装并配置
依赖
- BepInEx 5.x
- SPT-AKI (3.11.4)
- spt-reflection
- spt-common
- Newtonsoft.Json
- Unity 2021.3.x (运行时,由 SPT 提供)
六、外部参照
- 模组主页: https://hub.sp-tarkov.com/files/file/606-spt-realism-mod/
- 原作者: Fontaine
- 许可证: CC BY-NC-ND 4.0
"Preparing for the Future!" -- Vault-Tec Corporation