public void DestroyEquipment(ThingWithComps eq) { if (!this.equipment.Contains(eq)) { Log.Warning("Tried to destroy equipment " + eq + " but it's not here."); return; } this.Remove(eq); eq.Destroy(DestroyMode.Vanish); }
public void CheckForStateChange(DamageInfo?dinfo, Hediff hediff) { if (Dead) { return; } if (ShouldBeDead()) { if (!pawn.Destroyed) { pawn.Kill(dinfo, hediff); } } else if (!Downed) { if (ShouldBeDowned()) { if (!forceIncap && dinfo.HasValue && dinfo.Value.Def.ExternalViolenceFor(pawn) && !pawn.IsWildMan() && (pawn.Faction == null || !pawn.Faction.IsPlayer) && (pawn.HostFaction == null || !pawn.HostFaction.IsPlayer)) { float num = (pawn.RaceProps.Animal ? 0.5f : ((!pawn.RaceProps.IsMechanoid) ? (HealthTuning.DeathOnDownedChance_NonColonyHumanlikeFromPopulationIntentCurve.Evaluate(StorytellerUtilityPopulation.PopulationIntent) * Find.Storyteller.difficultyValues.enemyDeathOnDownedChanceFactor) : 1f)); if (Rand.Chance(num)) { if (DebugViewSettings.logCauseOfDeath) { Log.Message("CauseOfDeath: chance on downed " + num.ToStringPercent()); } pawn.Kill(dinfo); return; } } forceIncap = false; MakeDowned(dinfo, hediff); } else { if (capacities.CapableOf(PawnCapacityDefOf.Manipulation)) { return; } if (pawn.carryTracker != null && pawn.carryTracker.CarriedThing != null && pawn.jobs != null && pawn.CurJob != null) { pawn.jobs.EndCurrentJob(JobCondition.InterruptForced); } if (pawn.equipment == null || pawn.equipment.Primary == null) { return; } if (pawn.kindDef.destroyGearOnDrop) { pawn.equipment.DestroyEquipment(pawn.equipment.Primary); } else if (pawn.InContainerEnclosed) { pawn.equipment.TryTransferEquipmentToContainer(pawn.equipment.Primary, pawn.holdingOwner); } else if (pawn.SpawnedOrAnyParentSpawned) { pawn.equipment.TryDropEquipment(pawn.equipment.Primary, out var _, pawn.PositionHeld); } else if (pawn.IsCaravanMember()) { ThingWithComps primary = pawn.equipment.Primary; pawn.equipment.Remove(primary); if (!pawn.inventory.innerContainer.TryAdd(primary)) { primary.Destroy(); } } else { pawn.equipment.DestroyEquipment(pawn.equipment.Primary); } } } else if (!ShouldBeDowned()) { MakeUndowned(); } }