Пример #1
0
        //开始游戏
        public static void StartGame(this FiveStarRoom fiveStarRoom)
        {
            Actor_FiveStar_StartGame actorFiveStarStart = new Actor_FiveStar_StartGame();

            actorFiveStarStart.RoomConfigs = fiveStarRoom.RoomConfig.Configs;
            actorFiveStarStart.RoomId      = fiveStarRoom.RoomId;
            if (fiveStarRoom.RoomType == RoomType.Match)
            {
                actorFiveStarStart.RoomId = fiveStarRoom.MathRoomId;
            }

            foreach (var player in fiveStarRoom.FiveStarPlayerDic.Values)
            {
                //因为有些对象不能进行序列化 就必须重新复制一份
                actorFiveStarStart.PlayerInfos.Add(FiveStarPlayerFactory.CopySerialize(player));
            }
            foreach (var player in fiveStarRoom.FiveStarPlayerDic)
            {
                player.Value.StartGame(actorFiveStarStart);
            }
            //第一局随机出一个休息的玩家
            fiveStarRoom.NextRestSeatIndex = RandomTool.Random(1, fiveStarRoom.RoomConfig.RoomNumber); //不能为0 因为0要第一个摸牌
            fiveStarRoom.SmallStartGame();                                                             //小局开始游戏
            //用来发送消息的序列化对象 放入简易对象池 不能直接销毁 因为会改变一些东西
            foreach (var player in actorFiveStarStart.PlayerInfos)
            {
                FiveStarPlayerFactory.DisposeSerializePlayer(player);
            }
        }
