diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll
index 5e988058..ac26f94d 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/PawnKinds/PawnKinds_Wula.xml b/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml
index ff0bd734..841bdc03 100644
--- a/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml
+++ b/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml
@@ -343,6 +343,9 @@
99999~99999
0.7
+
+ Wula_Mech_Mobile_Factory_Weapon
+
Wula_Mech_Mobile_Factory_Produce
diff --git a/1.6/1.6/Defs/SoundDefs/Wula_Sound_Weapons.xml b/1.6/1.6/Defs/SoundDefs/Wula_Sound_Weapons.xml
index f18e81e6..635ab7d4 100644
--- a/1.6/1.6/Defs/SoundDefs/Wula_Sound_Weapons.xml
+++ b/1.6/1.6/Defs/SoundDefs/Wula_Sound_Weapons.xml
@@ -181,6 +181,38 @@
+
+ Wula_AI_Heavy_Panzer_Turret_Weapon_Shootingsound
+ MapOnly
+ 2
+
+
+
+
+ Wula/Wula_AI_Heavy_Panzer_Turret_Weapon_Shootingsound
+
+
+ 45
+ 0.9~1.1
+
+
+
+
+ Wula_AI_Panzer_Destroyer_Turret_Weapon_Shootingsound
+ MapOnly
+ 1
+
+
+
+
+ Wula/Wula_AI_Panzer_Destroyer_Turret_Weapon_Shootingsound
+
+
+ 65
+ 0.9~1.1
+
+
+
WULA_PsiCrusher_Sound
MapOnly
diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Mech_Buildings.xml b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Mech_Buildings.xml
index acaf0765..37814e28 100644
--- a/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Mech_Buildings.xml
+++ b/1.6/1.6/Defs/ThingDefs_Buildings/WULA_Mech_Buildings.xml
@@ -3,10 +3,10 @@
Wula_AI_Heavy_Panzer_Cleanzone
-
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放大型战争机械。\n\n战车是乌拉帝国的中型战争机械,以悬浮的方式穿梭于战场之上,使用穿透力强大的战车炮和导弹打击敌方,是乌拉帝国前锋部队的中流砥柱。
+
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放大型战争机械。\n\n巨戟是乌拉帝国的中型构装体,以悬浮的方式穿梭于战场之上,使用拥有强大穿透力且射速较快的双联晶化炮打击敌方,是乌拉帝国前锋部队的中流砥柱。
Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Incoming
- 1.33
+ 1
(0, -0.1)
MinifiedThing
Normal
@@ -20,7 +20,7 @@
Wula/Building/WULA_Dropping_Building_Cleanzone
Graphic_Multi
- (3,3)
+ (4,4)
false
@@ -50,7 +50,7 @@
1
0
- (3,3)
+ (4,4)
0
0
false
@@ -73,7 +73,7 @@
Wula_AI_Heavy_Panzer_Incoming
-
+
(1,1)
WulaFallenEmpire.Skyfaller_PawnSpawner
@@ -110,7 +110,7 @@
Wula_AI_Heavy_Panzer
PlayerColony
- true
+ false
false
@@ -119,10 +119,10 @@
Wula_AI_Rocket_Panzer_Cleanzone
-
- 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放大型战争机械。\n\n喷火战车乌拉帝国的中型战争机械,以悬浮的方式穿梭于战场之上,拥有车体臼炮和两具可以发射大量燃烧火箭弹的转轮导弹巢,但是未像其姊妹型号那样装备护盾。
+
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放大型战争机械。\n\n炎霖是乌拉帝国的中型战争机械,以悬浮的方式穿梭于战场之上,可以在远距离上使用火箭弹巢发射漫天的弹幕,用纯粹的火力淹没敌方集群。
Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Incoming
- 1.33
+ 1
(0, -0.1)
MinifiedThing
Normal
@@ -189,7 +189,7 @@
Wula_AI_Rocket_Panzer_Incoming
-
+
(1,1)
WulaFallenEmpire.Skyfaller_PawnSpawner
@@ -226,7 +226,123 @@
Wula_AI_Rocket_Panzer
PlayerColony
- true
+ false
+ false
+
+
+
+
+
+
+ Wula_AI_Panzer_Destroyer_Cleanzone
+
+ 清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放大型战争机械。\n\n冥波是乌拉帝国的中型战争机械,以悬浮的方式穿梭于战场之上,拥有一门射速缓慢但射程极远、威力强大的电浆炮,足以威胁那些最厚实的装甲单位。
+ Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Panzer_Destroyer_Incoming
+ 1
+ (0, -0.1)
+ MinifiedThing
+ Normal
+ None
+
+ Wula_AI_Panzer_Destroyer
+
+
+ BuildingsMisc
+
+
+ Wula/Building/WULA_Dropping_Building_Cleanzone
+ Graphic_Multi
+ (3,3)
+
+ false
+
+
+
+ 300
+ 18
+ 2
+ 50
+ 1
+
+ Building
+ PassThroughOnly
+ false
+ 0.5
+ false
+ 0
+ false
+ false
+
+ WULA_AI_Heavy_Panzer_Technology
+
+
+ 0
+ 1
+ 0
+ 1
+ 0
+
+ (3,3)
+ 0
+ 0
+ false
+
+ BuildingDestroyed_Metal_Small
+
+
+ WulaFallenEmpire.PlaceWorker_CustomRadius
+
+ WULA_Buildings
+
+
+ Wula_AI_Panzer_Destroyer_Incoming
+ true
+ 1
+ true
+ false
+
+
+
+
+ Wula_AI_Panzer_Destroyer_Incoming
+
+ (1,1)
+ WulaFallenEmpire.Skyfaller_PawnSpawner
+
+ Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Incoming
+ Graphic_Single
+ CutoutFlying
+ (7,7)
+
+
+ Accelerate
+ Things/Skyfaller/SkyfallerShadowDropPod
+ (7, 7)
+ DropPod_Fall
+ 100
+ Explosion_Vaporize
+ 0.05
+ 1
+ 1
+
+
+ (0,0)
+ (1, 1)
+
+
+
+ 6
+ WULA_Mech_Drop
+ 0
+
+
+
+ Smoke_Joint
+
+
+ Wula_AI_Panzer_Destroyer
+ PlayerColony
+ false
false
@@ -311,7 +427,7 @@
Wula/Things/WULA_Mobile_Shield/WULA_Mobile_Shield_Incoming
Graphic_Single
CutoutFlying
- (5,5)
+ (8,8)
Accelerate
@@ -426,7 +542,7 @@
Wula/Things/Wula_Mech_Mobile_Factory/Wula_Mech_Mobile_Factory_Incoming
Graphic_Single
CutoutFlying
- (9,9)
+ (12,12)
Accelerate
@@ -456,7 +572,7 @@
Wula_Mech_Mobile_Factory
PlayerColony
- true
+ false
false
diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Machine_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Machine_Weapon.xml
index bf33c124..1f39987d 100644
--- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Machine_Weapon.xml
+++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Machine_Weapon.xml
@@ -281,6 +281,65 @@
+
+ Wula_Mech_Mobile_Factory_Main_Weapon
+
+ MFm-2"陆行舰"车体上的测距器,可以确保其炮塔在可以开火的最佳距离,被其瞄准的目标会成为炮塔的优先攻击目标。
+ Normal
+ Spacer
+ None
+ true
+ Wula/Weapon/WULA_WM_Panzer_Destroyer_Turret
+
+ Wula/Weapon/WULA_Weapon_Empty
+ Graphic_Single
+ 1.35
+
+ Interact_Rifle
+
+
+ 2500
+
+ 8
+ 1
+ 1
+ 1
+ 1
+ 0.1
+
+
+
+ WulaFallenEmpire.Verb_RangeChecker
+ true
+ Bullet_ChargeRifle
+ 12
+ 120
+ 0.2
+ 1
+ 0
+ false
+
+
+ true
+
+
+
+
+ 1
+
+
+ Wula_Mech_Mobile_Factory_Weapon
+
+
+
+
+
+ Wula_Mech_Mobile_Factory
+
+
+
+
WULA_MechFlyerTurretGun
@@ -396,7 +455,7 @@
2
4
true
- WULA_MW_Mass_Drivers_Shootingsound
+ Wula_AI_Heavy_Panzer_Turret_Weapon_Shootingsound
GunTail_Heavy
18
false
@@ -450,7 +509,7 @@
Spacer
None
true
- Wula/Projectile/WULA_Shrapnel
+ Wula/Weapon/WULA_WM_Panzer_Turret
Wula/Weapon/WULA_Weapon_Empty
Graphic_Single
@@ -598,7 +657,7 @@
Spacer
None
true
- Wula/Projectile/WULA_Shrapnel
+ Wula/Weapon/WULA_WM_Panzer_Rocket_Turret
Wula/Weapon/WULA_Weapon_Empty
Graphic_Single
@@ -657,7 +716,7 @@
true
Ultra
- Wula/Weapon/WULA_WM_Panzer_Turret
+ Wula/Weapon/WULA_WM_Panzer_Destroyer_Turret
Graphic_Single
3
@@ -681,7 +740,7 @@
1
8
true
- WULA_MW_Mass_Drivers_Shootingsound
+ Wula_AI_Panzer_Destroyer_Turret_Weapon_Shootingsound
GunTail_Heavy
18
false
@@ -743,7 +802,7 @@
Spacer
None
true
- Wula/Projectile/WULA_Shrapnel
+ Wula/Weapon/WULA_WM_Panzer_Destroyer_Turret
Wula/Weapon/WULA_Weapon_Empty
Graphic_Single
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 6fb23b94..b9d1ea2f 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
@@ -1490,7 +1490,7 @@
ConstructMetal
- Wula_AI_Heavy_Panzer_Main_Weapon
+ Wula_Mech_Mobile_Factory_Main_Weapon
true
diff --git a/Content/Sounds/Wula/Wula_AI_Heavy_Panzer_Turret_Weapon_Shootingsound.wav b/Content/Sounds/Wula/Wula_AI_Heavy_Panzer_Turret_Weapon_Shootingsound.wav
new file mode 100644
index 00000000..11325b45
Binary files /dev/null and b/Content/Sounds/Wula/Wula_AI_Heavy_Panzer_Turret_Weapon_Shootingsound.wav differ
diff --git a/Content/Sounds/Wula/Wula_AI_Panzer_Destroyer_Turret_Weapon_Shootingsound.wav b/Content/Sounds/Wula/Wula_AI_Panzer_Destroyer_Turret_Weapon_Shootingsound.wav
new file mode 100644
index 00000000..f20c625b
Binary files /dev/null and b/Content/Sounds/Wula/Wula_AI_Panzer_Destroyer_Turret_Weapon_Shootingsound.wav differ
diff --git a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Panzer_Destroyer_Icon.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Panzer_Destroyer_Icon.png
new file mode 100644
index 00000000..d20b6f52
Binary files /dev/null and b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Panzer_Destroyer_Icon.png differ
diff --git a/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Panzer_Destroyer_Incoming.png b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Panzer_Destroyer_Incoming.png
new file mode 100644
index 00000000..1965998d
Binary files /dev/null and b/Content/Textures/Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Panzer_Destroyer_Incoming.png differ
diff --git a/Content/Textures/Wula/Weapon/WULA_WM_Panzer_Destroyer_Turret.png b/Content/Textures/Wula/Weapon/WULA_WM_Panzer_Destroyer_Turret.png
new file mode 100644
index 00000000..38af7cdd
Binary files /dev/null and b/Content/Textures/Wula/Weapon/WULA_WM_Panzer_Destroyer_Turret.png differ
diff --git a/Source/WulaFallenEmpire/Verb/Verb_RangeChecker.cs b/Source/WulaFallenEmpire/Verb/Verb_RangeChecker.cs
index a9632de3..03f008cd 100644
--- a/Source/WulaFallenEmpire/Verb/Verb_RangeChecker.cs
+++ b/Source/WulaFallenEmpire/Verb/Verb_RangeChecker.cs
@@ -1,4 +1,3 @@
-// File: Verb_RangeChecker.cs
using RimWorld;
using System.Collections.Generic;
using UnityEngine;
@@ -7,194 +6,60 @@ using Verse;
namespace WulaFallenEmpire
{
///
- /// 用于距离判断的Verb,不发射任何射弹,不造成伤害,仅用于距离计算和AI判断
+ /// 用于距离判断的Verb,不发射任何射弹,不造成伤害,不产生噪音
+ /// 仅用于距离计算、视线检查和AI判断
/// 当发射成功时,会设置Pawn身上所有Comp_MultiTurretGun的focusTarget为目标
///
- public class Verb_RangeChecker : Verb_LaunchProjectile
+ public class Verb_RangeChecker : Verb
{
+ // 重写瞄准相关方法,使其不产生视觉或声音效果
+ public override void WarmupComplete()
+ {
+ base.WarmupComplete();
+
+ // 不播放射击声音
+ // 不产生射击效果
+ }
+
protected override bool TryCastShot()
{
+ // 基础检查
if (currentTarget.HasThing && currentTarget.Thing.Map != caster.Map)
- {
- return false;
- }
-
- ThingDef projectile = Projectile;
- if (projectile == null)
- {
- return false;
- }
-
- ShootLine resultingLine;
- bool flag = TryFindShootLineFromTo(caster.Position, currentTarget, out resultingLine);
- if (verbProps.stopBurstWithoutLos && !flag)
- {
return false;
+
+ // 检查视线
+ ShootLine shootLine;
+ if (!TryFindShootLineFromTo(caster.Position, currentTarget, out shootLine))
+ {
+ if (verbProps.stopBurstWithoutLos)
+ return false;
}
+ // 更新设备状态(如果有)
if (base.EquipmentSource != null)
{
base.EquipmentSource.GetComp()?.Notify_ProjectileLaunched();
base.EquipmentSource.GetComp()?.UsedOnce();
}
+ // 记录射击时间
lastShotTick = Find.TickManager.TicksGame;
- Thing manningPawn = caster;
- Thing equipmentSource = base.EquipmentSource;
- CompMannable compMannable = caster.TryGetComp();
- if (compMannable?.ManningPawn != null)
- {
- manningPawn = compMannable.ManningPawn;
- equipmentSource = caster;
- }
- Vector3 drawPos = caster.DrawPos;
- Projectile projectile2 = (Projectile)GenSpawn.Spawn(projectile, resultingLine.Source, caster.Map);
- if (equipmentSource.TryGetComp(out CompUniqueWeapon comp))
- {
- foreach (WeaponTraitDef item in comp.TraitsListForReading)
- {
- if (item.damageDefOverride != null)
- {
- projectile2.damageDefOverride = item.damageDefOverride;
- }
-
- if (!item.extraDamages.NullOrEmpty())
- {
- Projectile projectile3 = projectile2;
- if (projectile3.extraDamages == null)
- {
- projectile3.extraDamages = new List();
- }
- projectile2.extraDamages.AddRange(item.extraDamages);
- }
- }
- }
+ // 更新炮塔焦点目标
+ UpdateTurretFocusTargets();
- if (verbProps.ForcedMissRadius > 0.5f)
- {
- float num = verbProps.ForcedMissRadius;
- if (manningPawn is Pawn pawn)
- {
- num *= verbProps.GetForceMissFactorFor(equipmentSource, pawn);
- }
-
- float num2 = VerbUtility.CalculateAdjustedForcedMiss(num, currentTarget.Cell - caster.Position);
- if (num2 > 0.5f)
- {
- IntVec3 forcedMissTarget = GetForcedMissTarget(num2);
- if (forcedMissTarget != currentTarget.Cell)
- {
- ProjectileHitFlags projectileHitFlags = ProjectileHitFlags.NonTargetWorld;
- if (Rand.Chance(0.5f))
- {
- projectileHitFlags = ProjectileHitFlags.All;
- }
-
- if (!canHitNonTargetPawnsNow)
- {
- projectileHitFlags &= ~ProjectileHitFlags.NonTargetPawns;
- }
-
- // 模拟发射成功,但不实际发射
- bool shotResult = SimulateShotSuccess(drawPos, forcedMissTarget, currentTarget, projectileHitFlags, preventFriendlyFire, equipmentSource);
- if (shotResult)
- {
- UpdateTurretFocusTargets();
- }
- return shotResult;
- }
- }
- }
-
- ShotReport shotReport = ShotReport.HitReportFor(caster, this, currentTarget);
- Thing randomCoverToMissInto = shotReport.GetRandomCoverToMissInto();
- ThingDef targetCoverDef = randomCoverToMissInto?.def;
-
- if (verbProps.canGoWild && !Rand.Chance(shotReport.AimOnTargetChance_IgnoringPosture))
- {
- bool flyOverhead = projectile2?.def?.projectile != null && projectile2.def.projectile.flyOverhead;
- resultingLine.ChangeDestToMissWild(shotReport.AimOnTargetChance_StandardTarget, flyOverhead, caster.Map);
- ProjectileHitFlags projectileHitFlags2 = ProjectileHitFlags.NonTargetWorld;
- if (Rand.Chance(0.5f) && canHitNonTargetPawnsNow)
- {
- projectileHitFlags2 |= ProjectileHitFlags.NonTargetPawns;
- }
-
- // 模拟发射成功,但不实际发射
- bool shotResult = SimulateShotSuccess(drawPos, resultingLine.Dest, currentTarget, projectileHitFlags2, preventFriendlyFire, equipmentSource, targetCoverDef);
- if (shotResult)
- {
- UpdateTurretFocusTargets();
- }
- return shotResult;
- }
-
- if (currentTarget.Thing != null && currentTarget.Thing.def.CanBenefitFromCover && !Rand.Chance(shotReport.PassCoverChance))
- {
- ProjectileHitFlags projectileHitFlags3 = ProjectileHitFlags.NonTargetWorld;
- if (canHitNonTargetPawnsNow)
- {
- projectileHitFlags3 |= ProjectileHitFlags.NonTargetPawns;
- }
-
- // 模拟发射成功,但不实际发射
- bool shotResult = SimulateShotSuccess(drawPos, randomCoverToMissInto, currentTarget, projectileHitFlags3, preventFriendlyFire, equipmentSource, targetCoverDef);
- if (shotResult)
- {
- UpdateTurretFocusTargets();
- }
- return shotResult;
- }
-
- ProjectileHitFlags projectileHitFlags4 = ProjectileHitFlags.IntendedTarget;
- if (canHitNonTargetPawnsNow)
- {
- projectileHitFlags4 |= ProjectileHitFlags.NonTargetPawns;
- }
-
- if (!currentTarget.HasThing || currentTarget.Thing.def.Fillage == FillCategory.Full)
- {
- projectileHitFlags4 |= ProjectileHitFlags.NonTargetWorld;
- }
-
- // 模拟发射成功,但不实际发射
- bool finalShotResult = SimulateFinalShotSuccess(drawPos, resultingLine.Dest, currentTarget, projectileHitFlags4, preventFriendlyFire, equipmentSource, targetCoverDef);
- if (finalShotResult)
- {
- UpdateTurretFocusTargets();
- }
- return finalShotResult;
- }
-
- ///
- /// 模拟射击成功的情况
- ///
- private bool SimulateShotSuccess(Vector3 drawPos, IntVec3 targetCell, LocalTargetInfo target, ProjectileHitFlags hitFlags, bool preventFriendlyFire, Thing equipmentSource, ThingDef targetCoverDef = null)
- {
- // 这里不实际发射射弹,只返回成功
- // 销毁之前创建的射弹对象,因为我们不需要它
+ // 返回成功,但不实际射击
return true;
}
///
- /// 模拟射击成功的情况(带目标)
+ /// 重写射击效果,确保不产生任何视觉或声音效果
///
- private bool SimulateShotSuccess(Vector3 drawPos, Thing target, LocalTargetInfo originalTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire, Thing equipmentSource, ThingDef targetCoverDef = null)
+ public override void DrawHighlight(LocalTargetInfo target)
{
- // 这里不实际发射射弹,只返回成功
- // 销毁之前创建的射弹对象,因为我们不需要它
- return true;
- }
-
- ///
- /// 模拟最终射击成功的情况
- ///
- private bool SimulateFinalShotSuccess(Vector3 drawPos, IntVec3 targetCell, LocalTargetInfo target, ProjectileHitFlags hitFlags, bool preventFriendlyFire, Thing equipmentSource, ThingDef targetCoverDef = null)
- {
- // 这里不实际发射射弹,只返回成功
- // 销毁之前创建的射弹对象,因为我们不需要它
- return true;
+ base.DrawHighlight(target);
+
+ // 可以绘制距离指示,但不绘制射击预览
}
///
@@ -209,14 +74,89 @@ namespace WulaFallenEmpire
foreach (var turretComp in turretComps)
{
- // 设置集中火力目标
- Comp_MultiTurretGun.focusTarget = currentTarget;
- Comp_MultiTurretGun.lastFocusSetTick = Find.TickManager.TicksGame;
- Comp_MultiTurretGun.lastFocusPawn = pawn;
-
- // 强制炮塔立即重新索敌,以便它们能检测到新的集中火力目标
- turretComp.TryAcquireTarget();
+ if (turretComp != null)
+ {
+ // 设置集中火力目标
+ Comp_MultiTurretGun.focusTarget = currentTarget;
+ Comp_MultiTurretGun.lastFocusSetTick = Find.TickManager.TicksGame;
+ Comp_MultiTurretGun.lastFocusPawn = pawn;
+
+ // 强制炮塔立即重新索敌,以便它们能检测到新的集中火力目标
+ turretComp.TryAcquireTarget();
+ }
}
+
+ // 记录日志
+ if (Prefs.DevMode)
+ {
+ Log.Message($"[Verb_RangeChecker] {pawn.LabelShort} set focus target to {currentTarget}");
+ }
+ }
+ }
+
+ ///
+ /// 重写可用性检查,确保只有符合条件的Pawn才能使用
+ ///
+ public override bool Available()
+ {
+ if (!base.Available())
+ return false;
+
+ // 额外的检查:确保有炮塔组件
+ if (caster is Pawn pawn)
+ {
+ var turretComps = pawn.GetComps();
+ if (turretComps == null )
+ return false;
+ }
+
+ return true;
+ }
+
+ ///
+ /// 重写验证方法,添加额外的距离检查
+ ///
+ public override bool CanHitTarget(LocalTargetInfo targ)
+ {
+ if (!base.CanHitTarget(targ))
+ return false;
+
+ // 检查距离
+ float distance = caster.Position.DistanceTo(targ.Cell);
+ if (distance > verbProps.range)
+ return false;
+
+ // 检查最小距离
+ if (distance < verbProps.minRange)
+ return false;
+
+ return true;
+ }
+
+ ///
+ /// 重写目标高亮显示
+ ///
+ public override void OrderForceTarget(LocalTargetInfo target)
+ {
+ if (CanHitTarget(target))
+ {
+ base.OrderForceTarget(target);
+ UpdateTurretFocusTargets();
+ }
+ }
+
+ ///
+ /// 重写,确保不产生任何射击效果
+ ///
+ public override void Notify_EquipmentLost()
+ {
+ base.Notify_EquipmentLost();
+
+ // 清理焦点目标
+ if (caster is Pawn pawn)
+ {
+ Comp_MultiTurretGun.lastFocusPawn = null;
+ Comp_MultiTurretGun.focusTarget = LocalTargetInfo.Invalid;
}
}
}
@@ -230,8 +170,21 @@ namespace WulaFallenEmpire
{
verbClass = typeof(Verb_RangeChecker);
- // 默认设置为不发射射弹
+ // 设置为不发射射弹
defaultProjectile = null;
+
+ // 设置无噪音
+ soundCast = null;
+ soundCastTail = null;
+
+ // 无视觉效果
+ muzzleFlashScale = 0f;
+
+ // 无预热时间
+ warmupTime = 0f;
+
+ // 无冷却时间
+ defaultCooldownTime = 0f;
}
}
}
diff --git a/美术与文本源文件/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.sai2 b/美术与文本源文件/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.sai2
index 71fde9ae..0f602d9e 100644
Binary files a/美术与文本源文件/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.sai2 and b/美术与文本源文件/Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin_east.sai2 differ