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 SkillFactory SkillFactory = new(); private readonly static EffectFactory EffectFactory = new(); private readonly static ItemFactory ItemFactory = new(); private readonly static RoomFactory RoomFactory = new(); private readonly static UserFactory UserFactory = new(); /// /// 获取角色实例 /// /// public static Character GetCharacter() { return CharacterFactory.Create(); } /// /// 获取库存实例 /// /// public static Inventory GetInventory() { return InventoryFactory.Create(); } /// /// 获取技能实例 /// /// public static Skill GetSkill() { return SkillFactory.Create(); } /// /// 获取技能特效实例 /// /// public static Effect GetEffect() { return EffectFactory.Create(); } /// /// 获取物品实例 /// /// public static Item GetItem() { return ItemFactory.Create(); } /// /// 获取房间实例 /// /// 房间内部序列号 /// 房间号 /// 创建时间 /// 房主 /// 房间类型 /// 游戏模组 /// /// 房间状态 /// /// 房间密码 /// 人数上限 /// public static Room GetRoom(long id = 0, string roomid = "-1", DateTime? createTime = null, User? roomMaster = null, RoomType roomType = RoomType.All, string gameModule = "", string gameMap = "", RoomState roomState = RoomState.Created, bool isRank = false, string password = "", int maxUsers = 4) { return RoomFactory.Create(id, roomid, createTime, roomMaster, roomType, gameModule, gameMap, roomState, isRank, password, maxUsers); } /// /// 通过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 gameModule = (string)drRoom[RoomQuery.Column_GameModule]; 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]; int maxUsers = (int)drRoom[RoomQuery.Column_MaxUsers]; room = GetRoom(id, roomid, createTime, roomMaster, roomType, gameModule, gameMap, roomState, isRank, password, maxUsers); } 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 gameModule = (string)drRoom[RoomQuery.Column_GameModule]; 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, gameModule, gameMap, roomState, isRank, password)); } } return list; } /// /// 获取大厅(-1号房) /// /// internal static Room GetHall() { return RoomFactory.Create(); } /// /// 获取用户实例 /// /// 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, double Credits = 0, double Materials = 0, double 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; double Credits = Convert.ToDouble(dr[UserQuery.Column_Credits]); double Materials = Convert.ToDouble(dr[UserQuery.Column_Materials]); double GameTime = Convert.ToDouble(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(); } } }