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