Пример #2
0
 //给房间内的所有玩家广播消息
 public static void BroadcastMssagePlayers(this FiveStarRoom fiveStarRoom, IActorMessage iActorMessage)
 {
     foreach (var player in fiveStarRoom.FiveStarPlayerDic.Values)
     {
         player.SendMessageUser(iActorMessage);
     }
 }
 //玩家胡牌进行结算 小结算
 public static void PlayerHuPaiResult(this FiveStarRoom fiveStarRoom, int operateType, params int[] seatIndexs)
 {
     fiveStarRoom.InitSamllResultInfo();
     for (int i = 0; i < fiveStarRoom.RoomNumber; i++)
     {
         fiveStarRoom.SmallPlayerResults[i].SeatIndex         = i;                                                //玩家索引
         fiveStarRoom.SmallPlayerResults[i].SamllGangPaiScore = fiveStarRoom.FiveStarPlayerDic[i].SmallGangScore; //小局杠牌得分
         fiveStarRoom.SmallPlayerResults[i].Hands             = fiveStarRoom.FiveStarPlayerDic[i].Hands;          //玩家手牌
         fiveStarRoom.SmallPlayerResults[i].PengGangInfos     = fiveStarRoom.FiveStarPlayerDic[i].OperateInfos;   //碰杠操作信息
         if (seatIndexs.Contains(i))
         {
             if (FiveStarOperateType.ZiMo == operateType)
             {
                 fiveStarRoom.PlayerResultCalculateGrade(fiveStarRoom.FiveStarPlayerDic[i].MoEndHand, i, operateType);//算出胡牌得分
             }
             else if (FiveStarOperateType.FangChongHu == operateType)
             {
                 fiveStarRoom.PlayerResultCalculateGrade(fiveStarRoom.CurrChuPaiCard, i, operateType);//算出胡牌得分
             }
         }
     }
     //如果是胡牌人数是0 就要算 查叫 和亮倒赔付
     if (seatIndexs.Length == 0)
     {
         fiveStarRoom.ChaJiaoLiangDaoPeiFu();
     }
     //分数赋值
     for (int j = 0; j < fiveStarRoom.RoomNumber; j++)
     {
         fiveStarRoom.FiveStarPlayerDic[j].NowScoreChange(fiveStarRoom.SmallPlayerResults[j].GetScore);       //现在的分数要加上胡牌得到分数
         fiveStarRoom.SmallPlayerResults[j].GetScore += fiveStarRoom.SmallPlayerResults[j].SamllGangPaiScore; //最终得分要算上小局杠牌得分
         fiveStarRoom.SmallPlayerResults[j].NowScore  = fiveStarRoom.FiveStarPlayerDic[j].NowScore;           //现在的分数
     }
     fiveStarRoom.SamllResultsFollow(seatIndexs);                                                             //处理小结算后续事件
 }
 //超时操作
 public static void OverTimeOperate(this FiveStarRoom fiveStarRoom)
 {
     //如果在打漂中
     if (fiveStarRoom.IsDaPiaoBeing)
     {
         for (int i = 0; i < fiveStarRoom.FiveStarPlayerDic.Count; i++)
         {
             fiveStarRoom.FiveStarPlayerDic[i].CollocationAIOperate();
         }
     }
     else if (fiveStarRoom.CanOperatePlayerIndex.Count > 0)
     {
         int[] operatIndexs = fiveStarRoom.CanOperatePlayerIndex.ToArray();//必须先复制一份 因为胡牌操作会清空自己
         //可以操作的人
         for (int i = 0; i < operatIndexs.Length; i++)
         {
             fiveStarRoom.FiveStarPlayerDic[operatIndexs[i]].CollocationAIOperate();
         }
     }
     else
     {
         //可以出牌的人 都进行一下操作
         fiveStarRoom.FiveStarPlayerDic[fiveStarRoom.CanPlayCardPlayerIndex].CollocationAIOperate();
     }
 }
 //添加可操作消息
 public static void AddOperateResults(this FiveStarRoom fiveStarRoom, Actor_FiveStar_OperateResult actorFiveStarOperateResult)
 {
     //选出以前操作里面的昨天操作级别 但是里面操作级别肯定都一样的所以取第一个就行了
     if (fiveStarRoom.BeforeOperateResults.Count > 0)
     {
         fiveStarRoom.intData = fiveStarRoom.BeforeOperateResults[0].OperateInfo.OperateType;
     }
     else
     {
         //以前没有操作 级别默认-1
         fiveStarRoom.intData = -1;
     }
     //如果操作优先级相同就同时操作
     if (fiveStarRoom.intData == actorFiveStarOperateResult.OperateInfo.OperateType)
     {
         fiveStarRoom.BeforeOperateResults.Add(actorFiveStarOperateResult);//先记录操作消息
     }
     //如果新消息优先级别高就删除以前的消息
     else if (fiveStarRoom.intData < actorFiveStarOperateResult.OperateInfo.OperateType)
     {
         fiveStarRoom.BeforeOperateResults.Clear();
         fiveStarRoom.BeforeOperateResults.Add(actorFiveStarOperateResult);//先记录操作消息
     }
     //如果新消息优先级低 就忽略
 }
        //直接发送小结算
        public static void SamllResultsFollow(this FiveStarRoom fiveStarRoom, int[] huCardSeatIndexs)
        {
            //发送小结算信息
            fiveStarRoom.SendSamllResults();
            //如果是匹配服直接销毁房间
            if (fiveStarRoom.RoomType == RoomType.Match)
            {
                fiveStarRoom.Dispose();
                return;
            }
            //算出下局最先摸牌的玩家索引 和4人房休息玩家索引
            fiveStarRoom.CalcuateFirstMoCardAndRestPlayerSeat(huCardSeatIndexs);

            fiveStarRoom.LittleRoundClearData();//如果是房卡模式 正常打下去 清空一下小局应该清空的数据
            //房间总结算
            if (fiveStarRoom.JudgeIsRoomTotalResult())
            {
                fiveStarRoom.RoomTotalResult();//如果进入总结算 房间直接就销毁了
                return;
            }
            fiveStarRoom.CurrRoomStateType = RoomStateType.ReadyIn;//更改房间游戏状态为准备中
            //所有玩家取消托管
            for (int i = 0; i < fiveStarRoom.FiveStarPlayerDic.Count; i++)
            {
                fiveStarRoom.FiveStarPlayerDic[i].SetCollocation(false);
            }
        }
        //获取超时时间
        public static long GetOverTime(this FiveStarRoom fiveStarRoom, int playerSeatIndex, int overTimeType)
        {
            if (fiveStarRoom.FiveStarPlayerDic[playerSeatIndex].IsLiangDao && overTimeType == FiveStarOverTimeType.PlayCardType)
            {
                return(FiveStarRoomComponent.CurrTime + 1);//如果亮倒了 出牌 就一秒时间
            }
            if (!fiveStarRoom.RoomConfig.IsHaveOverTime)
            {
                return(0);//配置没有超时 直接返回0
            }
            if (fiveStarRoom.FiveStarPlayerDic[playerSeatIndex].IsAI)
            {
                return(FiveStarRoomComponent.CurrTime + RandomTool.Random(1, 4));//如果是AI加个随机值
            }
            if (overTimeType == FiveStarOverTimeType.DaPiaoType)
            {
                return(FiveStarRoomComponent.CurrTime + FiveStarOverTime.CanDaPiaoOverTime);
            }
            if (fiveStarRoom.FiveStarPlayerDic[playerSeatIndex].IsCollocation)
            {
                return(FiveStarRoomComponent.CurrTime + 1);
            }

            if (overTimeType == FiveStarOverTimeType.PlayCardType)
            {
                return(FiveStarRoomComponent.CurrTime + FiveStarOverTime.CanPlayCardOverTime);
            }
            else if (overTimeType == FiveStarOverTimeType.OperateType)
            {
                return(FiveStarRoomComponent.CurrTime + FiveStarOverTime.CanOperateOverTime);
            }
            return(0);
        }
 //算出下局最先摸牌的玩家索引 和休息玩家索引
 public static void CalcuateFirstMoCardAndRestPlayerSeat(this FiveStarRoom fiveStarRoom, int[] huCardSeatIndexs)
 {
     if (fiveStarRoom.RoomNumber == 4)
     {
         if (huCardSeatIndexs.Length == 1)
         {
             fiveStarRoom.FirstMoCardSeatIndex = fiveStarRoom.CurrRestSeatIndex; //4人房 做庄的就是上局休息的
             fiveStarRoom.NextRestSeatIndex    = huCardSeatIndexs[0];            //4人房  下局休息 就是这局胡的
         }
         else if (huCardSeatIndexs.Length == 2)
         {
             fiveStarRoom.NextRestSeatIndex    = fiveStarRoom.CurrRestSeatIndex; //4人房  如果一炮多想下局休息的还是不变
             fiveStarRoom.FirstMoCardSeatIndex = fiveStarRoom.CurrChuPaiIndex;   //4人房  如果一炮多想 做庄的就是放炮的
         }
     }
     else
     {
         if (huCardSeatIndexs.Length == 1)
         {
             fiveStarRoom.FirstMoCardSeatIndex = huCardSeatIndexs[0];//3人房 坐庄就是胡的人
         }
         else if (huCardSeatIndexs.Length == 2)
         {
             fiveStarRoom.FirstMoCardSeatIndex = fiveStarRoom.CurrChuPaiIndex;//3人房 一炮多向 坐庄就是放炮的人
         }
     }
 }
