跳转到内容

伤害与护甲

全游戏所有“能被打”的东西(船员、建筑、怪物、城防炮台)共用同一套承伤组件与同一个结算内核:一次攻击先过阵营与无敌检查,再按“物理 + 四元素”双护甲模型逐通道结算,最后扣血、广播事件、触发死亡。

伤害与护甲系统是战斗玩法的底层规则。无论伤害来自武器炮弹、火焰喷射、怪物撞船、船船相撞、撞岛、元素持续伤害还是毒雾蒸汽云,最终都汇入同一个入口(DamageableComponent.cs),由唯一的结算内核(DamageResolver.cs)计算护甲消耗与掉血量。

玩家在游戏中通过以下途径接触本系统:

  • 开炮打怪物 / 敌船 / 城防炮台,看到伤害跳字、受击闪白、血条变化;
  • 自己的船体建筑被怪物撞击、被敌船炮火命中而受损,触发维修需求与甲板破洞进水;
  • 船员被溅射伤害打成重伤、流血,需要医疗救助;
  • 选择不同弹药(破甲、穿透、反生物、反建筑、元素弹)针对不同护甲构成的怪物。

系统由三层组成:

出处 职责
身份层 Defender Defender.cs 实体的“战斗身份证”:阵营、最大血量、国籍、目标类型;负责初始化下层组件
承伤层 DamageableComponent DamageableComponent.cs 血量读写唯一入口:受伤、治疗、死亡、事件广播、无敌检查
结算层 DamageResolver DamageResolver.cs 纯数值计算:词条加成、护甲消耗、抗性、渗透、护甲联动、扣血

每个可承伤实体拥有以下战斗属性(DamageableComponent.csDefenseProfile.cs):

