|
- #ifndef CMD_SPARROW_HEAD_FILE
- #define CMD_SPARROW_HEAD_FILE
- #include <strsafe.h>
- #pragma pack(1)
- //////////////////////////////////////////////////////////////////////////
- //公共宏定义
-
- #define KIND_ID 302 //游戏 I D
-
- //组件属性
- #define SAN_ZHANG 3 //换牌数--换三张
- #define GAME_PLAYER 4 //游戏人数
- #define GAME_PLAY 3 //
- #define VERSION_SERVER PROCESS_VERSION(6,0,3) //程序版本
- #define VERSION_CLIENT PROCESS_VERSION(6,0,3) //程序版本
-
- #define GAME_NAME TEXT("松滋晃晃") //游戏名字
- #define GAME_GENRE (GAME_GENRE_SCORE|GAME_GENRE_MATCH|GAME_GENRE_GOLD) //游戏类型
-
- //游戏状态
- #define GS_MJ_FREE GAME_STATUS_FREE //空闲状态
- #define GS_MJ_PLAY (GAME_STATUS_PLAY+1) //游戏状态
-
- //常量定义
- #define MAX_WEAVE 4 //最大组合
- #define MAX_INDEX 27 //最大索引 27
- #define MAX_COUNT 14 //最大数目
- #define MAX_JIYI 28 //最大记忆牌数据
- #define MAX_REPERTORY 108 //最大库存
- #define MAX_REPERTORY_SRLF 72 //三人两房最大库存
- #define MAX_WEAVE_HUA 8 //花牌最大组合
- #define MAX_INDEX_HUA 23 //花牌最大索引 23
- #define MAX_COUNT_HUA 26 //花牌最大数目
- #define MAX_REPERTORY_HUA 110 //花牌最大库存
- #define MAX_REPERTORY_HUA_ONE 111 //花牌最大库存
- #define MAX_REPERTORY_HUA_TWO 112 //花牌最大库存
- #define EXCHANGE 3 //默认换三张
- #define MAX_TING 10 //最大听牌数
- #define MAX_CHANGE_SCORE 20 //最大积分变动次数
- //扑克定义
- #define HEAP_FULL_COUNT 26 //堆立全牌
-
- #define MAX_RIGHT_COUNT 1 //最大权位DWORD个数
-
- #define TEMP_MAX_SCORE 1000 //最大临时积分
- #define GAME_TIMEOUT 10 //玩家出牌超时时间
- //////////////////////////////////////////////////////////////////////////
-
- //组合子项
- struct CMD_WeaveItem
- {
- INT cbWeaveKind; //组合类型
- BYTE cbCenterCard; //中心扑克
- BYTE cbPublicCard; //公开标志
- WORD wProvideUser; //供应用户
- BYTE cbMargicOffset[4]; //如果有财神参与组合,财神的位置 1-4 ,该位置存储实际是那张财神的index
- };
- struct CMD_WeaveItem_Hua
- {
- INT cbWeaveKind; //组合类型
- BYTE cbCenterCard; //中心扑克
- BYTE cbPublicCard; //公开标志
- WORD wProvideUser; //供应用户
- BYTE cbMargicOffset[4]; //组合花牌个数
- };
- //////////////////////////////////////////////////////////////////////////
- //服务器命令结构
- //#define SUB_S_SEND_LAIZIGANG 97 //癞子杠
- //#define SUB_S_SEND_LAIZIPI 98 //癞子皮
- //#define SUB_S_GAME_READING 99 //游戏准备
- //#define SUB_S_SEND_TINGPAI 99 //听牌数据
- #define SUB_S_GAME_START 100 //游戏开始
- #define SUB_S_OUT_CARD 101 //出牌命令
- #define SUB_S_SEND_CARD 102 //发送扑克
- #define SUB_S_TING_CARD 103 //听牌单独协议
- #define SUB_S_OPERATE_NOTIFY 104 //操作提示
- #define SUB_S_OPERATE_RESULT 105 //操作命令
- #define SUB_S_GAME_END 106 //游戏结束
- #define SUB_S_TRUSTEE 107 //用户托管
- #define SUB_S_CHI_HU 108 //胡牌
- #define SUB_S_XUELIU_END 109 //血流单局游戏结束协议
- #define SUB_S_GANG_SCORE 110 //
- #define SUB_S_DIGNQUE 120 //定缺
- #define SUB_S_HUAN_SAN_ZHANG 121 //换三张
- #define SUB_S_GAME_NOTIFY 122 //游戏事件通知(1定缺,2换三张)现在用来发送换牌标示
- #define SUB_S_PANGGUAN 200 //旁观者登陆游戏
-
- #define SUB_S_GAME_START_HUA 150 //游戏开始
- #define SUB_S_OUT_CARD_HUA 151 //出牌命令
- #define SUB_S_SEND_CARD_HUA 152 //发送扑克
- #define SUB_S_QINGTONG_NOTIFY_HUA 153 //请统操作提示
- #define SUB_S_OPERATE_NOTIFY_HUA 154 //操作提示
- #define SUB_S_OPERATE_RESULT_HUA 155 //花牌操作命令
- #define SUB_S_GAME_END_HUA 156 //花牌游戏结束
- #define SUB_S_TRUSTEE_HUA 157 //花牌用户托管
- #define SUB_S_CHI_HU_HUA 158 //花牌胡牌
- #define SUB_S_PANGGUAN_HUA 159 //花牌旁观者登陆游戏
- #define SUB_S_YI_WEI_HUA 160 //玩家移位广播
-
- #define LEN_PRIVATE_TABLE_ID 11
- #define LEN_NICKNAME 32
- #define LEN_HEAD_URL 256
-
- enum MahJongType
- {
- xzdd = 0, //一脚癞油
- xlch, //无赖到底
- srlf, //半癞
- cxz = 3, //戳瞎子一脚赖油
- cxz2 = 4, //戳瞎子无赖到底
- cxz3 = 5, //戳瞎子半癞
- xueliu = 10,//血流+4 6 12 番
- xueliu2 = 11,//血流+6 8 14 番
- xueliu3 = 12,//血流+6 8 14 番
-
- huapai = 14,//花牌+双杠
- huapai2 = 15,//花牌+单杠
- huapai3 = 16,//花牌+无杠
- count = 20, //总数
- };
-
- enum CMRule_zimo
- {
- zimojiadi = 0, //自摸加底
- zimojiafan, //自摸加番
- };
- enum CMRule_dgh
- {
- dgh_fp = 0, //点杠花当放炮
- dgh_zm, //点杠话当自摸
- };
- enum CMRule_other
- {
- yaojiujiangdui = 0x001, //带幺九、将对
- huansanzhang = 0x002, //换三张
- menqing = 0x004, //门清中张
- daxiaoyu = 0x008, //大小雨
- tiandihu = 0x010, //天地胡
- emax_other,
- };
- enum DDH_Rule
- {
- dianpao, //点炮胡
- zimo, //自摸胡
- };
- enum CMRule_MaxFan
- {
- max_two = 2,
- max_three = 3,
- max_four = 4,
- };
- enum MahJong_JuShu
- {
- ju_two = 2,
- ju_four = 4,
- ju_eight = 8,
- };
- struct tagChihuList
- {
- WORD chihuCount;
- DWORD chihuRightData[10]; //用户吃胡列表,最多显示10个;
- BYTE chihuCardData[10]; //用户吃胡牌的列表,最多显示10个;
- BYTE wProvideUser[10]; //用户吃胡牌的提供者列表,最多显示10个;
- };
-
- struct CMD_S_GameConfig
- {
- WORD wSubGameID; //一脚癞油,无赖到底,半癞 血流 花牌//翻型
- int wDiScore; //底分
- WORD wFanFei; //房费(0房间创建者,1打牌者平摊)
- WORD wIpLimit; //IP限制(0限制,1不限制);
- WORD wPlayCountRule; //一次玩的局数(8局?16局?)
- WORD RoomId; //房间ID
- WORD IsOwner; //是否房主
- WORD wHadPlayCount; //当前局数
- TCHAR sPrivateTableID[7];
- BYTE GameScoreType; //算分方式(0,传统得 1,算胡玩法)
- WORD tmp2; //备
- BYTE temp3;
- int temp4;
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- if (sizeof(CMD_S_GameConfig) * 16 > iLen) return false;
-
- #ifdef _UNICODE
- _snwprintf(pBuffer, iLen, TEXT("游戏配置->游戏类型:%d,游戏低分:%d,房费扣出方式:%d,IP地址限制:%d,玩的局数:%d,是否为房主:%d,当前局数:%d,房间号码:%d")
- , wSubGameID, wDiScore, wFanFei, wIpLimit, wPlayCountRule, IsOwner, wHadPlayCount, sPrivateTableID);
- #else
- _snwprintf(pBuffer, iLen, TEXT("游戏配置->游戏类型:%d,游戏低分:%d,房费扣出方式:%d,IP地址限制:%d,玩的局数:%d,是否为房主:%d,当前局数:%d,房间号码:%d")
- , wSubGameID, wDiScore, wFanFei, wIpLimit, wPlayCountRule, IsOwner, wHadPlayCount, sPrivateTableID);
- #endif
- //mylog::ToSet(pBuffer, iLen);
- return true;
- }
- };
- //游戏状态
- struct CMD_S_StatusFree
- {
- CMD_S_GameConfig gameConfig; //游戏基本配置
- INT lUserTmpScore[GAME_PLAYER]; //临时积分。在私有桌子中不使用自身的积分或金币,使用临时积分。
- BYTE leftTime; //未开始设置 255
- WORD wchairId; //发起人座位号
- BYTE options[GAME_PLAYER]; // 0 未决定 1 tongy 2jj
- BYTE UserStat; //玩家当前状态
-
- };
- //旁观者断线重连
- struct CMD_S_PangGuan
- {
- CMD_S_GameConfig gameConfig;
- INT lUserTmpScore[GAME_PLAYER]; //临时积分。本轮玩家的积分
- //游戏变量
- BYTE GameStatus; //0等待开始,1游戏中
- BYTE cbTotalCardCount; //游戏总牌数
- BYTE cbLeftCardCount; //单局游戏剩余牌数
- WORD wBankerUser; //本局游戏庄家
- BYTE lSiZi[4]; //色子1,2,皮子,癞子
- DWORD dwOwnerID; //房主ID
- BYTE bWanLaiZi[GAME_PLAYER]; //每个打出玩家癞子数
- //当前状态
- WORD wCurrentUser; //当前用户
- BYTE bPutCardData[GAME_PLAYER]; //最后一张牌打出的人和牌值
- BYTE totalOptTime; //总操作时间10秒
- BYTE leftOptTime; //还剩多少时间0
-
- BYTE cbDiscardCount[GAME_PLAYER]; //丢弃数目
- BYTE cbDiscardCard[GAME_PLAYER][55]; //丢弃记录
- BYTE cbCardCount[GAME_PLAYER]; //每个玩家扑克数目
- //组合扑克
- BYTE cbWeaveCount[GAME_PLAYER]; //组合数目
- CMD_WeaveItem WeaveItemArray[GAME_PLAYER][MAX_WEAVE]; //组合扑克
-
- BYTE bOutCardCout; //可以打出的牌就听牌的个数 血流 改为是否为换牌状态(0,表示非换牌状态.1,表示换牌状态,但是你已经选好牌了.2,表示换牌状态,但是还没有选牌)
- BYTE bTingCardCount[GAME_PLAYER]; //相对应打出牌可听牌个数,索引表示第几张,值是对应对应的听牌个数 血流 最后一个牌是打出值胡牌值
- BYTE bTingCardData[GAME_PLAYER][MAX_INDEX]; //具体听牌数据,一维索引表示打出牌的第几个,二维索引表示听牌的第几个,值表示牌数据 血流 每个玩家胡牌数据ChiHuCard[4][20]掩码,里面涵盖胡牌数据来源
- };
- //旁观者花牌断线重连
- struct CMD_S_PangGuan_Hua
- {
- CMD_S_GameConfig gameConfig;
- INT lUserTmpScore[GAME_PLAYER]; //临时积分。本轮玩家的积分
- //游戏变量
- BYTE GameStatus; //0等待开始,1游戏中
- BYTE cbTotalCardCount; //游戏总牌数
- BYTE cbLeftCardCount; //单局游戏剩余牌数
- WORD wBankerUser; //本局游戏庄家
- BYTE lSiZi[4]; //玩家统的个数
- //当前状态
- WORD wCurrentUser; //当前用户
- BYTE bPutCardData[GAME_PLAY]; //最后一张牌打出的人和牌值
- BYTE totalOptTime; //总操作时间10秒
- BYTE leftOptTime; //还剩多少时间0
-
- BYTE cbDiscardCount[GAME_PLAY]; //丢弃数目
- BYTE cbDiscardCard[GAME_PLAY][15]; //丢弃记录
- BYTE cbCardCount[GAME_PLAY]; //每个玩家扑克数目
- //组合扑克
- BYTE cbWeaveCount[GAME_PLAY]; //组合数目
- CMD_WeaveItem_Hua WeaveItemArray[GAME_PLAY][MAX_WEAVE_HUA]; //组合扑克
- BYTE GameScore[GAME_PLAY];
- };
- //游戏状态,断线重连
- struct CMD_S_StatusPlay
- {
- CMD_S_GameConfig gameConfig;
- INT lUserTmpScore[GAME_PLAYER]; //临时积分。本轮玩家的积分
- BYTE leftTime; // 255未开始
- WORD wchairId; // 解散申请人
- BYTE options[GAME_PLAYER]; // 在坐玩家 解散状态 0 未决定 1 tongy 2jj
- //游戏变量
- BYTE cbTotalCardCount; //游戏总牌数
- BYTE cbLeftCardCount; //单局游戏剩余牌数
- WORD wBankerUser; //本局游戏庄家
- BYTE lSiZi[4]; //色子1,2,皮子,癞子
- DWORD dwOwnerID; //房主ID
- BYTE bWanLaiZi[GAME_PLAYER]; //每个打出玩家癞子数/改称玩家胡牌次数
- //当前状态
- WORD wCurrentUser; //当前用户
- BYTE bPutCardData[GAME_PLAYER]; //最后一张牌打出的人和牌值
- BYTE totalOptTime; //总操作时间10秒
- BYTE leftOptTime; //还剩多少时间0
-
- BYTE cbDiscardCount[GAME_PLAYER]; //丢弃数目
- BYTE cbDiscardCard[GAME_PLAYER][55]; //丢弃记录
- BYTE cbCardCount[GAME_PLAYER]; //每个玩家扑克数目
- //组合扑克
- BYTE cbWeaveCount[GAME_PLAYER]; //组合数目
- CMD_WeaveItem WeaveItemArray[GAME_PLAYER][MAX_WEAVE]; //组合扑克
-
- BYTE cbCardData[MAX_COUNT]; //当前玩家手牌
- //断线玩家数据就是当前牌权玩家
- INT cbActionMask; //操作掩码
- BYTE gangCards[3]; //当有杠的时候这里面有牌
- BYTE bOutCardCout; //可以打出的牌就听牌的个数 血流 改为是否为换牌状态(0,表示非换牌状态.1,表示换牌状态,但是你已经选好牌了.2,表示换牌状态,但是还没有选牌)
- BYTE bOutCardData[MAX_COUNT]; //具体打哪几张牌 血流 (1.时,存的是换牌的牌,2,存的是我默认推送的牌)
- BYTE bTingCardCount[MAX_COUNT]; //相对应打出牌可听牌个数,索引表示第几张,值是对应对应的听牌个数 血流 最后一个牌是打出值胡牌值
- BYTE bTingCardData[MAX_COUNT][MAX_INDEX]; //具体听牌数据,一维索引表示打出牌的第几个,二维索引表示听牌的第几个,值表示牌数据 血流 每个玩家胡牌数据ChiHuCard[4][20]掩码,里面涵盖胡牌数据来源
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- if (sizeof(CMD_S_StatusPlay) * 16 > iLen) return false;
-
- #ifdef _UNICODE
- _snwprintf(pBuffer, iLen, TEXT("断线重连命令->重连用户:%d,最后的出牌:[%d][%d][%d][%d],玩家手牌数量:[%d][%d][%d][%d],玩家牌值:[%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d]")
- , wCurrentUser, bPutCardData[0], bPutCardData[1], bPutCardData[3], bPutCardData[3], cbCardCount[0], cbCardCount[1], cbCardCount[2], cbCardCount[3], cbCardData[0], cbCardData[1], cbCardData[2], cbCardData[3]
- , cbCardData[4], cbCardData[5], cbCardData[6], cbCardData[7] ,cbCardData[8], cbCardData[9], cbCardData[10], cbCardData[11],cbCardData[12], cbCardData[13]);
- #else
- _snwprintf(pBuffer, iLen, TEXT("断线重连命令->重连用户:%d,最后的出牌:[%d][%d][%d][%d],玩家手牌数量:[%d][%d][%d][%d],玩家牌值:[%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d]")
- , wCurrentUser, bPutCardData[0], bPutCardData[1], bPutCardData[3], bPutCardData[3], cbCardCount[0], cbCardCount[1], cbCardCount[2], cbCardCount[3], cbCardData[0], cbCardData[1], cbCardData[2], cbCardData[3]
- , cbCardData[4], cbCardData[5], cbCardData[6], cbCardData[7], cbCardData[8], cbCardData[9], cbCardData[10], cbCardData[11], cbCardData[12], cbCardData[13]);
- #endif
- return true;
- }
- };
-
- //游戏状态,断线重连
- struct CMD_S_StatusPlay_ZhuJi
- {
- CMD_S_GameConfig gameConfig;
- INT lUserTmpScore[GAME_PLAYER]; //临时积分。本轮玩家的积分
- BYTE leftTime; //255未开始
- WORD wchairId; //解散申请人
- BYTE options[GAME_PLAYER]; //在坐玩家 解散状态 0 未决定 1 tongy 2jj
- //游戏变量
- BYTE cbTotalCardCount; //游戏总牌数
- BYTE cbLeftCardCount; //单局游戏剩余牌数
- WORD wBankerUser; //本局游戏庄家
- BYTE lSiZi[4]; //色子1,2,皮子,癞子
-
- DWORD dwOwnerID; //房主ID //包家ID 6位 包家台数6位 每5位一个玩家台数
-
- //WORD bWanLaiZi[GAME_PLAYER]; //每个玩家打出癞子数(低四位是癞子,中四位是红中杠的个数,高四位就是发财杠的个数)
- //当前状态
- WORD wCurrentUser; //当前用户
- BYTE bPutCardData[GAME_PLAYER]; //最后一张牌打出的人和牌值
- BYTE totalOptTime; //总操作时间10秒
- BYTE leftOptTime; //还剩多少时间0
-
- BYTE cbDiscardCount[GAME_PLAYER]; //丢弃数目
- BYTE cbDiscardCard[GAME_PLAYER][40]; //丢弃记录
- BYTE cbCardCount[GAME_PLAYER]; //每个玩家扑克数目
- //组合扑克
- BYTE cbWeaveCount[GAME_PLAYER]; //组合数目
- CMD_WeaveItem WeaveItemArray[GAME_PLAYER][MAX_WEAVE]; //组合扑克
-
- BYTE cbCardData[MAX_COUNT]; //当前玩家手牌
- //断线玩家数据就是当前牌权玩家
- INT cbActionMask; //操作掩码
- WORD gangCards[6]; //当有杠的时候这里面有牌
-
-
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- if (sizeof(CMD_S_StatusPlay) * 16 > iLen) return false;
- CString outCards;
- for (int i = 0; i < 4; i++)
- {
- CString tmp;
- tmp.Format(_T(" 玩家%d手牌 |\r\n"), i);
- outCards += tmp;
- for (int j = 0; i < cbDiscardCount[i]; j++)
- {
- CString strTmp;
- strTmp.Format(_T("0x%x "), cbDiscardCard[i][j]);
- outCards += strTmp;
- }
- outCards += _T(" |\r\n");
- }
- OutputDebugString(outCards);
- TCHAR tempcard[1024 * 2] = { 0 };
- #ifdef _UNICODE
- _snwprintf(tempcard, iLen, TEXT("断线重连命令->重连用户:%d,最后的出牌:[%d][%d][%d][%d],玩家手牌数量:[%d][%d][%d][%d],玩家牌值:[%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d],包家[%d],台数[%d] 打出的牌=%s ")
- , wCurrentUser, bPutCardData[0], bPutCardData[1], bPutCardData[3], bPutCardData[3], cbCardCount[0], cbCardCount[1], cbCardCount[2], cbCardCount[3], cbCardData[0], cbCardData[1], cbCardData[2], cbCardData[3]
- , cbCardData[4], cbCardData[5], cbCardData[6], cbCardData[7], cbCardData[8], cbCardData[9], cbCardData[10], cbCardData[11], cbCardData[12], cbCardData[13], (dwOwnerID & 0x3f), ((dwOwnerID >> 6) & 0x3f), outCards.GetBuffer()
-
- );
- #else
- _snwprintf(tempcard, iLen, TEXT("断线重连命令->重连用户:%d,最后的出牌:[%d][%d][%d][%d],玩家手牌数量:[%d][%d][%d][%d],玩家牌值:[%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d],包家[%d],台数[%d]")
- , wCurrentUser, bPutCardData[0], bPutCardData[1], bPutCardData[3], bPutCardData[3], cbCardCount[0], cbCardCount[1], cbCardCount[2], cbCardCount[3], cbCardData[0], cbCardData[1], cbCardData[2], cbCardData[3]
- , cbCardData[4], cbCardData[5], cbCardData[6], cbCardData[7], cbCardData[8], cbCardData[9], cbCardData[10], cbCardData[11], cbCardData[12], cbCardData[13]
- (dwOwnerID & 0x3f), ((dwOwnerID >> 6) & 0x3f)
- );
- #endif
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
-
- //游戏状态,断线重连
- struct CMD_S_StatusPlay_Hua
- {
- CMD_S_GameConfig gameConfig;
- INT lUserTmpScore[GAME_PLAYER]; //临时积分。本轮玩家的积分
- BYTE leftTime; //255未开始
- WORD wchairId; //解散申请人
- BYTE options[GAME_PLAYER]; //在坐玩家 解散状态 0 未决定 1 tongy 2jj
- //游戏变量
- BYTE cbTotalCardCount; //游戏总牌数
- BYTE cbLeftCardCount; //单局游戏剩余牌数
- WORD wBankerUser; //本局游戏庄家
- BYTE lSiZi[4]; //记录玩家0,1,2统的个数
- //当前状态
- WORD wCurrentUser; //当前用户
- BYTE bPutCardData[GAME_PLAY]; //最后一张牌打出的人和牌值
- BYTE totalOptTime; //总操作时间10秒
- BYTE leftOptTime; //还剩多少时间0
-
- BYTE cbDiscardCount[GAME_PLAY]; //丢弃数目
- BYTE cbDiscardCard[GAME_PLAY][15]; //丢弃记录
- BYTE cbCardCount[GAME_PLAY]; //每个玩家扑克数目
- //组合扑克
- BYTE cbWeaveCount[GAME_PLAY]; //组合数目
- CMD_WeaveItem_Hua WeaveItemArray[GAME_PLAY][MAX_WEAVE_HUA]; //组合扑克
-
- BYTE cbCardData[9][9]; //当前玩家手牌
- //断线玩家数据就是当前牌权玩家
- INT cbActionMask; //操作掩码
- BYTE gangCards[6]; //当有杠的时候这里面有牌
- BYTE GameScore[GAME_PLAY]; //落地胡数
- BYTE HuShu; //胡数
- BYTE PaPoShu; //爬坡数
- };
-
- //游戏开始
- struct CMD_S_GameStart
- {
- WORD wBankerUser; //庄家用户
- WORD wCurrentUser; //当前用户
- INT cbUserAction; //用户动作(0:没操作,0x08:碰牌,0x10:杠,0x80:自摸等)
- BYTE ActionCard[3]; //动作所对应的牌
- BYTE cbCardData[MAX_COUNT*GAME_PLAYER]; //扑克列表
- BYTE cbSiceLaiZi[4]; //色子1,2,皮子,癞子
-
- BYTE cbLeftCardCount; //剩余牌
- BYTE cbTotalCardCount; //总麻将数
- BYTE cbOptTime; //操作时间(秒)
- BYTE cbCurrPlay; //当前局数
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- if (sizeof(CMD_S_GameStart) * 16 > iLen) return false;
- TCHAR tempcard[2000];
- TCHAR tempActionCard[2000];
- ZeroMemory(tempcard, 2000 * sizeof(TCHAR));
- ZeroMemory(tempActionCard, 2000 * sizeof(TCHAR));
- for (BYTE i = MAX_COUNT*wCurrentUser; i < MAX_COUNT*(wCurrentUser + 1); i++)
- {
- SwitchToStringCard(cbCardData[i], tempcard, 2000);
- }
- for (BYTE i =0; i < 3; i++)
- {
- SwitchToStringCard(ActionCard[i], tempActionCard, 2000);
- }
- tempcard[1999] = 0;
- tempActionCard[1999] = 0;
- #ifdef _UNICODE
- _snwprintf(pBuffer, iLen, TEXT("游戏开始->庄家用户:%d,当前用户:%d,用户动作:%d,动作所对应的牌:%s,扑克列表:%s,色子1:%d,色子2:%d,皮子:%d,癞子:%d,剩余牌数:%d,总麻将数:%d,操作时间:%d,当前局数:%d")
- , wBankerUser, wCurrentUser, cbUserAction, tempActionCard, tempcard, cbSiceLaiZi[0], cbSiceLaiZi[1], cbSiceLaiZi[2], cbSiceLaiZi[3], cbLeftCardCount, cbTotalCardCount, cbOptTime, cbCurrPlay);
- #else
- _snwprintf(pBuffer, iLen, TEXT("游戏开始->庄家用户:%d,当前用户:%d,用户动作:%d,动作所对应的牌:%s,扑克列表:%s,色子1:%d,色子2:%d,皮子:%d,癞子:%d,剩余牌数:%d,总麻将数:%d,操作时间:%d,当前局数:%d")
- , wBankerUser, wCurrentUser, cbUserAction, tempActionCard, tempcard, cbSiceLaiZi[0], cbSiceLaiZi[1], cbSiceLaiZi[2], cbSiceLaiZi[3], cbLeftCardCount, cbTotalCardCount, cbOptTime, cbCurrPlay);
- #endif
- //mylog::ToSet(pBuffer, iLen);
- return true;
- }
-
- bool SwitchToStringCard(BYTE bData, TCHAR pBuffer[], int iLen)
- {
- if (wcslen(pBuffer) > 1980 + iLen)
- {
- return false;
- }
- BYTE iHuaSe = (bData & 0xF0) >> 4;
- BYTE bValue = (bData & 0x0F);
- TCHAR szTemp[8];
- ZeroMemory(szTemp, 8*sizeof(TCHAR));
-
- switch (iHuaSe)
- {
- case 0:
- {
- switch (bValue)
- {
- case 1:
- {
- StringCchCat(szTemp, 16, _T("一万~"));
- break;
- }
- case 2:
- {
- StringCchCat(szTemp, 16, _T("二万~"));
- break;
- }
- case 3:
- {
- StringCchCat(szTemp, 16, _T("三万~"));
- break;
- }
- case 4:
- {
- StringCchCat(szTemp, 16, _T("四万~"));
- break;
- }
- case 5:
- {
- StringCchCat(szTemp, 16, _T("五万~"));
- break;
- }
- case 6:
- {
- StringCchCat(szTemp, 16, _T("六万~"));
- break;
- }
- case 7:
- {
- StringCchCat(szTemp, 16, _T("七万~"));
- break;
- }
- case 8:
- {
- StringCchCat(szTemp, 16, _T("八万~"));
- break;
- }
- case 9:
- {
- StringCchCat(szTemp, 16, _T("九万~"));
- break;
- }
- default:
- break;
- }
- break;
- }
- case 1:
- switch (bValue)
- {
- case 1:
- {
- StringCchCat(szTemp, 16, _T("一条~"));
- break;
- }
- case 2:
- {
- StringCchCat(szTemp, 16, _T("二条~"));
- break;
- }
- case 3:
- {
- StringCchCat(szTemp, 16, _T("三条~"));
- break;
- }
- case 4:
- {
- StringCchCat(szTemp, 16, _T("四条~"));
- break;
- }
- case 5:
- {
- StringCchCat(szTemp, 16, _T("五条~"));
- break;
- }
- case 6:
- {
- StringCchCat(szTemp, 16, _T("六条~"));
- break;
- }
- case 7:
- {
- StringCchCat(szTemp, 16, _T("七条~"));
- break;
- }
- case 8:
- {
- StringCchCat(szTemp, 16, _T("八条~"));
- break;
- }
- case 9:
- {
- StringCchCat(szTemp, 16, _T("九条~"));
- break;
- }
- default:
- break;
- }
- break;
- case 2:
- switch (bValue)
- {
- case 1:
- {
- StringCchCat(szTemp, 16, _T("一筒~"));
- break;
- }
- case 2:
- {
- StringCchCat(szTemp, 16, _T("二筒~"));
- break;
- }
- case 3:
- {
- StringCchCat(szTemp, 16, _T("三筒~"));
- break;
- }
- case 4:
- {
- StringCchCat(szTemp, 16, _T("四筒~"));
- break;
- }
- case 5:
- {
- StringCchCat(szTemp, 16, _T("五筒~"));
- break;
- }
- case 6:
- {
- StringCchCat(szTemp, 16, _T("六筒~"));
- break;
- }
- case 7:
- {
- StringCchCat(szTemp, 16, _T("七筒~"));
- break;
- }
- case 8:
- {
- StringCchCat(szTemp, 16, _T("八筒~"));
- break;
- }
- case 9:
- {
- StringCchCat(szTemp, 16, _T("九筒~"));
- break;
- }
- default:
- break;
- }
- break;
- default:
- break;
- }
-
- StringCchCat(pBuffer, iLen, szTemp);
- return true;
- }
-
- };
- //花牌游戏开始
- struct CMD_S_GameStart_Hua
- {
- WORD wBankerUser; //庄家用户
- WORD wCurrentUser; //当前用户
- INT cbUserAction; //用户动作(0:没操作,0x08:碰牌,0x10:杠,0x80:自摸等)
- BYTE ActionCard[6]; //动作所对应的牌
- BYTE cbCardData[9][9]; //扑克列表
-
- BYTE cbLeftCardCount; //剩余牌
- BYTE cbTotalCardCount; //总花牌数
- BYTE cbOptTime; //操作时间(秒)
- BYTE cbCurrPlay; //当前局数
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- if (sizeof(CMD_S_GameStart_Hua) * 16 > iLen) return false;
- BYTE TempCardData[26] = { 0 };
- BYTE TempCount = 0;
- for (BYTE i = 0; i < 9; i++)
- {
- for (BYTE j = 0; j < 9; j++)
- {
- if (cbCardData[i][j] == 0)
- {
- break;
- }
- TempCardData[TempCount++] = cbCardData[i][j];
- }
- if (TempCount == 26)
- {
- break;
- }
- }
-
- #ifdef _UNICODE
- _snwprintf(pBuffer, iLen, TEXT("游戏开始->庄家用户:%d,当前用户:%d,用户动作:%d,操作牌值:[%d][%d][%d][%d][%d][%d],扑克列表:[%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d],剩余牌数:%d,总麻将数:%d,操作时间:%d,当前局数:%d")
- , wBankerUser, wCurrentUser, cbUserAction, ActionCard[0], ActionCard[1], ActionCard[2], ActionCard[3], ActionCard[4], ActionCard[5], TempCardData[0], TempCardData[1], TempCardData[2], TempCardData[3], TempCardData[4], TempCardData[5], TempCardData[6], TempCardData[7], TempCardData[8], TempCardData[9], TempCardData[10], TempCardData[11], TempCardData[12], TempCardData[13], TempCardData[14], TempCardData[15], TempCardData[16], TempCardData[17], TempCardData[18], TempCardData[19], TempCardData[20], TempCardData[21], TempCardData[22], TempCardData[23], TempCardData[24], TempCardData[25], cbLeftCardCount, cbTotalCardCount, cbOptTime, cbCurrPlay);
- #else
- _snwprintf(pBuffer, iLen, TEXT("游戏开始->庄家用户:%d,当前用户:%d,用户动作:%d,操作牌值:[%d][%d][%d][%d][%d][%d],扑克列表:[%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d][%d],剩余牌数:%d,总麻将数:%d,操作时间:%d,当前局数:%d")
- , wBankerUser, wCurrentUser, cbUserAction, ActionCard[0], ActionCard[1], ActionCard[2], ActionCard[3], ActionCard[4], ActionCard[5], TempCardData[0], TempCardData[1], TempCardData[2], TempCardData[3], TempCardData[4], TempCardData[5], TempCardData[6], TempCardData[7], TempCardData[8], TempCardData[9], TempCardData[10], TempCardData[11], TempCardData[12], TempCardData[13], TempCardData[14], TempCardData[15], TempCardData[16], TempCardData[17], TempCardData[18], TempCardData[19], TempCardData[20], TempCardData[21], TempCardData[22], TempCardData[23], TempCardData[24], TempCardData[25], cbLeftCardCount, cbTotalCardCount, cbOptTime, cbCurrPlay);
- #endif
- return true;
- }
- };
-
- //出牌命令
- struct CMD_S_OutCard
- {
- WORD wOutCardUser; //出牌用户,座位号
- BYTE bOptType; //操作类型(0,表示普通出牌,1,表示癞子杠)
- BYTE cbOutCardData; //出牌扑克
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- if (sizeof(CMD_S_OutCard) * 16 > iLen) return false;
- #ifdef _UNICODE
- _snwprintf(pBuffer, iLen, TEXT("出牌命令->出牌用户:%d,操作类型(0表示普通出牌,1表示癞子杠):%d,出牌数据:%d")
- , wOutCardUser, bOptType, cbOutCardData);
- #else
- _snwprintf(pBuffer, iLen, TEXT("出牌命令->出牌用户:%d,操作类型(0表示普通出牌,1表示癞子杠):%d,出牌数据:%d")
- , wOutCardUser, bOptType, cbOutCardData);
- #endif
- //mylog::ToSet(pBuffer, iLen);
- return true;
- }
- };
-
- //听牌数据单独协议
- struct CMD_S_TingCard
- {
- BYTE bOutCardCout; //可以打出的牌就听牌的个数
- BYTE bOutCardData[MAX_COUNT]; //具体打哪几张牌
- BYTE bTingCardCount[MAX_COUNT]; //相对应打出牌可听牌个数,索引表示第几张,值是对应对应的听牌个数
- WORD bTingCardData[MAX_COUNT][MAX_TING];//具体听牌数据,一维索引表示打出牌的第几个,二维索引表示听牌的第几个,值表示牌数据
- };
-
- //发送扑克
- struct CMD_S_SendCard
- {
- BYTE cbCardData; //发牌扑克数据
- INT cbActionMask; //动作掩码(0:没操作,0x08:碰牌,0x10:杠,0x80:自摸)
- BYTE cbActionCard[3]; //操作扑克(杠的时候才有数据,多杠时,补杠,暗杠,朝天才有数据)
- WORD wCurrentUser; //当前用户
- BYTE bTail; //末尾发牌(0:正常发牌,1:末尾)
- BYTE bLeftCardCount; //剩余牌数
- BYTE bOutCardCout; //可以打出的牌就听牌的个数
- BYTE bOutCardData[MAX_COUNT]; //具体打哪几张牌
- BYTE bTingCardCount[MAX_COUNT]; //相对应打出牌可听牌个数,索引表示第几张,值是对应对应的听牌个数
- BYTE bTingCardData[MAX_COUNT][MAX_INDEX];//具体听牌数据,一维索引表示打出牌的第几个,二维索引表示听牌的第几个,值表示牌数据
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- if (sizeof(CMD_S_SendCard) * 8 > iLen) return false;
- TCHAR tempcard[2550];
- TCHAR sbOutCardData[2550] = { 0 };
- ZeroMemory(tempcard, 2550 * sizeof(TCHAR));
- ZeroMemory(sbOutCardData, 2550 * sizeof(TCHAR));
- for (BYTE i = 0; i < bOutCardCout; i++)
- {
- SwitchToStringCard(bOutCardData[i], sbOutCardData, 2550);
- for (BYTE j = 0; j < bTingCardCount[i]; j++)
- {
- BYTE tempCardData = bTingCardData[i][j] & 0x3f;
- SwitchToStringCard(tempCardData, tempcard, 2550);
- }
- StringCchCat(tempcard, 2550, _T("##~"));
- }
-
- #ifdef _UNICODE
- _snwprintf(pBuffer, iLen, TEXT("派发麻将->麻将数据:%d,动作掩码(0没操作 8碰牌 16杠 128自摸):%d,当前用户:%d,操作牌值:[%d][%d][%d],打出的牌就听牌的个数:%d,打牌数据:%s,相对应听牌数:[%d][%d][%d][%d][%d][%d],相对应听牌数据:%s,听牌位置1:[%d][%d][%d][%d][%d][%d][%d][%d],听牌位置2:[%d][%d][%d][%d][%d][%d],听牌位置3:[%d][%d][%d],听牌位置4:[%d][%d][%d],听牌位置5:[%d][%d][%d],听牌位置6:[%d][%d][%d],听牌位置7:[%d][%d][%d],听牌位置8[%d][%d][%d],听牌位置9:[%d][%d][%d],听牌位置10:[%d][%d][%d],听牌位置11:[%d][%d][%d],听牌位置12:[%d][%d][%d],听牌位置13:[%d][%d][%d],听牌位置14:[%d][%d][%d]")
- , cbCardData, cbActionMask, wCurrentUser, cbActionCard[0], cbActionCard[1], cbActionCard[2], bOutCardCout, sbOutCardData, bTingCardCount[0], bTingCardCount[1], bTingCardCount[2], bTingCardCount[3], bTingCardCount[4], bTingCardCount[5], tempcard, bTingCardData[0][0], bTingCardData[0][1], bTingCardData[0][2], bTingCardData[0][3], bTingCardData[0][4], bTingCardData[0][5], bTingCardData[0][6], bTingCardData[0][7], bTingCardData[1][0], bTingCardData[1][1], bTingCardData[1][2], bTingCardData[1][3], bTingCardData[1][4], bTingCardData[1][5]
- , bTingCardData[2][0], bTingCardData[2][1], bTingCardData[2][2], bTingCardData[3][0], bTingCardData[3][1], bTingCardData[3][2], bTingCardData[4][0], bTingCardData[4][1], bTingCardData[4][2]
- , bTingCardData[5][0], bTingCardData[5][1], bTingCardData[5][2], bTingCardData[6][0], bTingCardData[6][1], bTingCardData[6][2], bTingCardData[7][0], bTingCardData[7][1], bTingCardData[7][2]
- , bTingCardData[8][0], bTingCardData[8][1], bTingCardData[8][2], bTingCardData[9][0], bTingCardData[9][1], bTingCardData[9][2], bTingCardData[10][0], bTingCardData[10][1], bTingCardData[10][2]
- , bTingCardData[11][0], bTingCardData[11][1], bTingCardData[11][2], bTingCardData[12][0], bTingCardData[12][1], bTingCardData[12][2], bTingCardData[13][0], bTingCardData[13][1], bTingCardData[13][2]);
- #else
- _snwprintf(pBuffer, iLen, TEXT("派发麻将->麻将数据:%d,动作掩码(0没操作 8碰牌 16杠 128自摸):%d,当前用户:%d,操作牌值:%d,操作牌值:%d,操作牌值:%d,打出的牌就听牌的个数:%d,打牌数据:%s,相对应听牌数:[%d][%d][%d][%d][%d][%d],相对应听牌数据:%s,听牌位置1:[%d][%d][%d][%d][%d][%d][%d][%d],听牌位置2:[%d][%d][%d][%d][%d][%d],听牌位置3:[%d][%d][%d],听牌位置4:[%d][%d][%d],听牌位置5:[%d][%d][%d],听牌位置6:[%d][%d][%d],听牌位置7:[%d][%d][%d],听牌位置8[%d][%d][%d],听牌位置9:[%d][%d][%d],听牌位置10:[%d][%d][%d],听牌位置11:[%d][%d][%d],听牌位置12:[%d][%d][%d],听牌位置13:[%d][%d][%d],听牌位置14:[%d][%d][%d]")
- , cbCardData, cbActionMask, wCurrentUser, cbActionCard[0], cbActionCard[1], cbActionCard[2], bOutCardCout, sbOutCardData, bTingCardCount[0], bTingCardCount[1], bTingCardCount[2], bTingCardCount[3], bTingCardCount[4], bTingCardCount[5], tempcard, bTingCardData[0][0], bTingCardData[0][1], bTingCardData[0][2], bTingCardData[0][3], bTingCardData[0][4], bTingCardData[0][5], bTingCardData[0][6], bTingCardData[0][7], bTingCardData[1][0], bTingCardData[1][1], bTingCardData[1][2], bTingCardData[1][3], bTingCardData[1][4], bTingCardData[1][5]
- , bTingCardData[2][0], bTingCardData[2][1], bTingCardData[2][2], bTingCardData[3][0], bTingCardData[3][1], bTingCardData[3][2], bTingCardData[4][0], bTingCardData[4][1], bTingCardData[4][2]
- , bTingCardData[5][0], bTingCardData[5][1], bTingCardData[5][2], bTingCardData[6][0], bTingCardData[6][1], bTingCardData[6][2], bTingCardData[7][0], bTingCardData[7][1], bTingCardData[7][2]
- , bTingCardData[8][0], bTingCardData[8][1], bTingCardData[8][2], bTingCardData[9][0], bTingCardData[9][1], bTingCardData[9][2], bTingCardData[10][0], bTingCardData[10][1], bTingCardData[10][2]
- , bTingCardData[11][0], bTingCardData[11][1], bTingCardData[11][2], bTingCardData[12][0], bTingCardData[12][1], bTingCardData[12][2], bTingCardData[13][0], bTingCardData[13][1], bTingCardData[13][2]);
- #endif
-
- //mylog::ToSet(pBuffer, iLen);
- return true;
- }
- bool SwitchToStringCard(BYTE bData, TCHAR pBuffer[], int iLen)
- {
- if (wcslen(pBuffer) > 1980 + iLen)
- {
- return false;
- }
- BYTE iHuaSe = (bData & 0xF0) >> 4;
- BYTE bValue = (bData & 0x0F);
- TCHAR szTemp[8];
- ZeroMemory(szTemp, 8 * sizeof(TCHAR));
-
- switch (iHuaSe)
- {
- case 0:
- {
- switch (bValue)
- {
- case 1:
- {
- StringCchCat(szTemp, 16, _T("一万~"));
- break;
- }
- case 2:
- {
- StringCchCat(szTemp, 16, _T("二万~"));
- break;
- }
- case 3:
- {
- StringCchCat(szTemp, 16, _T("三万~"));
- break;
- }
- case 4:
- {
- StringCchCat(szTemp, 16, _T("四万~"));
- break;
- }
- case 5:
- {
- StringCchCat(szTemp, 16, _T("五万~"));
- break;
- }
- case 6:
- {
- StringCchCat(szTemp, 16, _T("六万~"));
- break;
- }
- case 7:
- {
- StringCchCat(szTemp, 16, _T("七万~"));
- break;
- }
- case 8:
- {
- StringCchCat(szTemp, 16, _T("八万~"));
- break;
- }
- case 9:
- {
- StringCchCat(szTemp, 16, _T("九万~"));
- break;
- }
- default:
- break;
- }
- break;
- }
- case 1:
- switch (bValue)
- {
- case 1:
- {
- StringCchCat(szTemp, 16, _T("一条~"));
- break;
- }
- case 2:
- {
- StringCchCat(szTemp, 16, _T("二条~"));
- break;
- }
- case 3:
- {
- StringCchCat(szTemp, 16, _T("三条~"));
- break;
- }
- case 4:
- {
- StringCchCat(szTemp, 16, _T("四条~"));
- break;
- }
- case 5:
- {
- StringCchCat(szTemp, 16, _T("五条~"));
- break;
- }
- case 6:
- {
- StringCchCat(szTemp, 16, _T("六条~"));
- break;
- }
- case 7:
- {
- StringCchCat(szTemp, 16, _T("七条~"));
- break;
- }
- case 8:
- {
- StringCchCat(szTemp, 16, _T("八条~"));
- break;
- }
- case 9:
- {
- StringCchCat(szTemp, 16, _T("九条~"));
- break;
- }
- default:
- break;
- }
- break;
- case 2:
- switch (bValue)
- {
- case 1:
- {
- StringCchCat(szTemp, 16, _T("一筒~"));
- break;
- }
- case 2:
- {
- StringCchCat(szTemp, 16, _T("二筒~"));
- break;
- }
- case 3:
- {
- StringCchCat(szTemp, 16, _T("三筒~"));
- break;
- }
- case 4:
- {
- StringCchCat(szTemp, 16, _T("四筒~"));
- break;
- }
- case 5:
- {
- StringCchCat(szTemp, 16, _T("五筒~"));
- break;
- }
- case 6:
- {
- StringCchCat(szTemp, 16, _T("六筒~"));
- break;
- }
- case 7:
- {
- StringCchCat(szTemp, 16, _T("七筒~"));
- break;
- }
- case 8:
- {
- StringCchCat(szTemp, 16, _T("八筒~"));
- break;
- }
- case 9:
- {
- StringCchCat(szTemp, 16, _T("九筒~"));
- break;
- }
- default:
- break;
- }
- break;
- default:
- break;
- }
-
- StringCchCat(pBuffer, iLen, szTemp);
- return true;
- }
- };
- //花牌发送
- struct CMD_S_SendCard_Hua
- {
- BYTE cbCardData; //发牌扑克数据
- INT cbActionMask; //动作掩码()
- BYTE cbActionCard[6]; //操作扑克(杠的时候才有数据,多杠时,补杠,暗杠,朝天才有数据)
- WORD wCurrentUser; //当前用户
- BYTE bTail; //末尾发牌(0:正常发牌,1:末尾)
- BYTE bLeftCardCount; //剩余牌数
- BYTE HuShu; //胡数
- BYTE PaPoShu; //爬坡数
-
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- if (sizeof(CMD_S_SendCard_Hua) * 8 > iLen) return false;
- //TCHAR tempcard[1024 * 2] = { 0 };
- //ZeroMemory(tempcard, 1024 * 2 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(pBuffer, iLen, TEXT("派发麻将->麻将数据:%d,动作掩码:%d,当前用户:%d,操作牌值:[%d][%d][%d][%d][%d][%d],是否是统抓牌:%d,剩余牌个数:%d,胡数:%d,爬坡数:%d")
- , cbCardData, cbActionMask, wCurrentUser, cbActionCard[0], cbActionCard[1], cbActionCard[2], cbActionCard[3], cbActionCard[4], cbActionCard[5], bTail, bLeftCardCount, HuShu, PaPoShu);
- #else
- _snwprintf(pBuffer, iLen, TEXT("派发麻将->麻将数据:%d,动作掩码:%d,当前用户:%d,操作牌值:[%d][%d][%d][%d][%d][%d],是否是统抓牌:%d,剩余牌个数:%d,胡数:%d,爬坡数:%d")
- , cbCardData, cbActionMask, wCurrentUser, cbActionCard[0], cbActionCard[1], cbActionCard[2], cbActionCard[3], cbActionCard[4], cbActionCard[5], bTail, bLeftCardCount, HuShu, PaPoShu);
- #endif
- //StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
-
- //操作提示
- struct CMD_S_OperateNotify
- {
- WORD wResumeUser; //还原用户
- INT cbActionMask; //动作掩码()
- BYTE cbActionCard; //动作扑克
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- //if(sizeof(CMD_S_OperateNotify) * 8 > iLen) return false;
-
- TCHAR tempcard[255] = { 0 };
- ZeroMemory(tempcard, 255 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, 255, TEXT("操作提示->还原用户:%d,动作掩码:%d,动作扑克:%d"), wResumeUser, cbActionMask, cbActionCard);
- #else
- _snprintf(tempcard, 255, TEXT("操作提示->还原用户:%d,动作掩码:%d,动作扑克:%d")
- , wResumeUser, cbActionMask, cbActionCard);
- #endif
-
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
- //花牌操作提示
- struct CMD_S_OperateNotify_Hua
- {
- WORD wResumeUser; //还原用户
- INT cbActionMask; //动作掩码()
- BYTE cbActionCard; //动作扑克
- BYTE HuShu; //胡数
- BYTE PaPo; //爬了几坡
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- //if(sizeof(CMD_S_OperateNotify) * 8 > iLen) return false;
-
- TCHAR tempcard[255] = { 0 };
- ZeroMemory(tempcard, 255 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, 255, TEXT("操作提示->还原用户:%d,动作掩码:%d,动作扑克:%d,胡数:%d,爬坡数:%d"), wResumeUser, cbActionMask, cbActionCard, HuShu, PaPo);
- #else
- _snwprintf(tempcard, 255, TEXT("操作提示->还原用户:%d,动作掩码:%d,动作扑克:%d,胡数:%d,爬坡数:%d"), wResumeUser, cbActionMask, cbActionCard, HuShu, PaPo);
- #endif
-
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
-
- //请统提示
- struct CMD_S_QingTongNotify
- {
- WORD OperatorUser; //操作用户
- INT cbActionMask; //操作码
- BYTE cbActionCard[6]; //动作扑克
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- TCHAR tempcard[255] = { 0 };
- ZeroMemory(tempcard, 255 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, 255, TEXT("操作提示->操作用户:%d,动作掩码:%d,动作扑克:[%d][%d][%d][%d][%d][%d]"), OperatorUser, cbActionMask, cbActionCard[0], cbActionCard[1], cbActionCard[2], cbActionCard[3], cbActionCard[4], cbActionCard[5]);
- #else
- _snwprintf(tempcard, 255, TEXT("操作提示->操作用户:%d,动作掩码:%d,动作扑克:[%d][%d][%d][%d][%d][%d]"), OperatorUser, cbActionMask, cbActionCard[0], cbActionCard[1], cbActionCard[2], cbActionCard[3], cbActionCard[4], cbActionCard[5]);
- #endif
-
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
- //操作命令
- struct CMD_S_OperateResult
- {
- WORD wOperateUser; //操作用户
- WORD wProvideUser; //供应用户
- INT cbOperateCode; //操作代码
- BYTE cbOperateCard; //操作扑克
- INT cbActionMask; //动作
- BYTE cbActionCard[3]; //动作牌值
- BYTE bOutCardCout; //可以打出的牌就听牌的出牌个数
- BYTE bOutCardData[MAX_COUNT]; //具体打哪几张牌
- BYTE bTingCardCount[MAX_COUNT]; //相对应打出牌的可听牌个数,索引表示打出牌索引,值表示可听牌数
- BYTE bTingCardData[MAX_COUNT][MAX_INDEX];//具体听牌数据,索引表示打出牌索引,值表示具体牌数据,根据上面值就知道这个有几个值
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- //if(sizeof(CMD_S_OperateNotify) * 8 > iLen) return false;
-
- TCHAR tempcard[1024*2] = { 0 };
- ZeroMemory(tempcard, 1024 * 2 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, iLen / sizeof(TCHAR), TEXT("操作命令->操作用户:%d,供应用户:%d,操作代码:%d,操作扑克:%d,可打出牌个数:%d,具体牌值:[%d][%d][%d],听牌位置1:[%d][%d][%d][%d][%d][%d][%d],听牌位置2:[%d][%d][%d][%d][%d][%d],听牌位置3:[%d][%d][%d],听牌位置4:[%d][%d][%d],听牌位置5:[%d][%d][%d],听牌位置6:[%d][%d][%d],听牌位置7:[%d][%d][%d],听牌位置8[%d][%d][%d],听牌位置9:[%d][%d][%d],听牌位置10:[%d][%d][%d],听牌位置11:[%d][%d][%d],听牌位置12:[%d][%d][%d],听牌位置13:[%d][%d][%d],听牌位置14:[%d][%d][%d]")
- , wOperateUser, wProvideUser, cbOperateCode, cbOperateCard, bOutCardCout, bOutCardData[0], bOutCardData[1], bOutCardData[2], bTingCardData[0][0], bTingCardData[0][1], bTingCardData[0][2], bTingCardData[0][3], bTingCardData[0][4], bTingCardData[0][5], bTingCardData[0][6], bTingCardData[1][0], bTingCardData[1][1], bTingCardData[1][2], bTingCardData[1][3], bTingCardData[1][4], bTingCardData[1][5]
- , bTingCardData[2][0], bTingCardData[2][1], bTingCardData[2][2], bTingCardData[3][0], bTingCardData[3][1], bTingCardData[3][2], bTingCardData[4][0], bTingCardData[4][1], bTingCardData[4][2]
- , bTingCardData[5][0], bTingCardData[5][1], bTingCardData[5][2], bTingCardData[6][0], bTingCardData[6][1], bTingCardData[6][2], bTingCardData[7][0], bTingCardData[7][1], bTingCardData[7][2]
- , bTingCardData[8][0], bTingCardData[8][1], bTingCardData[8][2], bTingCardData[9][0], bTingCardData[9][1], bTingCardData[9][2], bTingCardData[10][0], bTingCardData[10][1], bTingCardData[10][2]
- , bTingCardData[11][0], bTingCardData[11][1], bTingCardData[11][2], bTingCardData[12][0], bTingCardData[12][1], bTingCardData[12][2], bTingCardData[13][0], bTingCardData[13][1], bTingCardData[13][2]);
- #else
- _snwprintf(tempcard, iLen / sizeof(TCHAR), TEXT("操作命令->操作用户:%d,供应用户:%d,操作代码:%d,操作扑克:%d,可打出牌个数:%d,具体牌值:[%d][%d][%d],听牌位置1:[%d][%d][%d][%d][%d][%d][%d],听牌位置2:[%d][%d][%d][%d][%d][%d],听牌位置3:[%d][%d][%d],听牌位置4:[%d][%d][%d],听牌位置5:[%d][%d][%d],听牌位置6:[%d][%d][%d],听牌位置7:[%d][%d][%d],听牌位置8[%d][%d][%d],听牌位置9:[%d][%d][%d],听牌位置10:[%d][%d][%d],听牌位置11:[%d][%d][%d],听牌位置12:[%d][%d][%d],听牌位置13:[%d][%d][%d],听牌位置14:[%d][%d][%d]")
- , wOperateUser, wProvideUser, cbOperateCode, cbOperateCard, bOutCardCout, bOutCardData[0], bOutCardData[1], bOutCardData[2], bTingCardData[0][0], bTingCardData[0][1], bTingCardData[0][2], bTingCardData[0][3], bTingCardData[0][4], bTingCardData[0][5], bTingCardData[0][6], bTingCardData[1][0], bTingCardData[1][1], bTingCardData[1][2], bTingCardData[1][3], bTingCardData[1][4], bTingCardData[1][5]
- , bTingCardData[2][0], bTingCardData[2][1], bTingCardData[2][2], bTingCardData[3][0], bTingCardData[3][1], bTingCardData[3][2], bTingCardData[4][0], bTingCardData[4][1], bTingCardData[4][2]
- , bTingCardData[5][0], bTingCardData[5][1], bTingCardData[5][2], bTingCardData[6][0], bTingCardData[6][1], bTingCardData[6][2], bTingCardData[7][0], bTingCardData[7][1], bTingCardData[7][2]
- , bTingCardData[8][0], bTingCardData[8][1], bTingCardData[8][2], bTingCardData[9][0], bTingCardData[9][1], bTingCardData[9][2], bTingCardData[10][0], bTingCardData[10][1], bTingCardData[10][2]
- , bTingCardData[11][0], bTingCardData[11][1], bTingCardData[11][2], bTingCardData[12][0], bTingCardData[12][1], bTingCardData[12][2], bTingCardData[13][0], bTingCardData[13][1], bTingCardData[13][2]);
- #endif
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
- //
- struct CMD_S_OperateResult_Hua
- {
- WORD wOperateUser; //操作用户
- WORD wProvideUser; //供应用户
- INT cbOperateCode; //操作代码
- BYTE cbOperateCard; //操作扑克
- BYTE cbHuaGangCard[4]; //操作扑克
- INT cbActionMask; //动作
- BYTE cbActionCard[6]; //动作牌值
- BYTE cbOperateScore; //胡数
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- TCHAR tempcard[1024 * 2] = { 0 };
- ZeroMemory(tempcard, 1024 * 2 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, iLen / sizeof(TCHAR), TEXT("操作命令->操作用户:%d,供应用户:%d,操作代码:%d,操作扑克:%d,附加操作扑克:[%d][%d][%d][%d],返回操作码:%d,具体牌值:[%d][%d][%d][%d][%d][%d]"), wOperateUser, wProvideUser, cbOperateCode, cbOperateCard, cbHuaGangCard[0], cbHuaGangCard[1], cbHuaGangCard[2], cbHuaGangCard[3], cbActionMask, cbActionCard[0], cbActionCard[1], cbActionCard[2], cbActionCard[3], cbActionCard[4], cbActionCard[5]);
- #else
- _snwprintf(tempcard, iLen / sizeof(TCHAR), TEXT("操作命令->操作用户:%d,供应用户:%d,操作代码:%d,操作扑克:%d,附加操作扑克:[%d][%d][%d][%d],返回操作码:%d,具体牌值:[%d][%d][%d][%d][%d][%d]"), wOperateUser, wProvideUser, cbOperateCode, cbOperateCard, cbHuaGangCard[0], cbHuaGangCard[1], cbHuaGangCard[2], cbHuaGangCard[3], cbActionMask, cbActionCard[0], cbActionCard[1], cbActionCard[2], cbActionCard[3], cbActionCard[4], cbActionCard[5]);
- #endif
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
-
- //血流game结束
- struct CMD_S_XueLiuEnd
- {
- BYTE bFinish;//是否结束本轮。0表示否,1表示是
- BYTE cbCardData[GAME_PLAYER][MAX_COUNT]; //玩家手牌
- BYTE checkHuazhu[GAME_PLAYER]; //默认0 1查叫 2花猪
- int checkCoin[GAME_PLAYER]; // 查花猪 或查叫的积分变化值
-
- int DangJu[GAME_PLAYER]; //单局积分
- int leftCoin[GAME_PLAYER]; //玩家积分
- BYTE winScoreNum; //积分变化次数
-
- BYTE winScoreType[MAX_CHANGE_SCORE]; //类型
- BYTE winScoreRate[MAX_CHANGE_SCORE]; //倍数
- int winScore[MAX_CHANGE_SCORE]; //分数
- BYTE winProvider[MAX_CHANGE_SCORE]; //关连玩家 0表示3家 1下家 2对家 3上家
- BYTE winFanType[MAX_CHANGE_SCORE]; //番型
- };
- //游戏结束
- struct CMD_S_GameEnd
- {
- BYTE bOptType; //1操作类型(1胡牌结束,2黄庄,3解散)1
- WORD bWanJiaId; //2玩家座位号 3
- BYTE cbCardData[GAME_PLAYER][MAX_COUNT]; //62玩家手牌值 59
- INT cbWanJiaScore[GAME_PLAYER]; //66玩家目前所拥有积分 75
- BYTE bZimo[GAME_PLAYER]; //70每位玩家胡牌次数 79
- BYTE bFinish; //71是否结束本轮。0表示否,1表示是 80
- DWORD dwOwnerID; //75房主ID 84
- BYTE bLeftCardCount; //76剩余牌数 85
- BYTE bLeftCardDada[54]; //130剩余牌值 139
- BYTE playGameNum; //打到第几局了 140
- INT lGameScoreDetail[16 * GAME_PLAYER]; //195流水详情 204
- };
- //花牌游戏结束
- struct CMD_S_GameEnd_Hua
- {
- BYTE bOptType; //1操作类型(1胡牌结束,2黄庄,3解散)
- WORD bWanJiaId; //2玩家座位号(胡牌玩家)
- BYTE bHuPaiCard; //1玩家座位号(胡牌牌值)(自摸牌值为零,点炮才有值)
- BYTE YingJiaCard[9][5]; //45赢家手牌排列
- BYTE ZhuGold; //1主经
- BYTE HuShu; //1胡数
- BYTE cbCardIndex[GAME_PLAY][28]; //84玩家手牌值
- INT cbBianDongScore[GAME_PLAY]; //12玩家积分变动
- INT cbWanJiaScore[GAME_PLAY]; //12玩家目前所拥有积分
- BYTE bZimo[GAME_PLAY]; //3每位玩家胡牌次数
- BYTE bFinish; //1是否结束本轮。0表示否,1表示是 163
- BYTE bLeftCardCount; //1剩余牌数 164
- BYTE bLeftCardDada[47]; //130剩余牌值
- BYTE playGameNum; //打到第几局了
- INT lGameScoreDetail[16 * GAME_PLAY]; //195流水详情
- };
-
- //用户准备
- struct CMD_S_Reading
- {
- BYTE bReading;
- WORD wChairID;
- };
- //用户托管
- struct CMD_S_Trustee
- {
- bool bTrustee; //是否托管
- WORD wChairID; //托管用户
- };
-
- //
- struct CMD_S_ChiHu
- {
- //WORD wChiHuUser[3]; //胡牌人
- BYTE wChiHuUser[GAME_PLAYER]; //下标胡牌人,值胡牌次数
- WORD wProviderUser; //放炮人,只有自摸
- BYTE cbChiHuCard; //胡牌数据
- //BYTE TingPaiCard[MAX_COUNT]; //听牌数据
- };
-
- //积分变动
- struct CMD_S_GangScore
- {
- WORD wChairId; //用户
- int cbOperateCode; //操作代码
- int lGangScore[GAME_PLAYER]; //杠积分算法,存得是每个用户积分变动情况
- int cbWanJiaScore[GAME_PLAYER]; //玩家目前所拥有积分
- };
-
- struct CMD_S_DIGNQUE
- {
- BYTE cbDingQue[GAME_PLAYER];
- };
-
-
- struct CMD_S_HuanSanZhang
- {
- BYTE cbSice;
- BYTE cbCard1[GAME_PLAYER];
- BYTE cbCard2[GAME_PLAYER];
- BYTE cbCard3[GAME_PLAYER];
- WORD wChairID[GAME_PLAYER];
- INT cbUserAction; //用户动作(0:没操作,0x08:碰牌,0x10:杠,0x80:自摸等)
- BYTE ActionCard[3]; //动作所对应的牌
- };
-
- //游戏回放回放
- struct GameRecordPacket
- {
- WORD wChairID;
- WORD wMainCmdID;
- WORD wSubCmdID;
- WORD wSize;
- void* pData;
- };
-
- struct ChairRecord
- {
- WORD wChairId; //椅子号
- UINT32 dwUserId; //用户id
- TCHAR userName[LEN_NICKNAME];//用户名
- TCHAR headUrl[LEN_HEAD_URL]; //头像
- };
- struct CMD_GR_ReplayRecordResp
- {
- UINT32 m_UUID; //回放唯一ID
- UINT32 m_tableID; //公开桌子号
- UINT32 m_startTime; //游戏开始时间
- UINT32 m_endTime; //游戏结束时间
- UINT32 m_UserId; //用户ID
-
- CMD_S_GameConfig m_gameconfig; //游戏基本配置
- ChairRecord m_chairList[GAME_PLAYER]; //游戏椅子玩家信息
- UINT16 m_recordCount; //回放数据记录数
- char pData[0]; //回放记录列表(尾拖数据)
- };
-
- struct CMD_S_GameNotify
- {
- WORD m_wChairID; //
- //UINT32 m_notifyType; //通知类型。1表示定缺,2表示换三张
- };
-
- struct CMD_S_YIWEI_HUA
- {
- BYTE bFlag;//表示是否成功(1表示成功,2表示牌值有问题,3表示开始位置失败,4表示开始成功结束失败)
- BYTE StarIpOne;
- BYTE StarIpTwo;
- BYTE EndIpOne;
- BYTE EndIpTwo;
- BYTE CardData;
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- //if(sizeof(CMD_S_OperateNotify) * 8 > iLen) return false;
-
- TCHAR tempcard[255] = { 0 };
- ZeroMemory(tempcard, 255 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, 255, TEXT("移动牌命令->1成功2牌值问题3开始失败4结束失败:%d,开始位置:[%d][%d],结束位置:[%d][%d],牌值:%d"), bFlag, StarIpOne, StarIpTwo, EndIpOne, EndIpTwo, CardData);
- #else
- _snwprintf(tempcard, 255, TEXT("移动牌命令->1成功2牌值问题3开始失败4结束失败:%d,开始位置:[%d][%d],结束位置:[%d][%d],牌值:%d"), bFlag, StarIpOne, StarIpTwo, EndIpOne, EndIpTwo, CardData);
- #endif
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
-
-
- //////////////////////////////////////////////////////////////////////////
- //客户端命令结构
-
- #define SUB_C_OUT_CARD 1 //出牌命令
- #define SUB_C_OPERATE_CARD 3 //操作扑克
- #define SUB_C_TRUSTEE 4 //用户托管
- //#define SUB_C_QINGTONG 5 //请统操作
- #define SUB_C_REPLAY 6 //回放
- //#define SUB_C_DIGNQUE 5 //定缺,一脚耐油用不到
- //#define SUB_C_READING 99 //用户准备
- //#define SUB_C_TINGPAI 2 //听牌按钮
- #define SUB_C_HUAN_SAN_ZHANG 7 //换三张,一脚耐油用不到
-
-
- #define SUB_C_OUT_CARD_HUA 11 //花牌出牌命令
- #define SUB_C_OPERATE_CARD_HUA 13 //花牌操作扑克
- #define SUB_C_TRUSTEE_HUA 14 //花牌用户托管
- #define SUB_C_YIWEI_HUA 15 //花牌手牌移位操作
- #define SUB_C_REPLAY_HUA 16 //花牌回放
- //出牌命令
- struct CMD_C_OutCard
- {
- BYTE cbCardData; //扑克数据
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- //if(sizeof(CMD_S_OperateNotify) * 8 > iLen) return false;
-
- TCHAR tempcard[255] = { 0 };
- ZeroMemory(tempcard, 255 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, 255, TEXT("出牌命令->出牌牌值:%d"), cbCardData);
- #else
- _snwprintf(tempcard, 255, TEXT("出牌命令->出牌牌值:%d"), cbCardData);
- #endif
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
- //出牌命令
- struct CMD_C_OutCard_Hua
- {
- BYTE cbCardData; //扑克数据
- BYTE cbCardWeiZhi; //起始位置
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- //if(sizeof(CMD_S_OperateNotify) * 8 > iLen) return false;
-
- TCHAR tempcard[255] = { 0 };
- ZeroMemory(tempcard, 255 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, 255, TEXT("出牌命令->出牌牌值:%d,位置%d"), cbCardData, cbCardWeiZhi);
- #else
- _snwprintf(tempcard, 255, TEXT("出牌命令->出牌牌值:%d,位置%d"), cbCardData, cbCardWeiZhi);
- #endif
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
-
- //操作命令
- struct CMD_C_OperateCard
- {
- INT cbOperateCode; //操作代码
- BYTE cbOperateCard; //操作扑克
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- //if(sizeof(CMD_S_OperateNotify) * 8 > iLen) return false;
-
- TCHAR tempcard[255] = { 0 };
- ZeroMemory(tempcard, 255 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, 255, TEXT("操作命令->操作代码:%d,操作扑克:%d"), cbOperateCode, cbOperateCard);
- #else
- _snprintf(tempcard, 255, TEXT("操作命令->操作代码:%d,操作扑克:%d"), cbOperateCode, cbOperateCard);
- #endif
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
-
- struct CMD_C_OperateCard_Hua
- {
- INT cbOperateCode; //操作代码
- BYTE cbOperateCard; //操作扑克
- BYTE cbHuaCard[4]; //前2 花牌 后2 别杠
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- //if(sizeof(CMD_S_OperateNotify) * 8 > iLen) return false;
-
- TCHAR tempcard[255] = { 0 };
- ZeroMemory(tempcard, 255 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, 255, TEXT("操作命令->操作代码:%d,操作扑克:%d,%d,%d,%d,%d"), cbOperateCode, cbOperateCard, cbHuaCard[0], cbHuaCard[1], cbHuaCard[2], cbHuaCard[3]);
- #else
- _snwprintf(tempcard, 255, TEXT("操作命令->操作代码:%d,操作扑克:%d,%d,%d,%d,%d"), cbOperateCode, cbOperateCard, cbHuaCard[0], cbHuaCard[1], cbHuaCard[2], cbHuaCard[3]);
- #endif
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
-
- };
- //用户托管
- struct CMD_C_Trustee
- {
- bool bTrustee; //是否托管
- };
-
- enum Huase
- {
- Huase_wan = 0, //万字
- Huase_tiao, //1条子
- Huase_tong, //2筒字
- };
- //操作命令
- struct CMD_C_DingQue
- {
- BYTE cbHuaSeCode; //花色代码 (0万子,1条 子,2筒字)
- };
- //花牌移位操作
- struct CMD_C_YIWEI_HUA
- {
- BYTE cbStartIp; //从左到右,0-8个位置
- BYTE cbEndIp; //从左到右,0-8个位置
- BYTE cbOperateCard; //操作扑克
-
- bool ToString(TCHAR* pBuffer, int iLen)
- {
- //if(sizeof(CMD_S_OperateNotify) * 8 > iLen) return false;
-
- TCHAR tempcard[255] = { 0 };
- ZeroMemory(tempcard, 255 * sizeof(TCHAR));
-
- #ifdef _UNICODE
- _snwprintf(tempcard, 255, TEXT("移位命令->开始位置:%d,结束位置:%d,操作扑克:%d"), cbStartIp, cbEndIp, cbOperateCard);
- #else
- _snwprintf(tempcard, 255, TEXT("移位命令->开始位置:%d,结束位置:%d,操作扑克:%d"), cbStartIp, cbEndIp, cbOperateCard);
- #endif
- StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
- return true;
- }
- };
-
- //出牌命令
- struct CMD_C_RePlay
- {
- UINT32 m_UUID; //回放记录ID
- };
-
- struct CMD_C_HuanSanZhang
- {
- byte cbCard1;
- byte cbCard2;
- byte cbCard3;
- };
- //////////////////////////////////////////////////////////////////////////
- #pragma pack()
- #endif
|