Пример #9
0
 //亮倒增加的倍数
 public static int LiangDaoAddMultiple(this FiveStarRoom fiveStarRoom, int huCardSeatIndex, int subSocreIndex)
 {
     if (fiveStarRoom.FiveStarPlayerDic[huCardSeatIndex].IsLiangDao || fiveStarRoom.FiveStarPlayerDic[subSocreIndex].IsLiangDao)
     {
         return(2);
     }
     return(1);
 }
Пример #10
0
 //查叫和亮倒 赔付减分
 private static void ChaJiaoLiangSmallResultGet(this FiveStarRoom fiveStarRoom, int subScoreIndex, int scoreValue)
 {
     for (int j = 0; j < fiveStarRoom.RoomNumber; j++)
     {
         //计算玩家小结算得分
         fiveStarRoom.SmallReultPlayerGetScore(j, subScoreIndex, scoreValue);
     }
 }
        //存储当前小局对战具体信息
        private static async void SaveParticularMiltaryRecordData(this FiveStarRoom fiveStarRoom, int dataId)
        {
            fiveStarRoom.CurrParticularMiltaryRecordData.DataId    = dataId;
            fiveStarRoom.CurrParticularMiltaryRecordData.ToyGameId = ToyGameId.CardFiveStar;
            await FiveStarRoomComponent.Ins.SaveVideo(fiveStarRoom.CurrParticularMiltaryRecordData);//存储当前小局对战具体信息到数据库

            fiveStarRoom.CurrParticularMiltaryRecordData.Dispose();
        }
