From eb0bb86f3882dc1bdac6a053908b271096da3097 Mon Sep 17 00:00:00 2001
From: milimoe <110188673+milimoe@users.noreply.github.com>
Date: Tue, 19 Sep 2023 00:15:07 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=92=E4=BB=B6=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=20(#53)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* 开发插件接口和基类
* 添加构造方法
* 添加PluginManager
---
Interface/Base/IPlugin.cs | 12 +
Library/Common/Plugin/BasePlugin.cs | 778 +++++++++++++++++++++++++++-
Library/Common/Plugin/Example.cs | 41 ++
Service/PluginManager.cs | 37 +-
4 files changed, 862 insertions(+), 6 deletions(-)
create mode 100644 Interface/Base/IPlugin.cs
create mode 100644 Library/Common/Plugin/Example.cs
diff --git a/Interface/Base/IPlugin.cs b/Interface/Base/IPlugin.cs
new file mode 100644
index 0000000..c29d6ca
--- /dev/null
+++ b/Interface/Base/IPlugin.cs
@@ -0,0 +1,12 @@
+namespace Milimoe.FunGame.Core.Interface
+{
+ public interface IPlugin
+ {
+ public string Name { get; }
+ public string Description { get; }
+ public string Version { get; }
+ public string Author { get; }
+
+ public void Load();
+ }
+}
diff --git a/Library/Common/Plugin/BasePlugin.cs b/Library/Common/Plugin/BasePlugin.cs
index 7517d42..7c6aed1 100644
--- a/Library/Common/Plugin/BasePlugin.cs
+++ b/Library/Common/Plugin/BasePlugin.cs
@@ -1,7 +1,777 @@
-namespace Milimoe.FunGame.Core.Library.Common.Plugin
-{
- public class BasePlugin
- {
+using Milimoe.FunGame.Core.Interface;
+using Milimoe.FunGame.Core.Library.Common.Event;
+using Milimoe.FunGame.Core.Library.Constant;
+using Milimoe.FunGame.Core.Service;
+namespace Milimoe.FunGame.Core.Library.Common.Plugin
+{
+ public abstract class BasePlugin : IPlugin, IConnectEventHandler, IDisconnectEventHandler, ILoginEventHandler, ILogoutEventHandler, IRegEventHandler, IIntoRoomEventHandler, ISendTalkEventHandler,
+ ICreateRoomEventHandler, IQuitRoomEventHandler, IChangeRoomSettingEventHandler, IStartMatchEventHandler, IStartGameEventHandler, IChangeProfileEventHandler, IChangeAccountSettingEventHandler,
+ IOpenInventoryEventHandler, ISignInEventHandler, IOpenStoreEventHandler, IBuyItemEventHandler, IShowRankingEventHandler, IUseItemEventHandler, IEndGameEventHandler
+ {
+ ///
+ /// 插件名称
+ ///
+ public abstract string Name { get; }
+
+ ///
+ /// 插件描述
+ ///
+ public abstract string Description { get; }
+
+ ///
+ /// 插件版本
+ ///
+ public abstract string Version { get; }
+
+ ///
+ /// 插件作者
+ ///
+ public abstract string Author { get; }
+
+ ///
+ /// 加载标记
+ ///
+ private bool IsLoaded = false;
+
+ ///
+ /// 加载插件
+ ///
+ public void Load()
+ {
+ if (IsLoaded)
+ {
+ return;
+ }
+ // BeforeLoad可以阻止加载此插件
+ if (BeforeLoad())
+ {
+ // 插件加载后,不允许再次加载此插件
+ IsLoaded = true;
+ // 触发绑定事件
+ BindEvent();
+ // 如果加载后需要执行代码,请重写AfterLoad方法
+ AfterLoad();
+ }
+ }
+
+ ///
+ /// 插件加载后需要做的事
+ ///
+ protected virtual void AfterLoad()
+ {
+ // override
+ }
+
+ ///
+ /// 允许返回false来阻止加载此插件
+ ///
+ ///
+ protected virtual bool BeforeLoad()
+ {
+ return true;
+ }
+
+ ///
+ /// 绑定事件。在后触发
+ ///
+ private void BindEvent()
+ {
+ Type type = GetType();
+
+ if (type == typeof(IConnectEvent))
+ {
+ IConnectEvent bind = (IConnectEvent)this;
+ BeforeConnect += bind.BeforeConnectEvent;
+ AfterConnect += bind.AfterConnectEvent;
+ SucceedConnect += bind.SucceedConnectEvent;
+ FailedConnect += bind.FailedConnectEvent;
+ }
+
+ if (type == typeof(IDisconnectEvent))
+ {
+ IDisconnectEvent bind = (IDisconnectEvent)this;
+ BeforeDisconnect += bind.BeforeDisconnectEvent;
+ AfterDisconnect += bind.AfterDisconnectEvent;
+ SucceedDisconnect += bind.SucceedDisconnectEvent;
+ FailedDisconnect += bind.FailedDisconnectEvent;
+ }
+
+ if (type == typeof(ILoginEvent))
+ {
+ ILoginEvent bind = (ILoginEvent)this;
+ BeforeLogin += bind.BeforeLoginEvent;
+ AfterLogin += bind.AfterLoginEvent;
+ SucceedLogin += bind.SucceedLoginEvent;
+ FailedLogin += bind.FailedLoginEvent;
+ }
+
+ if (type == typeof(ILogoutEvent))
+ {
+ ILogoutEvent bind = (ILogoutEvent)this;
+ BeforeLogout += bind.BeforeLogoutEvent;
+ AfterLogout += bind.AfterLogoutEvent;
+ SucceedLogout += bind.SucceedLogoutEvent;
+ FailedLogout += bind.FailedLogoutEvent;
+ }
+
+ if (type == typeof(IRegEvent))
+ {
+ IRegEvent bind = (IRegEvent)this;
+ BeforeReg += bind.BeforeRegEvent;
+ AfterReg += bind.AfterRegEvent;
+ SucceedReg += bind.SucceedRegEvent;
+ FailedReg += bind.FailedRegEvent;
+ }
+
+ if (type == typeof(IIntoRoomEvent))
+ {
+ IIntoRoomEvent bind = (IIntoRoomEvent)this;
+ BeforeIntoRoom += bind.BeforeIntoRoomEvent;
+ AfterIntoRoom += bind.AfterIntoRoomEvent;
+ SucceedIntoRoom += bind.SucceedIntoRoomEvent;
+ FailedIntoRoom += bind.FailedIntoRoomEvent;
+ }
+
+ if (type == typeof(ISendTalkEvent))
+ {
+ ISendTalkEvent bind = (ISendTalkEvent)this;
+ BeforeSendTalk += bind.BeforeSendTalkEvent;
+ AfterSendTalk += bind.AfterSendTalkEvent;
+ SucceedSendTalk += bind.SucceedSendTalkEvent;
+ FailedSendTalk += bind.FailedSendTalkEvent;
+ }
+
+ if (type == typeof(ICreateRoomEvent))
+ {
+ ICreateRoomEvent bind = (ICreateRoomEvent)this;
+ BeforeCreateRoom += bind.BeforeCreateRoomEvent;
+ AfterCreateRoom += bind.AfterCreateRoomEvent;
+ SucceedCreateRoom += bind.SucceedCreateRoomEvent;
+ FailedCreateRoom += bind.FailedCreateRoomEvent;
+ }
+
+ if (type == typeof(IQuitRoomEvent))
+ {
+ IQuitRoomEvent bind = (IQuitRoomEvent)this;
+ BeforeQuitRoom += bind.BeforeQuitRoomEvent;
+ AfterQuitRoom += bind.AfterQuitRoomEvent;
+ SucceedQuitRoom += bind.SucceedQuitRoomEvent;
+ FailedQuitRoom += bind.FailedQuitRoomEvent;
+ }
+
+ if (type == typeof(IChangeRoomSettingEvent))
+ {
+ IChangeRoomSettingEvent bind = (IChangeRoomSettingEvent)this;
+ BeforeChangeRoomSetting += bind.BeforeChangeRoomSettingEvent;
+ AfterChangeRoomSetting += bind.AfterChangeRoomSettingEvent;
+ SucceedChangeRoomSetting += bind.SucceedChangeRoomSettingEvent;
+ FailedChangeRoomSetting += bind.FailedChangeRoomSettingEvent;
+ }
+
+ if (type == typeof(IStartMatchEvent))
+ {
+ IStartMatchEvent bind = (IStartMatchEvent)this;
+ BeforeStartMatch += bind.BeforeStartMatchEvent;
+ AfterStartMatch += bind.AfterStartMatchEvent;
+ SucceedStartMatch += bind.SucceedStartMatchEvent;
+ FailedStartMatch += bind.FailedStartMatchEvent;
+ }
+
+ if (type == typeof(IStartGameEvent))
+ {
+ IStartGameEvent bind = (IStartGameEvent)this;
+ BeforeStartGame += bind.BeforeStartGameEvent;
+ AfterStartGame += bind.AfterStartGameEvent;
+ SucceedStartGame += bind.SucceedStartGameEvent;
+ FailedStartGame += bind.FailedStartGameEvent;
+ }
+
+ if (type == typeof(IChangeProfileEvent))
+ {
+ IChangeProfileEvent bind = (IChangeProfileEvent)this;
+ BeforeChangeProfile += bind.BeforeChangeProfileEvent;
+ AfterChangeProfile += bind.AfterChangeProfileEvent;
+ SucceedChangeProfile += bind.SucceedChangeProfileEvent;
+ FailedChangeProfile += bind.FailedChangeProfileEvent;
+ }
+
+ if (type == typeof(IChangeAccountSettingEvent))
+ {
+ IChangeAccountSettingEvent bind = (IChangeAccountSettingEvent)this;
+ BeforeChangeAccountSetting += bind.BeforeChangeAccountSettingEvent;
+ AfterChangeAccountSetting += bind.AfterChangeAccountSettingEvent;
+ SucceedChangeAccountSetting += bind.SucceedChangeAccountSettingEvent;
+ FailedChangeAccountSetting += bind.FailedChangeAccountSettingEvent;
+ }
+
+ if (type == typeof(IOpenInventoryEvent))
+ {
+ IOpenInventoryEvent bind = (IOpenInventoryEvent)this;
+ BeforeOpenInventory += bind.BeforeOpenInventoryEvent;
+ AfterOpenInventory += bind.AfterOpenInventoryEvent;
+ SucceedOpenInventory += bind.SucceedOpenInventoryEvent;
+ FailedOpenInventory += bind.FailedOpenInventoryEvent;
+ }
+
+ if (type == typeof(ISignInEvent))
+ {
+ ISignInEvent bind = (ISignInEvent)this;
+ BeforeSignIn += bind.BeforeSignInEvent;
+ AfterSignIn += bind.AfterSignInEvent;
+ SucceedSignIn += bind.SucceedSignInEvent;
+ FailedSignIn += bind.FailedSignInEvent;
+ }
+
+ if (type == typeof(IOpenStoreEvent))
+ {
+ IOpenStoreEvent bind = (IOpenStoreEvent)this;
+ BeforeOpenStore += bind.BeforeOpenStoreEvent;
+ AfterOpenStore += bind.AfterOpenStoreEvent;
+ SucceedOpenStore += bind.SucceedOpenStoreEvent;
+ FailedOpenStore += bind.FailedOpenStoreEvent;
+ }
+
+ if (type == typeof(IBuyItemEvent))
+ {
+ IBuyItemEvent bind = (IBuyItemEvent)this;
+ BeforeBuyItem += bind.BeforeBuyItemEvent;
+ AfterBuyItem += bind.AfterBuyItemEvent;
+ SucceedBuyItem += bind.SucceedBuyItemEvent;
+ FailedBuyItem += bind.FailedBuyItemEvent;
+ }
+
+ if (type == typeof(IShowRankingEvent))
+ {
+ IShowRankingEvent bind = (IShowRankingEvent)this;
+ BeforeShowRanking += bind.BeforeShowRankingEvent;
+ AfterShowRanking += bind.AfterShowRankingEvent;
+ SucceedShowRanking += bind.SucceedShowRankingEvent;
+ FailedShowRanking += bind.FailedShowRankingEvent;
+ }
+
+ if (type == typeof(IUseItemEvent))
+ {
+ IUseItemEvent bind = (IUseItemEvent)this;
+ BeforeUseItem += bind.BeforeUseItemEvent;
+ AfterUseItem += bind.AfterUseItemEvent;
+ SucceedUseItem += bind.SucceedUseItemEvent;
+ FailedUseItem += bind.FailedUseItemEvent;
+ }
+
+ if (type == typeof(IEndGameEvent))
+ {
+ IEndGameEvent bind = (IEndGameEvent)this;
+ BeforeEndGame += bind.BeforeEndGameEvent;
+ AfterEndGame += bind.AfterEndGameEvent;
+ SucceedEndGame += bind.SucceedEndGameEvent;
+ FailedEndGame += bind.FailedEndGameEvent;
+ }
+ }
+
+ public event IConnectEventHandler.BeforeEventHandler? BeforeConnect;
+ public event IConnectEventHandler.AfterEventHandler? AfterConnect;
+ public event IConnectEventHandler.SucceedEventHandler? SucceedConnect;
+ public event IConnectEventHandler.FailedEventHandler? FailedConnect;
+ public event IEventHandler.BeforeEventHandler? BeforeDisconnect;
+ public event IEventHandler.AfterEventHandler? AfterDisconnect;
+ public event IEventHandler.SucceedEventHandler? SucceedDisconnect;
+ public event IEventHandler.FailedEventHandler? FailedDisconnect;
+ public event ILoginEventHandler.BeforeEventHandler? BeforeLogin;
+ public event ILoginEventHandler.AfterEventHandler? AfterLogin;
+ public event ILoginEventHandler.SucceedEventHandler? SucceedLogin;
+ public event ILoginEventHandler.FailedEventHandler? FailedLogin;
+ public event IEventHandler.BeforeEventHandler? BeforeLogout;
+ public event IEventHandler.AfterEventHandler? AfterLogout;
+ public event IEventHandler.SucceedEventHandler? SucceedLogout;
+ public event IEventHandler.FailedEventHandler? FailedLogout;
+ public event IRegEventHandler.BeforeEventHandler? BeforeReg;
+ public event IRegEventHandler.AfterEventHandler? AfterReg;
+ public event IRegEventHandler.SucceedEventHandler? SucceedReg;
+ public event IRegEventHandler.FailedEventHandler? FailedReg;
+ public event IIntoRoomEventHandler.BeforeEventHandler? BeforeIntoRoom;
+ public event IIntoRoomEventHandler.AfterEventHandler? AfterIntoRoom;
+ public event IIntoRoomEventHandler.SucceedEventHandler? SucceedIntoRoom;
+ public event IIntoRoomEventHandler.FailedEventHandler? FailedIntoRoom;
+ public event ISendTalkEventHandler.BeforeEventHandler? BeforeSendTalk;
+ public event ISendTalkEventHandler.AfterEventHandler? AfterSendTalk;
+ public event ISendTalkEventHandler.SucceedEventHandler? SucceedSendTalk;
+ public event ISendTalkEventHandler.FailedEventHandler? FailedSendTalk;
+ public event ICreateRoomEventHandler.BeforeEventHandler? BeforeCreateRoom;
+ public event ICreateRoomEventHandler.AfterEventHandler? AfterCreateRoom;
+ public event ICreateRoomEventHandler.SucceedEventHandler? SucceedCreateRoom;
+ public event ICreateRoomEventHandler.FailedEventHandler? FailedCreateRoom;
+ public event IQuitRoomEventHandler.BeforeEventHandler? BeforeQuitRoom;
+ public event IQuitRoomEventHandler.AfterEventHandler? AfterQuitRoom;
+ public event IQuitRoomEventHandler.SucceedEventHandler? SucceedQuitRoom;
+ public event IQuitRoomEventHandler.FailedEventHandler? FailedQuitRoom;
+ public event IEventHandler.BeforeEventHandler? BeforeChangeRoomSetting;
+ public event IEventHandler.AfterEventHandler? AfterChangeRoomSetting;
+ public event IEventHandler.SucceedEventHandler? SucceedChangeRoomSetting;
+ public event IEventHandler.FailedEventHandler? FailedChangeRoomSetting;
+ public event IEventHandler.BeforeEventHandler? BeforeStartMatch;
+ public event IEventHandler.AfterEventHandler? AfterStartMatch;
+ public event IEventHandler.SucceedEventHandler? SucceedStartMatch;
+ public event IEventHandler.FailedEventHandler? FailedStartMatch;
+ public event IEventHandler.BeforeEventHandler? BeforeStartGame;
+ public event IEventHandler.AfterEventHandler? AfterStartGame;
+ public event IEventHandler.SucceedEventHandler? SucceedStartGame;
+ public event IEventHandler.FailedEventHandler? FailedStartGame;
+ public event IEventHandler.BeforeEventHandler? BeforeChangeProfile;
+ public event IEventHandler.AfterEventHandler? AfterChangeProfile;
+ public event IEventHandler.SucceedEventHandler? SucceedChangeProfile;
+ public event IEventHandler.FailedEventHandler? FailedChangeProfile;
+ public event IEventHandler.BeforeEventHandler? BeforeChangeAccountSetting;
+ public event IEventHandler.AfterEventHandler? AfterChangeAccountSetting;
+ public event IEventHandler.SucceedEventHandler? SucceedChangeAccountSetting;
+ public event IEventHandler.FailedEventHandler? FailedChangeAccountSetting;
+ public event IEventHandler.BeforeEventHandler? BeforeOpenInventory;
+ public event IEventHandler.AfterEventHandler? AfterOpenInventory;
+ public event IEventHandler.SucceedEventHandler? SucceedOpenInventory;
+ public event IEventHandler.FailedEventHandler? FailedOpenInventory;
+ public event IEventHandler.BeforeEventHandler? BeforeSignIn;
+ public event IEventHandler.AfterEventHandler? AfterSignIn;
+ public event IEventHandler.SucceedEventHandler? SucceedSignIn;
+ public event IEventHandler.FailedEventHandler? FailedSignIn;
+ public event IEventHandler.BeforeEventHandler? BeforeOpenStore;
+ public event IEventHandler.AfterEventHandler? AfterOpenStore;
+ public event IEventHandler.SucceedEventHandler? SucceedOpenStore;
+ public event IEventHandler.FailedEventHandler? FailedOpenStore;
+ public event IEventHandler.BeforeEventHandler? BeforeBuyItem;
+ public event IEventHandler.AfterEventHandler? AfterBuyItem;
+ public event IEventHandler.SucceedEventHandler? SucceedBuyItem;
+ public event IEventHandler.FailedEventHandler? FailedBuyItem;
+ public event IEventHandler.BeforeEventHandler? BeforeShowRanking;
+ public event IEventHandler.AfterEventHandler? AfterShowRanking;
+ public event IEventHandler.SucceedEventHandler? SucceedShowRanking;
+ public event IEventHandler.FailedEventHandler? FailedShowRanking;
+ public event IEventHandler.BeforeEventHandler? BeforeUseItem;
+ public event IEventHandler.AfterEventHandler? AfterUseItem;
+ public event IEventHandler.SucceedEventHandler? SucceedUseItem;
+ public event IEventHandler.FailedEventHandler? FailedUseItem;
+ public event IEventHandler.BeforeEventHandler? BeforeEndGame;
+ public event IEventHandler.AfterEventHandler? AfterEndGame;
+ public event IEventHandler.SucceedEventHandler? SucceedEndGame;
+ public event IEventHandler.FailedEventHandler? FailedEndGame;
+
+ public EventResult OnBeforeConnectEvent(ConnectEventArgs e)
+ {
+ return BeforeConnect?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterConnectEvent(ConnectEventArgs e)
+ {
+ return AfterConnect?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedConnectEvent(ConnectEventArgs e)
+ {
+ return SucceedConnect?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedConnectEvent(ConnectEventArgs e)
+ {
+ return FailedConnect?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeDisconnectEvent(GeneralEventArgs e)
+ {
+ return BeforeDisconnect?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterDisconnectEvent(GeneralEventArgs e)
+ {
+ return AfterDisconnect?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedDisconnectEvent(GeneralEventArgs e)
+ {
+ return SucceedDisconnect?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedDisconnectEvent(GeneralEventArgs e)
+ {
+ return FailedDisconnect?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeLoginEvent(LoginEventArgs e)
+ {
+ return BeforeLogin?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterLoginEvent(LoginEventArgs e)
+ {
+ return AfterLogin?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedLoginEvent(LoginEventArgs e)
+ {
+ return SucceedLogin?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedLoginEvent(LoginEventArgs e)
+ {
+ return FailedLogin?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeLogoutEvent(GeneralEventArgs e)
+ {
+ return BeforeLogout?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterLogoutEvent(GeneralEventArgs e)
+ {
+ return AfterLogout?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedLogoutEvent(GeneralEventArgs e)
+ {
+ return SucceedLogout?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedLogoutEvent(GeneralEventArgs e)
+ {
+ return FailedLogout?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeRegEvent(RegisterEventArgs e)
+ {
+ return BeforeReg?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterRegEvent(RegisterEventArgs e)
+ {
+ return AfterReg?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedRegEvent(RegisterEventArgs e)
+ {
+ return SucceedReg?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedRegEvent(RegisterEventArgs e)
+ {
+ return FailedReg?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeIntoRoomEvent(RoomEventArgs e)
+ {
+ return BeforeIntoRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterIntoRoomEvent(RoomEventArgs e)
+ {
+ return AfterIntoRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedIntoRoomEvent(RoomEventArgs e)
+ {
+ return SucceedIntoRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedIntoRoomEvent(RoomEventArgs e)
+ {
+ return FailedIntoRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeSendTalkEvent(SendTalkEventArgs e)
+ {
+ return BeforeSendTalk?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterSendTalkEvent(SendTalkEventArgs e)
+ {
+ return AfterSendTalk?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedSendTalkEvent(SendTalkEventArgs e)
+ {
+ return SucceedSendTalk?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedSendTalkEvent(SendTalkEventArgs e)
+ {
+ return FailedSendTalk?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeCreateRoomEvent(RoomEventArgs e)
+ {
+ return BeforeCreateRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterCreateRoomEvent(RoomEventArgs e)
+ {
+ return AfterCreateRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedCreateRoomEvent(RoomEventArgs e)
+ {
+ return SucceedCreateRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedCreateRoomEvent(RoomEventArgs e)
+ {
+ return FailedCreateRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeQuitRoomEvent(RoomEventArgs e)
+ {
+ return BeforeQuitRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterQuitRoomEvent(RoomEventArgs e)
+ {
+ return AfterQuitRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedQuitRoomEvent(RoomEventArgs e)
+ {
+ return SucceedQuitRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedQuitRoomEvent(RoomEventArgs e)
+ {
+ return FailedQuitRoom?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeChangeRoomSettingEvent(GeneralEventArgs e)
+ {
+ return BeforeChangeRoomSetting?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterChangeRoomSettingEvent(GeneralEventArgs e)
+ {
+ return AfterChangeRoomSetting?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedChangeRoomSettingEvent(GeneralEventArgs e)
+ {
+ return SucceedChangeRoomSetting?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedChangeRoomSettingEvent(GeneralEventArgs e)
+ {
+ return FailedChangeRoomSetting?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeStartMatchEvent(GeneralEventArgs e)
+ {
+ return BeforeStartMatch?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterStartMatchEvent(GeneralEventArgs e)
+ {
+ return AfterStartMatch?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedStartMatchEvent(GeneralEventArgs e)
+ {
+ return SucceedStartMatch?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedStartMatchEvent(GeneralEventArgs e)
+ {
+ return FailedStartMatch?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeStartGameEvent(GeneralEventArgs e)
+ {
+ return BeforeStartGame?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterStartGameEvent(GeneralEventArgs e)
+ {
+ return AfterStartGame?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedStartGameEvent(GeneralEventArgs e)
+ {
+ return SucceedStartGame?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedStartGameEvent(GeneralEventArgs e)
+ {
+ return FailedStartGame?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeChangeProfileEvent(GeneralEventArgs e)
+ {
+ return BeforeChangeProfile?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterChangeProfileEvent(GeneralEventArgs e)
+ {
+ return AfterChangeProfile?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedChangeProfileEvent(GeneralEventArgs e)
+ {
+ return SucceedChangeProfile?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedChangeProfileEvent(GeneralEventArgs e)
+ {
+ return FailedChangeProfile?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeChangeAccountSettingEvent(GeneralEventArgs e)
+ {
+ return BeforeChangeAccountSetting?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterChangeAccountSettingEvent(GeneralEventArgs e)
+ {
+ return AfterChangeAccountSetting?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedChangeAccountSettingEvent(GeneralEventArgs e)
+ {
+ return SucceedChangeAccountSetting?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedChangeAccountSettingEvent(GeneralEventArgs e)
+ {
+ return FailedChangeAccountSetting?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeOpenInventoryEvent(GeneralEventArgs e)
+ {
+ return BeforeOpenInventory?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterOpenInventoryEvent(GeneralEventArgs e)
+ {
+ return AfterOpenInventory?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedOpenInventoryEvent(GeneralEventArgs e)
+ {
+ return SucceedOpenInventory?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedOpenInventoryEvent(GeneralEventArgs e)
+ {
+ return FailedOpenInventory?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeSignInEvent(GeneralEventArgs e)
+ {
+ return BeforeSignIn?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterSignInEvent(GeneralEventArgs e)
+ {
+ return AfterSignIn?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedSignInEvent(GeneralEventArgs e)
+ {
+ return SucceedSignIn?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedSignInEvent(GeneralEventArgs e)
+ {
+ return FailedSignIn?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeOpenStoreEvent(GeneralEventArgs e)
+ {
+ return BeforeOpenStore?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterOpenStoreEvent(GeneralEventArgs e)
+ {
+ return AfterOpenStore?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedOpenStoreEvent(GeneralEventArgs e)
+ {
+ return SucceedOpenStore?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedOpenStoreEvent(GeneralEventArgs e)
+ {
+ return FailedOpenStore?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeBuyItemEvent(GeneralEventArgs e)
+ {
+ return BeforeBuyItem?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterBuyItemEvent(GeneralEventArgs e)
+ {
+ return AfterBuyItem?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedBuyItemEvent(GeneralEventArgs e)
+ {
+ return SucceedBuyItem?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedBuyItemEvent(GeneralEventArgs e)
+ {
+ return FailedBuyItem?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeShowRankingEvent(GeneralEventArgs e)
+ {
+ return BeforeShowRanking?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterShowRankingEvent(GeneralEventArgs e)
+ {
+ return AfterShowRanking?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedShowRankingEvent(GeneralEventArgs e)
+ {
+ return SucceedShowRanking?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedShowRankingEvent(GeneralEventArgs e)
+ {
+ return FailedShowRanking?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeUseItemEvent(GeneralEventArgs e)
+ {
+ return BeforeUseItem?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterUseItemEvent(GeneralEventArgs e)
+ {
+ return AfterUseItem?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedUseItemEvent(GeneralEventArgs e)
+ {
+ return SucceedUseItem?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedUseItemEvent(GeneralEventArgs e)
+ {
+ return FailedUseItem?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnBeforeEndGameEvent(GeneralEventArgs e)
+ {
+ return BeforeEndGame?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnAfterEndGameEvent(GeneralEventArgs e)
+ {
+ return AfterEndGame?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnSucceedEndGameEvent(GeneralEventArgs e)
+ {
+ return SucceedEndGame?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
+
+ public EventResult OnFailedEndGameEvent(GeneralEventArgs e)
+ {
+ return FailedEndGame?.Invoke(this, e) ?? EventResult.NoEventImplement;
+ }
}
}
diff --git a/Library/Common/Plugin/Example.cs b/Library/Common/Plugin/Example.cs
new file mode 100644
index 0000000..ea71628
--- /dev/null
+++ b/Library/Common/Plugin/Example.cs
@@ -0,0 +1,41 @@
+using Milimoe.FunGame.Core.Interface;
+using Milimoe.FunGame.Core.Library.Common.Event;
+using Milimoe.FunGame.Core.Library.Constant;
+
+namespace Milimoe.FunGame.Core.Library.Common.Plugin
+{
+ ///
+ /// 必须继承基类:
+ /// 继承事件接口并实现其方法来使插件生效。例如继承:
+ ///
+ public class Example : BasePlugin, ILoginEvent
+ {
+ public override string Name => "FunGame Example Plugin";
+
+ public override string Description => "My First Plugin";
+
+ public override string Version => "1.0.0";
+
+ public override string Author => "FunGamer";
+
+ public EventResult AfterLoginEvent(object sender, LoginEventArgs e)
+ {
+ return EventResult.Success;
+ }
+
+ public EventResult BeforeLoginEvent(object sender, LoginEventArgs e)
+ {
+ return EventResult.Success;
+ }
+
+ public EventResult FailedLoginEvent(object sender, LoginEventArgs e)
+ {
+ return EventResult.Success;
+ }
+
+ public EventResult SucceedLoginEvent(object sender, LoginEventArgs e)
+ {
+ return EventResult.Success;
+ }
+ }
+}
diff --git a/Service/PluginManager.cs b/Service/PluginManager.cs
index 910df7d..229d040 100644
--- a/Service/PluginManager.cs
+++ b/Service/PluginManager.cs
@@ -1,7 +1,40 @@
-namespace Milimoe.FunGame.Core.Service
+using System.Reflection;
+using Milimoe.FunGame.Core.Library.Common.Plugin;
+
+namespace Milimoe.FunGame.Core.Service
{
internal class PluginManager
{
+ public static Dictionary LoadPlugin()
+ {
+ Dictionary plugins = new();
+ string directory = "plugins";
+ // 获取目录中所有的 DLL 文件路径
+ string[] dlls = Directory.GetFiles(directory, "*.dll");
+
+ foreach (string dll in dlls)
+ {
+ try
+ {
+ // 加载 DLL
+ Assembly assembly = Assembly.LoadFrom(dll);
+
+ // 遍历 DLL 中的类型
+ foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(BasePlugin))))
+ {
+ BasePlugin instance = Activator.CreateInstance();
+ plugins.Add(instance.Name, instance);
+ }
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine($"Failed to load DLL: {dll}");
+ Console.WriteLine($"Error: {e.Message}");
+ }
+ }
+
+ return plugins;
+ }
}
-}
+}
\ No newline at end of file