diff --git a/FunGame.Desktop/Library/Base/BaseMain.cs b/FunGame.Desktop/Library/Base/BaseMain.cs
index 98246cc..e84eaa9 100644
--- a/FunGame.Desktop/Library/Base/BaseMain.cs
+++ b/FunGame.Desktop/Library/Base/BaseMain.cs
@@ -5,7 +5,7 @@ using Milimoe.FunGame.Desktop.Library.Component;
namespace Milimoe.FunGame.Desktop.Library.Base
{
public class BaseMain : GeneralForm, IConnectEventHandler, IDisconnectEventHandler, ILoginEventHandler, ILogoutEventHandler, IIntoRoomEventHandler, ISendTalkEventHandler,
- ICreateRoomEventHandler, IQuitRoomEventHandler, IStartMatchEventHandler, IStartGameEventHandler, IOpenInventoryEventHandler, IOpenStoreEventHandler
+ ICreateRoomEventHandler, IQuitRoomEventHandler, IStartMatchEventHandler, IStartGameEventHandler, IEndGameEventHandler, IOpenInventoryEventHandler, IOpenStoreEventHandler
{
public event IConnectEventHandler.BeforeEventHandler? BeforeConnect;
public event IConnectEventHandler.AfterEventHandler? AfterConnect;
@@ -306,5 +306,30 @@ namespace Milimoe.FunGame.Desktop.Library.Base
{
FailedOpenStore?.Invoke(sender, e);
}
+
+ public event IEventHandler.BeforeEventHandler? BeforeEndGame;
+ public event IEventHandler.AfterEventHandler? AfterEndGame;
+ public event IEventHandler.SucceedEventHandler? SucceedEndGame;
+ public event IEventHandler.FailedEventHandler? FailedEndGame;
+
+ public void OnBeforeEndGameEvent(object sender, GeneralEventArgs e)
+ {
+ BeforeEndGame?.Invoke(sender, e);
+ }
+
+ public void OnAfterEndGameEvent(object sender, GeneralEventArgs e)
+ {
+ AfterEndGame?.Invoke(sender, e);
+ }
+
+ public void OnSucceedEndGameEvent(object sender, GeneralEventArgs e)
+ {
+ SucceedEndGame?.Invoke(sender, e);
+ }
+
+ public void OnFailedEndGameEvent(object sender, GeneralEventArgs e)
+ {
+ FailedEndGame?.Invoke(sender, e);
+ }
}
}
diff --git a/FunGame.Desktop/UI/Main/Main.cs b/FunGame.Desktop/UI/Main/Main.cs
index f7dc7e4..4473d22 100644
--- a/FunGame.Desktop/UI/Main/Main.cs
+++ b/FunGame.Desktop/UI/Main/Main.cs
@@ -512,15 +512,32 @@ namespace Milimoe.FunGame.Desktop.UI
///
/// 游戏结束,结算
///
- private void EndGame(Room room, List users)
+ private void EndGame(params object[] args)
{
- Visible = true;
- // test
- WritelnGameInfo("===== TEST =====");
- SetButtonEnabled(true, ClientState.InRoom);
- _InGame = false;
- WritelnGameInfo("游戏结束!" + " [ " + users[new Random().Next(users.Count)] + " ] " + "是赢家!");
- RunTime.Controller?.EndGame();
+ // 触发事件 如果before事件返回false 则不能认定为游戏结束
+ GeneralEventArgs e = new(args);
+ OnBeforeEndGameEvent(this, e);
+ RunTime.PluginLoader?.OnBeforeEndGameEvent(this, e);
+ if (e.Cancel)
+ {
+ return;
+ }
+ if (RunTime.Controller?.EndGame() ?? false)
+ {
+ // 恢复界面
+ Visible = true;
+ _InGame = false;
+ SetButtonEnabled(true, ClientState.InRoom);
+ OnSucceedEndGameEvent(this, e);
+ RunTime.PluginLoader?.OnSucceedEndGameEvent(this, e);
+ }
+ else
+ {
+ OnFailedEndGameEvent(this, e);
+ RunTime.PluginLoader?.OnFailedEndGameEvent(this, e);
+ }
+ OnAfterEndGameEvent(this, e);
+ RunTime.PluginLoader?.OnAfterEndGameEvent(this, e);
}
///