属性 含义 默认值
当前血量 / 最大血量 整数 HP 由各实体初始化时注入
阵营 FactionId 敌我判定用字符串(“Player” / “Enemy” / “Neutral” / 国家 id 等) 手动放置且未配置时回退 “Neutral”(Defender.cs
可被攻击 CanBeAttacked false 时所有伤害直接归零(如建筑框架、已死亡实体) true
可被锁定 CanBeTargeted false 时武器不会主动瞄准,但仍会被弹道直击 / 溅射波及(船员设为 false) true
物理护甲条 一条独立于 HP 的消耗条,有当前值与上限 0(无甲)
元素护甲条 单独一条,不分元素种类 0(无甲)
四元素抗性 火 / 冰 / 毒 / 电 各一个 [0,1) 系数 全 0
目标类别 生物 / 建筑,决定反生物、反建筑词条是否生效 生物
物理易碎倍率 冻结 / 霜蚀脆化期间 >1,放大物理伤害 1

目标类别由初始化时的目标类型自动推导(DamageableComponent.cs 第 494 行):目标类型为怪物或船员 → 生物;为船只或城市 → 建筑。怪物随后还会用 MonsterCombatProfile.cs 的档案覆盖护甲与抗性。

一次攻击携带的不是一个数字,而是一个“伤害包”(DamagePacket.cs):1 个物理通道 + 4 个元素通道(火 / 冰 / 毒 / 电),每个通道有自己的数值和词条。词条按位组合(CombatEnums.cs):

词条 效果 数值(CombatTuning.cs,代码常量)
Penetrate 穿透 该通道 50% 的伤害绕过护甲直接打 HP,剩余 50% 走正常护甲结算 PenetrateFraction = 0.5
ArmorBreak 破甲 对护甲造成 2 倍伤害(不溢出),同时仅 10% 伤害进 HP ArmorBreakArmorMultiplier = 2.0,ArmorBreakHpFraction = 0.1
AntiCreature 反生物 目标类别为生物时该通道伤害 ×1.5 AntiCategoryMultiplier = 1.5
AntiBuilding 反建筑 目标类别为建筑时该通道伤害 ×1.5 AntiCategoryMultiplier = 1.5

词条的生产来源(AmmoCatalog.cs,代码静态表):加农炮弹 CannonShell 自带反建筑;防空弹 AA_Gun_Bullet 自带反生物。发射物自身也可在 Inspector 配置物理词条与元素伤害条目(Bullet.cs)。

伤害结算管线(从命中到扣血)

Section titled “伤害结算管线(从命中到扣血)”

一次伤害按以下顺序结算。第 1-2 步在 DamageableComponent.cs,第 3-6 步在 DamageResolver.cs,第 7 步回到 DamageableComponent.cs

第 1 步:前置门槛。 目标已死亡或 CanBeAttacked=false → 伤害归零。无敌模式生效(见下文“无敌模式”)→ 伤害归零。

第 2 步:旧版减伤层(墙体材质防御)。 在目标父级查找减伤提供者(IDefenseProvider.cs),目前只有墙(WallComponent.cs)和门(DoorComponent.cs,恒 0%)实现。命中减伤:

进入结算的伤害 = 原始伤害 × (1 − 减伤率);纯物理整数路径下结果向下保底 1 点

注意:墙的减伤只保护墙自己(提供者挂在墙上,作用于墙自身的承伤组件),且墙血量百分比 ≤ 40% 时减伤降为 0(WallComponent.cs)。代码注释标明此路径“Phase 4 由护甲档案取代”,当前与新护甲体系并存。

第 3 步:逐通道结算。 按物理 → 火 → 冰 → 毒 → 电的顺序,每个通道独立走:

  1. 词条类别加成:反生物 / 反建筑命中对应类别 → 通道伤害 ×1.5;
  2. 物理易碎:仅物理通道,伤害 × 易碎倍率(冻结期为 3,即 +200%;见元素与状态效果);
  3. 穿透分流:带穿透词条时,50% 伤害记为“直击 HP”,剩余 50% 继续;
  4. 护甲结算,分三种情况:
    • 带破甲词条:护甲扣除 min(当前护甲, 伤害×2),HP 额外承受 伤害×0.1;
    • 护甲尚存(物理通道):护甲门——护甲扣除 min(当前护甲, 伤害),伤害不溢出到 HP,也无渗透。一发 30 点炮弹打在只剩 20 点物理甲的目标上,只清掉 20 点甲,HP 一滴不掉;
    • 护甲尚存(元素通道):抗性既让护甲更耐扣,也压低渗透:

元素护甲扣除 = min(当前元素护甲, 元素伤害 × (1 − 抗性)) 渗透进 HP = 元素伤害 × 0.2 × (1 − 抗性)

  • 护甲已破(两类通道通用):通道伤害全额进 HP。注意元素直伤阶段不再被抗性削减——抗性只在元素护甲还在时起作用。

第 4 步:护甲联动。 本次结算后,若任一护甲条从正值被打到 0、且另一条仍 >0,另一条立即额外掉落其上限的 50%(ArmorLinkDropFraction = 0.5,CombatTuning.cs)。单次触发,不级联(不会因联动掉到 0 再反向触发对方)。

第 5 步:HP 扣减。 所有通道的 HP 伤害(直击 + 渗透 + 破甲零头 + 破甲后直伤)累加后四舍五入为整数,从当前 HP 扣除,下限 0。对外报告的伤害数字是“意图伤害”(不因 HP 不足而打折),过量击杀时跳字仍显示全额。

第 6 步:死亡判定。 HP 到 0 且原先存活 → 进入死亡流程(见下文)。

第 7 步:事件与归因。 实际掉血 >0 时触发受击事件(驱动跳字、闪白、血条刷新);任何 HP 变化触发血量变化事件。若调用方传入了攻击者阵营,还会广播一条伤害归因消息(攻击者阵营 / 国籍、受害者阵营 / 国籍、目标类型、伤害值、是否击杀),由声望系统消费(FactionEventHandler.cs,详见阵营与外交):玩家击杀无国籍海盗船 → 所有国家声望 +1;非法击杀有国籍船 → 攻击者所属国声望 −10,并按配置表对受害国扣声望。

攻击判定与阵营规则(谁能打谁)

Section titled “攻击判定与阵营规则(谁能打谁)”

阵营过滤器CombatUtils.cs 中的 FactionFilter):武器的目标探测器(TargetDetector.cs)和子弹(Bullet.cs)都带一个阵营过滤器。设置了拥有者阵营时,走动态敌我判定(FactionRelation.cs):

  • 同阵营 → 永远友好,不可攻击;
  • 不同阵营 → 查外交关系,仅“敌对”关系可攻击(中立不可攻击);外交系统未注入时不同阵营默认敌对;
  • 宽限期:刚离港的船可被设置数秒宽限期,期间任何人不与其为敌;
  • 未设置拥有者阵营时回退黑 / 白名单:黑名单优先拒绝,白名单为空则全部放行。

