using EggLink.DanhengServer.Enums.Rogue; using EggLink.DanhengServer.GameServer.Game.ChessRogue.Modifier.ModifierEffect; using EggLink.DanhengServer.GameServer.Game.Lobby; using EggLink.DanhengServer.GameServer.Game.Mission; using EggLink.DanhengServer.GameServer.Game.Mission.FinishAction; using EggLink.DanhengServer.GameServer.Game.Mission.FinishType; using EggLink.DanhengServer.GameServer.Game.MultiPlayer; using EggLink.DanhengServer.GameServer.Game.Rogue.Event; using System.Reflection; using EggLink.DanhengServer.GameServer.Game.ChessRogue; namespace EggLink.DanhengServer.GameServer.Server; public static class ServerUtils { public static LobbyServerManager LobbyServerManager { get; set; } = new(); public static MultiPlayerGameServerManager MultiPlayerGameServerManager { get; set; } = new(); public static void InitializeHandlers() { // mission handlers { var types = Assembly.GetExecutingAssembly().GetTypes(); foreach (var type in types) { var attr = type.GetCustomAttribute(); if (attr != null) { var handler = (MissionFinishActionHandler)Activator.CreateInstance(type, null)!; MissionManager.ActionHandlers.Add(attr.FinishAction, handler); } var attr2 = type.GetCustomAttribute(); if (attr2 != null) { var handler = (MissionFinishTypeHandler)Activator.CreateInstance(type, null)!; MissionManager.FinishTypeHandlers.Add(attr2.FinishType, handler); } } } // rogue event handlers { var types = Assembly.GetExecutingAssembly().GetTypes(); foreach (var type in types) { var attr = type.GetCustomAttribute(); if (attr == null) continue; if (attr.EffectType != DialogueEventTypeEnum.None) { // Effect var effect = (RogueEventEffectHandler)Activator.CreateInstance(type, null)!; RogueEventManager.EffectHandler.Add(attr.EffectType, effect); } else { // Cost var cost = (RogueEventCostHandler)Activator.CreateInstance(type, null)!; RogueEventManager.CostHandler.Add(attr.CostType, cost); } } } // chess rogue modifier handlers { var types = Assembly.GetExecutingAssembly().GetTypes(); foreach (var type in types) { var attr = type.GetCustomAttribute(); if (attr == null) continue; var handler = (ModifierEffectHandler)Activator.CreateInstance(type, null)!; ChessRogueInstance.ModifierEffectHandlers.Add(attr.EffectType, handler); } } } }