Only resort the data entries when we modify the lists. Also use EncodeWithNullTerminator to ensure the safety of strings.
Also avoid parsing the category names when we're only looking for the presence of the Dalamud category
* Add Completion module
Dalamud and plugin commands will now be tab-completable in the ChatLog
* PR feedback
---------
Co-authored-by: goat <16760685+goaaats@users.noreply.github.com>
* GameGui uses CS methods now
Co-authored-by: Infi <infiziert@protonmail.ch>
* Shove even more things over to CS
* Clean up NetworkHandlers too
* bump cs so things build at least
---------
Co-authored-by: Infi <infiziert@protonmail.ch>
* Remove unused code from ChatHandlers
* Replace sigs in DalamudAtkTweaks
* Resolve LocalContentId by using PlayerState.ContentId
* Resolve BuddyList address via UIState.Buddy
* Resolve ObjectTable address via GameObjectManager
* Resolve FateTable address via FateManager
* Resolve GroupManager address via GroupManager
* Resolve JobGauges address via JobGaugeManager.CurrentGauge
* Simplify ItemHover/Out event
* Resolve ToggleUiHide address via RaptureAtkModule.SetUiVisibility
* Resolve PopulateItemLinkObject via InventoryItem.Copy
* Add byte[].AsPointer extension
* Resolve addresses used by ToastGui via UIModule functions
* Use Length from Span as ObjectTableLength
* Replace OpenMapWithMapLink with CS call
* Resolve FrameworkAddressResolver with CS vtable
* Drop unnecessary ToArray in HandlePrintMessage
* Clean up event calls in HandlePrintMessageDetour
* Simplify LocalContentId further
This pointer can't be null, because it's part of the .data section.
* Compare SeStrings in FlyTextGui with SequenceEqual
* Use CS types in FlyTextGuis internal code
* Simplify reading SeStrings internally
* Remove AsPointer again
* Resolve Number/StringArray by type in NamePlateGui
* Fix crashes in HandlePrintMessageDetour
* Resolve InteractableLinkClicked with LogViewer.HandleLinkClick
* Describe memory address when printed in log/debug utilities
* PresentDetour: Compare against game's internal copy of IDXGISwapChain
* Handle ReShade on_present function signature properly
* wip
* hacky fix for overlapping event text in profiler
* move IsResumeGameAfterPluginLoad logic to PluginManager
* fix some warnings
* handle exceptions properly
* remove ability to cancel, rename button to "hide" instead
* undo Dalamud.Service refactor for now
* warnings
* add explainer, show which plugins are still loading
* add some text if loading takes more than 3 minutes
* undo wrong CS merge
* Add IInternal/PublicDisposableService
Plugins are exposed interfaces that are not inherited from
`IDisposable`, but services implementing plugin interfaces often
implement `IDisposable`. Some plugins may try to call
`IDisposable.Dispose` on everything provided, and it also is possible to
use `using` clause too eagerly while working on Dalamud itself, such as
writing `using var smth = await Service<SomeService>.GetAsync();`. Such
behaviors often lead to a difficult-to-debug errors, and making those
services either not an `IDisposable` or making `IDisposable.Dispose` do
nothing if the object has been loaded would prevent such errors. As
`ServiceManager` must be the only class dealing with construction and
disposal of services, `IInternalDisposableService` has been added to
limit who can dispose the object. `IPublicDisposableService` also has
been added to classes that can be constructed and accessed directly by
plugins; for those, `Dispose` will be ignored if the instance is a
service instance, and only `DisposeService` will respond.
In addition, `DalamudPluginInterface` and `UiBuilder` also have been
changed so that their `IDisposable.Dispose` no longer respond, and
instead, internal functions have been added to only allow disposal from
Dalamud.
* Cleanup
* Postmerge fixes
* More explanation on RunOnFrameworkThread(ClearHooks)
* Mark ReliableFileStorage public ctor obsolete
---------
Co-authored-by: goat <16760685+goaaats@users.noreply.github.com>
* Change MemoryHelper to allocate less
* Use StringBuilder pool for ReadSeStringAsString
* fix
* Use CreateReadOnlySpanFromNullTerminated where possible