using RimWorld; using Verse; using Verse.Sound; using System.Collections.Generic; using System.Linq; namespace ArachnaeSwarm { public class CompAbilityEffect_DRM_Deaddustpop : CompAbilityEffect { public new CompProperties_AbilityDRM_Deaddustpop Props { get { return (CompProperties_AbilityDRM_Deaddustpop)this.props; } } private Pawn Pawn { get { return this.parent.pawn; } } private List AffectedCells(LocalTargetInfo target) { return GenRadial.RadialCellsAround(target.Cell, Props.smokeRadius, true).ToList(); } public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) { base.Apply(target, dest); GenExplosion.DoExplosion( center: target.Cell, map: this.parent.pawn.MapHeld, radius: this.Props.smokeRadius, damType: this.Props.damageDef, instigator: null, damAmount: this.Props.damageAmount, armorPenetration: this.Props.armorPenetration, // 明确命名关键参数,避免顺序错误 postExplosionSpawnThingDef: this.Props.postExplosionSpawnThingDef, postExplosionSpawnChance: this.Props.postExplosionSpawnChance, postExplosionSpawnThingCount: this.Props.postExplosionSpawnThingCount, postExplosionGasType: this.Props.gasType, // 需要补充的参数(根据实际需求填写) flammabilityChanceCurve: null, overrideCells: this.AffectedCells(target), // 明确传递实际需要的值 postExplosionSpawnSingleThingDef: null, preExplosionSpawnSingleThingDef: null ); } public override void DrawEffectPreview(LocalTargetInfo target) { GenDraw.DrawRadiusRing(target.Cell, this.Props.smokeRadius); } } public class CompProperties_AbilityDRM_Deaddustpop : CompProperties_AbilityEffect { public CompProperties_AbilityDRM_Deaddustpop() { this.compClass = typeof(CompAbilityEffect_DRM_Deaddustpop); } public float smokeRadius; public SoundDef explosionSound; public GasType gasType; public DamageDef damageDef; public float postExplosionSpawnChance = 0f; public int postExplosionSpawnThingCount = 1; public ThingDef postExplosionSpawnThingDef = null; public int damageAmount = -1; public float armorPenetration = -1f; } }