/// <summary> /// Applied after Initialize runs. /// </summary> internal static void Postfix(EntityModifierSet __instance) { TraitReworkUtils.FixTraits(__instance); PUtil.LogDebug("Updated traits"); // Add "Disturbed" trait var disturbedEffect = new Effect(TraitTuning.DISTURBED_EFFECT, TraitStrings. DISTURBED_NAME, TraitStrings.DISTURBED_DESC, 200.0f, true, true, true); disturbedEffect.Add(new AttributeModifier("StressDelta", 0.033333333f, TraitStrings.DISTURBED_NAME)); __instance.effects.Add(disturbedEffect); }
/// <summary> /// Alters the specified traits. /// </summary> /// <param name="modifiers">The modifiers containing the source traits.</param> internal static void FixTraits(EntityModifierSet modifiers) { var source = modifiers.traits; var newTraits = TraitTuning.Instance.Traits; if (source != null) { var unusedTraits = HashSetPool <string, TraitTemplate> .Allocate(); // Track which traits did not get used foreach (var trait in newTraits) { unusedTraits.Add(trait.Key); } foreach (var trait in source.resources) { // Do we have a replacement? if (newTraits.TryGetValue(trait.Id, out TraitTemplate newTrait)) { PUtil.LogDebug("Patched trait: " + trait.Id); var disabled = newTrait.DisabledChores; trait.PositiveTrait = newTrait.IsPositive; if (disabled != null) { // Add disabled chores int n = disabled.Count; var groups = new ChoreGroup[n]; for (int i = 0; i < n; i++) { groups[i] = modifiers.ChoreGroups.Get(disabled[i]); } trait.disabledChoreGroups = groups; } else { // Remove all disabled chores trait.disabledChoreGroups = null; } trait.ValidStarterTrait = newTrait.ValidStartingTrait; // Leave OnAddTrait, replace the modifiers var mods = trait.SelfModifiers; mods.Clear(); mods.AddRange(newTrait.Modifiers); unusedTraits.Remove(newTrait.ID); // Replace ignored effects if present var effects = newTrait.IgnoredEffects; if (effects != null) { var arr = new string[effects.Count]; effects.CopyTo(arr, 0); trait.ignoredEffects = arr; } // Add extended trait tooltip var extendedFn = newTrait.ExtendedTooltip; if (extendedFn != null) { trait.ExtendedTooltip = (Func <string>)Delegate.Combine(trait. ExtendedTooltip, extendedFn); } } } unusedTraits.Recycle(); } }