#ifndef CMD_NCSPARROW_HEAD_FILE #define CMD_NCSPARROW_HEAD_FILE #include "Array.h" #include "DataStream.h" #pragma pack(1) //游戏属性 #define WN_KIND_ID 558 //游戏 I D #define WN_GAME_NAME ("麻将") //游戏名字 namespace WNMJ_SPACE{ #define WNSP_FPS (1.0f/60.0f) // 一帧多长时间 ////////////////////////////////////////////////////////////////////////////////////////////////// //公共宏定义 enum GAME_INFO { KIND_ID = 558, //游戏 I D GAME_PLAYER = 4, //游戏人数 SELF_VIEW_CHAIRID = 2, // 自己的视图椅子号 }; //游戏状态 enum GAME_STATUS { GS_MJ_NULL = 0xff, GS_MJ_FREE = GAME_STATUS_FREE, //空闲状态 GS_MJ_BATCH = (GAME_STATUS_PLAY+1), //洗澡状态 GS_MJ_SICE = (GAME_STATUS_PLAY+2), //筛子状态 GS_MJ_PLAY = (GAME_STATUS_PLAY+3), //游戏状态 }; enum MAX_VALUE_NC { MAX_COUNT = 14, //最大数目 MAX_WEAVE = 4, //最大组合 MAX_INDEX = 34, //最大索引 MAX_REPERTORY = 136, //最大库存 }; ////////////////////////////////////////////////////////////////////////// //组合子项 struct tagWeaveItem { uint16 wWeaveKind; //组合类型 uint8 cbCenterCard; //中心扑克 uint8 cbPublicCard; //公开标志 uint16 wProvideUser; //供应用户 }; ////////////////////////////////////////////////////////////////////////// //服务器命令结构 enum SERVER_COM { SUB_S_GAME_START = 100, //游戏开始 SUB_S_OUT_CARD = 101, //出牌命令 SUB_S_SEND_CARD = 102, //发送扑克 SUB_S_OPERATE_NOTIFY = 104, //操作提示 SUB_S_OPERATE_RESULT = 105, //操作命令 SUB_S_GAME_END = 106, //游戏结束 SUB_S_TRUSTEE = 107, //用户托管 SUB_S_BATCH = 108, //洗澡命令 SUB_S_GANG_SCORE = 109, //杠分消息; SUB_S_MASTER_LEFTCARD = 114, //剩余牌堆 }; //游戏规则 enum eWNMJRuleEnum { eWNMJRuleEnum_Null = 0, //无效值; eWNMJRuleEnum_CardAA = 1, //房卡AA; eWNMJRuleEnum_OneTwoFAN = 1 << 1, //1,2翻倍; eWNMJRuleEnum_TwoThreeFAN = 1 << 2, //2,3翻倍; eWNMJRuleEnum_YingHU = 1 << 3, //硬胡; eWNMJRuleEnum_YiBianDaoHU = 1 << 4, //一边倒胡; eWNMJRuleEnum_HunHU = 1 << 5, //混子打发; eWNMJRuleEnum_ZhiAnGang = 1 << 6, //直暗杠翻倍; eWNMJRuleEnum_PlayCount2 = 1 << 7, //2人; eWNMJRuleEnum_PlayCount3 = 1 << 8, //3人; eWNMJRuleEnum_PlayCount_auto = 1 << 29, //代开房; eWNMJRuleEnum_DaiKaiFang = 1 << 30, //代开房; eWNMJRuleEnum_NOSameIPAddr = 1 << 31, //不可以同IP地址; }; //游戏状态 struct CMD_S_StatusFree { SCORE lCellScore; //基础金币 uint16 wBankerUser; //庄家用户 bool bTrustee[GAME_PLAYER]; //是否托管 bool bActiveStatus[GAME_PLAYER]; //玩家状态; SCORE lAllTurnScore; //总局得分 SCORE lLastTurnScore; //上局得分 }; //游戏状态 struct CMD_S_StatusBatch { SCORE lCellScore; //基础金币 uint8 bComplete; //完成标志 bool bTrustee[GAME_PLAYER]; //是否托管 bool bActiveStatus[GAME_PLAYER]; //玩家状态; //历史积分 SCORE lAllTurnScore[4]; //总局得分 SCORE lLastTurnScore[4]; //上局得分 }; //杠牌结果 struct tagGangCardResult { uint8 cbCardCount; //扑克数目 uint8 cbCardData[4]; //扑克数据 }; //游戏状态 struct CMD_S_StatusPlay { //游戏变量 SCORE lCellScore; //单元积分 uint16 wSiceCount; //骰子点数 uint16 wSiceCount2; //骰子点数 uint16 wSiceCount3; //骰子点数 uint16 wBankerUser; //庄家用户 uint16 wCurrentUser; //当前用户 bool bTrustee[GAME_PLAYER]; //是否托管 bool bActiveStatus[GAME_PLAYER]; //玩家状态; //风牌记录 uint8 cbFengCardData[8]; //风牌记录 uint8 cbFengCardCount; //风牌记录 //状态变量 uint8 cbLeftCardCount; //剩余数目 uint8 cbActionCard; //动作扑克 uint16 dwActionMask; //动作掩码 tagGangCardResult GangPaiResult; //杠牌操作 //出牌信息 uint16 wOutCardUser; //出牌用户 uint8 cbOutCardData; //出牌扑克 uint8 cbDiscardCount[4]; //丢弃数目 uint8 cbDiscardCard[4][55]; //丢弃记录 //扑克数据 uint8 cbCardCount; //扑克数目 uint8 cbCardData[MAX_COUNT]; //扑克列表 uint8 cbSendCardData; //发送扑克 //组合扑克 uint8 cbWeaveCount[4]; //组合数目 tagWeaveItem WeaveItemArray[4][4]; //组合扑克 //历史积分 SCORE lAllTurnScore[4]; //总局得分 SCORE lLastTurnScore[4]; //上局得分 }; //游戏开始 struct CMD_S_GameStart { uint16 wSiceCount; //骰子点数 //uint16 wSiceCount2; //骰子点数2 //uint16 wSiceCount3; //骰子点数3 uint16 wBankerUser; //庄家用户 uint16 wCurrentUser; //当前用户 uint8 wUserAction; //用户动作 tagGangCardResult GangPaiResult; //杠牌操作 uint8 cbCardData[MAX_COUNT]; //扑克列表 bool bTrustee[GAME_PLAYER]; //是否托管 bool bActiveStatus[GAME_PLAYER]; //玩家状态; }; // 录像专用; struct CMD_R_GameStart { uint16 wSiceCount; //骰子点数 uint16 wBankerUser; //庄家用户 uint16 wCurrentUser; //当前用户 uint8 wUserAction; //用户动作 tagGangCardResult GangPaiResult; //杠牌操作 bool bActiveStatus[GAME_PLAYER]; //玩家状态; uint8 cbCardData[GAME_PLAYER][MAX_COUNT]; //扑克列表 }; struct CMD_S_BatchResult { uint8 cbBatchResult[GAME_PLAYER]; //庄家用户 }; //出牌命令 struct CMD_S_OutCard { uint16 wOutCardUser; //出牌用户 uint8 cbOutCardData; //出牌扑克 }; //发送扑克 struct CMD_S_SendCard { uint8 cbCardData; //扑克数据 uint16 wActionMask; //动作掩码 uint16 wCurrentUser; //当前用户 bool cbIsNotGang; //是否杠牌 tagGangCardResult GangPaiResult; //杠牌操作 }; //操作提示 struct CMD_S_OperateNotify { uint16 wResumeUser; //还原用户 uint16 dwActionMask; //动作掩码 uint8 cbActionCard; //动作扑克 tagGangCardResult GangPaiResult; //杠牌操作 }; //操作命令 struct CMD_S_OperateResult { uint16 wOperateUser; //操作用户 uint16 wProvideUser; //供应用户 uint16 dwOperateCode; //操作代码 uint8 cbOperateCard; //操作扑克 }; //杠分消息; struct CMD_S_GangScore { uint16 wChairId; //杠牌者; uint8 cbXiaYu; //是否暗杠; }; //游戏结束 struct CMD_S_GameEnd { //税收 SCORE lGameTax; //游戏税收 bool bActiveStatus[GAME_PLAYER]; //玩家状态; //结束信息 uint16 wProvideUser; //供应用户 uint8 cbChiHuCard; //供应扑克 uint32 dwChiHuKind[GAME_PLAYER]; //胡牌类型 uint32 dwChiHuRight[GAME_PLAYER]; //胡牌类型 //积分信息 SCORE lGameScore[GAME_PLAYER]; //游戏积分 SCORE lGameScoreEx[GAME_PLAYER]; //奖励分 SCORE lGameHuScore[GAME_PLAYER]; //胡牌分; //扑克信息 uint8 cbCardCount[GAME_PLAYER]; //扑克数目 uint8 cbCardData[GAME_PLAYER][MAX_COUNT]; //扑克数据 uint8 cbWeaveItemCount[GAME_PLAYER]; //组合数目 tagWeaveItem WeaveItemArray[GAME_PLAYER][4]; //组合牌 SCORE lAllTurnScore[GAME_PLAYER]; //总局得分 SCORE lLastTurnScore[GAME_PLAYER]; //上局得分 }; //用户托管 struct CMD_S_Trustee { bool bTrustee; //是否托管 uint16 wChairID; //托管用户 }; ////////////////////////////////////////////////////////////////////////////////////////////////// //客户端命令结构 enum SUB_CLIENT { SUB_C_OUT_CARD = 1, //出牌命令 SUB_C_BATCH = 2, //洗澡开始 SUB_C_OPERATE_CARD = 3, //操作扑克 SUB_C_TRUSTEE = 4, //用户托管 SUB_C_BATCH_END = 5, //洗澡完毕 SUB_C_PASS_KING = 6, //经过精牌 SUB_C_MASTER_CHEAKCARD = 10, //选择的牌 SUB_C_MASTER_LEFTCARD = 11, //剩余牌堆 }; //定时器定义 enum TIME_TYPE { IDI_NULL = -1, //未启动定时器 IDI_BASESCORE = 1, //底注设置定时器 IDI_SHOOT_DICE = 2, //掷骰子定时器 IDI_DISPATCH_CARD = 3, //发牌计时器 IDI_SEND_CARD = 4, //摸牌计时器 IDI_SEND_BUHUA = 5, //补花计时器 //IDI_OUT_CARD = 6, //出牌计时器(暂时不用和操作提示用同一个定时器) IDI_USER_OPERATE = 7, //操作计时器 IDI_USER_OFFLINE = 10, //断线延时托管计时器 IDI_StartGame = 100, //开始计时器ID //定时器时间 IDT_BASESCORE = 25, //设置底注时间 IDT_SHOOT_DICE = 1, //掷骰子时间 IDT_DISPATCH_CARD = 10, //发牌时间 IDT_SEND_CARD = 2, //摸牌时间 IDT_SEND_BUHUA = 2, //补花时间 IDT_OUT_CARD = 20, //出牌时间 IDT_USER_OPERATE = 25, //操作时间 IDT_USER_TRUST = 1, //托管时间 IDT_USER_TING = 1, //听牌时间 IDT_USER_OFFLINE = 15, //断线延时托管时间 }; #define CUSTOM_EVENT_OUT_CARD "CustomEventOutCard" //出牌事件 #define CUSTOM_EVENT_OPER_CARD "CustomEventOperCard" //操作牌事件 #define CUSTOM_EVENT_GET_CARD "CustomEventGetCard" //要牌事件; //出牌命令 struct CMD_C_OutCard { uint8 cbCardData; //扑克数据 }; //洗澡 struct CMD_C_BATCH { uint8 cbChipTimes; //买顶倍数 uint16 wCurrentUser; //当前用户 }; //操作命令 struct CMD_C_OperateCard { uint16 dwOperateCode; //操作代码 uint8 cbOperateCard; //操作扑克 }; //用户托管 struct CMD_C_Trustee { bool bTrustee; //是否托管 }; // 要牌结构 struct CMD_C_MaterCheckCard { uint8 cbCheakCard; //操作代码 }; struct MasterLeftCard { uint8 kMasterCheakCard; // 当前选择; uint8 kMasterLeftIndex[MAX_INDEX]; // 排堆; }; //结算积分信息 struct tagClientScoreInfo { //积分信息 uint16 wChairID; //服务器位置 uint32 dwUserID; //用户ID uint32 dwGameID; //用户ID char szHeadHttp[LEN_USER_NOTE]; //登录IP char szNickName[LEN_NICKNAME]; //用户昵称 char szUnionName[LEN_GROUP_NAME]; //公会名称; uint16 wProvideUser; //供应用户 uint16 wBankerUser; //庄家用户 uint8 cbChiHuCard; //供应扑克 uint32 dwChiHuKind; //胡牌类型 uint32 dwChiHuRight; //胡牌类型 //积分信息 SCORE lGameScore; //游戏积分 //牌信息 uint8 cbCardCount; //牌数目 uint8 cbCardData[MAX_COUNT]; //牌数据 //组合牌 uint8 cbWeaveItemCount; //组合数目 tagWeaveItem WeaveItemArray[MAX_WEAVE]; //组合牌 }; /////////////////////////////// 游戏内使用 /////////////////////////////////////////// enum GAME_SOUND { //语音类型定义 ST_FangYan = 0, //南京话 ST_PuTongHua = 1, //普通话 //背景音效定义 EF_BackGround_Normal = 0, //正常音效 EF_BackGround_TingPai = 1, //听牌音效 EF_BackGround_BiXiaHu = 2, //比下胡音效 //公共音效类型 EF_GameStart = 100, //开始 EF_ShootDice = 101, //骰子 EF_TakeCard = 102, //发牌 EF_SendCard = 103, //摸牌 EF_GameWarn = 104, //警笛 EF_OutCard = 105, //出牌 EF_GameEnd = 106, //结束 EF_GameWin = 107, //胜利 EF_GameLose = 108, //失败 EF_GameHuang = 109, //荒庄 EF_GameRun = 110, //逃跑 EF_HitChime = 111, //敲击编钟 //声音文件类型 SD_BuHua = 200, //补花 SD_OutCard = 201, //出牌 SD_ChiCard = 202, //吃牌 SD_PengCard = 203, //碰牌 SD_GangCard = 204, //杠牌 SD_TingCard = 205, //听牌 SD_TiaoZhan = 206, //挑战 SD_HuCard = 207, //胡牌 SD_ZiMoHu = 208, //自摸 SD_QuYu = 209, //趣语 }; // 动画类型 enum ANI_TYPE { AT_DICE = 0, // 骰子动画 AT_DISCARD, // 丢弃动画 AT_OUTCARD, // 打牌动画 AT_CHI, // 吃动画 AT_PENG, // 碰动画 AT_GANG, // 杠动画 AT_TING, // 听动画 AT_HU, // 胡动画 AT_ZIMO, // 自摸动画 AT_COUNT, // 动画数量 }; // 游戏解散结构 struct CMD_S_Private_End_Info { bool aryActiveStatus[GAME_PLAYER]; //玩家状态; uint8 cbAllGangCounts[GAME_PLAYER]; //杠次数 uint8 cbZiMoCout[GAME_PLAYER]; //自摸次数 uint8 cbDianPaoCout[GAME_PLAYER]; //点炮次数 SCORE lAllScore[GAME_PLAYER]; //总成绩 SCORE lMaxScore[GAME_PLAYER]; //最高得分 void StreamValue(DataStream& kData, bool bSend) { if (bSend) { kData.pushValue(this, sizeof(CMD_S_Private_End_Info)); } else { kData.popValue(this, sizeof(CMD_S_Private_End_Info)); } } }; }; ////////////////////////////////////////////////////////////////////////////////////////////////// //extern void MyLog( char *szLog, ... ); #pragma pack() #endif