local RoomCmd = MJFramework.MJImport("mj.luaScript.Protocol.MJCmd") local MJMessage = MJFramework.MJImport("mj.luaScript.Protocol.MJMessage") local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine") local yibinmajiangRoomInfo = import("mj_yibinmajiang.luaScript.Data.yibinmajiangRoomInfo"); local MJProtocol = MJFramework.MJFrameworkClassImprot("mj.luaScript.Protocol.MJProtocol") local Room = class("yibinmajiangRoom" , MJProtocol) function Room:initRoomInfo () Room.super.initRoomInfo(self) self.roomInfo = yibinmajiangRoomInfo.getInstance(true); self.roomInfo:reset(); end -- 视角转换 function Room:transPos(targetSeatId, seatId ) local MaxCount = self.roomInfo:getMaxPlayerCount(); local showPos = 4 local target = targetSeatId if target <= seatId then showPos = seatId - target elseif target > seatId then showPos = MaxCount - target + seatId end return showPos end -- 根据uid获取座位号 function Room:getSeatIdByUserId( nUserId ) return self:getSeatIdByViewId(self:getViewIdByUserId(nUserId)) end -- 获取房间最大玩家人数 function Room:getMaxPlayerCount() return self.roomInfo:getMaxPlayerCount(); end -- 获取房间人数 function Room:getPlayerCount() local count = 0 for k,v in pairs(self.roomInfo.memberList) do count = count + 1 end return count end function Room:cleanTingStatus() local myUserId = app.user.loginInfo.uid if self.roomInfo.memberList[myUserId] and self.roomInfo.memberList[myUserId].nTingStatus then self.roomInfo.memberList[myUserId].nTingStatus = MJDefine.MJTingStatus.NoTing end end -- 判断所有玩家是否都选择了定缺 function Room:checkIsAllChooseDingQue() local playerCount = self:getPlayerCount() local chooseQuePlayerCount = table.nums(self.roomInfo:getDingQueInfo()) or 0 if playerCount == chooseQuePlayerCount then return true else return false end end -- 抓牌,还有初始发牌,如果是初始发牌则不会有操作数据,需要借用811a协议 function Room:onBankerOutCard(status, response) logD("-------------------- 游戏庄家起手操作 ------------------------") logD("Room:onBankerOutCard(), ", table.tostring(response)) if not self.roomInfo then logD("self.roomInfo no exist,容错处理!") return end self.roomInfo:setLeaveCardNum(response.nLeaveCardNum) self.roomInfo:setNeedOutCardId(response.nUserId); local myUserId = self:getMyUserId() if response.nUserId==myUserId then self.roomInfo:setTingCards(response.pushCardTing); end -- 发送广播通知,游戏开始了 self:dispatchEvent({name = MJDefine.MJEvent.BankerOutCard ,response = response}); end -- 庄家初始操作 function Room:onGameRoundStartOperate(status, response) logD("-------------------- 庄家初始操作 ------------------------") logD("Room:onBankerOutCard(), ", table.tostring(response)) if not self.roomInfo then logD("self.roomInfo no exist,容错处理!") return end self.roomInfo:setLeaveCardNum(response.nLeaveCardNum) self.roomInfo:setNeedOutCardId(response.nUserId); local myUserId = self:getMyUserId() if response.nUserId == myUserId then self.roomInfo:setTingCards(response.pushCardTing); end -- 发送广播通知,游戏开始了 self:dispatchEvent({name = MJDefine.MJEvent.GameRoundStartOperate ,response = response}); end --断线重连 function Room:onGameReconnection(status,response) logD("===============重连成功,清空之前所有存在的队列==================") app.net:onMsgClear() app.net:onMsgPause() logD("Room:onGameReconnection(), response = ", table.tostring(response)) self:initRoomInfo(); -- 获取到的房间信息 self.roomInfo.shuffleNum = response.shuffleNum; self.roomInfo:setGameId(response.gameId); self.roomInfo:setShowTableId(response.nShowTableId); self.roomInfo:setMaxPlayerCount(response.nMaxPlayCount); self.roomInfo:setRoomOwnedUid(response.nRoomOwnedUid); self.roomInfo:setTotalGameNum(response.nTotalGameNum); self.roomInfo:setBaseChips(response.nBaseChips); self.roomInfo:setStrGameInfo(response.strGameInfo); self.roomInfo:setGameStartCount(response.nGameStartCount); self.roomInfo:setGameStatus(response.nStatus); self.roomInfo:setBankSeatId(response.nBankSeatId); self.roomInfo:setMySeatId(response.nMySeatId); self.roomInfo:setIsUserDisbandGame(response.bUserDisbandGame); self.roomInfo:setDismissStateTime(response.nDismissStateTime); self.roomInfo:setBenJinCard(response.benjinCard) self.roomInfo:setTingYongCard(response.tingyongCard) self.roomInfo:setPlayerInfos(response.playerInfos); self.roomInfo:setLeaveCards(response.leaveCards); self.roomInfo:setLeaveCardNum(#response.leaveCards); self.roomInfo:setOutCardUserId(response.outCardUserId); self.roomInfo:setOutCardSeatId(response.outCardSeatId); self.roomInfo:setLastOpCard(response.lastOpCard); self.roomInfo:setOperates(response.operates); self.roomInfo:setIsNeedOutCard(response.isNeedOutCard); self.roomInfo:setStopFlag(response.stopFlag); self.roomInfo:setResultInfos(response.resultInfos); -- 胡牌信息 self.roomInfo:setOpsCntMapString(response.opsCntMapString); self.roomInfo:setTingStatus(response.tingStatus==255 and 0 or 1) self.roomInfo:setTingCards(response.tingCard); self.roomInfo:setNeedOutCardId(response.needOutCardId); if self.roomInfo:getGameStartCount() > 0 then self.roomInfo:setMaxPlayerCount(table.nums(response.playerInfos)); end -- 桌子上其他玩家的信息 for k,v in pairs(response.playerInfos) do -- 补充外部的数据,没有在playerinfo里面发送,而是在外部的 v.Datas.huCardsInfo = response.resultInfos[k] or {} -- 胡牌内容 self:setMemberInfo(v) self.dismissInfo[v.nUserId] = v.nDisbandStatus --这里只记录,暂时没用到。可能战绩回放的时候是需要用的 -- local cardData = self:serverCardToMyCard(v.handCard) -- self.roomInfo.memberList[v.nUserId].cardList = {} -- self.roomInfo.memberList[v.nUserId].cardList = cardData if v.nUserId == self:getMyUserId() then self.roomInfo:setScoreInfo(v.scoreInfo); end -- 更新定缺数据 if v.dingquetype ~= -1 then self.roomInfo:setDingQueInfo(v.nUserId, v.dingquetype) end end local myUserId = self:getMyUserId(); self.roomInfo.memberList[myUserId].nTingStatus = response.tingStatus; --[[ --结算信息 for k,v in pairs(response.resultInfos) do --胡牌者的用户id self.roomInfo.memberList[v.nUserId].nUserId=v.nUserId --1胡牌 2听叫 0默认 self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输 self.roomInfo.memberList[v.nUserId].result=v.result -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输 self.roomInfo.memberList[v.nUserId].huType=v.huType --胡的牌 self.roomInfo.memberList[v.nUserId].huCard=v.huCard --胡牌顺序 self.roomInfo.memberList[v.nUserId].huOrder=v.huOrder --谁点的炮 self.roomInfo.memberList[v.nUserId].dpSeatId=v.dpSeatId --根次数 self.roomInfo.memberList[v.nUserId].genCount=v.genCount --self.roomInfo.memberList[v.nUserId].isXiQian=v.isXiQian end ]] self:addExtendData(response) local extInfo = json.decode(response.ext or "") local uid = self:getMyUserId() if extInfo and type(extInfo) == 'table' then --local myInfo = extInfo[tostring(uid)] --self.roomInfo.hosting = myInfo.hosted or 0--托管状态 self.roomInfo:setQuickStartInfo(extInfo.faststart); if extInfo.offlinetime then for nUserId,offlinetime in pairs(extInfo.offlinetime) do self.roomInfo.memberList[tonumber(nUserId)].offlinetime = offlinetime or 0 end end end --更新自己的数据 -- local myUserId = app.user.loginInfo.uid -- self.cards[myUserId] = self.roomInfo.memberList[myUserId].handCards print("self.cards[myUserId]:"..table.tostring(self.cards[myUserId])) -- 更新椅子号 self:updateUserSeateShowId() local gameRule = self.roomInfo:getGameRuleByKey("gamerule"); -- 发送通知 self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = app.gameId, gameType = gameRule}) end function Room:addExtendData(response) end function Room:setMemberInfo(v) Room.super.setMemberInfo(self,v) self.roomInfo.memberList[v.nUserId].fanshu = v.fanshu --是否大叫 self.roomInfo.memberList[v.nUserId].isDj = v.isDaJiao --是否花猪 self.roomInfo.memberList[v.nUserId].isHz = v.isHuaZhu --点炮次数 self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount --点炮顺序 self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder --是否操作过飘 self.roomInfo.memberList[v.nUserId].isPiao = v.isPiao --飘的选择 self.roomInfo.memberList[v.nUserId].piaostate = v.piaostate -- 是否可以定缺 self.roomInfo.memberList[v.nUserId].isDingQue = v.isDingQue -- 定缺类型 self.roomInfo.memberList[v.nUserId].dingquetype = v.dingquetype -- 定缺最优选 self.roomInfo.memberList[v.nUserId].nice_choose = v.nice_choose self.roomInfo.memberList[v.nUserId].result = v.result or 0 self.roomInfo.memberList[v.nUserId].huType = v.huType or 0 self.roomInfo.memberList[v.nUserId].ganginfo = v.gangInfo or "" self.roomInfo.memberList[v.nUserId].operates = v.operates or {}; self.roomInfo.memberList[v.nUserId].scoreInfo = v.scoreInfo or {}; -- 没有这个数据 self.roomInfo.memberList[v.nUserId].reserve = v.reserve or ''; -- 没有这个数据 self.roomInfo.memberList[v.nUserId].huCards = {}; self.roomInfo.memberList[v.nUserId].paiType = 0 self.roomInfo.memberList[v.nUserId].subPaiType = 0 self.roomInfo.memberList[v.nUserId].genCount = v.genCount -- 根 self.roomInfo.memberList[v.nUserId].gangCount = v.gangCount -- 杠 self.roomInfo.memberList[v.nUserId].isOperated = v.isOperated or '' -- 断线重连前操作过的数据 -- 插入胡牌,这些还是用的花麻将多胡,之后要删除jxtd if v.huCardsInfo.huCard then -- 胡牌数据格式 local temp = { huCard = v.huCardsInfo.huCard, huType = v.huCardsInfo.huType, dpSeatId = v.huCardsInfo.dpId, } table.insert(self.roomInfo.memberList[v.nUserId].huCards, temp) self.roomInfo.memberList[v.nUserId].paiType = v.huCardsInfo.paiType self.roomInfo.memberList[v.nUserId].subPaiType = v.huCardsInfo.subPaiType self.roomInfo.memberList[v.nUserId].huType = v.huCardsInfo.huType self.roomInfo.memberList[v.nUserId].huIndex = v.huCardsInfo.huIndex self.roomInfo.memberList[v.nUserId].dpId = v.huCardsInfo.dpId -- 放炮玩家(seatid) self.roomInfo.memberList[v.nUserId].genCount = v.huCardsInfo.genCount self.roomInfo.memberList[v.nUserId].gangCount = v.huCardsInfo.gangCount end -- 保存胡牌顺序信息 self.roomInfo:setHuIndexInfo(v.nUserId, v.huCardsInfo.huIndex or 0) -- dump(self.roomInfo.memberList, 'aaaaaaaaaaaaaaaaaaaaaaa') -- for k, card in pairs(v.huCards) do -- table.insert(self.roomInfo.memberList[v.nUserId].huCards, card); -- end --[[if self.roomInfo.tableGroupCards then for i,k in pairs(self.roomInfo.tableGroupCards) do if v.nUserId == k.nUserId then self.roomInfo.memberList[v.nUserId].gruoupCards = k.operates end end else self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards end--]] end -- 胡牌通知 --[[ 需注意huCards是个胡牌数组,针对某些游戏单个玩家可以多胡(血流等),服务端一般不会发这个数据,由客户端这边自己拼接 拼接完之后,将拼接好后的字段赋值给huCard ]] function Room:onHuResponse(status,response) logD("-------------------- 通知胡 ------------------------") logD("Room:onHuResponse(), response = ", table.tostring(response)) if not self.roomInfo then logD("self.roomInfo no exist,容错处理!") return end if self.roomInfo.memberList[response.nUserId] then local dpSeatId = self:getSeatIdByUserId(response.dpUserId) -- 胡牌数据格式 local huCard = { huCard = response.huCard, huType = response.huType, dpSeatId = dpSeatId, } response.huCard = huCard -- 定义的数据 self.roomInfo.memberList[response.nUserId].nUserId = response.nUserId self.roomInfo.memberList[response.nUserId].huType = response.huType self.roomInfo.memberList[response.nUserId].fanshu = response.fanshu self.roomInfo.memberList[response.nUserId].paiType = response.paiType self.roomInfo.memberList[response.nUserId].subPaiType = response.subPaiType self.roomInfo.memberList[response.nUserId].huCard = response.huCard self.roomInfo.memberList[response.nUserId].isQiangGng = response.isQiangGng self.roomInfo.memberList[response.nUserId].isGspHu = response.isGspHu self.roomInfo.memberList[response.nUserId].isGskhHu = response.isGskhHu self.roomInfo.memberList[response.nUserId].dpId = dpSeatId self.roomInfo.memberList[response.nUserId].huIndex = response.huIndex self.roomInfo.memberList[response.nUserId].ext = json.decode(response.ext or '') self.roomInfo.memberList[response.nUserId].huCards = self.roomInfo.memberList[response.nUserId].huCards or {}; table.insert(self.roomInfo.memberList[response.nUserId].huCards, response.huCard); self.roomInfo:setScoreInfo(response.scoreInfo); -- 保存胡牌顺序信息 self.roomInfo:setHuIndexInfo(response.nUserId, response.huIndex) end self:dispatchEvent({name = MJDefine.MJEvent.HuResponse,response = response}); end -- 小局结算 function Room:onGameXiaoJuResponse(status, response) logD("-------------------- 小局结算 ------------------------") if not self.roomInfo then logD("self.roomInfo no exist,容错处理!") return end self.roomInfo:setStopFlag(response.stopFlag) -- 一局结束的原因 self.roomInfo:setStrGameInfo(response.strGameInfo) -- 房间信息 self.roomInfo:setIsGameOver(response.isGameOver) -- 是否大局结束,结束是1 self.roomInfo:setOpsCntMapString(response.opsCntMapString) -- 操作统计 -- 玩家信息 for k,v in pairs(response.allPlayerInfo) do if self.roomInfo.memberList[v.nUserId] then -- 胡牌数据格式(拼接) local huCard = { huCard = v.huCard, huType = v.huType, dpSeatId = v.dpId, } v.huCard = huCard self.roomInfo.memberList[v.nUserId].nUserId = v.nUserId -- 玩家的id self.roomInfo.memberList[v.nUserId].nTurnScore = v.nTurnScore -- 当前局分数 self.roomInfo.memberList[v.nUserId].nTotalMoney = v.nTotalMoney -- 总分 self.roomInfo.memberList[v.nUserId].fanshu = v.fanshu -- 番数 self.roomInfo.memberList[v.nUserId].result = v.result -- 玩家本局输赢情况(0为默认, 1为胡, 2为听叫) self.roomInfo.memberList[v.nUserId].paiType = v.paiType -- 胡牌类型 self.roomInfo.memberList[v.nUserId].subPaiType = v.subPaiType -- 胡牌子类型(0x01:本金;0x02:接本金) self.roomInfo.memberList[v.nUserId].operates = v.operates -- 组合牌 self.roomInfo.memberList[v.nUserId].handCards = v.handCards -- 玩家手牌 self.roomInfo.memberList[v.nUserId].outCards = v.outCards -- 桌面弃牌 self.roomInfo.memberList[v.nUserId].huCard = v.huCard -- 胡的牌 self.roomInfo.memberList[v.nUserId].huIndex = v.huIndex -- 胡牌顺序 self.roomInfo.memberList[v.nUserId].huType = v.huType -- 自摸还是点炮胡 self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount -- 点炮次数 self.roomInfo.memberList[v.nUserId].dpId = v.dpId -- 谁点炮给该玩家(座位号seatId) self.roomInfo.memberList[v.nUserId].dpIndex = v.dpIndex -- 点炮顺序(后3个bit位标识顺序) self.roomInfo.memberList[v.nUserId].isDj = v.isDaJiao -- 是否大叫 self.roomInfo.memberList[v.nUserId].isHz = v.isHuaZhu -- 是否花猪 self.roomInfo.memberList[v.nUserId].genCount = v.genCount -- 根次数 self.roomInfo.memberList[v.nUserId].gangCount = v.gangCount -- 杠次数 -- 胡牌总数据 self.roomInfo.memberList[v.nUserId].huCards = {} -- 这里做一次初始化处理,不然正常流程通知胡后,在进入小结算会添加相同的胡牌 table.insert(self.roomInfo.memberList[v.nUserId].huCards, v.huCard); end if v.nUserId == self:getMyUserId() then self.roomInfo:setScoreInfo(v.scoreInfo); end -- 保存胡牌顺序信息 self.roomInfo:setHuIndexInfo(v.nUserId, v.huIndex) end logD("Room:onGameXiaoJuResponse() :", table.tostring(response)) self:dispatchEvent({name = MJDefine.MJEvent.GameXiaoJuResponse,response = response}); end -- 游戏正式开始 function Room:onGameStartResponse(status, response) logD("-------------------- 新的一局开始了 ------------------------") if not self.roomInfo then logD("self.roomInfo no exist,容错处理!") return end logD("Room:onGameStartResponse(), ", table.tostring(response)) self.roomInfo:setGameStartCount(response.nGameStartCount); self.roomInfo:setTotalGameNum(response.nTotalGameNum); self.roomInfo:setRoomOwnedUid(response.nRoomOwnedUid); self.roomInfo:setBankSeatId(response.nBankSeatId); self.roomInfo:setLeaveCardNum(MJDefine.totalCard); -- 清空上一局的手牌信息和胡牌信息 self.cards = {} for k, v in pairs(self.roomInfo.memberList) do v.huCards = {}; end self.roomInfo:setScoreInfo(nil); self.roomInfo:setBenJinCard(nil) self.roomInfo:setTingYongCard(nil) self.roomInfo:setDingQueInfo(nil, nil) self.roomInfo.shuffleList = response.shuffleList; self.roomInfo.shuffleNum = response.shuffleNum; -- 发送广播通知,游戏开始了 self:dispatchEvent({name = MJDefine.MJEvent.GameStartResponse}); end --大局结算 function Room:onGameDaJuResponse(status, response) logD("-------------------- 大局结算 ------------------------") if not self.roomInfo then logD("self.roomInfo no exist,容错处理!") return end for k,v in pairs(response.nTotalPlayerInfos) do if self.roomInfo.memberList[v.nUserId] then --self.roomInfo.memberList[v.nUserId].nTotalInfo=json.decode(v.nTotalInfo) self.roomInfo.memberList[v.nUserId].nTotalScore = v.nTotalScore self.roomInfo.memberList[v.nUserId].roomCard = v.roomCard self.roomInfo.memberList[v.nUserId].costCard = v.requireCard end end --房卡消耗 --[[for k,v in pairs(response.costCardInfos) do if self.roomInfo.memberList[v.nUserId] then self.roomInfo.memberList[v.nUserId].costCard = v.costCard end end--]] self.roomInfo:setStopFlag(response.stopFlag); --解散状态 local disbandStatus = json.decode(response.strDisbandStatus) for k,v in pairs(disbandStatus) do self.dismissInfo[tonumber(k)] = tonumber(v) end --结束时间 self.roomInfo:setEndTime(response.nEndTime); logD("Room:onGameDaJuResponse() :", table.tostring(response)) self:dispatchEvent({name = MJDefine.MJEvent.GameDaJuResponse ,response = response}); end function Room:pushTing(status,response) logD("-------------------- Room:pushTing ------------------------") logD("Room:pushTing(), ", table.tostring(response)) if not self.roomInfo then print("容错处理") return end self.roomInfo:setTingCards(response.pushTing); self:dispatchEvent({name = MJDefine.MJEvent.OutCardTings}) end -- 玩家进入桌子成功 function Room:onSitDownSuccessResponse(status, response) logD("--------------------玩家进入桌子成功--------------------") logD("Room:onSitDownSuccessResponse(), ", table.tostring(response)) app.net:onMsgClear() app.net:onMsgPause() -- 记录当前桌子号 self:initRoomInfo() -- 获取到的房间信息 -- self.gameId = response.gameId self.roomInfo:setGameId(response.gameId); self.roomInfo:setShowTableId(response.nShowTableId); self.roomInfo:setMaxPlayerCount(response.nMaxPlayCount); self.roomInfo:setRoomOwnedUid(response.nRoomOwnedUid); self.roomInfo:setTotalGameNum(response.nTotalGameNum); self.roomInfo:setStrGameInfo(response.strGameInfo); self.roomInfo:setGameStartCount(response.nGameStartCount or 0); self.roomInfo:setLeaveCardNum(response.nLeaveCardNum or 0); -- 桌子上其他玩家的信息 for k,v in pairs(response.memberList) do self.roomInfo.memberList[v.nUserId] = v self.roomInfo.memberList[v.nUserId].nTingStatus=MJDefine.MJTingStatus.NoTing end -- 更新椅子号 self:updateUserSeateShowId() logD("Room:onSitDownSuccessResponse() roomInfo = ", table.tostring(self.roomInfo)) -- 发送通知 local gamerule = self.roomInfo:getGameRuleByKey("gamerule"); self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = response.gameId, gameType = gamerule}) end function Room:onWaitOperate(status, response) logD("Room:onWaitOperate(), ", table.tostring(response)) self:dispatchEvent({name = MJDefine.MJEvent.WaitOperate ,response = response}); end -- 通知开始飘 function Room:onStartPiao(status, response) logD("--------------------开始飘--------------------") logD("Room:onStartPiao(), ", table.tostring(response)) self:dispatchEvent({name = MJDefine.MJEvent.StartPiao ,response = response}); end function Room:onPiaoResponse(status, response) logD("--------------------飘结果--------------------") logD("Room:onPiaoResponse(), ", table.tostring(response)) if self.roomInfo.memberList[response.nUserId] then self.roomInfo.memberList[response.nUserId].piaostate = response.piaostate end self:dispatchEvent({name = MJDefine.MJEvent.PiaoResponse ,response = response}); end -- 其他玩家退出房间 function Room:onOtherLogoutResponse(status, response) logD("Room:onOtherLogoutResponse(), response = ", table.tostring(response)) if not self.roomInfo then logD("self.roomInfo no exist,容错处理!") return end local nUserId = response.nUserId local nSeatShowId = self.userList[nUserId] if self.roomInfo.isGameOver ~= 1 then local memberList = self.roomInfo.memberList memberList[nUserId]=nil end self:updateGpsUserInfo(nil,false) self.roomInfo.nStartGameUid = response.nStartGameUid logD("30000000--runOtherLogoutResponse") self:dispatchEvent({name = MJDefine.MJEvent.OtherLogoutResponse , nUserId = nUserId, nSeatShowId = nSeatShowId}); end function Room:onOperationCodeSuccess(status, response) Room.super.onOperationCodeSuccess(self, status, response); local scoreInfo = response.scoreInfo; self.roomInfo:setScoreInfo(scoreInfo); end -- 服务器下发玩家的准备状态 function Room:onUserReadyResponse(status, response) Room.super.onUserReadyResponse(self, status, response); if response.nUserId == self:getMyUserId() then self.roomInfo:setScoreInfo(nil); end end -- 开始定缺 function Room:onDingQueStart(status, response) logD("--------------------开始定缺--------------------") logD("Room:onDingQueStart(), ", table.tostring(response)) self:dispatchEvent({name = MJDefine.MJEvent.DingQueStart, response = response}) end -- 定缺结果 function Room:onDingQueResponseResult(status, response) logD("--------------------定缺结果--------------------") logD("Room:onDingQueResult(), ", table.tostring(response)) for i, v in pairs(response.DingQueData) do self.roomInfo:setDingQueInfo(v.nUserId, v.result) end self:dispatchEvent({name = MJDefine.MJEvent.DingQueResponse, response = response}) end -- 广播游戏庄家 function Room:onBankReponse(status, response) end -- 广播本金牌 function Room:onBenJinCardResponse(status, response) logD("--------------------广播本金牌--------------------") logD("Room:onBenJinCardResponse(), ", table.tostring(response)) self.roomInfo:setBenJinCard(response.benjinCard) self.roomInfo:setTingYongCard(response.tingCard) self:dispatchEvent({name = MJDefine.MJEvent.BenJinStart, response = response}) end -- 提操作成功后收到操作 function Room:onNoticeTiAfterOp(status, response) logD("--------------------提操作成功后收到操作--------------------") logD("Room:onNoticeTiAfterOp(), ", table.tostring(response)) self:dispatchEvent({name = MJDefine.MJEvent.NoticeTiAfterOp, response = response}) end function Room:onQiangDuanOperates(status, response) logD("Room:onQiangDuanOperates(), ", table.tostring(response)) self:dispatchEvent({name = MJDefine.MJEvent.QiangDuanOperates ,response = response}); end function Room:ctor(net) Room.super.ctor(self, net) self:defRequestEvent() -- 注册客户端向服务端发送的请求事件 self:defResponseEvent() -- 注册服务端返回到客户端的返回事件 end -- 注册请求事件 function Room:defRequestEvent() -- 请求飘[0x8204] self:defMsgFunc{name = MJDefine.MJEvent.PiaoRequest, cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO, sender = MJMessage.PiaoRequest} -- 请求定缺[0x8206] self:defMsgFunc{name = MJDefine.MJEvent.DingQueRequest, cmd = RoomCmd.GAME_COMMAND_NOTICE_SELECT_QUE, sender = MJMessage.DingQueRequest} -- 请求桌子信息[0x802a],用于切换2d/3d self:defMsgFunc{name = MJDefine.MJEvent.GetTableInfo, cmd = RoomCmd.GAME_COMMAND_GET_TABLE_INFO} -- 待定 end -- 注册返回事件 function Room:defResponseEvent() -- 通知玩家漂操作[0x8204] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO, reader = MJMessage.PiaoStart, func = handler(self, self.onStartPiao)} -- 广播玩家飘结果[0x8205] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_PIAO_RESULT, reader = MJMessage.PiaoResponse, func = handler(self, self.onPiaoResponse)} -- 广播游戏庄家[0x8208] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_BANK, reader = MJMessage.BankResponse, func = handler(self, self.onBankReponse)} -- 广播本金牌和听用牌[0x8209] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_JING_CARD, reader = MJMessage.BenJinCard, func = handler(self, self.onBenJinCardResponse)} -- 通知玩家开始定缺[0x8206] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTICE_SELECT_QUE, reader = MJMessage.DingQueStart, func = handler(self, self.onDingQueStart)} -- 广播玩家定缺结果[0x8207] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_SELECT_QUE_RESULT, reader = MJMessage.DingQueResponse, func = handler(self, self.onDingQueResponseResult)} -- 通知等待其他玩家操作[0x8116] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_WAIT_OPREATE, reader = MJMessage.WaitOperate, func = handler(self, self.onWaitOperate)} -- 广播玩家胡[0x8130] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_HU, reader = MJMessage.HuResponse, func = handler(self, self.onHuResponse)} -- 玩家出牌/操作后的听牌信息[0x8132] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_OUT_CARD_TING_INFO, reader = MJMessage.OutCardTingInfo, func = handler(self, self.pushTing)} -- 广播桌子上所有玩家庄家起手操作[0x811a] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_START_ROUND_OPERATE, reader = MJMessage.BankerOutCard,func = handler(self , self.onGameRoundStartOperate)}; -- 提操作成功后收到操作[0x811C] self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTICE_TI_AFTER_OP, reader = MJMessage.NoticeTiAfterOp,func = handler(self , self.onNoticeTiAfterOp)}; -- 待定 self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_QIANG_DUAN_OPREATE,reader = MJMessage.QiangDuanOperates,func = handler(self,self.onQiangDuanOperates)} end return Room;