using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Service; namespace Milimoe.FunGame.Core.Api.Utility { public class GameModuleLoader { /// /// 适用于客户端的模组集 /// public Dictionary Modules { get; } = []; /// /// 适用于服务器的模组集 /// public Dictionary ModuleServers { get; } = []; /// /// 游戏地图集 /// public Dictionary Maps { get; } = []; /// /// 角色表 /// public Dictionary Characters { get; } = []; /// /// 技能表 /// public Dictionary Skills { get; } = []; /// /// 物品表 /// public Dictionary Items { get; } = []; /// /// 已加载的模组DLL名称对应的路径 /// public static Dictionary ModuleFilePaths => new(AddonManager.ModuleFilePaths); private GameModuleLoader() { } /// /// 传入 类型来创建指定端的模组读取器 /// runtime = 时,仅读取 /// runtime = 时,仅读取 /// 都会读取 /// /// 传入 类型来创建指定端的模组读取器 /// 用于构建 /// 其他需要传入给插件初始化的对象 /// public static GameModuleLoader LoadGameModules(FunGameInfo.FunGame runtime, Dictionary delegates, params object[] otherobjs) { GameModuleLoader loader = new(); if (runtime == FunGameInfo.FunGame.FunGame_Desktop) { 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()) { // 读取模组的依赖集合 module.GameModuleDepend.GetDependencies(loader); // 如果模组加载后需要执行代码,请重写AfterLoad方法 module.AfterLoad(loader, otherobjs); } } else if (runtime == FunGameInfo.FunGame.FunGame_Server) { 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); server.AfterLoad(loader, otherobjs); } } return loader; } /// /// 获取对应名称的模组实例 /// 如果需要取得服务器模组的实例,请调用 /// /// /// public GameModule this[string name] { get { return Modules[name]; } set { Modules.TryAdd(name, value); } } /// /// 获取对应名称的服务器模组实例 /// /// /// public GameModuleServer GetServerMode(string name) { return ModuleServers[name]; } /// /// 获取对应名称的游戏地图 /// /// /// public GameMap GetGameMap(string name) { return Maps[name]; } } }