Releases: matortheeternal/xedit-lib
Hotfix release v0.2.1
Hotfix release for v0.2, resolves issues with system locale settings causing floats to parse incorrectly (decimal separator issues), and the SSE/FO4 load order issue (load order being sorted by date incorrectly).
Beta Release v0.3
v0.2 never got a proper release here on GitHub, so this changelog will list all changes going back to v0.1.
Changes
- Refactored hardcoded dat files to use a shorter filename (gameName.Hardcoded.dat)
- Added a bunch of tests
- Added element sorting for
GetElements
- Introduced an option to hide child groups when using
GetElements
. - Refactored
- OverrideRecordCount to GetOverrideRecordCount
- Removed functions:
- ConflictThis
- ConflictAll
- GetLoaderDone
- Added functions:
- GetDuplicateHandles
- FindNextRecord
- FindPreviousRecord
- SetSortMode
- GetMasterRecord
- GetDefNames
- GetNodes
- ReleaseNodes
- GetConflictData
- GetNodeElements
- ValueType
- GetEnumOptions
- GetIsModified
- GetIsEditable
- GetIsRemoveable
- GetAddList
- GetCanAdd
- RenameFile
- IsSorted
- SetElement
- FindValidReferences
- GetIsEditable
- GetMasterFileNames
- GetLoaderState
- NukeFile
- RemoveIdenticalRecords
- GetRecord
- GetPreviousOverride
- SetLinksTo
- GetFileLoadOrder
- AddElementValue
- GetRecordCount
- GetWinningOverride
- GetAllowedSignatures
- FindNextElement
- FindPreviousElement
- SetIsEditable
- Path now supports two boolean arguments - short and local
- Fixed some issues with looking up records by EditorID/Name
- Fixed bug with resolving
File Header
paths and child elements - Now preserving log properly
- Added custom file path support to SaveFile
- Fixed GetExceptionMessage not returning true
- Added custom BackupPath support, now saving backups in zEdit Backups folder
- Optimized functions to use
const
with ref counted function parameters - Fixed some load order issues with SSE/FO4
- Added support for "smart" plugin loading (automatic loading of masters)
- Removed mte library units - they were unnecessary bloat
- Fixed bugs with element resolution by FormID
- Fixed issue with struct defs being out of order in certain circumstances
- Fixed serious issue with releasing null ids causing duplicate allocation
- Fixed bug with GetDefNames not include additional element names
- Fixed GetResultString access violations
- Fixed issues with detecting ITPOs
- Records with child records are now excluded from ITM/ITPO error results
- Updated xEdit code to allow removing the last element in an array
- Now also using placement name when sorting records by name data
- Fixed BuildReferences breaking things
Beta Release v0.1.0
Changes
- Added missing export for GetElementRecord
- Added tests for CloseXEdit and extended SaveFile tests.
- Fixed bugs with renaming saved files.
- Added MD5Hash and CRCHash functions to xeFiles.
- Removed TSettings in favor of two functions to set game path and language before setting game mode (SetGamePath and SetLanguage, respectively).
- Fixed the incomplete GetOverrides function.
- Fixed some issues with error checking - now properly detecting UDRs and deleted navmeshes, logging error checking properly, and parsing error data correctly.
- Name will now return the FormID of a record if no other name information is found.
Alpha Release v0.0.1
Changes
- Added a number of functions:
- Meta
Switch
- Setup
GetActivePlugins
,LoadPlugin
,UnloadPlugin
- File Handling
SortNames
,SortEditorIDs
- Master Handling
GetMissingMasters
- Element Handling
MoveArrayItem
,SmashType
,ConflictThis
,ConflictAll
,ElementMatches
,HasArrayElement
,GetArrayElement
,AddArrayElement
,RemoveArrayElement
,GetElementIndex
,GetElementRecord
- Element Values
GetAllFlags
,SetEnabledFlags
- Meta
- Changed or extended a number of functions:
Path
can now give a full or "local" path.- Extended signature name map functions to work with all record definitions, not just top level groups.
- Added support for resolving records by EditorID or FULL name with
GetElement
. AddElement
now traverses paths and adds missing elements during its traversal.AddElement
now appends a new element to a container if the key is.
.GetElements
now allows for an optional path argument.- Added File Header resolution for
GetElement
andAddElement
. - Renamed
ElementExists
toHasElement
. ElementFromJson
can now deserialize from root.ElementFromJson
can now create override records.- Now able to set references from EditorID, FULL name, and a number of different FormID strings.
GetFormID
andSetFormID
can now accept a load order FormID or a file FormID - handled based on a boolean parameter.- Removed deep copy parameter from
CopyElement
. I can't think of any circumstance in which a user would not want to deep copy an element. GetRecords
now works with root, files, and groups, can accept a search string (comma separated list of record signatures/signature-names to find), and allows ignoring override records.- Renamed
GetReferences
toGetReferencedBy
for clarity. - Now excluding a number of unnecessary values from File and Record headers when serializing them.
- Removed a number of redundant functions:
GetGroupSignatures
: Removed in favor of iterating overGetElements
withSignature
.GetMaster
: Removed in favor of usingGetMasters
.GetExpectedSignatures
: Removed in favor of theGetSignatureAllowed
function.ToggleFlag
: Not needed often, can be done fairly easily withSetFlag
andGetFlag
.GetFileHeader
: Removed in favor of usingGetElement
.GetNextObjectId
: Removed in favor of usingGetIntValue
.SetNextObjectId
: Removed in favor of usingSetIntValue
.GetFileName
: Removed in favor of usingName
.GetAuthor
: Removed in favor of usingGetValue
.SetAuthor
: Removed in favor of usingSetValue
.GetDescription
: Removed in favor of usingGetValue
.SetDescription
: Removed in favor of usingSetValue
.GetIsEsm
: Removed in favor of usingGetFlag
.SetIsEsm
: Removed in favor of usingSetFlag
.HasGroup
: Removed in favor of usingHasElement
.AddGroup
: Removed in favor of usingAddElement
.GetChildGroup
: Removed in favor of usingGetElement
.EditorID
: Removed in favor of usingGetValue
.FullName
: Removed in favor of usingGetValue
.GetErrorString
: Removed in favor of usingGetErrors
.RecordsBySignature
: Removed in favor of usingGetRecords
.AddRecord
: Removed in favor of usingAddElement
.RecordByFormID
: Removed in favor of usingGetElement
.RecordByEditorID
: Removed in favor of usingGetElement
.RecordByName
: Removed in favor of usingGetElement
.
- Fixed several bugs:
- Fixed how interfaces were handled by the
Release
function. - Fixed serialization order of record elements.
- Fixed JSON serialization of subrecord flags.
- Fixed bug with flag functions when flags were 64-bits wide.
ElementFromJson
is now working.- File creation now updates the
FileCount
global. - Now ignoring injected records when checking for ITM/ITPO records.
- Now reporting ITM/ITPO records even if they have child groups. It will be the responsibility of the calling code to identify when these can be removed.
- Fixed how interfaces were handled by the
- Added tests for a number of functions:
- Setup
SetGameMode
,GetLoadOrder
,GetActivePlugins
,LoadPlugins
,UnloadPlugin
,LoadPlugin
- File Handling
AddFile
,SaveFile
,GetRequiredBy
- Master Handling
AddMaster
,AddMasters
,SortMasters
,CleanMasters
,GetMasters
- Element Handling
ElementMatches
,GetArrayItem
,HasArrayItem
,AddArrayItem
,CopyElement
- Element Values
SignatureFromName
,NameFromSignature
,GetSignatureNameMap
,GetFlag
,SetFlag
,GetEnabledFlags
,SetEnabledFlags
,GetAllFlags
- Record Handling
GetRecords
- Serialization
ElementFromJson
- Plugin Errors
GetErrors
- Setup
- Updated xEdit codebase for several extensions:
- Added functions for searching for records by FULL name.
- Sorting records of a particular signature in a particular file by FULL name for searching.
- Sorting records of a particular signature in a particular file by EditorID for searching.
- Added a way to allow invalid FormID reference values to be set (UERs and URRs)
- Now assigning subrecords to definitions even when they are out of order (still reporting them as errors).
- Updated all test plugins (mainly for testing error checking functions)
- Added renaming of saved files when CloseXEdit is called.
- Now using library version information in test project.
- Now using regions throughout the code
- Most functions will now raise an exception when they do not succeed, providing better context to the user.
- Heavily refactored test code to use more helper functions for testing.
- Moved a number of functions around to make code organization more consistent.
Developer Build 358
This is an early access developer build. Please note that this version is not stable and breaking changes can and will occur. This version is meant only to be used for early testing purposes.
See previous releases for instructions.
Changes
- Switched from SuperObject to Argo for serializing and deserializing JSON.
- Now returning boolean results through PWordBool arguments
- Refactored and cleaned up tests
- Refactored how string results are returned, functions now return the length of the result buffer in characters and you can get the buffer by calling
GetResultString
. - Refactored how cardinal array results are returned, the function now returns the length of the result array in items and you can get the array by calling
GetResultArray
. - Fixed memory leaks.
- Refactored Initialize and Finalize to InitXEdit and CloseXEdit to avoid collisions with Delphi system functions.
- Fixes #2.
Developer Build 321
This is an early access developer build. Please note that this version is not stable and breaking changes can and will occur. This version is meant only to be used for early testing purposes.
See previous releases for instructions.
Changes
- Removed
ElementAssigned
function -ElementExists
provides this functionality. - Removed
LinksTo
function -GetLinksTo
provides this functionality. - Refactored
Equals
toElementEquals
. - Refactored
NewElement
toAddElement
. - Refactored
NewFile
toAddFile
- Added tests for
ElementEquals
,GetLinksTo
, SetNativeValue
now raises an exception if element is not found.- Added tests and fixed issues with
ElementToJSON
serialization. Serialization is now operating to desired specifications. - Added element deserialization functions (untested).
Developer Build 303
This is an early access developer build. Please note that this version is not stable and breaking changes can and will occur. This version is meant only to be used for early testing purposes.
See previous releases for instructions.
Changes
- Added tests for ElementCount and ElementExists
- Fixed tests for RemoveElement
- ElementCount now returns FileCount if id 0 is passed
- Added tests for SetFloatValue, SetUIntValue, SetIntValue, SetValue, GetFloatValue, GetIntValue, and GetUIntValue
- Now including test plugins with builds.
Developer Build 283
This is an early access developer build. Please note that this version is not stable and breaking changes can and will occur. This version is meant only to be used for early testing purposes.
See previous release for instructions.
Developer Build 219
This is an early access developer build. Please note that this version is not stable and breaking changes can and will occur. This version is meant only to be used for early testing purposes.
Instructions
Run DelphiTest.exe
from a command line window to run tests. Refer to the source code for how to import and use functions from the DLL.
NOTE: There is an issue with a runtime error when the library is unloaded (usually when the parent application is terminated). This is most likely due to bad finalization code, but I'm not yet certain. This issue will be fixed before the first proper release.