子弹的穿透飞行Bullet.cs):子弹逐帧射线检测,按距离排序命中点,跳过友方和不可攻击目标继续飞行,命中第一个有效敌方目标才结算。装饰物、地形等无承伤组件的碰撞体也直接穿过。

爆炸与溅射的目标区分Bullet.cs):

  • 爆炸伤害只打“可被锁定”目标(建筑、怪物),明确排除船员;
  • 船员溅射是独立一层:命中 / 爆炸后在命中点半径内只对“不可被锁定”目标(即船员)结算,伤害 = 基础伤害 × 溅射比 × (1 − 距离/半径),下限 1 点。两层都吃阵营过滤。

没有阵营过滤的伤害路径(友军伤害可能发生):

路径 出处 行为
火焰喷射器 FlameProjectile.cs 只检查 CanBeAttacked,代码层无阵营过滤,视野内任何可承伤目标都会被烧
毒雾 / 蒸汽云 HazardZone.cs 范围内一切可承伤实体无差别周期伤害,包括己方
元素状态 DoT StatusEffectController.cs 点燃 / 腐蚀按层数每秒扣血,走专用入口(含护甲门),不发归因消息
元素状态传播 StatusEffectController.cs 点燃蔓延 / 腐蚀接触 / 麻痹传导按距离与几率跳到邻居,无阵营判断

无敌模式(开发者作弊,CheatFlags.cs 代码全局开关,由开发者工具面板切换):

  • BuildingGodMode:目标父级挂有建筑组件即免疫全部伤害——不检查阵营,敌方建筑同样被保护DamageableComponent.cs 第 301 行 TODO 已知问题);
  • CrewGodMode:仅当目标阵营字符串恰好为 “Player” 且不是建筑时免疫;阵营未正确注入(为空)时玩家船员不会被保护。

HP 归 0 时进入死亡流程(DamageableComponent.cs):标记死亡、HP 清 0、永久不可再被攻击(本组件无复活路径),广播死亡事件。随后分两种归宿:

  • 无人监听死亡事件且开启自动销毁:延迟 0.1 秒(Inspector 可调 0-10 秒)销毁整个实体根物体。仅用于测试 / 简单物体;
  • 有监听者(船员、建筑、怪物、Boss 都注册了监听并关闭自动销毁):由各自系统接管。
