public void TrainingTrackerTickRare() { if (this.pawn.Suspended) { this.countDecayFrom += 250; } else if (!this.pawn.Spawned) { this.countDecayFrom += 250; } else if (this.steps[TrainableDefOf.Tameness] == 0) { this.countDecayFrom = Find.TickManager.TicksGame; } else if (Find.TickManager.TicksGame >= this.countDecayFrom + TrainableUtility.DegradationPeriodTicks(this.pawn.def)) { TrainableDef trainableDef = (from kvp in this.steps where kvp.Value > 0 select kvp.Key).Except((from kvp in this.steps where kvp.Value > 0 && kvp.Key.prerequisites != null select kvp).SelectMany((KeyValuePair <TrainableDef, int> kvp) => kvp.Key.prerequisites)).RandomElement <TrainableDef>(); if (trainableDef == TrainableDefOf.Tameness && !TrainableUtility.TamenessCanDecay(this.pawn.def)) { this.countDecayFrom = Find.TickManager.TicksGame; } else { this.countDecayFrom = Find.TickManager.TicksGame; DefMap <TrainableDef, int> defMap; TrainableDef def; (defMap = this.steps)[def = trainableDef] = defMap[def] - 1; if (this.steps[trainableDef] <= 0 && this.learned[trainableDef]) { this.learned[trainableDef] = false; if (this.pawn.Faction == Faction.OfPlayer) { if (trainableDef == TrainableDefOf.Tameness) { this.pawn.SetFaction(null, null); Messages.Message("MessageAnimalReturnedWild".Translate(new object[] { this.pawn.LabelShort }), this.pawn, MessageTypeDefOf.NegativeEvent, true); } else { Messages.Message("MessageAnimalLostSkill".Translate(new object[] { this.pawn.LabelShort, trainableDef.LabelCap }), this.pawn, MessageTypeDefOf.NegativeEvent, true); } } } } } }
public void TrainingTrackerTickRare() { if (pawn.Suspended) { countDecayFrom += 250; } else if (!pawn.Spawned) { countDecayFrom += 250; } else if (steps[TrainableDefOf.Tameness] == 0) { countDecayFrom = Find.TickManager.TicksGame; } else { if (Find.TickManager.TicksGame < countDecayFrom + TrainableUtility.DegradationPeriodTicks(pawn.def)) { return; } TrainableDef trainableDef = (from kvp in steps where kvp.Value > 0 select kvp.Key).Except(steps.Where((KeyValuePair <TrainableDef, int> kvp) => kvp.Value > 0 && kvp.Key.prerequisites != null).SelectMany((KeyValuePair <TrainableDef, int> kvp) => kvp.Key.prerequisites)).RandomElement(); if (trainableDef == TrainableDefOf.Tameness && !TrainableUtility.TamenessCanDecay(pawn.def)) { countDecayFrom = Find.TickManager.TicksGame; return; } countDecayFrom = Find.TickManager.TicksGame; steps[trainableDef]--; if (steps[trainableDef] > 0 || !learned[trainableDef]) { return; } learned[trainableDef] = false; if (pawn.Faction == Faction.OfPlayer) { if (trainableDef == TrainableDefOf.Tameness) { pawn.SetFaction(null); Messages.Message("MessageAnimalReturnedWild".Translate(pawn.LabelShort, pawn), pawn, MessageTypeDefOf.NegativeEvent); } else { Messages.Message("MessageAnimalLostSkill".Translate(pawn.LabelShort, trainableDef.LabelCap, pawn.Named("ANIMAL")), pawn, MessageTypeDefOf.NegativeEvent); } } } }
public static string GetWildnessExplanation(ThingDef def) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("WildnessExplanation".Translate()); stringBuilder.AppendLine(); stringBuilder.AppendLine(string.Format("{0}: {1}", "TrainingDecayInterval".Translate(), TrainableUtility.DegradationPeriodTicks(def).ToStringTicksToDays("F1"))); if (!TrainableUtility.TamenessCanDecay(def)) { stringBuilder.AppendLine("TamenessWillNotDecay".Translate()); } return(stringBuilder.ToString()); }
public void Debug_MakeDegradeHappenSoon() { this.countDecayFrom = Find.TickManager.TicksGame - TrainableUtility.DegradationPeriodTicks(this.pawn.def) - 500; }