public override void PostAdd(DamageInfo?dinfo) { if (base.Part == null) { Log.Error("Part is null. It should be set before PostAdd for " + this.def + ".", false); return; } this.pawn.health.RestorePart(base.Part, this, false); for (int i = 0; i < base.Part.parts.Count; i++) { if (base.Part.Index == 1) { Hediff_MissingPart hediff_MissingPart = (Hediff_MissingPart)HediffMaker.MakeHediff(HediffDefOf.MissingBodyPart, this.pawn, null); hediff_MissingPart.IsFresh = true; hediff_MissingPart.lastInjury = HediffDefOf.SurgicalCut; hediff_MissingPart.Part = base.Part.parts[i]; this.pawn.health.hediffSet.AddDirect(hediff_MissingPart, null, null); } else { Hediff_BodyPartModule hediff_BodyPartModule = (Hediff_BodyPartModule)HediffMaker.MakeHediff(MSE_HediffDefOf.MSE_BodyPartModule, this.pawn, null); hediff_BodyPartModule.Part = base.Part.parts[i]; this.pawn.health.hediffSet.AddDirect(hediff_BodyPartModule, null, null); } } }
public override void PostAdd(DamageInfo?dinfo) { if (base.Part == null) { Log.Error("Part module is null. It should be set before PostAdd for " + this.def + ".", false); return; } this.pawn.health.RestorePart(base.Part, this, false); for (int i = 0; i < base.Part.parts.Count; i++) { Hediff_BodyPartModule hediff_BodyPartModule = (Hediff_BodyPartModule)HediffMaker.MakeHediff(MSE_HediffDefOf.MSE_BodyPartModule, this.pawn, null); hediff_BodyPartModule.Part = base.Part.parts[i]; this.pawn.health.hediffSet.AddDirect(hediff_BodyPartModule, null, null); } }
public override void ApplyOnPawn(Pawn pawn, BodyPartRecord part, Pawn billDoer, List <Thing> ingredients, Bill bill) { bool flag1 = pawn.health.hediffSet.hediffs.Any((Hediff d) => (d is Hediff_AddedPartModule) && d.Part == part); bool flag2 = this.IsViolationOnPawn(pawn, part, Faction.OfPlayer); if (billDoer != null) { if (base.CheckSurgeryFail(billDoer, pawn, ingredients, part, bill)) { return; } TaleRecorder.RecordTale(TaleDefOf.DidSurgery, new object[] { billDoer, pawn }); MedicalRecipesUtility.SpawnNaturalPartIfClean(pawn, part, billDoer.Position, billDoer.Map); MedicalRecipesUtility.SpawnThingsFromHediffs(pawn, part, billDoer.Position, billDoer.Map); } if (flag1) { pawn.health.RestorePart(part, null, true); Hediff_BodyPartModule hediff_BodyPartModule = (Hediff_BodyPartModule)HediffMaker.MakeHediff(MSE_HediffDefOf.MSE_BodyPartModule, pawn, null); hediff_BodyPartModule.Part = part; pawn.health.hediffSet.AddDirect(hediff_BodyPartModule, null, null); } else { DamageDef surgicalCut = DamageDefOf.SurgicalCut; float amount = 99999f; float armorPenetration = 999f; pawn.TakeDamage(new DamageInfo(surgicalCut, amount, armorPenetration, -1f, null, part, null, DamageInfo.SourceCategory.ThingOrUnknown, null)); } if (flag2 && pawn.Faction != null && billDoer != null && billDoer.Faction != null) { Faction faction1 = pawn.Faction; Faction faction2 = billDoer.Faction; int goodwillChange = -20; string reason = "GoodwillChangedReason_RemovedBodyPart".Translate(part.LabelShort); GlobalTargetInfo?lookTarget = new GlobalTargetInfo?(pawn); faction1.TryAffectGoodwillWith(faction2, goodwillChange, true, true, reason, lookTarget); } }