Exemple #1
0
        private void XjfdLogic(ISFSObject data)
        {
            if (data.ContainsKey(ProtocolKey.KeyTType))
            {
                var ttype = data.GetInt(ProtocolKey.KeyTType);
                switch (ttype)
                {
                case 1:
                    ttype = (int)EnGroupType.XFDan;
                    break;

                case 2:
                    ttype = (int)EnGroupType.ZFBDan;
                    break;

                case 3:
                    ttype = (int)EnGroupType.YaoDan;
                    break;

                case 4:
                    ttype = (int)EnGroupType.JiuDan;
                    break;
                }
                data.PutInt(ProtocolKey.KeyTType, ttype);
            }
            mData.SetData(data);
            var xjfdData = (CpgXfdGang)mData.CpgData;
            MahjongGroupsManager group = Game.MahjongGroups;

            if (xjfdData.GetHardCards().Count >= 3)
            {
                xjfdData.Ok = true;
            }
            _oldThrowoutCard = 0;
            if (!xjfdData.Ok)
            {
                if (xjfdData.GetHardCards().Count == 1)
                {
                    var targetList = xjfdData.GetHardCards();
                    group.MahjongHandWall[mData.CurrOpChair].ThrowOut(targetList[0]);
                    group.MahjongThrow[mData.CurrOpChair].GetInMahjong(targetList[0]);
                    _oldThrowoutCard        = DataCenter.ThrowoutCard;
                    DataCenter.ThrowoutCard = targetList[0];
                }
                return;
            }
            if (xjfdData.GetHardCards().Count == 1)
            {
                var cpgList = group.MahjongCpgs[mData.CurrOpChair].CpgList;
                for (int i = 0; i < cpgList.Count; i++)
                {
                    if (xjfdData.Type == cpgList[i].Data.Type)
                    {
                        var xjfdGang = (MahjongCpgXjfdGang)cpgList[i];
                        var item     = group.MahjongThrow[mData.CurrOpChair].GetLastMj();
                        xjfdGang.AddXjfd(item);
                        group.MahjongThrow[mData.CurrOpChair].PopMahjong();
                        group.MahjongCpgs[mData.CurrOpChair].SortGpg();
                        if (_oldThrowoutCard != 0)
                        {
                            DataCenter.ThrowoutCard = _oldThrowoutCard;
                        }
                        PlayEffect(data);
                        return;
                    }
                }
            }
            else
            {
                var tempList = xjfdData.GetHardCards();
                DataCenter.Players[mData.CurrOpChair].CpgDatas.Add(xjfdData);
                for (int i = 0; i < tempList.Count; i++)
                {
                    DataCenter.Players[mData.CurrOpChair].HardCards.Remove(tempList[i]);
                }
                group.MahjongHandWall[mData.CurrOpChair].RemoveMahjong(xjfdData.GetHardCards());
            }
            //如果是别人打出的牌
            if (xjfdData.GetOutPutCard() != MiscUtility.DefValue)
            {
                group.MahjongThrow[mData.OldOpChair].PopMahjong(xjfdData.Card);
                //隐藏箭头
                Game.TableManager.HideOutcardFlag();
            }
            //排序麻将
            if (mData.CurrOpChair == 0)
            {
                group.PlayerHand.SortHandMahjong();
            }
            group.MahjongCpgs[mData.CurrOpChair].SetCpg(xjfdData);
            //如果吃碰杠之后 cpg 加 手牌数量 大于 手牌数量 需要打牌设置最后一张
            if (group.MahjongCpgs[mData.CurrOpChair].GetHardMjCnt() + group.MahjongHandWall[mData.CurrOpChair].MahjongList.Count > DataCenter.Config.HandCardCount)
            {
                group.MahjongHandWall[mData.CurrOpChair].SetLastCardPos(MiscUtility.DefValue);
            }
            //麻将记录
            RecordMahjong(xjfdData);
            PlayEffect(data);
        }
