Skip to content

9.0.0-beta.3

Pre-release
Pre-release
Compare
Choose a tag to compare
@NaoUnderscore NaoUnderscore released this 15 Sep 13:42
· 20 commits to dev since this release
8e59c29

Changelog

Breaking Changes

  • Renamed EConfig to ConfigSubsystem. The EnableAll and DisableAll methods in CustomModules 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 on SettingsBase.
  • Module activation is delayed by 0.5 seconds to allow for the proper loading of dependencies and plugins.
  • Renamed Spawned event to ChangedRole event by @Monald.
  • Removed previous settings for custom items, including ItemSettings and PickupSettings.
  • 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 uses SettingsBase 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 using ModuleTypeIndicator 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 on InstanceID, which increments for each existing EObject.
  • 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 and CustomRole 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 and CustomModule::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), and WriteDataObjectValue<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 and EActor::OnRemoved events for when components are added or removed from entities.
  • Default Implementation Methods: Added static ModuleBehaviour<>::ImplementConfigs_DefaultImplementation() and static ModuleBehaviour<>::ApplyConfig_DefaultImplementation() for default instance method implementations.
  • Custom Module Serialization: Implemented CustomModule::DeserializeModule_Implementation and CustomModule::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 and Pickup 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 and StaticActor<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_.