public void CompleteConstruction(Pawn worker) { resourceContainer.ClearAndDestroyContents(); Map map = base.Map; Destroy(); if (this.GetStatValue(StatDefOf.WorkToBuild) > 150f && def.entityDefToBuild is ThingDef && ((ThingDef)def.entityDefToBuild).category == ThingCategory.Building) { SoundDefOf.Building_Complete.PlayOneShot(new TargetInfo(base.Position, map)); } ThingDef thingDef = def.entityDefToBuild as ThingDef; Thing thing = null; if (thingDef != null) { thing = ThingMaker.MakeThing(thingDef, base.Stuff); thing.SetFactionDirect(base.Faction); CompQuality compQuality = thing.TryGetComp <CompQuality>(); if (compQuality != null) { QualityCategory q = QualityUtility.GenerateQualityCreatedByPawn(worker, SkillDefOf.Construction); compQuality.SetQuality(q, ArtGenerationContext.Colony); QualityUtility.SendCraftNotification(thing, worker); } CompArt compArt = thing.TryGetComp <CompArt>(); if (compArt != null) { if (compQuality == null) { compArt.InitializeArt(ArtGenerationContext.Colony); } compArt.JustCreatedBy(worker); } thing.HitPoints = Mathf.CeilToInt((float)HitPoints / (float)base.MaxHitPoints * (float)thing.MaxHitPoints); GenSpawn.Spawn(thing, base.Position, map, base.Rotation, WipeMode.FullRefund); Building b; if ((b = thing as Building) != null) { worker.GetLord()?.AddBuilding(b); } } else { map.terrainGrid.SetTerrain(base.Position, (TerrainDef)def.entityDefToBuild); FilthMaker.RemoveAllFilth(base.Position, map); } worker.records.Increment(RecordDefOf.ThingsConstructed); if (thing != null && thing.GetStatValue(StatDefOf.WorkToBuild) >= 9500f) { TaleRecorder.RecordTale(TaleDefOf.CompletedLongConstructionProject, worker, thing.def); } }