Exemple #2
0
        private void CpgLogic(ISFSObject data)
        {
            mData.SetData(data);
            var cpgData = mData.CpgData;

            //如果是抓杠 改变类型
            if (cpgData.Type == EnGroupType.ZhuaGang)
            {
                CpgZhuaGang cpg = (CpgZhuaGang)cpgData;
                //抓杠时 会有两条数据回来 当消息为true 杠成功了
                if (cpg.Ok == false)
                {
                    return;
                }
                var cpgList = DataCenter.Players[mData.CurrOpChair].CpgDatas;
                for (int i = 0; i < cpgList.Count; i++)
                {
                    var cpgItem = cpgList[i];
                    if (cpgItem.Type == EnGroupType.Peng && cpgItem.Card == cpgData.Card)
                    {
                        cpgList[i] = cpgData;
                        break;
                    }
                }
                if (0 == mData.CurrOpChair && !mData.GangBao)
                {
                    //删除手牌数据
                    DataCenter.Players[mData.CurrOpChair].HardCards.Remove(cpgData.Card);
                }
            }
            else if (cpgData.Type == EnGroupType.AnGang && mData.GangBao)
            {
                if (0 == mData.CurrOpChair)
                {
                    int temp     = 0;
                    var tempList = cpgData.GetHardCards();
                    for (int i = 0; i < tempList.Count - 1; i++)
                    {
                        DataCenter.OneselfData.HardCards.Remove(tempList[i]);
                        temp++;
                    }
                }
            }
            else
            {
                //删除手牌数据
                if (0 == mData.CurrOpChair)
                {
                    var list = cpgData.GetHardCards();
                    for (int i = 0; i < list.Count; i++)
                    {
                        DataCenter.Players[mData.CurrOpChair].HardCards.Remove(list[i]);
                    }
                }
            }
            MahjongGroupsManager group = Game.MahjongGroups;

            //抓杠是特殊的 如果放回的消息ok 为false 证明正在确认是否有抢杠胡 为ture时表示 杠成功了
            if (cpgData.Type == EnGroupType.ZhuaGang)
            {
                CpgZhuaGang zhuanggang = (CpgZhuaGang)cpgData;
                if (!zhuanggang.Ok)
                {
                    group.PlayerToken = false;
                }
                else
                {
                    //如果是抓杠 移除手牌中抓的
                    group.MahjongHandWall[mData.CurrOpChair].RemoveMahjong(cpgData.Card);
                    //设置吃碰杠
                    group.MahjongCpgs[mData.CurrOpChair].SetCpg(cpgData);
                }
            }
            else
            {
                group.MahjongHandWall[mData.CurrOpChair].RemoveMahjong(cpgData.GetHardCards());
            }
            //如果是别人打出的牌
            if (cpgData.GetOutPutCard() != MiscUtility.DefValue)
            {
                group.MahjongThrow[mData.OldOpChair].PopMahjong(cpgData.Card);
                //隐藏箭头
                Game.TableManager.GetParts <MahjongOutCardFlag>(TablePartsType.OutCardFlag).Hide();
            }
            //排序麻将
            if (mData.CurrOpChair == 0)
            {
                group.PlayerHand.SortHandMahjong();
            }
            group.MahjongCpgs[mData.CurrOpChair].SetCpg(cpgData);
            //如果吃碰杠之后 cpg 加 手牌数量 大于 手牌数量 需要打牌设置最后一张
            if (group.MahjongCpgs[mData.CurrOpChair].GetHardMjCnt() + group.MahjongHandWall[mData.CurrOpChair].MahjongList.Count > DataCenter.Config.HandCardCount)
            {
                group.MahjongHandWall[mData.CurrOpChair].SetLastCardPos(MiscUtility.DefValue);
            }
            //麻将记录
            RecordMahjong(cpgData);
        }
        public void OnReconnect_Ccmj(ISFSObject data)
        {
            OnReconnect(data);
            MahjongUserInfo      userInfo;
            MahjongGroupsManager group   = Game.MahjongGroups;
            ISFSObject           cpgData = new SFSObject();

            for (int i = 0; i < DataCenter.MaxPlayerCount; i++)
            {
                userInfo = DataCenter.Players[i];
                var userData = userInfo.ExtData.Get <VarIsfsobject>("userdata");
                var user     = userData.GetValue <ISFSObject>();

                if (!user.ContainsKey("danlist"))
                {
                    continue;
                }
                var danList = user.GetSFSArray("danlist");
                for (int j = 0; j < danList.Count; j++)
                {
                    var   obj   = danList.GetSFSObject(j);
                    int[] cards = obj.GetIntArray("cards");
                    if (obj.ContainsKey("addDan"))
                    {
                        int[] add  = obj.GetIntArray("addDan");
                        int[] temp = new int[cards.Length + add.Length];
                        for (int k = 0; k < cards.Length; k++)
                        {
                            temp[k] = cards[k];
                        }
                        for (int k = 0; k < add.Length; k++)
                        {
                            temp[k + cards.Length] = add[k];
                        }
                        cards = temp;
                    }
                    int type = (int)EnGroupType.XiaoJi;
                    for (int k = 0; k < cards.Length; k++)
                    {
                        int card      = cards[k];
                        int checkType = CheckCardType(card);
                        if (checkType == (int)EnGroupType.XiaoJi)
                        {
                            if (k == cards.Length - 1)
                            {
                                type = (int)EnGroupType.YaoDan;
                            }
                            continue;
                        }
                        type = checkType;
                        break;
                    }
                    cpgData.PutInt(ProtocolKey.KeyTType, type);
                    cpgData.PutInt(RequestKey.KeySeat, userInfo.Seat);
                    cpgData.PutIntArray(RequestKey.KeyCards, cards);
                    group.PopMahFromCurrWall(cards.Length);
                    var xjfd = MahjongUtility.CreateCpg(cpgData);
                    userInfo.CpgDatas.Add(xjfd);
                    group.MahjongCpgs[userInfo.Chair].SetCpg(xjfd);
                }
            }
        }