Exemplo n.º 1
0
        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);
        }
Exemplo n.º 4
0
        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);
        }