Пример #1
0
        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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
 public bool WorkTypeIsDisabled(WorkTypeDef w)
 {
     return(DisabledWorkTypes.Contains(w));
 }