实体 死亡处理 出处
船员 中断当前任务、释放床位、背包物品掉落到脚下地板、销毁个体;饥饿 / 脱水死亡走独立路径,流血致死也通过同一战斗死亡链触发 Crew.cs
建筑 0.1 秒后销毁建筑物体;甲板 0 层外缘墙被战斗摧毁(HP 归零)时登记船体破洞、损失浮力,重新盖墙可修复(玩家主动拆除不算破洞) Building.csWallBreachListener.cs
普通怪物 切死亡状态、按 CSV 掉落物品(详见战利品与掉落 BaseMonster.cs
Boss 广播击败消息(海域归属国 + 击杀者)、掉落、隐藏模型,600 秒(Inspector)后触发重生流程;注意重生时的 Defender 二次初始化会被“已初始化”守卫跳过,血量与可攻击状态实际不会重置(代码现状) BossMonster.csDefender.cs
城防炮台 城市防御计数器减一;全部炮台被摧毁 → 城市被占领,归属变更(详见城市与国家 CityDefense.cs
超距怪物清理 怪物离船超出清理半径时由系统直接调用死亡(与被打死走同一事件链) DespawnEnforcer.cs

通用治疗入口:只对存活实体生效,恢复量不超过损失值,触发治疗事件与血量变化事件(DamageableComponent.cs)。

船员Crew.cs、阈值在 NeedsConfig.cs,代码常量):

  • HP ≤ 30% → 进入“重伤”失能:中断任务、开始流血计时;
  • 流血 30 秒未被救治 → 死亡(医疗任务进行中暂停计时);
  • 医疗任务把伤员治疗到 50% MaxHP(向上取整):他人施救基础 5 秒、自救 10 秒,医疗技能把时长乘以 Lerp(1.2, 0.5, √技能速度)(Task_HealCrew.cs);
  • HP ≥ 50% 时自然恢复,每秒 1 点;恢复到 ≥ 50% 自动解除重伤并重置流血计时。

建筑:不自然恢复。受损建筑由维修任务恢复,每次工作节拍恢复 15 × 建造工作速度系数点 HP(Task_Repair.cs),HP 百分比 ≤ 30% 时建筑效率减半(Repairable.cs),详见修建

护甲条:当前代码没有任何护甲回复逻辑——护甲被打掉后在该实体生命周期内不再恢复。

维度 船员 建筑(含墙 / 门 / 武器座) 怪物 城防炮台
MaxHP 来源 职级常量(NeedsConfig.cs 代码常量) prefab Inspector _maxHP 字段(墙类被材质表覆盖) CSV StaticMonsterConfig.csv 同建筑(炮台是平台船上的武器建筑)
护甲 无(双 0) 无(双 0),但墙有百分比减伤 按类型查 MonsterCombatProfile.cs 代码表
目标类别 实际为“建筑”(初始化未传船员类型,见已知限制) 建筑 生物 建筑
可被武器锁定 否(只能被直击弹道 / 溅射波及)
元素状态叠层 不可(未挂状态控制器) 可(点燃 / 腐蚀 / 冻结,参与传播网络)
阵营 所属船的阵营,缺省 “Player” 所属船的阵营(注册进船上下文时注入) “Enemy” 所属国家
死亡 掉落背包、销毁 销毁;外缘墙额外触发船体破洞 掉落、销毁;Boss 重生 计入城市占领进度

没有整船血条:船体强度 = 船上每个建筑各自的 HP。炮弹、撞击通过“命中点 → 建筑注册表 → 最近可承伤建筑”路径落到具体建筑上(ShipDamageHelper.cs),甲板破洞影响浮力(详见船只)。

墙体材质WallMaterialConfig.cs 代码静态表;同时是 CSV 建筑表的同名行):

材质 MaxHP 减伤率 可燃 阻断火灾蔓延
松木 Pine 30 0%
橡木 Oak 80 10%
黄铜 Brass 100 20%
铁 Iron 150 30%

减伤只在墙 HP > 40% 时生效;门恒 0% 减伤(设计语义:门是通行控制不是防御工事,DoorComponent.cs)。建筑处于框架(未建成)状态时不可被攻击,建成瞬间恢复可被攻击(Building.csConstructable.cs)。

怪物战斗档案MonsterCombatProfile.cs 代码静态表;HP / 攻击力在 CSV):

