diff --git a/Api/Factory/ItemFactory.cs b/Api/Factory/ItemFactory.cs index 891cfd9..f686d81 100644 --- a/Api/Factory/ItemFactory.cs +++ b/Api/Factory/ItemFactory.cs @@ -12,16 +12,13 @@ namespace Milimoe.FunGame.Core.Api.Factory public Item Create(ItemType type = ItemType.Passive) { - switch (type) + _EntityType = typeof(Item); + return type switch { - case ItemType.Passive: - _EntityType = typeof(PassiveItem); - return PassiveItem.GetInstance(); - case ItemType.Active: - default: - _EntityType = typeof(ActiveItem); - return PassiveItem.GetInstance(); - } + ItemType.Passive => new(false), + ItemType.Active => new(true), + _ => new(false) + }; } public Item Create() diff --git a/Api/Factory/SkillFactory.cs b/Api/Factory/SkillFactory.cs index 3bc7209..53cdbb3 100644 --- a/Api/Factory/SkillFactory.cs +++ b/Api/Factory/SkillFactory.cs @@ -12,16 +12,13 @@ namespace Milimoe.FunGame.Core.Api.Factory internal Skill Create(SkillType type = SkillType.Passive) { - switch (type) + _EntityType = typeof(Skill); + return type switch { - case SkillType.Passive: - _EntityType = typeof(PassiveSkill); - return PassiveSkill.GetInstance(); - case SkillType.Active: - default: - _EntityType = typeof(ActiveSkill); - return ActiveSkill.GetInstance(); - } + SkillType.Passive => new(false), + SkillType.Active => new(true), + _ => new(false) + }; } public Skill Create() diff --git a/Api/Transmittal/DataRequest.cs b/Api/Transmittal/DataRequest.cs index 028232a..8ce30e8 100644 --- a/Api/Transmittal/DataRequest.cs +++ b/Api/Transmittal/DataRequest.cs @@ -7,7 +7,8 @@ using Milimoe.FunGame.Core.Library.Exception; namespace Milimoe.FunGame.Core.Api.Transmittal { /// - /// 需要配合Milimoe.FunGame.Core.Library.Constant.DataRequestType使用 + /// 需要配合 使用 + /// 如果是 的数据请求,则配合 使用 /// 确保已添加对应的枚举 /// public class DataRequest @@ -15,12 +16,12 @@ namespace Milimoe.FunGame.Core.Api.Transmittal /// /// 数据请求结果 /// - public RequestResult Result => Worker.Result; + public RequestResult Result => Worker != null ? Worker.Result : (GamingWorker != null ? GamingWorker.Result : RequestResult.Missing); /// /// 详细错误信息 /// - public string Error => Worker.Error; + public string Error => Worker != null ? Worker.Error : (GamingWorker != null ? GamingWorker.Error : ""); // 获取ResultData中key值对应的Json字符串 // -- 此索引器仅返回Json字符串,对象类型请使用反序列化方法GetResult() -- @@ -30,7 +31,9 @@ namespace Milimoe.FunGame.Core.Api.Transmittal { get { - return Worker.ResultData[key]; + if (Worker != null) return Worker.ResultData[key]; + else if (GamingWorker != null) return GamingWorker.ResultData[key]; + return null; } set { @@ -41,11 +44,16 @@ namespace Milimoe.FunGame.Core.Api.Transmittal /// /// 私有的实现类 /// - private readonly SocketRequest Worker; + private readonly SocketRequest? Worker; + + /// + /// 私有的实现类(这是局内请求的) + /// + private readonly GamingRequest? GamingWorker; /// /// 基于本地已连接的 创建新的数据请求 - /// 使用 中的 创建一个新的请求 + /// 使用 中的 创建一个新的请求 /// /// /// @@ -55,6 +63,46 @@ namespace Milimoe.FunGame.Core.Api.Transmittal Worker = new(Socket, RequestType, Guid.NewGuid(), IsLongRunning); } + /// + /// 基于本地已连接的 创建新的数据请求 + /// 使用 中的 创建一个新的请求 + /// 此数据请求只能调用异步方法 请求数据 + /// + /// + /// + /// + internal DataRequest(HTTPClient WebSocket, DataRequestType RequestType, bool IsLongRunning = false) + { + Worker = new(WebSocket, RequestType, Guid.NewGuid(), IsLongRunning); + } + + /// + /// 基于本地已连接的 创建新的局内()数据请求 + /// 使用 中的 创建一个新的请求 + /// 此构造方法是给 提供的 + /// + /// + /// + /// + internal DataRequest(Socket Socket, GamingType GamingType, bool IsLongRunning = false) + { + GamingWorker = new(Socket, GamingType, Guid.NewGuid(), IsLongRunning); + } + + /// + /// 基于本地已连接的 创建新的局内()数据请求 + /// 使用 中的 创建一个新的请求 + /// 此构造方法是给 提供的 + /// 此数据请求只能调用异步方法 请求数据 + /// + /// + /// + /// + internal DataRequest(HTTPClient WebSocket, GamingType GamingType, bool IsLongRunning = false) + { + GamingWorker = new(WebSocket, GamingType, Guid.NewGuid(), IsLongRunning); + } + /// /// 添加数据 /// @@ -62,8 +110,16 @@ namespace Milimoe.FunGame.Core.Api.Transmittal /// public void AddRequestData(string key, object? value) { - if (Worker.RequestData.ContainsKey(key)) Worker.RequestData[key] = value; - else Worker.RequestData.Add(key, value); + if (Worker != null) + { + if (Worker.RequestData.ContainsKey(key)) Worker.RequestData[key] = value; + else Worker.RequestData.Add(key, value); + } + else if (GamingWorker != null) + { + if (GamingWorker.RequestData.ContainsKey(key)) GamingWorker.RequestData[key] = value; + else GamingWorker.RequestData.Add(key, value); + } } /// @@ -71,16 +127,20 @@ namespace Milimoe.FunGame.Core.Api.Transmittal /// public void Dispose() { - Worker.Dispose(); + Worker?.Dispose(); + GamingWorker?.Dispose(); } /// /// 向服务器发送数据请求 + /// 警告: 调用此方法将抛出异常。请调用并等待 /// /// + /// public RequestResult SendRequest() { - Worker.SendRequest(); + Worker?.SendRequest(); + GamingWorker?.SendRequest(); return Result; } @@ -90,7 +150,14 @@ namespace Milimoe.FunGame.Core.Api.Transmittal /// public async Task SendRequestAsync() { - await Worker.SendRequestAsync(); + if (Worker != null) + { + await Worker.SendRequestAsync(); + } + else if (GamingWorker != null) + { + await GamingWorker.SendRequestAsync(); + } return Result; } @@ -102,33 +169,65 @@ namespace Milimoe.FunGame.Core.Api.Transmittal /// public T? GetResult(string key) { - return GetHashtableJsonObject(Worker.ResultData, key); + if (Worker != null) + { + return GetHashtableJsonObject(Worker.ResultData, key); + } + else if (GamingWorker != null) + { + return GetHashtableJsonObject(GamingWorker.ResultData, key); + } + return default; } - private class SocketRequest(Socket? Socket, DataRequestType RequestType, Guid RequestID, bool IsLongRunning = false) : SocketHandlerController(Socket) + /// + /// 常规数据请求 + /// + private class SocketRequest : SocketHandlerController { public Hashtable RequestData { get; } = []; public Hashtable ResultData => _ResultData; public RequestResult Result => _Result; public string Error => _Error; - private readonly Socket? Socket = Socket; - private readonly DataRequestType RequestType = RequestType; - private readonly Guid RequestID = RequestID; - private readonly bool _IsLongRunning = IsLongRunning; + private readonly Socket? Socket = null; + private readonly HTTPClient? WebSocket = null; + private readonly DataRequestType RequestType = DataRequestType.UnKnown; + private readonly Guid RequestID = Guid.Empty; + private readonly bool IsLongRunning = false; private Hashtable _ResultData = []; private RequestResult _Result = RequestResult.Missing; private string _Error = ""; + public SocketRequest(Socket? Socket, DataRequestType RequestType, Guid RequestID, bool IsLongRunning = false) : base(Socket) + { + this.Socket = Socket; + this.RequestType = RequestType; + this.RequestID = RequestID; + this.IsLongRunning = IsLongRunning; + } + + public SocketRequest(HTTPClient? WebSocket, DataRequestType RequestType, Guid RequestID, bool IsLongRunning = false) : base(WebSocket) + { + this.WebSocket = WebSocket; + this.RequestType = RequestType; + this.RequestID = RequestID; + this.IsLongRunning = IsLongRunning; + } + public void SendRequest() { try { SetWorking(); - if (Socket?.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData) == SocketResult.Success) + if (Socket != null && Socket.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData) == SocketResult.Success) { WaitForWorkDone(); } + else if (WebSocket != null) + { + throw new AsyncRequestException(); + } else throw new ConnectFailedException(); } catch (Exception e) @@ -144,7 +243,11 @@ namespace Milimoe.FunGame.Core.Api.Transmittal try { SetWorking(); - if (Socket?.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData) == SocketResult.Success) + if (Socket != null && Socket.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData) == SocketResult.Success) + { + await WaitForWorkDoneAsync(); + } + else if (WebSocket != null && await WebSocket.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData) == SocketResult.Success) { await WaitForWorkDoneAsync(); } @@ -168,7 +271,115 @@ namespace Milimoe.FunGame.Core.Api.Transmittal Guid id = SocketObject.GetParam(1); if (type == RequestType && id == RequestID) { - if (!_IsLongRunning) Dispose(); + if (!IsLongRunning) Dispose(); + Work = SocketObject; + Working = false; + _ResultData = SocketObject.GetParam(2) ?? []; + _Result = RequestResult.Success; + } + } + } + catch (Exception e) + { + Working = false; + _Result = RequestResult.Fail; + _Error = e.GetErrorInfo(); + } + } + } + + /// + /// 游戏局内请求 + /// + private class GamingRequest : SocketHandlerController + { + public Hashtable RequestData { get; } = []; + public Hashtable ResultData => _ResultData; + public RequestResult Result => _Result; + public string Error => _Error; + + private readonly Socket? Socket = null; + private readonly HTTPClient? WebSocket = null; + private readonly GamingType GamingType = GamingType.None; + private readonly Guid RequestID = Guid.Empty; + private readonly bool IsLongRunning = false; + private Hashtable _ResultData = []; + private RequestResult _Result = RequestResult.Missing; + private string _Error = ""; + + public GamingRequest(Socket? Socket, GamingType GamingType, Guid RequestID, bool IsLongRunning = false) : base(Socket) + { + this.Socket = Socket; + this.GamingType = GamingType; + this.RequestID = RequestID; + this.IsLongRunning = IsLongRunning; + } + + public GamingRequest(HTTPClient? WebSocket, GamingType GamingType, Guid RequestID, bool IsLongRunning = false) : base(WebSocket) + { + this.WebSocket = WebSocket; + this.GamingType = GamingType; + this.RequestID = RequestID; + this.IsLongRunning = IsLongRunning; + } + + public void SendRequest() + { + try + { + SetWorking(); + if (Socket != null && Socket.Send(SocketMessageType.DataRequest, GamingType, RequestID, RequestData) == SocketResult.Success) + { + WaitForWorkDone(); + } + else if (WebSocket != null) + { + throw new AsyncRequestException(); + } + else throw new ConnectFailedException(); + } + catch (Exception e) + { + Working = false; + _Result = RequestResult.Fail; + _Error = e.GetErrorInfo(); + } + } + + public async Task SendRequestAsync() + { + try + { + SetWorking(); + if (Socket != null && Socket.Send(SocketMessageType.DataRequest, GamingType, RequestID, RequestData) == SocketResult.Success) + { + await WaitForWorkDoneAsync(); + } + else if (WebSocket != null && await WebSocket.Send(SocketMessageType.DataRequest, GamingType, RequestID, RequestData) == SocketResult.Success) + { + await WaitForWorkDoneAsync(); + } + else throw new ConnectFailedException(); + } + catch (Exception e) + { + Working = false; + _Result = RequestResult.Fail; + _Error = e.GetErrorInfo(); + } + } + + public override void SocketHandler(SocketObject SocketObject) + { + try + { + if (SocketObject.SocketType == SocketMessageType.DataRequest) + { + GamingType type = SocketObject.GetParam(0); + Guid id = SocketObject.GetParam(1); + if (type == GamingType && id == RequestID) + { + if (!IsLongRunning) Dispose(); Work = SocketObject; Working = false; _ResultData = SocketObject.GetParam(2) ?? []; diff --git a/Api/Transmittal/WebDataRequest.cs b/Api/Transmittal/WebDataRequest.cs deleted file mode 100644 index f1906db..0000000 --- a/Api/Transmittal/WebDataRequest.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System.Collections; -using Milimoe.FunGame.Core.Library.Common.Network; -using Milimoe.FunGame.Core.Library.Constant; -using Milimoe.FunGame.Core.Library.Exception; - -namespace Milimoe.FunGame.Core.Api.Transmittal -{ - public class WebDataRequest - { - /// - /// 数据请求结果 - /// - public RequestResult Result => Worker.Result; - - /// - /// 详细错误信息 - /// - public string Error => Worker.Error; - - // 获取ResultData中key值对应的Json字符串 - // -- 此索引器仅返回Json字符串,对象类型请使用反序列化方法GetResult() -- - // -- 当然也可以自己反序列化 -- - // -- 基本类型可能有效,但仍建议使用反序列化方法 -- - public object? this[string key] - { - get - { - return Worker.ResultData[key]; - } - set - { - AddRequestData(key, value); - } - } - - /// - /// 私有的实现类 - /// - private readonly WebSocketRequest Worker; - - /// - /// 基于本地已连接的 创建新的数据请求 - /// - /// - /// - internal WebDataRequest(HTTPClient Socket, DataRequestType RequestType) - { - Worker = new(Socket, RequestType, Guid.NewGuid()); - } - - /// - /// 添加数据 - /// - /// - /// - public void AddRequestData(string key, object? value) - { - if (Worker.RequestData.ContainsKey(key)) Worker.RequestData[key] = value; - else Worker.RequestData.Add(key, value); - } - - /// - /// 向服务器发送数据请求 - /// - /// - public async Task SendRequest() - { - await Worker.SendRequestAsync(); - return Result; - } - - /// - /// 异步向服务器发送数据请求 - /// - /// - public async Task SendRequestAsync() - { - await Worker.SendRequestAsync(); - return Result; - } - - /// - /// 获取指定key对应的反序列化对象 - /// - /// - /// - /// - public T? GetResult(string key) - { - return GetHashtableJsonObject(Worker.ResultData, key); - } - - private class WebSocketRequest(HTTPClient? Socket, DataRequestType RequestType, Guid RequestID) - { - public Hashtable RequestData { get; } = []; - public Hashtable ResultData => _ResultData; - public RequestResult Result => _Result; - public string Error => _Error; - - private readonly HTTPClient? Socket = Socket; - private readonly DataRequestType RequestType = RequestType; - private readonly Guid RequestID = RequestID; - private readonly Hashtable _ResultData = []; - private RequestResult _Result = RequestResult.Missing; - private string _Error = ""; - - public async Task SendRequestAsync() - { - try - { - if (Socket != null) - { - await Socket.Send(SocketMessageType.DataRequest, RequestType, RequestID, RequestData); - } - else throw new ConnectFailedException(); - } - catch (Exception e) - { - _Result = RequestResult.Fail; - _Error = e.GetErrorInfo(); - } - } - } - - /// - /// 反序列化Hashtable中的Json对象 - /// - /// - /// - /// - /// - public static T? GetHashtableJsonObject(Hashtable hashtable, string key) - { - return Service.JsonManager.GetObject(hashtable, key); - } - } -} diff --git a/Api/Utility/Factory.cs b/Api/Utility/Factory.cs index 5a31eec..2fbd36e 100644 --- a/Api/Utility/Factory.cs +++ b/Api/Utility/Factory.cs @@ -34,7 +34,7 @@ namespace Milimoe.FunGame.Core.Api.Utility } /// - /// 获取物品实例,默认返回Passiveitem 被动物品 需要强制转换 + /// 获取物品实例 /// /// Item类型 主动 或 被动 /// @@ -43,24 +43,6 @@ namespace Milimoe.FunGame.Core.Api.Utility return ItemFactory.Create(type); } - /// - /// 获取主动物品实例 - /// - /// - public static ActiveItem GetActiveItem() - { - return (ActiveItem)ItemFactory.Create(ItemType.Active); - } - - /// - /// 获取被动物品实例 - /// - /// - public static PassiveItem GetPassiveItem() - { - return (PassiveItem)ItemFactory.Create(ItemType.Passive); - } - /// /// 获取房间实例 /// @@ -156,7 +138,7 @@ namespace Milimoe.FunGame.Core.Api.Utility } /// - /// 获取技能实例,默认返回PassiveSkill 被动技能 需要强制转换 + /// 获取技能实例 /// /// Skill类型 主动 或 被动 /// @@ -165,24 +147,6 @@ namespace Milimoe.FunGame.Core.Api.Utility return SkillFactory.Create(type); } - /// - /// 获取主动技能实例 - /// - /// - public static ActiveSkill GetActiveSkill() - { - return (ActiveSkill)SkillFactory.Create(SkillType.Active); - } - - /// - /// 获取被动技能实例 - /// - /// - public static PassiveSkill GetPassiveSkill() - { - return (PassiveSkill)SkillFactory.Create(SkillType.Passive); - } - /// /// 获取用户实例 /// diff --git a/Api/Utility/GameModuleLoader.cs b/Api/Utility/GameModuleLoader.cs index 6d328c9..63868cc 100644 --- a/Api/Utility/GameModuleLoader.cs +++ b/Api/Utility/GameModuleLoader.cs @@ -1,5 +1,4 @@ using System.Collections; -using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Service; @@ -11,12 +10,12 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// 适用于客户端的模组集 /// - public Dictionary Modes { get; } = []; + public Dictionary Modules { get; } = []; /// /// 适用于服务器的模组集 /// - public Dictionary ServerModes { get; } = []; + public Dictionary ServerModules { get; } = []; /// /// 游戏地图集 @@ -26,27 +25,24 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// 角色表 /// - public List Characters { get; } = []; + public Dictionary Characters { get; } = []; /// /// 技能表 /// - public List Skills { get; } = []; + public Dictionary Skills { get; } = []; /// /// 物品表 /// - public List Items { get; } = []; + public Dictionary Items { get; } = []; - private GameModuleLoader() - { - - } + private GameModuleLoader() { } /// /// 传入 类型来创建指定端的模组读取器 - /// runtime = 时,仅读取 - /// runtime = 时,仅读取 + /// runtime = 时,仅读取 + /// runtime = 时,仅读取 /// 都会读取 /// /// 传入 类型来创建指定端的模组读取器 @@ -58,12 +54,12 @@ namespace Milimoe.FunGame.Core.Api.Utility GameModuleLoader loader = new(); if (runtime == FunGameInfo.FunGame.FunGame_Desktop) { - AddonManager.LoadGameModules(loader.Modes, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); + AddonManager.LoadGameModules(loader.Modules, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); AddonManager.LoadGameMaps(loader.Maps, otherobjs); } else if (runtime == FunGameInfo.FunGame.FunGame_Server) { - AddonManager.LoadGameModulesForServer(loader.ServerModes, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); + AddonManager.LoadGameModulesForServer(loader.ServerModules, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); AddonManager.LoadGameMaps(loader.Maps, otherobjs); } return loader; @@ -79,11 +75,11 @@ namespace Milimoe.FunGame.Core.Api.Utility { get { - return Modes[name]; + return Modules[name]; } set { - Modes.TryAdd(name, value); + Modules.TryAdd(name, value); } } @@ -94,7 +90,7 @@ namespace Milimoe.FunGame.Core.Api.Utility /// public GameModuleServer GetServerMode(string name) { - return ServerModes[name]; + return ServerModules[name]; } /// diff --git a/Api/Utility/General.cs b/Api/Utility/General.cs index 9ec6466..4c79ac1 100644 --- a/Api/Utility/General.cs +++ b/Api/Utility/General.cs @@ -328,7 +328,7 @@ namespace Milimoe.FunGame.Core.Api.Utility #region 加密服务 /// - /// 使用HMACSHA512算法加密 + /// 加密服务工具箱 /// public class Encryption { @@ -380,6 +380,9 @@ namespace Milimoe.FunGame.Core.Api.Utility } } + /// + /// 为字符串(string)添加扩展方法 + /// public static class StringExtension { /// @@ -398,6 +401,9 @@ namespace Milimoe.FunGame.Core.Api.Utility #region 验证服务 + /// + /// 验证码服务工具箱 + /// public class Verification { /// @@ -503,6 +509,9 @@ namespace Milimoe.FunGame.Core.Api.Utility #region 多线程服务 + /// + /// 多线程服务工具箱 + /// public class TaskUtility { /// diff --git a/Controller/AddonController.cs b/Controller/AddonController.cs index 35dadbb..12973ce 100644 --- a/Controller/AddonController.cs +++ b/Controller/AddonController.cs @@ -22,35 +22,83 @@ namespace Milimoe.FunGame.Core.Controller private Func MaskMethod_NewLongRunningDataRequest { get; set; } /// - /// 基于本地已连接的Socket创建新的数据请求 + /// 基于本地已连接的Socket创建新的局内数据请求 + /// + private Func MaskMethod_NewGamingRequest { get; set; } + + /// + /// 基于本地已连接的Socket创建长时间运行的局内数据请求 + /// + private Func MaskMethod_NewLongRunningGamingRequest { get; set; } + + /// + /// 基于本地已连接的Socket创建新的数据请求 + /// 此方法只允许插件调用,如果是模组和模组服务器调用此方法将抛出异常 /// /// /// - /// + /// public DataRequest NewDataRequest(DataRequestType type) { - if (typeof(T).IsAssignableFrom(typeof(IGameModuleServer))) + if (typeof(IGameModule).IsAssignableFrom(typeof(T)) || typeof(IGameModuleServer).IsAssignableFrom(typeof(T))) { - throw new ModuleServerNewDataRequestException(); + throw new InvalidNewDataRequestException(); } return MaskMethod_NewDataRequest(type); } /// - /// 基于本地已连接的Socket创建长时间运行的数据请求 + /// 基于本地已连接的Socket创建长时间运行的数据请求 + /// 此方法只允许插件调用,如果是模组和模组服务器调用此方法将抛出异常 /// /// /// - /// + /// public DataRequest NewLongRunningDataRequest(DataRequestType type) { - if (typeof(T).IsAssignableFrom(typeof(IGameModuleServer))) + if (typeof(IGameModule).IsAssignableFrom(typeof(T)) || typeof(IGameModuleServer).IsAssignableFrom(typeof(T))) { - throw new ModuleServerNewDataRequestException(); + throw new InvalidNewDataRequestException(); } return MaskMethod_NewLongRunningDataRequest(type); } + /// + /// 基于本地已连接的Socket创建新的局内()数据请求 + /// 此方法是给 提供的,但是 也能调用 + /// 模组服务器调用此方法将抛出异常 + /// + /// + /// + /// + /// + public DataRequest NewDataRequest(GamingType type) + { + if (typeof(IGameModuleServer).IsAssignableFrom(typeof(T))) + { + throw new InvalidNewDataRequestException(); + } + return MaskMethod_NewGamingRequest(type); + } + + /// + /// 基于本地已连接的Socket创建长时间运行的局内()数据请求 + /// 此方法是给 提供的,但是 也能调用 + /// 模组服务器调用此方法将抛出异常 + /// + /// + /// + /// + /// + public DataRequest NewLongRunningDataRequest(GamingType type) + { + if (typeof(IGameModuleServer).IsAssignableFrom(typeof(T))) + { + throw new InvalidNewDataRequestException(); + } + return MaskMethod_NewLongRunningGamingRequest(type); + } + /// /// 新建一个AddonController /// @@ -60,10 +108,16 @@ namespace Milimoe.FunGame.Core.Controller { if (delegates.ContainsKey("NewDataRequest")) MaskMethod_NewDataRequest = delegates["NewDataRequest"] != null ? (Func)delegates["NewDataRequest"]! : new(DefaultNewDataRequest); if (delegates.ContainsKey("NewLongRunningDataRequest")) MaskMethod_NewLongRunningDataRequest = delegates["NewLongRunningDataRequest"] != null ? (Func)delegates["NewLongRunningDataRequest"]! : new(DefaultNewDataRequest); + if (delegates.ContainsKey("NewGamingRequest")) MaskMethod_NewDataRequest = delegates["NewGamingRequest"] != null ? (Func)delegates["NewGamingRequest"]! : new(DefaultNewDataRequest); + if (delegates.ContainsKey("NewLongRunningGamingRequest")) MaskMethod_NewLongRunningDataRequest = delegates["NewLongRunningGamingRequest"] != null ? (Func)delegates["NewLongRunningGamingRequest"]! : new(DefaultNewDataRequest); MaskMethod_NewDataRequest ??= new(DefaultNewDataRequest); MaskMethod_NewLongRunningDataRequest ??= new(DefaultNewDataRequest); + MaskMethod_NewGamingRequest ??= new(DefaultNewDataRequest); + MaskMethod_NewLongRunningGamingRequest ??= new(DefaultNewDataRequest); } - private DataRequest DefaultNewDataRequest(DataRequestType type) => throw new ConnectFailedException(); + private DataRequest DefaultNewDataRequest(DataRequestType type) => throw new InvalidNewDataRequestException(); + + private DataRequest DefaultNewDataRequest(GamingType type) => throw new InvalidNewDataRequestException(); } } diff --git a/Controller/RunTimeController.cs b/Controller/RunTimeController.cs index 8a0c7e1..ed17982 100644 --- a/Controller/RunTimeController.cs +++ b/Controller/RunTimeController.cs @@ -286,6 +286,40 @@ namespace Milimoe.FunGame.Core.Controller throw new ConnectFailedException(); } + /// + /// 基于本地已连接的Socket创建新的局内()数据请求 + /// 此方法是给 提供的 + /// + /// + /// + /// + public DataRequest NewDataRequest(GamingType GamingType) + { + if (_Socket != null) + { + DataRequest request = new(_Socket, GamingType); + return request; + } + throw new ConnectFailedException(); + } + + /// + /// 基于本地已连接的Socket创建长时间运行的局内()数据请求 + /// 此方法是给 提供的 + /// + /// + /// + /// + public DataRequest NewLongRunningDataRequest(GamingType GamingType) + { + if (_Socket != null) + { + DataRequest request = new(_Socket, GamingType, true); + return request; + } + throw new ConnectFailedException(); + } + /// /// 开始接收服务器信息 /// diff --git a/Controller/SocketHandlerController.cs b/Controller/SocketHandlerController.cs index fce84bc..f83ac96 100644 --- a/Controller/SocketHandlerController.cs +++ b/Controller/SocketHandlerController.cs @@ -21,7 +21,12 @@ namespace Milimoe.FunGame.Core.Controller /// /// Socket /// - private readonly Socket _Socket; + private readonly Socket? _Socket; + + /// + /// WebSocket + /// + private readonly HTTPClient? _WebSocket; /// /// 继承请调用base构造 @@ -37,6 +42,20 @@ namespace Milimoe.FunGame.Core.Controller else throw new SocketCreateReceivingException(); } + /// + /// 继承请调用base构造 + /// + /// Socket + public SocketHandlerController(HTTPClient? websocket) + { + if (websocket != null) + { + _WebSocket = websocket; + websocket.BindEvent(new SocketManager.SocketReceiveHandler(SocketHandler)); + } + else throw new SocketCreateReceivingException(); + } + /// /// 继承请重写此方法 /// @@ -71,7 +90,8 @@ namespace Milimoe.FunGame.Core.Controller { if (Disposing) { - _Socket.BindEvent(new SocketManager.SocketReceiveHandler(SocketHandler), true); + _Socket?.BindEvent(new SocketManager.SocketReceiveHandler(SocketHandler), true); + _WebSocket?.BindEvent(new SocketManager.SocketReceiveHandler(SocketHandler), true); } } IsDisposed = true; diff --git a/Docs/FunGame.Core.xml b/Docs/FunGame.Core.xml index 9311262..47f76f0 100644 --- a/Docs/FunGame.Core.xml +++ b/Docs/FunGame.Core.xml @@ -6,7 +6,8 @@ - 需要配合Milimoe.FunGame.Core.Library.Constant.DataRequestType使用 + 需要配合 使用 + 如果是 的数据请求,则配合 使用 确保已添加对应的枚举 @@ -25,6 +26,11 @@ 私有的实现类 + + + 私有的实现类(这是局内请求的) + + 基于本地已连接的 创建新的数据请求 @@ -34,6 +40,37 @@ + + + 基于本地已连接的 创建新的数据请求 + 使用 中的 创建一个新的请求 + 此数据请求只能调用异步方法 请求数据 + + + + + + + + 基于本地已连接的 创建新的局内()数据请求 + 使用 中的 创建一个新的请求 + 此构造方法是给 提供的 + + + + + + + + 基于本地已连接的 创建新的局内()数据请求 + 使用 中的 创建一个新的请求 + 此构造方法是给 提供的 + 此数据请求只能调用异步方法 请求数据 + + + + + 添加数据 @@ -49,8 +86,10 @@ 向服务器发送数据请求 + 警告: 调用此方法将抛出异常。请调用并等待 + @@ -66,6 +105,16 @@ + + + 常规数据请求 + + + + + 游戏局内请求 + + 反序列化Hashtable中的Json对象 @@ -204,64 +253,6 @@ 回滚事务 - - - 数据请求结果 - - - - - 详细错误信息 - - - - - 私有的实现类 - - - - - 基于本地已连接的 创建新的数据请求 - - - - - - - 添加数据 - - - - - - - 向服务器发送数据请求 - - - - - - 异步向服务器发送数据请求 - - - - - - 获取指定key对应的反序列化对象 - - - - - - - - 反序列化Hashtable中的Json对象 - - - - - - 获取角色实例 @@ -276,23 +267,11 @@ - 获取物品实例,默认返回Passiveitem 被动物品 需要强制转换 + 获取物品实例 Item类型 主动 或 被动 - - - 获取主动物品实例 - - - - - - 获取被动物品实例 - - - 获取房间实例 @@ -333,23 +312,11 @@ - 获取技能实例,默认返回PassiveSkill 被动技能 需要强制转换 + 获取技能实例 Skill类型 主动 或 被动 - - - 获取主动技能实例 - - - - - - 获取被动技能实例 - - - 获取用户实例 @@ -389,12 +356,12 @@ - + 适用于客户端的模组集 - + 适用于服务器的模组集 @@ -422,8 +389,8 @@ 传入 类型来创建指定端的模组读取器 - runtime = 时,仅读取 - runtime = 时,仅读取 + runtime = 时,仅读取 + runtime = 时,仅读取 都会读取 传入 类型来创建指定端的模组读取器 @@ -638,7 +605,7 @@ - 使用HMACSHA512算法加密 + 加密服务工具箱 @@ -665,6 +632,11 @@ 私钥 + + + 为字符串(string)添加扩展方法 + + 使用HMACSHA512算法加密 @@ -673,6 +645,11 @@ 秘钥 + + + 验证码服务工具箱 + + 生成验证码 @@ -702,6 +679,11 @@ + + + 多线程服务工具箱 + + 开启一个任务:调用返回对象的OnCompleted()方法可以执行后续操作,支持异步 @@ -1162,21 +1144,55 @@ 基于本地已连接的Socket创建长时间运行的数据请求 + + + 基于本地已连接的Socket创建新的局内数据请求 + + + + + 基于本地已连接的Socket创建长时间运行的局内数据请求 + + - 基于本地已连接的Socket创建新的数据请求 + 基于本地已连接的Socket创建新的数据请求 + 此方法只允许插件调用,如果是模组和模组服务器调用此方法将抛出异常 - + - 基于本地已连接的Socket创建长时间运行的数据请求 + 基于本地已连接的Socket创建长时间运行的数据请求 + 此方法只允许插件调用,如果是模组和模组服务器调用此方法将抛出异常 - + + + + + 基于本地已连接的Socket创建新的局内()数据请求 + 此方法是给 提供的,但是 也能调用 + 模组服务器调用此方法将抛出异常 + + + + + + + + + 基于本地已连接的Socket创建长时间运行的局内()数据请求 + 此方法是给 提供的,但是 也能调用 + 模组服务器调用此方法将抛出异常 + + + + + @@ -1357,6 +1373,24 @@ + + + 基于本地已连接的Socket创建新的局内()数据请求 + 此方法是给 提供的 + + + + + + + + 基于本地已连接的Socket创建长时间运行的局内()数据请求 + 此方法是给 提供的 + + + + + 开始接收服务器信息 @@ -1452,12 +1486,23 @@ Socket + + + WebSocket + + 继承请调用base构造 Socket + + + 继承请调用base构造 + + Socket + 继承请重写此方法 @@ -1497,6 +1542,251 @@ 触发关闭事件 + + + 实体的数字ID + + + + + 实体的唯一ID + + + + + 实体的名称 + + + + + 角色的名字 + + + + + 角色的昵称 + + + + + 角色所属的玩家 + + + + + 角色统计数据 + + + + + 魔法属性 + + + + + 角色定位1 + + + + + 角色定位2 + + + + + 角色定位3 + + + + + 角色评级 + + + + + 晋升点数 + + + + + 等级 + + + + + 经验值 + + + + + 基础生命值 + + + + + 生命值 + + + + + 基础魔法值 + + + + + 魔法值 + + + + + 能量 + + + + + 基础攻击力 + + + + + 攻击力 + + + + + 基础物理护甲 + + + + + 物理护甲 + + + + + 物理伤害减免(%) + + + + + 魔法抗性(%) + + + + + 物理穿透(%) + + + + + 魔法穿透(%) + + + + + 生命回复力 + + + + + 魔法回复力 + + + + + 能量回复力 + + + + + 基础力量 + + + + + 基础敏捷 + + + + + 基础智力 + + + + + 力量 + + + + + 敏捷 + + + + + 智力 + + + + + 力量成长值 + + + + + 敏捷成长值 + + + + + 智力成长值 + + + + + 速度 + + + + + 行动系数(%) + + + + + 加速系数(%) + + + + + 攻击距离 + + + + + 暴击率(%) + + + + + 暴击伤害 + + + + + 闪避率(%) + + + + + 角色的技能组 + + + + + 角色携带的物品 + + 记录 的生涯、赛季统计数据 @@ -1641,7 +1931,7 @@ 模组:必须继承基类: - 继承事件接口并实现其方法来使模组生效。例如继承: + 继承事件接口并实现其方法来使模组生效。例如继承: @@ -1655,6 +1945,21 @@ 地图:必须继承基类: + + + 角色:必须继承基类: + + + + + 技能:必须继承基类: + + + + + 物品:必须继承基类: + + 必须继承基类: @@ -1772,7 +2077,7 @@ 必须重写此方法,游戏的主要逻辑写在这里面 - 此方法会在 时调用 + 此方法会在 时调用 @@ -1828,32 +2133,70 @@ - 模组的依赖集合 + 模组的依赖集合 + (地图名称()的数组) + (角色模组名称()的数组) + (技能模组名称()的数组) + (物品模组名称()的数组) - 模组的依赖集合 + 模组的依赖集合 + (地图名称()的数组) + (角色模组名称()的数组) + (技能模组名称()的数组) + (物品模组名称()的数组) - + 模组所使用的地图组 - + 模组所使用的角色组 - + + + 模组所使用的技能组 + + + 模组所使用的物品组 + + + 实际使用的地图组对象 + 请使用 自动填充,不要自己添加 + + + + + 实际使用的角色组对象 + 请使用 自动填充,不要自己添加 + + - 模组所使用的技能组 + 实际使用的技能组对象 + 请使用 自动填充,不要自己添加 + + + + + 实际使用的物品组对象 + 请使用 自动填充,不要自己添加 + + + + + 获得所有的依赖项 + 此方法会自动填充 @@ -1904,7 +2247,7 @@ - + @@ -2586,13 +2929,20 @@ 游戏的参数 - + + + 此实例所属的玩家 + + + 传入游戏所需的参数,构造一个Gaming实例 + + @@ -2604,7 +2954,6 @@ 消息类型 接收到的数据 - 底层会将哈希表中的数据发送给服务器 @@ -2650,7 +2999,7 @@ - + 从modules目录加载所有模组 @@ -2662,7 +3011,7 @@ - + 从modules目录加载所有适用于服务器的模组 @@ -2682,6 +3031,15 @@ + + + 添加构造好的模组类实例到字典中 + + 加载的类型 + 循环程序集的类型 + 实例的字典 + 加载时触发的检查方法,返回false不添加 + 默认的序列化选项 diff --git a/Entity/BaseEntity.cs b/Entity/BaseEntity.cs index 59bcc0a..b8f15a3 100644 --- a/Entity/BaseEntity.cs +++ b/Entity/BaseEntity.cs @@ -4,8 +4,19 @@ namespace Milimoe.FunGame.Core.Entity { public abstract class BaseEntity : IBaseEntity { + /// + /// 实体的数字ID + /// public virtual long Id { get; set; } = 0; + + /// + /// 实体的唯一ID + /// public virtual Guid Guid { get; set; } = Guid.Empty; + + /// + /// 实体的名称 + /// public virtual string Name { get; set; } = ""; public abstract bool Equals(IBaseEntity? other); diff --git a/Entity/Character/Character.cs b/Entity/Character/Character.cs index 81d7a51..c14d576 100644 --- a/Entity/Character/Character.cs +++ b/Entity/Character/Character.cs @@ -1,56 +1,239 @@ -using System.Collections; -using Milimoe.FunGame.Core.Interface.Entity; +using Milimoe.FunGame.Core.Interface.Entity; using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Core.Entity { - public class Character : BaseEntity + public class Character : BaseEntity, ICopyable { + /// + /// 角色的名字 + /// public string FirstName { get; set; } = ""; + + /// + /// 角色的昵称 + /// public string NickName { get; set; } = ""; + + /// + /// 角色所属的玩家 + /// public User? User { get; set; } = null; - public CharacterStatistics? Statistics { get; set; } = null; // 角色统计数据 - public MagicType MagicType { get; set; } // 魔法属性 - public RoleType FirstRoleType { get; set; } // 角色定位1 - public RoleType SecondRoleType { get; set; } // 角色定位2 - public RoleType ThirdRoleType { get; set; } // 角色定位3 - public RoleRating RoleRating { get; set; } // 角色评级 - public int Promotion { get; set; } // 晋升点数 + + /// + /// 角色统计数据 + /// + public CharacterStatistics? Statistics { get; set; } = null; + + /// + /// 魔法属性 + /// + public MagicType MagicType { get; set; } = MagicType.Particle; + + /// + /// 角色定位1 + /// + public RoleType FirstRoleType { get; set; } = RoleType.Core; + + /// + /// 角色定位2 + /// + public RoleType SecondRoleType { get; set; } = RoleType.Guardian; + + /// + /// 角色定位3 + /// + public RoleType ThirdRoleType { get; set; } = RoleType.Vanguard; + + /// + /// 角色评级 + /// + public RoleRating RoleRating { get; set; } = RoleRating.E; + + /// + /// 晋升点数 + /// + public int Promotion { get; set; } = 0; + + /// + /// 等级 + /// public int Level { get; set; } = 1; - public decimal EXP { get; set; } // 经验值 - public decimal BaseHP { get; set; } // 基础生命值 - public decimal HP { get; set; } - public decimal BaseMP { get; set; } // 基础魔法值 - public decimal MP { get; set; } - public decimal EP { get; set; } - public decimal BaseATK { get; set; } // 基础攻击力 - public decimal ATK { get; set; } - public decimal DEF { get; set; } // Defence 物理护甲 - public decimal PDR { get; set; } // Physical Damage Reduction 物理伤害减免 - public decimal MDF { get; set; } // Magical Defence 魔法抗性 - public decimal PhysicalPenetration { get; set; } // Physical Penetration 物理穿透 - public decimal MagicalPenetration { get; set; } // Magical Penetration 魔法穿透 - public decimal HR { get; set; } = 0; // Health Regeneration 生命回复力 - public decimal MR { get; set; } = 0; // Mana Regeneration 魔法回复力 - public decimal ER { get; set; } = 0; // Eenergy Regeneration 能量回复力 - public decimal BaseSTR { get; set; } // 基础力量 - public decimal BaseAGI { get; set; } // 基础敏捷 - public decimal BaseINT { get; set; } // 基础智力 - public decimal STR { get; set; } // Strength 力量 - public decimal AGI { get; set; } // Agility 敏捷 - public decimal INT { get; set; } // Intelligence 智力 - public decimal STRGrowth { get; set; } // Strength Growth 力量成长值 - public decimal AGIGrowth { get; set; } // Agility Growth 敏捷成长值 - public decimal INTGrowth { get; set; } // Intelligence Growth 智力成长值 - public decimal SPD { get; set; } // Speed 速度 - public decimal ActionCoefficient { get; set; } // Action Coefficient 行动系数 - public decimal AccelerationCoefficient { get; set; } // Acceleration Coefficient 加速系数 - public decimal ATR { get; set; } // Attack Range 攻击距离 - public decimal CritRate { get; set; } = 0.05M; // 暴击率 - public decimal CritDMG { get; set; } = 1.25M; // 暴击伤害 - public decimal EvadeRate { get; set; } = 0.05M; // 闪避率 - public Hashtable Skills { get; set; } = []; - public Hashtable Items { get; set; } = []; + + /// + /// 经验值 + /// + public decimal EXP { get; set; } = 0; + + /// + /// 基础生命值 + /// + public decimal BaseHP { get; set; } = 0; + + /// + /// 生命值 + /// + public decimal HP { get; set; } = 0; + + /// + /// 基础魔法值 + /// + public decimal BaseMP { get; set; } = 0; + + /// + /// 魔法值 + /// + public decimal MP { get; set; } = 0; + + /// + /// 能量 + /// + public decimal EP { get; set; } = 0; + + /// + /// 基础攻击力 + /// + public decimal BaseATK { get; set; } = 0; + + /// + /// 攻击力 + /// + public decimal ATK { get; set; } = 0; + + /// + /// 基础物理护甲 + /// + public decimal BaseDEF { get; set; } = 0; + + /// + /// 物理护甲 + /// + public decimal DEF { get; set; } = 0; + + /// + /// 物理伤害减免(%) + /// + public decimal PDR { get; set; } = 0; + + /// + /// 魔法抗性(%) + /// + public decimal MDF { get; set; } = 0; + + /// + /// 物理穿透(%) + /// + public decimal PhysicalPenetration { get; set; } = 0; + + /// + /// 魔法穿透(%) + /// + public decimal MagicalPenetration { get; set; } = 0; + + /// + /// 生命回复力 + /// + public decimal HR { get; set; } = 0; + + /// + /// 魔法回复力 + /// + public decimal MR { get; set; } = 0; + + /// + /// 能量回复力 + /// + public decimal ER { get; set; } = 0; + + /// + /// 基础力量 + /// + public decimal BaseSTR { get; set; } = 0; + + /// + /// 基础敏捷 + /// + public decimal BaseAGI { get; set; } = 0; + + /// + /// 基础智力 + /// + public decimal BaseINT { get; set; } = 0; + + /// + /// 力量 + /// + public decimal STR { get; set; } = 0; + + /// + /// 敏捷 + /// + public decimal AGI { get; set; } = 0; + + /// + /// 智力 + /// + public decimal INT { get; set; } = 0; + + /// + /// 力量成长值 + /// + public decimal STRGrowth { get; set; } = 0; + + /// + /// 敏捷成长值 + /// + public decimal AGIGrowth { get; set; } = 0; + + /// + /// 智力成长值 + /// + public decimal INTGrowth { get; set; } = 0; + + /// + /// 速度 + /// + public decimal SPD { get; set; } = 0; + + /// + /// 行动系数(%) + /// + public decimal ActionCoefficient { get; set; } = 0; + + /// + /// 加速系数(%) + /// + public decimal AccelerationCoefficient { get; set; } = 0; + + /// + /// 攻击距离 + /// + public decimal ATR { get; set; } = 0; + + /// + /// 暴击率(%) + /// + public decimal CritRate { get; set; } = 0.05M; + + /// + /// 暴击伤害 + /// + public decimal CritDMG { get; set; } = 1.25M; + + /// + /// 闪避率(%) + /// + public decimal EvadeRate { get; set; } = 0.05M; + + /// + /// 角色的技能组 + /// + public Dictionary Skills { get; set; } = []; + + /// + /// 角色携带的物品 + /// + public Dictionary Items { get; set; } = []; protected Character() { @@ -62,9 +245,89 @@ namespace Milimoe.FunGame.Core.Entity return new(); } + public void SetDefaultBase() + { + HP = BaseHP; + MP = BaseMP; + ATK = BaseATK; + DEF = BaseDEF; + STR = BaseSTR; + AGI = BaseAGI; + INT = BaseINT; + } + public override bool Equals(IBaseEntity? other) { return other is Character c && c.Name == Name; } + + public override string ToString() + { + string str = (Name + " " + FirstName).Trim(); + if (NickName != "") + { + if (str != "") str += ", "; + str += NickName; + } + if (User != null && User.Username != "") + { + str += "(" + User.Username + ")"; + } + return str; + } + + public Character Copy() + { + Character c = new() + { + Name = Name, + FirstName = FirstName, + NickName = NickName, + Statistics = Statistics, + MagicType = MagicType, + FirstRoleType = FirstRoleType, + SecondRoleType = SecondRoleType, + ThirdRoleType = ThirdRoleType, + RoleRating = RoleRating, + Promotion = Promotion, + Level = Level, + EXP = EXP, + BaseHP = BaseHP, + HP = HP, + BaseMP = BaseMP, + MP = MP, + EP = EP, + BaseATK = BaseATK, + ATK = ATK, + BaseDEF = BaseDEF, + DEF = DEF, + PDR = PDR, + MDF = MDF, + PhysicalPenetration = PhysicalPenetration, + MagicalPenetration = MagicalPenetration, + HR = HR, + MR = MR, + ER = ER, + BaseSTR = BaseSTR, + BaseAGI = BaseAGI, + BaseINT = BaseINT, + STR = STR, + AGI = AGI, + INT = INT, + STRGrowth = STRGrowth, + AGIGrowth = AGIGrowth, + INTGrowth = INTGrowth, + SPD = SPD, + ActionCoefficient = ActionCoefficient, + AccelerationCoefficient = AccelerationCoefficient, + ATR = ATR, + CritRate = CritRate, + CritDMG = CritDMG, + EvadeRate = EvadeRate, + Skills = Skills, + Items = Items, + }; + return c; + } } } diff --git a/Entity/Item/ActiveItem.cs b/Entity/Item/ActiveItem.cs deleted file mode 100644 index 69a3d06..0000000 --- a/Entity/Item/ActiveItem.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Milimoe.FunGame.Core.Interface.Entity; - -namespace Milimoe.FunGame.Core.Entity -{ - public class ActiveItem : Item - { - public ActiveSkill? Skill { get; set; } = null; - - protected ActiveItem() - { - Active = true; - } - - protected ActiveItem(int id, string name) - { - Active = true; - Id = id; - Name = name; - } - - internal static ActiveItem GetInstance() - { - return new(); - } - - internal static ActiveItem GetInstance(int id, string name) - { - return new(id, name); - } - - public override bool Equals(IBaseEntity? other) - { - return other is ActiveItem i && i.Name == Name; - } - } -} diff --git a/Entity/Item/Item.cs b/Entity/Item/Item.cs index 8be28a7..d0bd868 100644 --- a/Entity/Item/Item.cs +++ b/Entity/Item/Item.cs @@ -1,8 +1,9 @@ -using Milimoe.FunGame.Core.Interface.Entity; +using System; +using Milimoe.FunGame.Core.Interface.Entity; namespace Milimoe.FunGame.Core.Entity { - public abstract class Item : BaseEntity, IItem + public class Item : BaseEntity, IItem { public string Describe { get; set; } = ""; public decimal Price { get; set; } @@ -10,5 +11,16 @@ namespace Milimoe.FunGame.Core.Entity public bool Active { get; set; } public bool Enable { get; set; } public Character? Character { get; set; } = null; + public Skill? Skill { get; set; } = null; + + internal Item(bool active = false) + { + Active = active; + } + + public override bool Equals(IBaseEntity? other) + { + return other is Item c && c.Name == Name; + } } } diff --git a/Entity/Item/PassiveItem.cs b/Entity/Item/PassiveItem.cs deleted file mode 100644 index 5af2c25..0000000 --- a/Entity/Item/PassiveItem.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Milimoe.FunGame.Core.Interface.Entity; - -namespace Milimoe.FunGame.Core.Entity -{ - public class PassiveItem : Item - { - public PassiveSkill? Skill { get; set; } = null; - - protected PassiveItem() - { - Active = false; - } - - protected PassiveItem(int id, string name) - { - Active = false; - Id = id; - Name = name; - } - - internal static PassiveItem GetInstance() - { - return new(); - } - - internal static PassiveItem GetInstance(int id, string name) - { - return new(id, name); - } - - public override bool Equals(IBaseEntity? other) - { - return other is PassiveItem i && i.Name == Name; - } - } -} diff --git a/Entity/Skill/ActiveSkill.cs b/Entity/Skill/ActiveSkill.cs deleted file mode 100644 index 9981dbb..0000000 --- a/Entity/Skill/ActiveSkill.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Milimoe.FunGame.Core.Interface.Entity; - -namespace Milimoe.FunGame.Core.Entity -{ - public class ActiveSkill : Skill - { - public decimal MP { get; set; } = 0; - public decimal EP { get; set; } = 0; - public decimal Reference1 { get; set; } = 0; - public decimal Reference2 { get; set; } = 0; - public decimal Reference3 { get; set; } = 0; - public decimal Reference4 { get; set; } = 0; - public decimal Reference5 { get; set; } = 0; - public decimal Reference6 { get; set; } = 0; - public decimal Reference7 { get; set; } = 0; - public decimal Reference8 { get; set; } = 0; - public decimal Reference9 { get; set; } = 0; - public decimal Reference10 { get; set; } = 0; - - protected ActiveSkill() - { - Active = true; - } - - internal static ActiveSkill GetInstance() - { - return new(); - } - - public override bool Equals(IBaseEntity? other) - { - return other is ActiveSkill s && s.Name == Name; - } - } -} diff --git a/Entity/Skill/PassiveSkill.cs b/Entity/Skill/PassiveSkill.cs deleted file mode 100644 index 2dec9f0..0000000 --- a/Entity/Skill/PassiveSkill.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Milimoe.FunGame.Core.Interface.Entity; - -namespace Milimoe.FunGame.Core.Entity -{ - public class PassiveSkill : Skill - { - public decimal Reference1 { get; set; } = 0; - public decimal Reference2 { get; set; } = 0; - public decimal Reference3 { get; set; } = 0; - public decimal Reference4 { get; set; } = 0; - public decimal Reference5 { get; set; } = 0; - public decimal Reference6 { get; set; } = 0; - public decimal Reference7 { get; set; } = 0; - public decimal Reference8 { get; set; } = 0; - public decimal Reference9 { get; set; } = 0; - public decimal Reference10 { get; set; } = 0; - - protected PassiveSkill() - { - Active = false; - } - - internal static PassiveSkill GetInstance() - { - return new(); - } - - public override bool Equals(IBaseEntity? other) - { - return other is PassiveSkill s && s.Name == Name; - } - } -} diff --git a/Entity/Skill/Skill.cs b/Entity/Skill/Skill.cs index db23e80..ef5b7e4 100644 --- a/Entity/Skill/Skill.cs +++ b/Entity/Skill/Skill.cs @@ -1,13 +1,24 @@ -using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Interface.Entity; +using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Core.Entity { - public abstract class Skill : BaseEntity + public class Skill : BaseEntity, IActiveEnable { public string Describe { get; set; } = ""; public char Key { get; set; } public bool Active { get; set; } public bool Enable { get; set; } public MagicType MagicType { get; set; } + + internal Skill(bool active = false) + { + Active = active; + } + + public override bool Equals(IBaseEntity? other) + { + return other is Skill c && c.Name == Name; + } } } diff --git a/Interface/Base/Addons/IGameModuleServer.cs b/Interface/Base/Addons/IGameModuleServer.cs index 118c33a..4fdce63 100644 --- a/Interface/Base/Addons/IGameModuleServer.cs +++ b/Interface/Base/Addons/IGameModuleServer.cs @@ -7,7 +7,7 @@ namespace Milimoe.FunGame.Core.Interface.Addons { public interface IGameModuleServer : IAddon, IAddonController, IGameModuleDepend { - public bool StartServer(string GameModule, Room Room, List Users, IServerModel RoomMasterServerModel, Dictionary OthersServerModel, params object[] args); + public bool StartServer(string GameModule, Room Room, List Users, IServerModel RoomMasterServerModel, Dictionary ServerModels, params object[] args); public Hashtable GamingMessageHandler(string username, GamingType type, Hashtable data); } diff --git a/Interface/Base/HTTP/IHTTPClient.cs b/Interface/Base/HTTP/IHTTPClient.cs index d86dccc..8101dd1 100644 --- a/Interface/Base/HTTP/IHTTPClient.cs +++ b/Interface/Base/HTTP/IHTTPClient.cs @@ -8,5 +8,6 @@ namespace Milimoe.FunGame.Core.Interface.HTTP { public Task Send(SocketMessageType type, params object[] objs); public SocketObject SocketObject_Handler(SocketObject objs); + public void BindEvent(Delegate method, bool remove = false); } } diff --git a/Interface/Base/IServerModel.cs b/Interface/Base/IServerModel.cs index 66b90ae..d993e9d 100644 --- a/Interface/Base/IServerModel.cs +++ b/Interface/Base/IServerModel.cs @@ -1,5 +1,4 @@ using Milimoe.FunGame.Core.Entity; -using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Common.Network; using Milimoe.FunGame.Core.Library.Constant; @@ -59,7 +58,7 @@ namespace Milimoe.FunGame.Core.Interface.Base /// /// 开始接收客户端消息 - /// 请勿在 中调用此方法 + /// 请勿在 中调用此方法 /// /// /// @@ -67,7 +66,7 @@ namespace Milimoe.FunGame.Core.Interface.Base /// /// 启动对客户端的监听 - /// 请勿在 中调用此方法 + /// 请勿在 中调用此方法 /// public void Start(); } diff --git a/Interface/Base/Sockets/IClientSocket.cs b/Interface/Base/Sockets/IClientSocket.cs index 46c526b..7b621a4 100644 --- a/Interface/Base/Sockets/IClientSocket.cs +++ b/Interface/Base/Sockets/IClientSocket.cs @@ -8,6 +8,6 @@ namespace Milimoe.FunGame.Core.Interface.Sockets public void StartReceiving(Task t); public SocketResult Send(SocketMessageType type, params object[] objs); public Library.Common.Network.SocketObject[] Receive(); - public void BindEvent(Delegate Method, bool Remove = false); + public void BindEvent(Delegate method, bool remove = false); } } diff --git a/Interface/Entity/Base/ICopyable.cs b/Interface/Entity/Base/ICopyable.cs new file mode 100644 index 0000000..a1e5b39 --- /dev/null +++ b/Interface/Entity/Base/ICopyable.cs @@ -0,0 +1,7 @@ +namespace Milimoe.FunGame.Core.Interface.Entity +{ + public interface ICopyable + { + public T Copy(); + } +} diff --git a/Interface/Event/GamingEventHandlers.cs b/Interface/Event/GamingEventHandlers.cs index 82d3262..2f885f5 100644 --- a/Interface/Event/GamingEventHandlers.cs +++ b/Interface/Event/GamingEventHandlers.cs @@ -9,269 +9,146 @@ namespace Milimoe.FunGame.Core.Interface /// public interface IGamingEventHandler { - public delegate void BeforeEventHandler(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public delegate void AfterEventHandler(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public delegate void SucceedEventHandler(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public delegate void FailedEventHandler(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public delegate void GamingEventHandler(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingConnectEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingConnect; - public event AfterEventHandler? AfterGamingConnect; - public event SucceedEventHandler? SucceedGamingConnect; - public event FailedEventHandler? FailedGamingConnect; + public event GamingEventHandler? GamingConnect; - public void OnBeforeGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingDisconnectEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingDisconnect; - public event AfterEventHandler? AfterGamingDisconnect; - public event SucceedEventHandler? SucceedGamingDisconnect; - public event FailedEventHandler? FailedGamingDisconnect; + public event GamingEventHandler? GamingDisconnect; - public void OnBeforeGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingReconnectEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingReconnect; - public event AfterEventHandler? AfterGamingReconnect; - public event SucceedEventHandler? SucceedGamingReconnect; - public event FailedEventHandler? FailedGamingReconnect; + public event GamingEventHandler? GamingReconnect; - public void OnBeforeGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingBanCharacterEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingBanCharacter; - public event AfterEventHandler? AfterGamingBanCharacter; - public event SucceedEventHandler? SucceedGamingBanCharacter; - public event FailedEventHandler? FailedGamingBanCharacter; + public event GamingEventHandler? GamingBanCharacter; - public void OnBeforeGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingPickCharacterEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingPickCharacter; - public event AfterEventHandler? AfterGamingPickCharacter; - public event SucceedEventHandler? SucceedGamingPickCharacter; - public event FailedEventHandler? FailedGamingPickCharacter; + public event GamingEventHandler? GamingPickCharacter; - public void OnBeforeGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingRandomEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingRandom; - public event AfterEventHandler? AfterGamingRandom; - public event SucceedEventHandler? SucceedGamingRandom; - public event FailedEventHandler? FailedGamingRandom; + public event GamingEventHandler? GamingRandom; - public void OnBeforeGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingRoundEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingRound; - public event AfterEventHandler? AfterGamingRound; - public event SucceedEventHandler? SucceedGamingRound; - public event FailedEventHandler? FailedGamingRound; + public event GamingEventHandler? GamingRound; - public void OnBeforeGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingLevelUpEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingLevelUp; - public event AfterEventHandler? AfterGamingLevelUp; - public event SucceedEventHandler? SucceedGamingLevelUp; - public event FailedEventHandler? FailedGamingLevelUp; + public event GamingEventHandler? GamingLevelUp; - public void OnBeforeGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingMoveEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingMove; - public event AfterEventHandler? AfterGamingMove; - public event SucceedEventHandler? SucceedGamingMove; - public event FailedEventHandler? FailedGamingMove; + public event GamingEventHandler? GamingMove; - public void OnBeforeGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingAttackEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingAttack; - public event AfterEventHandler? AfterGamingAttack; - public event SucceedEventHandler? SucceedGamingAttack; - public event FailedEventHandler? FailedGamingAttack; + public event GamingEventHandler? GamingAttack; - public void OnBeforeGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingSkillEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingSkill; - public event AfterEventHandler? AfterGamingSkill; - public event SucceedEventHandler? SucceedGamingSkill; - public event FailedEventHandler? FailedGamingSkill; + public event GamingEventHandler? GamingSkill; - public void OnBeforeGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingItemEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingItem; - public event AfterEventHandler? AfterGamingItem; - public event SucceedEventHandler? SucceedGamingItem; - public event FailedEventHandler? FailedGamingItem; + public event GamingEventHandler? GamingItem; - public void OnBeforeGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingItemEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingMagicEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingMagic; - public event AfterEventHandler? AfterGamingMagic; - public event SucceedEventHandler? SucceedGamingMagic; - public event FailedEventHandler? FailedGamingMagic; + public event GamingEventHandler? GamingMagic; - public void OnBeforeGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingBuyEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingBuy; - public event AfterEventHandler? AfterGamingBuy; - public event SucceedEventHandler? SucceedGamingBuy; - public event FailedEventHandler? FailedGamingBuy; + public event GamingEventHandler? GamingBuy; - public void OnBeforeGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingSuperSkillEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingSuperSkill; - public event AfterEventHandler? AfterGamingSuperSkill; - public event SucceedEventHandler? SucceedGamingSuperSkill; - public event FailedEventHandler? FailedGamingSuperSkill; + public event GamingEventHandler? GamingSuperSkill; - public void OnBeforeGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingPauseEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingPause; - public event AfterEventHandler? AfterGamingPause; - public event SucceedEventHandler? SucceedGamingPause; - public event FailedEventHandler? FailedGamingPause; + public event GamingEventHandler? GamingPause; - public void OnBeforeGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingUnpauseEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingUnpause; - public event AfterEventHandler? AfterGamingUnpause; - public event SucceedEventHandler? SucceedGamingUnpause; - public event FailedEventHandler? FailedGamingUnpause; + public event GamingEventHandler? GamingUnpause; - public void OnBeforeGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingSurrenderEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingSurrender; - public event AfterEventHandler? AfterGamingSurrender; - public event SucceedEventHandler? SucceedGamingSurrender; - public event FailedEventHandler? FailedGamingSurrender; + public event GamingEventHandler? GamingSurrender; - public void OnBeforeGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingUpdateInfoEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingUpdateInfo; - public event AfterEventHandler? AfterGamingUpdateInfo; - public event SucceedEventHandler? SucceedGamingUpdateInfo; - public event FailedEventHandler? FailedGamingUpdateInfo; + public event GamingEventHandler? GamingUpdateInfo; - public void OnBeforeGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingPunishEventHandler : IGamingEventHandler { - public event BeforeEventHandler? BeforeGamingPunish; - public event AfterEventHandler? AfterGamingPunish; - public event SucceedEventHandler? SucceedGamingPunish; - public event FailedEventHandler? FailedGamingPunish; + public event GamingEventHandler? GamingPunish; - public void OnBeforeGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnAfterGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnSucceedGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void OnFailedGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void OnGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data); } } diff --git a/Interface/Event/GamingEvents.cs b/Interface/Event/GamingEvents.cs index 36fc350..4061ae8 100644 --- a/Interface/Event/GamingEvents.cs +++ b/Interface/Event/GamingEvents.cs @@ -6,161 +6,101 @@ namespace Milimoe.FunGame.Core.Interface { public interface IGamingConnectEvent { - public void BeforeGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingConnectEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingDisconnectEvent { - public void BeforeGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingReconnectEvent { - public void BeforeGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingBanCharacterEvent { - public void BeforeGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingPickCharacterEvent { - public void BeforeGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingRandomEvent { - public void BeforeGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingRandomEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingRoundEvent { - public void BeforeGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingRoundEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingLevelUpEvent { - public void BeforeGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingMoveEvent { - public void BeforeGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingMoveEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingAttackEvent { - public void BeforeGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingAttackEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingSkillEvent { - public void BeforeGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingSkillEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingItemEvent { - public void BeforeGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingItemEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingMagicEvent { - public void BeforeGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingMagicEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingBuyEvent { - public void BeforeGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingBuyEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingSuperSkillEvent { - public void BeforeGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingPauseEvent { - public void BeforeGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingPauseEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingUnpauseEvent { - public void BeforeGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingSurrenderEvent { - public void BeforeGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingUpdateInfoEvent { - public void BeforeGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data); } public interface IGamingPunishEvent { - public void BeforeGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void AfterGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void SucceedGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); - public void FailedGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result); + public void GamingPunishEvent(object sender, GamingEventArgs e, Hashtable data); } } diff --git a/Library/Common/Addon/Example/ExampleGameModule.cs b/Library/Common/Addon/Example/ExampleGameModule.cs index a82ecf5..096e296 100644 --- a/Library/Common/Addon/Example/ExampleGameModule.cs +++ b/Library/Common/Addon/Example/ExampleGameModule.cs @@ -1,4 +1,5 @@ using System.Collections; +using Milimoe.FunGame.Core.Api.Transmittal; using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Interface; @@ -7,7 +8,6 @@ using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Model; -// 此演示包含GameModule、GameModuleServer、GameMap namespace Milimoe.FunGame.Core.Library.Common.Addon.Example { /// @@ -18,17 +18,17 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon.Example public static GameModuleDepend GameModuleDepend => _depends; private static readonly string[] Maps = ["Example GameMap"]; - private static readonly string[] Characters = []; - private static readonly string[] Items = []; - private static readonly string[] Skills = []; - private static readonly GameModuleDepend _depends = new(Maps, Characters, Items, Skills); + private static readonly string[] Characters = ["Example CharacterModule"]; + private static readonly string[] Skills = ["Example SkillModule"]; + private static readonly string[] Items = ["Example ItemModule"]; + private static readonly GameModuleDepend _depends = new(Maps, Characters, Skills, Items); } /// /// 模组:必须继承基类: - /// 继承事件接口并实现其方法来使模组生效。例如继承: + /// 继承事件接口并实现其方法来使模组生效。例如继承: /// - public class ExampleGameModule : GameModule, IGamingConnectEvent + public class ExampleGameModule : GameModule, IGamingUpdateInfoEvent { public override string Name => "FunGame Example GameModule"; @@ -38,7 +38,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon.Example public override string Author => "FunGamer"; - public override string DefaultMap => GameModuleDepend.Maps.Length > 0 ? GameModuleDepend.Maps[0] : ""; + public override string DefaultMap => GameModuleDepend.MapsDepend.Length > 0 ? GameModuleDepend.MapsDepend[0] : ""; public override GameModuleDepend GameModuleDepend => ExampleGameModuleConstant.GameModuleDepend; @@ -66,37 +66,28 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon.Example // 如果没有,则不需要重写此方法 } - public void BeforeGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void GamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data) { - // 此方法预处理攻击消息 - // 如果这里将Cancel设置为true,那么这个方法结束后,后续的事件就会终止 - e.Cancel = true; - } - - public void AfterGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - - } - - public void SucceedGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - - } - - public void FailedGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - _ = DiscountGameModuleServer(); - } - - public async Task DiscountGameModuleServer() - { - // 这是一个主动请求服务器的示例: - Api.Transmittal.DataRequest request = Controller.NewDataRequest(DataRequestType.Gaming); - request.AddRequestData("type", GamingType.Disconnect); - if (await request.SendRequestAsync() == RequestResult.Success) + // 在下方的Server示例中,服务器发来的data中,包含check字符串,因此客户端要主动发起确认连接的请求。 + if (data.ContainsKey("info_type")) { - string msg = request.GetResult("msg") ?? string.Empty; - Controller.WriteLine(msg); + // 反序列化得到指定key的值 + string info_type = DataRequest.GetHashtableJsonObject(data, "info_type") ?? ""; + if (info_type == "check") + { + Guid token = DataRequest.GetHashtableJsonObject(data, "connect_token"); + // 发起连接确认请求 + DataRequest request = Controller.NewDataRequest(GamingType.Connect); + // 传递参数 + request.AddRequestData("username", ((Gaming)sender).CurrentUser.Username); + request.AddRequestData("connect_token", token); + if (request.SendRequest() == RequestResult.Success) + { + string msg = request.GetResult("msg") ?? ""; + Controller.WriteLine(msg); + } + request.Dispose(); + } } } } @@ -115,41 +106,61 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon.Example public override string Author => "FunGamer"; - public override string DefaultMap => GameModuleDepend.Maps.Length > 0 ? GameModuleDepend.Maps.First() : ""; + public override string DefaultMap => GameModuleDepend.MapsDepend.Length > 0 ? GameModuleDepend.MapsDepend.First() : ""; public override GameModuleDepend GameModuleDepend => ExampleGameModuleConstant.GameModuleDepend; protected Room Room = General.HallInstance; protected List Users = []; protected IServerModel? RoomMaster; - protected Dictionary Others = []; protected Dictionary All = []; - public override bool StartServer(string GameModule, Room Room, List Users, IServerModel RoomMasterServerModel, Dictionary OthersServerModel, params object[] Args) + public override bool StartServer(string GameModule, Room Room, List Users, IServerModel RoomMasterServerModel, Dictionary ServerModels, params object[] Args) { // 将参数转为本地属性 this.Room = Room; this.Users = Users; RoomMaster = RoomMasterServerModel; - Others = OthersServerModel; - if (RoomMaster != null) - { - // 这里获得了每名玩家的服务线程,保存为一个字典 - All = OthersServerModel.ToDictionary(k => k.Key, v => v.Value); - All.Add(RoomMaster.User.Username, RoomMaster); - } + All = ServerModels; // 创建一个线程执行Test() TaskUtility.NewTask(Test).OnError(Controller.Error); return true; } private readonly List ConnectedUser = []; + private readonly Dictionary UserData = []; private async Task Test() { - // 通常,我们可以对客户端的连接状态进行确认,此方法展示如何确认客户端的连接 Controller.WriteLine("欢迎各位玩家进入房间 " + Room.Roomid + " 。"); - SendAll(SocketMessageType.Gaming, GamingType.Connect); + + // 通常,我们可以对客户端的连接状态进行确认,此方法展示如何确认客户端的连接 + // 有两种确认的方式,1是服务器主动确认,2是客户端发起确认 + // 在FunGame项目中,建议永远使用客户端主动发起请求,因为服务器主动发起的实现难度较高 + // 下面的演示基于综合的两种情况:服务器主动发送通知,客户端收到后,发起确认 + // UpdateInfo是一个灵活的类型。如果发送check字符串,意味着服务器要求客户端发送确认 + Hashtable data = []; + data.Add("info_type", "check"); + + // 进阶示例:传递一个token,让客户端返回 + Guid token = Guid.NewGuid(); + data.Add("connect_token", token); + + // 我们保存到字典UserData中,这样可以方便跨方法检查变量 + foreach (string username in Users.Select(u => u.Username).Distinct()) + { + if (UserData.TryGetValue(username, out Hashtable? value)) + { + value.Add("connect_token", token); + } + else + { + UserData.Add(username, []); + UserData[username].Add("connect_token", token); + } + } + SendAllGamingMessage(GamingType.UpdateInfo, data); + // 新建一个线程等待所有玩家确认 while (true) { @@ -168,15 +179,46 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon.Example { case GamingType.Connect: // 编写处理“连接”命令的逻辑 - ConnectedUser.Add(Users.Where(u => u.Username == username).First()); - Controller.WriteLine(username + "已经连接。"); + // 如果需要处理客户端传递的参数:获取与客户端约定好的参数key对应的值 + string un = NetworkUtility.JsonDeserializeFromHashtable(data, "username") ?? ""; + Guid token = NetworkUtility.JsonDeserializeFromHashtable(data, "connect_token"); + if (un == username && UserData.TryGetValue(username, out Hashtable? value) && value != null && (value["connect_token"]?.Equals(token) ?? false)) + { + ConnectedUser.Add(Users.Where(u => u.Username == username).First()); + Controller.WriteLine(username + " 已经连接。"); + } + else Controller.WriteLine(username + " 确认连接失败!"); break; } return result; } - private void SendAll(SocketMessageType type, params object[] args) + // === 下面是一些常用的工具方法,用于服务器给客户端发送消息,可以直接添加到你的项目中 === // + + protected void SendAllGamingMessage(GamingType type, Hashtable data) + { + // 循环服务线程,向所有玩家发送局内消息 + foreach (IServerModel s in All.Values) + { + if (s != null && s.Socket != null) + { + s.Send(s.Socket, SocketMessageType.Gaming, type, data); + } + } + } + + protected void SendGamingMessage(string username, GamingType type, Hashtable data) + { + // 向指定玩家发送局内消息 + IServerModel s = All[username]; + if (s != null && s.Socket != null) + { + s.Send(s.Socket, SocketMessageType.Gaming, type, data); + } + } + + protected void SendAll(SocketMessageType type, params object[] args) { // 循环服务线程,向所有玩家发送消息 foreach (IServerModel s in All.Values) @@ -187,6 +229,16 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon.Example } } } + + protected void Send(string username, SocketMessageType type, params object[] args) + { + // 向指定玩家发送消息 + IServerModel s = All[username]; + if (s != null && s.Socket != null) + { + s.Send(s.Socket, type, args); + } + } } /// @@ -208,4 +260,94 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon.Example public override float Size => 4.0f; } + + /// + /// 角色:必须继承基类: + /// + public class ExampleCharacterModule : CharacterModule + { + public override string Name => "Example CharacterModule"; + + public override string Description => "My First CharacterModule"; + + public override string Version => "1.0.0"; + + public override string Author => "FunGamer"; + + public override List Characters + { + get + { + List list = []; + // 构建一个你想要的角色 + Character c = Factory.GetCharacter(); + c.Name = "Oshima"; + c.FirstName = "Shiya"; + c.NickName = "OSM"; + c.MagicType = MagicType.PurityNatural; + c.BaseHP = 30; + c.BaseSTR = 20; + c.BaseAGI = 10; + c.BaseINT = 5; + c.BaseATK = 100; + c.BaseDEF = 10; + list.Add(c); + return list; + } + } + } + + /// + /// 技能:必须继承基类: + /// + public class ExampleSkillModule : SkillModule + { + public override string Name => "Example SkillModule"; + + public override string Description => "My First SkillModule"; + + public override string Version => "1.0.0"; + + public override string Author => "FunGamer"; + + public override List Skills + { + get + { + List list = []; + Skill s = Factory.GetSkill(); + s.Name = "Example Skill"; + s.MagicType = MagicType.PurityNatural; + list.Add(s); + return list; + } + } + } + + /// + /// 物品:必须继承基类: + /// + public class ExampleItemModule : ItemModule + { + public override string Name => "Example ItemModule"; + + public override string Description => "My First ItemModule"; + + public override string Version => "1.0.0"; + + public override string Author => "FunGamer"; + + public override List Items + { + get + { + List list = []; + Item i = Factory.GetItem(); + i.Name = "Example Item"; + i.Price = 20; + list.Add(i); + return list; + } + } + } } diff --git a/Library/Common/Addon/GameModule.cs b/Library/Common/Addon/GameModule.cs index 7061242..f94528f 100644 --- a/Library/Common/Addon/GameModule.cs +++ b/Library/Common/Addon/GameModule.cs @@ -160,663 +160,243 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon if (this is IGamingConnectEvent) { IGamingConnectEvent bind = (IGamingConnectEvent)this; - BeforeGamingConnect += bind.BeforeGamingConnectEvent; - AfterGamingConnect += bind.AfterGamingConnectEvent; - SucceedGamingConnect += bind.SucceedGamingConnectEvent; - FailedGamingConnect += bind.FailedGamingConnectEvent; + GamingConnect += bind.GamingConnectEvent; } if (this is IGamingDisconnectEvent) { IGamingDisconnectEvent bind = (IGamingDisconnectEvent)this; - BeforeGamingDisconnect += bind.BeforeGamingDisconnectEvent; - AfterGamingDisconnect += bind.AfterGamingDisconnectEvent; - SucceedGamingDisconnect += bind.SucceedGamingDisconnectEvent; - FailedGamingDisconnect += bind.FailedGamingDisconnectEvent; + GamingDisconnect += bind.GamingDisconnectEvent; } if (this is IGamingReconnectEvent) { IGamingReconnectEvent bind = (IGamingReconnectEvent)this; - BeforeGamingReconnect += bind.BeforeGamingReconnectEvent; - AfterGamingReconnect += bind.AfterGamingReconnectEvent; - SucceedGamingReconnect += bind.SucceedGamingReconnectEvent; - FailedGamingReconnect += bind.FailedGamingReconnectEvent; + GamingReconnect += bind.GamingReconnectEvent; } if (this is IGamingBanCharacterEvent) { IGamingBanCharacterEvent bind = (IGamingBanCharacterEvent)this; - BeforeGamingBanCharacter += bind.BeforeGamingBanCharacterEvent; - AfterGamingBanCharacter += bind.AfterGamingBanCharacterEvent; - SucceedGamingBanCharacter += bind.SucceedGamingBanCharacterEvent; - FailedGamingBanCharacter += bind.FailedGamingBanCharacterEvent; + GamingBanCharacter += bind.GamingBanCharacterEvent; } if (this is IGamingPickCharacterEvent) { IGamingPickCharacterEvent bind = (IGamingPickCharacterEvent)this; - BeforeGamingPickCharacter += bind.BeforeGamingPickCharacterEvent; - AfterGamingPickCharacter += bind.AfterGamingPickCharacterEvent; - SucceedGamingPickCharacter += bind.SucceedGamingPickCharacterEvent; - FailedGamingPickCharacter += bind.FailedGamingPickCharacterEvent; + GamingPickCharacter += bind.GamingPickCharacterEvent; } if (this is IGamingRandomEvent) { IGamingRandomEvent bind = (IGamingRandomEvent)this; - BeforeGamingRandom += bind.BeforeGamingRandomEvent; - AfterGamingRandom += bind.AfterGamingRandomEvent; - SucceedGamingRandom += bind.SucceedGamingRandomEvent; - FailedGamingRandom += bind.FailedGamingRandomEvent; + GamingRandom += bind.GamingRandomEvent; } if (this is IGamingRoundEvent) { IGamingRoundEvent bind = (IGamingRoundEvent)this; - BeforeGamingRound += bind.BeforeGamingRoundEvent; - AfterGamingRound += bind.AfterGamingRoundEvent; - SucceedGamingRound += bind.SucceedGamingRoundEvent; - FailedGamingRound += bind.FailedGamingRoundEvent; + GamingRound += bind.GamingRoundEvent; } if (this is IGamingLevelUpEvent) { IGamingLevelUpEvent bind = (IGamingLevelUpEvent)this; - BeforeGamingLevelUp += bind.BeforeGamingLevelUpEvent; - AfterGamingLevelUp += bind.AfterGamingLevelUpEvent; - SucceedGamingLevelUp += bind.SucceedGamingLevelUpEvent; - FailedGamingLevelUp += bind.FailedGamingLevelUpEvent; + GamingLevelUp += bind.GamingLevelUpEvent; } if (this is IGamingMoveEvent) { IGamingMoveEvent bind = (IGamingMoveEvent)this; - BeforeGamingMove += bind.BeforeGamingMoveEvent; - AfterGamingMove += bind.AfterGamingMoveEvent; - SucceedGamingMove += bind.SucceedGamingMoveEvent; - FailedGamingMove += bind.FailedGamingMoveEvent; + GamingMove += bind.GamingMoveEvent; } if (this is IGamingAttackEvent) { IGamingAttackEvent bind = (IGamingAttackEvent)this; - BeforeGamingAttack += bind.BeforeGamingAttackEvent; - AfterGamingAttack += bind.AfterGamingAttackEvent; - SucceedGamingAttack += bind.SucceedGamingAttackEvent; - FailedGamingAttack += bind.FailedGamingAttackEvent; + GamingAttack += bind.GamingAttackEvent; } if (this is IGamingSkillEvent) { IGamingSkillEvent bind = (IGamingSkillEvent)this; - BeforeGamingSkill += bind.BeforeGamingSkillEvent; - AfterGamingSkill += bind.AfterGamingSkillEvent; - SucceedGamingSkill += bind.SucceedGamingSkillEvent; - FailedGamingSkill += bind.FailedGamingSkillEvent; + GamingSkill += bind.GamingSkillEvent; } if (this is IGamingItemEvent) { IGamingItemEvent bind = (IGamingItemEvent)this; - BeforeGamingItem += bind.BeforeGamingItemEvent; - AfterGamingItem += bind.AfterGamingItemEvent; - SucceedGamingItem += bind.SucceedGamingItemEvent; - FailedGamingItem += bind.FailedGamingItemEvent; + GamingItem += bind.GamingItemEvent; } if (this is IGamingMagicEvent) { IGamingMagicEvent bind = (IGamingMagicEvent)this; - BeforeGamingMagic += bind.BeforeGamingMagicEvent; - AfterGamingMagic += bind.AfterGamingMagicEvent; - SucceedGamingMagic += bind.SucceedGamingMagicEvent; - FailedGamingMagic += bind.FailedGamingMagicEvent; + GamingMagic += bind.GamingMagicEvent; } if (this is IGamingBuyEvent) { IGamingBuyEvent bind = (IGamingBuyEvent)this; - BeforeGamingBuy += bind.BeforeGamingBuyEvent; - AfterGamingBuy += bind.AfterGamingBuyEvent; - SucceedGamingBuy += bind.SucceedGamingBuyEvent; - FailedGamingBuy += bind.FailedGamingBuyEvent; + GamingBuy += bind.GamingBuyEvent; } if (this is IGamingSuperSkillEvent) { IGamingSuperSkillEvent bind = (IGamingSuperSkillEvent)this; - BeforeGamingSuperSkill += bind.BeforeGamingSuperSkillEvent; - AfterGamingSuperSkill += bind.AfterGamingSuperSkillEvent; - SucceedGamingSuperSkill += bind.SucceedGamingSuperSkillEvent; - FailedGamingSuperSkill += bind.FailedGamingSuperSkillEvent; + GamingSuperSkill += bind.GamingSuperSkillEvent; } if (this is IGamingPauseEvent) { IGamingPauseEvent bind = (IGamingPauseEvent)this; - BeforeGamingPause += bind.BeforeGamingPauseEvent; - AfterGamingPause += bind.AfterGamingPauseEvent; - SucceedGamingPause += bind.SucceedGamingPauseEvent; - FailedGamingPause += bind.FailedGamingPauseEvent; + GamingPause += bind.GamingPauseEvent; } if (this is IGamingUnpauseEvent) { IGamingUnpauseEvent bind = (IGamingUnpauseEvent)this; - BeforeGamingUnpause += bind.BeforeGamingUnpauseEvent; - AfterGamingUnpause += bind.AfterGamingUnpauseEvent; - SucceedGamingUnpause += bind.SucceedGamingUnpauseEvent; - FailedGamingUnpause += bind.FailedGamingUnpauseEvent; + GamingUnpause += bind.GamingUnpauseEvent; } if (this is IGamingSurrenderEvent) { IGamingSurrenderEvent bind = (IGamingSurrenderEvent)this; - BeforeGamingSurrender += bind.BeforeGamingSurrenderEvent; - AfterGamingSurrender += bind.AfterGamingSurrenderEvent; - SucceedGamingSurrender += bind.SucceedGamingSurrenderEvent; - FailedGamingSurrender += bind.FailedGamingSurrenderEvent; + GamingSurrender += bind.GamingSurrenderEvent; } if (this is IGamingUpdateInfoEvent) { IGamingUpdateInfoEvent bind = (IGamingUpdateInfoEvent)this; - BeforeGamingUpdateInfo += bind.BeforeGamingUpdateInfoEvent; - AfterGamingUpdateInfo += bind.AfterGamingUpdateInfoEvent; - SucceedGamingUpdateInfo += bind.SucceedGamingUpdateInfoEvent; - FailedGamingUpdateInfo += bind.FailedGamingUpdateInfoEvent; + GamingUpdateInfo += bind.GamingUpdateInfoEvent; } if (this is IGamingPunishEvent) { IGamingPunishEvent bind = (IGamingPunishEvent)this; - BeforeGamingPunish += bind.BeforeGamingPunishEvent; - AfterGamingPunish += bind.AfterGamingPunishEvent; - SucceedGamingPunish += bind.SucceedGamingPunishEvent; - FailedGamingPunish += bind.FailedGamingPunishEvent; + GamingPunish += bind.GamingPunishEvent; } } - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingConnect; - public event IGamingEventHandler.AfterEventHandler? AfterGamingConnect; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingConnect; - public event IGamingEventHandler.FailedEventHandler? FailedGamingConnect; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingDisconnect; - public event IGamingEventHandler.AfterEventHandler? AfterGamingDisconnect; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingDisconnect; - public event IGamingEventHandler.FailedEventHandler? FailedGamingDisconnect; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingReconnect; - public event IGamingEventHandler.AfterEventHandler? AfterGamingReconnect; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingReconnect; - public event IGamingEventHandler.FailedEventHandler? FailedGamingReconnect; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingBanCharacter; - public event IGamingEventHandler.AfterEventHandler? AfterGamingBanCharacter; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingBanCharacter; - public event IGamingEventHandler.FailedEventHandler? FailedGamingBanCharacter; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingPickCharacter; - public event IGamingEventHandler.AfterEventHandler? AfterGamingPickCharacter; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingPickCharacter; - public event IGamingEventHandler.FailedEventHandler? FailedGamingPickCharacter; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingRandom; - public event IGamingEventHandler.AfterEventHandler? AfterGamingRandom; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingRandom; - public event IGamingEventHandler.FailedEventHandler? FailedGamingRandom; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingRound; - public event IGamingEventHandler.AfterEventHandler? AfterGamingRound; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingRound; - public event IGamingEventHandler.FailedEventHandler? FailedGamingRound; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingLevelUp; - public event IGamingEventHandler.AfterEventHandler? AfterGamingLevelUp; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingLevelUp; - public event IGamingEventHandler.FailedEventHandler? FailedGamingLevelUp; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingMove; - public event IGamingEventHandler.AfterEventHandler? AfterGamingMove; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingMove; - public event IGamingEventHandler.FailedEventHandler? FailedGamingMove; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingAttack; - public event IGamingEventHandler.AfterEventHandler? AfterGamingAttack; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingAttack; - public event IGamingEventHandler.FailedEventHandler? FailedGamingAttack; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingSkill; - public event IGamingEventHandler.AfterEventHandler? AfterGamingSkill; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingSkill; - public event IGamingEventHandler.FailedEventHandler? FailedGamingSkill; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingItem; - public event IGamingEventHandler.AfterEventHandler? AfterGamingItem; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingItem; - public event IGamingEventHandler.FailedEventHandler? FailedGamingItem; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingMagic; - public event IGamingEventHandler.AfterEventHandler? AfterGamingMagic; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingMagic; - public event IGamingEventHandler.FailedEventHandler? FailedGamingMagic; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingBuy; - public event IGamingEventHandler.AfterEventHandler? AfterGamingBuy; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingBuy; - public event IGamingEventHandler.FailedEventHandler? FailedGamingBuy; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingSuperSkill; - public event IGamingEventHandler.AfterEventHandler? AfterGamingSuperSkill; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingSuperSkill; - public event IGamingEventHandler.FailedEventHandler? FailedGamingSuperSkill; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingPause; - public event IGamingEventHandler.AfterEventHandler? AfterGamingPause; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingPause; - public event IGamingEventHandler.FailedEventHandler? FailedGamingPause; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingUnpause; - public event IGamingEventHandler.AfterEventHandler? AfterGamingUnpause; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingUnpause; - public event IGamingEventHandler.FailedEventHandler? FailedGamingUnpause; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingSurrender; - public event IGamingEventHandler.AfterEventHandler? AfterGamingSurrender; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingSurrender; - public event IGamingEventHandler.FailedEventHandler? FailedGamingSurrender; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingUpdateInfo; - public event IGamingEventHandler.AfterEventHandler? AfterGamingUpdateInfo; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingUpdateInfo; - public event IGamingEventHandler.FailedEventHandler? FailedGamingUpdateInfo; - public event IGamingEventHandler.BeforeEventHandler? BeforeGamingPunish; - public event IGamingEventHandler.AfterEventHandler? AfterGamingPunish; - public event IGamingEventHandler.SucceedEventHandler? SucceedGamingPunish; - public event IGamingEventHandler.FailedEventHandler? FailedGamingPunish; + public event IGamingEventHandler.GamingEventHandler? GamingConnect; + public event IGamingEventHandler.GamingEventHandler? GamingDisconnect; + public event IGamingEventHandler.GamingEventHandler? GamingReconnect; + public event IGamingEventHandler.GamingEventHandler? GamingBanCharacter; + public event IGamingEventHandler.GamingEventHandler? GamingPickCharacter; + public event IGamingEventHandler.GamingEventHandler? GamingRandom; + public event IGamingEventHandler.GamingEventHandler? GamingRound; + public event IGamingEventHandler.GamingEventHandler? GamingLevelUp; + public event IGamingEventHandler.GamingEventHandler? GamingMove; + public event IGamingEventHandler.GamingEventHandler? GamingAttack; + public event IGamingEventHandler.GamingEventHandler? GamingSkill; + public event IGamingEventHandler.GamingEventHandler? GamingItem; + public event IGamingEventHandler.GamingEventHandler? GamingMagic; + public event IGamingEventHandler.GamingEventHandler? GamingBuy; + public event IGamingEventHandler.GamingEventHandler? GamingSuperSkill; + public event IGamingEventHandler.GamingEventHandler? GamingPause; + public event IGamingEventHandler.GamingEventHandler? GamingUnpause; + public event IGamingEventHandler.GamingEventHandler? GamingSurrender; + public event IGamingEventHandler.GamingEventHandler? GamingUpdateInfo; + public event IGamingEventHandler.GamingEventHandler? GamingPunish; - public void OnBeforeGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data) { - BeforeGamingConnect?.Invoke(sender, e, data, result); + GamingConnect?.Invoke(sender, e, data); } - public void OnAfterGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data) { - AfterGamingConnect?.Invoke(sender, e, data, result); + GamingDisconnect?.Invoke(sender, e, data); } - public void OnSucceedGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data) { - SucceedGamingConnect?.Invoke(sender, e, data, result); + GamingReconnect?.Invoke(sender, e, data); } - public void OnFailedGamingConnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data) { - FailedGamingConnect?.Invoke(sender, e, data, result); + GamingBanCharacter?.Invoke(sender, e, data); } - public void OnBeforeGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data) { - BeforeGamingDisconnect?.Invoke(sender, e, data, result); + GamingPickCharacter?.Invoke(sender, e, data); } - public void OnAfterGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data) { - AfterGamingDisconnect?.Invoke(sender, e, data, result); + GamingRandom?.Invoke(sender, e, data); } - public void OnSucceedGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data) { - SucceedGamingDisconnect?.Invoke(sender, e, data, result); + GamingRound?.Invoke(sender, e, data); } - public void OnFailedGamingDisconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data) { - FailedGamingDisconnect?.Invoke(sender, e, data, result); + GamingLevelUp?.Invoke(sender, e, data); } - public void OnBeforeGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data) { - BeforeGamingReconnect?.Invoke(sender, e, data, result); + GamingMove?.Invoke(sender, e, data); } - public void OnAfterGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data) { - AfterGamingReconnect?.Invoke(sender, e, data, result); + GamingAttack?.Invoke(sender, e, data); } - public void OnSucceedGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data) { - SucceedGamingReconnect?.Invoke(sender, e, data, result); + GamingSkill?.Invoke(sender, e, data); } - public void OnFailedGamingReconnectEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingItemEvent(object sender, GamingEventArgs e, Hashtable data) { - FailedGamingReconnect?.Invoke(sender, e, data, result); + GamingItem?.Invoke(sender, e, data); } - public void OnBeforeGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data) { - BeforeGamingBanCharacter?.Invoke(sender, e, data, result); + GamingMagic?.Invoke(sender, e, data); } - public void OnAfterGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data) { - AfterGamingBanCharacter?.Invoke(sender, e, data, result); + GamingBuy?.Invoke(sender, e, data); } - public void OnSucceedGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data) { - SucceedGamingBanCharacter?.Invoke(sender, e, data, result); + GamingSuperSkill?.Invoke(sender, e, data); } - public void OnFailedGamingBanCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data) { - FailedGamingBanCharacter?.Invoke(sender, e, data, result); + GamingPause?.Invoke(sender, e, data); } - public void OnBeforeGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data) { - BeforeGamingPickCharacter?.Invoke(sender, e, data, result); + GamingUnpause?.Invoke(sender, e, data); } - public void OnAfterGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data) { - AfterGamingPickCharacter?.Invoke(sender, e, data, result); + GamingSurrender?.Invoke(sender, e, data); } - public void OnSucceedGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data) { - SucceedGamingPickCharacter?.Invoke(sender, e, data, result); + GamingUpdateInfo?.Invoke(sender, e, data); } - public void OnFailedGamingPickCharacterEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) + public void OnGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data) { - FailedGamingPickCharacter?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingRandom?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingRandom?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingRandom?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingRandomEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingRandom?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingRound?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingRound?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingRound?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingRoundEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingRound?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingLevelUp?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingLevelUp?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingLevelUp?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingLevelUpEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingLevelUp?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingMove?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingMove?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingMove?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingMoveEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingMove?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingAttack?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingAttack?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingAttack?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingAttackEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingAttack?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingSkill?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingSkill?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingSkill?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingSkill?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingItem?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingItem?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingItem?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingItemEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingItem?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingMagic?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingMagic?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingMagic?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingMagicEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingMagic?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingBuy?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingBuy?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingBuy?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingBuyEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingBuy?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingSuperSkill?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingSuperSkill?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingSuperSkill?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingSuperSkillEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingSuperSkill?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingPause?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingPause?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingPause?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingPauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingPause?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingUnpause?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingUnpause?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingUnpause?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingUnpauseEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingUnpause?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingSurrender?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingSurrender?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingSurrender?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingSurrenderEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingSurrender?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingUpdateInfo?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingUpdateInfo?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingUpdateInfo?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingUpdateInfoEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingUpdateInfo?.Invoke(sender, e, data, result); - } - - public void OnBeforeGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - BeforeGamingPunish?.Invoke(sender, e, data, result); - } - - public void OnAfterGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - AfterGamingPunish?.Invoke(sender, e, data, result); - } - - public void OnSucceedGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - SucceedGamingPunish?.Invoke(sender, e, data, result); - } - - public void OnFailedGamingPunishEvent(object sender, GamingEventArgs e, Hashtable data, Hashtable result) - { - FailedGamingPunish?.Invoke(sender, e, data, result); + GamingPunish?.Invoke(sender, e, data); } } } diff --git a/Library/Common/Addon/GameModuleDepend.cs b/Library/Common/Addon/GameModuleDepend.cs index 82c5d06..7898824 100644 --- a/Library/Common/Addon/GameModuleDepend.cs +++ b/Library/Common/Addon/GameModuleDepend.cs @@ -1,28 +1,84 @@ -namespace Milimoe.FunGame.Core.Library.Common.Addon +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Entity; + +namespace Milimoe.FunGame.Core.Library.Common.Addon { /// - /// 模组的依赖集合 + /// 模组的依赖集合 + /// (地图名称()的数组) + /// (角色模组名称()的数组) + /// (技能模组名称()的数组) + /// (物品模组名称()的数组) /// - public readonly struct GameModuleDepend(string[] Maps, string[] Characters, string[] Items, string[] Skills) + public readonly struct GameModuleDepend(string[] maps, string[] characters, string[] skills, string[] items) { /// /// 模组所使用的地图组 /// - public string[] Maps { get; } = Maps; + public string[] MapsDepend { get; } = maps; /// /// 模组所使用的角色组 /// - public string[] Characters { get; } = Characters; - - /// - /// 模组所使用的物品组 - /// - public string[] Items { get; } = Items; + public string[] CharactersDepend { get; } = characters; /// /// 模组所使用的技能组 /// - public string[] Skills { get; } = Skills; + public string[] SkillsDepend { get; } = skills; + + /// + /// 模组所使用的物品组 + /// + public string[] ItemsDepend { get; } = items; + + /// + /// 实际使用的地图组对象 + /// 请使用 自动填充,不要自己添加 + /// + public List Maps { get; } = []; + + /// + /// 实际使用的角色组对象 + /// 请使用 自动填充,不要自己添加 + /// + public List Characters { get; } = []; + + /// + /// 实际使用的技能组对象 + /// 请使用 自动填充,不要自己添加 + /// + public List Skills { get; } = []; + + /// + /// 实际使用的物品组对象 + /// 请使用 自动填充,不要自己添加 + /// + public List Items { get; } = []; + + /// + /// 获得所有的依赖项 + /// 此方法会自动填充 + /// + public void GetDependencies(GameModuleLoader loader) + { + Maps.Clear(); + Characters.Clear(); + Skills.Clear(); + Items.Clear(); + Maps.AddRange(loader.Maps.Keys.Where(MapsDepend.Contains).Select(str => loader.Maps[str])); + foreach (CharacterModule modules in loader.Characters.Keys.Where(CharactersDepend.Contains).Select(str => loader.Characters[str])) + { + Characters.AddRange(modules.Characters); + } + foreach (SkillModule modules in loader.Skills.Keys.Where(SkillsDepend.Contains).Select(str => loader.Skills[str])) + { + Skills.AddRange(modules.Skills); + } + foreach (ItemModule modules in loader.Items.Keys.Where(ItemsDepend.Contains).Select(str => loader.Items[str])) + { + Items.AddRange(modules.Items); + } + } } } diff --git a/Library/Common/Addon/GameModuleServer.cs b/Library/Common/Addon/GameModuleServer.cs index 25b85cc..c244e64 100644 --- a/Library/Common/Addon/GameModuleServer.cs +++ b/Library/Common/Addon/GameModuleServer.cs @@ -60,10 +60,10 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon /// /// /// - /// + /// /// /// - public abstract bool StartServer(string GameModule, Room Room, List Users, IServerModel RoomMasterServerModel, Dictionary OthersServerModel, params object[] Args); + public abstract bool StartServer(string GameModule, Room Room, List Users, IServerModel RoomMasterServerModel, Dictionary ServerModels, params object[] Args); /// /// 接收并处理GamingMessage diff --git a/Library/Common/Network/ClientSocket.cs b/Library/Common/Network/ClientSocket.cs index fef4424..bac6577 100644 --- a/Library/Common/Network/ClientSocket.cs +++ b/Library/Common/Network/ClientSocket.cs @@ -54,15 +54,15 @@ namespace Milimoe.FunGame.Core.Library.Common.Network return SocketResult.NotSent; } - public void BindEvent(Delegate Method, bool Remove = false) + public void BindEvent(Delegate method, bool remove = false) { - if (!Remove) + if (!remove) { - SocketManager.SocketReceive += (SocketManager.SocketReceiveHandler)Method; + SocketManager.SocketReceive += (SocketManager.SocketReceiveHandler)method; } else { - SocketManager.SocketReceive -= (SocketManager.SocketReceiveHandler)Method; + SocketManager.SocketReceive -= (SocketManager.SocketReceiveHandler)method; } } diff --git a/Library/Common/Network/HTTPClient.cs b/Library/Common/Network/HTTPClient.cs index 0138444..8b77099 100644 --- a/Library/Common/Network/HTTPClient.cs +++ b/Library/Common/Network/HTTPClient.cs @@ -86,6 +86,18 @@ namespace Milimoe.FunGame.Core.Library.Common.Network return new(SocketMessageType.Unknown, Guid.Empty); } + public void BindEvent(Delegate method, bool remove = false) + { + if (!remove) + { + SocketManager.SocketReceive += (SocketManager.SocketReceiveHandler)method; + } + else + { + SocketManager.SocketReceive -= (SocketManager.SocketReceiveHandler)method; + } + } + public void Close() { _Listening = false; diff --git a/Library/Common/Network/Socket.cs b/Library/Common/Network/Socket.cs index c410840..a3a32b6 100644 --- a/Library/Common/Network/Socket.cs +++ b/Library/Common/Network/Socket.cs @@ -65,15 +65,15 @@ namespace Milimoe.FunGame.Core.Library.Common.Network } } - public void BindEvent(Delegate Method, bool Remove = false) + public void BindEvent(Delegate method, bool remove = false) { - if (!Remove) + if (!remove) { - SocketManager.SocketReceive += (SocketManager.SocketReceiveHandler)Method; + SocketManager.SocketReceive += (SocketManager.SocketReceiveHandler)method; } else { - SocketManager.SocketReceive -= (SocketManager.SocketReceiveHandler)Method; + SocketManager.SocketReceive -= (SocketManager.SocketReceiveHandler)method; } } diff --git a/Library/Exception/Exception.cs b/Library/Exception/Exception.cs index dcf109e..4f283ea 100644 --- a/Library/Exception/Exception.cs +++ b/Library/Exception/Exception.cs @@ -160,8 +160,13 @@ public override string Message => "构造对象实例遇到错误 (#10032)"; } - public class ModuleServerNewDataRequestException : Exception + public class InvalidNewDataRequestException : Exception { - public override string Message => "试图在GameModuleServer类中创建数据请求 (#10033)"; + public override string Message => "试图在不支持的类中创建数据请求 (#10033)"; + } + + public class AsyncRequestException : Exception + { + public override string Message => "数据请求必须以异步方式发送 (#10034)"; } } diff --git a/Model/Gaming.cs b/Model/Gaming.cs index d903cfe..e4dfd84 100644 --- a/Model/Gaming.cs +++ b/Model/Gaming.cs @@ -23,10 +23,16 @@ namespace Milimoe.FunGame.Core.Model /// public GamingEventArgs EventArgs { get; } - private Gaming(GameModule module, Room room, List users) + /// + /// 此实例所属的玩家 + /// + public User CurrentUser { get; } + + private Gaming(GameModule module, Room room, User user, List users) { GameModule = module; EventArgs = new(room, users); + CurrentUser = user; } /// @@ -34,12 +40,16 @@ namespace Milimoe.FunGame.Core.Model /// /// /// + /// /// + /// /// /// - public static Gaming StartGame(GameModule module, Room room, List users, params object[] args) + public static Gaming StartGame(GameModule module, Room room, User user, List users, GameModuleLoader loader, params object[] args) { - Gaming instance = new(module, room, users); + Gaming instance = new(module, room, user, users); + // 读取模组的依赖集合 + module.GameModuleDepend.GetDependencies(loader); // 新建线程来启动模组的界面 TaskUtility.NewTask(() => { @@ -57,437 +67,174 @@ namespace Milimoe.FunGame.Core.Model /// /// 消息类型 /// 接收到的数据 - /// 底层会将哈希表中的数据发送给服务器 - public Hashtable GamingHandler(GamingType type, Hashtable data) + public void GamingHandler(GamingType type, Hashtable data) { - Hashtable result = []; switch (type) { case GamingType.Connect: - Connect(data, result); + Connect(data); break; case GamingType.Disconnect: - Disconnect(data, result); + Disconnect(data); break; case GamingType.Reconnect: - Reconnect(data, result); + Reconnect(data); break; case GamingType.BanCharacter: - BanCharacter(data, result); + BanCharacter(data); break; case GamingType.PickCharacter: - PickCharacter(data, result); + PickCharacter(data); break; case GamingType.Random: - Random(data, result); + Random(data); break; case GamingType.Round: - Round(data, result); + Round(data); break; case GamingType.LevelUp: - LevelUp(data, result); + LevelUp(data); break; case GamingType.Move: - Move(data, result); + Move(data); break; case GamingType.Attack: - Attack(data, result); + Attack(data); break; case GamingType.Skill: - Skill(data, result); + Skill(data); break; case GamingType.Item: - Item(data, result); + Item(data); break; case GamingType.Magic: - Magic(data, result); + Magic(data); break; case GamingType.Buy: - Buy(data, result); + Buy(data); break; case GamingType.SuperSkill: - SuperSkill(data, result); + SuperSkill(data); break; case GamingType.Pause: - Pause(data, result); + Pause(data); break; case GamingType.Unpause: - Unpause(data, result); + Unpause(data); break; case GamingType.Surrender: - Surrender(data, result); + Surrender(data); break; case GamingType.UpdateInfo: - UpdateInfo(data, result); + UpdateInfo(data); break; case GamingType.Punish: - Punish(data, result); + Punish(data); break; case GamingType.None: default: break; } - return result; } - private void Connect(Hashtable data, Hashtable result) + private void Connect(Hashtable data) { - GameModule.OnBeforeGamingConnectEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingConnectEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingConnectEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingConnectEvent(this, EventArgs, data, result); + GameModule.OnGamingConnectEvent(this, EventArgs, data); } - private void Disconnect(Hashtable data, Hashtable result) + private void Disconnect(Hashtable data) { - GameModule.OnBeforeGamingDisconnectEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingDisconnectEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingDisconnectEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingDisconnectEvent(this, EventArgs, data, result); + GameModule.OnGamingDisconnectEvent(this, EventArgs, data); } - private void Reconnect(Hashtable data, Hashtable result) + private void Reconnect(Hashtable data) { - GameModule.OnBeforeGamingReconnectEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingReconnectEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingReconnectEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingReconnectEvent(this, EventArgs, data, result); + GameModule.OnGamingReconnectEvent(this, EventArgs, data); } - private void BanCharacter(Hashtable data, Hashtable result) + private void BanCharacter(Hashtable data) { - GameModule.OnBeforeGamingBanCharacterEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingBanCharacterEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingBanCharacterEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingBanCharacterEvent(this, EventArgs, data, result); + GameModule.OnGamingBanCharacterEvent(this, EventArgs, data); } - private void PickCharacter(Hashtable data, Hashtable result) + private void PickCharacter(Hashtable data) { - GameModule.OnBeforeGamingPickCharacterEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingPickCharacterEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingPickCharacterEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingPickCharacterEvent(this, EventArgs, data, result); + GameModule.OnGamingPickCharacterEvent(this, EventArgs, data); } - private void Random(Hashtable data, Hashtable result) + private void Random(Hashtable data) { - GameModule.OnBeforeGamingRandomEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingRandomEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingRandomEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingRandomEvent(this, EventArgs, data, result); + GameModule.OnGamingRandomEvent(this, EventArgs, data); } - private void Round(Hashtable data, Hashtable result) + private void Round(Hashtable data) { - GameModule.OnBeforeGamingRoundEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingRoundEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingRoundEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingRoundEvent(this, EventArgs, data, result); + GameModule.OnGamingRoundEvent(this, EventArgs, data); } - private void LevelUp(Hashtable data, Hashtable result) + private void LevelUp(Hashtable data) { - GameModule.OnBeforeGamingLevelUpEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingLevelUpEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingLevelUpEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingLevelUpEvent(this, EventArgs, data, result); + GameModule.OnGamingLevelUpEvent(this, EventArgs, data); } - private void Move(Hashtable data, Hashtable result) + private void Move(Hashtable data) { - GameModule.OnBeforeGamingMoveEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingMoveEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingMoveEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingMoveEvent(this, EventArgs, data, result); + GameModule.OnGamingMoveEvent(this, EventArgs, data); } - private void Attack(Hashtable data, Hashtable result) + private void Attack(Hashtable data) { - GameModule.OnBeforeGamingAttackEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingAttackEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingAttackEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingAttackEvent(this, EventArgs, data, result); + GameModule.OnGamingAttackEvent(this, EventArgs, data); } - private void Skill(Hashtable data, Hashtable result) + private void Skill(Hashtable data) { - GameModule.OnBeforeGamingSkillEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingSkillEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingSkillEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingSkillEvent(this, EventArgs, data, result); + GameModule.OnGamingSkillEvent(this, EventArgs, data); } - private void Item(Hashtable data, Hashtable result) + private void Item(Hashtable data) { - GameModule.OnBeforeGamingItemEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingItemEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingItemEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingItemEvent(this, EventArgs, data, result); + GameModule.OnGamingItemEvent(this, EventArgs, data); } - private void Magic(Hashtable data, Hashtable result) + private void Magic(Hashtable data) { - GameModule.OnBeforeGamingMagicEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingMagicEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingMagicEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingMagicEvent(this, EventArgs, data, result); + GameModule.OnGamingMagicEvent(this, EventArgs, data); } - private void Buy(Hashtable data, Hashtable result) + private void Buy(Hashtable data) { - GameModule.OnBeforeGamingBuyEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingBuyEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingBuyEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingBuyEvent(this, EventArgs, data, result); + GameModule.OnGamingBuyEvent(this, EventArgs, data); } - private void SuperSkill(Hashtable data, Hashtable result) + private void SuperSkill(Hashtable data) { - GameModule.OnBeforeGamingSuperSkillEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingSuperSkillEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingSuperSkillEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingSuperSkillEvent(this, EventArgs, data, result); + GameModule.OnGamingSuperSkillEvent(this, EventArgs, data); } - private void Pause(Hashtable data, Hashtable result) + private void Pause(Hashtable data) { - GameModule.OnBeforeGamingPauseEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingPauseEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingPauseEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingPauseEvent(this, EventArgs, data, result); + GameModule.OnGamingPauseEvent(this, EventArgs, data); } - private void Unpause(Hashtable data, Hashtable result) + private void Unpause(Hashtable data) { - GameModule.OnBeforeGamingUnpauseEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingUnpauseEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingUnpauseEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingUnpauseEvent(this, EventArgs, data, result); + GameModule.OnGamingUnpauseEvent(this, EventArgs, data); } - private void Surrender(Hashtable data, Hashtable result) + private void Surrender(Hashtable data) { - GameModule.OnBeforeGamingSurrenderEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingSurrenderEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingSurrenderEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingSurrenderEvent(this, EventArgs, data, result); + GameModule.OnGamingSurrenderEvent(this, EventArgs, data); } - private void UpdateInfo(Hashtable data, Hashtable result) + private void UpdateInfo(Hashtable data) { - GameModule.OnBeforeGamingUpdateInfoEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingUpdateInfoEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingUpdateInfoEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingUpdateInfoEvent(this, EventArgs, data, result); + GameModule.OnGamingUpdateInfoEvent(this, EventArgs, data); } - private void Punish(Hashtable data, Hashtable result) + private void Punish(Hashtable data) { - GameModule.OnBeforeGamingPunishEvent(this, EventArgs, data, result); - if (EventArgs.Cancel) - { - return; - } - if (!EventArgs.Cancel) - { - GameModule.OnSucceedGamingPunishEvent(this, EventArgs, data, result); - } - else - { - GameModule.OnFailedGamingPunishEvent(this, EventArgs, data, result); - } - GameModule.OnAfterGamingPunishEvent(this, EventArgs, data, result); + GameModule.OnGamingPunishEvent(this, EventArgs, data); } } } diff --git a/Service/AddonManager.cs b/Service/AddonManager.cs index 50247f3..3110929 100644 --- a/Service/AddonManager.cs +++ b/Service/AddonManager.cs @@ -1,6 +1,6 @@ using System.Collections; using System.Reflection; -using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Interface.Addons; using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Constant; @@ -26,15 +26,17 @@ namespace Milimoe.FunGame.Core.Service // 加载目录下所有的DLL Assembly assembly = Assembly.LoadFrom(dll); - // 遍历DLL中继承了Plugin的类型 foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Plugin)))) { - Plugin? instance = (Plugin?)Activator.CreateInstance(type); - if (instance != null && instance.Load(otherobjs) && instance.Name.Trim() != "") + AddAddonInstances(type, plugins, (instance) => { - instance.Controller = new(instance, delegates); - plugins.TryAdd(instance.Name, instance); - } + if (instance.Load(otherobjs)) + { + instance.Controller = new(instance, delegates); + return true; + } + return false; + }); } } @@ -51,7 +53,7 @@ namespace Milimoe.FunGame.Core.Service /// /// /// - internal static Dictionary LoadGameModules(Dictionary modules, List characters, List skills, List items, Hashtable delegates, params object[] otherobjs) + internal static Dictionary LoadGameModules(Dictionary modules, Dictionary characters, Dictionary skills, Dictionary items, Hashtable delegates, params object[] otherobjs) { if (!Directory.Exists(ReflectionSet.GameModuleFolderPath)) return modules; @@ -61,40 +63,31 @@ namespace Milimoe.FunGame.Core.Service { Assembly assembly = Assembly.LoadFrom(dll); - foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(GameModule)))) + foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => typeof(IAddon).IsAssignableFrom(type))) { - GameModule? instance = (GameModule?)Activator.CreateInstance(type); - if (instance != null && instance.Load(otherobjs) && instance.Name.Trim() != "") + if (type.IsSubclassOf(typeof(GameModule))) { - instance.Controller = new(instance, delegates); - modules.TryAdd(instance.Name, instance); + AddAddonInstances(type, modules, (instance) => + { + if (instance.Load(otherobjs)) + { + instance.Controller = new(instance, delegates); + return true; + } + return false; + }); } - } - - foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Character)))) - { - Character? instance = (Character?)Activator.CreateInstance(type); - if (instance != null && instance.Name.Trim() != "" && !characters.Contains(instance)) + else if (type.IsSubclassOf(typeof(CharacterModule))) { - characters.Add(instance); + AddAddonInstances(type, characters, (instance) => instance.Load(otherobjs)); } - } - - foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Skill)))) - { - Skill? instance = (Skill?)Activator.CreateInstance(type); - if (instance != null && instance.Name.Trim() != "" && !skills.Contains(instance)) + else if (type.IsSubclassOf(typeof(SkillModule))) { - skills.Add(instance); + AddAddonInstances(type, skills, (instance) => instance.Load(otherobjs)); } - } - - foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Item)))) - { - Item? instance = (Item?)Activator.CreateInstance(type); - if (instance != null && instance.Name.Trim() != "" && !items.Contains(instance)) + else if (type.IsSubclassOf(typeof(ItemModule))) { - items.Add(instance); + AddAddonInstances(type, items, (instance) => instance.Load(otherobjs)); } } } @@ -112,7 +105,7 @@ namespace Milimoe.FunGame.Core.Service /// /// /// - internal static Dictionary LoadGameModulesForServer(Dictionary modules, List characters, List skills, List items, Hashtable delegates, params object[] otherobjs) + internal static Dictionary LoadGameModulesForServer(Dictionary modules, Dictionary characters, Dictionary skills, Dictionary items, Hashtable delegates, params object[] otherobjs) { if (!Directory.Exists(ReflectionSet.GameModuleFolderPath)) return modules; @@ -122,40 +115,31 @@ namespace Milimoe.FunGame.Core.Service { Assembly assembly = Assembly.LoadFrom(dll); - foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(GameModuleServer)))) + foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => typeof(IAddon).IsAssignableFrom(type))) { - GameModuleServer? instance = (GameModuleServer?)Activator.CreateInstance(type); - if (instance != null && instance.Load(otherobjs) && instance.Name.Trim() != "") + if (type.IsSubclassOf(typeof(GameModuleServer))) { - instance.Controller = new(instance, delegates); - modules.TryAdd(instance.Name, instance); + AddAddonInstances(type, modules, (instance) => + { + if (instance.Load(otherobjs)) + { + instance.Controller = new(instance, delegates); + return true; + } + return false; + }); } - } - - foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Character)))) - { - Character? instance = (Character?)Activator.CreateInstance(type); - if (instance != null && instance.Name.Trim() != "" && !characters.Contains(instance)) + else if (type.IsSubclassOf(typeof(CharacterModule))) { - characters.Add(instance); + AddAddonInstances(type, characters, (instance) => instance.Load(otherobjs)); } - } - - foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Skill)))) - { - Skill? instance = (Skill?)Activator.CreateInstance(type); - if (instance != null && instance.Name.Trim() != "" && !skills.Contains(instance)) + else if (type.IsSubclassOf(typeof(SkillModule))) { - skills.Add(instance); + AddAddonInstances(type, skills, (instance) => instance.Load(otherobjs)); } - } - - foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Item)))) - { - Item? instance = (Item?)Activator.CreateInstance(type); - if (instance != null && instance.Name.Trim() != "" && !items.Contains(instance)) + else if (type.IsSubclassOf(typeof(ItemModule))) { - items.Add(instance); + AddAddonInstances(type, items, (instance) => instance.Load(otherobjs)); } } } @@ -181,15 +165,31 @@ namespace Milimoe.FunGame.Core.Service foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(GameMap)))) { - GameMap? instance = (GameMap?)Activator.CreateInstance(type); - if (instance != null && instance.Load(objs) && instance.Name.Trim() != "") - { - maps.TryAdd(instance.Name, instance); - } + AddAddonInstances(type, maps, (instance) => instance.Load(objs)); } } return maps; } + + /// + /// 添加构造好的模组类实例到字典中 + /// + /// 加载的类型 + /// 循环程序集的类型 + /// 实例的字典 + /// 加载时触发的检查方法,返回false不添加 + private static void AddAddonInstances(Type type, Dictionary dictionary, Func? isadd = null) where T : IAddon + { + T? instance = (T?)Activator.CreateInstance(type); + if (instance != null) + { + string name = instance.Name; + if (!string.IsNullOrWhiteSpace(name) && (isadd == null || isadd(instance))) + { + dictionary.TryAdd(name.Trim(), instance); + } + } + } } } \ No newline at end of file