diff --git a/vmf/scripts/mods/vmf/modules/core/packages.lua b/vmf/scripts/mods/vmf/modules/core/packages.lua index 8677fce..8f12b85 100644 --- a/vmf/scripts/mods/vmf/modules/core/packages.lua +++ b/vmf/scripts/mods/vmf/modules/core/packages.lua @@ -156,3 +156,29 @@ function vmf.update_package_manager() end end end + +-- Forcefully unloads all mods and cleans the queue. +function vmf.unload_all_resource_packages() + for mod, packages in pairs(_loaded_packages) do + for package_name in pairs(packages) do + mod:warning( + "Force-unloading package '%s'. Please make sure to properly release packages when the mod is unloaded", + package_name + ) + mod:unload_package(package_name) + end + end + + _queued_packages = {} + + if _loading_package then + _loading_package.mod:warning( + "Still loading package '%s'. Memory leaks may occur when unloading while a package is loading.", + _loading_package.package_name + ) + + _loading_package.callback = function(package_name) + _loading_package.mod:unload_package(package_name) + end + end +end diff --git a/vmf/scripts/mods/vmf/vmf_loader.lua b/vmf/scripts/mods/vmf/vmf_loader.lua index d3b373c..ef530ee 100644 --- a/vmf/scripts/mods/vmf/vmf_loader.lua +++ b/vmf/scripts/mods/vmf/vmf_loader.lua @@ -92,6 +92,7 @@ function vmf_mod_object:on_reload() if VT1 then vmf.reset_map_view() end vmf.mods_unload_event(false) vmf.remove_custom_views() + vmf.unload_all_resource_packages() vmf.hooks_unload() vmf.reset_guis() end