您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

597 行
22 KiB

  1. local RoomCmd=MJFramework.MJImport("mj.luaScript.Protocol.MJCmd")
  2. local MJMessage=MJFramework.MJImport("mj.luaScript.Protocol.MJMessage")
  3. local MJDefine=MJFramework.MJImport("mj.luaScript.MJDefine")
  4. local MJProtocol=MJFramework.MJFrameworkClassImprot("mj.luaScript.Protocol.MJProtocol")
  5. local Room = class("NeiJiangMJProtocol" , MJProtocol)
  6. -- 视角转换
  7. function Room:transPos(targetSeatId, seatId )
  8. local MaxCount = self.roomInfo.nMaxPlayCounts
  9. local showPos = 4
  10. local target = targetSeatId
  11. if target <= seatId then
  12. showPos = seatId - target
  13. elseif target > seatId then
  14. showPos = MaxCount - target + seatId
  15. end
  16. return showPos
  17. end
  18. -- 根据uid获取座位号
  19. function Room:getSeatIdByUserId( nUserId )
  20. return self:getSeatIdByViewId(self:getViewIdByUserId(nUserId))
  21. end
  22. -- 获取房间最大玩家人数
  23. function Room:getMaxPlayerCount()
  24. return self.roomInfo.nMaxPlayCount
  25. end
  26. -- 获取房间人数
  27. function Room:getPlayerCount()
  28. local count = 0
  29. for k,v in pairs(self.roomInfo.memberList) do
  30. count = count + 1
  31. end
  32. return count
  33. end
  34. function Room:cleanTingStatus()
  35. local myUserId = app.user.loginInfo.uid
  36. if self.roomInfo.memberList[myUserId] and self.roomInfo.memberList[myUserId].nTingStatus then
  37. self.roomInfo.memberList[myUserId].nTingStatus = MJDefine.MJTingStatus.NoTing
  38. end
  39. end
  40. function Room:onTingCardResult( status, response )
  41. logD("Room:onTingCardResult(), ", table.tostring(response))
  42. print("--------onTingCardResult--------")
  43. if not self.roomInfo then
  44. logD("self.roomInfo no exist,容错处理!")
  45. return
  46. end
  47. self:dispatchEvent({name = MJDefine.MJEvent.TingResult,response = response})
  48. end
  49. function Room:onTingCardStatus(status, response)
  50. logD("Room:onTingCardStatus(), ", table.tostring(response))
  51. if not self.roomInfo then
  52. logD("self.roomInfo no exist,容错处理!")
  53. return
  54. end
  55. local myUserId = app.user.loginInfo.uid
  56. self.roomInfo.memberList[myUserId].nTingStatus=response.nTingStatus
  57. self:dispatchEvent({name = MJDefine.MJEvent.TingSatus})
  58. end
  59. -- 游戏发牌结果
  60. function Room:onGameSendCardResponse(status, response)
  61. logD("-------------------- 游戏发牌 ------------------------")
  62. if not self.roomInfo then
  63. logD("self.roomInfo no exist,容错处理!")
  64. return
  65. end
  66. --[[ -- 用户uid
  67. , defVar("nUserId", VT_Int, 0)
  68. -- 庄家第一张摸的牌
  69. , defVar("nbankFirstGrabCard", VT_UChar, 0)
  70. -- 牌值类型列表
  71. , defVar("cardList", VT_Vector(CardSendListData), {})--]]
  72. logD("Room:onGameSendCardResponse(), ", table.tostring(response))
  73. -- self.roomInfo.nbankFirstGrabCard = response.nbankFirstGrabCard
  74. --目前server只发自己过来,后续战绩回放考虑到会发所有玩家来,故以userid为key于扩展
  75. -- local cardData = self:serverCardToMyCard(response.cardList)
  76. -- logD("Room:onGameSendCardResponse : "..table.tostring(cardData))
  77. for k,v in pairs(response.playerCards) do
  78. self.roomInfo.memberList[v.nUserId].handCards = v.handCards
  79. self.roomInfo.memberList[v.nUserId].isTing = v.isTing == 1;
  80. end
  81. -- self.cards[response.nUserId] = cardData
  82. -- 发送广播通知,发牌开始了
  83. self:dispatchEvent({name = MJDefine.MJEvent.GameSendCardResponse});
  84. end
  85. function Room:onBankerOutCard(status, response)
  86. logD("-------------------- 游戏庄家起手操作------------------------")
  87. if not self.roomInfo then
  88. logD("self.roomInfo no exist,容错处理!")
  89. return
  90. end
  91. self.roomInfo.nLeaveCardNum = response.nLeaveCardNum
  92. self.roomInfo.needOutCardId = response.nUserId
  93. --logD("Room:onBankerOutCard(), ", table.tostring(response))
  94. local myUserId = self:getMyUserId()
  95. self.roomInfo.tings={}
  96. if response.nUserId==myUserId then
  97. -- for k,v in pairs(response.pushCardTing) do
  98. -- self.roomInfo.tings[v.outCard]=v.tingCards.Datas
  99. -- end
  100. self.roomInfo.tings = response.pushCardTing
  101. --[[--这里自己摸牌后,不隐藏听牌提示
  102. self.roomInfo.memberList[myUserId].nTingStatus=MJDefine.MJTingStatus.NoTing
  103. dump(self.roomInfo.memberList[myUserId])
  104. self:dispatchEvent({name = MJDefine.MJEvent.TingSatus})]]
  105. end
  106. -- 发送广播通知,游戏开始了
  107. self:dispatchEvent({name = MJDefine.MJEvent.BankerOutCard ,response = response});
  108. end
  109. --断线重连
  110. function Room:onGameReconnection(status,response)
  111. logD("===============重连成功,清空之前所有存在的队列==================")
  112. app.net:onMsgClear()
  113. app.net:onMsgPause()
  114. logD("Room:onGameReconnection(), response = ", table.tostring(response))
  115. self:initRoomInfo();
  116. -- 获取到的房间信息
  117. self.roomInfo.shuffleNum = response.shuffleNum;
  118. self.roomInfo.gameId = response.gameId
  119. self.roomInfo.nShowTableId = response.nShowTableId
  120. self.roomInfo.nMaxPlayCount = response.nMaxPlayCount
  121. self.roomInfo.nRoomOwnedUid = response.nRoomOwnedUid
  122. self.roomInfo.nTotalGameNum = response.nTotalGameNum
  123. self.roomInfo.nBaseChips = response.nBaseChips
  124. self.roomInfo.strGameInfo = response.strGameInfo
  125. self.roomInfo.nGameStartCount = response.nGameStartCount
  126. self.roomInfo.nStatus = response.nStatus
  127. self.roomInfo.nBankSeatId = response.nBankSeatId
  128. self.roomInfo.nMySeatId = response.nMySeatId
  129. self.roomInfo.nBaoZiAddFan = response.nBaoZiAddFan
  130. self.roomInfo.bUserDisbandGame = response.bUserDisbandGame
  131. self.roomInfo.nDismissStateTime = response.nDismissStateTime
  132. self.roomInfo.leaveCards = response.leaveCards
  133. self.roomInfo.nLeaveCardNum = #self.roomInfo.leaveCards
  134. self.roomInfo.outCardUserId = response.outCardUserId
  135. self.roomInfo.outCardSeatId = response.outCardSeatId
  136. self.roomInfo.lastOpCard = response.lastOpCard
  137. self.roomInfo.operates = response.operates
  138. self.roomInfo.isNeedOutCard = response.isNeedOutCard
  139. self.roomInfo.needOutCardId = response.needOutCardId
  140. --self.roomInfo.lastOutCard = response.lastOutCard
  141. self.roomInfo.stopFlag = response.stopFlag
  142. self.roomInfo.playerInfos = response.playerInfos
  143. --胡牌玩家列表
  144. self.roomInfo.resultInfos = response.resultInfos
  145. self.roomInfo.opsCntMapString = response.opsCntMapString
  146. self.roomInfo.tingStatus = response.tingStatus --服务器0为没听 1为听
  147. self.roomInfo.tings = response.tingCard
  148. self.roomInfo.diceNum = response.diceNum;
  149. if self.roomInfo.nGameStartCount > 0 then
  150. self.roomInfo.nMaxPlayCount = table.nums(response.playerInfos)
  151. end
  152. -- 桌子上其他玩家的信息
  153. for k,v in pairs(response.playerInfos) do
  154. self:setMemberInfo(v)
  155. self.dismissInfo[v.nUserId] = v.nDisbandStatus
  156. --这里只记录,暂时没用到。可能战绩回放的时候是需要用的
  157. -- local cardData = self:serverCardToMyCard(v.handCard)
  158. -- self.roomInfo.memberList[v.nUserId].cardList = {}
  159. -- self.roomInfo.memberList[v.nUserId].cardList = cardData
  160. end
  161. local myUserId = self:getMyUserId();
  162. self.roomInfo.memberList[myUserId].nTingStatus = response.tingStatus;
  163. --结算信息
  164. for k,v in pairs(response.resultInfos) do
  165. --胡牌者的用户id
  166. self.roomInfo.memberList[v.nUserId].nUserId=v.nUserId
  167. --1胡牌 2听叫 0默认
  168. self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus
  169. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  170. self.roomInfo.memberList[v.nUserId].result=v.result
  171. -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输
  172. self.roomInfo.memberList[v.nUserId].huType=v.huType
  173. -- 子胡牌类型,天胡 or 地胡
  174. self.roomInfo.memberList[v.nUserId].subHuType = v.subHuType;
  175. --胡的牌
  176. self.roomInfo.memberList[v.nUserId].huCard=v.huCard
  177. --胡牌顺序
  178. self.roomInfo.memberList[v.nUserId].huOrder=v.huOrder
  179. --谁点的炮
  180. self.roomInfo.memberList[v.nUserId].dpSeatId=v.dpSeatId
  181. --根次数
  182. self.roomInfo.memberList[v.nUserId].genCount=v.genCount
  183. -- 是否绝张
  184. self.roomInfo.memberList[v.nUserId].bIsJueZhang = v.bIsJueZhang;
  185. -- 是否卡二条
  186. self.roomInfo.memberList[v.nUserId].bIsKaErTiaoHu = v.bIsKaErTiaoHu;
  187. -- 是否海底捞月
  188. self.roomInfo.memberList[v.nUserId].bIsHaiDiLaoYue = v.bIsHaiDiLaoYue;
  189. -- 是否海底捞
  190. self.roomInfo.memberList[v.nUserId].bIsHaiDiPao = v.bIsHaiDiPao;
  191. -- 是否杠上开花
  192. self.roomInfo.memberList[v.nUserId].bGangShangKaiHua = v.bGangShangKaiHua;
  193. -- 是否杠上炮
  194. self.roomInfo.memberList[v.nUserId].bGangShangPao = v.bGangShangPao;
  195. -- 是否抢杠胡
  196. self.roomInfo.memberList[v.nUserId].bQiangGangHu = v.bQiangGangHu;
  197. -- 扩展信息
  198. self.roomInfo.memberList[v.nUserId].extInfo = v.extInfo;
  199. end
  200. self:addExtendData(response)
  201. local extInfo = json.decode(response.extJson or "")
  202. local uid = self:getMyUserId()
  203. if extInfo and type(extInfo) == 'table' then
  204. --local myInfo = extInfo[tostring(uid)]
  205. --self.roomInfo.hosting = myInfo.hosted or 0--托管状态
  206. self.roomInfo.quickStartInfo = extInfo.faststart
  207. if extInfo.offlinetime then
  208. for nUserId,offlinetime in pairs(extInfo.offlinetime) do
  209. self.roomInfo.memberList[tonumber(nUserId)].offlinetime = offlinetime or 0
  210. end
  211. end
  212. end
  213. --更新自己的数据
  214. -- local myUserId = app.user.loginInfo.uid
  215. -- self.cards[myUserId] = self.roomInfo.memberList[myUserId].handCards
  216. print("self.cards[myUserId]:"..table.tostring(self.cards[myUserId]))
  217. -- 更新椅子号
  218. self:updateUserSeateShowId()
  219. local jsonInfo = json.decode(self.roomInfo.strGameInfo)
  220. -- 发送通知
  221. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = app.gameId, gameType = jsonInfo.gamerule})
  222. end
  223. function Room:addExtendData(response)
  224. end
  225. function Room:setMemberInfo(v)
  226. Room.super.setMemberInfo(self,v)
  227. self.roomInfo.memberList[v.nUserId].fanshu = v.fanshu
  228. --是否大叫
  229. self.roomInfo.memberList[v.nUserId].isDj = v.isDj
  230. --是否花猪
  231. self.roomInfo.memberList[v.nUserId].isHz = v.isHz
  232. --点炮次数
  233. self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount
  234. --点炮顺序
  235. self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder
  236. -- --是否已爆牌
  237. -- self.roomInfo.memberList[v.nUserId].isBaoPai = v.isBaoPai
  238. -- --是否可以爆牌
  239. -- self.roomInfo.memberList[v.nUserId].canBaoPai = v.canBaoPai
  240. self.roomInfo.memberList[v.nUserId].result = v.result or 0
  241. self.roomInfo.memberList[v.nUserId].huType = v.huType or 0
  242. -- 报叫状态
  243. self.roomInfo.memberList[v.nUserId].nBaoCardState = v.nBaoCardState;
  244. -- 飘状态
  245. self.roomInfo.memberList[v.nUserId].nPiaoState = v.nPiaoState;
  246. -- 一般高
  247. self.roomInfo.memberList[v.nUserId].nGeneralHigh = v.nGeneralHigh;
  248. -- 报叫反查
  249. self.roomInfo.memberList[v.nUserId].nBaoRersaState = v.nBaoRersaState;
  250. --[[if self.roomInfo.tableGroupCards then
  251. for i,k in pairs(self.roomInfo.tableGroupCards) do
  252. if v.nUserId == k.nUserId then
  253. self.roomInfo.memberList[v.nUserId].gruoupCards = k.operates
  254. end
  255. end
  256. else
  257. self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards
  258. end--]]
  259. end
  260. function Room:onHuResponse(status,response)
  261. logD("--------------------鬼麻將 通知胡 ------------------------")
  262. logD("Room:onHuResponse(), response = ", table.tostring(response))
  263. if not self.roomInfo then
  264. logD("self.roomInfo no exist,容错处理!")
  265. return
  266. end
  267. if self.roomInfo.memberList[response.nUserId] then
  268. self.roomInfo.memberList[response.nUserId].nUserId = response.nUserId
  269. self.roomInfo.memberList[response.nUserId].huCard = response.huCard
  270. self.roomInfo.memberList[response.nUserId].isQiangGng = response.isQiangGng
  271. self.roomInfo.memberList[response.nUserId].isGspHu = response.isGspHu
  272. self.roomInfo.memberList[response.nUserId].isGskhHu = response.isGskhHu
  273. self.roomInfo.memberList[response.nUserId].redRealCard = response.redRealCard
  274. end
  275. self:dispatchEvent({name = MJDefine.MJEvent.HuResponse,response = response});
  276. end
  277. -- 小局结算
  278. function Room:onGameXiaoJuResponse(status, response)
  279. logD("--------------------鬼麻將 小局结算 ------------------------")
  280. if not self.roomInfo then
  281. logD("self.roomInfo no exist,容错处理!")
  282. return
  283. end
  284. -- 一局结束的原因
  285. self.roomInfo.stopFlag=response.stopFlag
  286. -- 房间信息
  287. self.roomInfo.strGameInfo=response.strGameInfo
  288. ---self.roomInfo.resultInfos = response.allPlayerInfo
  289. --玩家信息
  290. for k,v in pairs(response.allPlayerInfo) do
  291. if self.roomInfo.memberList[v.nUserId] then
  292. self.roomInfo.memberList[v.nUserId].nUserId = v.nUserId
  293. --当前局分数
  294. self.roomInfo.memberList[v.nUserId].nTurnScore=v.nTurnScore
  295. --总分
  296. self.roomInfo.memberList[v.nUserId].nTotalMoney=v.nTotalMoney
  297. --番数
  298. self.roomInfo.memberList[v.nUserId].fanshu=v.fanshu
  299. self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus
  300. -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输
  301. self.roomInfo.memberList[v.nUserId].huType=v.huType
  302. if v.gruoupCards then
  303. for _,group in ipairs(v.gruoupCards) do
  304. group.targetSeatId = self:getSeatIdByUserId(v.nUserId)
  305. end
  306. end
  307. self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards
  308. self.roomInfo.memberList[v.nUserId].handCards = v.handCards
  309. self.roomInfo.memberList[v.nUserId].outCards = v.outCards
  310. self.roomInfo.memberList[v.nUserId].huCard = v.huCard
  311. --胡牌顺序
  312. self.roomInfo.memberList[v.nUserId].huOrder = v.huOrder
  313. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  314. self.roomInfo.memberList[v.nUserId].result=v.result
  315. -- 子胡牌类型,天胡 or 地胡
  316. self.roomInfo.memberList[v.nUserId].subHuType = v.subHuType;
  317. --点炮次数
  318. self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount
  319. --谁点炮
  320. self.roomInfo.memberList[v.nUserId].dpSeatId = v.dpSeatId
  321. --点炮顺序
  322. self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder
  323. --是否大叫
  324. self.roomInfo.memberList[v.nUserId].isDj = v.isDj
  325. --是否花猪
  326. self.roomInfo.memberList[v.nUserId].isHz = v.isHz
  327. --根次数
  328. self.roomInfo.memberList[v.nUserId].genCount = v.genCount
  329. -- 报叫状态
  330. self.roomInfo.memberList[v.nUserId].nBaoCardState = v.nBaoCardState;
  331. -- 飘状态
  332. self.roomInfo.memberList[v.nUserId].nPiaoState = v.nPiaoState;
  333. -- 一般高
  334. self.roomInfo.memberList[v.nUserId].nGeneralHigh = v.nGeneralHigh;
  335. -- 报叫反查
  336. self.roomInfo.memberList[v.nUserId].nBaoRersaState = v.nBaoRersaState;
  337. -- 是否绝张
  338. self.roomInfo.memberList[v.nUserId].bIsJueZhang = v.bIsJueZhang;
  339. -- 是否卡二条
  340. self.roomInfo.memberList[v.nUserId].bIsKaErTiaoHu = v.bIsKaErTiaoHu;
  341. -- 是否海底捞月
  342. self.roomInfo.memberList[v.nUserId].bIsHaiDiLaoYue = v.bIsHaiDiLaoYue;
  343. -- 是否海底捞
  344. self.roomInfo.memberList[v.nUserId].bIsHaiDiPao = v.bIsHaiDiPao;
  345. -- 是否杠上开花
  346. self.roomInfo.memberList[v.nUserId].bGangShangKaiHua = v.bGangShangKaiHua;
  347. -- 是否杠上炮
  348. self.roomInfo.memberList[v.nUserId].bGangShangPao = v.bGangShangPao;
  349. -- 是否抢杠胡
  350. self.roomInfo.memberList[v.nUserId].bQiangGangHu = v.bQiangGangHu;
  351. -- 扩展信息
  352. self.roomInfo.memberList[v.nUserId].extInfo = v.extInfo;
  353. end
  354. --[[self.roomInfo.resultInfos[v.nUserId].nUserId = v.nUserId
  355. self.roomInfo.resultInfos[v.nUserId].huType=v.huType
  356. --根次数
  357. self.roomInfo.resultInfos[v.nUserId].genCount = v.genCount
  358. --胡牌顺序
  359. self.roomInfo.resultInfos[v.nUserId].huOrder = v.huOrder
  360. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  361. self.roomInfo.resultInfos[v.nUserId].result=v.result
  362. self.roomInfo.resultInfos[v.nUserId].isXiQian=v.isXiQian]]--
  363. end
  364. -- self.roomInfo.playerInfos",VT_Vector(message.XiaojuPlayerInfo),{})
  365. --是否大局结束,结束是1
  366. self.roomInfo.isGameOver=response.isGameOver
  367. --操作统计
  368. self.roomInfo.opsCntMapString=response.opsCntMapString
  369. logD("NeiJiangMJProtocol:onGameXiaoJuResponse() :", table.tostring(response))
  370. self:dispatchEvent({name = MJDefine.MJEvent.GameXiaoJuResponse,response = response});
  371. end
  372. --大局结算
  373. function Room:onGameDaJuResponse(status, response)
  374. logD("-------------------- 大局结算 ------------------------")
  375. if not self.roomInfo then
  376. logD("self.roomInfo no exist,容错处理!")
  377. return
  378. end
  379. for k,v in pairs(response.nTotalPlayerInfos) do
  380. if self.roomInfo.memberList[v.nUserId] then
  381. --self.roomInfo.memberList[v.nUserId].nTotalInfo=json.decode(v.nTotalInfo)
  382. self.roomInfo.memberList[v.nUserId].nTotalScore = v.nTotalScore
  383. self.roomInfo.memberList[v.nUserId].roomCard = v.roomCard
  384. end
  385. end
  386. --房卡消耗
  387. for k,v in pairs(response.costCardInfos) do
  388. if self.roomInfo.memberList[v.nUserId] then
  389. self.roomInfo.memberList[v.nUserId].costCard = v.costCard
  390. end
  391. end
  392. self.roomInfo.stopFlag = response.stopFlag
  393. --解散状态
  394. local disbandStatus = json.decode(response.strDisbandStatus)
  395. for k,v in pairs(disbandStatus or {}) do
  396. self.dismissInfo[tonumber(k)] = tonumber(v)
  397. end
  398. --结束时间
  399. self.roomInfo.nEndTime = response.nEndTime or os.time()
  400. logD("Room:onGameDaJuResponse() :", table.tostring(response))
  401. self:dispatchEvent({name = MJDefine.MJEvent.GameDaJuResponse ,response = response});
  402. end
  403. function Room:pushTing(status,response)
  404. logD("-------------------- Room:pushTing ------------------------")
  405. logD("Room:pushTing(), ", table.tostring(response))
  406. if not self.roomInfo then
  407. print("容错处理")
  408. return
  409. end
  410. self.roomInfo.tings={}
  411. for k,v in pairs(response.pushTing) do
  412. self.roomInfo.tings=response.pushTing
  413. --self.roomInfo.tings[v.outCard]=v.tingCards.Datas
  414. end
  415. self:dispatchEvent({name = MJDefine.MJEvent.OutCardTings})
  416. end
  417. -- 玩家进入桌子成功
  418. function Room:onSitDownSuccessResponse(status, response)
  419. logD("--------------------玩家进入桌子成功--------------------")
  420. logD("Room:onSitDownSuccessResponse(), ", table.tostring(response))
  421. app.net:onMsgClear()
  422. app.net:onMsgPause()
  423. -- 记录当前桌子号
  424. self:initRoomInfo()
  425. -- 获取到的房间信息
  426. -- self.gameId = response.gameId
  427. self.roomInfo.gameId = response.gameId
  428. self.roomInfo.nShowTableId = response.nShowTableId
  429. self.roomInfo.nMaxPlayCount = response.nMaxPlayCount
  430. self.roomInfo.nRoomOwnedUid = response.nRoomOwnedUid
  431. self.roomInfo.nTotalGameNum = response.nTotalGameNum
  432. self.roomInfo.strGameInfo = response.strGameInfo
  433. self.roomInfo.nGameStartCount = response.nGameStartCount or 0
  434. self.roomInfo.nLeaveCardNum = response.nLeaveCardNum or 0
  435. -- 桌子上其他玩家的信息
  436. for k,v in pairs(response.memberList) do
  437. self.roomInfo.memberList[v.nUserId] = v
  438. -- self.roomInfo.memberList[v.nUserId].nTingStatus=MJDefine.MJTingStatus.NoTing
  439. end
  440. -- 更新椅子号
  441. self:updateUserSeateShowId()
  442. logD("Room:onSitDownSuccessResponse() roomInfo = ", table.tostring(self.roomInfo))
  443. -- 发送通知
  444. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = self.roomInfo.gameId, gameType = self.roomInfo.strGameInfo.gamerule})
  445. end
  446. function Room:onWaitOperate(status, response)
  447. logD("Room:onWaitOperate(), ", table.tostring(response))
  448. self:dispatchEvent({name = MJDefine.MJEvent.WaitOperate ,response = response});
  449. end
  450. function Room:onQiangDuanOperates(status, response)
  451. logD("Room:onQiangDuanOperates(), ", table.tostring(response))
  452. self:dispatchEvent({name = MJDefine.MJEvent.QiangDuanOperates ,response = response});
  453. end
  454. -- 广播摇骰子结果
  455. function Room:onRollDiceBroadcast (status, response)
  456. self.roomInfo.diceNum = response.diceNum;
  457. self:dispatchEvent({name = MJDefine.MJEvent.RollDiceBroadcast, response = response.diceNum});
  458. end
  459. -- 广播开始飘
  460. function Room:onPiaoBroadcast( status, response )
  461. logD("Room:onPiaoBroadcast", table.tostring(response));
  462. self:dispatchEvent({name = MJDefine.MJEvent.PiaoBroadcast ,response = response});
  463. end
  464. -- 广播飘的结果
  465. function Room:onPiaoResponse( status, response )
  466. logD("Room:onPiaoResponse", table.tostring(response));
  467. self:dispatchEvent({name = MJDefine.MJEvent.PiaoResponse, response = response});
  468. end
  469. --[[/**
  470. * 通知玩家开始报叫
  471. * 只有庄家报叫才会收到这个消息
  472. * 区分其他玩家是否报叫,要从发牌协议中判断,有一个是否可以报叫的字段
  473. * @param status
  474. * @param response
  475. * @return
  476. */--]]
  477. function Room:onBaoJiaoBroadcast( status, response )
  478. logD("Room:onBaoJiaoBroadcast", table.tostring(response));
  479. response.isMySelf = response.userId == self:getMyUserId();
  480. self:dispatchEvent({name = MJDefine.MJEvent.BaoJiaoBroadcast ,response = response});
  481. end
  482. --[[/**
  483. * 广播玩家报叫结果
  484. * @param status
  485. * @param response
  486. * @return
  487. */--]]
  488. function Room:onBaoJiaoResponse( status, response )
  489. logD("Room:onBaoJiaoResponse", table.tostring(response));
  490. local userId = response.userId;
  491. self.roomInfo.memberList[userId].nBaoCardState = response.nBaoCardState;
  492. self:dispatchEvent({name = MJDefine.MJEvent.BaoJiaoResponse ,response = response});
  493. end
  494. function Room:ctor(net)
  495. Room.super.ctor(self , net);
  496. -- 请求飘操作
  497. self:defMsgFunc{name = MJDefine.MJEvent.PiaoRequest, cmd = RoomCmd.GAME_COMMAND_REQUEST_SELECT_PIAO, sender = MJMessage.PiaoRequest};
  498. -- 请求报叫操作
  499. self:defMsgFunc{name = MJDefine.MJEvent.BaoJiaoRequest, cmd = RoomCmd.GAME_COMMAND_REQUEST_BAO_JIAO, sender = MJMessage.BaoJiaoRequest};
  500. --玩家出牌的听牌信息
  501. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_OUT_CARD_TING_INFO,reader = MJMessage.OutCardTingInfo,func = handler(self,self.pushTing)}
  502. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_HU,reader = MJMessage.HuRespone,func = handler(self,self.onHuResponse)}
  503. --通知等待操作
  504. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_WAIT_OPREATE,reader = MJMessage.WaitOperate,func = handler(self,self.onWaitOperate)}
  505. --通知抢断操作
  506. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_QIANG_DUAN_OPREATE,reader = MJMessage.QiangDuanOperates,func = handler(self,self.onQiangDuanOperates)}
  507. -- 广播摇骰子
  508. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_ROLL_DICE, reader = MJMessage.RollDiceBroadcast, func = handler(self, self.onRollDiceBroadcast)};
  509. -- 广播玩家飘操作
  510. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_SELECT_PIAO, reader = MJMessage.PiaoBroadcast, func = handler(self, self.onPiaoBroadcast)}
  511. -- 广播某个玩家操作了飘
  512. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_SELECT_PIAO, reader = MJMessage.PiaoResponse, func = handler(self, self.onPiaoResponse)}
  513. -- 通知报叫操作
  514. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTICE_CAN_BAO_JIAO, reader = MJMessage.BaoJiaoBroadcast, func = handler(self, self.onBaoJiaoBroadcast)};
  515. -- 广播玩家报叫操作
  516. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_RESPONSE_BAO_JIAO, reader = MJMessage.BaoJiaoResponse, func = handler(self, self.onBaoJiaoResponse)};
  517. end
  518. return Room;