Пример #12
0
 //玩家选择打漂
 public static void PlayerDaPiao(this FiveStarRoom fiveStarRoom)
 {
     fiveStarRoom.EntiretyOprationAleadyNum++;
     if (fiveStarRoom.EntiretyOprationAleadyNum >= fiveStarRoom.RoomNumber)
     {
         fiveStarRoom.IsDaPiaoBeing = false; //不在打漂中了
         fiveStarRoom.Deal();                //发牌
     }
 }
 //玩家可以进行操作
 public static void PlayerCanOperate(this FiveStarRoom fiveStarRoom, Actor_FiveStar_CanOperate actorFiveStarCanOperate)
 {
     if (!fiveStarRoom.CanOperatePlayerIndex.Contains(actorFiveStarCanOperate.SeatIndex))
     {
         fiveStarRoom.CanOperatePlayerIndex.Add(actorFiveStarCanOperate.SeatIndex);
         fiveStarRoom.OverTime = fiveStarRoom.GetOverTime(actorFiveStarCanOperate.SeatIndex, FiveStarOverTimeType.OperateType); //超时时间
     }
     fiveStarRoom.EndCanOperateAndCanChuMessage = actorFiveStarCanOperate;                                                      //记录最后一条玩家可操作消息
 }
        //计算下局谁坐庄先摸牌 和如果是四人房谁 休息

        //发送小结算消息
        public static void SendSamllResults(this FiveStarRoom fiveStarRoom)
        {
            Actor_FiveStar_SmallResult actorFiveStarSmall = new Actor_FiveStar_SmallResult();

            actorFiveStarSmall.SmallPlayerResults = fiveStarRoom.SmallPlayerResults;
            actorFiveStarSmall.MaiMaCard          = fiveStarRoom.MaiMaCard; //买马的牌 赋值
            fiveStarRoom.RecordSmallResult(actorFiveStarSmall);             //记录小结算信息
            fiveStarRoom.BroadcastMssagePlayers(actorFiveStarSmall);
        }
Пример #15
0
        //获取下个玩家索引 排序休息玩家索引
        public static int GetNextSeatIndexExcludeRest(this FiveStarRoom fiveStarRoom, int currSeatIndexint, int maxSeatIndex)
        {
            int nextSeat = SeatIndexTool.GetNextSeatIndex(currSeatIndexint, maxSeatIndex);

            if (fiveStarRoom.RoomNumber == 4 && nextSeat == fiveStarRoom.CurrRestSeatIndex)
            {
                nextSeat = SeatIndexTool.GetNextSeatIndex(nextSeat, maxSeatIndex);
            }
            return(nextSeat);
        }
Пример #16
0
        //放冲胡分数计算
        private static void FangChongHuCalculateScore(this FiveStarRoom fiveStarRoom, int huPaiIndex)
        {
            fiveStarRoom.SmallPlayerResults[huPaiIndex].PlayerResultType = FiveStarPlayerResultType.HuFangChong;//改变胡牌人的类型

            //计算玩家小结算得分
            fiveStarRoom.ResultCalculateScore(huPaiIndex, fiveStarRoom.CurrChuPaiIndex, fiveStarRoom.intData, fiveStarRoom.intData2); //计算分数

            fiveStarRoom.SmallPlayerResults[fiveStarRoom.CurrChuPaiIndex].PlayerResultType = FiveStarPlayerResultType.FangChong;      //记录放冲人的类型
            fiveStarRoom.FiveStarPlayerDic[fiveStarRoom.CurrChuPaiIndex].FangChongCount++;                                            //放冲次数加1
        }
        //存储大局战绩小局信息到数据库
        private static async void SaveMiltarySmallInfo(this FiveStarRoom fiveStarRoom, int miltaryId)
        {
            MiltarySmallInfo miltarySmallInfo = ComponentFactory.Create <MiltarySmallInfo>();

            miltarySmallInfo.MiltaryId          = miltaryId;
            miltarySmallInfo.ParticularMiltarys = fiveStarRoom.ParticularMiltarys;
            await FiveStarRoomComponent.Ins.SaveVideo(miltarySmallInfo);//存储大局战绩小局详情到数据库

            miltarySmallInfo.Dispose();
        }
