Files
WulaFallenEmpireRW/Source/WulaFallenEmpire/Verb/Verb_MeleeAttack_MultiStrike.cs
2025-08-18 17:26:59 +08:00

53 lines
2.4 KiB
C#

using RimWorld;
using Verse;
namespace WulaFallenEmpire
{
public class Verb_MeleeAttack_MultiStrike : Verb_MeleeAttack
{
private CompMultiStrike Comp
{
get
{
return this.EquipmentSource?.GetComp<CompMultiStrike>();
}
}
protected override DamageWorker.DamageResult ApplyMeleeDamageToTarget(LocalTargetInfo target)
{
DamageWorker.DamageResult result = new DamageWorker.DamageResult();
if (this.Comp != null && target.HasThing)
{
int strikes = this.Comp.Props.strikeCount.RandomInRange;
for (int i = 0; i < strikes; i++)
{
if (target.ThingDestroyed)
{
break;
}
DamageInfo dinfo = new DamageInfo(this.verbProps.meleeDamageDef, this.verbProps.AdjustedMeleeDamageAmount(this, this.CasterPawn) * this.Comp.Props.damageMultiplierPerStrike, this.verbProps.AdjustedArmorPenetration(this, this.CasterPawn) * this.Comp.Props.damageMultiplierPerStrike, -1f, this.CasterPawn, null, this.EquipmentSource?.def);
dinfo.SetTool(this.tool);
DamageWorker.DamageResult damageResult = target.Thing.TakeDamage(dinfo);
result.totalDamageDealt += damageResult.totalDamageDealt;
result.wounded = (result.wounded || damageResult.wounded);
result.stunned = (result.stunned || damageResult.stunned);
if (damageResult.parts != null)
{
if (result.parts == null)
{
result.parts = new System.Collections.Generic.List<BodyPartRecord>();
}
result.parts.AddRange(damageResult.parts);
}
}
}
else
{
DamageInfo dinfo2 = new DamageInfo(this.verbProps.meleeDamageDef, this.verbProps.AdjustedMeleeDamageAmount(this, this.CasterPawn), this.verbProps.AdjustedArmorPenetration(this, this.CasterPawn), -1f, this.CasterPawn, null, this.EquipmentSource?.def);
dinfo2.SetTool(this.tool);
result = target.Thing.TakeDamage(dinfo2);
}
return result;
}
}
}