public override void PawnDied(Corpse corpse) { if (!AndroidsModSettings.Instance.androidExplodesOnDeath) { return; } //Pawn Pawn pawn = corpse.InnerPawn; //Try get energy tracker. EnergyTrackerComp energy = pawn.TryGetComp <EnergyTrackerComp>(); bool shouldBeDeadByNaturalCauses = pawn.health.hediffSet.hediffs.Any(hediff => hediff.CauseDeathNow()); Hediff overheatingHediff = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.ChjOverheating); bool deadFromOverheating = overheatingHediff != null ? overheatingHediff.Severity >= 1f : false; if (overheatingHediff != null || !shouldBeDeadByNaturalCauses) { float explosionRadius = AndroidsModSettings.Instance.androidExplosionRadius * energy.energy; if (deadFromOverheating) { explosionRadius *= 2; } //Scale explosion strength from how much remaining energy we got. if (explosionRadius >= 1f) { GenExplosion.DoExplosion(corpse.Position, corpse.Map, explosionRadius, RimWorld.DamageDefOf.Bomb, corpse.InnerPawn); } } //Remove corpse. if (!corpse.Destroyed) { ButcherUtility.SpawnDrops(corpse.InnerPawn, corpse.Position, corpse.Map); //Dump inventory. if (corpse.InnerPawn.apparel != null) { corpse.InnerPawn.apparel.DropAll(corpse.PositionHeld); } corpse.Destroy(DestroyMode.Vanish); } }
// Token: 0x060000ED RID: 237 RVA: 0x000097F0 File Offset: 0x000079F0 public override void PawnDied(Corpse corpse) { base.PawnDied(corpse); bool flag = !corpse.Destroyed; if (flag) { ButcherUtility.SpawnDrops(corpse.InnerPawn, corpse.Position, corpse.Map); bool flag2 = corpse.InnerPawn.apparel != null; if (flag2) { corpse.InnerPawn.apparel.DropAll(corpse.PositionHeld, true); } corpse.Destroy(DestroyMode.Vanish); } }
// Token: 0x060000F0 RID: 240 RVA: 0x00009888 File Offset: 0x00007A88 public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List <Thing> ingredients, Bill bill) { Need_Energy need_Energy = pawn.needs.TryGetNeed <Need_Energy>(); EnergyTrackerComp energyTrackerComp = pawn.TryGetComp <EnergyTrackerComp>(); bool flag = need_Energy != null; if (flag) { need_Energy.CurLevelPercentage = 0f; } bool flag2 = energyTrackerComp != null; if (flag2) { energyTrackerComp.energy = 0f; } ButcherUtility.SpawnDrops(pawn, pawn.Position, pawn.Map); pawn.Kill(null, null); }
public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List <Thing> ingredients, Bill bill) { //Set the power Need and EnergyTrackerComp to 0. Need_Energy needEnergy = pawn.needs.TryGetNeed <Need_Energy>(); EnergyTrackerComp energyTrackerComp = pawn.TryGetComp <EnergyTrackerComp>(); if (needEnergy != null) { needEnergy.CurLevelPercentage = 0f; } if (energyTrackerComp != null) { energyTrackerComp.energy = 0f; } //Spawn extra butcher products. ButcherUtility.SpawnDrops(pawn, pawn.Position, pawn.Map); pawn.Kill(null); }