diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 441d9f5..73e47af 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ diff --git a/1.6/1.6/Defs/AbilityDefs/Ability_Flyover.xml b/1.6/1.6/Defs/AbilityDefs/Ability_Flyover.xml index b007df6..3fe3b87 100644 --- a/1.6/1.6/Defs/AbilityDefs/Ability_Flyover.xml +++ b/1.6/1.6/Defs/AbilityDefs/Ability_Flyover.xml @@ -55,7 +55,7 @@
  • ARA_HiveCorvette_Entity - 5000 + 5000 1
  • @@ -65,21 +65,23 @@ 20 true Perpendicular - + true - 3 + 6 25 - Proj_ARA_HiveCorvette 0.23 + + 4 + 4 true - + true (1.0,0.3,0.1,0.2) - + true (0.3,0.7,1.0,0.3) @@ -109,7 +111,7 @@
  • ARA_HiveCorvette_Entity - 5000 + 5000 1
  • @@ -119,22 +121,21 @@ 20 true Perpendicular - + false true 6 15 - Bullet_ARA_RW_Acid_Mortar 0.3 true - + true (1.0,0.3,0.1,0.2) - + true (0.3,0.7,1.0,0.3) @@ -164,7 +165,7 @@
  • ARA_HiveCorvette_Entity - 5000 + 5000 1
  • @@ -174,13 +175,13 @@ 20 true Perpendicular - + true - + true - 4 + 4 (0.3,0.7,1.0,0.3)
  • diff --git a/1.6/1.6/Defs/Thing_Misc/ARA_Flyover_Item.xml b/1.6/1.6/Defs/Thing_Misc/ARA_Flyover_Item.xml index 32b1700..df2aba2 100644 --- a/1.6/1.6/Defs/Thing_Misc/ARA_Flyover_Item.xml +++ b/1.6/1.6/Defs/Thing_Misc/ARA_Flyover_Item.xml @@ -517,11 +517,11 @@ MetaOverlays
  • - Proj_ARA_HiveCorvette + Projectile_CatastropheMissile 50
  • - Bullet_ARA_HiveCorvette + Bullet_RW_Missile_AR_Gun 30 50 3 @@ -571,7 +571,7 @@ MetaOverlays
  • - Bullet_ARA_RW_Acid_Mortar + Proj_ARA_HiveCorvette 15
  • diff --git a/Source/ArachnaeSwarm/Flyover/ARA_SpawnFlyOver/CompAbilityEffect_SpawnFlyOver.cs b/Source/ArachnaeSwarm/Flyover/ARA_SpawnFlyOver/CompAbilityEffect_SpawnFlyOver.cs index d69f154..2ab3f55 100644 --- a/Source/ArachnaeSwarm/Flyover/ARA_SpawnFlyOver/CompAbilityEffect_SpawnFlyOver.cs +++ b/Source/ArachnaeSwarm/Flyover/ARA_SpawnFlyOver/CompAbilityEffect_SpawnFlyOver.cs @@ -392,16 +392,37 @@ namespace ArachnaeSwarm private List PreprocessStrafingTargets(List potentialTargets, float fireChance) { List confirmedTargets = new List(); + List missedCells = new List(); foreach (IntVec3 cell in potentialTargets) { - // 使用概率决定这个单元格是否会被射击 if (Rand.Value <= fireChance) { confirmedTargets.Add(cell); } + else + { + missedCells.Add(cell); + } + } + + // 应用最小和最大射弹数限制 + if (Props.maxStrafeProjectiles > -1 && confirmedTargets.Count > Props.maxStrafeProjectiles) + { + // 如果超出最大值,随机丢弃一些目标 + confirmedTargets = confirmedTargets.InRandomOrder().Take(Props.maxStrafeProjectiles).ToList(); } - Log.Message($"Strafing Preprocess: {confirmedTargets.Count}/{potentialTargets.Count} cells confirmed ({fireChance:P0} chance)"); + if (Props.minStrafeProjectiles > -1 && confirmedTargets.Count < Props.minStrafeProjectiles) + { + // 如果不足最小值,从之前未选中的格子里补充 + int needed = Props.minStrafeProjectiles - confirmedTargets.Count; + if (needed > 0 && missedCells.Count > 0) + { + confirmedTargets.AddRange(missedCells.InRandomOrder().Take(Mathf.Min(needed, missedCells.Count))); + } + } + + Log.Message($"Strafing Preprocess: {confirmedTargets.Count}/{potentialTargets.Count} cells confirmed after min/max adjustment."); return confirmedTargets; } diff --git a/Source/ArachnaeSwarm/Flyover/ARA_SpawnFlyOver/CompProperties_AbilitySpawnFlyOver.cs b/Source/ArachnaeSwarm/Flyover/ARA_SpawnFlyOver/CompProperties_AbilitySpawnFlyOver.cs index b190c2c..edd80b2 100644 --- a/Source/ArachnaeSwarm/Flyover/ARA_SpawnFlyOver/CompProperties_AbilitySpawnFlyOver.cs +++ b/Source/ArachnaeSwarm/Flyover/ARA_SpawnFlyOver/CompProperties_AbilitySpawnFlyOver.cs @@ -32,6 +32,8 @@ namespace ArachnaeSwarm public int strafeWidth = 3; // 扫射宽度(用于预览) public int strafeLength = 15; // 扫射长度 public float strafeFireChance = 0.7f; // 扫射发射概率 + public int minStrafeProjectiles = -1; // 新增:最小射弹数 + public int maxStrafeProjectiles = -1; // 新增:最大射弹数 public ThingDef strafeProjectile; // 抛射体定义 // 地面扫射可视化