diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index 812ef2d4..5e988058 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/Effects/WulaFleckDefs.xml b/1.6/1.6/Defs/Effects/WulaFleckDefs.xml index e7152636..cc005a9d 100644 --- a/1.6/1.6/Defs/Effects/WulaFleckDefs.xml +++ b/1.6/1.6/Defs/Effects/WulaFleckDefs.xml @@ -3,15 +3,15 @@ WULA_GunTail_Plasma Projectile - 0.50 - 1 - 1.2 - 0.025 + 0.2 + 0.1 + 0.2 + 5 Wula/Mote/WULA_GunTail_Plasma MoteGlow - 4.25 - (179,127,67,155) + 2.5 + (109, 208, 117, 155) diff --git a/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml b/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml index 8fe1b576..ff0bd734 100644 --- a/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml +++ b/1.6/1.6/Defs/PawnKinds/PawnKinds_Wula.xml @@ -245,6 +245,43 @@
  • Wula_AI_Rocket_Panzer_Weapon
  • + + Wula_AI_Panzer_Destroyer + + Wula_AI_Panzer_Destroyer + 500 + false + PlayerColony + false + true + + Wula/Things/Wula_Mech_Mobile_Factory/Flying/Wula_Mech_Mobile_Factory_Flying_ + 1 + 1 + 2 + false + + +
  • + + Wula/Things/Wula_AI_Heavy_Panzer/Bodies/Naked_Thin + Wula/Things/WULA_Cat/AllegianceOverlays/None + CutoutWithOverlay + Graphic_Multi + 9 + + (1.4, 1.8, 1.4) + + +
  • +
    + 99999~99999 + + 0.7 + +
  • Wula_AI_Panzer_Destroyer_Weapon
  • +
    +
    Wula_Mech_Mobile_Shield 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_Misc/Weapons/WULA_FE_Machine_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Machine_Weapon.xml index 7843e7df..bf33c124 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 @@ -367,7 +367,7 @@ Wula_AI_Heavy_Panzer_Turret_Weapon - HAp-6"巨戟"的炮塔,两门可以洞穿护盾的晶化炮就是为打击护盾目标量身定做的。 + HAp-6"巨戟"的炮塔,两门高射速晶化炮可以在对抗强大装甲目标和大量软目标间取得平衡。 None true Ultra @@ -391,7 +391,7 @@ Bullet_Wula_AI_Heavy_Panzer_Turret_Weapon 0 5.9 - 60 + 52 1 2 4 @@ -649,6 +649,150 @@ + + Wula_AI_Panzer_Destroyer_Turret_Weapon + + HDp-1"冥波"的炮塔,其粒子炮可以洞穿那些最厚的护甲防御。 + None + true + Ultra + + Wula/Weapon/WULA_WM_Panzer_Turret + Graphic_Single + 3 + + 0.33 + + 150 + 1 + 2 + 2 + 2 + + +
  • + WulaFallenEmpire.Verb_TurretOffestShoot + true + Bullet_Wula_AI_Panzer_Destroyer_Turret_Weapon + 0 + 8.9 + 79 + 8 + 1 + 8 + true + WULA_MW_Mass_Drivers_Shootingsound + GunTail_Heavy + 18 + false +
  • +
    + +
  • + +
  • (0, -4.1)
  • + + +
    +
    + + Bullet_Wula_AI_Panzer_Destroyer_Turret_Weapon + + WulaFallenEmpire.Projectile_ExplosiveWithDirectHit + +
  • + Vaporize + 350 + 2 + Explosion_Vaporize +
  • +
  • + WULA_GunTail_Plasma + 3 +
  • +
    + Normal + True + + Wula/Projectile/WULA_Plasma_Proj + Graphic_Single + MoteGlow + (109, 208, 117, 255) + (2.5,3) + + + WULA_GiantBomb + 45 + 60 + 6 + 1.5 + true + Artillery_HitThickRoof + MortarBomb_Explode + MortarRound_PreImpact + MortarRound_Ambient + 10 + Filth_BlastMark + +
    + + Wula_AI_Panzer_Destroyer_Main_Weapon + + HDp-1"冥波"车体上的测距器,可以确保其炮塔在可以开火的最佳距离,被其瞄准的目标会成为炮塔的优先攻击目标。 + Normal + Spacer + None + true + Wula/Projectile/WULA_Shrapnel + + 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 + 8.9 + 79 + 0.2 + 1 + 0 + + + true + +
  • +
    + + 1 + + +
  • Wula_AI_Panzer_Destroyer_Weapon
  • +
    + + +
  • + +
  • Wula_AI_Panzer_Destroyer
  • + + +
    +
    Wula_Psi_Titan_Beam 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..6fb23b94 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 @@ -180,7 +180,7 @@ Wula/UI/Commands/WULA_ExitCrew --> -
  • +
  • true 1 @@ -302,7 +302,7 @@ 3 - 3 + 2 true @@ -356,11 +356,11 @@ 9999 0 - 1 - 1 + 1.25 + 1.25 2 - 3 + 4 300 @@ -448,7 +448,7 @@ Wula/UI/Commands/WULA_Enter_Mech Wula/UI/Commands/WULA_Exit_Mech
  • -
  • +
  • true 1 @@ -570,7 +570,7 @@ 3 - 3 + 2 true @@ -598,6 +598,280 @@ PawnFlyer PawnFlyerLand + + + true + 1 + 60 + Wula_TerrainBlocked + + + false + false + false +
  • + +
    + + Wula_AI_Panzer_Destroyer + + 乌拉帝国的中型战争机械,以悬浮的方式穿梭于战场之上,拥有一门射速缓慢但射程极远、威力强大的电浆炮,足以威胁那些最厚实的装甲单位。 + + 2 + 2 + 0 + + 9999 + 0 + + 1.25 + 1.25 + 2 + + 4 + + + 300 + 18 + 2 + + + 300 + 18 + 2 + + + WULA_AI_Heavy_Panzer_Body + 20 + Wula_Battle_Mech_With_1_Pilot + 10 + + 1 + + +
  • + + +
  • Blunt
  • + + 360 + 8 + Torso + true + +
    + +
  • + 0 + Wula_AI_Panzer_Destroyer_Turret_Weapon + 20 + 0 + 3 + true + 8.2 + + + +
  • + PawnRenderNode_TurretGun + PawnRenderNodeWorker_TurretGun + Body + (8, 8) + 20 + Any + + + -90 + + + -90 + + + -90 + + + 90 + + +
  • + + +
  • + + + DraftedAndMove + + + WULA_Hover_FlyNorth + WULA_Hover_FlyEast + WULA_Hover_FlySouth +
  • + +
  • + 1 + MechPilot + + 0.1 + + Wula/UI/Commands/WULA_Enter_Mech + Wula/UI/Commands/WULA_Exit_Mech +
  • + +
  • + true + 1 + + 10 + + + ConstructMetal +
  • +
  • + Wula_AI_Panzer_Destroyer_Main_Weapon +
  • +
  • + true + false + + 1.0 + true + false + 3 + + +
  • + Wula_PIA_Light_Unit + 1 + false +
  • + + +
  • + 0 + 1 +
  • + + + + + +
  • + 0.1 + 120~180 + true + + 11.5 + Flame + 5 + 2 + 0.25 + true + true + true + 1 + + Explosion_Bomb + + true + true + 0 +
  • + + + +
  • + + 1.0 + 2.0 + 15 + 3 + + + 2 + + + true + true + + + Blunt + 1 + 0.1 + + + MeleeHit_BladelinkZeusHammer + + + Blunt + 15 + 4 + true + + MeleeHit_BladelinkZeusHammer + + + PawnFlyer + + PawnFlyerLand + + + true + 1 + 60 + Wula_TerrainBlocked false @@ -616,6 +890,8 @@ 0.5 0.5 2 + + 5 300 @@ -649,7 +925,7 @@
  • - 15 + 25 300 2400 30 @@ -669,13 +945,13 @@ true - 0.85 + 0.95 30 0 Interceptor_BlockedProjectile
  • - 15 + 25 30 Flame 8 @@ -687,7 +963,7 @@ false false 热辐射 - MSm-8"放射盾"可以打开外壳,蒸发胆敢进入反射立场内的敌军——这同时会使得它伤害附近所有的散落物品。 + MSm-8"放射盾"可以打开外壳,蒸发胆敢进入反射立场内的敌军。 Wula/UI/Commands/Wula_Psi_Titan_AreaDamage
  • true 1 @@ -829,12 +1105,61 @@
  • --> + +
  • + + 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 +1170,8 @@ 1.75 1.75 2 + + 10 300 @@ -1138,7 +1465,7 @@ Wula/UI/Commands/WULA_Enter_Mech Wula/UI/Commands/WULA_Exit_Mech -
  • +
  • true 1 @@ -1287,6 +1614,12 @@ PawnFlyer PawnFlyerLand + + + true + 1 + 60 + Wula_TerrainBlocked false diff --git a/Content/Textures/Wula/Mote/WULA_GunTail_Plasma.png b/Content/Textures/Wula/Mote/WULA_GunTail_Plasma.png index 15b909be..31767872 100644 Binary files a/Content/Textures/Wula/Mote/WULA_GunTail_Plasma.png and b/Content/Textures/Wula/Mote/WULA_GunTail_Plasma.png differ diff --git a/Content/Textures/Wula/Mote/WULA_Plasma_Proj.png b/Content/Textures/Wula/Mote/WULA_Plasma_Proj.png new file mode 100644 index 00000000..683c980b Binary files /dev/null and b/Content/Textures/Wula/Mote/WULA_Plasma_Proj.png differ diff --git a/Content/Textures/Wula/Projectile/WULA_Plasma_Proj.png b/Content/Textures/Wula/Projectile/WULA_Plasma_Proj.png new file mode 100644 index 00000000..683c980b Binary files /dev/null and b/Content/Textures/Wula/Projectile/WULA_Plasma_Proj.png differ 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..8333cbdf --- /dev/null +++ b/Source/WulaFallenEmpire/Projectiles/Projectile_ExplosiveWithDirectHit.cs @@ -0,0 +1,339 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using UnityEngine; +using Verse; +using Verse.Sound; + +namespace WulaFallenEmpire +{ + /// + /// 支持直击伤害的爆炸弹丸 + /// + public class Projectile_ExplosiveWithDirectHit : Projectile_Explosive + { + // 缓存ModExtension + private ProjectileExtension_DirectHit directHitExtension = null; + private TrackingBulletDef trackingDefInt; + private int Fleck_MakeFleckTick; + private Vector3 lastTickPosition; + + public TrackingBulletDef TrackingDef + { + get + { + if (trackingDefInt == null) + { + trackingDefInt = def.GetModExtension(); + if (trackingDefInt == null) + { + Log.ErrorOnce($"TrackingBulletDef for {this.def.defName} is null. Creating a default instance.", this.thingIDNumber ^ 0x12345678); + this.trackingDefInt = new TrackingBulletDef(); + } + } + return trackingDefInt; + } + } + public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null) + { + base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef); + lastTickPosition = origin; + } + + protected override void Tick() + { + base.Tick(); + + // 处理拖尾特效 + if (TrackingDef != null && TrackingDef.tailFleckDef != null) + { + Fleck_MakeFleckTick++; + if (Fleck_MakeFleckTick >= TrackingDef.fleckDelayTicks) + { + if (Fleck_MakeFleckTick >= (TrackingDef.fleckDelayTicks + TrackingDef.fleckMakeFleckTickMax)) + { + Fleck_MakeFleckTick = TrackingDef.fleckDelayTicks; + } + + Map map = base.Map; + int randomInRange = TrackingDef.fleckMakeFleckNum.RandomInRange; + Vector3 currentPosition = base.ExactPosition; + Vector3 previousPosition = lastTickPosition; + + for (int i = 0; i < randomInRange; i++) + { + float num = (currentPosition - previousPosition).AngleFlat(); + float velocityAngle = TrackingDef.fleckAngle.RandomInRange + num; + float randomInRange2 = TrackingDef.fleckScale.RandomInRange; + float randomInRange3 = TrackingDef.fleckSpeed.RandomInRange; + + FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, TrackingDef.tailFleckDef, randomInRange2); + dataStatic.rotation = (currentPosition - previousPosition).AngleFlat(); + dataStatic.rotationRate = TrackingDef.fleckRotation.RandomInRange; + dataStatic.velocityAngle = velocityAngle; + dataStatic.velocitySpeed = randomInRange3; + map.flecks.CreateFleck(dataStatic); + } + } + } + lastTickPosition = base.ExactPosition; + } + + + // 标记是否已经应用了直击伤害 + private bool directDamageApplied = false; + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref directDamageApplied, "directDamageApplied", false); + Scribe_Values.Look(ref Fleck_MakeFleckTick, "Fleck_MakeFleckTick", 0); + Scribe_Values.Look(ref lastTickPosition, "lastTickPosition", Vector3.zero); + if (Scribe.mode == LoadSaveMode.PostLoadInit) + { + if (this.trackingDefInt == null) + { + this.trackingDefInt = this.def.GetModExtension(); + if (this.trackingDefInt == null) + { + Log.ErrorOnce($"TrackingBulletDef is null for projectile {this.def.defName} after PostLoadInit. Creating a default instance.", this.thingIDNumber ^ 0x12345678); + this.trackingDefInt = new TrackingBulletDef(); + } + } + } + } + + 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/木精灵.ini b/木精灵.ini new file mode 100644 index 00000000..6c199c7c --- /dev/null +++ b/木精灵.ini @@ -0,0 +1,9 @@ +木精灵 + +居住在边缘世界的尖耳朵白皮精灵,种族擅长射击、种植、驯兽,不擅长挖矿。 +崇尚自然的力量。整个社会停留在中世纪时期,树木会为精灵带来好心情。 +厌恶破坏自然(砍树和挖矿),不会去做这些工作。 +开局会携带精灵母树种子,这种母树是精灵的核心生产工具,可以升级解锁科技,可以产出多种种子,种下后可以获得持续的矿物、木材产出,获得树人侍从和防御塔等 +本家矿物产量很低,但是科技不需要金属 +擅长弓箭、标枪和长枪,装备围绕木制装备设计 +树人是精灵的伙伴,拥有强大的承伤能力,可以作为前排,但是没什么输出能力,高级树人可以通过镇压大范围敌人来减速拉住敌人。平常不吃东西,受伤会吞噬树木恢复血量 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