public TaggedString FullDescriptionFor(Pawn p) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(baseDesc.Formatted(p.Named("PAWN")).AdjustedFor(p).Resolve()); stringBuilder.AppendLine(); stringBuilder.AppendLine(); List <SkillDef> allDefsListForReading = DefDatabase <SkillDef> .AllDefsListForReading; for (int i = 0; i < allDefsListForReading.Count; i++) { SkillDef skillDef = allDefsListForReading[i]; if (skillGainsResolved.ContainsKey(skillDef)) { stringBuilder.AppendLine(skillDef.skillLabel.CapitalizeFirst() + ": " + skillGainsResolved[skillDef].ToString("+##;-##")); } } if (DisabledWorkTypes.Any() || DisabledWorkGivers.Any()) { stringBuilder.AppendLine(); } foreach (WorkTypeDef disabledWorkType in DisabledWorkTypes) { stringBuilder.AppendLine(disabledWorkType.gerundLabel.CapitalizeFirst() + " " + "DisabledLower".Translate()); } foreach (WorkGiverDef disabledWorkGiver in DisabledWorkGivers) { stringBuilder.AppendLine(disabledWorkGiver.workType.gerundLabel.CapitalizeFirst() + ": " + disabledWorkGiver.LabelCap + " " + "DisabledLower".Translate()); } if (ModsConfig.RoyaltyActive) { unlockedMeditationTypesTemp.Clear(); foreach (MeditationFocusDef allDef in DefDatabase <MeditationFocusDef> .AllDefs) { for (int j = 0; j < allDef.requiredBackstoriesAny.Count; j++) { BackstoryCategoryAndSlot backstoryCategoryAndSlot = allDef.requiredBackstoriesAny[j]; if (spawnCategories.Contains(backstoryCategoryAndSlot.categoryName) && backstoryCategoryAndSlot.slot == slot) { unlockedMeditationTypesTemp.Add(allDef.LabelCap); break; } } } if (unlockedMeditationTypesTemp.Count > 0) { stringBuilder.AppendLine(); stringBuilder.AppendLine("MeditationFocusesUnlocked".Translate() + ": "); stringBuilder.AppendLine(unlockedMeditationTypesTemp.ToLineList(" - ")); } } string str = stringBuilder.ToString().TrimEndNewlines(); return(Find.ActiveLanguageWorker.PostProcessed(str)); }
public bool IsDisabledWork([NotNull] WorkTypeDef workType) { if (workType == null) { throw new ArgumentNullException(nameof(workType)); } if (DisabledWorkTypes.ContainsKey(workType)) { return(DisabledWorkTypes[workType]); } var value = Pawn.WorkTypeIsDisabled(workType); DisabledWorkTypes.Add(workType, value); return(value); }
public void Update(RimworldTime time) { var hoursPassed = (time.Year - _updateTime.Year) * 60 * 24 + (time.Day - _updateTime.Day) * 24 + time.Hour - _updateTime.Hour; _updateTime.Day = time.Day; _updateTime.Hour = time.Hour; if (Prefs.DevMode && Settings.VerboseLogging) { Log.Message( $"----- Work Manager: Updating cache for {Pawn.LabelShort} (hours passed = {hoursPassed})... -----"); } IsCapable = !Pawn.Dead && !Pawn.Downed && !Pawn.InMentalState; IsRecovering = IsCapable && Settings.RecoveringPawnsUnfitForWork && HealthAIUtility.ShouldSeekMedicalRest(Pawn); IsManaged = WorkManager.GetPawnEnabled(Pawn); WorkPriorities.Clear(); _managedWorkTypes.Clear(); var workTypes = DefDatabase <WorkTypeDef> .AllDefsListForReading.Where(w => w.visible); foreach (var workType in workTypes) { WorkPriorities.Add(workType, IsManagedWork(workType) ? 0 : Pawn.workSettings.GetPriority(workType)); } if (!IsCapable) { return; } if (hoursPassed >= 24) { DisabledWorkTypes.Clear(); BadWorkTypes.Clear(); } if (hoursPassed >= 6) { if (Settings.UsePawnLearningRateThresholds) { _skillLearningRates.Clear(); foreach (var skill in DefDatabase <SkillDef> .AllDefsListForReading) { _skillLearningRates.Add(skill, Pawn.skills.GetSkill(skill).LearnRateFactor()); } } _workSkillLearningRates.Clear(); _workSkillLevels.Clear(); } }
public bool WorkTypeIsDisabled(WorkTypeDef w) { return(DisabledWorkTypes.Contains(w)); }