#ifndef CMD_GAME_SERVER_HEAD_FILE #define CMD_GAME_SERVER_HEAD_FILE //#include "Stdafx.h" #include #include "../GlobalDef/Define.h" #include "../GlobalDef/Struct.h" #include "../GlobalDef/Property.h" #ifndef BUFFERLEN #define BUFFERLEN 3000 #endif #pragma pack(1) ////////////////////////////////////////////////////////////////////////////////// //登录命令 #define MDM_GR_LOGON 1 //登录信息 //登录模式 #define SUB_GR_LOGON_USERID 1 //I D 登录 #define SUB_GR_LOGON_MOBILE 2 //手机登录 #define SUB_GR_LOGON_ACCOUNTS 3 //帐户登录 //登录结果 //#define SUB_GR_LOGON_SUCCESS 100 //登录成功 #define SUB_M_LOGON_FAILURE 101 //登录失败 #define SUB_GR_LOGON_FINISH 102 //登录完成 //升级提示 #define SUB_GR_UPDATE_NOTIFY 200 //升级提示 ////////////////////////////////////////////////////////////////////////////////// #ifdef _UNICODE #define TSTRINGLEN(pBuffer) wcslen(pBuffer) #else #define TSTRINGLEN(pBuffer) strlen(pBuffer) #endif class mylog { public: //格式 //static bool ToSet(TCHAR* pBuffer, int iLen, DWORD dUserID); static void OutputString(TCHAR* pBuffer, int iTableID); }; struct TagUpData { DWORD iTableCount;//桌子总数 DWORD iPlayingTableCount;//游戏中桌子 DWORD iFreeTableCount;//空闲桌子 DWORD iDownTableCount;//集体掉线桌子 DWORD iLoginBody;//登录总人数 DWORD iDownBody;//掉线人数 DWORD iDaTingBody;//在大厅人数 DWORD iLinkBody;//连接人数 DWORD iSocketNum;//Socket总数 DWORD iErrQ;//协议非法请求拒绝数 DWORD iLJErrQ;//逻辑非法请求数 DWORD iFreeCon;//空连接 DWORD iQNum;//正常业务请求数 DWORD dLoginQ;//登录请求数 DWORD dLoginQOK;//完整登录请求成功数 DWORD dLoginDuanXianOK;//断线重连请求成功数 DWORD dChongZhi;//充值请求数 DWORD dChongZhiOK;//充值请求成功数 DWORD dCreateTable;//创建桌子失败数 DWORD dAddRoom;//加入房间成功数 DWORD dAddRoomChange;//加入房间切换节点数 int iTableNum;//私有房间数量 int PrivteTable[500];//本服务器上的私有房间号 }; //用户积分 struct tagUserScore { //积分信息 DWORD lScore; //用户分数 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(tagUserScore) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("
【子项积分信息】用户分数:%d.") , lScore); #else _snprintf(pBuffer, iLen, TEXT("
【子项积分信息】用户分数:%d.") , lScore); #endif ////mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("积分信息"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //I D 登录 struct CMD_GR_LogonUserID { //版本信息 DWORD dwPlazaVersion; //广场版本 DWORD dwFrameVersion; //框架版本 DWORD dwProcessVersion; //进程版本 //登录信息 DWORD dwUserID; //用户 I D TCHAR szPassword[LEN_MD5]; //登录密码 TCHAR szServerPasswd[LEN_PASSWORD]; //房间密码 TCHAR szMachineID[LEN_MACHINE_ID]; //机器序列 WORD wKindID; //类型索引 public: //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen) { return false; } bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("I D 登录"); if (TSTRINGLEN(szTemp)>iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } }; //手机登录 struct CMD_GR_LogonMobile { //版本信息 WORD wGameID; //游戏标识 DWORD dwProcessVersion; //进程版本 //桌子区域 BYTE cbDeviceType; //设备类型 WORD wBehaviorFlags; //行为标识 WORD wPageTableCount; //分页桌数 //登录信息 DWORD dwUserID; //用户 I D TCHAR szPassword[LEN_MD5]; //登录密码 TCHAR szMachineID[LEN_MACHINE_ID]; //机器标识 DWORD dX; //精度 DWORD dY; //维度 TCHAR szChengShi[20]; //城市 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("手机登录->游戏标识:%d,进程版本:%d,设备类型:%d,行为标识:%d,分页桌数:%d,用户 I D:%d,登录密码:%s,版本号:%s,经度%d,维度%d,所在城市%s.") , wGameID, dwProcessVersion, cbDeviceType, wBehaviorFlags, wPageTableCount, dwUserID, szPassword, szMachineID,dX, dY, szChengShi); #else _snprintf(pBuffer, iLen, TEXT("手机登录->游戏标识:%d,进程版本:%d,设备类型:%d,行为标识:%d,分页桌数:%d,用户 I D:%d,登录密码:%s,机器标识:%s.") , wGameID, dwProcessVersion, cbDeviceType, wBehaviorFlags, wPageTableCount, dwUserID, szPassword, szMachineID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("手机登录"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //帐号登录 struct CMD_GR_LogonAccounts { //版本信息 DWORD dwPlazaVersion; //广场版本 DWORD dwFrameVersion; //框架版本 DWORD dwProcessVersion; //进程版本 //登录信息 TCHAR szPassword[LEN_MD5]; //登录密码 TCHAR szAccounts[LEN_ACCOUNTS]; //登录帐号 TCHAR szMachineID[LEN_MACHINE_ID]; //机器序列 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_LogonAccounts) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("帐号登录->广场版本:%d,框架版本:%d,进程版本:%d,登录密码:%s,登录帐号:%s,机器序列:%s.") , dwProcessVersion, dwFrameVersion, dwProcessVersion, szPassword, szAccounts, szMachineID); #else _snprintf(pBuffer, iLen, TEXT("帐号登录->广场版本:%d,框架版本:%d,进程版本:%d,登录密码:%s,登录帐号:%s,机器序列:%s.") , dwProcessVersion, dwFrameVersion, dwProcessVersion, szPassword, szAccounts, szMachineID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("帐号登录"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //登录成功 struct CMD_GR_LogonSuccess { DWORD dwUserRight; //用户权限 DWORD dwMasterRight; //管理权限 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_LogonSuccess) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("登录成功->用户权限:%d,管理权限:%d.") , dwUserRight, dwMasterRight); #else _snprintf(pBuffer, iLen, TEXT("登录成功->用户权限:%d,管理权限:%d.") , dwUserRight, dwMasterRight); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("登录成功"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //登录失败 struct CMD_GR_LogonFailure { LONG lErrorCode; //错误代码 TCHAR szDescribeString[128]; //描述消息 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_LogonSuccess) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("登录失败->错误代码:%d,描述消息:%s.") , lErrorCode, szDescribeString); #else _snprintf(pBuffer, iLen, TEXT("登录失败->错误代码:%d,描述消息:%s.") , lErrorCode, szDescribeString); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("登录失败"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //登录完成 struct CMD_GR_LogonFinish { bool bGuideTask; //引领任务 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_LogonFinish) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("登录完成->引领任务:%s.") , bGuideTask ? _T("是") : _T("否")); #else _snprintf(pBuffer, iLen, TEXT("登录完成->引领任务:%s.") , bGuideTask ? _T("是") : _T("否")); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("登录完成"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //升级提示 struct CMD_GR_UpdateNotify { //升级标志 BYTE cbMustUpdatePlaza; //强行升级 BYTE cbMustUpdateClient; //强行升级 BYTE cbAdviceUpdateClient; //建议升级 //当前版本 DWORD dwCurrentPlazaVersion; //当前版本 DWORD dwCurrentFrameVersion; //当前版本 DWORD dwCurrentClientVersion; //当前版本 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UpdateNotify) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("升级提示->强行升级:%d,强行升级:%d,建议升级:%d,当前版本:%d,当前版本:%d,当前版本:%d.") , cbMustUpdatePlaza, cbMustUpdateClient, cbAdviceUpdateClient, dwCurrentPlazaVersion, dwCurrentFrameVersion, dwCurrentClientVersion); #else _snprintf(pBuffer, iLen, TEXT("升级提示->强行升级:%d,强行升级:%d,建议升级:%d,当前版本:%d,当前版本:%d,当前版本:%d.") , cbMustUpdatePlaza, cbMustUpdateClient, cbAdviceUpdateClient, dwCurrentPlazaVersion, dwCurrentFrameVersion, dwCurrentClientVersion); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("升级提示"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; ////////////////////////////////////////////////////////////////////////////////// //配置命令 #define MDM_GR_CONFIG 2 //配置信息 #define SUB_GR_CONFIG_COLUMN 100 //列表配置 #define SUB_GR_CONFIG_SERVER 101 //房间配置 #define SUB_GR_CONFIG_PROPERTY 102 //道具配置 #define SUB_GR_CONFIG_FINISH 103 //配置完成 #define SUB_GR_CONFIG_USER_RIGHT 104 //玩家权限 ////////////////////////////////////////////////////////////////////////////////// //列表子项 struct tagColumnItem { BYTE cbColumnWidth; //列表宽度 BYTE cbDataDescribe; //字段类型 TCHAR szColumnName[16]; //列表名字 }; //列表配置 struct CMD_GR_ConfigColumn { BYTE cbColumnCount; //列表数目 tagColumnItem ColumnItem[MAX_COLUMN]; //列表描述 }; //房间配置 struct CMD_GR_ConfigServer { //房间属性 WORD wTableCount; //桌子数目 WORD wChairCount; //椅子数目 //房间配置 WORD wServerType; //房间类型 DWORD dwServerRule; //房间规则 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_ConfigServer) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("房间配置->桌子数目:%d,椅子数目:%d,房间类型:%d,房间规则:%d.") , wTableCount, wChairCount, wServerType, dwServerRule); #else _snprintf(pBuffer, iLen, TEXT("房间配置->桌子数目:%d,椅子数目:%d,房间类型:%d,房间规则:%d.") , wTableCount, wChairCount, wServerType, dwServerRule); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("房间配置"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int iTalbeID, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, iTalbeID); } } }; //道具配置 struct CMD_GR_ConfigProperty { BYTE cbPropertyCount; //道具数目 tagPropertyInfo PropertyInfo[MAX_PROPERTY]; //道具描述 }; //玩家权限 struct CMD_GR_ConfigUserRight { DWORD dwUserRight; //玩家权限 }; ////////////////////////////////////////////////////////////////////////////////// //用户命令 #define MDM_GR_USER 3 //用户信息 //用户动作 #define SUB_GR_USER_RULE 1 //用户规则 #define SUB_GR_USER_LOOKON 2 //旁观请求 #define SUB_GR_USER_SITDOWN 3 //坐下请求 #define SUB_GR_USER_STANDUP 4 //起立请求 //#define SUB_GR_USER_INVITE 5 //用户邀请 //#define SUB_GR_USER_INVITE_REQ 6 //邀请请求 //#define SUB_GR_USER_REPULSE_SIT 7 //拒绝玩家坐下 //#define SUB_GR_USER_KICK_USER 8 //踢出用户 #define SUB_GR_USER_INFO_REQ 9 //请求用户信息 #define SUB_GR_USER_CHAIR_REQ 10 //请求更换位置 #define SUB_GR_USER_CHAIR_INFO_REQ 11 //请求椅子用户信息 #define SUB_GR_USER_WAIT_DISTRIBUTE 12 //等待分配 #define SUB_GR_USER_GET_GAME_SCORE_RECORD_LIST 13 //获取牌桌游戏数据简要列表 #define SUB_GR_USER_GET_GAME_SCORE_RECORD_DETAIL_INFO 14 #define SUB_GR_USER_GET_GAME_SCORE_RECORD_REPLAY 15 //获取回放记录 #define SUB_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST 16 //获取临时积分排行榜 #define SUB_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST_RESULT 17 //获取临时积分排行榜返回 #define SUB_GR_USER_CREATE 19 //创建房间 #define SUB_GR_USER_ADD 20 //加入房间 #define SUB_GR_USER_SEAT 21 //玩家坐下请求 #define SUB_GR_USER_SEAT_ACK 22 //玩家坐下请求应答 #define SUB_GR_USER_MYROOM_UPDATA 23 //玩家拥有的房间状态更新 #define SUB_GR_USER_GET_DINGDAN_NEW 37 //请求订单新方式 #define SUB_GR_USER_GET_DINGDAN 24 //请求订单 #define SUB_GR_USER_GET_DINGDANACK 25 //请求订单 #define SUB_GR_USER_GET_DINGDANLIST 26 //获取已支付订单列表 #define SUB_GR_USER_GET_DINGDANLISTACK 27 //获取已支付订单列表 #define SUB_GR_USER_GET_BANGDING 28 //绑定代理 #define SUB_GR_USER_GET_BANGDINGACK 29 //绑定代理返回 #define SUB_GR_USER_GET_BEAN 30 //请求更新元宝 #define SUB_GR_USER_GET_BEAN_RESULT 31 //请求更新元宝 数据库应答 #define SUB_GR_USER_GETADD_INFO 32 //获取加入房间信息 #define SUB_GR_USER_GETADD_INFO_ACK 33 //获取加入房间信息应答 #define SUB_GR_USER_DAILI_INFO 34 //获取绑定代理信息 #define SUB_GR_USER_DAILI_INFO_ACK 35 //获取绑定代理信息 #define SUB_GR_USER_GET_VERIF_CODE 36 //获取手机验证码 #define SUB_GR_USER_CHECK_IPHONE 38 //绑定手机号写入 #define SUB_GR_USER_CHECK_IPHONE_QUERY 39 //绑定手机号查询 #define SUB_GR_USER_CHECK_NAME 40 //实名认证写入 #define SUB_GR_USER_CHECK_NAME_QUERY 41 //实名认证查询 #define SUB_GR_USER_SHRAE_AWARD_BEAN 42 //分享奖励钻石请求 #define SUB_GR_USER_SHRAE_AWARD_BEAN_RESULT 43 //分享奖励钻石结果 #define SUB_GR_USER_SHRAE_INFO 44 //用户当天分享奖励信息请求 #define SUB_GR_USER_SHRAE_INFO_RESULT 45 //用户当天分享奖励信息结果 #define SUB_GR_USER_TOP_WIN_LIST 46 ///+++胜局榜 #define SUB_GR_USER_TOP_WIN_LIST_ACK 47 ///+++胜局榜应答 #define SUB_GR_USER_RELIEF_NOTIFY 48 ///+++破产补助通知信息 #define SUB_GR_USER_GET_RELIEF 49 ///+++领取破产补助 #define SUB_GR_USER_GET_RELIEF_ACK 50 ///+++领取破产补助应答 #define SUB_GR_USER_PRIVATE_GAME_SVR 51 ///+++拉取好友房服务器 #define SUB_GR_USER_PRIVATE_GAME_SVR_ACK 52 ///+++拉取好友房服务器应答 #define SUB_GR_USER_GET_AGENT_YELLOW_CARD 53 ///+++获取代理“黄牌”信息(只作透传) #define SUB_GR_USER_GET_AGENT_YELLOW_CARD_ACK 54 #define SUB_GR_USER_UNBIND_YELLOW_CARD_AGENT 55 ///+++解绑黄牌代理(只作透传) #define SUB_GR_USER_UNBIND_YELLOW_CARD_AGENT_ACK 56 #define SUB_GR_USER_APPLY_UNTIE_AGENT 57 ///+++自主申请解绑(只作透传) #define SUB_GR_USER_APPLY_UNTIE_AGENT_ACK 58 //解绑应答 #define SUB_GR_USER_GET_UNTIE_AGENT_INFO 59 ///用户获得代理解绑相关信息 #define SUB_GR_USER_GET_UNTIE_AGENT_INFO_ACK 60 //用户获得代理解绑相关信息应答 #define SUB_GR_USER_CHECK_XIANLIAO 61 //闲聊 //用户状态 #define SUB_GR_USER_ENTER 100 //用户进入 #define SUB_GR_USER_SCORE 101 //用户分数 #define SUB_GR_USER_STATUS 102 //用户状态 #define SUB_GR_REQUEST_FAILURE 103 //请求失败 #define SUB_GR_USER_BEAN 104 //用户游戏豆 #define SUB_GR_USER_PRIVATE_TABLE_ID 105 //通知私有房间ID #define SUB_GR_LOCK_BEAN 106 //元宝锁定 #define SUB_GR_UNLOCK_BEAN 107 //元宝解锁 #define SUB_GR_USER_ADDCREATE_TABLE_ID 108 //创建加入房间应答 #define SUB_GR_USER_ADDCREATE_TABLE_ALL 109 //通知创建的所有房间列表 #define SUB_GR_DELETE_PRIVATE_TABLE_REQ 110 //请求删除私有房间 #define SUB_GR_DELETE_PRIVATE_TABLE_RESP 111 //请求删除私有房间响应消息(同意?不同意?) #define SUB_GR_DELETE_PRIVATE_TABLE_RESULT 112 //请求删除私有房间de结果消息(成功?失败?) #define SUB_GR_USER_QINGQIUJIESAN 113 //游戏未开始前,房主请求解散。 ///+++福利信息 #define SUB_GP_WELFARE_INFO 186 //福利信息 #define SUB_GP_WELFARE_INFO_ACK 187 //福利信息结果 #define SUB_GP_WENLIN_SHUFFLE 189 //洗牌动画 获取砖石数据 传空值给服务器 #define SUB_GP_WENLIN_SHUFFLE_ACK 190 //洗牌动画 获取砖石数据应答 //聊天命令 #define SUB_GR_USER_CHAT 201 //聊天消息 #define SUB_GR_USER_EXPRESSION 202 //表情消息 #define SUB_GR_WISPER_CHAT 203 //私聊消息 #define SUB_GR_WISPER_EXPRESSION 204 //私聊表情 #define SUB_GR_COLLOQUY_CHAT 205 //会话消息 #define SUB_GR_COLLOQUY_EXPRESSION 206 //会话表情 ///+++签到服务 #define SUB_GP_CHECKIN_REWARD2 180 //签到奖品 #define SUB_GP_CHECKIN_REWARD2_ACK 181 //签到奖品结果 #define SUB_GP_CHECKIN_INFO2 182 //签到信息 #define SUB_GP_CHECKIN_INFO2_ACK 183 //签到信息结果 #define SUB_GP_CHECKIN_DONE2 184 //执行签到 #define SUB_GP_CHECKIN_DONE2_ACK 185 //签到结果 //道具命令 //#define SUB_GR_PROPERTY_BUY 300 //购买道具 //#define SUB_GR_PROPERTY_SUCCESS 301 //道具成功 //#define SUB_GR_PROPERTY_FAILURE 302 //道具失败 #define SUB_GR_PROPERTY_MESSAGE 303 //道具消息 #define SUB_GR_PROPERTY_EFFECT 304 //道具效应 #define SUB_GR_PROPERTY_TRUMPET 305 //喇叭消息 //proto新加协议 #define SUB_GR_USER_GET_GAME_SCORE_RECORD_LISTACK 400 //获取牌桌游戏数据简要列表返回 #define SUB_GR_USER_GET_GAME_SCORE_RECORD_REPLAYACK 401 //获取回放记录回复 //玩家已开房房间信息 struct JN_GR_RoomListEx { DWORD dwUserID; //拥有人 DWORD dwServerID; //服务器ID DWORD dwRoomNumber; //私有房间号 DWORD dwInsert_UpData_Del; //添加更新删除 0 , 1, 2 DWORD dwDiFen; //底分 DWORD dwJuShu; //局数 DWORD dwReadyBody; //已有人数 DWORD dwBody; //总人数 BYTE bWanFa; //玩法 TCHAR szIp[20]; //IP byte bDuoLai; //多癞子可平胡,0可以 1不可以 WORD wFengDing; //封顶值 byte tmp1; //备用字段 byte tmp2; //备用字段 byte tmp3; //备用字段 byte tmp4; //备用字段 byte tmp5; //备用字段 int tmp6[4]; //备用 WORD wPort; //端口 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(JN_GR_RoomListEx) * 16 > iLen) return false; TCHAR szTemp[16]; ZeroMemory(szTemp, 16 * sizeof(TCHAR)); switch (dwInsert_UpData_Del) { case 0: StringCchCat(szTemp, 32, _TEXT("添加")); break; case 1: StringCchCat(szTemp, 32, _TEXT("更新")); break; case 2: StringCchCat(szTemp, 32, _TEXT("删除")); break; default: break; } #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("玩家已开房房间信息->拥有人:%d,服务器ID:%d,私有房间号:%d,添加更新删除:%s,底分:%d,局数:%d,已有人数:%d,总人数:%d,玩法:%d,bDuoLai=%d,wFengDing=%d") , dwUserID, dwServerID, dwRoomNumber, szTemp, dwDiFen, dwJuShu, dwReadyBody, dwBody, bWanFa, bDuoLai, wFengDing); #else _snwprintf(pBuffer, iLen, TEXT("玩家已开房房间信息->拥有人:%d,服务器ID:%d,私有房间号:%d,添加更新删除:%s,底分:%d,局数:%d,已有人数:%d,总人数:%d,玩法:%d,bDuoLai=%d,wFengDing=%d") , dwUserID, dwServerID, dwRoomNumber, szTemp, dwDiFen, dwJuShu, dwReadyBody, dwBody, bWanFa, bDuoLai, wFengDing); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("玩家已开房房间信息"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //玩家已开房房间信息 struct JN_GR_RoomListExGig { DWORD dwUserID; //拥有人 DWORD dwServerID; //服务器ID DWORD dwRoomNumber; //私有房间号 DWORD dwInsert_UpData_Del; //添加更新删除 0 , 1, 2 DWORD dwDiFen; //底分 DWORD dwJuShu; //局数 DWORD dwReadyBody; //已有人数 DWORD dwBody; //总人数 BYTE bWanFa; //玩法 TCHAR szIp[32]; //IP WORD wPort; //端口 BYTE bRoomCreatePay; //是否为房主支付 BYTE bFanGua; //是否反作弊 1 是 0 否 TCHAR szName[12]; //昵称 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(JN_GR_RoomListEx) * 16 > iLen) return false; TCHAR szTemp[16]; ZeroMemory(szTemp, 16 * sizeof(TCHAR)); switch (dwInsert_UpData_Del) { case 0: StringCchCat(szTemp, 32, _TEXT("添加")); break; case 1: StringCchCat(szTemp, 32, _TEXT("更新")); break; case 2: StringCchCat(szTemp, 32, _TEXT("删除")); break; default: break; } #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("玩家已开房房间信息->拥有人:%d,服务器ID:%d,私有房间号:%d,添加更新删除:%s,底分:%d,局数:%d,已有人数:%d,总人数:%d,玩法:%d.") , dwUserID, dwServerID, dwRoomNumber, szTemp, dwDiFen, dwJuShu, dwReadyBody, dwBody, bWanFa); #else _snprintf(pBuffer, iLen, TEXT("玩家已开房房间信息->拥有人:%d,服务器ID:%d,私有房间号:%d,添加更新删除:%s,底分:%d,局数:%d,已有人数:%d,总人数:%d,玩法:%d.") , dwUserID, dwServerID, dwRoomNumber, szTemp, dwDiFen, dwJuShu, dwReadyBody, dwBody, bWanFa); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("玩家已开房房间信息"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; ////////////////////////////////////////////////////////////////////////////////// //玩家已开房房间列表 struct JN_GR_RoomListGroupEx { JN_GR_RoomListExGig jgrDate[10]; DWORD Num;//总共开房数 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(JN_GR_RoomListGroupEx) * 16 > iLen) return false; TCHAR szBuffer2[BUFFERLEN]; ZeroMemory(szBuffer2, BUFFERLEN * sizeof(TCHAR)); int iA = Num >10 ? 10: Num; for (INT i = 0; i < iA; i++) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); jgrDate[i].ToString(szBuffer, BUFFERLEN, dUserID); StringCchCat(szBuffer2, BUFFERLEN, szBuffer); } #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("玩家已开房房间列表->总共开房数:%d,具体房间信息:\r\n[%s].") , Num, szBuffer2); #else _snprintf(pBuffer, iLen, TEXT("玩家已开房房间列表->总共开房数:%d,具体房间信息:\r\n[%s].") , Num, szBuffer2); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("玩家已开房房间列表"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //用户信息 struct tagMobileUserInfoHead { //用户属性 DWORD dwGameID; //游戏 I D DWORD dwUserID; //用户 I D //头像信息 WORD wFaceID; //头像索引 DWORD dwCustomID; //自定标识 //用户属性 BYTE cbGender; //用户性别 BYTE cbMemberOrder; //会员等级 //用户状态 WORD wTableID; //桌子索引 WORD wChairID; //椅子索引 BYTE cbUserStatus; //用户状态 //积分信息 SCORE lScore; //用户分数 //游戏信息 DWORD dwWinCount; //胜利盘数 DWORD dwLostCount; //失败盘数 DWORD dwDrawCount; //和局盘数 DWORD dwFleeCount; //逃跑盘数 DWORD dwExperience; //用户经验 TCHAR szNickname[LEN_NICKNAME]; //三方头像地址 TCHAR szHeadUrl[LEN_HEAD_URL]; //三方头像地址 DWORD dwClientAddr; //IP地址 int iXinYong; //该用户信用值 TCHAR RetTime[11]; //注册时间 TCHAR ChengShi[20]; //城市 LONGLONG llDingWeiX; //该玩家定位数据 LONGLONG llDingWeiY; //该玩家定位数据 int iJiePing; //反作场弊房,截屏次数。 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { //if (sizeof(tagMobileUserInfoHead) * 10 > iLen) return false; TCHAR szTemp[32]; ZeroMemory(szTemp, 32 * sizeof(TCHAR)); switch (cbUserStatus) { case US_NULL: StringCchCat(szTemp, 32, _TEXT("没有状态")); break; case US_FREE: StringCchCat(szTemp, 32, _TEXT("大厅状态")); break; case US_SIT: StringCchCat(szTemp, 32, _TEXT("坐下状态")); break; case US_READY: StringCchCat(szTemp, 32, _TEXT("准备状态")); break; case US_LOOKON: StringCchCat(szTemp, 32, _TEXT("旁观状态")); break; case US_PLAYING: StringCchCat(szTemp, 32, _TEXT("游戏状态")); break; case US_OFFLINE: StringCchCat(szTemp, 32, _TEXT("断线状态")); break; default: break; } /*TCHAR strIP[64]; ZeroMemory(strIP, 64*sizeof(TCHAR)); WORD add1, add2, add3, add4; add1 = (WORD)(dwClientAddr & 255); add2 = (WORD)((dwClientAddr >> 8) & 255); add3 = (WORD)((dwClientAddr >> 16) & 255); add4 = (WORD)((dwClientAddr >> 24) & 255);*/ #ifdef _UNICODE /*_snwprintf(strIP, 64, _T("%d.%d.%d.%d"), add1, add2, add3, add4);*/ _snwprintf(pBuffer, iLen, TEXT("
【用户信息】游戏ID:%d,用户ID:%d,头像索引:%d,自定标识:%d,用户性别:%d,会员等级:%d,桌子索引:%d\ ,椅子索引:%d,用户状态:%s,用户分数:%lld,胜利盘数:%d,失败盘数:%d,和局盘数:%d,逃跑盘数:%d,用户经验:%d,三方昵称:%s") , dwGameID, dwUserID, wFaceID, dwCustomID, cbGender, cbMemberOrder, wTableID , wChairID, szTemp, lScore, dwWinCount, dwLostCount, dwDrawCount, dwFleeCount, dwExperience , szNickname); #else /*_snprintf(strIP, 64, _T("%d.%d.%d.%d"), add1, add2, add3, add4);*/ _snprintf(pBuffer, iLen, TEXT("
【用户信息】游戏ID:%d,用户ID:%d,头像索引:%d,自定标识:%d,用户性别:%d,会员等级:%d,桌子索引:%d\ ,椅子索引:%d,用户状态:%s,用户分数:%lld,胜利盘数:%d,失败盘数:%d,和局盘数:%d,逃跑盘数:%d,用户经验:%d,三方昵称:%s,三方头像:%s,IP地址:%s.") , dwGameID, dwUserID, wFaceID, dwCustomID, cbGender, cbMemberOrder, wTableID, wChairID, szTemp, lScore, dwWinCount , dwLostCount, dwDrawCount, dwFleeCount, dwExperience, szNickname, szHeadUrl, strIP); #endif ////mylog::ToSet(pBuffer, iLen, dUserID); return true; } //参数转成字符串 bool ToStringEx(TCHAR* pBuffer, int iLen, DWORD dUserID) { //if (sizeof(tagMobileUserInfoHead) * 10 > iLen) return false; TCHAR szTemp[32]; ZeroMemory(szTemp, 32 * sizeof(TCHAR)); switch (cbUserStatus) { case US_NULL: StringCchCat(szTemp, 32, _TEXT("没有状态")); break; case US_FREE: StringCchCat(szTemp, 32, _TEXT("大厅状态")); break; case US_SIT: StringCchCat(szTemp, 32, _TEXT("坐下状态")); break; case US_READY: StringCchCat(szTemp, 32, _TEXT("准备状态")); break; case US_LOOKON: StringCchCat(szTemp, 32, _TEXT("旁观状态")); break; case US_PLAYING: StringCchCat(szTemp, 32, _TEXT("游戏状态")); break; case US_OFFLINE: StringCchCat(szTemp, 32, _TEXT("断线状态")); break; default: break; } /*TCHAR strIP[64]; ZeroMemory(strIP, 64 * sizeof(TCHAR)); WORD add1, add2, add3, add4; add1 = (WORD)(dwClientAddr & 255); add2 = (WORD)((dwClientAddr >> 8) & 255); add3 = (WORD)((dwClientAddr >> 16) & 255); add4 = (WORD)((dwClientAddr >> 24) & 255);*/ #ifdef _UNICODE /*_snwprintf(strIP, 64, _T("%d.%d.%d.%d"), add1, add2, add3, add4);*/ _snwprintf(pBuffer, iLen, TEXT("
【用户进入】游戏ID:%d,用户ID:%d,头像索引:%d,自定标识:%d,用户性别:%d,会员等级:%d,桌子索引:%d,椅子索引:%d,用户状态:%s,用户分数:%lld,胜利盘数:%d,失败盘数:%d,和局盘数:%d,逃跑盘数:%d,用户经验:%d") , dwGameID, dwUserID, wFaceID, dwCustomID, cbGender, cbMemberOrder, wTableID, wChairID, szTemp, lScore, dwWinCount, dwLostCount, dwDrawCount, dwFleeCount, dwExperience); //_snwprintf(pBuffer, iLen, TEXT("
【用户进入】游戏ID:%d,用户ID:%d,头像索引:%d,自定标识:%d,用户性别:%d,会员等级:%d,桌子索引:%d\ // ,椅子索引:%d,用户状态:%s,用户分数:%ld,胜利盘数:%d,失败盘数:%d,和局盘数:%d,逃跑盘数:%d,用户经验:%d,三方昵称:%s") // , dwGameID, dwUserID, wFaceID, dwCustomID, cbGender, cbMemberOrder, wTableID // , wChairID, szTemp, lScore, dwWinCount, dwLostCount, dwDrawCount, dwFleeCount, dwExperience // , szNickname); #else /*_snprintf(strIP, 64, _T("%d.%d.%d.%d"), add1, add2, add3, add4);*/ _snprintf(pBuffer, iLen, TEXT("
【用户进入】游戏ID:%d,用户ID:%d,头像索引:%d,自定标识:%d,用户性别:%d,会员等级:%d,桌子索引:%d\ ,椅子索引:%d,用户状态:%s,用户分数:%d,胜利盘数:%d,失败盘数:%d,和局盘数:%d,逃跑盘数:%d,用户经验:%d,三方昵称:%s,三方头像:%s,IP地址:%s.") , dwGameID, dwUserID, wFaceID, dwCustomID, cbGender, cbMemberOrder, wTableID, wChairID, szTemp, lScore, dwWinCount , dwLostCount, dwDrawCount, dwFleeCount, dwExperience, szNickname, szHeadUrl, strIP); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户进入"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN*3]; ZeroMemory(szBuffer, BUFFERLEN *3 * sizeof(TCHAR)); if (ToStringEx(szBuffer, BUFFERLEN * 3, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; ////////////////////////////////////////////////////////////////////////////////// struct tagUserRankListInfo { DWORD dwUserID; TCHAR szNickName[LEN_NICKNAME]; int lScore; WORD wWinCount; //胜利场数 WORD wLostCount; //失败场数 TCHAR szHeadUrl[LEN_HEAD_URL]; }; //获取临时积分排行榜返回 struct CMD_GR_USER_GET_GAME_TEMP_SCORE_RANKLIST_RESULT { WORD wRankListCount; //排行榜数[] char ranklist[0]; //排行榜数据 //tagUserRankListInfo ranklist; //私有房间号 }; //通知私有房间ID struct CMD_GR_USER_PRIVATE_TABLE_ID { TCHAR szPrivateTableID[LEN_PRIVATE_TABLE_ID]; //私有房间号 }; //旁观请求 struct CMD_GR_UserLookon { WORD wTableID; //桌子位置 TCHAR szPrivteTableID[11]; //私人桌子号码 }; struct tagGameConfig { WORD wSubGameID; //子游戏类型(0一脚赖油,1无赖到底,2半赖,3血流) DWORD wPlayRule; //底分 WORD wMaxFanRule; //房费(0房间创建者,1打牌者平摊) WORD wMaxScore; //IP限制(0限制,1不限制) WORD wPlayCountRule; //一次玩的局数(8局?16局?) WORD wHadPlayCount; //桌子号 WORD zmExtraRule; //是否是房主 WORD dghRule; // TCHAR sPrivateTableID[7]; byte bDuoLai; //多癞子可平胡,1 不能放冲 0 能放冲胡吧----推倒胡 用这个值标示 是否可以放冲胡 WORD wFengDing; //封顶值 byte tmp1; //备用字段 byte tmp2; //备用字段 byte tmp3; //备用字段 byte tmp4; //备用字段 byte tmp5; //备用字段 }; //创建进入房间 struct CMD_GR_UserSitDown { WORD WXianZhi; //限制元宝 WORD Wsocket; //椅子位置 TCHAR szPassword[LEN_PASSWORD]; // byte cbCreateTable; //是否新建一个桌子 TCHAR szPrivateTableID[7]; //私有桌子号 byte bDuoLai; //多癞子可平胡,0可以 1不可以 WORD wFengDing; //封顶值 byte tableType; //备用字段 1表示俱乐部房间 int clubID; //备用字段 tagGameConfig TableConfig[20]; //创建私有桌子时的配置信息 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserSitDown) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("创建进入房间->限制元宝:%d,椅子位置:%d,是否新建一个桌子:%d,私有桌子号:%s.") , WXianZhi, Wsocket, cbCreateTable, szPrivateTableID); #else _snprintf(pBuffer, iLen, TEXT("创建进入房间->限制元宝:%d,椅子位置:%d,是否新建一个桌子:%d,私有桌子号:%s.") , WXianZhi, Wsocket, cbCreateTable, szPrivateTableID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("创建进入房间"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //创建进入房间 struct CMD_GR_UserSitDownEx { DWORD dwUserID; //当前用户id BYTE cbAuto; //是否自动开房 CMD_GR_UserInfo hostInfo; //自动开房群主信息 BYTE cbWanFa; //用来表示俱乐部自动开房玩法0,1,2 DWORD RoomID; //私有随机房间号 CMD_GR_UserSitDown data; }; struct CMD_GR_Club_Notify_ACKEX { WORD newsFalg; WORD Temp; TCHAR Message[255]; DWORD dwClubID; DWORD dwUserCount; }; //创建进入房间2 struct CMD_GR_UserSitDownEx2 { DWORD dwUesrID; //触发自动创房的当前用户 BYTE cbAuto; //是否自动开房 CMD_GR_UserInfo hostInfo; //自动开房群主信息 DWORD ReduceBeans; //减去的砖石 BYTE cbWanFa; //用来表示俱乐部自动开房玩法0,1,2 DWORD RoomID; //私有随机房间号 CMD_GR_UserSitDown data; }; //获取私人房间号信息 struct CMD_GR_GetPrivateRoomInfo { DWORD RoomID; //私有随机房间号 }; //创建进入房间 struct CMD_GR_UserJoin { WORD wTableID; //桌子位置 WORD wChairID; //椅子位置 TCHAR szPassword[LEN_PASSWORD]; // byte cbCreateTable; //是否新建一个桌子 TCHAR szPrivateTableID[7]; //私有桌子号 byte bDuoLai; //多癞子可平胡,0可以 1不可以 WORD wFengDing; //封顶值 byte tmp1; //备用字段 int tmp2; //备用字段 char TableConfig[0]; //创建私有桌子时的配置信息 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserJoin) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("加入房间->桌子位置:%d,椅子位置:%d,是否新建一个桌子:%d,私有桌子号:%s.") , wTableID, wChairID, cbCreateTable, szPrivateTableID); #else _snprintf(pBuffer, iLen, TEXT("加入房间->桌子位置:%d,椅子位置:%d,是否新建一个桌子:%d,私有桌子号:%s.") , wTableID, wChairID, cbCreateTable, szPrivateTableID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("加入进入房间"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //获取订单编号应答 struct CMD_GR_GetDingDanACK { TCHAR szClientAddr[16]; //客户端IP地址 DWORD dwGameID; DWORD dUserID; DWORD dDaiLi; //代理ID BYTE bLen; //结果长度 TCHAR szRet[2048]; //请求的结果 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { //if (sizeof(CMD_GR_GetDingDanACK) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("获取订单编号应答->结果长度:%d,请求的结果:%s."), bLen, szRet); #else _snprintf(pBuffer, iLen, TEXT("获取订单编号应答->结果长度:%d,请求的结果:%s."), bLen, szRet); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("获取订单编号应答"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //人物信息 struct CMD_GR_Info { TCHAR szName[32]; TCHAR szImgHead[256]; }; //传输闲聊所需信息 struct CDM_GR_XIANL_Info { int userID; int gScore; TCHAR szName[32]; TCHAR szImgHead[256]; }; //绑定代理信息 struct CMD_GR_DaiLiInfo { TCHAR szName[32]; //代理 TCHAR szWx[32]; //代理微信 TCHAR szQQ[32]; //代理QQ //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { //if (sizeof(CMD_GR_BangDing) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("获取代理信息->代理姓名:%s,代理微信:%s,代理QQ:%s"), szName, szWx, szQQ); #else _snprintf(pBuffer, iLen, TEXT("获取代理信息->代理姓名:%s,代理微信:%s,代理QQ:%s"), szName, szWx, szQQ); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("获取代理信息"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //绑定代理 struct CMD_GR_BangDing { DWORD dDaiLi; //代理ID //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { //if (sizeof(CMD_GR_BangDing) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("绑定代理->代理ID:%d"), dDaiLi); #else _snprintf(pBuffer, iLen, TEXT("绑定代理->代理ID:%d"), dDaiLi); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("绑定代理"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //绑定代理应答 struct CMD_GR_BangDingACK { byte bRet; //结果 byte bLen; //长度 TCHAR szText[1024]; //XML描述 也可能返回执行失败 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("绑定代理应答->结果:%s,数据长度%d,XML描述%s"), bRet == 1 ? _T("初步执行成功") : _T("初步执行失败"), bLen, szText); #else _snprintf(pBuffer, iLen, TEXT("绑定代理应答->结果:%s,数据长度%d,XML描述%s"), bRet == 1 ? _T("初步执行成功") : _T("初步执行失败"), bLen, szText); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("绑定代理应答"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //获取订单编号 struct CMD_GR_GetDingDan { BYTE dProductId; //产品ID TCHAR ProductName[20]; //产品名称 DWORD jiage; //价格,以分为单位 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("获取订单编号->产品ID:%d,产品名称:%s,价格:%d分."), dProductId, ProductName, jiage); #else _snprintf(pBuffer, iLen, TEXT("获取订单编号->产品ID:%d,产品名称:%s,价格:%d分."), dProductId, ProductName, jiage); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("获取订单编号"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //俱乐部战绩分享闲聊群 struct DBR_GR_ClubRecordXianLiao { DWORD WanFa; DWORD dwClubID; DWORD dwTableID; DWORD Jushu; DWORD DiFen; DWORD dwUserCount; CDM_GR_XIANL_Info Player[4]; }; struct CMD_GR_GetDingDanNEW { BYTE dProductId; //产品ID TCHAR ProductName[20]; //产品名称 //TCHAR ProductName[18]; //产品名称 //BYTE sdkflag; //sdk标志 //BYTE tmpflag; //备用标志 DWORD jiage; //价格,以分为单位 BYTE payflag; //支付标志 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("获取订单编号->产品ID:%d,产品名称:%s,价格:%d分."), dProductId, ProductName, jiage); #else _snprintf(pBuffer, iLen, TEXT("获取订单编号->产品ID:%d,产品名称:%s,价格:%d分."), dProductId, ProductName, jiage); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("获取订单编号"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //实名验证 struct CMD_GR_CheckName { TCHAR Name[20]; //姓名 TCHAR IDCard[18]; //身份证 TCHAR PhoneNum[12]; //电话号码 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("实名认证->姓名:%s,身份证:%s,电话:%s."), Name, IDCard, PhoneNum); #else _snprintf(pBuffer, iLen, TEXT("实名认证->姓名:%s,身份证:%s,电话:%s."), Name, IDCard, PhoneNum); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("实名认证"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //实名查询应答或者领奖地址查询应答,新加 struct CMD_GR_CheckNameEx { TCHAR Name[20]; //姓名 TCHAR IDCard[18]; //身份证 TCHAR PhoneNum[12]; //电话号码 TCHAR Addr[128]; //联系地址 }; //手机号码查重 struct CMD_GR_GetVerifCode { DWORD dUserID; TCHAR PhoneNum[12]; //电话号码 BYTE IsRepeat; //是否重复 TCHAR szDescribeString[127]; }; //手机验证码 struct CMD_GR_CheckVerifCode { TCHAR PhoneNum[12]; //电话号码 //DWORD VerfCode; //验证码 TCHAR VerfCode[7]; //验证码 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("手机绑定->验证码id:%s,电话:%s"), VerfCode, PhoneNum); #else _snwprintf(pBuffer, iLen, TEXT("手机绑定->验证码id:%s,电话:%s"), VerfCode, PhoneNum); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //手机绑定查询 struct CMD_GR_CheckIphone_Query { BYTE IsBingNum; //是否绑定号码0,没有,1绑定了 DWORD dwCurrency; //钻石数 TCHAR PhoneNum[12]; //电话号码 BYTE IsBingXianLiao; //1表示绑定闲聊 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("手机绑定查询->是否绑手机号:%d,钻石数:%d,电话:%s."), IsBingNum, dwCurrency, PhoneNum); #else _snwprintf(pBuffer, iLen, TEXT("手机绑定查询->是否绑手机号:%d,钻石数:%d,电话:%s."), IsBingNum, dwCurrency, PhoneNum); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //绑定闲聊 struct CMD_GR_CheckXiaoLiao { TCHAR OpenID[32]; //闲聊账号 }; //手机绑定 struct CMD_GR_CheckIphone { BYTE IsBingNum; //是否绑定成功 DWORD dwCurrency; //钻石数 TCHAR PhoneNum[12]; //电话号码 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("手机绑定->是否成功:%d,钻石数:%d,电话:%s"), IsBingNum, dwCurrency, PhoneNum); #else _snwprintf(pBuffer, iLen, TEXT("手机绑定->是否成功:%d,钻石数:%d,电话:%s"), IsBingNum, dwCurrency, PhoneNum); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //实名验证 struct CHECKNAMEINFO { CMD_GR_CheckName nameInfo; DWORD dUserID; }; //GET队列 struct GETDUILIEBASE { int CommendID; //命令值 CMD_GR_Info bb; //人物信息 TCHAR szUnionID[33]; //用户UNIONID DWORD dwSocketID; //请求的SOCKETID char szBuffer[6096]; //数据缓冲区 DWORD dUserID; }; //GET队列 struct GETDUILIE { //CMD_GR_GetDingDan dd; //订单请求数据 CMD_GR_GetDingDanNEW dd; CMD_GR_GetDingDanACK ack;//应答 }; //GET队列 struct GETDUILIELIST { GETDUILIEBASE dDataList[10];//命令节点 }; //选则座位请求 struct CMD_GR_UserSeat { WORD seatId; //桌子位置 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserSeat) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("选则座位请求->桌子位置:%d.") , seatId); #else _snprintf(pBuffer, iLen, TEXT("选则座位请求->桌子位置:%d.") , seatId); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("选则座位请求"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //选则座位请求 struct CMD_GR_UserSeatEx { WORD seatId; //桌子位置 DWORD x; //经纬度 DWORD y; //经纬度 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserSeat) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("选则座位请求->桌子位置:%d.") , seatId); #else _snprintf(pBuffer, iLen, TEXT("选则座位请求->桌子位置:%d.") , seatId); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("选则座位请求"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //选则座位请求应答 struct CMD_GR_UserSitAck { byte ret; //0 成功 非0 错误码 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserSitAck) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("选则座位请求应答->成功:%d.") , ret); #else _snprintf(pBuffer, iLen, TEXT("选则座位请求应答->成功:%d.") , ret); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("选则座位请求"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //支付线程 struct CMD_GR_ZFXC { WORD Num; TCHAR Data[10]; //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (Num < iLen) { #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("支付线程应答->%s.") , Data); #else _snprintf(pBuffer, iLen, TEXT("支付线程应答->%s."), Data); #endif } //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("支付线程应答"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //推荐房间 struct CMD_GR_TJROOM { byte cbRet; //创建或进入结果 0成功 1为失败 >1为失败 推荐的服务器端口 TCHAR szIp[30]; //推荐IP WORD wPort; //推荐端口 }; //创建进入房间 回复 struct CMD_GR_UserSitDownAck { byte cbRet; //创建或进入结果 0成功 1为失败 >1为失败 推荐的服务器端口 TCHAR szText[32]; //错误信息 TCHAR szPrivateTableID[7]; //私有桌子号 byte bDuoLai; //多癞子可平胡,0可以 1不可以 WORD wFengDing; //封顶值 byte tmp1; //备用字段 byte tmp2; //备用字段 byte tmp3; //备用字段 byte tmp4; //备用字段 byte tmp5; //备用字段 int dijin; //底分 byte paytype; //支付方式 byte desktype; //桌子类型 byte playtype; //玩法类型 byte totalplay; //总局数 byte isowner; //是否房主 DWORD roomId; //房间id CMD_GR_UserSitDownAck(){ ZeroMemory(this, sizeof(CMD_GR_UserSitDownAck)); } //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserSitDownAck) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("创建进入房间应答->创建或进入结果:%d,错误信息:%s.") , cbRet, szText); #else _snprintf(pBuffer, iLen, TEXT("创建进入房间应答->创建或进入结果:%d,错误信息:%s.") , cbRet, szText); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("创建进入房间应答"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; struct CMD_GR_UserSitDownAckEx { byte cbRet; //创建或进入结果 0成功 TCHAR szPrivateTableID[7]; //私有桌子号 byte bDuoLai; //多癞子可平胡,0可以 1不可以 WORD wFengDing; //封顶值 byte ipLimit; //表示ip限制 byte playnum; //表示人数 byte tmp3; //备用字段 byte tmp4; //备用字段 byte tmp5; //备用字段 int dijin; //底分 byte paytype; //支付方式 byte desktype; //桌子类型 比赛房 或是好友房 byte playtype; //玩法类型 byte totalplay; //总局数 byte isowner; //是否房主 DWORD roomId; //房间id //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserSitDownAckEx) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("进入房间应答->进入结果:%d,底分:%d,支付方式:%d,桌子类型:%d,玩法类型:%d,是否油上油:%d,是否二人玩法:%d,总局数:%d,是否房主:%d,房间id:%d,私有桌子号:%s") , cbRet, dijin, paytype, desktype, playtype, bDuoLai, wFengDing, totalplay, isowner, roomId, szPrivateTableID); #else _snwprintf(pBuffer, iLen, TEXT("进入房间应答->进入结果:%d,底分:%d,支付方式:%d,桌子类型:%d,玩法类型:%d,是否油上油:%d,是否二人玩法:%d,总局数:%d,是否房主:%d,房间id:%d,私有桌子号:%s") , cbRet, dijin, paytype, desktype, playtype, bDuoLai, wFengDing, totalplay, isowner, roomId, szPrivateTableID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("创建进入房间应答"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //起立请求 struct CMD_GR_UserStandUp { WORD wTableID; //桌子位置 WORD wChairID; //椅子位置 BYTE cbForceLeave; //强行离开 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserStandUp) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("起立请求->桌子位置:%d,椅子位置:%d,强行离开:%d.") , wTableID, wChairID, cbForceLeave); #else _snprintf(pBuffer, iLen, TEXT("起立请求->桌子位置:%d,椅子位置:%d,强行离开:%d.") , wTableID, wChairID, cbForceLeave); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("起立请求"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; struct CMD_GR_GetUserRecordListReq { DWORD dwUserID; //用户类型 DWORD dwKingID; //游戏类型 WORD wParentID; //父节点ID WORD wLimitIndex; //开始索引 WORD wLimitCount; //条数 }; struct CMD_GR_GetUserRecordListReqNew { DWORD dwUserID; //用户类型 DWORD dwKingID; //游戏类型 DWORD wParentID; //父节点ID WORD wLimitIndex; //开始索引 WORD wLimitCount; //条数 DWORD dwParentID; //父节点ID }; struct CMD_GR_GetUserRecordDetailInfoReq { WORD wKindID; WORD wRecordID; //条数 }; //统计俱乐部对局数排名 struct tagClubPlaygames { DWORD dwUserID; DWORD mCount; //局数 TCHAR szUserName[LEN_NICKNAME]; //用户名 TCHAR szHeadImg[256]; }; //统计俱乐部对局数排名 struct tagClubPlaygames2 { WORD wDateCount; BYTE temp; tagClubPlaygames Playgames[10]; }; //统计俱乐部积分数排名 struct tagClubIntegral { DWORD dwUserID; DWORD mCount; //局数 LONGLONG mJiFen; //积分 TCHAR szUserName[LEN_NICKNAME]; //用户名 TCHAR szHeadImg[256]; }; //统计俱乐部积分数排名 struct tagClubIntegral2 { WORD wDateCount; BYTE temp; tagClubIntegral Integral[10]; }; //节点 struct tagGameRecordDrawScore { DWORD dwDrawID; DWORD dwUserID; WORD wChairID; //椅子号 LONGLONG lScore; //积分 LONGLONG lGrade; //成绩 DWORD dwUserMedal; //奖牌数目 DWORD dwPlayTimeCount; //游戏时长 TCHAR szUserName[LEN_NICKNAME]; //用户名 TCHAR szHeadImg[256]; //头像 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(tagGameRecordDrawScore) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("dwDrawID:%d,dwUserID:%d,椅子号:%d,积分:%lld,成绩:%lld,奖牌数目:%d,游戏时长:%d,用户名:%s.") , dwDrawID, dwUserID, wChairID, lScore, lGrade, dwUserMedal, dwPlayTimeCount, szUserName); #else _snprintf(pBuffer, iLen, TEXT("dwDrawID:%d,dwUserID:%d,椅子号:%d,积分:%lld,成绩:%lld,奖牌数目:%d,游戏时长:%d,用户名:%s.") , dwDrawID, dwUserID, wChairID, lScore, lGrade, dwUserMedal, dwPlayTimeCount, szUserName); #endif ////mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("游戏结果积分"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //详情 struct tagGameRecordDrawScoreEx { DWORD dwDrawID; DWORD dwUserID; WORD wChairID; //椅子号 LONGLONG lScore; //积分 LONGLONG lGrade; //成绩 DWORD dwUserMedal; //奖牌数目 DWORD dwPlayTimeCount; //游戏时长 TCHAR szUserName[LEN_NICKNAME]; //用户名 TCHAR szHeadImg[256]; //头像 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(tagGameRecordDrawScore) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("dwDrawID:%d,dwUserID:%d,椅子号:%d,积分:%lld,成绩:%lld,奖牌数目:%d,游戏时长:%d,用户名:%s.") , dwDrawID, dwUserID, wChairID, lScore, lGrade, dwUserMedal, dwPlayTimeCount, szUserName); #else _snprintf(pBuffer, iLen, TEXT("dwDrawID:%d,dwUserID:%d,椅子号:%d,积分:%lld,成绩:%lld,奖牌数目:%d,游戏时长:%d,用户名:%s.") , dwDrawID, dwUserID, wChairID, lScore, lGrade, dwUserMedal, dwPlayTimeCount, szUserName); #endif ////mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("游戏结果积分"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //节点 struct tagGameRecordDrawInfo { DWORD dwDrawID; WORD wTableID; WORD wUserMedal; WORD wUserCount; WORD wParentID; TCHAR szPrivateTableID[LEN_PRIVATE_TABLE_ID]; //时间信息 DWORD SystemTimeStart; //开始时间 DWORD SystemTimeConclude; //结束时间 WORD wWanFa; //玩法ID tagGameRecordDrawScore GameChairScore[4]; // }; //详情 struct tagGameRecordDrawInfoEx { DWORD dwDrawID; WORD wTableID; WORD wUserMedal; WORD wUserCount; WORD wParentID; TCHAR szPrivateTableID[LEN_PRIVATE_TABLE_ID]; //时间信息 DWORD SystemTimeStart; //开始时间 DWORD SystemTimeConclude; //结束时间 WORD wWanFa; //玩法ID tagGameRecordDrawScoreEx GameChairScore[4]; // }; struct CMD_GR_GetUserScoreRecordListResp { WORD wParentRecordID; //父节点ID WORD wRecordCount; tagGameRecordDrawInfo GameScoreRecord[20]; //tagGameRecordDrawInfo的数组; }; struct CMD_GR_GetUserScoreRecordDetail { WORD wRecordCount; tagGameRecordDrawScore sGameScoreRecord[10]; bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_GetUserScoreRecordDetail) * 16 > iLen) return false; TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); for (int i = 0; i < (wRecordCount>10?10:wRecordCount); i++) { TCHAR szTemp[BUFFERLEN]; if (sGameScoreRecord[i].ToString(szTemp, BUFFERLEN, dUserID)) { StringCchCat(szBuffer, BUFFERLEN, szTemp); } } #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("获取游戏积分记录详情->wRecordCount:%d,dwUserID:%s.") , wRecordCount, szBuffer); #else _snprintf(pBuffer, iLen, TEXT("获取游戏积分记录详情->wRecordCount:%d,dwUserID:%s.") , wRecordCount, szBuffer); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("获取游戏积分记录详情"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; struct CMD_S_GameConfig2 { WORD wSubGameID; //子游戏类型(0血战到底,1血流成河,2两牌房, 3倒到胡,) BYTE wPlayRule; //玩法选项(1带幺九、将对,2换三张,3门清中张) WORD wMaxFanRule; //最大藩数 WORD wMaxScore; //最大分数 WORD wPlayCountRule; //一次玩的局数(4局?8局?) WORD wHadPlayCount; //已玩局数 WORD zmExtraRule; //0自摸加底 or 1自摸加番? WORD dghRule; //点杠花类型?放炮 or自摸?(点杠花后自摸算自摸还是放炮?) TCHAR sPrivateTableID[LEN_PRIVATE_TABLE_ID]; }; //游戏回放回放 struct GameRecordPacket2 { WORD wChairID; WORD wMainCmdID; WORD wSubCmdID; WORD wSize; void* pData; }; struct ChairRecord2 { WORD wChairId; //椅子号 UINT32 dwUserId; //用户id TCHAR userName[LEN_NICKNAME];//用户名 UINT32 userHeadIcon; }; struct CMD_GR_ReplayRecordResp2 { UINT32 m_UUID; //回放唯一ID UINT32 m_tableID; //公开桌子号 UINT32 m_startTime; //游戏开始时间 UINT32 m_endTime; //游戏结束时间 UINT32 m_UserId; //用户ID CMD_S_GameConfig2 m_gameconfig; //游戏基本配置 ChairRecord2 m_chairList[4]; //游戏椅子玩家信息 UINT16 m_recordCount; //回放数据记录数 char pData[0]; //回放记录列表(尾拖数据) }; //用户积分 struct tagMobileUserScore { //积分信息 DWORD lScore; //用户分数 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(tagMobileUserScore) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("
【用户积分】用户分数:%d.") , lScore); #else _snprintf(pBuffer, iLen, TEXT("
【用户积分】用户分数:%d,胜利盘数:%d,失败盘数:%d,和局盘数:%d,逃跑盘数:%d,用户经验:%d.") , lScore, dwWinCount, dwLostCount, dwDrawCount, dwFleeCount, dwExperience); #endif ////mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户积分"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; struct CMD_GR_ReplayRecordReq { DWORD dwRecordID; }; //邀请用户 struct CMD_GR_UserInvite { WORD wTableID; //桌子号码 DWORD dwUserID; //用户 I D }; //邀请用户请求 struct CMD_GR_UserInviteReq { WORD wTableID; //桌子号码 DWORD dwUserID; //用户 I D }; //用户分数 struct CMD_GR_UserScore { DWORD dwUserID; //用户标识 tagUserScore UserScore; //积分信息 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserScore) * 16 > iLen) return false; TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); UserScore.ToString(szBuffer, BUFFERLEN, dUserID); #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("用户分数->用户标识:%d,积分信息:%s.") , dwUserID, szBuffer); #else _snprintf(pBuffer, iLen, TEXT("用户分数->用户标识:%d,积分信息:%s.") , dwUserID, szBuffer); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户分数"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //用户分数 struct CMD_GR_MobileUserScore { DWORD dwUserID; //用户标识 tagMobileUserScore UserScore; //积分信息 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_MobileUserScore) * 16 > iLen) return false; TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); UserScore.ToString(szBuffer, BUFFERLEN, dUserID); #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("用户分数->用户标识:%d,积分信息:%s.") , dwUserID, szBuffer); #else _snprintf(pBuffer, iLen, TEXT("用户分数->用户标识:%d,积分信息:%s.") , dwUserID, szBuffer); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户分数"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //用户状态 struct tagUserStatus { WORD wTableID; //桌子索引 WORD wChairID; //椅子位置 BYTE cbUserStatus; //用户状态 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(tagUserStatus) * 16 > iLen) return false; TCHAR szTemp[32]; ZeroMemory(szTemp, 32 * sizeof(TCHAR)); switch (cbUserStatus) { case US_NULL: StringCchCat(szTemp, 32, _TEXT("没有状态")); break; case US_FREE: StringCchCat(szTemp, 32, _TEXT("大厅状态")); break; case US_SIT: StringCchCat(szTemp, 32, _TEXT("坐下状态")); break; case US_READY: StringCchCat(szTemp, 32, _TEXT("准备状态")); break; case US_LOOKON: StringCchCat(szTemp, 32, _TEXT("旁观状态")); break; case US_PLAYING: StringCchCat(szTemp, 32, _TEXT("游戏状态")); break; case US_OFFLINE: StringCchCat(szTemp, 32, _TEXT("断线状态")); break; default: break; } #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("
【子项用户状态】桌子索引:%d,椅子位置:%d,用户状态:%s") , wTableID, wChairID, szTemp); #else _snprintf(pBuffer, iLen, TEXT("
【子项用户状态】桌子索引:%d,椅子位置:%d,用户状态:%s") , wTableID, wChairID, szTemp); #endif ////mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户状态"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //用户状态 struct CMD_GR_UserStatus { DWORD dwUserID; //用户标识 tagUserStatus UserStatus; //用户状态 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserStatus) * 16 > iLen) return false; TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); UserStatus.ToString(szBuffer, BUFFERLEN, dUserID); #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("用户分数->用户标识:%d,用户状态:%s") , dwUserID, szBuffer); #else _snprintf(pBuffer, iLen, TEXT("用户分数->用户标识:%d,用户状态:%s") , dwUserID, szBuffer); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户状态"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //请求失败 struct CMD_GR_RequestFailure { LONG lErrorCode; //错误代码 TCHAR szDescribeString[128]; //描述信息 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_RequestFailure) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("请求失败->错误代码:%d,描述信息:%s.") , lErrorCode, szDescribeString); #else _snprintf(pBuffer, iLen, TEXT("请求失败->错误代码:%d,描述信息:%s.") , lErrorCode, szDescribeString); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("请求失败"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //领奖失败错误码 struct CMD_GR_RequestFailureAward { BYTE lErrorCode; //错误代码 TCHAR szDescribeString[128]; //描述信息 }; //用户聊天 struct CMD_GR_C_UserChat { WORD wChatLength; //信息长度 DWORD dwChatColor; //信息颜色 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 TCHAR szChatString[LEN_USER_CHAT]; //聊天信息 }; //用户聊天 struct CMD_GR_S_UserChat { WORD wChatLength; //信息长度 DWORD dwChatColor; //信息颜色 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 TCHAR szChatString[LEN_USER_CHAT]; //聊天信息 }; //用户表情 struct CMD_GR_C_UserExpression { WORD wItemIndex; //表情索引 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_C_UserExpression) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("用户表情->表情索引:%d,发送用户:%d,目标用户:%d.") , wItemIndex, dwSendUserID, dwTargetUserID); #else _snprintf(pBuffer, iLen, TEXT("用户表情->表情索引:%d,发送用户:%d,目标用户:%d.") , wItemIndex, dwSendUserID, dwTargetUserID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户表情"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //用户表情 struct CMD_GR_S_UserExpression { WORD wItemIndex; //表情索引 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_C_UserExpression) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("用户表情->表情索引:%d,发送用户:%d,目标用户:%d.") , wItemIndex, dwSendUserID, dwTargetUserID); #else _snprintf(pBuffer, iLen, TEXT("用户表情->表情索引:%d,发送用户:%d,目标用户:%d.") , wItemIndex, dwSendUserID, dwTargetUserID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户表情"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //用户私聊 struct CMD_GR_C_WisperChat { WORD wChatLength; //信息长度 DWORD dwChatColor; //信息颜色 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 TCHAR szChatString[LEN_USER_CHAT]; //聊天信息 }; //用户私聊 struct CMD_GR_S_WisperChat { WORD wChatLength; //信息长度 DWORD dwChatColor; //信息颜色 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 TCHAR szChatString[LEN_USER_CHAT]; //聊天信息 }; //私聊表情 struct CMD_GR_C_WisperExpression { WORD wItemIndex; //表情索引 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_C_UserExpression) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("用户表情->表情索引:%d,发送用户:%d,目标用户:%d.") , wItemIndex, dwSendUserID, dwTargetUserID); #else _snprintf(pBuffer, iLen, TEXT("用户表情->表情索引:%d,发送用户:%d,目标用户:%d.") , wItemIndex, dwSendUserID, dwTargetUserID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户表情"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //私聊表情 struct CMD_GR_S_WisperExpression { WORD wItemIndex; //表情索引 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_C_UserExpression) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("用户表情->表情索引:%d,发送用户:%d,目标用户:%d.") , wItemIndex, dwSendUserID, dwTargetUserID); #else _snprintf(pBuffer, iLen, TEXT("用户表情->表情索引:%d,发送用户:%d,目标用户:%d.") , wItemIndex, dwSendUserID, dwTargetUserID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("用户表情"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //用户会话 struct CMD_GR_ColloquyChat { WORD wChatLength; //信息长度 DWORD dwChatColor; //信息颜色 DWORD dwSendUserID; //发送用户 DWORD dwConversationID; //会话标识 DWORD dwTargetUserID[16]; //目标用户 TCHAR szChatString[LEN_USER_CHAT]; //聊天信息 }; //邀请用户 struct CMD_GR_C_InviteUser { WORD wTableID; //桌子号码 DWORD dwSendUserID; //发送用户 }; //邀请用户 struct CMD_GR_S_InviteUser { DWORD dwTargetUserID; //目标用户 }; //购买道具 struct CMD_GR_C_PropertyBuy { BYTE cbRequestArea; //请求范围 BYTE cbConsumeScore; //积分消费 WORD wItemCount; //购买数目 WORD wPropertyIndex; //道具索引 DWORD dwTargetUserID; //使用对象 }; //道具成功 struct CMD_GR_S_PropertySuccess { BYTE cbRequestArea; //使用环境 WORD wItemCount; //购买数目 WORD wPropertyIndex; //道具索引 DWORD dwSourceUserID; //目标对象 DWORD dwTargetUserID; //使用对象 }; //道具失败 struct CMD_GR_PropertyFailure { WORD wRequestArea; //请求区域 LONG lErrorCode; //错误代码 TCHAR szDescribeString[256]; //描述信息 }; //道具消息 struct CMD_GR_S_PropertyMessage { //道具信息 WORD wPropertyIndex; //道具索引 WORD wPropertyCount; //道具数目 DWORD dwSourceUserID; //目标对象 DWORD dwTargerUserID; //使用对象 }; //道具效应 struct CMD_GR_S_PropertyEffect { DWORD wUserID; //用 户I D BYTE cbMemberOrder; //会员等级 }; //发送喇叭 struct CMD_GR_C_SendTrumpet { BYTE cbRequestArea; //请求范围 WORD wPropertyIndex; //道具索引 DWORD TrumpetColor; //喇叭颜色 TCHAR szTrumpetContent[TRUMPET_MAX_CHAR]; //喇叭内容 }; //发送喇叭 struct CMD_GR_S_SendTrumpet { WORD wPropertyIndex; //道具索引 DWORD dwSendUserID; //用户 I D DWORD TrumpetColor; //喇叭颜色 TCHAR szSendNickName[32]; //玩家昵称 TCHAR szTrumpetContent[TRUMPET_MAX_CHAR]; //喇叭内容 }; //用户拒绝黑名单坐下 struct CMD_GR_UserRepulseSit { WORD wTableID; //桌子号码 WORD wChairID; //椅子位置 DWORD dwUserID; //用户 I D DWORD dwRepulseUserID; //用户 I D }; ////////////////////////////////////////////////////////////////////////////////// //规则标志 #define UR_LIMIT_SAME_IP 0x01 //限制地址 #define UR_LIMIT_WIN_RATE 0x02 //限制胜率 #define UR_LIMIT_FLEE_RATE 0x04 //限制逃率 #define UR_LIMIT_GAME_SCORE 0x08 //限制积分 //用户规则 struct CMD_GR_UserRule { BYTE cbRuleMask; //规则掩码 WORD wMinWinRate; //最低胜率 WORD wMaxFleeRate; //最高逃率 LONG lMaxGameScore; //最高分数 LONG lMinGameScore; //最低分数 }; //请求用户信息 struct CMD_GR_UserInfoReq { DWORD dwUserIDReq; //请求用户 此字段 为0xFFFF 表示请求所有用户 除了自己 WORD wTablePos; //桌子位置 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserInfoReq) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("请求用户信息->请求用户:%d,桌子位置:%d.") , dwUserIDReq, wTablePos); #else _snprintf(pBuffer, iLen, TEXT("请求用户信息->请求用户:%d,桌子位置:%d.") , dwUserIDReq, wTablePos); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("请求用户信息"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //请求用户信息 struct CMD_GR_ChairUserInfoReq { WORD wTableID; //桌子号码 WORD wChairID; //椅子位置 }; //通知当前豆子 struct CMD_GR_UserBean { DWORD dwCurrBeans; //当前豆子 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_UserInfoReq) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("通知当前元宝->元宝:%d.") , dwCurrBeans); #else _snprintf(pBuffer, iLen, TEXT("通知当前元宝->元宝:%d.") , dwCurrBeans); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("通知当前元宝"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; ////////////////////////////////////////////////////////////////////////////////// //状态命令 #define MDM_GR_STATUS 4 //状态信息 #define SUB_GR_TABLE_INFO 100 //桌子信息 #define SUB_GR_TABLE_STATUS 101 //桌子状态 ////////////////////////////////////////////////////////////////////////////////// //桌子状态 struct tagTableStatus { BYTE cbTableLock; //锁定标志 BYTE cbPlayStatus; //游戏标志 LONG lCellScore; //单元积分 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(tagUserScore) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("
【桌子状态】锁定标志:%d,游戏标志:%d,单元积分:%d.") , cbTableLock, cbPlayStatus, lCellScore); #else _snprintf(pBuffer, iLen, TEXT("
【桌子状态】锁定标志:%d,游戏标志:%d,单元积分:%d.") , cbTableLock, cbPlayStatus, lCellScore); #endif ////mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("桌子状态"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //桌子信息 struct CMD_GR_TableInfo { WORD wTableCount; //桌子数目 tagTableStatus TableStatusArray[512]; //桌子状态 }; //桌子状态 struct CMD_GR_TableStatus { WORD wTableID; //桌子号码 tagTableStatus TableStatus; //桌子状态 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_TableStatus) * 16 > iLen) return false; TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); TableStatus.ToString(szBuffer, BUFFERLEN, dUserID); #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("桌子状态->桌子号码:%d,桌子状态:%s.") , wTableID, szBuffer); #else _snprintf(pBuffer, iLen, TEXT("桌子状态->桌子号码:%d,桌子状态:%s.") , wTableID, szBuffer); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("桌子状态"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; ////////////////////////////////////////////////////////////////////////////////// //银行命令 //#define MDM_GR_INSURE 5 //用户信息 ////银行命令 //#define SUB_GR_ENABLE_INSURE_REQUEST 1 //开通银行 //#define SUB_GR_QUERY_INSURE_INFO 2 //查询银行 //#define SUB_GR_SAVE_SCORE_REQUEST 3 //存款操作 //#define SUB_GR_TAKE_SCORE_REQUEST 4 //取款操作 //#define SUB_GR_TRANSFER_SCORE_REQUEST 5 //取款操作 //#define SUB_GR_QUERY_USER_INFO_REQUEST 6 //查询用户 // //#define SUB_GR_USER_INSURE_INFO 100 //银行资料 //#define SUB_GR_USER_INSURE_SUCCESS 101 //银行成功 //#define SUB_GR_USER_INSURE_FAILURE 102 //银行失败 //#define SUB_GR_USER_TRANSFER_USER_INFO 103 //用户资料 //#define SUB_GR_USER_INSURE_ENABLE_RESULT 104 //开通结果 ////////////////////////////////////////////////////////////////////////////////// //开通银行 struct CMD_GR_C_EnableInsureRequest { BYTE cbActivityGame; //游戏动作 DWORD dwUserID; //用户I D TCHAR szLogonPass[LEN_PASSWORD]; //登录密码 TCHAR szInsurePass[LEN_PASSWORD]; //银行密码 TCHAR szMachineID[LEN_MACHINE_ID]; //机器序列 }; //查询银行 struct CMD_GR_C_QueryInsureInfoRequest { BYTE cbActivityGame; //游戏动作 TCHAR szInsurePass[LEN_PASSWORD]; //银行密码 }; //存款请求 struct CMD_GR_C_SaveScoreRequest { BYTE cbActivityGame; //游戏动作 SCORE lSaveScore; //存款数目 }; //取款请求 struct CMD_GR_C_TakeScoreRequest { BYTE cbActivityGame; //游戏动作 SCORE lTakeScore; //取款数目 TCHAR szInsurePass[LEN_PASSWORD]; //银行密码 }; //转账金币 struct CMD_GP_C_TransferScoreRequest { BYTE cbActivityGame; //游戏动作 SCORE lTransferScore; //转账金币 TCHAR szAccounts[LEN_ACCOUNTS]; //目标用户 TCHAR szInsurePass[LEN_PASSWORD]; //银行密码 TCHAR szTransRemark[LEN_TRANS_REMARK]; //转账备注 }; //查询用户 struct CMD_GR_C_QueryUserInfoRequest { BYTE cbActivityGame; //游戏动作 BYTE cbByNickName; //昵称赠送 TCHAR szAccounts[LEN_ACCOUNTS]; //目标用户 }; //银行资料 struct CMD_GR_S_UserInsureInfo { BYTE cbActivityGame; //游戏动作 BYTE cbEnjoinTransfer; //转账开关 WORD wRevenueTake; //税收比例 WORD wRevenueTransfer; //税收比例 WORD wRevenueTransferMember; //税收比例 WORD wServerID; //房间标识 SCORE lUserScore; //用户金币 SCORE lUserInsure; //银行金币 SCORE lTransferPrerequisite; //转账条件 }; //银行成功 struct CMD_GR_S_UserInsureSuccess { BYTE cbActivityGame; //游戏动作 SCORE lUserScore; //身上金币 SCORE lUserInsure; //银行金币 TCHAR szDescribeString[128]; //描述消息 }; //银行失败 struct CMD_GR_S_UserInsureFailure { BYTE cbActivityGame; //游戏动作 LONG lErrorCode; //错误代码 TCHAR szDescribeString[128]; //描述消息 }; //用户信息 struct CMD_GR_S_UserTransferUserInfo { BYTE cbActivityGame; //游戏动作 DWORD dwTargetGameID; //目标用户 TCHAR szAccounts[LEN_ACCOUNTS]; //目标用户 }; //开通结果 struct CMD_GR_S_UserInsureEnableResult { BYTE cbActivityGame; //游戏动作 BYTE cbInsureEnabled; //使能标识 TCHAR szDescribeString[128]; //描述消息 }; ////////////////////////////////////////////////////////////////////////////////// //任务命令 #define MDM_GR_TASK 6 //任务命令 //#define SUB_GR_TASK_LOAD_INFO 1 //加载任务 //#define SUB_GR_TASK_TAKE 2 //领取任务 //#define SUB_GR_TASK_REWARD 3 //任务奖励 // //#define SUB_GR_TASK_INFO 4 //任务信息 //#define SUB_GR_TASK_FINISH 5 //任务完成 //#define SUB_GR_TASK_LIST 6 //任务列表 //#define SUB_GR_TASK_RESULT 7 //任务结果 ////////////////////////////////////////////////////////////////////////////////// ////加载任务 //struct CMD_GR_C_LoadTaskInfo //{ // DWORD dwUserID; //用户标识 // TCHAR szPassword[LEN_PASSWORD]; //用户密码 //}; // ////领取任务 //struct CMD_GR_C_TakeTask //{ // WORD wTaskID; //任务标识 // DWORD dwUserID; //用户标识 // TCHAR szPassword[LEN_PASSWORD]; //登录密码 // TCHAR szMachineID[LEN_MACHINE_ID]; //机器序列 //}; // ////领取奖励 //struct CMD_GR_C_TaskReward //{ // WORD wTaskID; //任务标识 // DWORD dwUserID; //用户标识 // TCHAR szPassword[LEN_PASSWORD]; //登录密码 // TCHAR szMachineID[LEN_MACHINE_ID]; //机器序列 //}; // ////任务信息 //struct CMD_GR_S_TaskInfo //{ // WORD wTaskCount; //任务数量 // tagTaskStatus TaskStatus[TASK_MAX_COUNT]; //任务状态 //}; // ////任务完成 //struct CMD_GR_S_TaskFinish //{ // WORD wFinishTaskID; //任务标识 // TCHAR szTaskName[LEN_TASK_NAME]; //任务名称 //}; // ////任务结果 //struct CMD_GR_S_TaskResult //{ // //结果信息 // bool bSuccessed; //成功标识 // WORD wCommandID; //命令标识 // // //财富信息 // SCORE lCurrScore; //当前金币 // SCORE lCurrIngot; //当前元宝 // // //提示信息 // TCHAR szNotifyContent[128]; //提示内容 //}; // ////////////////////////////////////////////////////////////////////////////////// //兑换命令 #define MDM_GR_EXCHANGE 7 //兑换命令 #define SUB_GR_EXCHANGE_LOAD_INFO 400 //加载信息 #define SUB_GR_EXCHANGE_PARAM_INFO 401 //兑换参数 #define SUB_GR_PURCHASE_MEMBER 402 //购买会员 #define SUB_GR_PURCHASE_RESULT 403 //购买结果 #define SUB_GR_EXCHANGE_SCORE 404 //兑换游戏币 #define SUB_GR_EXCHANGE_RESULT 405 //兑换结果 ////////////////////////////////////////////////////////////////////////////////// //查询参数 struct CMD_GR_ExchangeParameter { WORD wExchangeRate; //兑换比率 }; //购买会员 struct CMD_GR_PurchaseMember { DWORD dwUserID; //用户标识 BYTE cbMemberOrder; //会员标识 WORD wPurchaseTime; //购买时间 TCHAR szMachineID[LEN_MACHINE_ID]; //机器标识 }; //购买结果 struct CMD_GR_PurchaseResult { bool bSuccessed; //成功标识 BYTE cbMemberOrder; //会员系列 DWORD lCurrScore; //当前游戏币 TCHAR szNotifyContent[128]; //提示内容 }; //兑换游戏币 struct CMD_GR_ExchangeScore { DWORD dwUserID; //用户标识 //DWORD lExchangeIngot; //兑换钻石 DWORD dwExchangeID; //+++兑换ID TCHAR szMachineID[LEN_MACHINE_ID]; //机器标识 }; //兑换结果 struct CMD_GR_ExchangeResult { bool bSuccessed; //成功标识 DWORD lCurrScore; //当前游戏币 DWORD lCurrIngot; //当前元宝 TCHAR szNotifyContent[128]; //提示内容 }; ////////////////////////////////////////////////////////////////////////////////// //管理命令 #define MDM_GR_MANAGE 8 //管理命令 #define SUB_GR_SEND_WARNING 1 //发送警告 #define SUB_GR_SEND_MESSAGE 2 //发送消息 #define SUB_GR_LOOK_USER_IP 3 //查看地址 #define SUB_GR_KILL_USER 4 //踢出用户 #define SUB_GR_LIMIT_ACCOUNS 5 //禁用帐户 #define SUB_GR_SET_USER_RIGHT 6 //权限设置 //房间设置 #define SUB_GR_QUERY_OPTION 7 //查询设置 #define SUB_GR_OPTION_SERVER 8 //房间设置 #define SUB_GR_OPTION_CURRENT 9 //当前设置 #define SUB_GR_LIMIT_USER_CHAT 10 //限制聊天 #define SUB_GR_KICK_ALL_USER 11 //踢出用户 #define SUB_GR_DISMISSGAME 12 //解散游戏 ////////////////////////////////////////////////////////////////////////////////// //申请解散私有房间 struct CMD_GR_DELETE_PRIVATE_ROOM_REQ { WORD wTableID; WORD wChairID; BYTE leftTime; //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_DELETE_PRIVATE_ROOM_REQ) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("申请解散私有房间->桌子:%d,椅子:%d,定时剩余时间:%d.") , wTableID, wChairID, leftTime); #else _snprintf(pBuffer, iLen, TEXT("申请解散私有房间->桌子:%d,椅子:%d,定时剩余时间:%d.") , wTableID, wChairID, leftTime); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("申请解散私有房间"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //申请解散私有房间的应答 struct CMD_GR_DELETE_PRIVATE_ROOM_RESP { WORD wTableID; WORD wChairID; BYTE bAgree; //是否同意。1同意,0不同意 2 为拒绝 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_DELETE_PRIVATE_ROOM_RESP) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("申请解散私有房间的应答->桌子:%d,椅子:%d,选择:%s.") , wTableID, wChairID, bAgree == 1 ? _T("同意") : _T("不同意")); #else _snprintf(pBuffer, iLen, TEXT("申请解散私有房间的应答->桌子:%d,椅子:%d,选择:%s.") , wTableID, wChairID, bAgree == 1 ? _T("同意") : _T("不同意")); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("申请解散私有房间的应答"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; struct CMD_GR_DELETE_PRIVATE_ROOM_RESULT { WORD wTableID; USHORT bState; //0失败,1成功,2超时(也算失败) TCHAR szDescription[128]; //描述信息 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_DELETE_PRIVATE_ROOM_RESULT) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("申请解散私有房间的结果->桌子:%d,状态:%s,描述信息:%s.") , wTableID, bState == 1 ? _T("成功") : _T("失败"), szDescription); #else _snprintf(pBuffer, iLen, TEXT("申请解散私有房间的结果->桌子:%d,状态:%s,描述信息:%s.") , wTableID, bState == 1 ? _T("成功") : _T("失败"), szDescription); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("申请解散私有房间的结果"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN*2]; ZeroMemory(szBuffer, (BUFFERLEN * 2) * sizeof(TCHAR)); if (ToString(szBuffer, (BUFFERLEN * 2), dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //发送警告 struct CMD_GR_SendWarning { WORD wChatLength; //信息长度 DWORD dwTargetUserID; //目标用户 TCHAR szWarningMessage[LEN_USER_CHAT]; //警告消息 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_SendWarning) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("发送警告->信息长度:%d,目标用户:%d,警告消息:%s.") , wChatLength, dwTargetUserID, szWarningMessage); #else _snprintf(pBuffer, iLen, TEXT("发送警告->信息长度:%d,目标用户:%d,警告消息:%s.") , wChatLength, dwTargetUserID, szWarningMessage); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("发送警告"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //系统消息 struct CMD_GR_SendMessage { BYTE cbGame; //游戏消息 BYTE cbRoom; //游戏消息 BYTE cbAllRoom; //游戏消息 BYTE cbLoop; //循环标志 DWORD dwTimeRate; //循环间隔 __time64_t tConcludeTime; //结束时间 WORD wChatLength; //信息长度 TCHAR szSystemMessage[LEN_USER_CHAT]; //系统消息 }; //查看地址 struct CMD_GR_LookUserIP { DWORD dwTargetUserID; //目标用户 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_LookUserIP) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("查看地址->目标用户:%d.") , dwTargetUserID); #else _snprintf(pBuffer, iLen, TEXT("查看地址->目标用户:%d.") , dwTargetUserID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("查看地址"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //踢出用户 struct CMD_GR_KickUser { DWORD dwTargetUserID; //目标用户 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_KickUser) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("踢出用户->目标用户:%d.") , dwTargetUserID); #else _snprintf(pBuffer, iLen, TEXT("踢出用户->目标用户:%d.") , dwTargetUserID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("踢出用户"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //禁用帐户 struct CMD_GR_LimitAccounts { DWORD dwTargetUserID; //目标用户 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_LimitAccounts) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("禁用帐户->目标用户:%d.") , dwTargetUserID); #else _snprintf(pBuffer, iLen, TEXT("禁用帐户->目标用户:%d.") , dwTargetUserID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("禁用帐户"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //权限设置 struct CMD_GR_SetUserRight { //目标用户 DWORD dwTargetUserID; //目标用户 //绑定变量 BYTE cbGameRight; //帐号权限 BYTE cbAccountsRight; //帐号权限 //权限变化 BYTE cbLimitRoomChat; //大厅聊天 BYTE cbLimitGameChat; //游戏聊天 BYTE cbLimitPlayGame; //游戏权限 BYTE cbLimitSendWisper; //发送消息 BYTE cbLimitLookonGame; //旁观权限 }; //房间设置 struct CMD_GR_OptionCurrent { DWORD dwRuleMask; //规则掩码 tagServerOptionInfo ServerOptionInfo; //房间配置 }; //房间设置 struct CMD_GR_ServerOption { tagServerOptionInfo ServerOptionInfo; //房间配置 }; //踢出所有用户 struct CMD_GR_KickAllUser { TCHAR szKickMessage[LEN_USER_CHAT]; //踢出提示 }; //解散游戏 struct CMD_GR_DismissGame { WORD wDismissTableNum; //解散桌号 WORD wChairID; //自己椅号 }; ////////////////////////////////////////////////////////////////////////////////// //设置标志 #define OSF_ROOM_CHAT 1 //大厅聊天 #define OSF_GAME_CHAT 2 //游戏聊天 #define OSF_ROOM_WISPER 3 //大厅私聊 #define OSF_ENTER_TABLE 4 //进入游戏 #define OSF_ENTER_SERVER 5 //进入房间 #define OSF_SEND_BUGLE 12 //发送喇叭 //房间设置 struct CMD_GR_OptionServer { BYTE cbOptionFlags; //设置标志 BYTE cbOptionValue; //设置标志 }; //限制聊天 struct CMD_GR_LimitUserChat { DWORD dwTargetUserID; //目标用户 BYTE cbLimitFlags; //限制标志 BYTE cbLimitValue; //限制与否 }; ////////////////////////////////////////////////////////////////////////////////// //比赛命令 #define MDM_GR_MATCH 9 //比赛命令 #define SUB_GR_MATCH_FEE 400 //报名费用 #define SUB_GR_MATCH_NUM 401 //等待人数 #define SUB_GR_LEAVE_MATCH 402 //退出比赛 #define SUB_GR_MATCH_INFO 403 //比赛信息 #define SUB_GR_MATCH_WAIT_TIP 404 //等待提示 #define SUB_GR_MATCH_RESULT 405 //比赛结果 #define SUB_GR_MATCH_STATUS 406 //比赛状态 #define SUB_GR_MATCH_DESC 408 //比赛描述 #define SUB_GR_MATCH_GOLDUPDATE 409 //金币更新 #define SUB_GR_MATCH_ELIMINATE 410 //比赛淘汰 ////////////////改动以下时 请将游戏里面CMD_GAME.H的同时改动//////////////////////////// //#define SUB_GR_MATCH_INFO_ER_SPARROWS 410 //比赛信息(2人麻将) //费用提醒 struct CMD_GR_Match_Fee { SCORE lMatchFee; //报名费用 TCHAR szNotifyContent[128]; //提示内容 }; //比赛人数 struct CMD_GR_Match_Num { DWORD dwWaitting; //等待人数 DWORD dwTotal; //开赛人数 }; //赛事信息 struct CMD_GR_Match_Info { TCHAR szTitle[4][64]; //信息标题 WORD wGameCount; //游戏局数 }; //提示信息 struct CMD_GR_Match_Wait_Tip { SCORE lScore; //当前积分 WORD wRank; //当前名次 WORD wCurTableRank; //本桌名次 WORD wUserCount; //当前人数 WORD wCurGameCount; //当前局数 WORD wGameCount; //总共局数 WORD wPlayingTable; //游戏桌数 TCHAR szMatchName[LEN_SERVER]; //比赛名称 }; //比赛结果 struct CMD_GR_MatchResult { SCORE lGold; //金币奖励 DWORD dwIngot; //元宝奖励 DWORD dwExperience; //经验奖励 TCHAR szDescribe[256]; //得奖描述 }; #define MAX_MATCH_DESC 4 //最多描述 //比赛描述 struct CMD_GR_MatchDesc { TCHAR szTitle[MAX_MATCH_DESC][16]; //信息标题 TCHAR szDescribe[MAX_MATCH_DESC][64]; //描述内容 COLORREF crTitleColor; //标题颜色 COLORREF crDescribeColor; //描述颜色 }; //金币更新 struct CMD_GR_MatchGoldUpdate { SCORE lCurrGold; //当前金币 SCORE lCurrIngot; //当前元宝 DWORD dwCurrExprience; //当前经验 }; ////////////////////////////////////////////////////////////////////////////////// //俱乐部命令 #define MDM_GR_CLUB 10 //俱乐部命令 ////////////////////////////////////////////////////////////////////////////////// //俱乐部命令 #define SUB_GR_USER_GET_CLUBLIST 401 //获取俱乐部列表 #define SUB_GR_USER_GET_CLUBLIST_ACK 402 //获取俱乐部列表应答 #define SUB_GR_USER_GET_CLUBUSER 403 //获取俱乐部会员 #define SUB_GR_USER_GET_CLUBUSER_ACK 404 //获取俱乐部会员应答 #define SUB_GR_USER_GET_CLUBMESSAGE 405 //获取俱乐部消息 #define SUB_GR_USER_GET_CLUBMESSAGE_ACK 406 //获取俱乐部消息应答 #define SUB_GR_USER_GET_CLUBRECORD 407 //获取俱乐部记录 #define SUB_GR_USER_GET_CLUBRECORD_ACK 408 //获取俱乐部记录应答 #define SUB_GR_USER_CREATE_CLUB 409 //创建俱乐部 #define SUB_GR_USER_CREATE_CLUB_ACK 410 //创建俱乐部应答 #define SUB_GR_USER_UPDATE_CLUB 411 //修改俱乐部 #define SUB_GR_USER_UPDATE_CLUB_ACK 412 //修改俱乐部应答 #define SUB_GR_USER_DELETE_CLUB 413 //删除俱乐部 #define SUB_GR_USER_DELETE_CLUB_ACK 414 //删除俱乐部应答 #define SUB_GR_USER_GET_CLUB 415 //查看俱乐部 #define SUB_GR_USER_GET_CLUB_ACK 416 //查看俱乐部应答 #define SUB_GR_USER_JOIN_CLUB 417 //加入俱乐部 #define SUB_GR_USER_JOIN_CLUB_ACK 418 //加入俱乐部应答 #define SUB_GR_USER_QUIT_CLUB 419 //退出俱乐部 #define SUB_GR_USER_QUIT_CLUB_ACK 420 //退出俱乐部应答 #define SUB_GR_USER_ISAGREE_CLUB 421 //同意俱乐部 #define SUB_GR_USER_ISAGREE_CLUB_ACK 422 //同意俱乐部应答 //#define SUB_GR_USER_GET_CLUBONLINE 423 //获取俱乐部在线信息(刷新桌子) //#define SUB_GR_USER_GET_CLUBONLINE_ACK 424 //获取俱乐部在线信息应答 #define SUB_GR_USER_NOTIFY_ACK 425 //通知标志 #define SUB_GR_USER_GET_CLUBBLACKUSER 426 //获取黑名单 #define SUB_GR_USER_GET_PROTOLCOL 427 //获取协议 #define SUB_GR_USER_GET_PROTOLCOL_ACK 428 //获取协议应答 #define SUB_GR_USER_GET_PROTOLCOLAGREE 429 //同意协议 #define SUB_GR_USER_GET_PROTOLCOLAGREE_ACK 430 //同意应答 #define SUB_GR_USER_GET_CLUBBLACKUSER_ACK 431 //获取黑名单应答 #define SUB_GR_USER_GET_NOTICE 432 //获取公告 #define SUB_GR_USER_GET_NOTICE_ACK 433 //获取公告应答 #define SUB_GR_USER_GET_CLUBRECORD_ACK_EX 434 //获取俱乐部记录应答 #define SUB_GR_USER_GET_CLUBUSE_EX 435 //获取俱乐部会员(在线) #define SUB_GR_USER_GET_CLUBONLINE_EX 436 //获取俱乐部在线信息(协议变化)(刷新桌子) #define SUB_GR_USER_GET_CLUBONLINE_ACK_EX 437 //获取俱乐部在线信息应答(协议变化) #define SUB_GR_USER_GET_CLUBONLINE_TABLE 438 //获取俱乐部房间信息 #define SUB_GR_USER_GET_CLUBONLINE_TABLE_ACK 439 //获取俱乐部房间信息应答 #define SUB_GR_USER_GET_CLUBONLINE_TABLEUSER_ACK 440 //获取俱乐部房间用户信息应答 #define SUB_GR_USER_CLUBTABLE_NOTIFY_ACK 441 //房间更新推送 #define SUB_GR_USER_CLUBCHANGE_NOTIFY_ACK 442 //俱乐部其他信息推送 #define SUB_GR_USER_DISSOLVE_ROOM 443 //群主解散俱乐部房间 #define SUB_GR_USER_GET_MORE_WANFA 444 //获取额外玩法请求 #define SUB_GR_USER_GET_MORE_WANFA_ACK 445 //获取更多玩法响应 所有额外玩法请求统一一个协议回复 #define SUB_GR_USER_GET_SAVE_MORE_WANFA 446 //保存or修改额外玩法请求 #define SUB_GR_CLUB_GET_COUNT_EXPLOITS 450 //俱乐部房间战绩查询 //#define SUB_GR_CLUB_GET_COUNT_EXPLOITS_ACK 451 //俱乐部统计回应 #define SUB_GR_CLUB_GET_COUNT_PLAYGAEMS 452 //俱乐部统计对局数 #define SUB_GR_CLUB_GET_COUNT_PLAYGAEMS_ACK 453 //俱乐部统计对局数回应 #define SUB_GR_CLUB_GET_COUNT_INTEGRAL 454 //俱乐部统计积分数 #define SUB_GR_CLUB_GET_COUNT_INTEGRAL_ACK 455 //俱乐部统计积分数回应 #define SUB_GR_CLUB_GET_MAKEA_SAMPLE 456 //俱乐部打样 #define SUB_GR_CLUB_GET_MAKEA_SAMPLE_ACK 457 //俱乐部打样回应 //俱乐部房间配置 struct tagTableConfig { WORD wSubGameID; //子游戏类型(0一脚赖油,1无赖到底,2半赖,3血流) DWORD wPlayRule; //底分 WORD wMaxFanRule; //房费(0房间创建者,1打牌者平摊) WORD wMaxScore; //IP限制(0限制,1不限制) WORD wPlayCountRule; //一次玩的局数(8局?16局?) WORD wHadPlayCount; //桌子号 WORD zmExtraRule; //是否是房主 WORD dghRule; // TCHAR sPrivateTableID[7]; byte bDuoLai; //多癞子可平胡,0可以 1不可以 WORD wFengDing; //封顶值 byte tmp1; //备用字段 byte tmp2; //备用字段 byte tmp3; //备用字段 byte tmp4; //备用字段 byte tmp5; //备用字段 }; //俱乐部列表 struct CMD_GR_ClubList { WORD wStartIndex; WORD wCount; }; struct ClubList { DWORD dwUserID; WORD dwStartIndex; WORD wCount; }; struct CMD_S_ClubInfo { DWORD dwClubID; TCHAR szClubName[32]; BYTE cbIsOwner; WORD wTotalNum; WORD wWaitTableNum; WORD wOnLineNum; WORD wWaitUserNum; DWORD dwOwnerID; TCHAR szHostName[32]; TCHAR szHeadUrl[256]; BYTE temp1; //2表示自动开房 BYTE temp2; BYTE temp3; BYTE temp4; //用来表示自动开房时多玩法的0,1,2玩法 tagTableConfig csGameConfig; }; struct CMD_GR_ClubList_Ack { WORD wNewsCount; WORD wClubCount; CMD_S_ClubInfo csGameClubInfo[20]; }; struct CMD_S_ClubAutoAddInfo { DWORD dwClubID; //俱乐部id BYTE cbWanfaId; //1 ,2 额外玩法id序号 BYTE cbStatus; //0 不存在(该值也表示是否為查询获取额外玩法信息) 1 启用 2 禁用 tagTableConfig gameconfig; //玩法配置 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_S_ClubAutoAddInfo) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("俱乐部额外玩法自动开房请求->俱乐部:%d,额外玩法id序号:%d,状态:%d."), dwClubID, cbWanfaId, cbStatus); #else _snprintf(pBuffer, iLen, TEXT("俱乐部额外玩法自动开房请求->俱乐部:%d,额外玩法id序号:%d,状态:%d."), dwClubID, cbWanfaId, cbStatus); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //俱乐部会员 struct CMD_GR_ClubUser { DWORD dwClubID; WORD wStartIndex; WORD wCount; }; //俱乐部会员 struct CMD_GR_ClubUser2 { DWORD dwClubID; WORD wStartIndex; WORD wCount; BYTE cbKind; DWORD dwTemp; }; //俱乐部协议 struct CMD_GR_ClubProtocol { DWORD dwClubID; DWORD dwTemp; }; //俱乐部协议 struct CMD_GR_ClubProtocolAgree { DWORD dwClubID; BYTE cbAgree; DWORD dwTemp; }; //俱乐部公告 struct CMD_GR_ClubNotice { DWORD dwClubID; BYTE cbType; DWORD dwTemp; TCHAR Message[255]; }; //俱乐部公告 struct CMD_GR_ClubNoticeACK { DWORD dwClubID; BYTE cbType; DWORD dwTemp; BYTE cbResult; TCHAR Message[255]; }; //俱乐部在线 struct CMD_GR_ClubOnLine { DWORD dwClubID; WORD wStartIndex; WORD wCount; }; //群主解散俱乐部房间 struct CMD_GR_ClubDissolveRoom { DWORD dwClubID; //俱乐部id DWORD dwRoomID; //房间号 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID ,int& RoomID) { if (sizeof(CMD_GR_ClubDissolveRoom) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("群主解散房间->俱乐部:%d,房间号:%d."), dwClubID, dwRoomID); #else _snwprintf(pBuffer, iLen, TEXT("群主解散房间->俱乐部:%d,房间号:%d."), dwClubID, dwRoomID); #endif //mylog::ToSet(pBuffer, iLen, dUserID); RoomID = dwRoomID; return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); int tempdTablePrivate = 0; if (ToString(szBuffer, BUFFERLEN, dUserID, tempdTablePrivate)) { mylog::OutputString(szBuffer, tempdTablePrivate); } } }; //俱乐部在线 struct CMD_GR_ClubOnLineEx { DWORD dwClubID; WORD wStartIndex; WORD wCount; BYTE cbType; //全部 1,缺一人,2等待中,3游戏中 }; struct CMD_GR_ClubOnLineTable { BYTE cbType; // 0桌子配置,1玩家信息 DWORD dwClubID; DWORD dwTableID; }; struct CMD_GR_ClubOnLineTableCfAck { DWORD dwTableID; JN_GR_RoomListInfo Room; }; struct CMD_GR_ClubOnLineTableAck { DWORD dwTableID; WORD wJushu; //当前局数 WORD wTableState;//桌子状态 PlayerInfo Userinfo[5]; //第5个为群主 }; struct CMD_S_MemberInfo { DWORD BangMaID; BYTE cbStaus; BYTE isHost; BYTE isOnline; DWORD dwUserID; TCHAR szName[32]; TCHAR szHeadUrl[256]; }; struct CMD_S_MemberInfoEx { BYTE isHost; BYTE Agree; BYTE isOnline; DWORD dwUserID; }; struct CMD_GR_ClubUser_Ack { BYTE cbHost; DWORD dwClubID; WORD wCount; CMD_S_MemberInfo csMemberInfo[20]; }; struct CMD_GR_ClubUser_Ack_Ex { WORD wStartIndex; WORD wCount; BYTE cbHost; DWORD dwClubID; WORD wMemCount; CMD_S_MemberInfoEx csMemberInfo[1000]; }; struct CMD_GR_ClubUser2_Ack { BYTE cbKind; DWORD tmp; BYTE cbHost; DWORD dwClubID; WORD wCount; CMD_S_MemberInfo csMemberInfo[20]; }; //俱乐部通知 struct CMD_GR_ClubMessage { WORD wStartIndex; WORD wCount; }; struct CMD_S_MessageInfo { WORD dType; TCHAR szContent[256]; DWORD dtActionTime; }; struct CMD_GR_ClubMessage_Ack { WORD wCount; CMD_S_MessageInfo CMD_S_MessageInfo[20]; }; //俱乐部记录 struct CMD_GR_ClubRecord { DWORD dwClubID; WORD wStartIndex; WORD wCount; DWORD dtStartTime; DWORD dwPrivatetable;//把dtEndTime改成privatetable }; struct CMD_S_RecordInfo { DWORD dwTableID; BYTE cbJuShu; BYTE cbPayWay; DWORD dwTableOwnerID; DWORD dtCreateTime; DWORD PlayerID[4]; TCHAR PlayerName[4][32]; }; struct CMD_S_RecordInfoEX { CMD_S_RecordInfo Record; INT Score[4]; DWORD Tmp[4]; }; struct CMD_GR_ClubRecord_Ack { WORD wCount; DWORD dwTableCount; DWORD dwZunShi; DWORD dwClubID; CMD_S_RecordInfo csRecordInfo[10]; }; struct CMD_GR_ClubRecord_Ack_EX { WORD wCount; DWORD dwTableCount; DWORD dwZunShi; DWORD dwClubID; CMD_S_RecordInfoEX csRecordInfo[10]; }; //俱乐部在线信息 struct CMD_S_Table_Info { DWORD dwUserID; BYTE cbNum; TCHAR szHeadUrl[256]; JN_GR_RoomListInfo room; }; struct CMD_GR_ClubOnLine_Ack { DWORD dwClubID; WORD wOnLineUserNum; WORD wTableNum; WORD wUserMessageCount; WORD wTotalUserCount; WORD wNewUserCount; WORD wTableInfoCount; CMD_S_Table_Info csTableInfo[20]; }; //俱乐部在线信息 struct CMD_S_Table_InfoEx { BYTE cbJushu; BYTE tableStatus; BYTE cbNum; BYTE tmp2; BYTE tmp3; BYTE tmp4; PlayerInfo player[5]; JN_GR_RoomListInfo room; }; struct CMD_GR_ClubOnLine_AckEx { DWORD dwClubID; WORD wQueTableNum; //缺一人桌数 WORD wWaitTableNum; //等待中桌数 WORD wPlayTableNmu; //游戏中桌数 DWORD temp; //备用 WORD wtotalTableNum; //桌子总数 DWORD tableID[200]; //桌子ID数组; }; //创建俱乐部 //删除俱乐部 //加入俱乐部 //退出俱乐部 struct CMD_GR_Club_Action_Ack1 { BYTE Result; TCHAR Message[255]; }; //修改俱乐部 //查看俱乐部 struct CMD_GR_Club_Action_Ack2 { BYTE Result; CMD_S_ClubInfo ClubInfo; TCHAR Message[255]; }; //俱乐部打样 struct CMD_GR_Club_Make_A_Sample { DWORD dwClubID; //俱乐部id BYTE IsSample; //0没打样 1打样 }; struct CMD_GR_Club_Action_Ack1Add { BYTE Result; //1表示成功 0失败 CMD_S_ClubAutoAddInfo AutoAddInfo; //额外玩法信息 TCHAR Message[255]; //错误信息 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GR_Club_Action_Ack1Add) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("俱乐部额外玩法自动开房响应->结果:%d,俱乐部:%d,额外玩法id序号:%d,状态:%d,错误信息:%s."), Result, AutoAddInfo.dwClubID, AutoAddInfo.cbWanfaId, AutoAddInfo.cbStatus, Message); #else _snprintf(pBuffer, iLen, TEXT("俱乐部额外玩法自动开房响应->结果:%d,俱乐部:%d,额外玩法id序号:%d,状态:%d,错误信息:%s."), Result, AutoAddInfo.dwClubID, AutoAddInfo.cbWanfaId, AutoAddInfo.cbStatus,Message); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; struct CMD_GR_Club_Action_Ack2Ex { BYTE TableChoiceChange; CMD_GR_Club_Action_Ack2 Ack2; }; struct CMD_GR_Club_Action_Ack2Ex2 { DWORD dwUserID; CMD_GR_Club_Action_Ack2 Ack2; }; //同意 //拒绝 //强退 struct CMD_GR_Club_Action_Ack3 { DWORD dwClubID; BYTE Result; TCHAR Message[255]; BYTE cbAgree; }; //删除 //查看 //加入 //退出 struct CMD_GR_Club_Action1 { DWORD dwClubID; }; //同意 //拒绝 //强退 struct CMD_GR_Club_Action2 { DWORD dwClubID; DWORD dwUserID; BYTE cbIsAgree; }; struct CMD_GR_UserData { BYTE newsFlag; DWORD dwUserId; //特定用户 DWORD dwClubID; TCHAR Message[255]; }; struct CMD_GR_Table_Notify { BYTE type; //0,1,2更新修改删除 DWORD tableID; DWORD clubID; }; struct CMD_GR_TableOtherInfo_Notify { DWORD ClubID; DWORD Type; WORD totalUserNum; //俱乐部总人数 1 WORD onlineUserNum; //在线人数 2 WORD totalTableNum; //总桌子数 4 WORD newMsgNum; //新消息数 8 WORD newUserNum; //会员申请数 16 WORD waitTableNum; //桌子等待中数 32 WORD playTableNum; //桌子游戏中数 }; //俱乐部战绩查询 struct CMD_GR_ClubExploits { DWORD dwClubID; DWORD PrivateTableID; //桌子号 }; //俱乐部对局数查询 struct CMD_GR_ClubPlaygames { DWORD dwClubID; //俱乐部 BYTE wType; //0顺序,1倒序 WORD StartIndex; //开始索引 BYTE mCount; //查询数据长度 WORD wDateCount; //统计天数 1,3,7 }; //俱乐部对局数查询 struct CMD_GR_ClubPlaygamesUser { DWORD dwClubID; //俱乐部 BYTE wType; //0顺序,1倒序 WORD StartIndex; //开始索引 BYTE mCount; //查询数据长度 WORD wDateCount; //统计天数 1,3,7 DWORD UserID; }; //俱乐部积分排序查询 struct CMD_GR_ClubIntegral { DWORD dwClubID;//俱乐部 WORD wType; //统计前10名或者后十名,0,1表示 WORD wDateCount;//统计天数 1,3,7 }; //俱乐部积分排序查询 struct CMD_GR_ClubIntegralUser { DWORD dwClubID;//俱乐部 WORD wType; //统计前10名或者后十名,0,1表示 WORD wDateCount;//统计天数 1,3,7 DWORD UserID; }; ////////////////////////////////////////////////////////////////////////////////// //框架命令 #define MDM_GF_FRAME 100 //框架命令 ////////////////////////////////////////////////////////////////////////////////// //框架命令 //用户命令 #define SUB_GF_GAME_OPTION 1 //游戏配置 #define SUB_GF_USER_READY 2 //用户准备 #define SUB_GF_LOOKON_CONFIG 3 //旁观配置 #define SUB_GF_USER_SHUFFLE 4 //用户下一局洗牌 #define SUB_GF_USER_SHUFFLE_ALL_ACK 5 //用户下一局洗牌 全部选择完回应 //聊天命令 #define SUB_GF_USER_CHAT 10 //语音广播 #define SUB_GF_USER_EXPRESSION 11 //用户表情 //游戏信息 #define SUB_GF_GAME_STATUS 100 //游戏状态 #define SUB_GF_GAME_SCENE 101 //游戏场景 #define SUB_GF_LOOKON_STATUS 102 //旁观状态 #define SUB_GF_GAME_SCENEING 103 //游戏中场景 #define SUB_GF_GAME_USER_DISTANCE 104 //玩家距离 //系统消息 #define SUB_GF_SYSTEM_MESSAGE 200 //系统消息 #define SUB_GF_ACTION_MESSAGE 201 //动作消息 ////////////////////////////////////////////////////////////////////////////////// //游戏配置 struct CMD_GF_GameOption { BYTE cbAllowLookon; //旁观标志 DWORD dwFrameVersion; //框架版本 DWORD dwClientVersion; //游戏版本 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GF_GameOption) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("游戏配置->旁观标志:%d,框架版本:%d,游戏版本:%d.") , cbAllowLookon, dwFrameVersion, dwClientVersion); #else _snprintf(pBuffer, iLen, TEXT("游戏配置->旁观标志:%d,框架版本:%d,游戏版本:%d.") , cbAllowLookon, dwFrameVersion, dwClientVersion); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("游戏配置"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //旁观配置 struct CMD_GF_LookonConfig { DWORD dwUserID; //用户标识 BYTE cbAllowLookon; //允许旁观 }; //旁观状态 struct CMD_GF_LookonStatus { BYTE cbAllowLookon; //允许旁观 }; //游戏环境 struct CMD_GF_GameStatus { BYTE cbGameStatus; //游戏状态 BYTE cbAllowLookon; //旁观标志 //参数转成字符串 bool ToString(TCHAR* pBuffer, int iLen, DWORD dUserID) { if (sizeof(CMD_GF_GameStatus) * 16 > iLen) return false; #ifdef _UNICODE _snwprintf(pBuffer, iLen, TEXT("游戏环境->游戏状态:%d,旁观标志:%d.") // ReSharper disable CppPrintfExtraArg ,cbGameStatus, cbAllowLookon); // ReSharper restore CppPrintfExtraArg #else _snprintf(pBuffer, iLen, TEXT("游戏环境->游戏状态:%d,旁观标志:%d.") , cbGameStatus, cbAllowLookon); #endif //mylog::ToSet(pBuffer, iLen, dUserID); return true; } //名字 bool ToName(TCHAR* pBuffer, int iLen) { TCHAR szTemp[] = _T("游戏环境"); if (TSTRINGLEN(szTemp) > iLen) return false; StringCchCopy(pBuffer, iLen, szTemp); return true; } //打印通讯日志 void ToShow(int dTablePrivate, DWORD dUserID) { TCHAR szBuffer[BUFFERLEN]; ZeroMemory(szBuffer, BUFFERLEN * sizeof(TCHAR)); if (ToString(szBuffer, BUFFERLEN, dUserID)) { mylog::OutputString(szBuffer, dTablePrivate); } } }; //s->c 用户下一局洗牌 全部选择完回应 struct USER_SHUFFLE_ALL_ACK { BYTE cbCount;// 人数 TCHAR dwUserName[4][32];//昵称 }; //用户聊天 struct CMD_GF_C_UserChat { WORD wChatLength; //信息长度 DWORD dwChatColor; //信息颜色 DWORD dwTargetUserID; //目标用户 TCHAR szChatString[LEN_USER_CHAT]; //聊天信息 }; //用户聊天 struct CMD_GF_S_UserChat { WORD wChatLength; //信息长度 DWORD dwChatColor; //信息颜色 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 TCHAR szChatString[LEN_USER_CHAT]; //聊天信息 }; //用户表情 struct CMD_GF_C_UserExpression { WORD wItemIndex; //表情索引 DWORD dwTargetUserID; //目标用户 }; //用户道具 struct CMD_GF_S_UserExpression { WORD wItemIndex; //表情索引 DWORD dwSendUserID; //发送用户 DWORD dwTargetUserID; //目标用户 }; //用户距离 struct CMD_GF_UserDistance { BYTE cbOperLocation[4]; //是否开启定位 0未开启 1开启 int dwUserDistance[6]; //玩家距离 }; ////////////////////////////////////////////////////////////////////////////////// //游戏命令 #define MDM_GF_GAME 200 //游戏命令 //笛卡尔坐标系 typedef struct tagCRDCARTESIAN{ double x; double y; double z; }CRDCARTESIAN; typedef CRDCARTESIAN *PCRDCARTESIAN; //大地坐标系 typedef struct tagCRDGEODETIC{ double longitude; double latitude; double height; }CRDGEODETIC; typedef CRDGEODETIC *PCRDGEODETIC; ////////////////////////////////////////////////////////////////////////////////// //携带信息 //其他信息 #define DTP_GR_TABLE_PASSWORD 1 //桌子密码 //用户属性 #define DTP_GR_NICK_NAME 10 //用户昵称 #define DTP_GR_GROUP_NAME 11 //社团名字 #define DTP_GR_UNDER_WRITE 12 //个性签名 //附加信息 #define DTP_GR_USER_NOTE 20 //用户备注 #define DTP_GR_CUSTOM_FACE 21 //自定头像 ////////////////////////////////////////////////////////////////////////////////// //请求错误 #define REQUEST_FAILURE_NORMAL 0 //常规原因 #define REQUEST_FAILURE_NOGOLD 1 //金币不足 #define REQUEST_FAILURE_NOSCORE 2 //积分不足 #define REQUEST_FAILURE_PASSWORD 3 //密码错误 ////////////////////////////////////////////////////////////////////////////////// //通道检测 #define MDM_GR_CHECK 999 //通道检测 ///+++新版本场馆列表 2018-3-21 #define SUB_GR_VENUE_C_INFO_LIST2 5 ///---请求 拉取场馆信息列表 #define SUB_GR_VENUE_S_INFO_LIST2 6 ///---应答 (登录成功,主动下行金币场馆列表信息) #define SUB_GR_VENUE_C_GAME_SERVER2 7 ///---请求 拉取场馆游戏服务器(返回最优的那个) #define SUB_GR_VENUE_S_GAME_SERVER2 8 ///---应答 ///+++场馆命令 #define MDM_GR_VENUE 333 #define SUB_GR_VENUE_C_GAME_SERVER 1 ///---请求 拉取场馆游戏服务器(返回最优的那个) #define SUB_GR_VENUE_S_GAME_SERVER 2 ///---应答 #define SUB_GR_VENUE_C_INFO_LIST 3 ///---请求 拉取场馆信息列表 #define SUB_GR_VENUE_S_INFO_LIST 4 ///---应答 (登录成功,主动下行金币场馆列表信息) ///+++大转盘命令 #define MDM_GF_ROULETEE 400 #define SUB_GF_ROULETEE_CONFIG 1 ///---轮盘奖品配置请求 #define SUB_GF_ROULETEE_CONFIG_ACK 2 ///---轮盘奖品配置结果 #define SUB_GF_ROULETEE_LOTTERY 3 ///---轮盘抽奖请求 #define SUB_GF_ROULETEE_LOTTERY_ACK 4 ///---轮盘抽奖结果 #define SUB_GF_LOTTERY_INFO 5 ///---查询抽奖信息 #define SUB_GF_LOTTERY_INFO_ACK 6 ///---查询抽奖信息的结果 #define SUB_GF_LOTTERY_HIS 7 ///---查询抽奖历史记录 #define SUB_GF_LOTTERY_HIS_ACK 8 ///---查询抽奖历史记录的结果 #define SUB_GF_LOTTERY_HIS_ACKEX 9 ///---查询抽奖历史记录的结果(个人) #define SUB_GF_LOTTERY_AWARD 10 //手动领奖 #define SUB_GF_LOTTERY_ADDRESS 11 //注册收件信息 //注册收件信息 struct CMD_GR_LotteryAddr { TCHAR szAddressName[20]; //收件人姓名 TCHAR szAddress[128]; //收件人地址IP TCHAR szAddrPhoneNum[11]; //收件人手机号码 CMD_GR_LotteryAddr() { memset(this, 0, sizeof(this)); } }; //客户端发送 我原封不动回复 struct CHECK { DWORD connkey; DWORD dCheckID; //检测编号 DWORD dTime[4]; //时间戳 16字节 }; //分享奖励钻石 struct CMD_GR_ShareAwardBean { DWORD dwUserID; //用户ID TCHAR szClientIp[32]; //客户端的IP CMD_GR_ShareAwardBean() { memset(this, 0, sizeof(this)); } }; //领取胜局抽奖 struct CMD_GR_GetWinDrawAward { DWORD dwUserID; //用户ID WORD wWinDrawAwardConfigID; // 领取的 胜局奖励配置ID TCHAR szClientIp[32]; //客户端的IP CMD_GR_GetWinDrawAward() { memset(this, 0, sizeof(this)); } }; //根据微信unionId获取会员绑定代理 处理结果 struct CMD_GR_GetDaiLiSaoMaResult { DWORD dwUserID; //用户ID DWORD dwBingID; //BingID }; //s->c 3-190 struct USER_SHUFFLE_ZUANSHI { DWORD dwUserZuanShi; //请求用户钻石 DWORD dwNeedZuanshi; //洗牌所需钻石 }; #pragma pack() #endif