diff --git a/FunGame.Server/Controllers/DataRequestController.cs b/FunGame.Server/Controllers/DataRequestController.cs index 7b49821..6a694e0 100644 --- a/FunGame.Server/Controllers/DataRequestController.cs +++ b/FunGame.Server/Controllers/DataRequestController.cs @@ -168,11 +168,11 @@ namespace Milimoe.FunGame.Server.Controller if (RequestData.Count >= 3) { RoomType type = DataRequest.GetHashtableJsonObject(RequestData, "roomtype"); - string gamemode = DataRequest.GetHashtableJsonObject(RequestData, "gamemode") ?? ""; + string GameModule = DataRequest.GetHashtableJsonObject(RequestData, "GameModule") ?? ""; string gamemap = DataRequest.GetHashtableJsonObject(RequestData, "gamemap") ?? ""; bool isrank = DataRequest.GetHashtableJsonObject(RequestData, "isrank"); - ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_LastRequest) + " : " + RoomSet.GetTypeString(type) + " (" + string.Join(", ", [gamemode, gamemap]) + ")", InvokeMessageType.DataRequest); - if (gamemode == "" || gamemap == "") + ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_LastRequest) + " : " + RoomSet.GetTypeString(type) + " (" + string.Join(", ", [GameModule, gamemap]) + ")", InvokeMessageType.DataRequest); + if (GameModule == "" || gamemap == "") { ServerHelper.WriteLine("缺少对应的模组或地图,无法创建房间。"); ResultData.Add("room", room); @@ -184,7 +184,7 @@ namespace Milimoe.FunGame.Server.Controller if (user.Id != 0) { string roomid = Verification.CreateVerifyCode(VerifyCodeType.MixVerifyCode, 7).ToUpper(); - SQLHelper.Execute(RoomQuery.Insert_CreateRoom(roomid, user.Id, type, gamemode, gamemap, isrank, password ?? "")); + SQLHelper.Execute(RoomQuery.Insert_CreateRoom(roomid, user.Id, type, GameModule, gamemap, isrank, password ?? "")); if (SQLHelper.Result == SQLResult.Success) { ServerHelper.WriteLine("[CreateRoom] Master: " + user.Username + " RoomID: " + roomid); diff --git a/FunGame.Server/Main.cs b/FunGame.Server/Main.cs index 7be2c52..c1c79de 100644 --- a/FunGame.Server/Main.cs +++ b/FunGame.Server/Main.cs @@ -1,4 +1,5 @@ using System.Collections; +using System.Collections.Generic; using Milimoe.FunGame; using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Library.Common.Addon; @@ -59,7 +60,7 @@ void StartServer() ServerHelper.InitOrderList(); // 读取游戏模组 - if (!GetGameModeList()) + if (!GetGameModuleList()) { ServerHelper.WriteLine("服务器似乎未安装任何游戏模组,请检查是否正确安装它们。"); } @@ -153,54 +154,43 @@ void StartServer() }); } -bool GetGameModeList() +bool GetGameModuleList() { - // 同时读取Implement预设的模组和gamemods目录下的模组,最后合成一个总的列表 List supported = []; // 构建AddonController Hashtable delegates = []; - delegates.Add("WriteLine", new Action(msg => ServerHelper.WriteLine(msg, InvokeMessageType.GameMode))); + delegates.Add("WriteLine", new Action(msg => ServerHelper.WriteLine(msg, InvokeMessageType.GameModule))); delegates.Add("Error", new Action(ServerHelper.Error)); - // 开始读取 - Config.GameModeLoader = GameModeLoader.LoadGameModes(Config.FunGameType, delegates); - string[] mods = (string[]?)Implement.GetFunGameImplValue(InterfaceType.IServer, InterfaceMethod.GameModeList, false) ?? []; - if (mods.Length > 0) + // 读取modules目录下的模组 + Config.GameModuleLoader = GameModuleLoader.LoadGameModules(Config.FunGameType, delegates); + foreach (GameModule module in Config.GameModuleLoader.AssociatedServers.Keys) { - supported.AddRange(mods); - // 检查已安装的模组中是否在Implement预设的模组中存在 - foreach (string mod in mods) + bool check = true; + // 检查模组是否存在对应的模组服务器 + if (Config.GameModuleLoader.AssociatedServers[module] is null) { - if (!Config.GameModeLoader.ServerModes.ContainsKey(mod)) - { - ServerHelper.WriteLine("[GameMode] Load Failed: " + mod + " 不存在或未正确安装"); - supported.Remove(mod); - } + ServerHelper.WriteLine("[GameModule] Load Failed: " + module.Name + " 缺少模组服务器"); + check = false; + } + // 检查模组是否有相对应的地图 + if (!Config.GameModuleLoader.Maps.ContainsKey(module.DefaultMap)) + { + ServerHelper.WriteLine("[GameModule] Load Failed: " + module + " 没有找到相对应的地图,加载失败"); + check = false; + } + if (check) + { + supported.Add(module.Name); } } - // 检查模组是否有相对应的地图 - foreach (GameModeServer mode in Config.GameModeLoader.ServerModes.Values) - { - string modename = mode.Name; - if (Config.GameModeLoader.Maps.ContainsKey(mode.DefaultMap)) - { - supported.Add(modename); - } - else - { - ServerHelper.WriteLine("[GameMode] Load Failed: " + modename + " 没有找到相对应的地图,加载失败"); - Config.GameModeLoader.ServerModes.Remove(modename); - supported.Remove(modename); - } - } - // 设置全局 - Config.GameModeSupported = supported.Distinct().ToArray(); - foreach (string modename in Config.GameModeSupported) + Config.GameModuleSupported = supported.Distinct().ToArray(); + foreach (string modename in Config.GameModuleSupported) { - ServerHelper.WriteLine("[GameMode] Loaded: " + modename); + ServerHelper.WriteLine("[GameModule] Loaded: " + modename); } - return Config.GameModeSupported.Length > 0; + return Config.GameModuleSupported.Length > 0; } bool Connect(ClientSocket socket, Guid token, string clientip, ref bool isDebugMode) @@ -235,7 +225,7 @@ bool Connect(ClientSocket socket, Guid token, string clientip, ref bool isDebugM string msg = ""; List ClientDontHave = []; - string strDontHave = string.Join("\r\n", Config.GameModeSupported.Where(mode => !modes.Contains(mode))); + string strDontHave = string.Join("\r\n", Config.GameModuleSupported.Where(mode => !modes.Contains(mode))); if (strDontHave != "") { strDontHave = "客户端缺少服务器所需的模组:" + strDontHave; diff --git a/FunGame.Server/Models/ServerModel.cs b/FunGame.Server/Models/ServerModel.cs index 9b334bc..6c96c04 100644 --- a/FunGame.Server/Models/ServerModel.cs +++ b/FunGame.Server/Models/ServerModel.cs @@ -35,7 +35,7 @@ namespace Milimoe.FunGame.Server.Model /** * Private */ - private GameModeServer? NowGamingServer = null; + private GameModuleServer? NowGamingServer = null; private ClientSocket? _Socket = null; private bool _Running = false; @@ -73,8 +73,8 @@ namespace Milimoe.FunGame.Server.Model // 接收客户端消息 try { - // 禁止GameModeServer调用 - if ((IServerModel)this is GameModeServer) throw new NotSupportedException("请勿在GameModeServer类中调用此方法"); + // 禁止GameModuleServer调用 + if ((IServerModel)this is GameModuleServer) throw new NotSupportedException("请勿在GameModuleServer类中调用此方法"); SocketObject[] SocketObjects = socket.Receive(); if (SocketObjects.Length == 0) @@ -229,7 +229,7 @@ namespace Milimoe.FunGame.Server.Model public void Start() { - if ((IServerModel)this is GameModeServer) throw new NotSupportedException("请勿在GameModeServer类中调用此方法"); // 禁止GameModeServer调用 + if ((IServerModel)this is GameModuleServer) throw new NotSupportedException("请勿在GameModuleServer类中调用此方法"); // 禁止GameModuleServer调用 Task StreamReader = Task.Factory.StartNew(CreateStreamReader); Task PeriodicalQuerier = Task.Factory.StartNew(CreatePeriodicalQuerier); } @@ -390,11 +390,11 @@ namespace Milimoe.FunGame.Server.Model // 启动服务器 TaskUtility.NewTask(() => { - if (Config.GameModeLoader != null && Config.GameModeLoader.ServerModes.ContainsKey(room.GameMode)) + if (Config.GameModuleLoader != null && Config.GameModuleLoader.ServerModules.ContainsKey(room.GameModule)) { - NowGamingServer = Config.GameModeLoader.GetServerMode(room.GameMode); + NowGamingServer = Config.GameModuleLoader.GetServerMode(room.GameModule); Dictionary others = Server.UserList.Cast().Where(model => usernames.Contains(model.User.Username) && model.User.Username != UserName).ToDictionary(k => k.User.Username, v => v); - if (NowGamingServer.StartServer(room.GameMode, room, users, this, others)) + if (NowGamingServer.StartServer(room.GameModule, room, users, this, others)) { foreach (ServerModel serverTask in Server.UserList.Cast().Where(model => usernames.Contains(model.User.Username))) { diff --git a/FunGame.Server/Others/Config.cs b/FunGame.Server/Others/Config.cs index b74ae36..c2f2de0 100644 --- a/FunGame.Server/Others/Config.cs +++ b/FunGame.Server/Others/Config.cs @@ -80,7 +80,7 @@ namespace Milimoe.FunGame.Server.Others /// /// FunGame Runtime /// - public static FunGameInfo.FunGame FunGameType { get; } = FunGameInfo.FunGame.FunGame_Server; + public static FunGameInfo.FunGame FunGameType => FunGameInfo.FunGame.FunGame_Server; /// /// 服务器指令列表 @@ -100,12 +100,12 @@ namespace Milimoe.FunGame.Server.Others /// /// Server实际安装的模组 /// - public static GameModeLoader? GameModeLoader { get; set; } + public static GameModuleLoader? GameModuleLoader { get; set; } /// - /// 未LoadGameMods时,此属性表示至少需要安装的模组 + /// 未Loadmodules时,此属性表示至少需要安装的模组 /// - public static string[] GameModeSupported { get; set; } = []; + public static string[] GameModuleSupported { get; set; } = []; /// /// 全局数据库连接器 diff --git a/FunGame.Server/Utilities/General.cs b/FunGame.Server/Utilities/General.cs index 4807d85..4d79b0e 100644 --- a/FunGame.Server/Utilities/General.cs +++ b/FunGame.Server/Utilities/General.cs @@ -38,9 +38,9 @@ namespace Milimoe.FunGame.Server.Utility Console.ForegroundColor = ConsoleColor.Green; prefix = "[Plugin] "; break; - case InvokeMessageType.GameMode: + case InvokeMessageType.GameModule: Console.ForegroundColor = ConsoleColor.Blue; - prefix = "[GameMode] "; + prefix = "[GameModule] "; break; case InvokeMessageType.System: case InvokeMessageType.None: diff --git a/LICENSE.txt b/LICENSE.txt index 0263a46..0ad25db 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,7 +1,7 @@ GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 - Copyright (C) 2022-2024 milimoe & project-redbud. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.