You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

694 lines
26 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 yibinmajiangRoomInfo = import("mj_yibinmajiang.luaScript.Data.yibinmajiangRoomInfo");
  5. local MJProtocol = MJFramework.MJFrameworkClassImprot("mj.luaScript.Protocol.MJProtocol")
  6. local Room = class("yibinmajiangRoom" , MJProtocol)
  7. function Room:initRoomInfo ()
  8. Room.super.initRoomInfo(self)
  9. self.roomInfo = yibinmajiangRoomInfo.getInstance(true);
  10. self.roomInfo:reset();
  11. end
  12. -- 视角转换
  13. function Room:transPos(targetSeatId, seatId )
  14. local MaxCount = self.roomInfo:getMaxPlayerCount();
  15. local showPos = 4
  16. local target = targetSeatId
  17. if target <= seatId then
  18. showPos = seatId - target
  19. elseif target > seatId then
  20. showPos = MaxCount - target + seatId
  21. end
  22. return showPos
  23. end
  24. -- 根据uid获取座位号
  25. function Room:getSeatIdByUserId( nUserId )
  26. return self:getSeatIdByViewId(self:getViewIdByUserId(nUserId))
  27. end
  28. -- 获取房间最大玩家人数
  29. function Room:getMaxPlayerCount()
  30. return self.roomInfo:getMaxPlayerCount();
  31. end
  32. -- 获取房间人数
  33. function Room:getPlayerCount()
  34. local count = 0
  35. for k,v in pairs(self.roomInfo.memberList) do
  36. count = count + 1
  37. end
  38. return count
  39. end
  40. function Room:cleanTingStatus()
  41. local myUserId = app.user.loginInfo.uid
  42. if self.roomInfo.memberList[myUserId] and self.roomInfo.memberList[myUserId].nTingStatus then
  43. self.roomInfo.memberList[myUserId].nTingStatus = MJDefine.MJTingStatus.NoTing
  44. end
  45. end
  46. -- 判断所有玩家是否都选择了定缺
  47. function Room:checkIsAllChooseDingQue()
  48. local playerCount = self:getPlayerCount()
  49. local chooseQuePlayerCount = table.nums(self.roomInfo:getDingQueInfo()) or 0
  50. if playerCount == chooseQuePlayerCount then
  51. return true
  52. else
  53. return false
  54. end
  55. end
  56. -- 抓牌,还有初始发牌,如果是初始发牌则不会有操作数据,需要借用811a协议
  57. function Room:onBankerOutCard(status, response)
  58. logD("-------------------- 游戏庄家起手操作 ------------------------")
  59. logD("Room:onBankerOutCard(), ", table.tostring(response))
  60. if not self.roomInfo then
  61. logD("self.roomInfo no exist,容错处理!")
  62. return
  63. end
  64. self.roomInfo:setLeaveCardNum(response.nLeaveCardNum)
  65. self.roomInfo:setNeedOutCardId(response.nUserId);
  66. local myUserId = self:getMyUserId()
  67. if response.nUserId==myUserId then
  68. self.roomInfo:setTingCards(response.pushCardTing);
  69. end
  70. -- 发送广播通知,游戏开始了
  71. self:dispatchEvent({name = MJDefine.MJEvent.BankerOutCard ,response = response});
  72. end
  73. -- 庄家初始操作
  74. function Room:onGameRoundStartOperate(status, response)
  75. logD("-------------------- 庄家初始操作 ------------------------")
  76. logD("Room:onBankerOutCard(), ", table.tostring(response))
  77. if not self.roomInfo then
  78. logD("self.roomInfo no exist,容错处理!")
  79. return
  80. end
  81. self.roomInfo:setLeaveCardNum(response.nLeaveCardNum)
  82. self.roomInfo:setNeedOutCardId(response.nUserId);
  83. local myUserId = self:getMyUserId()
  84. if response.nUserId == myUserId then
  85. self.roomInfo:setTingCards(response.pushCardTing);
  86. end
  87. -- 发送广播通知,游戏开始了
  88. self:dispatchEvent({name = MJDefine.MJEvent.GameRoundStartOperate ,response = response});
  89. end
  90. --断线重连
  91. function Room:onGameReconnection(status,response)
  92. logD("===============重连成功,清空之前所有存在的队列==================")
  93. app.net:onMsgClear()
  94. app.net:onMsgPause()
  95. logD("Room:onGameReconnection(), response = ", table.tostring(response))
  96. self:initRoomInfo();
  97. -- 获取到的房间信息
  98. self.roomInfo.shuffleNum = response.shuffleNum;
  99. self.roomInfo:setGameId(response.gameId);
  100. self.roomInfo:setShowTableId(response.nShowTableId);
  101. self.roomInfo:setMaxPlayerCount(response.nMaxPlayCount);
  102. self.roomInfo:setRoomOwnedUid(response.nRoomOwnedUid);
  103. self.roomInfo:setTotalGameNum(response.nTotalGameNum);
  104. self.roomInfo:setBaseChips(response.nBaseChips);
  105. self.roomInfo:setStrGameInfo(response.strGameInfo);
  106. self.roomInfo:setGameStartCount(response.nGameStartCount);
  107. self.roomInfo:setGameStatus(response.nStatus);
  108. self.roomInfo:setBankSeatId(response.nBankSeatId);
  109. self.roomInfo:setMySeatId(response.nMySeatId);
  110. self.roomInfo:setIsUserDisbandGame(response.bUserDisbandGame);
  111. self.roomInfo:setDismissStateTime(response.nDismissStateTime);
  112. self.roomInfo:setBenJinCard(response.benjinCard)
  113. self.roomInfo:setTingYongCard(response.tingyongCard)
  114. self.roomInfo:setPlayerInfos(response.playerInfos);
  115. self.roomInfo:setLeaveCards(response.leaveCards);
  116. self.roomInfo:setLeaveCardNum(#response.leaveCards);
  117. self.roomInfo:setOutCardUserId(response.outCardUserId);
  118. self.roomInfo:setOutCardSeatId(response.outCardSeatId);
  119. self.roomInfo:setLastOpCard(response.lastOpCard);
  120. self.roomInfo:setOperates(response.operates);
  121. self.roomInfo:setIsNeedOutCard(response.isNeedOutCard);
  122. self.roomInfo:setStopFlag(response.stopFlag);
  123. self.roomInfo:setResultInfos(response.resultInfos); -- 胡牌信息
  124. self.roomInfo:setOpsCntMapString(response.opsCntMapString);
  125. self.roomInfo:setTingStatus(response.tingStatus==255 and 0 or 1)
  126. self.roomInfo:setTingCards(response.tingCard);
  127. self.roomInfo:setNeedOutCardId(response.needOutCardId);
  128. if self.roomInfo:getGameStartCount() > 0 then
  129. self.roomInfo:setMaxPlayerCount(table.nums(response.playerInfos));
  130. end
  131. -- 桌子上其他玩家的信息
  132. for k,v in pairs(response.playerInfos) do
  133. -- 补充外部的数据,没有在playerinfo里面发送,而是在外部的
  134. v.Datas.huCardsInfo = response.resultInfos[k] or {} -- 胡牌内容
  135. self:setMemberInfo(v)
  136. self.dismissInfo[v.nUserId] = v.nDisbandStatus
  137. --这里只记录,暂时没用到。可能战绩回放的时候是需要用的
  138. -- local cardData = self:serverCardToMyCard(v.handCard)
  139. -- self.roomInfo.memberList[v.nUserId].cardList = {}
  140. -- self.roomInfo.memberList[v.nUserId].cardList = cardData
  141. if v.nUserId == self:getMyUserId() then
  142. self.roomInfo:setScoreInfo(v.scoreInfo);
  143. end
  144. -- 更新定缺数据
  145. if v.dingquetype ~= -1 then
  146. self.roomInfo:setDingQueInfo(v.nUserId, v.dingquetype)
  147. end
  148. end
  149. local myUserId = self:getMyUserId();
  150. self.roomInfo.memberList[myUserId].nTingStatus = response.tingStatus;
  151. --[[
  152. --结算信息
  153. for k,v in pairs(response.resultInfos) do
  154. --胡牌者的用户id
  155. self.roomInfo.memberList[v.nUserId].nUserId=v.nUserId
  156. --1胡牌 2听叫 0默认
  157. self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus
  158. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  159. self.roomInfo.memberList[v.nUserId].result=v.result
  160. -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输
  161. self.roomInfo.memberList[v.nUserId].huType=v.huType
  162. --胡的牌
  163. self.roomInfo.memberList[v.nUserId].huCard=v.huCard
  164. --胡牌顺序
  165. self.roomInfo.memberList[v.nUserId].huOrder=v.huOrder
  166. --谁点的炮
  167. self.roomInfo.memberList[v.nUserId].dpSeatId=v.dpSeatId
  168. --根次数
  169. self.roomInfo.memberList[v.nUserId].genCount=v.genCount
  170. --self.roomInfo.memberList[v.nUserId].isXiQian=v.isXiQian
  171. end
  172. ]]
  173. self:addExtendData(response)
  174. local extInfo = json.decode(response.ext or "")
  175. local uid = self:getMyUserId()
  176. if extInfo and type(extInfo) == 'table' then
  177. --local myInfo = extInfo[tostring(uid)]
  178. --self.roomInfo.hosting = myInfo.hosted or 0--托管状态
  179. self.roomInfo:setQuickStartInfo(extInfo.faststart);
  180. if extInfo.offlinetime then
  181. for nUserId,offlinetime in pairs(extInfo.offlinetime) do
  182. self.roomInfo.memberList[tonumber(nUserId)].offlinetime = offlinetime or 0
  183. end
  184. end
  185. end
  186. --更新自己的数据
  187. -- local myUserId = app.user.loginInfo.uid
  188. -- self.cards[myUserId] = self.roomInfo.memberList[myUserId].handCards
  189. print("self.cards[myUserId]:"..table.tostring(self.cards[myUserId]))
  190. -- 更新椅子号
  191. self:updateUserSeateShowId()
  192. local gameRule = self.roomInfo:getGameRuleByKey("gamerule");
  193. -- 发送通知
  194. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = app.gameId, gameType = gameRule})
  195. end
  196. function Room:addExtendData(response)
  197. end
  198. function Room:setMemberInfo(v)
  199. Room.super.setMemberInfo(self,v)
  200. self.roomInfo.memberList[v.nUserId].fanshu = v.fanshu
  201. --是否大叫
  202. self.roomInfo.memberList[v.nUserId].isDj = v.isDaJiao
  203. --是否花猪
  204. self.roomInfo.memberList[v.nUserId].isHz = v.isHuaZhu
  205. --点炮次数
  206. self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount
  207. --点炮顺序
  208. self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder
  209. --是否操作过飘
  210. self.roomInfo.memberList[v.nUserId].isPiao = v.isPiao
  211. --飘的选择
  212. self.roomInfo.memberList[v.nUserId].piaostate = v.piaostate
  213. -- 是否可以定缺
  214. self.roomInfo.memberList[v.nUserId].isDingQue = v.isDingQue
  215. -- 定缺类型
  216. self.roomInfo.memberList[v.nUserId].dingquetype = v.dingquetype
  217. -- 定缺最优选
  218. self.roomInfo.memberList[v.nUserId].nice_choose = v.nice_choose
  219. self.roomInfo.memberList[v.nUserId].result = v.result or 0
  220. self.roomInfo.memberList[v.nUserId].huType = v.huType or 0
  221. self.roomInfo.memberList[v.nUserId].ganginfo = v.gangInfo or ""
  222. self.roomInfo.memberList[v.nUserId].operates = v.operates or {};
  223. self.roomInfo.memberList[v.nUserId].scoreInfo = v.scoreInfo or {}; -- 没有这个数据
  224. self.roomInfo.memberList[v.nUserId].reserve = v.reserve or ''; -- 没有这个数据
  225. self.roomInfo.memberList[v.nUserId].huCards = {};
  226. self.roomInfo.memberList[v.nUserId].paiType = 0
  227. self.roomInfo.memberList[v.nUserId].subPaiType = 0
  228. self.roomInfo.memberList[v.nUserId].genCount = v.genCount -- 根
  229. self.roomInfo.memberList[v.nUserId].gangCount = v.gangCount -- 杠
  230. self.roomInfo.memberList[v.nUserId].isOperated = v.isOperated or '' -- 断线重连前操作过的数据
  231. -- 插入胡牌,这些还是用的花麻将多胡,之后要删除jxtd
  232. if v.huCardsInfo.huCard then
  233. -- 胡牌数据格式
  234. local temp = {
  235. huCard = v.huCardsInfo.huCard,
  236. huType = v.huCardsInfo.huType,
  237. dpSeatId = v.huCardsInfo.dpId,
  238. }
  239. table.insert(self.roomInfo.memberList[v.nUserId].huCards, temp)
  240. self.roomInfo.memberList[v.nUserId].paiType = v.huCardsInfo.paiType
  241. self.roomInfo.memberList[v.nUserId].subPaiType = v.huCardsInfo.subPaiType
  242. self.roomInfo.memberList[v.nUserId].huType = v.huCardsInfo.huType
  243. self.roomInfo.memberList[v.nUserId].huIndex = v.huCardsInfo.huIndex
  244. self.roomInfo.memberList[v.nUserId].dpId = v.huCardsInfo.dpId -- 放炮玩家(seatid)
  245. self.roomInfo.memberList[v.nUserId].genCount = v.huCardsInfo.genCount
  246. self.roomInfo.memberList[v.nUserId].gangCount = v.huCardsInfo.gangCount
  247. end
  248. -- 保存胡牌顺序信息
  249. self.roomInfo:setHuIndexInfo(v.nUserId, v.huCardsInfo.huIndex or 0)
  250. -- dump(self.roomInfo.memberList, 'aaaaaaaaaaaaaaaaaaaaaaa')
  251. -- for k, card in pairs(v.huCards) do
  252. -- table.insert(self.roomInfo.memberList[v.nUserId].huCards, card);
  253. -- end
  254. --[[if self.roomInfo.tableGroupCards then
  255. for i,k in pairs(self.roomInfo.tableGroupCards) do
  256. if v.nUserId == k.nUserId then
  257. self.roomInfo.memberList[v.nUserId].gruoupCards = k.operates
  258. end
  259. end
  260. else
  261. self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards
  262. end--]]
  263. end
  264. -- 胡牌通知
  265. --[[
  266. 需注意huCards是个胡牌数组,针对某些游戏单个玩家可以多胡(血流等),服务端一般不会发这个数据,由客户端这边自己拼接
  267. 拼接完之后,将拼接好后的字段赋值给huCard
  268. ]]
  269. function Room:onHuResponse(status,response)
  270. logD("-------------------- 通知胡 ------------------------")
  271. logD("Room:onHuResponse(), response = ", table.tostring(response))
  272. if not self.roomInfo then
  273. logD("self.roomInfo no exist,容错处理!")
  274. return
  275. end
  276. if self.roomInfo.memberList[response.nUserId] then
  277. local dpSeatId = self:getSeatIdByUserId(response.dpUserId)
  278. -- 胡牌数据格式
  279. local huCard = {
  280. huCard = response.huCard,
  281. huType = response.huType,
  282. dpSeatId = dpSeatId,
  283. }
  284. response.huCard = huCard
  285. -- 定义的数据
  286. self.roomInfo.memberList[response.nUserId].nUserId = response.nUserId
  287. self.roomInfo.memberList[response.nUserId].huType = response.huType
  288. self.roomInfo.memberList[response.nUserId].fanshu = response.fanshu
  289. self.roomInfo.memberList[response.nUserId].paiType = response.paiType
  290. self.roomInfo.memberList[response.nUserId].subPaiType = response.subPaiType
  291. self.roomInfo.memberList[response.nUserId].huCard = response.huCard
  292. self.roomInfo.memberList[response.nUserId].isQiangGng = response.isQiangGng
  293. self.roomInfo.memberList[response.nUserId].isGspHu = response.isGspHu
  294. self.roomInfo.memberList[response.nUserId].isGskhHu = response.isGskhHu
  295. self.roomInfo.memberList[response.nUserId].dpId = dpSeatId
  296. self.roomInfo.memberList[response.nUserId].huIndex = response.huIndex
  297. self.roomInfo.memberList[response.nUserId].ext = json.decode(response.ext or '')
  298. self.roomInfo.memberList[response.nUserId].huCards = self.roomInfo.memberList[response.nUserId].huCards or {};
  299. table.insert(self.roomInfo.memberList[response.nUserId].huCards, response.huCard);
  300. self.roomInfo:setScoreInfo(response.scoreInfo);
  301. -- 保存胡牌顺序信息
  302. self.roomInfo:setHuIndexInfo(response.nUserId, response.huIndex)
  303. end
  304. self:dispatchEvent({name = MJDefine.MJEvent.HuResponse,response = response});
  305. end
  306. -- 小局结算
  307. function Room:onGameXiaoJuResponse(status, response)
  308. logD("-------------------- 小局结算 ------------------------")
  309. if not self.roomInfo then
  310. logD("self.roomInfo no exist,容错处理!")
  311. return
  312. end
  313. self.roomInfo:setStopFlag(response.stopFlag) -- 一局结束的原因
  314. self.roomInfo:setStrGameInfo(response.strGameInfo) -- 房间信息
  315. self.roomInfo:setIsGameOver(response.isGameOver) -- 是否大局结束,结束是1
  316. self.roomInfo:setOpsCntMapString(response.opsCntMapString) -- 操作统计
  317. -- 玩家信息
  318. for k,v in pairs(response.allPlayerInfo) do
  319. if self.roomInfo.memberList[v.nUserId] then
  320. -- 胡牌数据格式(拼接)
  321. local huCard = {
  322. huCard = v.huCard,
  323. huType = v.huType,
  324. dpSeatId = v.dpId,
  325. }
  326. v.huCard = huCard
  327. self.roomInfo.memberList[v.nUserId].nUserId = v.nUserId -- 玩家的id
  328. self.roomInfo.memberList[v.nUserId].nTurnScore = v.nTurnScore -- 当前局分数
  329. self.roomInfo.memberList[v.nUserId].nTotalMoney = v.nTotalMoney -- 总分
  330. self.roomInfo.memberList[v.nUserId].fanshu = v.fanshu -- 番数
  331. self.roomInfo.memberList[v.nUserId].result = v.result -- 玩家本局输赢情况(0为默认, 1为胡, 2为听叫)
  332. self.roomInfo.memberList[v.nUserId].paiType = v.paiType -- 胡牌类型
  333. self.roomInfo.memberList[v.nUserId].subPaiType = v.subPaiType -- 胡牌子类型(0x01:本金;0x02:接本金)
  334. self.roomInfo.memberList[v.nUserId].operates = v.operates -- 组合牌
  335. self.roomInfo.memberList[v.nUserId].handCards = v.handCards -- 玩家手牌
  336. self.roomInfo.memberList[v.nUserId].outCards = v.outCards -- 桌面弃牌
  337. self.roomInfo.memberList[v.nUserId].huCard = v.huCard -- 胡的牌
  338. self.roomInfo.memberList[v.nUserId].huIndex = v.huIndex -- 胡牌顺序
  339. self.roomInfo.memberList[v.nUserId].huType = v.huType -- 自摸还是点炮胡
  340. self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount -- 点炮次数
  341. self.roomInfo.memberList[v.nUserId].dpId = v.dpId -- 谁点炮给该玩家(座位号seatId)
  342. self.roomInfo.memberList[v.nUserId].dpIndex = v.dpIndex -- 点炮顺序(后3个bit位标识顺序)
  343. self.roomInfo.memberList[v.nUserId].isDj = v.isDaJiao -- 是否大叫
  344. self.roomInfo.memberList[v.nUserId].isHz = v.isHuaZhu -- 是否花猪
  345. self.roomInfo.memberList[v.nUserId].genCount = v.genCount -- 根次数
  346. self.roomInfo.memberList[v.nUserId].gangCount = v.gangCount -- 杠次数
  347. -- 胡牌总数据
  348. self.roomInfo.memberList[v.nUserId].huCards = {} -- 这里做一次初始化处理,不然正常流程通知胡后,在进入小结算会添加相同的胡牌
  349. table.insert(self.roomInfo.memberList[v.nUserId].huCards, v.huCard);
  350. end
  351. if v.nUserId == self:getMyUserId() then
  352. self.roomInfo:setScoreInfo(v.scoreInfo);
  353. end
  354. -- 保存胡牌顺序信息
  355. self.roomInfo:setHuIndexInfo(v.nUserId, v.huIndex)
  356. end
  357. logD("Room:onGameXiaoJuResponse() :", table.tostring(response))
  358. self:dispatchEvent({name = MJDefine.MJEvent.GameXiaoJuResponse,response = response});
  359. end
  360. -- 游戏正式开始
  361. function Room:onGameStartResponse(status, response)
  362. logD("-------------------- 新的一局开始了 ------------------------")
  363. if not self.roomInfo then
  364. logD("self.roomInfo no exist,容错处理!")
  365. return
  366. end
  367. logD("Room:onGameStartResponse(), ", table.tostring(response))
  368. self.roomInfo:setGameStartCount(response.nGameStartCount);
  369. self.roomInfo:setTotalGameNum(response.nTotalGameNum);
  370. self.roomInfo:setRoomOwnedUid(response.nRoomOwnedUid);
  371. self.roomInfo:setBankSeatId(response.nBankSeatId);
  372. self.roomInfo:setLeaveCardNum(MJDefine.totalCard);
  373. -- 清空上一局的手牌信息和胡牌信息
  374. self.cards = {}
  375. for k, v in pairs(self.roomInfo.memberList) do
  376. v.huCards = {};
  377. end
  378. self.roomInfo:setScoreInfo(nil);
  379. self.roomInfo:setBenJinCard(nil)
  380. self.roomInfo:setTingYongCard(nil)
  381. self.roomInfo:setDingQueInfo(nil, nil)
  382. self.roomInfo.shuffleList = response.shuffleList;
  383. self.roomInfo.shuffleNum = response.shuffleNum;
  384. -- 发送广播通知,游戏开始了
  385. self:dispatchEvent({name = MJDefine.MJEvent.GameStartResponse});
  386. end
  387. --大局结算
  388. function Room:onGameDaJuResponse(status, response)
  389. logD("-------------------- 大局结算 ------------------------")
  390. if not self.roomInfo then
  391. logD("self.roomInfo no exist,容错处理!")
  392. return
  393. end
  394. for k,v in pairs(response.nTotalPlayerInfos) do
  395. if self.roomInfo.memberList[v.nUserId] then
  396. --self.roomInfo.memberList[v.nUserId].nTotalInfo=json.decode(v.nTotalInfo)
  397. self.roomInfo.memberList[v.nUserId].nTotalScore = v.nTotalScore
  398. self.roomInfo.memberList[v.nUserId].roomCard = v.roomCard
  399. self.roomInfo.memberList[v.nUserId].costCard = v.requireCard
  400. end
  401. end
  402. --房卡消耗
  403. --[[for k,v in pairs(response.costCardInfos) do
  404. if self.roomInfo.memberList[v.nUserId] then
  405. self.roomInfo.memberList[v.nUserId].costCard = v.costCard
  406. end
  407. end--]]
  408. self.roomInfo:setStopFlag(response.stopFlag);
  409. --解散状态
  410. local disbandStatus = json.decode(response.strDisbandStatus)
  411. for k,v in pairs(disbandStatus) do
  412. self.dismissInfo[tonumber(k)] = tonumber(v)
  413. end
  414. --结束时间
  415. self.roomInfo:setEndTime(response.nEndTime);
  416. logD("Room:onGameDaJuResponse() :", table.tostring(response))
  417. self:dispatchEvent({name = MJDefine.MJEvent.GameDaJuResponse ,response = response});
  418. end
  419. function Room:pushTing(status,response)
  420. logD("-------------------- Room:pushTing ------------------------")
  421. logD("Room:pushTing(), ", table.tostring(response))
  422. if not self.roomInfo then
  423. print("容错处理")
  424. return
  425. end
  426. self.roomInfo:setTingCards(response.pushTing);
  427. self:dispatchEvent({name = MJDefine.MJEvent.OutCardTings})
  428. end
  429. -- 玩家进入桌子成功
  430. function Room:onSitDownSuccessResponse(status, response)
  431. logD("--------------------玩家进入桌子成功--------------------")
  432. logD("Room:onSitDownSuccessResponse(), ", table.tostring(response))
  433. app.net:onMsgClear()
  434. app.net:onMsgPause()
  435. -- 记录当前桌子号
  436. self:initRoomInfo()
  437. -- 获取到的房间信息
  438. -- self.gameId = response.gameId
  439. self.roomInfo:setGameId(response.gameId);
  440. self.roomInfo:setShowTableId(response.nShowTableId);
  441. self.roomInfo:setMaxPlayerCount(response.nMaxPlayCount);
  442. self.roomInfo:setRoomOwnedUid(response.nRoomOwnedUid);
  443. self.roomInfo:setTotalGameNum(response.nTotalGameNum);
  444. self.roomInfo:setStrGameInfo(response.strGameInfo);
  445. self.roomInfo:setGameStartCount(response.nGameStartCount or 0);
  446. self.roomInfo:setLeaveCardNum(response.nLeaveCardNum or 0);
  447. -- 桌子上其他玩家的信息
  448. for k,v in pairs(response.memberList) do
  449. self.roomInfo.memberList[v.nUserId] = v
  450. self.roomInfo.memberList[v.nUserId].nTingStatus=MJDefine.MJTingStatus.NoTing
  451. end
  452. -- 更新椅子号
  453. self:updateUserSeateShowId()
  454. logD("Room:onSitDownSuccessResponse() roomInfo = ", table.tostring(self.roomInfo))
  455. -- 发送通知
  456. local gamerule = self.roomInfo:getGameRuleByKey("gamerule");
  457. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = response.gameId, gameType = gamerule})
  458. end
  459. function Room:onWaitOperate(status, response)
  460. logD("Room:onWaitOperate(), ", table.tostring(response))
  461. self:dispatchEvent({name = MJDefine.MJEvent.WaitOperate ,response = response});
  462. end
  463. -- 通知开始飘
  464. function Room:onStartPiao(status, response)
  465. logD("--------------------开始飘--------------------")
  466. logD("Room:onStartPiao(), ", table.tostring(response))
  467. self:dispatchEvent({name = MJDefine.MJEvent.StartPiao ,response = response});
  468. end
  469. function Room:onPiaoResponse(status, response)
  470. logD("--------------------飘结果--------------------")
  471. logD("Room:onPiaoResponse(), ", table.tostring(response))
  472. if self.roomInfo.memberList[response.nUserId] then
  473. self.roomInfo.memberList[response.nUserId].piaostate = response.piaostate
  474. end
  475. self:dispatchEvent({name = MJDefine.MJEvent.PiaoResponse ,response = response});
  476. end
  477. -- 其他玩家退出房间
  478. function Room:onOtherLogoutResponse(status, response)
  479. logD("Room:onOtherLogoutResponse(), response = ", table.tostring(response))
  480. if not self.roomInfo then
  481. logD("self.roomInfo no exist,容错处理!")
  482. return
  483. end
  484. local nUserId = response.nUserId
  485. local nSeatShowId = self.userList[nUserId]
  486. if self.roomInfo.isGameOver ~= 1 then
  487. local memberList = self.roomInfo.memberList
  488. memberList[nUserId]=nil
  489. end
  490. self:updateGpsUserInfo(nil,false)
  491. self.roomInfo.nStartGameUid = response.nStartGameUid
  492. logD("30000000--runOtherLogoutResponse")
  493. self:dispatchEvent({name = MJDefine.MJEvent.OtherLogoutResponse , nUserId = nUserId, nSeatShowId = nSeatShowId});
  494. end
  495. function Room:onOperationCodeSuccess(status, response)
  496. Room.super.onOperationCodeSuccess(self, status, response);
  497. local scoreInfo = response.scoreInfo;
  498. self.roomInfo:setScoreInfo(scoreInfo);
  499. end
  500. -- 服务器下发玩家的准备状态
  501. function Room:onUserReadyResponse(status, response)
  502. Room.super.onUserReadyResponse(self, status, response);
  503. if response.nUserId == self:getMyUserId() then
  504. self.roomInfo:setScoreInfo(nil);
  505. end
  506. end
  507. -- 开始定缺
  508. function Room:onDingQueStart(status, response)
  509. logD("--------------------开始定缺--------------------")
  510. logD("Room:onDingQueStart(), ", table.tostring(response))
  511. self:dispatchEvent({name = MJDefine.MJEvent.DingQueStart, response = response})
  512. end
  513. -- 定缺结果
  514. function Room:onDingQueResponseResult(status, response)
  515. logD("--------------------定缺结果--------------------")
  516. logD("Room:onDingQueResult(), ", table.tostring(response))
  517. for i, v in pairs(response.DingQueData) do
  518. self.roomInfo:setDingQueInfo(v.nUserId, v.result)
  519. end
  520. self:dispatchEvent({name = MJDefine.MJEvent.DingQueResponse, response = response})
  521. end
  522. -- 广播游戏庄家
  523. function Room:onBankReponse(status, response)
  524. end
  525. -- 广播本金牌
  526. function Room:onBenJinCardResponse(status, response)
  527. logD("--------------------广播本金牌--------------------")
  528. logD("Room:onBenJinCardResponse(), ", table.tostring(response))
  529. self.roomInfo:setBenJinCard(response.benjinCard)
  530. self.roomInfo:setTingYongCard(response.tingCard)
  531. self:dispatchEvent({name = MJDefine.MJEvent.BenJinStart, response = response})
  532. end
  533. -- 提操作成功后收到操作
  534. function Room:onNoticeTiAfterOp(status, response)
  535. logD("--------------------提操作成功后收到操作--------------------")
  536. logD("Room:onNoticeTiAfterOp(), ", table.tostring(response))
  537. self:dispatchEvent({name = MJDefine.MJEvent.NoticeTiAfterOp, response = response})
  538. end
  539. function Room:onQiangDuanOperates(status, response)
  540. logD("Room:onQiangDuanOperates(), ", table.tostring(response))
  541. self:dispatchEvent({name = MJDefine.MJEvent.QiangDuanOperates ,response = response});
  542. end
  543. function Room:ctor(net)
  544. Room.super.ctor(self, net)
  545. self:defRequestEvent() -- 注册客户端向服务端发送的请求事件
  546. self:defResponseEvent() -- 注册服务端返回到客户端的返回事件
  547. end
  548. -- 注册请求事件
  549. function Room:defRequestEvent()
  550. -- 请求飘[0x8204]
  551. self:defMsgFunc{name = MJDefine.MJEvent.PiaoRequest, cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO, sender = MJMessage.PiaoRequest}
  552. -- 请求定缺[0x8206]
  553. self:defMsgFunc{name = MJDefine.MJEvent.DingQueRequest, cmd = RoomCmd.GAME_COMMAND_NOTICE_SELECT_QUE, sender = MJMessage.DingQueRequest}
  554. -- 请求桌子信息[0x802a],用于切换2d/3d
  555. self:defMsgFunc{name = MJDefine.MJEvent.GetTableInfo, cmd = RoomCmd.GAME_COMMAND_GET_TABLE_INFO}
  556. -- 待定
  557. end
  558. -- 注册返回事件
  559. function Room:defResponseEvent()
  560. -- 通知玩家漂操作[0x8204]
  561. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO, reader = MJMessage.PiaoStart, func = handler(self, self.onStartPiao)}
  562. -- 广播玩家飘结果[0x8205]
  563. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_PIAO_RESULT, reader = MJMessage.PiaoResponse, func = handler(self, self.onPiaoResponse)}
  564. -- 广播游戏庄家[0x8208]
  565. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_BANK, reader = MJMessage.BankResponse, func = handler(self, self.onBankReponse)}
  566. -- 广播本金牌和听用牌[0x8209]
  567. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_JING_CARD, reader = MJMessage.BenJinCard, func = handler(self, self.onBenJinCardResponse)}
  568. -- 通知玩家开始定缺[0x8206]
  569. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTICE_SELECT_QUE, reader = MJMessage.DingQueStart, func = handler(self, self.onDingQueStart)}
  570. -- 广播玩家定缺结果[0x8207]
  571. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_SELECT_QUE_RESULT, reader = MJMessage.DingQueResponse, func = handler(self, self.onDingQueResponseResult)}
  572. -- 通知等待其他玩家操作[0x8116]
  573. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_WAIT_OPREATE, reader = MJMessage.WaitOperate, func = handler(self, self.onWaitOperate)}
  574. -- 广播玩家胡[0x8130]
  575. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_HU, reader = MJMessage.HuResponse, func = handler(self, self.onHuResponse)}
  576. -- 玩家出牌/操作后的听牌信息[0x8132]
  577. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_OUT_CARD_TING_INFO, reader = MJMessage.OutCardTingInfo, func = handler(self, self.pushTing)}
  578. -- 广播桌子上所有玩家庄家起手操作[0x811a]
  579. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_START_ROUND_OPERATE, reader = MJMessage.BankerOutCard,func = handler(self , self.onGameRoundStartOperate)};
  580. -- 提操作成功后收到操作[0x811C]
  581. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTICE_TI_AFTER_OP, reader = MJMessage.NoticeTiAfterOp,func = handler(self , self.onNoticeTiAfterOp)};
  582. -- 待定
  583. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_QIANG_DUAN_OPREATE,reader = MJMessage.QiangDuanOperates,func = handler(self,self.onQiangDuanOperates)}
  584. end
  585. return Room;