public static void RemoveTraitFromPawn([NotNull] Pawn pawn, [NotNull] Trait trait) { pawn.story.traits.allTraits.Remove(trait); TraitDegreeData val = trait.CurrentData; if (val?.skillGains == null) { return; } foreach (KeyValuePair <SkillDef, int> pair in val.skillGains) { SkillDef skillDef = pair.Key; int value = pair.Value; SkillRecord skill = pawn.skills.GetSkill(skillDef); if (skill.TotallyDisabled) { continue; } skill.Level -= value; } List <WorkTypeDef> disabledWorkTypes = trait.GetDisabledWorkTypes().ToList(); if (disabledWorkTypes.Count <= 0) { return; } pawn.Notify_DisabledWorkTypesChanged(); foreach (WorkTypeDef workType in disabledWorkTypes) { pawn.workSettings.SetPriority(workType, 3); } }
public static void GivePawnTrait([NotNull] Pawn pawn, [NotNull] Trait trait) { ForciblyGivePawnTrait(pawn, trait); TraitDegreeData val = trait.CurrentData; if (val?.skillGains == null) { return; } foreach (KeyValuePair <SkillDef, int> skillGain in val.skillGains) { SkillRecord skill = pawn.skills.GetSkill(skillGain.Key); if (skill.TotallyDisabled) { continue; } skill.Level += skillGain.Value; } List <WorkTypeDef> disabledWorkTypes = trait.GetDisabledWorkTypes().ToList(); if (disabledWorkTypes.Count <= 0) { return; } pawn.Notify_DisabledWorkTypesChanged(); foreach (WorkTypeDef workType in disabledWorkTypes.Where(workType => !pawn.WorkTypeIsDisabled(workType))) { pawn.workSettings.Disable(workType); } }