0.27.2
Fairly backwards incompatible release
FormLink Revamp:
- IFormLinkGetter interface added, with IFormLink now representing the settable version
IFormLink.SetTo(...)
exposedIFormLink.SetToNull()
exposed- FormLinks swapped to mutable classes to be mutated, rather than replaced during typical usage.
- Lots of convenience functions: AsLink, AsNullableLink, Cast, etc.
- AsLink() extension method for Major Record getters
- FormLink.TypelessComparer static instance
- MajorRecord <-> FormLink equality implemented.
npcRecord.Equals(npcFormLink); // Could be true
- FormLink.Null convenience static constant
- == operators removed.
formKey.Equals(otherFormKey)
should be used, as it is a mutable class now. - FormLink.Resolve now will throw if not found. TryResolve /w a nullable return value and no out parameter exists instead, now.
Skyrim Conditions:
- Data exposed on Skyrim.ICondition
- FunctionConditionData now exposes RunOnType and Reference
- FunctionConditionData.Function now exposed as enum (was previously just ushort)
FormKey Mapping Libraries:
- Exposes FormLinks instead of FormKeys now
- ModKey for the mods easily accessible, as well
Skyrim.ModKey
Duplication:
- Bugfix for Duplicate throwing internally, in some circumstances
- Bugfix for Group.DuplicateInAsNewRecord throwing for abstract classes like Global
Implicits:
ImplicitRecords
removed.
A new housing area for all the records and data implicit to a game:
- BaseMods
- Listings (what listing will be implicitly included in the load order)
- RecordFormKeys (set of all the records embedded in the game, such as Player)
API now looks like Implicits.Get(GameRelease.SkyrimSE).BaseMasters
or similar
Fixes:
- SoundCategory.Parent's type was wrong
- Bugfix for MagicEffect FormKey not being hooked into common systems, so not being handled properly
- Fix for Skyrim.Statics not passing through their DATA records in certain circumstances
- Some deep record enumerations were returning improper records (cells were being returned when querying for Landscapes, etc)
Other:
- Net5 only
- LoadOrder filtering convenience. TryGetIfEnabledAndExists. Resolve (converts LoadOrderListings, to TMod, and throws if a mod doesn't exist)
- Abstract base classes like ASpell removed, in favor of Link Interface concepts
- Writing mods now "cleans" null FormKeys, stripping thier ModKeys. (Can be turned off in writing options)
- IConstructible implements IItem
Group.GetOrAddAsOverride(FormLink, LinkCache)
, which does the resolution internally- AlchemicalApparatus.Quality migrated to common enum
- Globals/GameSettings have dedicated
globalGroup.AddNewFloat()
calls - NamedFieldsContain convenience method, which checks whether Name or EditorID contains a string
- IKeyworded.HasKeyword that takes FormLink as parameter to check for
- MissingRecordException added for failed lookups and such
- Improved
LoadOrder.PriorityOrder.Armor().WinningContextOverrides()
to not need LinkCache as input for top level groups