Beispiel #1
0
 //投票超时处理
 public static void RoomVoteOverTime(this MatchRoom matchRoom)
 {
     //超时默认结果为同意
     matchRoom.VoteDissolveResult.Result = VoteResultType.Consent;
     //广播投票的消息
     matchRoom.BroadcastActorMessage(matchRoom.VoteDissolveResult);
     //通知游戏服 房间解散 销毁游戏服的房间 游戏服会通知匹配服的
     ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_RoomDissolve());
 }
Beispiel #2
0
        //玩家投票解散房间
        public static void PlayerVoteDissolveRoom(this MatchRoom matchRoom, long userId, bool isConsent)
        {
            if (!matchRoom.IsVoteDissolveIn)//不是投票中收到投票消息 不予理会
            {
                return;
            }
            VoteInfo voteInfo = new VoteInfo();

            voteInfo.UserId    = userId;
            voteInfo.IsConsent = isConsent;
            matchRoom.VoteDissolveResult.VoteInfos.Add(voteInfo);
            matchRoom.VoteDissolveResult.Result = VoteResultType.BeingVote;
            if (!isConsent)
            {
                //一个人不同意 直接不解散
                matchRoom.VoteDissolveResult.Result = VoteResultType.NoConsent;
            }
            else
            {
                //检测是否所有人都同意
                if (matchRoom.VoteDissolveResult.VoteInfos.Count == matchRoom.PlayerInfoDic.Count)
                {
                    matchRoom.VoteDissolveResult.Result = VoteResultType.Consent;
                }
            }
            //广播投票的消息
            matchRoom.BroadcastActorMessage(matchRoom.VoteDissolveResult);
            if (matchRoom.VoteDissolveResult.Result != VoteResultType.BeingVote)//如果结论不是投票中 就表示已经投票结束
            {
                if (MatchRoomComponent.Ins.VoteInRooms.Contains(matchRoom))
                {
                    MatchRoomComponent.Ins.VoteInRooms.Remove(matchRoom);//把自己房间 从投票超时房间里面移除
                }
                if (matchRoom.VoteDissolveResult.Result == VoteResultType.NoConsent)
                {
                    //让游戏服的房间开始游戏
                    ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_PauseRoomGame()
                    {
                        IsPause = false
                    });
                }
                else if (matchRoom.VoteDissolveResult.Result == VoteResultType.Consent)
                {
                    //通知游戏服 房间解散 销毁游戏服的房间 游戏服会通知匹配服的
                    ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_RoomDissolve());
                }
                matchRoom.IsVoteDissolveIn   = false; //改变投票状态
                matchRoom.VoteDissolveResult = null;  //清空投票信息
            }
        }
Beispiel #3
0
        //玩家上线
        public static void PlayerOnLine(this MatchRoom matchRoom, long userId, long sessionActorId)
        {
            MatchPlayerInfo playerInfo = matchRoom.GetPlayerInfo(userId);

            if (playerInfo == null)
            {
                Log.Error(matchRoom.RoomId + "房间没有玩家" + userId);
            }
            playerInfo.SessionActorId = sessionActorId;
            playerInfo.User.GetComponent <UserGateActorIdComponent>().ActorId = sessionActorId;
            playerInfo.User.IsOnLine = true;
            matchRoom.BroadcastActorMessage(new Actor_UserOnLine()
            {
                UserId = userId
            });
        }
Beispiel #4
0
 //玩家下线
 public static void PlayerOffline(this MatchRoom matchRoom, long userId)
 {
     for (int i = 0; i < matchRoom.PlayerInfoDic.Count; i++)
     {
         if (matchRoom.PlayerInfoDic[i].User.UserId == userId)
         {
             matchRoom.PlayerInfoDic[i].User.IsOnLine  = false;
             matchRoom.PlayerInfoDic[i].SessionActorId = 0;
             matchRoom.PlayerInfoDic[i].User.GetComponent <UserGateActorIdComponent>().ActorId = 0;
             break;
         }
     }
     matchRoom.BroadcastActorMessage(new Actor_UserOffline()
     {
         UserId = userId
     });
 }
Beispiel #5
0
 //玩家加入房间
 public static bool UserJoinRoom(this MatchRoom matchRoom, User user, long sessionActorId)
 {
     for (int i = 0; i < matchRoom.RoomConfig.GameNumber; i++)
     {
         if (!matchRoom.PlayerInfoDic.ContainsKey(i))
         {
             MatchPlayerInfo matchPlayerInfo = MatchPlayerInfoFactory.Create(user, sessionActorId, i);
             matchRoom.BroadcastActorMessage(new Actor_OtherJoinRoom()
             {
                 PlayerInfo = matchPlayerInfo
             });                                                                                         //广播其他玩家加入房间信息
             matchRoom.PlayerInfoDic[i] = matchPlayerInfo;
             return(true);
         }
     }
     return(false);
 }
Beispiel #6
0
 //玩家退出房间
 public static bool UserOutRoom(this MatchRoom matchRoom, long userId)
 {
     if (matchRoom.RoomType == RoomType.Match)
     {
         return(true);//随机匹配房间无法退出 只能等待游戏结束 回复成功让玩家回到大厅
     }
     //如果正在游戏接发起投票解散房间
     if (matchRoom.IsGameBeing)
     {
         matchRoom.RommEnterVoteDissolve(userId);//开始投票
         return(false);
     }
     matchRoom.intData = -1;
     //如果是房卡 并且还没开始 就退出房间
     foreach (var player in matchRoom.PlayerInfoDic)
     {
         if (player.Value.User.UserId == userId)
         {
             matchRoom.intData = player.Key;
             matchRoom.PlayerInfoDic.Remove(player.Key);
             matchRoom.BroadcastActorMessage(new Actor_OtherOutRoom()
             {
                 UserId = userId
             });
             break;
         }
     }
     //如果是房主退出房间 直接移除房间
     if (matchRoom.intData == 0)
     {
         Game.Scene.GetComponent <MatchRoomComponent>().RemoveRoom(matchRoom.RoomId);
     }
     else if (matchRoom.intData == -1)
     {
         Log.Error("退出房间玩家不在房间中");
     }
     return(true);
 }