9.0.0-beta.3
Pre-release
Pre-release
NaoUnderscore
released this
15 Sep 13:42
·
21 commits
to dev
since this release
Changelog
Breaking Changes
- Renamed
EConfig
toConfigSubsystem
. TheEnableAll
andDisableAll
methods inCustomModules
and derivatives now require an assembly as input and return the number of instances of modules generated, activated, and registered per assembly. - Custom items' settings now utilize
SettingsBase
. User-defined custom item types must be based onSettingsBase
. - Module activation is delayed by 0.5 seconds to allow for the proper loading of dependencies and plugins.
- Renamed
Spawned
event toChangedRole
event by @Monald. - Removed previous settings for custom items, including
ItemSettings
andPickupSettings
. - Removed generic trackers, which were unnecessary and caused memory issues. A single tracker is now sufficient.
Fixes
- Deserialization Issues: Resolved problems with deserializing
CustomItems
.CustomItems
now usesSettingsBase
for proper serialization and deserialization with a custom deserializer. - Custom Role Spawning: Fixed logical issues with custom role spawning via static methods.
- ModulePointer ID Conflicts:
ModulePointer
now avoids ID conflicts by usingModuleTypeIndicator
to differentiate modules. - Automatic Module Loading: Modules not configured for loading are no longer loaded automatically, but only if explicitly enabled.
- RoleAssigner Fixes: Corrected
RoleAssigner
and its related events to properly assign roles based on probabilities. - Config Initialization: Fixed issues with configs being null or not initialized inside behaviors.
- Hash Code Issues: Fixed
EObject::GetHashCode
conflicts by relying onInstanceID
, which increments for each existingEObject
. - Duplicate Component Addition: Added checks to prevent components from being added twice to the same entity, avoiding issues from duplicated instances.
- DynamicEventDispatcher Initialization: Ensured all
DynamicEventDispatcher
objects are initialized to avoid null reference exceptions during object instantiation. - Command Instance Lookup: Fixed issues with
CustomItem
andCustomRole
commands not finding the module instance by Id or Name.
Additions
- Dynamic Type Converter: Introduced
DynamicTypeConverter<T>
for resolving types during YamlDotNet (de)serialization. - Enhanced Log Information: Improved detail in
Log::GetContextInfo()
. - Serialization for ModulePointer: Added serialization support for
ModulePointer
, now handling any data type. - Custom Serialization Logic: Added
CustomModule::DeserializeModule_Implementation
andCustomModule::SerializeModule_Implementation
methods to support custom serialization and deserialization. - Module State Events: Implemented events to monitor the state of modules.
- TrackablesGC: Added a garbage collector specifically for trackables.
- ConfigSubsystem Enhancements: Improved handling and interaction with configs and sub-configs with new methods:
Read<T>(string)
,ReadDataObject<T>(string)
,ReadDataObjectValue<TSource, TValue>(string)
,Write<T>(string, object)
, andWriteDataObjectValue<TSource, TValue>(string, object)
. - Config Loading on Server Start: Implemented
ConfigSubsystem::LoadAll
to load all plugins at server start. - Standalone Configs: Added
ConfigSubsystem::IsStandAlone
to define stand-alone configs that do not rely on parent or child configs. The path is user-defined (default is.config/EXILED/Configs/FolderName/FileName.yml
). - DynamicTypeGenerator: Introduced
DynamicTypeGenerator
for runtime type creation, including methods for creating types and more. - EActor Events: Added
EActor::OnAdded
andEActor::OnRemoved
events for when components are added or removed from entities. - Default Implementation Methods: Added
static ModuleBehaviour<>::ImplementConfigs_DefaultImplementation()
andstatic ModuleBehaviour<>::ApplyConfig_DefaultImplementation()
for default instance method implementations. - Custom Module Serialization: Implemented
CustomModule::DeserializeModule_Implementation
andCustomModule::SerializeModule_Implementation
methods for user-defined module (de)serialization logic. - PlayingAudioLog Event: Added
PlayingAudioLog
event by @NotZer0Two. - MoveNetworkIdentityObject API: Added
MoveNetworkIdentityObject
API by @notzerotwo_.
Changes:
- Log Readability: Improved readability for logs related to info, warnings, errors, and module state changes.
- Unified Settings Structures:
Item
andPickup
now share the same settings structures. - Tracker Fixes: Fixed trackers for items and pickups.
- Example Project Regeneration: Regenerated the
Exiled.Example
project with updated custom item and role examples. - Optimized Attachments Generation: Improved performance of attachments generation at server start.
- Deep Copy Support: Enhanced
ReflectionExtensions::CopyProperties
to support deep copying for nested and complex types. - StaticActor Performance: Optimized
StaticActor
andStaticActor<T>
for faster instance retrieval. - Virtual Type Casting: Made
TypeCastObject<T>::Cast
methods virtual. - GlobalPatchProcessor Logs: Improved readability and logging for
GlobalPatchProcessor
. - Bug Report Fixes: Fixed issues reported in bug report n.396 by @notzerotwo_.