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); }
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); } } }