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);
                     }
                 }
             }
         }
     }
 }
Esempio n. 2
0
 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;
 }