--五人斗地主消息协议格式 local zgwrDdzMessage = {} -- 玩家加入房间成功玩家信息 zgwrDdzMessage.PlayerInfo = defClass("UserInfo" -- 玩家ID ,defVar("userId", VT_Int, 0) -- 座位ID ,defVar("seatId", VT_Int, 0) -- //在线状态 0离线 1在线 ,defVar("onlineStatus", VT_UChar, 0) -- //是否正在玩 -1: 用户站起 0: 用户坐下 1: 准备状态 2: 正在玩 ,defVar("playFlag", VT_UChar, 0) -- 用户信息 头像昵称 ,defVar("jsonInfo", VT_String, "") -- 总的积分 ,defVar("totalScore", VT_Int, "") ) -- 玩家离线状态 zgwrDdzMessage.onLintState = defClass("onLintState" -- 玩家ID ,defVar("userId", VT_Int, 0) -- 状态 ,defVar("jsonInfo", VT_String, "") ) -- 空类,用于服务器下发不带任何参数的情况 zgwrDdzMessage.EmptyContent = defClass("EmptyContent" ) -- 玩家加入房间成功返回消息 zgwrDdzMessage.GameLoginSuccess = defClass("GameLoginSuccess" -- 游戏ID ,defVar("nGameId", VT_Short, 0) -- 房间id ,defVar("nShowTableId", VT_Int, 0) -- 房间最大人数 ,defVar("nMaxPlayCount", VT_Int, 0) -- 房主id ,defVar("nRoomOwnedUid", VT_Int, 0) -- 当前局数 --,defVar("nGameStartCount", VT_Short, 0) -- 总局数 ,defVar("nTotalGameNum", VT_Short, 0) -- 游戏信息 ,defVar("nGameInfo", VT_String, "") -- ,defVar("nPlayerCount", VT_Short, 0) -- 玩家信息 ,defVar("players", VT_Vector(zgwrDdzMessage.PlayerInfo), {}) ) -- 加入房间失败返回 --[[错误类型信息: ERROR_TABLE_MAX_COUNT = 2, //桌子人数已经够了 ERROR_NOT_ENOUGH_MONEY = 3, //用户钱数不够 ERROR_TOO_MUCH_MONEY = 4, //房间钱数过多 ERROR_WRONG_UID = 5, //无效的用户ID ERROR_TABLE_NOT_EXIST = 6, //桌子不存在 ERROR_OTHER = 7, //系统错误 ERROR_UID_CANNOT_ENTER = 8, //游戏开始禁止加入游戏 ]] zgwrDdzMessage.GameLoginFailed = defClass("GameLoginFailed" ,defVar("nErrNo", VT_UChar, 0) ) -- 收到其他玩家加入房间的信息 zgwrDdzMessage.GameSitDownResponse = defClass("GameSitDownResponse" -- 用户uid , defVar("userId", VT_Int, 0) -- 用户座位id, 从0编码, 最大为m_nMaxPlayCount-1 , defVar("seatId", VT_Int, 0) -- 用户信息 , defVar("userInfo", VT_String, "") -- 用户总的分数 , defVar("nTotalMoney", VT_Long, 0) -- 用户标志 , defVar("nPlayerFlag", VT_Short, 0) -- 开始游戏ID , defVar("nStartGameUid", VT_Int, 0) ) -- 广播玩家准备 zgwrDdzMessage.GameUserReady = defClass("GameUserReady" -- 准备玩家ID ,defVar("userId", VT_Int, 0) ) -- 玩家进入房间 zgwrDdzMessage.GameUserEnter = defClass("GameUserEnter" -- 玩家id ,defVar("userId", VT_Int, 0) ,defVar("seatId", VT_Int, 0) ,defVar("jsonInfo", VT_String, "") --,defVar("playFlag", VT_Short, 0) --道具信息 --,defVar("strExtInfo", VT_String, "") ) -- 玩家离开房间 zgwrDdzMessage.GameUserLogoutSuc = defClass("GameUserLogout" -- 玩家积分 ,defVar("totalMoney", VT_Long, 0) --用户的房卡信息,格式"10,5", 以逗号分隔,第一个表示历史房卡数量, 第二个表示当前房卡数量 ,defVar("extInfo", VT_String, "") -- 是否回到大厅 ,defVar("logoutFlag", VT_Short, 0) -- 桌子结束原因 ,defVar("tableOverFlag", VT_Short, 0) ) -- 广播桌子其他玩家离开 zgwrDdzMessage.GameBroadcastUserLogout = defClass("GameBroadcastUserLogout" -- 玩家ID ,defVar("userId", VT_Int, 0) --,defVar("unuse", VT_Int, 0) ) -- 解散房间请求 zgwrDdzMessage.DismissRequest = defClass("DismissRequest" -- 玩家操作 1: 表示发起解散 2:同意解散 3:不同意解散 , defVar("operateType", VT_UChar, 0) ) -- 每个玩家对于解散房间的处理 zgwrDdzMessage.UserDismissResult = defClass("UserDismissResult" -- nUserId , defVar("nUserId", VT_Int, 0) -- 0: 未做任何操作 1: 请求解散 2: 同意解散 3:不同意解散 , defVar("dismissState", VT_UChar, 0) ) -- 解散房间请求的结果 zgwrDdzMessage.DismissResult = defClass("DismissResult" -- 错误码: -- 0:成功 -- 1:operateType取值范围不对 -- 2:当前没人发起解散 -- 3:已经有人申请解散 , defVar("errorCode", VT_Short, 0) -- 玩家操作 , defVar("operateType", VT_Int, 0) -- 桌子上其他用户数量 , defVar("memberList", VT_VectorToMap(zgwrDdzMessage.UserDismissResult, "nUserId")) -- 剩余解散超时时间 , defVar("timeLeft", VT_Short, 0) ) -- 服务器广播每个玩家对解散房间的处理 zgwrDdzMessage.DismissResponse = defClass("DismissResponse" -- nUserId , defVar("nUserId", VT_Int, 0) -- 1: 表示发起解散 2:同意解散 3:不同意解散 , defVar("operateType", VT_UChar, 0) -- 剩余解散超时时间 , defVar("timeLeft", VT_Short, 0) ) -- 收到其他玩家掉线的信息 zgwrDdzMessage.OtherDroppedResponse = defClass("OtherDroppedResponse" -- 用户uid , defVar("nUserId", VT_Int, 0) -- 0: 用户掉线回来, 1: 用户已经掉线 , defVar("nDroppedStatus", VT_Short, 0) ) -------------------------------------------------------------------------- -- 游戏处理逻辑协议 -------------------------------------------------------------------------- -- 当桌子上所有玩家都准备后,服务器广播本局游戏开始 zgwrDdzMessage.GameStartUser = defClass("GameStartUser" ,defVar("nUserId", VT_Int, 0) ,defVar("nSeatId", VT_Int, 0) ) zgwrDdzMessage.GameBroadcastGameStart = defClass("GameBroadcastGameStart" -- 当前局数 ,defVar("gameStartCount", VT_Short, 0) ,defVar("totalGamenum", VT_Short, 0) ,defVar("roomOwnedUid", VT_Int, 0) --手动开始游戏UID(用不上) ,defVar("startGameUid", VT_Int, 0) --庄家ID ,defVar("bankSeatId", VT_Short, 0) ,defVar("players", VT_Vector(zgwrDdzMessage.GameStartUser), {}) ) -- 给玩家发牌 zgwrDdzMessage.GameSendCards = defClass("GameSendCards" --,defVar("bankerSeat", VT_Int, 0) ,defVar("userId", VT_Int, 0) ,defVar("cards", VT_Vector(VT_UChar), {}) ) -- 服务器返回最佳提示牌组 zgwrDdzMessage.GameReturnTips = defClass("GameReturnTips" ,defVar("userId", VT_Int, 0) ,defVar("cards", VT_Vector(VT_UChar), {}) ) -- 客户端请求出牌 zgwrDdzMessage.GameOutCards = defClass("GameOutCards" --0 pass 1正常出牌 ,defVar("opType", VT_UChar, 0) --出的牌 癞子保持0x5D ,defVar("byOutCard", VT_Vector(VT_UChar), {}) --出的牌 癞子代替具体的牌(0x6X) ,defVar("byOutCardD", VT_Vector(VT_UChar), {}) ) -- 客户端请求可出的牌的牌组 zgwrDdzMessage.GetOutCards = defClass("GetOutCards" --出的牌 癞子保持0x5D ,defVar("byOutCard", VT_Vector(VT_UChar), {}) ) -- 客户端请求可出的牌的牌组结果 zgwrDdzMessage.GetOutCardsResult = defClass("GetOutCardsResult" ,defVar("userId", VT_Int, 0) --可出的牌的组合 癞子保持0x5D ,defVar("byOutCard", VT_Vector(zgwrDdzMessage.GetOutCards), {}) ) -- 服务器返回出牌错误 zgwrDdzMessage.GameOutCardsErr = defClass("GameOutCardsErr" ,defVar("userId", VT_Int, 0) ,defVar("errFlag", VT_Short, 0) ) zgwrDdzMessage.GameBroadcastOutCards = defClass("GameBroadcastOutCards" --操作玩家ID ,defVar("userId", VT_Int, 0) --是否显示地主标签0不显示 1显示 ,defVar("showDzFlag", VT_UChar, 0) ,defVar("opType", VT_Short, 0)--0:pass 1:接牌 ,defVar("cardType", VT_Short, 0) ,defVar("leftNum", VT_Short, 0)--出牌者剩余多少张牌 ,defVar("cards", VT_Vector(VT_UChar), {}) ) -- 游戏单局结算 zgwrDdzMessage.UserResult = defClass("UserResult" ,defVar("userId", VT_Int, 0) ,defVar("seatId", VT_Short, 0) ,defVar("turnScore", VT_String, 0) ,defVar("totalScore", VT_String, 0) --是否加倍 ,defVar("isMult", VT_Int, 0) --玩家信息 ,defVar("playInfo", VT_String, "") --剩余手牌数 ,defVar("leftCards", VT_Vector(VT_UChar), {}) ) zgwrDdzMessage.GameBroadcastResult = defClass("GameBroadcastResult" --最先出完牌的玩家id ,defVar("winUserId", VT_Int, 0) --地主id ,defVar("lordId", VT_Int, 0) --暗地主id ,defVar("darkId", VT_Int, 0) --基础倍数 ,defVar("baseMult", VT_Short, 0) --涨水倍数 ,defVar("curMult", VT_Short, 0) --4张牌炸倍数 ,defVar("fourMult", VT_Short, 0) --2王炸倍数 ,defVar("twoKMult", VT_Short, 0) --8张牌炸倍数 ,defVar("eightMult", VT_Short, 0) --4王炸倍数 ,defVar("fourKMult", VT_Short, 0) --12张牌炸倍数 ,defVar("twelveMult", VT_Short, 0) --6王炸倍数 ,defVar("sixKMult", VT_Short, 0) --是否春天 1:春天 0:什么都不是 ,defVar("spring", VT_Short, 0) --时间(用不着) ,defVar("time", VT_Int, 0) --当前局数 ,defVar("gameStartCount", VT_Int, 0) --游戏是否结束 0:未结束;1:结束 ,defVar("isGameOver", VT_Short, 0) ,defVar("players", VT_Vector(zgwrDdzMessage.UserResult), {}) --是否自吃 ,defVar("isSelfEat", VT_Short, 0) ) -- 游戏大结算 zgwrDdzMessage.GameOverItem = defClass("GameOverItem" ,defVar("userId", VT_Int, 0) ,defVar("totalScore", VT_String, 0) --玩家信息 ,defVar("jsonInfo", VT_String, "") --保留 json格式 ,defVar("extString", VT_String, "") ) zgwrDdzMessage.GameGameOver = defClass("GameGameOver" --房主id ,defVar("roomOwnedUid", VT_Int, 0) --游戏结束原因 ,defVar("stopFlag", VT_Int, 0) --结束时间 ,defVar("endTime", VT_Long, 0) ,defVar("players", VT_Vector(zgwrDdzMessage.GameOverItem), {}) ) -- 中途恢复 --[[GAME_STATE_INIT, //游戏准备状态 GAME_STATE_SEND_HAND_CARD, //发牌 GAME_STATE_OUT_CARD, //打牌 GAME_STATE_ROUND_OVER, //游戏一局结束 GAME_STATE_GAME_OVER, //游戏结束 ]] zgwrDdzMessage.GameRecoverItem = defClass("GameRecoverItem" ,defVar("userId", VT_Int, 0) ,defVar("seatId", VT_Short, 0) ,defVar("playFlag", VT_Short, 0)--是否正在玩 -1: 用户站起 0: 用户坐下 1: 准备状态 2: 正在玩 ,defVar("disbandStatus", VT_UChar, 0)--玩家解散状态 0:初始状态, 1:发起解散 2: 同意解散 3:不同意解散 ,defVar("onlineStatus", VT_UChar, 0)--是否在线 0:离线 1:在线 ,defVar("jsonInfo", VT_String, "") ,defVar("turnScore", VT_String, 0)--本轮积分 ,defVar("totalScore", VT_String, 0)--总积分 ,defVar("bAskedLord", VT_UChar, 0)--是否叫过地主操作 0:未叫地主,1:等待叫地主,2:操作过叫地主 ,defVar("bAskDouble", VT_UChar, 0)--是否加过倍操作 0:未操作加倍,1:等待加倍,2:操作过加倍 ,defVar("bKnowDarkLord", VT_UChar, 0)--是否知道暗地主玩家 ,defVar("nMult", VT_Int, 0)--玩家加倍数0不加倍1加倍 ,defVar("handCards", VT_Vector(VT_UChar), {}) ) -- 快速开始玩家对应状态 zgwrDdzMessage.FastStartGameUserItem = defClass("FastStartGameUserItem" ,defVar("userId", VT_Int, 0) ,defVar("fastStartStatus", VT_Int, 0) ) --断线重连 zgwrDdzMessage.GameGameRecover = defClass("GameGameRecover" --房间最大人数 ,defVar("maxPlayCount", VT_Short, 0) --房主uid ,defVar("roomOwnedUid", VT_Int, 0) --开始游戏的uid ,defVar("startGameUid", VT_Int, 0) --当前局数 ,defVar("gameStartCount", VT_Short, 0) ,defVar("totalGamenum", VT_Short, 0) --游戏信息 ,defVar("gameInfo", VT_String, 0) --是否申请解散状态 ,defVar("bUserDisbandGame", VT_UChar, 0) --桌子状态 ,defVar("gameStatus", VT_Short, 0) ,defVar("leftTimeOut", VT_Int, 0) --桌子号 ,defVar("nShowTableId", VT_Int, 0) --总倍数 ,defVar("nHMIShowMult", VT_Int, 0) --基础倍数 ,defVar("nBaseMult", VT_Int, 0) --游戏倍数(涨水) ,defVar("nGameCurMult", VT_Int, 0) --四张炸倍数 ,defVar("fourBomb", VT_Int, 0) --双王炸倍数 ,defVar("twoKingBomb", VT_Int, 0) --八张炸倍数 ,defVar("eightBomb", VT_Int, 0) --四王炸倍数 ,defVar("fourKingBomb", VT_Int, 0) --12张炸倍数 ,defVar("twelveBomb", VT_Int, 0) --6王炸倍数 ,defVar("sixKingBomb", VT_Int, 0) --16张炸倍数 --,defVar("sixteenBomb", VT_Int, 0) --游戏底分 ,defVar("nCurBaseScore", VT_Int, 0) --地主ID ,defVar("nLordId", VT_Int, 0) --暗地主ID ,defVar("nDarkLordId", VT_Int, 0) --暗地主牌 ,defVar("nDarkLordCard", VT_UChar, 0) --底牌 ,defVar("diCards", VT_Vector(VT_UChar), {}) --当前桌上最后一手牌是否显示地主标签0不显示1显示 ,defVar("lastShowDzFlag", VT_UChar, 0) --当前桌上最后一手牌出牌者id ,defVar("lastOpUid", VT_Int, 0) --当前桌上最后一手牌牌型 ,defVar("lastOpType", VT_Short, 0) --当前桌上最后一手牌 ,defVar("lastOutCards", VT_Vector(VT_UChar), {}) ,defVar("recoverItem", VT_Vector(zgwrDdzMessage.GameRecoverItem), {}) ,defVar("curOpUid", VT_Int, 0) --出牌状态:0-pass 1-可以出牌 2-必须出牌 ,defVar("outCardStates", VT_UChar, 0) --最先出完牌的玩家id ,defVar("winUserId", VT_Int, 0) --是否春天 1:春天 0:什么都不是 ,defVar("spring", VT_Short, 0) -- 暗地主可选的牌 , defVar("canSelectCards", VT_Vector(VT_UChar), {}) --是否自吃 ,defVar("isSelfEat", VT_Short, 0) ) -- 0X8109 GAME_CAMMAND_BROADCAST_SCORES -- 更新玩家分数 zgwrDdzMessage.GameUserScoreItem = defClass("GameUserScoreItem" ,defVar("userId", VT_Int, 0) ,defVar("totalScore", VT_Int, 0) ) zgwrDdzMessage.GameUpdateScore = defClass("GameUpdateScore" ,defVar("players", VT_Vector(zgwrDdzMessage.GameUserScoreItem), {}) ) -- 广播玩家轮次 zgwrDdzMessage.GameBroadcastTurns = defClass("GameBroadcastTurns" ,defVar("userId", VT_Int, 0) ,defVar("opType", VT_Short, 0) ) --快速开始请求 zgwrDdzMessage.FastStartRequest = defClass("FastStartRequest" , defVar("result", VT_UChar, 1) ) --快速开始请求结果 zgwrDdzMessage.FastStartRequestResult = defClass("FastStartRequestResult" , defVar("result", VT_Short, -1) ) -- 服务器广播快速开始状态 zgwrDdzMessage.FastPlayer = defClass("FastPlayer" , defVar("nUserId", VT_Int, 0) --1:发起申请 2:同意 3:拒绝 4:未操作 5:有人进来或者退出 6:超时未处理 , defVar("nStatus", VT_UChar, 0) ) -- 服务器广播快速开始状态 zgwrDdzMessage.FastStartStatus = defClass("FastStartStatus" --发起玩家id , defVar("nUserId", VT_Int, 0) --1:发起申请 2:同意 3:拒绝 4:未操作 5:有人进来或者退出 6:超时未处理 , defVar("nStatus", VT_Short, 0) --玩家操作状态列表 , defVar("pList", VT_Vector(zgwrDdzMessage.FastPlayer), {}) --剩余时间 , defVar("timeOut", VT_Short, 0) ) -- 游戏快速开始 zgwrDdzMessage.FastSuccessPlayer = defClass("FastSuccessPlayer" , defVar("nUserId", VT_Int, 0) , defVar("nSeatId", VT_UChar, 0) ) -- 游戏快速开始玩家 zgwrDdzMessage.UpdateSeatIds = defClass("UpdateSeatIds" , defVar("pList", VT_Vector(zgwrDdzMessage.FastSuccessPlayer), {}) ) --server收到0x8060协议后,广播当前桌子上所有用户 zgwrDdzMessage.ServerChangeUserInfo = defClass("ServerChangeUserInfo" --更新信息的用户uid , defVar("uid", VT_Int, -1) --用户信息 , defVar("userInfo", VT_String, "") --保留字段,暂不使用 , defVar("reserved", VT_String, "") ) -- 更新游戏状态 zgwrDdzMessage.UpdateGameStatus = defClass("UpdateGameStatus" -- 游戏状态 WRDDZRoomConfig.GameStatus ,defVar("gameStatus", VT_Int, -1) ) -- 更新游戏倍数 zgwrDdzMessage.UpdateGameMult = defClass("UpdateGameMult" -- 游戏状态 WRDDZRoomConfig.UpdateGameMult ,defVar("gameMult", VT_Int, -1) ) -- 通知玩家抢地主 zgwrDdzMessage.NoticeGrabLord = defClass("NoticeGrabLord" -- ,defVar("userId", VT_Int, -1) ) -- 玩家请求抢地主 zgwrDdzMessage.GrabLordRequest = defClass("GrabLordRequest" -- 0 不抢 1抢地主 , defVar("type", VT_UChar, 1) ) -- 广播抢地主结果 zgwrDdzMessage.BroadGrabLordResult = defClass("BroadGrabLordResult" ,defVar("userId", VT_Int, -1) -- 0 不抢 1抢地主 , defVar("opType", VT_UChar, 1) ) -- 将底牌发给地主 zgwrDdzMessage.SendDiCardsToLord = defClass("SendDiCardsToLord" ,defVar("userId", VT_Int, -1) -- 底牌 ,defVar("cards", VT_Vector(VT_UChar), {}) ) -- 通知玩家加倍 zgwrDdzMessage.BroadNoticeDouble = defClass("BroadNoticeDouble" -- 0 表示广播闲家加倍 1 地主反加倍 ,defVar("isLord", VT_UChar, 1) -- 地主uID ,defVar("lordUserId", VT_Int, -1) ) -- 玩家请求加倍 zgwrDdzMessage.AddMultRequest = defClass("AddMultRequest" -- 0不加倍 1加倍 , defVar("mult", VT_UChar, -1) ) -- 广播玩家加倍结果 zgwrDdzMessage.AddMultResult = defClass("AddMultResult" , defVar("userId", VT_Int, -1) -- 0不加倍 1加倍 , defVar("opMult", VT_UChar, -1) ) -- 广播地主选牌(暗地主) zgwrDdzMessage.BroadLordSelectCard = defClass("BroadLordSelectCard" -- 庄家ID , defVar("userId", VT_Int, -1) -- 可选的牌 , defVar("cards", VT_Vector(VT_UChar), {}) ) -- 选牌 zgwrDdzMessage.Card = defClass("Card" -- 选择的牌 , defVar("card", VT_UChar, -1) ) -- 告知暗地主玩家 zgwrDdzMessage.NoticeAnLordPlayer = defClass("NoticeAnLordPlayer" -- 暗地主id , defVar("userId", VT_Int, -1) -- 暗地主座位ID , defVar("seatId", VT_Short, -1) ) -- 玩家出牌轮次广播 zgwrDdzMessage.BroadPlayerTurn = defClass("BroadPlayerTurn" -- 当前轮到出牌的玩家 , defVar("userId", VT_Int, -1) -- 0:pass;1:可以出牌;2:必须出牌(不能pass) , defVar("opType", VT_Short, -1) ) --托管状态 zgwrDdzMessage.HostingResponseEntity = defClass("HostingResponseEntity" ,defVar("nUserId",VT_Int,0) --1.托管 0取消托管 ,defVar("status",VT_UChar,0) ,defVar("ext", VT_String, "") ) --托管状态(0x8133) zgwrDdzMessage.HostingResponse = defClass("HostingResponse" ,defVar("userList", VT_Vector(zgwrDdzMessage.HostingResponseEntity), {}) ) -- 托管请求(0x8134) zgwrDdzMessage.HostingRequest = defClass("HostingRequest" , defVar("status", VT_Short, 0) ) return zgwrDdzMessage