Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

762 строки
29 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("xcmajRoom" , MJProtocol)
  6. -- 视角转换
  7. function Room:transPos(targetSeatId, seatId)
  8. local MaxCount = self.roomInfo.nMaxPlayCount
  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. logD("Room:onGameSendCardResponse(), ", table.tostring(response))
  67. -- self.roomInfo.nbankFirstGrabCard = response.nbankFirstGrabCard
  68. --目前server只发自己过来,后续战绩回放考虑到会发所有玩家来,故以userid为key于扩展
  69. -- local cardData = self:serverCardToMyCard(response.cardList)
  70. -- logD("Room:onGameSendCardResponse : "..table.tostring(cardData))
  71. for k,v in pairs(response.playerCards) do
  72. self.roomInfo.memberList[v.nUserId].handCards = v.handCards
  73. self.roomInfo.memberList[v.nUserId].isBaoPai = v.isTing
  74. logD("------isBaoPai= ",self.roomInfo.memberList[v.nUserId].isBaoPai)
  75. --[[if v.isTing == 1 then
  76. self.roomInfo.memberList[v.nUserId].isBaoPai = 1
  77. end--]]
  78. end
  79. -- self.cards[response.nUserId] = cardData
  80. -- 发送广播通知,发牌开始了
  81. self:dispatchEvent({name = MJDefine.MJEvent.GameSendCardResponse});
  82. end
  83. function Room:onBankerOutCard(status, response)
  84. logD("-------------------- 游戏庄家起手操作------------------------")
  85. if not self.roomInfo then
  86. logD("self.roomInfo no exist,容错处理!")
  87. return
  88. end
  89. self.roomInfo.nLeaveCardNum = response.nLeaveCardNum
  90. self.roomInfo.needOutCardId = response.nUserId
  91. --logD("Room:onBankerOutCard(), ", table.tostring(response))
  92. local myUserId = self:getMyUserId()
  93. self.roomInfo.tings={}
  94. if response.nUserId==myUserId then
  95. -- for k,v in pairs(response.pushCardTing) do
  96. -- self.roomInfo.tings[v.outCard]=v.tingCards.Datas
  97. -- end
  98. self.roomInfo.tings = response.pushCardTing
  99. --这里自己摸牌后,不隐藏听牌提示
  100. --self.roomInfo.memberList[myUserId].nTingStatus=MJDefine.MJTingStatus.NoTing
  101. -- dump(self.roomInfo.memberList[myUserId])
  102. --self:dispatchEvent({name = MJDefine.MJEvent.TingSatus})
  103. end
  104. -- 发送广播通知,游戏开始了
  105. self:dispatchEvent({name = MJDefine.MJEvent.BankerOutCard ,response = response});
  106. end
  107. function Room:onAfterDingQue(status, response)
  108. logD("-------------------- onAfterDingQue------------------------")
  109. if not self.roomInfo then
  110. logD("self.roomInfo no exist,容错处理!")
  111. return
  112. end
  113. self.roomInfo.nLeaveCardNum = response.nLeaveCardNum
  114. self.roomInfo.needOutCardId = response.nUserId
  115. local myUserId = self:getMyUserId()
  116. self.roomInfo.tings={}
  117. if response.nUserId==myUserId then
  118. self.roomInfo.tings = response.pushCardTing
  119. end
  120. -- 发送广播通知,游戏开始了
  121. self:dispatchEvent({name = MJDefine.MJEvent.AfterDingQue ,response = response});
  122. end
  123. function Room:onBaoPai(status,response)
  124. logD("-------------------- 广播爆牌 ------------------------")
  125. if not self.roomInfo then
  126. print("容错处理")
  127. return
  128. end
  129. local myUserId = self:getMyUserId()
  130. if response.nUserId == myUserId then
  131. self.roomInfo.memberList[myUserId].isBaoPai = response.isBaoPai
  132. end
  133. logD("luzhouRoom:onBaoPai(), response = ", table.tostring(response))
  134. self:dispatchEvent({name = MJDefine.MJEvent.BaoPaiResponse ,response = response});
  135. end
  136. function Room:onBankerBaoPai(status,response)
  137. logD("-------------------- 通知庄家爆牌 ------------------------")
  138. if not self.roomInfo then
  139. print("容错处理")
  140. return
  141. end
  142. logD("luzhouRoom:onBankerBaoPai(), response = ", table.tostring(response))
  143. self:dispatchEvent({name = MJDefine.MJEvent.BankerBaoPai ,response = response});
  144. end
  145. --断线重连
  146. function Room:onGameReconnection(status,response)
  147. logD("===============重连成功,清空之前所有存在的队列==================")
  148. app.net:onMsgClear()
  149. app.net:onMsgPause()
  150. logD("Room:onGameReconnection(), response = ", table.tostring(response))
  151. self:initRoomInfo();
  152. -- 获取到的房间信息
  153. self.roomInfo.shuffleNum = response.shuffleNum;
  154. self.roomInfo.gameId = response.gameId
  155. self.roomInfo.nShowTableId = response.nShowTableId
  156. self.roomInfo.nMaxPlayCount = response.nMaxPlayCount
  157. self.roomInfo.nRoomOwnedUid = response.nRoomOwnedUid
  158. self.roomInfo.nTotalGameNum = response.nTotalGameNum
  159. self.roomInfo.nBaseChips = response.nBaseChips
  160. self.roomInfo.strGameInfo = response.strGameInfo
  161. self.roomInfo.nGameStartCount = response.nGameStartCount
  162. self.roomInfo.nStatus = response.nStatus
  163. self.roomInfo.nBankSeatId = response.nBankSeatId
  164. self.roomInfo.nMySeatId = response.nMySeatId
  165. self.roomInfo.bUserDisbandGame = response.bUserDisbandGame
  166. self.roomInfo.nDismissStateTime = response.nDismissStateTime
  167. self.roomInfo.leaveCards = response.leaveCards
  168. self.roomInfo.nLeaveCardNum = #self.roomInfo.leaveCards
  169. self.roomInfo.outCardUserId = response.outCardUserId
  170. self.roomInfo.outCardSeatId = response.outCardSeatId
  171. self.roomInfo.lastOpCard = response.lastOpCard
  172. --萝卜牌
  173. self.roomInfo.luoboCards = response.luoboCards
  174. self.roomInfo.operates = response.operates
  175. self.roomInfo.isNeedOutCard = response.isNeedOutCard
  176. self.roomInfo.needOutCardId = response.needOutCardId
  177. --self.roomInfo.lastOutCard = response.lastOutCard
  178. self.roomInfo.stopFlag = response.stopFlag
  179. self.roomInfo.playerInfos = response.playerInfos
  180. --胡牌玩家列表
  181. self.roomInfo.resultInfos = response.resultInfos
  182. self.roomInfo.opsCntMapString = response.opsCntMapString
  183. self.roomInfo.tingStatus = response.tingStatus==255 and 0 or 1 --服务器-1为没听 0为听
  184. self.roomInfo.tings = response.tingCard
  185. --杠信息
  186. self.roomInfo.ganginfo = response.opsCntMapString or ""
  187. --快速开局信息
  188. self.roomInfo.bUserFastStartGame = response.bUserFastStartGame--是否在快开始界面,1是0否
  189. self.roomInfo.leftFastStartGameTime = response.leftFastStartGameTime--当前快速开始等待时间
  190. self.roomInfo.pList = response.pList--快速开始状态
  191. if self.roomInfo.nGameStartCount > 0 then
  192. self.roomInfo.nMaxPlayCount = table.nums(response.playerInfos)
  193. end
  194. -- 桌子上其他玩家的信息
  195. for k,v in pairs(response.playerInfos) do
  196. self:setMemberInfo(v)
  197. self.dismissInfo[v.nUserId] = v.nDisbandStatus
  198. --这里只记录,暂时没用到。可能战绩回放的时候是需要用的
  199. -- local cardData = self:serverCardToMyCard(v.handCard)
  200. -- self.roomInfo.memberList[v.nUserId].cardList = {}
  201. -- self.roomInfo.memberList[v.nUserId].cardList = cardData
  202. end
  203. local myUserId = self:getMyUserId();
  204. self.roomInfo.memberList[myUserId].nTingStatus = response.tingStatus;
  205. --结算信息
  206. for k,v in pairs(response.resultInfos) do
  207. --胡牌者的用户id
  208. self.roomInfo.memberList[v.nUserId].nUserId=v.nUserId
  209. --1胡牌 2听叫 0默认
  210. self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus
  211. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  212. self.roomInfo.memberList[v.nUserId].result=v.result
  213. -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输
  214. self.roomInfo.memberList[v.nUserId].huType=v.huType
  215. --胡的牌
  216. self.roomInfo.memberList[v.nUserId].huCard=v.huCard
  217. --胡牌顺序
  218. self.roomInfo.memberList[v.nUserId].huOrder=v.huOrder
  219. --谁点的炮
  220. self.roomInfo.memberList[v.nUserId].dpSeatId=v.dpSeatId
  221. --根次数
  222. self.roomInfo.memberList[v.nUserId].genCount=v.genCount
  223. --子胡牌类型(天胡、地胡等)
  224. self.roomInfo.memberList[v.nUserId].subPaiType = v.subPaiType
  225. --是否绝张
  226. self.roomInfo.memberList[v.nUserId].isJueZhang = v.isJueZhang or 0
  227. --是否金钩钓
  228. self.roomInfo.memberList[v.nUserId].isJinGouDiao = v.isJinGouDiao or 0
  229. --是否海底捞月
  230. self.roomInfo.memberList[v.nUserId].isHaiDiLaoYue = v.isHaiDiLaoYue or 0
  231. --是否海底炮
  232. self.roomInfo.memberList[v.nUserId].isHaiDiPao = v.isHaiDiPao or 0
  233. --是否杠上开花
  234. self.roomInfo.memberList[v.nUserId].isGangShangKaiHua = v.isGangShangKaiHua or 0
  235. --是否杠上炮
  236. self.roomInfo.memberList[v.nUserId].isGangShangPao = v.isGangShangPao or 0
  237. --是否抢杠胡
  238. self.roomInfo.memberList[v.nUserId].isQiangGangHu = v.isQiangGangHu or 0
  239. --是否门清
  240. self.roomInfo.memberList[v.nUserId].isMenQing = v.isMenQing or 0
  241. --是否中张
  242. self.roomInfo.memberList[v.nUserId].isZhongZhang = v.isZhongZhang or 0
  243. --重连胡牌着,胡的牌也在手中,需要删掉
  244. local isDeleted = false
  245. if self.roomInfo.memberList[v.nUserId].result > 0 then--胡牌了
  246. for i,t in pairs(self.roomInfo.memberList[v.nUserId].handCards) do
  247. if t.card == v.huCard then
  248. table.remove(self.roomInfo.memberList[v.nUserId].handCards.Datas,i)
  249. isDeleted = true
  250. break
  251. end
  252. end
  253. --table.removeItem(self.roomInfo.memberList[v.nUserId].handCards,self.roomInfo.memberList[v.nUserId].huCard)
  254. if not isDeleted then
  255. table.remove(self.roomInfo.memberList[v.nUserId].handCards.Datas,1)
  256. end
  257. end
  258. end
  259. self:addExtendData(response)
  260. -- 飘信息
  261. for k,v in pairs(response.PiaoInfo) do
  262. self.roomInfo.memberList[v.nUserId].canPiao=v.canPiao
  263. self.roomInfo.memberList[v.nUserId].isPiao=v.isPiao
  264. end
  265. local extInfo = json.decode(response.extJson or "")
  266. self.roomInfo.extJson = extInfo
  267. local uid = self:getMyUserId()
  268. if extInfo and type(extInfo) == 'table' then
  269. local myinfo = extInfo[tostring(uid)]
  270. self.roomInfo.hosting = myinfo.hosted or 0--托管状态
  271. self.roomInfo.quickStartInfo = extInfo.faststart
  272. if extInfo.offlinetime then
  273. for nUserId,offlinetime in pairs(extInfo.offlinetime) do
  274. self.roomInfo.memberList[tonumber(nUserId)].offlinetime = offlinetime or 0
  275. end
  276. end
  277. end
  278. --更新自己的数据
  279. -- local myUserId = app.user.loginInfo.uid
  280. -- self.cards[myUserId] = self.roomInfo.memberList[myUserId].handCards
  281. print("self.cards[myUserId]:"..table.tostring(self.cards[myUserId]))
  282. -- 更新椅子号
  283. self:updateUserSeateShowId()
  284. local jsonInfo = json.decode(self.roomInfo.strGameInfo)
  285. -- 发送通知
  286. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = self.roomInfo.gameId or app.gameId, gameType = jsonInfo.gamerule})
  287. end
  288. function Room:addExtendData(response)
  289. end
  290. function Room:setMemberInfo(v)
  291. Room.super.setMemberInfo(self,v)
  292. self.roomInfo.memberList[v.nUserId].nTurnScore = v.nTurnScore--/10
  293. self.roomInfo.memberList[v.nUserId].nTotalMoney = v.nTotalMoney--/10
  294. self.roomInfo.memberList[v.nUserId].fanshu = v.fanshu
  295. --是否大叫
  296. self.roomInfo.memberList[v.nUserId].isDj = v.isDj
  297. --是否花猪
  298. self.roomInfo.memberList[v.nUserId].isHz = v.isHz
  299. --点炮次数
  300. self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount
  301. --点炮顺序
  302. self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder
  303. self.roomInfo.memberList[v.nUserId].result = v.result or 0
  304. self.roomInfo.memberList[v.nUserId].huType = v.huType or 0
  305. --是否换过牌
  306. self.roomInfo.memberList[v.nUserId].isSwapCard = v.isSwapCard or 0
  307. --是否定缺
  308. self.roomInfo.memberList[v.nUserId].isDingQue = v.isDingQue or 0
  309. --定缺牌类型 0万 1筒 2条
  310. self.roomInfo.memberList[v.nUserId].nQue = v.nQue or 0
  311. --服务器推荐的最佳定缺牌
  312. self.roomInfo.memberList[v.nUserId].nZjQue = v.nZjQue or 0
  313. --[[if self.roomInfo.tableGroupCards then
  314. for i,k in pairs(self.roomInfo.tableGroupCards) do
  315. if v.nUserId == k.nUserId then
  316. self.roomInfo.memberList[v.nUserId].gruoupCards = k.operates
  317. end
  318. end
  319. else
  320. self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards
  321. end--]]
  322. end
  323. function Room:onHuResponse(status,response)
  324. logD("--------------------血战 通知胡 ------------------------")
  325. logD("Room:onHuResponse(), response = ", table.tostring(response))
  326. if not self.roomInfo then
  327. logD("self.roomInfo no exist,容错处理!")
  328. return
  329. end
  330. if self.roomInfo.memberList[response.nUserId] then
  331. self.roomInfo.memberList[response.nUserId].nUserId = response.nUserId
  332. self.roomInfo.memberList[response.nUserId].huCard = response.huCard
  333. self.roomInfo.memberList[response.nUserId].isQiangGng = response.isQiangGng
  334. self.roomInfo.memberList[response.nUserId].isGspHu = response.isGspHu
  335. self.roomInfo.memberList[response.nUserId].isGskhHu = response.isGskhHu
  336. self.roomInfo.memberList[response.nUserId].redRealCard = response.redRealCard
  337. end
  338. self:dispatchEvent({name = MJDefine.MJEvent.HuResponse,response = response});
  339. end
  340. -- 小局结算
  341. function Room:onGameXiaoJuResponse(status, response)
  342. logD("--------------------xcmaj 小局结算 ------------------------")
  343. if not self.roomInfo then
  344. logD("self.roomInfo no exist,容错处理!")
  345. return
  346. end
  347. -- 一局结束的原因
  348. self.roomInfo.stopFlag=response.stopFlag
  349. -- 房间信息
  350. self.roomInfo.strGameInfo=response.strGameInfo
  351. ---self.roomInfo.resultInfos = response.allPlayerInfo
  352. --杠信息
  353. self.roomInfo.ganginfo = response.opsCntMapString or ""
  354. --玩家信息
  355. for k,v in pairs(response.allPlayerInfo) do
  356. if self.roomInfo.memberList[v.nUserId] then
  357. self.roomInfo.memberList[v.nUserId].nUserId = v.nUserId
  358. --当前局分数
  359. self.roomInfo.memberList[v.nUserId].nTurnScore=v.nTurnScore--/10
  360. --总分
  361. self.roomInfo.memberList[v.nUserId].nTotalMoney=v.nTotalMoney--/10
  362. --番数
  363. self.roomInfo.memberList[v.nUserId].fanshu=v.fanshu
  364. self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus
  365. -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输
  366. self.roomInfo.memberList[v.nUserId].huType=v.huType
  367. if v.gruoupCards then
  368. for _,group in ipairs(v.gruoupCards) do
  369. group.targetSeatId = self:getSeatIdByUserId(v.nUserId)
  370. end
  371. end
  372. self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards
  373. self.roomInfo.memberList[v.nUserId].handCards = v.handCards
  374. self.roomInfo.memberList[v.nUserId].outCards = v.outCards
  375. self.roomInfo.memberList[v.nUserId].huCard = v.huCard
  376. --胡牌顺序
  377. self.roomInfo.memberList[v.nUserId].huOrder = v.huOrder
  378. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  379. self.roomInfo.memberList[v.nUserId].result=v.result
  380. --点炮次数
  381. self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount
  382. --谁点炮
  383. self.roomInfo.memberList[v.nUserId].dpSeatId = v.dpSeatId
  384. --点炮顺序
  385. self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder
  386. --是否大叫
  387. self.roomInfo.memberList[v.nUserId].isDj = v.isDj
  388. --是否花猪
  389. self.roomInfo.memberList[v.nUserId].isHz = v.isHz
  390. --根次数
  391. self.roomInfo.memberList[v.nUserId].genCount = v.genCount
  392. --子胡牌类型(天胡、地胡等)
  393. self.roomInfo.memberList[v.nUserId].subPaiType = v.subPaiType
  394. --是否绝张
  395. self.roomInfo.memberList[v.nUserId].isJueZhang = v.isJueZhang or 0
  396. --是否金钩钓
  397. self.roomInfo.memberList[v.nUserId].isJinGouDiao = v.isJinGouDiao or 0
  398. --是否海底捞月
  399. self.roomInfo.memberList[v.nUserId].isHaiDiLaoYue = v.isHaiDiLaoYue or 0
  400. --是否海底炮
  401. self.roomInfo.memberList[v.nUserId].isHaiDiPao = v.isHaiDiPao or 0
  402. --是否杠上开花
  403. self.roomInfo.memberList[v.nUserId].isGangShangKaiHua = v.isGangShangKaiHua or 0
  404. --是否杠上炮
  405. self.roomInfo.memberList[v.nUserId].isGangShangPao = v.isGangShangPao or 0
  406. --是否抢杠胡
  407. self.roomInfo.memberList[v.nUserId].isQiangGangHu = v.isQiangGangHu or 0
  408. --是否门清
  409. self.roomInfo.memberList[v.nUserId].isMenQing = v.isMenQing or 0
  410. --是否中张
  411. self.roomInfo.memberList[v.nUserId].isZhongZhang = v.isZhongZhang or 0
  412. if self.roomInfo.memberList[v.nUserId].result > 0 then--胡牌了
  413. for i,t in pairs(self.roomInfo.memberList[v.nUserId].handCards) do
  414. if t.card == v.huCard then
  415. table.remove(self.roomInfo.memberList[v.nUserId].handCards.Datas,i)
  416. break
  417. end
  418. end
  419. --table.removeItem(self.roomInfo.memberList[v.nUserId].handCards,self.roomInfo.memberList[v.nUserId].huCard)
  420. end
  421. end
  422. --[[self.roomInfo.resultInfos[v.nUserId].nUserId = v.nUserId
  423. self.roomInfo.resultInfos[v.nUserId].huType=v.huType
  424. --根次数
  425. self.roomInfo.resultInfos[v.nUserId].genCount = v.genCount
  426. --胡牌顺序
  427. self.roomInfo.resultInfos[v.nUserId].huOrder = v.huOrder
  428. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  429. self.roomInfo.resultInfos[v.nUserId].result=v.result
  430. self.roomInfo.resultInfos[v.nUserId].isXiQian=v.isXiQian]]--
  431. end
  432. -- self.roomInfo.playerInfos",VT_Vector(message.XiaojuPlayerInfo),{})
  433. --是否大局结束,结束是1
  434. self.roomInfo.isGameOver=response.isGameOver
  435. --操作统计
  436. self.roomInfo.opsCntMapString=response.opsCntMapString
  437. --萝卜牌
  438. self.roomInfo.luoboCards = response.luoboCards
  439. logD("xcmajRoom:onGameXiaoJuResponse() :", table.tostring(response))
  440. self:dispatchEvent({name = MJDefine.MJEvent.GameXiaoJuResponse,response = response});
  441. end
  442. -- 游戏正式开始
  443. function Room:onGameStartResponse(status, response)
  444. logD("-------------------- 新的一局开始了 ------------------------")
  445. if not self.roomInfo then
  446. logD("self.roomInfo no exist,容错处理!")
  447. return
  448. end
  449. logD("Room:onGameStartResponse(), ", table.tostring(response))
  450. self.roomInfo.nGameStartCount = response.nGameStartCount;
  451. self.roomInfo.nTotalGameNum = response.nTotalGameNum;
  452. self.roomInfo.nRoomOwnedUid = response.nRoomOwnedUid;
  453. self.roomInfo.nBankSeatId = response.nBankSeatId;
  454. self.roomInfo.nLeaveCardNum = 72
  455. self.roomInfo.shuffleList = response.shuffleList;
  456. self.roomInfo.shuffleNum = response.shuffleNum;
  457. -- 清空上一局的手牌信息
  458. self.cards = {}
  459. -- 发送广播通知,游戏开始了
  460. self:dispatchEvent({name = MJDefine.MJEvent.GameStartResponse});
  461. end
  462. --大局结算
  463. function Room:onGameDaJuResponse(status, response)
  464. logD("-------------------- 大局结算 ------------------------")
  465. if not self.roomInfo then
  466. logD("self.roomInfo no exist,容错处理!")
  467. return
  468. end
  469. for k,v in pairs(response.nTotalPlayerInfos) do
  470. if self.roomInfo.memberList[v.nUserId] then
  471. --self.roomInfo.memberList[v.nUserId].nTotalInfo=json.decode(v.nTotalInfo)
  472. v.nTotalScore = v.nTotalScore--/10 --血战总分服务器乘以了10,客户端除以10
  473. self.roomInfo.memberList[v.nUserId].nTotalScore = v.nTotalScore
  474. self.roomInfo.memberList[v.nUserId].roomCard = v.roomCard
  475. --self.roomInfo.memberList[v.nUserId].costCard = v.requireCard
  476. end
  477. end
  478. --房卡消耗
  479. for k,v in pairs(response.costCardInfos) do
  480. if self.roomInfo.memberList[v.nUserId] then
  481. self.roomInfo.memberList[v.nUserId].costCard = v.costCard
  482. end
  483. end
  484. self.roomInfo.stopFlag = response.stopFlag
  485. --解散状态
  486. local disbandStatus = json.decode(response.strDisbandStatus)
  487. for k,v in pairs(disbandStatus) do
  488. self.dismissInfo[tonumber(k)] = tonumber(v)
  489. end
  490. --结束时间
  491. self.roomInfo.nEndTime = response.nEndTime or os.time()
  492. logD("Room:onGameDaJuResponse() :", table.tostring(response))
  493. self:dispatchEvent({name = MJDefine.MJEvent.GameDaJuResponse ,response = response});
  494. end
  495. function Room:pushTing(status,response)
  496. logD("-------------------- Room:pushTing ------------------------")
  497. logD("Room:pushTing(), ", table.tostring(response))
  498. if not self.roomInfo then
  499. print("容错处理")
  500. return
  501. end
  502. self.roomInfo.tings={}
  503. for k,v in pairs(response.pushTing) do
  504. self.roomInfo.tings=response.pushTing
  505. --self.roomInfo.tings[v.outCard]=v.tingCards.Datas
  506. end
  507. self:dispatchEvent({name = MJDefine.MJEvent.OutCardTings})
  508. end
  509. -- 玩家进入桌子成功
  510. function Room:onSitDownSuccessResponse(status, response)
  511. logD("--------------------玩家进入桌子成功--------------------")
  512. logD("Room:onSitDownSuccessResponse(), ", table.tostring(response))
  513. app.net:onMsgClear()
  514. app.net:onMsgPause()
  515. -- 记录当前桌子号
  516. self:initRoomInfo()
  517. -- 获取到的房间信息
  518. -- self.gameId = response.gameId
  519. self.roomInfo.gameId = response.gameId
  520. self.roomInfo.nShowTableId = response.nShowTableId
  521. self.roomInfo.nMaxPlayCount = response.nMaxPlayCount
  522. self.roomInfo.nRoomOwnedUid = response.nRoomOwnedUid
  523. self.roomInfo.nTotalGameNum = response.nTotalGameNum
  524. self.roomInfo.strGameInfo = response.strGameInfo
  525. self.roomInfo.nGameStartCount = response.nGameStartCount or 0
  526. self.roomInfo.nLeaveCardNum = response.nLeaveCardNum or 0
  527. -- 桌子上其他玩家的信息
  528. for k,v in pairs(response.memberList) do
  529. self.roomInfo.memberList[v.nUserId] = v
  530. self.roomInfo.memberList[v.nUserId].nTingStatus=MJDefine.MJTingStatus.NoTing
  531. end
  532. -- 更新椅子号
  533. self:updateUserSeateShowId()
  534. logD("Room:onSitDownSuccessResponse() roomInfo = ", table.tostring(self.roomInfo))
  535. -- 发送通知
  536. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = self.roomInfo.gameId or app.gameId, gameType = self.roomInfo.strGameInfo.gamerule})
  537. end
  538. function Room:onWaitOperate(status, response)
  539. logD("Room:onWaitOperate(), ", table.tostring(response))
  540. self:dispatchEvent({name = MJDefine.MJEvent.WaitOperate ,response = response});
  541. end
  542. function Room:onQiangDuanOperates(status, response)
  543. logD("Room:onQiangDuanOperates(), ", table.tostring(response))
  544. self:dispatchEvent({name = MJDefine.MJEvent.QiangDuanOperates ,response = response});
  545. end
  546. function Room:onStartPiao(status, response)
  547. logD("Room:onStartPiao(), ", table.tostring(response))
  548. self:dispatchEvent({name = MJDefine.MJEvent.StartPiao ,response = response});
  549. end
  550. function Room:onPiaoResponse(status, response)
  551. logD("Room:onPiaoResponse(), ", table.tostring(response))
  552. self:dispatchEvent({name = MJDefine.MJEvent.PiaoResponse ,response = response});
  553. end
  554. --通知换三张
  555. function Room:onNoticeSwapCardResponse(status, response)
  556. logD("Room:onNoticeSwapCardResponse(), ", table.tostring(response))
  557. self:dispatchEvent({name = MJDefine.MJEvent.NoticeSwapCard ,response = response});
  558. end
  559. --请求换三张
  560. function Room:requestSwapCards( cards )
  561. local request = MJMessage.GetSwapCards:new()
  562. for _,v in ipairs(cards) do
  563. table.insert(request.bySwapCard.Datas, v)
  564. --table.insert(request.byOutCard.Datas, v)
  565. end
  566. self:sendResponse{cmd = RoomCmd.GAME_COMMAND_REQUEST_CHANGE_CARD , sender = request}
  567. end
  568. --换三张错误
  569. function Room:onChangeCardError(status,response)
  570. logD("-------------------- 换三张错误 ------------------------")
  571. if not self.roomInfo then
  572. print("容错处理")
  573. return
  574. end
  575. logD("Room:onChangeCardError(), ", table.tostring(response))
  576. local msg = {
  577. [1] = "换牌数量小于3",
  578. [2] = "牌面值错误",
  579. }
  580. local m = msg[response.errFlag] or "换三张未知错误"
  581. showTooltip(""..m)
  582. self:dispatchEvent({name = MJDefine.MJEvent.SwapCardErr ,response = response});
  583. end
  584. --换三张成功
  585. function Room:onChangeCardSucc(status,response)
  586. logD("Room:onChangeCardSucc(), ", table.tostring(response))
  587. self:dispatchEvent({name = MJDefine.MJEvent.SwapCardSucc ,response = response});
  588. end
  589. --换三张成功后的信息
  590. function Room:onChangeCardInfo(status,response)
  591. logD("Room:onChangeCardInfo(), ", table.tostring(response))
  592. self:dispatchEvent({name = MJDefine.MJEvent.SwapCardSuccInfo ,response = response});
  593. end
  594. --服务器通知定缺
  595. function Room:onNoticeDingQueResponse(status,response)
  596. logD("Room:onNoticeDingQueResponse(), ", table.tostring(response))
  597. self:dispatchEvent({name = MJDefine.MJEvent.NoticeDingQue ,response = response});
  598. end
  599. --广播定缺成功
  600. function Room:onDingQueSuccResponse(status,response)
  601. logD("Room:onDingQueSuccResponse(), ", table.tostring(response))
  602. self:dispatchEvent({name = MJDefine.MJEvent.DingQueSucc ,response = response});
  603. end
  604. --定缺成功广播告诉玩家定缺类型
  605. function Room:onDingQueSuccInfoResponse(status,response)
  606. logD("Room:onDingQueSuccInfoResponse(), ", table.tostring(response))
  607. self:dispatchEvent({name = MJDefine.MJEvent.DingQueSuccInfo ,response = response});
  608. end
  609. -- 托管
  610. function Room:onHostingRequest( status, response )
  611. -- 是否托管
  612. for k,v in pairs(response.userCnt) do
  613. if v.nUserID == self:getMyUserId() then
  614. self.roomInfo.hosting = v.aiStatus;
  615. end
  616. end
  617. self.roomInfo.hostInfos = response.userCnt
  618. self:dispatchEvent({name = MJDefine.MJEvent.HostingRequest, response = response});
  619. end
  620. function Room:ctor(net)
  621. Room.super.ctor(self , net);
  622. --请求换三张
  623. --self:defMsgFunc{name = MJDefine.MJEvent.RequestSwapCard , cmd = RoomCmd.GAME_COMMAND_REQUEST_CHANGE_CARD, sender = MJMessage.SwapCards};
  624. --客户端请求定缺
  625. self:defMsgFunc{name = MJDefine.MJEvent.RequestDingQue , cmd = RoomCmd.GAME_COMMAND_REQUEST_DINGQUE, sender = MJMessage.QueCard};
  626. -- 请求飘
  627. self:defMsgFunc{name = MJDefine.MJEvent.PiaoRequest,cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO,sender = MJMessage.PiaoRequest};
  628. -- 请求刷新桌子
  629. self:defMsgFunc{name = MJDefine.MJEvent.GetTableInfo,cmd = RoomCmd.GAME_COMMAND_GET_TABLE_INFO};
  630. --玩家出牌的听牌信息
  631. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_OUT_CARD_TING_INFO,reader = MJMessage.OutCardTingInfo,func = handler(self,self.pushTing)}
  632. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_HU,reader = MJMessage.HuRespone,func = handler(self,self.onHuResponse)}
  633. --广播玩家爆牌
  634. --self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_BAO_PAI,reader = MJMessage.BaoPaiResponse,func = handler(self,self.onBaoPai)}
  635. --通知庄家爆牌
  636. --self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BANKER_BAO_PAI,reader = MJMessage.BankerBaoPai,func = handler(self,self.onBankerBaoPai)}
  637. --通知等待操作
  638. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_WAIT_OPREATE,reader = MJMessage.WaitOperate,func = handler(self,self.onWaitOperate)}
  639. --通知抢断操作
  640. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_QIANG_DUAN_OPREATE,reader = MJMessage.QiangDuanOperates,func = handler(self,self.onQiangDuanOperates)}
  641. --广播玩家开始飘
  642. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO,reader = MJMessage.PiaoRequest,func = handler(self,self.onStartPiao)}
  643. --广播玩家飘结果
  644. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_PIAO_RESULT,reader = MJMessage.PiaoResponse,func = handler(self,self.onPiaoResponse)}
  645. --换三张,服务器会通过0x8122通知换牌
  646. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_CHANGE_CARD,reader = MJMessage.SwapCards,func = handler(self,self.onNoticeSwapCardResponse)}
  647. --换三张错误
  648. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_CHANGE_CARD_ERR,reader = MJMessage.SwapCardsErr,func = handler(self,self.onChangeCardError)}
  649. --换三张成功
  650. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_CHANGE_CARD_SUCC,reader = MJMessage.SwapCardsSucc,func = handler(self,self.onChangeCardSucc)}
  651. --换三张成功后的信息
  652. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_CHANGE_CARD_INFO,reader = MJMessage.SwapCardsSuccInfo,func = handler(self,self.onChangeCardInfo)}
  653. --服务器通知定缺
  654. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_DINGQUE,reader = MJMessage.QueCard,func = handler(self,self.onNoticeDingQueResponse)}
  655. --当玩家操作成功后,通过0x8131广播定缺成功
  656. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_DINGQUE_SUCC,reader = MJMessage.DingQueSucc,func = handler(self,self.onDingQueSuccResponse)}
  657. --当所有玩家定缺成功后,服务器会通过广播告诉玩家定缺类型
  658. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_DINGQUE_RESULT,reader = MJMessage.DingQueSuccInfo,func = handler(self,self.onDingQueSuccInfoResponse)}
  659. -- 内容和0x8106保持统一 广播桌子上所有玩家庄家起手操作
  660. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_START_ROUND_OPERATE, reader = MJMessage.BankerOutCard,func = handler(self , self.onAfterDingQue)};
  661. -- 请求托管
  662. self:defMsgFunc{name = MJDefine.MJEvent.HostingRequest, cmd = RoomCmd.GAME_COMMAND_REQUEST_TUOGUAN, sender = MJMessage.HostingRequest}
  663. -- 收到托管回调
  664. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_TUOGUAN_RESPONSE, reader = MJMessage.TuoGuanResponse, func = handler(self,self.onHostingRequest)}
  665. end
  666. return Room;