From 05d1c7204a3b9fe1c6daad0cedafa27c78a5fac8 Mon Sep 17 00:00:00 2001 From: milimoe Date: Sun, 19 Jan 2025 01:33:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8A=A0=E8=BD=BD=E9=A1=B9?= =?UTF-8?q?=E7=9A=84=E5=8A=A0=E8=BD=BD=E6=96=B9=E5=BC=8F=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=BE=AA=E7=8E=AF=E4=BE=9D=E8=B5=96=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Api/Utility/GameModuleLoader.cs | 4 +- Service/AddonManager.cs | 102 ++++++++++++++++++++++++++++++-- 2 files changed, 98 insertions(+), 8 deletions(-) diff --git a/Api/Utility/GameModuleLoader.cs b/Api/Utility/GameModuleLoader.cs index 9ec48fe..a82fdf4 100644 --- a/Api/Utility/GameModuleLoader.cs +++ b/Api/Utility/GameModuleLoader.cs @@ -58,8 +58,8 @@ namespace Milimoe.FunGame.Core.Api.Utility GameModuleLoader loader = new(); if (runtime == FunGameInfo.FunGame.FunGame_Desktop) { - AddonManager.LoadGameModules(loader.Modules, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); AddonManager.LoadGameMaps(loader.Maps, otherobjs); + AddonManager.LoadGameModules(loader.Modules, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); foreach (GameModule module in loader.Modules.Values.ToList()) { // 读取模组的依赖集合 @@ -70,8 +70,8 @@ namespace Milimoe.FunGame.Core.Api.Utility } else if (runtime == FunGameInfo.FunGame.FunGame_Server) { - AddonManager.LoadGameModulesForServer(loader.ModuleServers, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); AddonManager.LoadGameMaps(loader.Maps, otherobjs); + AddonManager.LoadGameModulesForServer(loader.ModuleServers, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); foreach (GameModuleServer server in loader.ModuleServers.Values.ToList()) { server.GameModuleDepend.GetDependencies(loader); diff --git a/Service/AddonManager.cs b/Service/AddonManager.cs index 2eeba5d..85bda5f 100644 --- a/Service/AddonManager.cs +++ b/Service/AddonManager.cs @@ -33,7 +33,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { // 加载目录下所有的DLL - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Plugin)))) { @@ -71,7 +86,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { // 加载目录下所有的DLL - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(ServerPlugin)))) { @@ -109,7 +139,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { // 加载目录下所有的DLL - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(WebAPIPlugin)))) { @@ -149,7 +194,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => typeof(IAddon).IsAssignableFrom(type))) { @@ -208,7 +268,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => typeof(IAddon).IsAssignableFrom(type))) { @@ -263,7 +338,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(GameMap)))) {