diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index 205fb0e2..bb793e00 100644 Binary files a/1.6/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Missile_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Missile_Weapon.xml index b78f9a0f..8df6bee0 100644 --- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Missile_Weapon.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Missile_Weapon.xml @@ -42,6 +42,11 @@ RocketswarmLauncher_Fire GunTail_Heavy 12 + + true + true + true + diff --git a/Source/WulaFallenEmpire/Projectiles/Projectile_ExplosiveTrackingBullet.cs b/Source/WulaFallenEmpire/Projectiles/Projectile_ExplosiveTrackingBullet.cs index c742e789..2e319def 100644 --- a/Source/WulaFallenEmpire/Projectiles/Projectile_ExplosiveTrackingBullet.cs +++ b/Source/WulaFallenEmpire/Projectiles/Projectile_ExplosiveTrackingBullet.cs @@ -50,7 +50,7 @@ namespace WulaFallenEmpire protected override void Impact(Thing hitThing, bool blockedByShield = false) { - bool flag = blockedByShield || ExplosiveDef.explosionDelay == 0; // Use ExplosiveDef for explosionDelay + bool flag = hitThing == null || blockedByShield || ExplosiveDef.explosionDelay == 0; // Use ExplosiveDef for explosionDelay if (flag) { this.Explode(); diff --git a/Source/WulaFallenEmpire/Projectiles/Projectile_TrackingBullet.cs b/Source/WulaFallenEmpire/Projectiles/Projectile_TrackingBullet.cs index 094b5567..822d7ab3 100644 --- a/Source/WulaFallenEmpire/Projectiles/Projectile_TrackingBullet.cs +++ b/Source/WulaFallenEmpire/Projectiles/Projectile_TrackingBullet.cs @@ -84,8 +84,13 @@ namespace WulaFallenEmpire if (homing) { + // 首先检查目标是否是一个有效的 Thing + if (!intendedTarget.HasThing) + { + homing = false; // 如果目标是地面,则禁用追踪 + } // 如果目标消失或距离太远,停止追踪 - if (!intendedTarget.IsValid || !intendedTarget.Thing.Spawned || (intendedTarget.Cell.ToVector3() - ExactPosition).magnitude > def.projectile.speed * 2f) // 假设2倍速度为最大追踪距离 + else if (!intendedTarget.IsValid || !intendedTarget.Thing.Spawned || (intendedTarget.Cell.ToVector3() - ExactPosition).magnitude > def.projectile.speed * 2f) // 假设2倍速度为最大追踪距离 { homing = false; destroyTicksAfterLosingTrack = TrackingDef.destroyTicksAfterLosingTrack.RandomInRange; // 失去追踪后根据XML配置的范围自毁