/// <summary> /// 离开房间 /// </summary> /// <param name="clientPeer"></param> private void leave(ClientPeer clientPeer) { SingleExcute.Instance.Excute(() => { if (!accountCache.IsOnline(clientPeer))//判断用户是否在线 { return; } int accid = accountCache.GetId(clientPeer); if (!userModelCache.IsExistUserModel(accid))//判断是否存在角色 { return; } int uid = userModelCache.GetModelByAccid(accid).Id; if (!roomCache.IsMatching(uid))//判断当前用户已经在匹配队列 { return; } RoomModel roomModel = roomCache.GetRoomModelByUid(uid); roomCache.LeaveRoom(uid); roomModel.Brocast(uid, clientPeer, OpCode.MATCH, MatchCode.LEAVE_ROOM_BRO);//通知房间内玩家有用户离开 }); }
/// <summary> /// 结束游戏 /// </summary> /// <param name="room">房间模型</param> /// <param name="uid">获胜角色id</param> private void GameOver(FightRoomModel room, int uid) { //获取获胜者身份 int identity = room.GetPlayerIdentity(uid); if (identity == Identity.LANDLORD) { //地主获胜 #region 更新地主玩家的信息,增加豆子,增加经验 UserModel userModel = userModelCache.GetModelByUid(uid); userModel.Been += room.Multiple * 100 * 2; userModel.AddExp(20); userModel.Win++; userModelCache.Update(userModel); #endregion #region 更新农民玩家的信息,减少豆子,增加经验 room.GetSameIdentityUids(Identity.FARMER).ForEach(u => { UserModel user = userModelCache.GetModelByUid(u.Uid); user.Been -= room.Multiple * 100; user.Fail++; user.AddExp(10); userModelCache.Update(user); }); #endregion } else { //农民获胜 #region 更新农民玩家的信息,增加豆子,增加经验 room.GetSameIdentityUids(Identity.FARMER).ForEach(u => { UserModel user = userModelCache.GetModelByUid(u.Uid); user.Been += room.Multiple * 100; user.Win++; user.AddExp(20); userModelCache.Update(user); }); #endregion #region 更新地主玩家的信息,减少豆子,增加经验 room.GetSameIdentityUids(Identity.LANDLORD).ForEach(u => { UserModel user = userModelCache.GetModelByUid(u.Uid); user.Been -= room.Multiple * 100 * 2; user.Fail++; user.AddExp(10); userModelCache.Update(user); }); #endregion } //惩罚逃跑者 userModelCache.GetModelsByUids(room.EscapePlayerId).ForEach(u => { u.Been -= room.Multiple * 100; u.Escape++; userModelCache.Update(u); }); OverDto overDto = new OverDto(); overDto.WinIdentity = identity; List <PlayerDto> playerDtos = room.GetSameIdentityUids(identity); List <int> uids = new List <int>(); foreach (var item in playerDtos) { uids.Add(item.Uid); } overDto.WinUidList = uids; overDto.BeenCount = room.Multiple * 100; //广播游戏结束消息 Brocast(room, OpCode.FIGHT, FightCode.OVER, overDto); //摧毁匹配房间 RoomCache roomCache = Caches.RoomCache; roomCache.DestoryRoom(roomCache.GetRoomModelByUid(uid)); //摧毁战斗房间 fightRoomCache.DestoryRoom(room); }