public void DoSparks(Thing WideBoy) { if (Find.TickManager.TicksGame <= lastSparkTick + ProspectingUtility.RndBits(95, 165)) { return; } lastSparkTick = Find.TickManager.TicksGame; var NumSparks = ProspectingUtility.RndBits(1, 3); for (var i = 0; i < NumSparks; i++) { FleckMaker.ThrowMicroSparks(WideBoy.Position.ToVector3(), WideBoy.Map); } }
public void CheckBreakdown(Thing WideBoy) { if (Find.TickManager.TicksGame <= lastBreakCheck) { return; } lastBreakCheck = Find.TickManager.TicksGame + ProspectingUtility.RndBits(7500, 90000); var miningSkill = 0; if (lastDriller > 0) { var interactCell = WideBoy.InteractionCell; if (WideBoy.Map != null) { var list = interactCell.GetThingList(WideBoy.Map); if (list.Count > 0) { foreach (var thing in list) { if (thing is not Pawn pawn || pawn.thingIDNumber != lastDriller) { continue; } miningSkill = Math.Max(0, Math.Min(20, pawn.skills.GetSkill(SkillDefOf.Mining).Level)); break; } } } } var breakChance = 20 - (int)(miningSkill / 2f); if (ProspectingUtility.Rnd100() >= breakChance || WideBoy.IsBrokenDown()) { return; } var compBreak = WideBoy.TryGetComp <CompBreakdownable>(); compBreak?.DoBreakdown(); }