Пример #18
0
 //获取玩家信息
 public static FiveStarPlayer GetPlayerInfoUserIdIn(this FiveStarRoom fiveStarRoom, long userId)
 {
     for (int i = 0; i < fiveStarRoom.FiveStarPlayerDic.Count; i++)
     {
         if (fiveStarRoom.FiveStarPlayerDic[i].User.UserId == userId)
         {
             return(fiveStarRoom.FiveStarPlayerDic[i]);
         }
     }
     return(null);
 }
Пример #19
0
 //玩家准备
 public static void PlayerReady(this FiveStarRoom fiveStarRoom)
 {
     for (int i = 0; i < fiveStarRoom.FiveStarPlayerDic.Count; i++)
     {
         if (!fiveStarRoom.FiveStarPlayerDic[i].ReadyState)
         {
             return;
         }
     }
     fiveStarRoom.SmallStartGame();//开始小局游戏
 }
Пример #20
0
 //给房间内的所有玩家广播消息 指定一个玩家不广播
 public static void BroadcastMssagePlayersDivideThisPlayer(this FiveStarRoom fiveStarRoom, int playerSeatIndex, IActorMessage iActorMessage)
 {
     foreach (var player in fiveStarRoom.FiveStarPlayerDic.Values)
     {
         if (playerSeatIndex == player.SeatIndex)
         {
             continue;
         }
         player.SendMessageUser(iActorMessage);
     }
 }
Пример #21
0
 //擦杠和暗杠分数变化
 public static void CaGangAnGangScoreChang(this FiveStarRoom fiveStarRoom, Actor_FiveStar_ScoreChange actorFiveStarScoreChange, int gangCardIndex, int socre)
 {
     for (int i = 0; i < fiveStarRoom.RoomNumber; i++)
     {
         if (i == fiveStarRoom.CurrRestSeatIndex)
         {
             continue;                                              //休息的玩家 不参与杠牌计分
         }
         actorFiveStarScoreChange.GetScore[i]             -= socre; //其他玩家 减去这个分数
         actorFiveStarScoreChange.GetScore[gangCardIndex] += socre; //杠牌玩家加上这个分数
     }
 }
Пример #22
0
        //计算分数
        private static void ResultCalculateScore(this FiveStarRoom fiveStarRoom, int huPaiIndex, int deductIndex, int paiTypeMultiple, int maiMaMultiple)
        {
            int unwelcomeCappingMultiple = maiMaMultiple + fiveStarRoom.FiveStarPlayerDic[huPaiIndex].PiaoNum + fiveStarRoom.FiveStarPlayerDic[deductIndex].PiaoNum; //不受封顶番数 影响的 买马 和两人的漂数

            int effectCappingMultiple = paiTypeMultiple * fiveStarRoom.LiangDaoAddMultiple(huPaiIndex, deductIndex);                                                 //受封顶番数影响 基础倍数乘以 亮倒的倍数

            if (effectCappingMultiple > fiveStarRoom.RoomConfig.FengDingFanShu)
            {
                effectCappingMultiple = fiveStarRoom.RoomConfig.FengDingFanShu;//如果 基础倍数加上亮倒倍数 超过封顶番数 则就是封顶番数
            }
            //上面算了 打漂的 倍数 亮倒的倍数 还要赢牌的倍数
            fiveStarRoom.SmallReultPlayerGetScore(huPaiIndex, deductIndex, (unwelcomeCappingMultiple + effectCappingMultiple) * fiveStarRoom.RoomConfig.BottomScore);
        }
        //玩家进行操作
        public static void PlayerOperate(this FiveStarRoom fiveStarRoom, int seatIndex, FiveStarOperateInfo fiveStarOperateInfo)
        {
            if (fiveStarRoom.CanOperatePlayerIndex.Contains(seatIndex))
            {
                fiveStarRoom.CanOperatePlayerIndex.Remove(seatIndex);
                Actor_FiveStar_OperateResult actorFiveStarOperateResult = new Actor_FiveStar_OperateResult();
                actorFiveStarOperateResult.SeatIndex   = seatIndex;
                actorFiveStarOperateResult.OperateInfo = fiveStarOperateInfo;

                fiveStarRoom.AddOperateResults(actorFiveStarOperateResult); //添加操作消息
                fiveStarRoom.BroadcastOperateResults();                     //广播操作消息
            }
        }
