/// <summary> /// 获取用户信息 /// </summary> /// <param name="token"></param> /// <returns></returns> public UserModel GetModel(UserToken token) { //判断连接是否为空 if (token == null) { return(null); } roleinfo info = cache.CacheFactory.user.Get(token); if (info == null) { return(null); } UserModel model = new UserModel(); model.id = info.id; model.head = info.head; model.username = info.username; model.nickname = info.nickname; model.phone = info.phone; model.sex = info.sex; model.coin = info.coin; model.cash = info.cash; return(model); }
/// <summary> /// 初始化房间 /// </summary> /// <param name="model"></param> public void Init(MatchInfoModel model) { GameType = model.GameType;//初始化房间类型 //初始化队伍成员 TemeId.Clear(); TemeId.AddRange(model.Team); RoomId = model.RoomId; //初始化房间id MaxPlayer = model.MaxPlayer; //初始化人数 //添加方位数量 for (int i = 0; i < MaxPlayer; i++) { Direction.Add(i); } //初始化玩家信息 for (int i = 0; i < model.Team.Count; i++) { //初始化玩家信息 FightUserModel m = new FightUserModel(); //获取用户信息 roleinfo ri = cache.CacheFactory.user.Get(model.Team[i]); //如果获取到,则将玩家信息赋值给用户信息 if (ri != null) { m.coin = ri.coin; m.nickname = ri.nickname; m.id = ri.id; } //否则,设置为默认信息 else { m.coin = 0; m.nickname = "nickname"; m.id = model.Team [i]; } //赋值玩家当前方位 m.direction = Direction[0]; Direction.RemoveAt(0); UserFight.Add(m.id, m); } //广播玩家信息 for (int i = 0; i < TemeId.Count; i++) { Broadcast(FightProtocol.PLAYERINFO_BRQ, UserFight[TemeId[i]]); } DebugUtil.Instance.LogToTime(RoomId + "房间初始化成功"); }
/// <summary> /// 读取账号 /// </summary> public void LoadAccount() { //实例化一个角色数据库对象 roleinfo info = new roleinfo(); //获取id列全部值 List <int> idList = info.GetRowById(); for (int i = 0; i < idList.Count; i++) { roleinfo rinfo = new roleinfo(); rinfo.GetModelById(idList[i]); if (!AccountMap.ContainsKey(rinfo.username)) { AccountMap.Add(rinfo.username, rinfo); } } }
/// <summary> /// 请求开始匹配 /// </summary> /// <param name="token">用户连接对象</param> /// <param name="type">房间类型</param> /// <returns>0 请求开始匹配成功</returns> /// <returns>-1 当前金币余额不足</returns> /// <returns>-2 当前玩家已在匹配列表</returns> /// <returns>-3 当前玩家无效</returns> public ResponseStartMatchInfo StartMatch(UserToken token, SConst.GameType type) { //通过连接获取账号 roleinfo user = cache.CacheFactory.user.Get(token); ResponseStartMatchInfo info = new ResponseStartMatchInfo(); if (user == null) { info.Status = -3; DebugUtil.Instance.LogToTime(token.conn.RemoteEndPoint + "请求开始匹配失败,连接无效"); return(info); } int uid = user.id; int ucoin = user.coin; //获取进入房间需要的最少的金币 int coin = cache.CacheFactory.match.GetRoomCoinAtType(type); if (ucoin < coin) { info.Status = -1; DebugUtil.Instance.LogToTime(uid + "请求开始匹配失败,当前金币余额不足,余额为:" + ucoin); return(info); } //获取是否在匹配对列中 int matchid = cache.CacheFactory.match.IsOnMatchArray(uid); if (matchid > 0) { info.Status = -2; DebugUtil.Instance.LogToTime(uid + "请求开始匹配"); return(info); } //创建一个匹配对列,并返回匹配成功 cache.CacheFactory.match.AddMatch(uid, type, ref info); info.Status = 0; DebugUtil.Instance.LogToTime(uid + "请求开始匹配成功,创建一个匹配对列"); return(info); }