怪物类型 HP(CSV) 攻击力(CSV) 物理护甲 元素护甲 抗性 火/冰/毒/电 设计考点
Normal 普通怪 100 10 0 0 0/0/0/0 纯肉
Elite 精英 300 25 30 20 0/0/0/0 中等甲
Boss1 800 50 60 40 0.3/0.3/0.3/0 厚双甲
SteelHorseshoe 钢蹄 120 8 80 0 0/0/0/0 逼玩家用破甲 / 穿透 / 霜蚀
BlazeSerpent 炎蛇 70 10 10 20 0.85/0/0/0 火点不着,换冰 / 毒
GlideRay 滑鳐 50 6 0 0 0/0/0/0 考验提前量
BarnacleSwarm 藤壶群 15 3 0 0 0/0/0/0 群清效率
AbyssBeast 渊兽 600 30 100 80 0.3/0.3/0.3/0.3 综合考验

(Boss 实体场景实例的 MaxHP 由 Inspector 字段覆盖为 1000,重生间隔 600 秒,BossMonster.cs。)

船员 HP 按职级NeedsConfig.cs 代码常量):水手 50 / 专员 60 / 士官 75 / 船长 100。

结算核心常量(CombatTuning.cs,代码常量)

Section titled “结算核心常量(CombatTuning.cs,代码常量)”
常量 含义
PenetrateFraction 0.5 穿透词条绕甲直击 HP 的比例
ArmorBreakArmorMultiplier 2.0 破甲词条对护甲的伤害倍率
ArmorBreakHpFraction 0.1 破甲词条对 HP 的伤害比例
ElementalLeakBase 0.2 元素护甲未破时的基础渗透比例(再乘 1−抗性)
AntiCategoryMultiplier 1.5 反生物 / 反建筑命中对应类别的倍率
ArmorLinkDropFraction 0.5 护甲联动:另一条护甲掉落其上限的比例
进入结算伤害 = 原始伤害 × (1 − 墙减伤率) (墙 HP>40% 时,铁墙 0.3 等)
通道伤害 = 进入伤害 × (反类别命中 ? 1.5 : 1) × (物理 ? 易碎倍率 : 1)
穿透直击 HP = 通道伤害 × 0.5 (带穿透词条)
破甲扣护甲 = min(当前护甲, 通道伤害 × 2);HP 额外 + 通道伤害 × 0.1
物理护甲门 = 护甲扣 min(当前护甲, 通道伤害);不溢出、不渗透
元素护甲扣除 = min(当前元素护甲, 通道伤害 × (1 − 抗性))
元素渗透 HP = 通道伤害 × 0.2 × (1 − 抗性)
护甲破后 = 通道伤害全额进 HP(元素不再吃抗性)
护甲联动 = 任一护甲归零 → 另一条额外掉 上限 × 50%(单次)
最终扣血 = round(各通道 HP 伤害之和),HP 下限 0
来源 公式 关键数值 数值来源
子弹基础伤害 max(1, round((基础 + 随机偏移) × 弹药物理乘子)) 加农炮弹药 100(爆炸模式);机枪弹药 25 ± 5(单体);防空弹 30(单体) prefab Inspector(加农炮弹药.prefab 等)
飞行距离衰减 距离 ≤ 满伤距离 → ×1;≥ 最大射程 → ×最低比例;之间线性插值 三个 prefab 均未改默认值:满伤 10 格 / 终点 30 格 / 最低比例 1(即当前实际不衰减) Inspector(Bullet.cs 默认值)
爆炸伤害 max(1, round(基础 × (1 − 距爆心距离/半径) × 飞行衰减)) 爆炸半径 3 格;只打可锁定目标 Inspector(Bullet.cs
船员溅射 max(1, round(基础 × 溅射比 × (1 − 距离/半径))) 半径 5 格;溅射比:加农炮 / 机枪 10%、防空炮 50% Inspector(各弹药 prefab)
火焰喷射 每 0.2 秒一跳,每跳 = 每秒伤害 × 0.2 × (1 − 每米衰减 × 距离),全额走火元素通道 默认每秒 20 点;衰减默认 0 Inspector(FlameProjectile.cs
弹药修正 动能弹:物理 ×1 + 元素载荷 4;元素弹:物理 ×0.4 + 元素载荷 10 元素载荷按飞行衰减同步缩放 代码静态表(AmmoCatalog.cs
怪物撞船 固定 10 × 攻击力 debuff 乘子,打命中点最近建筑;每次攻击只结算一次 撞击后进入后退状态 代码常量(NormalMonster.cs 第 743 行)
怪物撞击溅射船员 max(1, round(攻击力/2 × debuff × (1 − 距离/3))) 半径 3 格;攻击力来自 CSV 代码 + CSV(NormalMonster.csStaticMonsterConfig.csv
船船相撞 round(接近速度 × 对方船质量 × 0.4);直接命中格 100%、周围 8 邻格 50%,同一建筑只伤一次 接近速度 ≥ 0.375 才触发;同一对船 1 秒冷却 Inspector(ShipCollisionHandler.cs)+ 代码(CollisionDamageCalculator.cs
撞岛 max(1, round(10 × 撞击速度 × 0.1)),命中点最近建筑 速度 ≥ 1 才触发;攻击方阵营 “Land” Inspector(LandDamageDealer.cs
毒雾 / 蒸汽云 每 0.5 秒按每秒伤害包结算一跳;蒸汽云额外 ×min(3, 1 + 0.5 × 停留秒数) 生成半径 4 格(状态控制器施放半径)、持续 4 秒 代码常量(StatusEffectController.csHazardZone.csStatusTuning.cs
元素状态 DoT 点燃每秒 2/5/10 点(1/2/3 层)、腐蚀每秒 1/2/4 点,走护甲门 详见元素与状态效果 代码常量(StatusTuning.cs

建筑血量配置表(BuildingConfig.csv,CSV 配置,共 30 行全量)

Section titled “建筑血量配置表(BuildingConfig.csv,CSV 配置,共 30 行全量)”

CSV 的 MaxHealth 列当前用作建筑生成时的初始当前血量;战斗最大血量取 prefab 上的 _maxHP 字段(见“已知限制”第 4 条)。

建筑 MaxHealth 建筑 MaxHealth 建筑 MaxHealth
地板 Floor 100 栏杆 Railing 1(不可被攻击) 松木墙 WallPine 30
橡木墙 WallOak 80 黄铜墙 WallBrass 100 铁墙 WallIron 150
门 Door 80 窗 Window 60 大型设施 LargeFacility 300
调试管道 PipeDebug 50 顶灯 Light 30 加农炮 Cannon_Prod 100
机枪 MachineGun_Prod 100 火焰喷射器 Flame_Prod 100 木箱 WoodContainer 100
水泵 WaterPump 100 管道 Pipe 50 锅炉 Boiler 150
引擎 Engine 150 防空炮 AA_Gun_Prod 100 买入箱 PurchaseBox 100
楼梯 Stair 150 魔法箱 MagicContainer 100 床 Bed 80
水桶 WaterBarrel 60 厕所 Toilet 50 屠宰台 ButcherTable 100
灶台 Galley 120 军械台 AmmoBench 100 酒坊 Brewery 120

状态阈值汇总(均为代码常量)

Section titled “状态阈值汇总(均为代码常量)”
阈值 效果 出处
船员重伤 HP ≤ 30% 失能、中断任务、开始流血 NeedsConfig.cs
船员流血致死 重伤后 30 秒 死亡(救治中暂停计时) NeedsConfig.cs
船员重伤解除 HP ≥ 50% 恢复行动、重置流血 NeedsConfig.cs
船员自然恢复 HP ≥ 50% 时每秒 +1 上限为 MaxHP NeedsConfig.cs
血条颜色 ≤30% 红 / ≤60% 黄 / 其余绿 显示用 NeedsConfig.cs
墙减伤失效 墙 HP ≤ 40% 材质减伤归 0 WallComponent.cs
建筑效率减半 HP ≤ 30% 生产 / 功能效率 ×0.5 Repairable.cs
建筑损伤分级 ≤15% 危重 / ≤40% 重损 / ≤70% 中损 / <100% 轻损 维修优先级与血条标签 Repairable.cs
冻结易碎 物理受伤 ×3,持续 2 秒 冰质变冻结期间 StatusTuning.cs
霜蚀削甲 每点反应威力削 15 点物理护甲(可触发护甲联动)、易碎 +0.2/威力 冰+毒反应 StatusTuning.csStatusEffectController.cs
  • 元素与状态效果:元素通道伤害与状态叠层是两条线——本页只管“元素伤害怎么扣甲扣血”;叠层、质变、反应(含蒸汽云 / 毒雾 / 霜蚀削甲 / 冻结易碎写回防御档案)在该页。状态 DoT 走专用入口,不发声望归因消息。
  • 武器与弹药:伤害包的生产端——发射策略把弹药档案的物理乘子、元素载荷、附加词条注入发射物;本页只描述伤害包落地之后的事。
  • 怪物:怪物的攻击行为、状态机;本页收录其承伤档案与撞击出手公式。
  • 船员:重伤失能、医疗任务、需求死亡(饥饿 / 脱水不经过战斗承伤组件)。
  • 建筑 / 修建:建筑生命周期、框架不可攻击、维修任务恢复 HP。
  • 船只:外缘墙破洞 → 浮力损失 → 沉船判定;船船碰撞细节。
  • 阵营与外交:伤害归因消息驱动声望与宣战;攻击本国实体自动撤销国籍。
  • 城市与国家:城防炮台全灭 → 城市占领。
  • 战利品与掉落:怪物死亡按 CSV 掉落(当前全部怪物 100% 掉 MonsterCorpse)。
  • 开发者工具:无敌模式、无限弹药等作弊开关。
  • 任务与工作:维修与医疗都是任务系统派发的工作。
想调什么 改哪里 类型
穿透 / 破甲 / 渗透 / 反类别 / 护甲联动比例 CombatTuning.cs 六个常量 代码常量(需程序改)
某武器单发伤害 / 随机浮动 / 爆炸半径 / 船员溅射 对应弹药 prefab(Assets/Res/Art Assets/Weapon/Prefabs/Bullets/)上的 Bullet 组件字段 Inspector
伤害随射程衰减 同上:满伤距离 / 最大射程 / 最低伤害比例三字段(当前最低比例=1 即未启用衰减) Inspector
弹药词条与元素载荷(动能弹 / 元素弹差异) AmmoCatalog.cs 静态表 代码常量(注释标明数值定型后可迁 CSV)
怪物血量 / 攻击力 Assets/StreamingAssets/StaticMonsterConfig.csv 的 MaxHP / Attack 列 CSV(策划可直接改)
怪物护甲 / 抗性 MonsterCombatProfile.cs 静态表 代码常量(注释标明后续可迁 CSV)
怪物撞船伤害(固定 10 点) NormalMonster.cs 第 743 行硬编码 代码常量
墙材质 HP / 减伤 / 可燃性 WallMaterialConfig.cs 静态表 代码常量
建筑初始血量 BuildingConfig.csv MaxHealth 列 CSV;注意还需同步 prefab _maxHP(见已知限制)
建筑战斗最大血量 各建筑 prefab(Service/ConstructionSystem/DevAssets/)Building 组件 _maxHP Inspector
船员各职级 HP / 重伤与恢复阈值 / 流血时长 / 自然恢复速度 NeedsConfig.cs 常量 代码常量
船船碰撞伤害系数 / 触发速度 / 冷却 船 prefab 上 ShipCollisionHandler.cs 序列化字段(系数 0.4 / 速度 0.375 / 冷却 1 秒) Inspector
撞岛伤害 岛屿碰撞体上 LandDamageDealer.cs 字段(基础 10 / 最低速度 1) Inspector
Boss 血量 / 重生时间 Boss prefab BossMonster.cs 字段(1000 / 600 秒) Inspector
医疗治疗目标与时长 Task_HealCrew.cs 常量(5 秒 / 10 秒)+ NeedsConfig.cs 50% 阈值 代码常量
维修速度 Task_Repair.cs 常量 15/节拍 代码常量
死亡后销毁延迟 / 是否自动销毁 / 血条显示 各实体承伤节点 DamageableComponent.cs 序列化字段 Inspector
  1. BuildingGodMode 不检查阵营:开启建筑无敌后敌方建筑(含城防炮台、敌船建筑)同样无敌(DamageableComponent.cs 第 301 行 TODO,亦记录于项目已知问题)。CrewGodMode 反向问题:依赖阵营字符串恰为 “Player”,初始化时序导致阵营为空时玩家船员不被保护。
  2. 船员的目标类别实际是“建筑”:船员初始化时未传目标类型,落到默认值“船只”,于是类别推导为建筑(Crew.cs 第 777 行、DamageableComponent.cs 第 494 行)。结果:反生物词条(防空弹)打船员没有 1.5 倍加成,反建筑词条(加农炮弹)打船员反而有。同理,枚举中的“城市”目标类型在生产代码中从未被赋值,声望表的攻城分支实际走不到。
  3. 船员不参与元素状态:状态控制器只在怪物与建筑初始化时挂载(BaseMonster.csBuilding.cs),船员没有——元素通道伤害照常对船员扣血,但点不燃、冻不住、不叠层、不参与传播。
  4. 建筑血量双数据源:CSV MaxHealth 用作初始当前血量,prefab _maxHP 才是战斗最大血量,且两者存在不一致——门 prefab 48 对 CSV 80(实际生成 48/48)、引擎与锅炉 prefab 100 对 CSV 150、楼梯 prefab 100 对 CSV 150、大型设施 CSV 300 无对应 prefab 值。改 CSV 不改 prefab 可能毫无效果。墙类是例外:墙组件在后期初始化阶段强制用材质表覆盖最大血量(WallComponent.cs)。
  5. 新旧两条减伤体系并存:墙 / 门的百分比减伤是旧路径(IDefenseProvider.cs),代码注释标明“Phase 4 由护甲档案取代”,但当前仍然生效,并且同样作用于元素伤害包。所有建筑(含墙)目前护甲条均为 0,护甲玩法实际只在怪物身上。
  6. 物理护甲门不溢出:单发大伤害打中残甲目标只清甲不掉血,这是有意的设计语义(测试 DamageResolverTests.cs 固化),策划做单发高伤武器时要预期“第一发只破甲”。
  7. 伤害数字是意图伤害:过量击杀时事件与跳字报告全额而非实际扣血量;声望归因也按全额计。
  8. 保底 1 点伤害广泛存在:子弹、溅射、碰撞等路径计算结果向下保底 1,理论上无穷远 / 极弱攻击也至少掉 1 滴血(前提是通过了护甲门)。
  9. 火焰喷射器与危害区域无阵营过滤:火焰武器视野内的友方建筑 / 船员、毒雾蒸汽云范围内的己方单位都会受伤,目前唯一的拦截只剩探测器的物理层配置。
  10. 射程伤害衰减未实际启用:三个量产弹药 prefab 的最低伤害比例均为默认 1,衰减公式存在但当前不产生效果。
  11. 护甲不可恢复:没有任何护甲回复 / 重置机制,Boss 重生也不例外——重生路径的 Defender 二次初始化被“已初始化”守卫跳过,护甲、血量与可攻击状态都不会重置(Defender.csBossMonster.cs)。
  12. 设计文档差异:墙体设计文档(Docs 设计 4.6 伤害分级)描述“重伤 40-11% 防御归 0、破洞 10-0% 不可阻挡”,代码只实现了“≤40% 减伤归 0“一档,“破洞”档没有独立逻辑(破洞效果实际由墙死亡 + 浮力系统承担)。