Пример #24
0
        //记录操作信息
        private static void RecordInfo(this FiveStarRoom fiveStarRoom, int opcode, Google.Protobuf.IMessage iMessage)
        {
            //只有房卡才记录
            if (fiveStarRoom.RoomType != RoomType.RoomCard)
            {
                return;
            }
            MiltaryRecordData miltaryRecordData = ComponentFactory.Create <MiltaryRecordData>();

            miltaryRecordData.Opcode = opcode;
            miltaryRecordData.Data   = new ByteString(ProtobufHelper.ToBytes(iMessage));;
            fiveStarRoom.CurrParticularMiltaryRecordData.MiltaryRecordDatas.Add(miltaryRecordData);
        }
Пример #25
0
 //玩家轮休
 public static void PlayerRest(this FiveStarRoom fiveStarRoom)
 {
     if (fiveStarRoom.RoomNumber != 4)
     {
         return;//不是4人房直接 返回
     }
     fiveStarRoom.FiveStarPlayerDic[fiveStarRoom.NextRestSeatIndex].IsRestIn = true;
     fiveStarRoom.BroadcastMssagePlayers(new Actor_FiveStar_PlayerRest()
     {
         RestSeatIndex = fiveStarRoom.NextRestSeatIndex
     });
     fiveStarRoom.CurrRestSeatIndex = fiveStarRoom.NextRestSeatIndex;
 }
Пример #26
0
        //玩家杠牌分数变化 和记录杠牌次数
        public static void PlayerGangPaiGetScore(this FiveStarRoom fiveStarRoom, int oprateSeateIndex, int oprateType)
        {
            if (oprateType != FiveStarOperateType.AnGang &&
                oprateType != FiveStarOperateType.CaGang &&
                oprateType != FiveStarOperateType.MingGang)
            {
                return;
            }

            fiveStarRoom.FiveStarPlayerDic[oprateSeateIndex].GangPaiCount++;//杠牌次数加1
            Actor_FiveStar_ScoreChange actorFiveStarScoreChange = new Actor_FiveStar_ScoreChange();

            for (int i = 0; i < fiveStarRoom.RoomNumber; i++)
            {
                actorFiveStarScoreChange.GetScore.Add(0);
            }
            fiveStarRoom.intData = 1;         //默认 不是杠上杠就是1
            if (fiveStarRoom.IsGangShangCard) //如果是杠上杠
            {
                fiveStarRoom.intData = 2;     //分数在乘以2
            }
            switch (oprateType)
            {
            case FiveStarOperateType.AnGang:
                fiveStarRoom.CaGangAnGangScoreChang(actorFiveStarScoreChange, oprateSeateIndex,
                                                    fiveStarRoom.RoomConfig.BottomScore * 2 * fiveStarRoom.intData);//分数变化
                break;

            case FiveStarOperateType.CaGang:
                fiveStarRoom.CaGangAnGangScoreChang(actorFiveStarScoreChange, oprateSeateIndex,
                                                    fiveStarRoom.RoomConfig.BottomScore * fiveStarRoom.intData);//分数变化
                break;

            case FiveStarOperateType.MingGang:
                actorFiveStarScoreChange.GetScore[oprateSeateIndex]             += fiveStarRoom.RoomConfig.BottomScore * 2 * fiveStarRoom.intData;
                actorFiveStarScoreChange.GetScore[fiveStarRoom.CurrChuPaiIndex] -= fiveStarRoom.RoomConfig.BottomScore * 2 * fiveStarRoom.intData;
                break;

            default:
                return;
            }
            fiveStarRoom.GangHuNum = 2;//标记为 刚杠过
            for (int i = 0; i < fiveStarRoom.RoomNumber; i++)
            {
                fiveStarRoom.FiveStarPlayerDic[i].SmallGangScore += actorFiveStarScoreChange.GetScore[i]; //记录杠牌得分
                fiveStarRoom.FiveStarPlayerDic[i].NowScoreChange(actorFiveStarScoreChange.GetScore[i]);   //现在的分数变化
                actorFiveStarScoreChange.NowScore.Add(fiveStarRoom.FiveStarPlayerDic[i].NowScore);
            }
            //广播分数变化消息
            fiveStarRoom.BroadcastMssagePlayers(actorFiveStarScoreChange);
        }
