diff --git a/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects.xml b/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects.xml index 28856108..9cd4b1f7 100644 --- a/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects.xml +++ b/1.6/1.6/Defs/ResearchProjectDefs/WULA_ResearchProjects.xml @@ -421,27 +421,13 @@ WULA_Mech_Mobile_Shield_Technology - 6.00 + 10.00 5.60 允许殖民地申请空投MSm-8"放射盾",乌拉帝国的中型战争机械,一种多足机械体,拥有密不透风的反射盾的同时,还可以灼烧那些企图进入护盾区域内的宵小之辈。 - 2000 - -
  • WULA_Synth_Productor_Technology
  • -
    - -
  • WULA_Colony_License_LV2_Technology
  • -
    -
    - - WULA_Mech_Mobile_Shield_Teleporter_Technology - 10.00 - 5.60 - - 允许殖民地使用MSm-8"放射盾"内置的传送器,机械乌拉在其覆盖范围内,处于征召状态下进行常规移动时,会以瞬间传送代替步行。 3000 -
  • WULA_Mech_Mobile_Shield_Technology
  • +
  • WULA_Synth_Productor_Technology
  • WULA_Colony_License_LV3_Technology
  • diff --git a/1.6/1.6/Defs/ThingDefs_Races/WULA_Mechunit_Race.xml b/1.6/1.6/Defs/ThingDefs_Races/WULA_Mechunit_Race.xml index 87f7d407..73406ed7 100644 --- a/1.6/1.6/Defs/ThingDefs_Races/WULA_Mechunit_Race.xml +++ b/1.6/1.6/Defs/ThingDefs_Races/WULA_Mechunit_Race.xml @@ -78,11 +78,11 @@ 9999 0 - 1 - 1 + 1.25 + 1.25 2 - 3 + 4 300 @@ -302,7 +302,7 @@ 3 - 3 + 2 true @@ -356,11 +356,11 @@ 9999 0 - 1 - 1 + 1.25 + 1.25 2 - 3 + 4 300 @@ -570,7 +570,7 @@ 3 - 3 + 2 true @@ -598,6 +598,12 @@ PawnFlyer PawnFlyerLand + + + true + 1 + 60 + Wula_TerrainBlocked false @@ -616,6 +622,8 @@ 0.5 0.5 2 + + 5 300 @@ -649,7 +657,7 @@
  • - 15 + 25 300 2400 30 @@ -669,13 +677,13 @@ true - 0.85 + 0.95 30 0 Interceptor_BlockedProjectile
  • - 15 + 25 30 Flame 8 @@ -687,7 +695,7 @@ false false 热辐射 - MSm-8"放射盾"可以打开外壳,蒸发胆敢进入反射立场内的敌军——这同时会使得它伤害附近所有的散落物品。 + MSm-8"放射盾"可以打开外壳,蒸发胆敢进入反射立场内的敌军。 Wula/UI/Commands/Wula_Psi_Titan_AreaDamage
  • + +
  • + + 0.5 + 1.0 + 15 + 6 + + + 3 + + + true + true + + + Blunt + 1 + 0.1 + + + MeleeHit_BladelinkZeusHammer + + + Blunt + 20 + 4 + true + + MeleeHit_BladelinkZeusHammer + + + PawnFlyer + + PawnFlyerLand + + + true + 1 + 60 + Wula_TerrainBlocked + + + false + false + false +
  • Wula_Mech_Mobile_Factory - 乌拉帝国的大型战争机械,简直就是一座移动堡垒——它不仅装甲厚实、火炮林立,还能在战场上生产大量的辅助战争机械以形成坚实的弹性阵线,生来就是为了粉碎坚固的要塞和顽强的抵抗。 + 乌拉帝国的大型构装体,简直就是一座移动堡垒——它不仅装甲厚实、火炮林立,还能在战场上生产大量的辅助战争机械以形成坚实的弹性阵线,生来就是为了粉碎坚固的要塞和顽强的抵抗。 1 5 @@ -845,6 +902,8 @@ 1.75 1.75 2 + + 10 300 @@ -1287,6 +1346,12 @@ PawnFlyer PawnFlyerLand + + + true + 1 + 60 + Wula_TerrainBlocked false diff --git a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon.png index bdcec844..655d3404 100644 Binary files a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon.png and b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon.png differ diff --git a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Incoming.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Incoming.png index 927fdd0d..98b5a264 100644 Binary files a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Incoming.png and b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Incoming.png differ diff --git a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Icon.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Icon.png index 404761eb..508efa65 100644 Binary files a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Icon.png and b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Icon.png differ diff --git a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Incoming.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Incoming.png index 2febcdbd..27098333 100644 Binary files a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Incoming.png and b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Incoming.png differ diff --git a/Content/Textures/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_north.png b/Content/Textures/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_north.png index f18bbaa6..3d09692e 100644 Binary files a/Content/Textures/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_north.png and b/Content/Textures/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_north.png differ diff --git a/Content/Textures/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_south.png b/Content/Textures/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_south.png index 0398fc35..96ebb903 100644 Binary files a/Content/Textures/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_south.png and b/Content/Textures/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_south.png differ diff --git a/Source/WulaFallenEmpire/Projectiles/Projectile_ExplosiveWithDirectHit.cs b/Source/WulaFallenEmpire/Projectiles/Projectile_ExplosiveWithDirectHit.cs new file mode 100644 index 00000000..7a94cebe --- /dev/null +++ b/Source/WulaFallenEmpire/Projectiles/Projectile_ExplosiveWithDirectHit.cs @@ -0,0 +1,259 @@ +using System; +using System.Collections.Generic; +using RimWorld; +using Verse; +using Verse.Sound; + +namespace WulaFallenEmpire +{ + /// + /// 支持直击伤害的爆炸弹丸 + /// + public class Projectile_ExplosiveWithDirectHit : Projectile_Explosive + { + // 缓存ModExtension + private ProjectileExtension_DirectHit directHitExtension = null; + + // 标记是否已经应用了直击伤害 + private bool directDamageApplied = false; + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref directDamageApplied, "directDamageApplied", false); + } + + protected override void Impact(Thing hitThing, bool blockedByShield = false) + { + // 获取ModExtension + if (directHitExtension == null) + { + directHitExtension = def.GetModExtension(); + } + + // 应用直击伤害(只在有直接击中目标时) + if (hitThing != null && directHitExtension != null && + directHitExtension.directDamageAmount > 0 && + !directDamageApplied) + { + ApplyDirectDamage(hitThing, blockedByShield); + directDamageApplied = true; + } + + // 调用基类方法处理爆炸 + base.Impact(hitThing, blockedByShield); + } + + /// + /// 应用直击伤害 + /// + private void ApplyDirectDamage(Thing hitThing, bool blockedByShield = false) + { + // 如果只在无护盾时生效且有护盾阻挡,则不应用 + if (blockedByShield && directHitExtension.applyDirectDamageOnlyWithoutShield) + return; + + // 准备伤害信息 + DamageInfo damageInfo = CreateDirectDamageInfo(); + + // 对目标造成伤害 + hitThing.TakeDamage(damageInfo); + + // 播放效果 + PlayDirectImpactEffects(hitThing); + } + + /// + /// 创建直击伤害信息 + /// + private DamageInfo CreateDirectDamageInfo() + { + // 确定伤害类型 + DamageDef damageDef = directHitExtension.directDamageDef; + if (damageDef == null) + { + // 默认使用爆炸伤害类型 + damageDef = base.DamageDef ?? DamageDefOf.Bomb; + } + + // 确定伤害量 + int damageAmount = directHitExtension.directDamageAmount; + if (directHitExtension.useEquipmentStatsForDirectDamage && equipment != null) + { + // 使用装备属性计算伤害 + damageAmount = def.projectile.GetDamageAmount(equipment); + } + + // 确定护甲穿透 + float armorPenetration = directHitExtension.directArmorPenetration; + if (directHitExtension.useEquipmentStatsForDirectDamage && equipment != null) + { + armorPenetration = def.projectile.GetArmorPenetration(equipment); + } + + // 创建伤害信息 + DamageInfo damageInfo = new DamageInfo( + damageDef, + damageAmount, + armorPenetration, + -1f, // 角度 + launcher, + null, // 击中部位 + equipmentDef, + DamageInfo.SourceCategory.ThingOrUnknown, + intendedTarget.Thing + ); + + // 添加额外伤害 + AddExtraDirectDamages(damageInfo); + + return damageInfo; + } + + /// + /// 添加上额外伤害 + /// + private void AddExtraDirectDamages(DamageInfo mainDamage) + { + if (directHitExtension?.extraDirectDamages == null) + return; + + foreach (var extraDamage in directHitExtension.extraDirectDamages) + { + if (extraDamage != null && extraDamage.def != null && extraDamage.amount > 0) + { + DamageInfo extraDamageInfo = new DamageInfo( + extraDamage.def, + extraDamage.amount, + extraDamage.armorPenetration, + -1f, + launcher, + null, + equipmentDef, + DamageInfo.SourceCategory.ThingOrUnknown, + intendedTarget.Thing + ); + + // 应用额外伤害 + if (mainDamage.IntendedTarget != null && mainDamage.IntendedTarget != null) + { + mainDamage.IntendedTarget.TakeDamage(extraDamageInfo); + } + } + } + } + + /// + /// 播放直击效果 + /// + private void PlayDirectImpactEffects(Thing hitThing) + { + Map map = base.Map; + if (map == null) + return; + + // 播放效果器 + if (directHitExtension.directImpactEffecter != null) + { + Effecter effecter = directHitExtension.directImpactEffecter.Spawn(); + effecter.Trigger(new TargetInfo(base.Position, map), + new TargetInfo(hitThing.Position, map)); + effecter.Cleanup(); + } + + // 播放音效 + if (directHitExtension.directImpactSound != null) + { + directHitExtension.directImpactSound.PlayOneShot(new TargetInfo(base.Position, map)); + } + } + + /// + /// 覆盖爆炸方法以添加直击伤害信息 + /// + protected override void Explode() + { + // 在爆炸前确保直击伤害已经应用(如果是延迟爆炸的情况) + if (!directDamageApplied && directHitExtension != null && + directHitExtension.directDamageAmount > 0 && intendedTarget.Thing != null) + { + ApplyDirectDamage(intendedTarget.Thing, false); + directDamageApplied = true; + } + + // 调用基类爆炸方法 + base.Explode(); + } + + /// + /// 获取调试信息 + /// + public string GetDirectHitDebugInfo() + { + if (directHitExtension == null) + return "No direct hit extension configured."; + + string info = "Direct Hit Configuration:\n"; + info += $"Damage Def: {directHitExtension.directDamageDef?.defName ?? "None"}\n"; + info += $"Damage Amount: {directHitExtension.directDamageAmount}\n"; + info += $"Armor Penetration: {directHitExtension.directArmorPenetration}\n"; + info += $"Use Equipment Stats: {directHitExtension.useEquipmentStatsForDirectDamage}\n"; + info += $"Apply Without Shield Only: {directHitExtension.applyDirectDamageOnlyWithoutShield}\n"; + info += $"Extra Damages Count: {directHitExtension.extraDirectDamages?.Count ?? 0}\n"; + info += $"Direct Damage Applied: {directDamageApplied}"; + + return info; + } + } + + /// + /// 直击伤害ModExtension定义 + /// + public class ProjectileExtension_DirectHit : DefModExtension + { + /// + /// 直击伤害类型(默认为爆炸伤害类型) + /// + public DamageDef directDamageDef = null; + + /// + /// 直击伤害量 + /// + public int directDamageAmount = 0; + + /// + /// 直击伤害护甲穿透 + /// + public float directArmorPenetration = 0f; + + /// + /// 直击伤害是否受装备影响 + /// + public bool useEquipmentStatsForDirectDamage = false; + + /// + /// 直击伤害额外伤害列表 + /// + public List extraDirectDamages = null; + + /// + /// 直击伤害是否只在击穿护盾后生效 + /// + public bool applyDirectDamageOnlyWithoutShield = false; + + /// + /// 直击伤害效果器 + /// + public EffecterDef directImpactEffecter = null; + + /// + /// 直击伤害音效 + /// + public SoundDef directImpactSound = null; + + /// + /// 是否显示直击伤害日志 + /// + public bool logDirectDamage = false; + } +} diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index c32753b3..acbcd702 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -106,6 +106,7 @@ + diff --git a/美术与文本源文件/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.png b/美术与文本源文件/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.png index 3b4af632..e8fde12c 100644 Binary files a/美术与文本源文件/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.png and b/美术与文本源文件/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.png differ diff --git a/美术与文本源文件/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_east.sai2 b/美术与文本源文件/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_east.sai2 index 78b0cf6c..2755d99c 100644 Binary files a/美术与文本源文件/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_east.sai2 and b/美术与文本源文件/Wula/Things/Wula_Mech_Mobile_Factory/Bodies/Naked_Thin_east.sai2 differ