using System.Data; using Milimoe.FunGame.Core.Api.Factory; using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.SQLScript.Entity; namespace Milimoe.FunGame.Core.Api.Utility { public class Factory { private readonly static CharacterFactory CharacterFactory = new(); private readonly static InventoryFactory InventoryFactory = new(); private readonly static ItemFactory ItemFactory = new(); private readonly static RoomFactory RoomFactory = new(); private readonly static SkillFactory SkillFactory = new(); private readonly static UserFactory UserFactory = new(); /// /// 获取角色实例 /// /// public static Character GetCharacter() { return CharacterFactory.Create(); } /// /// 获取库存实例 /// /// public static Inventory GetInventory() { return InventoryFactory.Create(); } /// /// 获取物品实例,默认返回Passiveitem 被动物品 需要强制转换 /// /// Item类型 主动 或 被动 /// public static Item GetItem(ItemType type = ItemType.Passive) { return ItemFactory.Create(type); } /// /// 获取主动物品实例 /// /// public static ActiveItem GetActiveItem() { return (ActiveItem)ItemFactory.Create(ItemType.Active); } /// /// 获取被动物品实例 /// /// public static PassiveItem GetPassiveItem() { return (PassiveItem)ItemFactory.Create(ItemType.Passive); } /// /// 获取房间实例 /// /// 房间内部序列号 /// 房间号 /// 创建时间 /// 房主 /// 房间类型 /// 游戏模组 /// /// 房间状态 /// /// 房间密码 /// public static Room GetRoom(long Id = 0, string Roomid = "-1", DateTime? CreateTime = null, User? RoomMaster = null, RoomType RoomType = RoomType.All, string GameMode = "", string GameMap = "", RoomState RoomState = RoomState.Created, bool IsRank = false, string Password = "") { return RoomFactory.Create(Id, Roomid, CreateTime, RoomMaster, RoomType, GameMode, GameMap, RoomState, IsRank, Password); } /// /// 通过DataSet获取房间实例 /// /// /// /// public static Room GetRoom(DataRow DrRoom, User User) { Room room = General.HallInstance; if (DrRoom != null) { long Id = (long)DrRoom[RoomQuery.Column_ID]; string Roomid = (string)DrRoom[RoomQuery.Column_RoomID]; DateTime CreateTime = (DateTime)DrRoom[RoomQuery.Column_CreateTime]; User RoomMaster = User; RoomType RoomType = (RoomType)Convert.ToInt32(DrRoom[RoomQuery.Column_RoomType]); string GameMode = (string)DrRoom[RoomQuery.Column_GameMode]; string GameMap = (string)DrRoom[RoomQuery.Column_GameMap]; RoomState RoomState = (RoomState)Convert.ToInt32(DrRoom[RoomQuery.Column_RoomState]); bool IsRank = Convert.ToInt32(DrRoom[RoomQuery.Column_IsRank]) == 1; string Password = (string)DrRoom[RoomQuery.Column_Password]; room = GetRoom(Id, Roomid, CreateTime, RoomMaster, RoomType, GameMode, GameMap, RoomState, IsRank, Password); } return room; } /// /// 通过DataSet获取房间列表 /// /// /// /// public static List GetRooms(DataSet DsRoom, DataSet DsUser) { List list = [ General.HallInstance ]; if (DsRoom != null && DsRoom.Tables[0].Rows.Count > 0) { foreach (DataRow DrRoom in DsRoom.Tables[0].Rows) { long Id = (long)DrRoom[RoomQuery.Column_ID]; string Roomid = (string)DrRoom[RoomQuery.Column_RoomID]; DateTime CreateTime = (DateTime)DrRoom[RoomQuery.Column_CreateTime]; User RoomMaster = General.UnknownUserInstance; if (DsUser != null && DsUser.Tables.Count > 0) { DataRow[] rows = DsUser.Tables[0].Select($"{UserQuery.Column_UID} = {(long)DrRoom[RoomQuery.Column_RoomMaster]}"); if (rows.Length > 0) { RoomMaster = GetUser(rows[0]); } } RoomType RoomType = (RoomType)Convert.ToInt32(DrRoom[RoomQuery.Column_RoomType]); string GameMode = (string)DrRoom[RoomQuery.Column_GameMode]; string GameMap = (string)DrRoom[RoomQuery.Column_GameMap]; RoomState RoomState = (RoomState)Convert.ToInt32(DrRoom[RoomQuery.Column_RoomState]); bool IsRank = Convert.ToInt32(DrRoom[RoomQuery.Column_IsRank]) == 1; string Password = (string)DrRoom[RoomQuery.Column_Password]; list.Add(GetRoom(Id, Roomid, CreateTime, RoomMaster, RoomType, GameMode, GameMap, RoomState, IsRank, Password)); } } return list; } /// /// 获取大厅(-1号房) /// /// internal static Room GetHall() { return RoomFactory.Create(); } /// /// 获取技能实例,默认返回PassiveSkill 被动技能 需要强制转换 /// /// Skill类型 主动 或 被动 /// public static Skill GetSkill(SkillType type = SkillType.Passive) { return SkillFactory.Create(type); } /// /// 获取主动技能实例 /// /// public static ActiveSkill GetActiveSkill() { return (ActiveSkill)SkillFactory.Create(SkillType.Active); } /// /// 获取被动技能实例 /// /// public static PassiveSkill GetPassiveSkill() { return (PassiveSkill)SkillFactory.Create(SkillType.Passive); } /// /// 获取用户实例 /// /// public static User GetUser() { return UserFactory.Create(); } /// /// 获取用户实例 /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// public static User GetUser(long Id = 0, string Username = "", DateTime? RegTime = null, DateTime? LastTime = null, string Email = "", string NickName = "", bool IsAdmin = false, bool IsOperator = false, bool IsEnable = true, decimal Credits = 0, decimal Materials = 0, decimal GameTime = 0, string AutoKey = "") { return UserFactory.Create(Id, Username, RegTime, LastTime, Email, NickName, IsAdmin, IsOperator, IsEnable, Credits, Materials, GameTime, AutoKey); } /// /// 获取用户实例 /// /// /// public static User GetUser(DataSet ds) { if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { return GetUser(ds.Tables[0].Rows[0]); } return UserFactory.Create(); } /// /// 获取用户实例 /// /// /// public static User GetUser(DataRow dr) { if (dr != null) { long Id = (long)dr[UserQuery.Column_UID]; string Username = (string)dr[UserQuery.Column_Username]; DateTime RegTime = (DateTime)dr[UserQuery.Column_RegTime]; DateTime LastTime = (DateTime)dr[UserQuery.Column_LastTime]; string Email = (string)dr[UserQuery.Column_Email]; string NickName = (string)dr[UserQuery.Column_Nickname]; bool IsAdmin = Convert.ToInt32(dr[UserQuery.Column_IsAdmin]) == 1; bool IsOperator = Convert.ToInt32(dr[UserQuery.Column_IsOperator]) == 1; bool IsEnable = Convert.ToInt32(dr[UserQuery.Column_IsEnable]) == 1; decimal Credits = Convert.ToDecimal(dr[UserQuery.Column_Credits]); decimal Materials = Convert.ToDecimal(dr[UserQuery.Column_Materials]); decimal GameTime = Convert.ToDecimal(dr[UserQuery.Column_GameTime]); string AutoKey = (string)dr[UserQuery.Column_AutoKey]; return UserFactory.Create(Id, Username, RegTime, LastTime, Email, NickName, IsAdmin, IsOperator, IsEnable, Credits, Materials, GameTime, AutoKey); } return UserFactory.Create(); } } }