Пример #27
0
        //自摸分数计算
        private static void ZiMoCalculateScore(this FiveStarRoom fiveStarRoom, int huPaiIndex)
        {
            fiveStarRoom.SmallPlayerResults[huPaiIndex].PlayerResultType = FiveStarPlayerResultType.ZiMoHu; //改变胡牌人的类型

            fiveStarRoom.FiveStarPlayerDic[huPaiIndex].ZiMoCount++;                                         //自摸次数加1
            for (int j = 0; j < fiveStarRoom.RoomNumber; j++)
            {
                if (j == fiveStarRoom.CurrRestSeatIndex || huPaiIndex == j)
                {
                    continue;                                                                                  //休息玩家不参与分数计算 自己不参与分数计算
                }
                fiveStarRoom.ResultCalculateScore(huPaiIndex, j, fiveStarRoom.intData, fiveStarRoom.intData2); //计算分数
            }
        }
        //获取大局战绩玩家信息
        private static RepeatedField <MiltaryPlayerInfo> GetMiltaryPlayerInfo(this FiveStarRoom fiveStarRoom)
        {
            RepeatedField <MiltaryPlayerInfo> playerInfos = new RepeatedField <MiltaryPlayerInfo>();

            for (int i = 0; i < fiveStarRoom.FiveStarPlayerDic.Count; i++)
            {
                MiltaryPlayerInfo miltaryPlayerInfo = ComponentFactory.Create <MiltaryPlayerInfo>();
                miltaryPlayerInfo.Name       = fiveStarRoom.FiveStarPlayerDic[i].User.Name;
                miltaryPlayerInfo.TotalScore = fiveStarRoom.FiveStarPlayerDic[i].NowScore;
                miltaryPlayerInfo.UserId     = fiveStarRoom.FiveStarPlayerDic[i].User.UserId;
                playerInfos.Add(miltaryPlayerInfo);
            }
            return(playerInfos);
        }
        //房间总结算 解散投票也会走这
        public static async void RoomTotalResult(this FiveStarRoom fiveStarRoom)
        {
            Actor_FiveStar_TotalResult actorFiveStarTotalResult = new Actor_FiveStar_TotalResult();

            for (int i = 0; i < fiveStarRoom.FiveStarPlayerDic.Count; i++)
            {
                actorFiveStarTotalResult.TotalPlayerResults.Add(FiveStarTotalPlayerResultFactory.Create(fiveStarRoom.FiveStarPlayerDic[i]));
            }
            fiveStarRoom.BroadcastMssagePlayers(actorFiveStarTotalResult);
            await fiveStarRoom.SaveTotalMiltary();   //房间总结算 存储大局对战记录

            fiveStarRoom.SendMiltaryFriendsCircle(); //发送战绩给亲友圈服
            fiveStarRoom.Dispose();                  //直接销毁房间
        }
Пример #30
0
 //广播玩家买码
 public static int BoradcastPlayerMaiMa(this FiveStarRoom fiveStarRoom)
 {
     if (fiveStarRoom.ResidueCards.Count > 0)
     {
         Actor_FiveStar_MaiMa actorFiveStarMaiMa = new Actor_FiveStar_MaiMa();
         actorFiveStarMaiMa.Card = fiveStarRoom.ResidueCards[fiveStarRoom.ResidueCards.Count - 1];
         fiveStarRoom.MaiMaCard  = actorFiveStarMaiMa.Card;//记录买马的牌
         int maiMaMulttiple = CardFiveStarHuPaiLogic.GetMaiMaMultiple(actorFiveStarMaiMa.Card);
         actorFiveStarMaiMa.Score = maiMaMulttiple * fiveStarRoom.RoomConfig.BottomScore;
         fiveStarRoom.RecordMaiMa(actorFiveStarMaiMa);//记录买马信息
         fiveStarRoom.BroadcastMssagePlayers(actorFiveStarMaiMa);
         return(maiMaMulttiple);
     }
     return(0);
 }