Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

820 wiersze
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 HuaMaJiangRoomInfo = import("mj_huamajiang.luaScript.Data.huamajiangRoomInfo");
  6. local Room = class("huamajiangRoom" , MJProtocol)
  7. function Room:initRoomInfo ()
  8. Room.super.initRoomInfo(self)
  9. self.roomInfo = HuaMaJiangRoomInfo.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. function Room:onTingCardResult( status, response )
  47. logD("Room:onTingCardResult(), ", table.tostring(response))
  48. print("--------onTingCardResult--------")
  49. if not self.roomInfo then
  50. logD("self.roomInfo no exist,容错处理!")
  51. return
  52. end
  53. self:dispatchEvent({name = MJDefine.MJEvent.TingResult,response = response})
  54. end
  55. function Room:onTingCardStatus(status, response)
  56. logD("Room:onTingCardStatus(), ", table.tostring(response))
  57. if not self.roomInfo then
  58. logD("self.roomInfo no exist,容错处理!")
  59. return
  60. end
  61. local myUserId = app.user.loginInfo.uid
  62. self.roomInfo.memberList[myUserId].nTingStatus=response.nTingStatus
  63. self:dispatchEvent({name = MJDefine.MJEvent.TingSatus})
  64. end
  65. -- 游戏发牌结果
  66. function Room:onGameSendCardResponse(status, response)
  67. logD("-------------------- 游戏发牌 ------------------------")
  68. if not self.roomInfo then
  69. logD("self.roomInfo no exist,容错处理!")
  70. return
  71. end
  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].isBaoPai = v.isTing
  80. logD("------isBaoPai= ",self.roomInfo.memberList[v.nUserId].isBaoPai)
  81. --[[if v.isTing == 1 then
  82. self.roomInfo.memberList[v.nUserId].isBaoPai = 1
  83. end--]]
  84. end
  85. -- self.cards[response.nUserId] = cardData
  86. -- 发送广播通知,发牌开始了
  87. self:dispatchEvent({name = MJDefine.MJEvent.GameSendCardResponse});
  88. end
  89. function Room:onBankerOutCard(status, response)
  90. logD("-------------------- 游戏庄家起手操作------------------------")
  91. if not self.roomInfo then
  92. logD("self.roomInfo no exist,容错处理!")
  93. return
  94. end
  95. -- self.roomInfo:setLeaveCardNum(response.nLeaveCardNum);
  96. self.roomInfo:setNeedOutCardId(response.nUserId);
  97. --logD("Room:onBankerOutCard(), ", table.tostring(response))
  98. local myUserId = self:getMyUserId()
  99. if response.nUserId==myUserId then
  100. self.roomInfo:setTingCards(response.pushCardTing);
  101. end
  102. -- 发送广播通知,游戏开始了
  103. self:dispatchEvent({name = MJDefine.MJEvent.BankerOutCard ,response = response});
  104. end
  105. function Room:onBaoPai(status,response)
  106. logD("-------------------- 广播爆牌 ------------------------")
  107. if not self.roomInfo then
  108. print("容错处理")
  109. return
  110. end
  111. local myUserId = self:getMyUserId()
  112. if response.nUserId == myUserId then
  113. self.roomInfo.memberList[myUserId].isBaoPai = response.isBaoPai
  114. end
  115. logD("Room:onBaoPai(), response = ", table.tostring(response))
  116. self:dispatchEvent({name = MJDefine.MJEvent.BaoPaiResponse ,response = response});
  117. end
  118. function Room:onBankerBaoPai(status,response)
  119. logD("-------------------- 通知庄家爆牌 ------------------------")
  120. if not self.roomInfo then
  121. print("容错处理")
  122. return
  123. end
  124. logD("Room:onBankerBaoPai(), response = ", table.tostring(response))
  125. self:dispatchEvent({name = MJDefine.MJEvent.BankerBaoPai ,response = response});
  126. end
  127. --断线重连
  128. function Room:onGameReconnection(status,response)
  129. logD("===============重连成功,清空之前所有存在的队列==================")
  130. app.net:onMsgClear()
  131. app.net:onMsgPause()
  132. logD("Room:onGameReconnection(), response = ", table.tostring(response))
  133. self:initRoomInfo();
  134. -- 获取到的房间信息
  135. self.roomInfo.shuffleNum = response.shuffleNum
  136. self.roomInfo:setGameId(response.gameId);
  137. self.roomInfo:setShowTableId(response.nShowTableId);
  138. self.roomInfo:setMaxPlayerCount(response.nMaxPlayCount);
  139. self.roomInfo:setRoomOwnedUid(response.nRoomOwnedUid);
  140. self.roomInfo:setTotalGameNum(response.nTotalGameNum);
  141. self.roomInfo:setBaseChips(response.nBaseChips);
  142. self.roomInfo:setStrGameInfo(response.strGameInfo);
  143. self.roomInfo:setGameStartCount(response.nGameStartCount);
  144. self.roomInfo:setGameStatus(response.nStatus);
  145. self.roomInfo:setBankSeatId(response.nBankSeatId);
  146. self.roomInfo:setMySeatId(response.nMySeatId);
  147. self.roomInfo:setIsUserDisbandGame(response.bUserDisbandGame);
  148. self.roomInfo:setDismissStateTime(response.nDismissStateTime);
  149. self.roomInfo:setLeaveCards(response.leaveCards);
  150. self.roomInfo:setLeaveCardNum(#response.leaveCards);
  151. self.roomInfo:setOutCardUserId(response.outCardUserId);
  152. self.roomInfo:setOutCardSeatId(response.outCardSeatId);
  153. self.roomInfo:setLastOpCard(response.lastOpCard);
  154. --萝卜牌
  155. self.roomInfo:setLuoBoCards(response.luoboCards);
  156. self.roomInfo:setOperates(response.operates);
  157. self.roomInfo:setIsNeedOutCard(response.isNeedOutCard);
  158. self.roomInfo:setNeedOutCardId(response.needOutCardId);
  159. self.roomInfo:setStopFlag(response.stopFlag);
  160. self.roomInfo:setPlayerInfos(response.playerInfos);
  161. --胡牌玩家列表
  162. self.roomInfo:setResultInfos(response.resultInfos);
  163. self.roomInfo:setOpsCntMapString(response.opsCntMapString);
  164. self.roomInfo:setTingStatus(response.tingStatus==255 and 0 or 1)
  165. self.roomInfo:setTingCards(response.tingCard);
  166. --是否换过牌玩家列表
  167. self.roomInfo.swapCardList = response.SwapCard
  168. if self.roomInfo:getGameStartCount() > 0 then
  169. self.roomInfo:setMaxPlayerCount(table.nums(response.playerInfos));
  170. end
  171. self.roomInfo:setLuoBoCards(response.luoboCards);
  172. -- 桌子上其他玩家的信息
  173. for k,v in pairs(response.playerInfos) do
  174. self:setMemberInfo(v)
  175. self.dismissInfo[v.nUserId] = v.nDisbandStatus
  176. --这里只记录,暂时没用到。可能战绩回放的时候是需要用的
  177. -- local cardData = self:serverCardToMyCard(v.handCard)
  178. -- self.roomInfo.memberList[v.nUserId].cardList = {}
  179. -- self.roomInfo.memberList[v.nUserId].cardList = cardData
  180. -- ljx 重连流水信息由服务端发送
  181. -- if v.nUserId == self:getMyUserId() then
  182. -- self.roomInfo:setScoreInfo(v.scoreInfo);
  183. -- end
  184. end
  185. local myUserId = self:getMyUserId();
  186. self.roomInfo.memberList[myUserId].nTingStatus = response.tingStatus;
  187. --[[
  188. --结算信息
  189. for k,v in pairs(response.resultInfos) do
  190. --胡牌者的用户id
  191. self.roomInfo.memberList[v.nUserId].nUserId=v.nUserId
  192. --1胡牌 2听叫 0默认
  193. self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus
  194. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  195. self.roomInfo.memberList[v.nUserId].result=v.result
  196. -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输
  197. self.roomInfo.memberList[v.nUserId].huType=v.huType
  198. --胡的牌
  199. self.roomInfo.memberList[v.nUserId].huCard=v.huCard
  200. --胡牌顺序
  201. self.roomInfo.memberList[v.nUserId].huOrder=v.huOrder
  202. --谁点的炮
  203. self.roomInfo.memberList[v.nUserId].dpSeatId=v.dpSeatId
  204. --根次数
  205. self.roomInfo.memberList[v.nUserId].genCount=v.genCount
  206. --self.roomInfo.memberList[v.nUserId].isXiQian=v.isXiQian
  207. self.roomInfo.memberList[v.nUserId].luoboScore = v.luoboScore
  208. end
  209. ]]
  210. self:addExtendData(response)
  211. local extInfo = json.decode(response.extJson or "") or {}
  212. self.roomInfo.extJson = extInfo
  213. local uid = self:getMyUserId()
  214. if extInfo and type(extInfo) == 'table' then
  215. local myInfo = extInfo[tostring(uid)] or {}
  216. self.roomInfo.hosting = myInfo.hosted or 0--托管状态
  217. self.roomInfo:setQuickStartInfo(extInfo.faststart);
  218. if extInfo.offlinetime then
  219. for nUserId,offlinetime in pairs(extInfo.offlinetime) do
  220. self.roomInfo.memberList[tonumber(nUserId)].offlinetime = offlinetime or 0
  221. end
  222. end
  223. end
  224. --更新自己的数据
  225. -- local myUserId = app.user.loginInfo.uid
  226. -- self.cards[myUserId] = self.roomInfo.memberList[myUserId].handCards
  227. print("self.cards[myUserId]:"..table.tostring(self.cards[myUserId]))
  228. -- 更新椅子号
  229. self:updateUserSeateShowId()
  230. local gameRule = self.roomInfo:getGameRuleByKey("gamerule");
  231. -- 发送通知
  232. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = app.gameId, gameType = gameRule})
  233. end
  234. function Room:addExtendData(response)
  235. end
  236. function Room:setMemberInfo(v)
  237. Room.super.setMemberInfo(self,v)
  238. self.roomInfo.memberList[v.nUserId].fanshu = v.fanshu
  239. --是否大叫
  240. self.roomInfo.memberList[v.nUserId].isDj = v.isDj
  241. --是否花猪
  242. self.roomInfo.memberList[v.nUserId].isHz = v.isHz
  243. --点炮次数
  244. self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount
  245. --点炮顺序
  246. self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder
  247. --是否已爆牌
  248. self.roomInfo.memberList[v.nUserId].isBaoPai = v.isBaoPai
  249. --是否可以爆牌
  250. self.roomInfo.memberList[v.nUserId].canBaoPai = v.canBaoPai
  251. --是否已飘
  252. self.roomInfo.memberList[v.nUserId].isPiao = v.isPiao
  253. --是否可以飘
  254. self.roomInfo.memberList[v.nUserId].canPiao = v.canPiao
  255. self.roomInfo.memberList[v.nUserId].result = v.result or 0
  256. self.roomInfo.memberList[v.nUserId].huType = v.huType or 0
  257. self.roomInfo.memberList[v.nUserId].luoboNum = v.luoboNum or 0
  258. self.roomInfo.memberList[v.nUserId].ganginfo = v.gangInfo or ""
  259. self.roomInfo.memberList[v.nUserId].operates = v.operates or {};
  260. self.roomInfo.memberList[v.nUserId].scoreInfo = v.scoreInfo;
  261. self.roomInfo.memberList[v.nUserId].reserve = v.reserve;
  262. self.roomInfo.memberList[v.nUserId].huCards = {};
  263. for k, card in ipairs(v.huCards) do
  264. table.insert(self.roomInfo.memberList[v.nUserId].huCards, card);
  265. end
  266. --[[if self.roomInfo.tableGroupCards then
  267. for i,k in pairs(self.roomInfo.tableGroupCards) do
  268. if v.nUserId == k.nUserId then
  269. self.roomInfo.memberList[v.nUserId].gruoupCards = k.operates
  270. end
  271. end
  272. else
  273. self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards
  274. end--]]
  275. end
  276. function Room:onHuResponse(status,response)
  277. logD("--------------------花麻將 通知胡 ------------------------")
  278. logD("Room:onHuResponse(), response = ", table.tostring(response))
  279. if not self.roomInfo then
  280. logD("self.roomInfo no exist,容错处理!")
  281. return
  282. end
  283. if self.roomInfo.memberList[response.nUserId] then
  284. -- 统一一下格式
  285. local huCard = {
  286. huCard = response.huCard,
  287. huType = response.huType,
  288. dpSeatId = response.dpId,
  289. }
  290. response.huCard = huCard
  291. self.roomInfo.memberList[response.nUserId].nUserId = response.nUserId
  292. self.roomInfo.memberList[response.nUserId].huCard = response.huCard
  293. self.roomInfo.memberList[response.nUserId].isQiangGng = response.isQiangGng
  294. self.roomInfo.memberList[response.nUserId].isGspHu = response.isGspHu
  295. self.roomInfo.memberList[response.nUserId].isGskhHu = response.isGskhHu
  296. self.roomInfo.memberList[response.nUserId].ext = json.decode(response.ext)
  297. self.roomInfo.memberList[response.nUserId].huIndex = response.huIndex
  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. end
  302. self:dispatchEvent({name = MJDefine.MJEvent.HuResponse,response = response});
  303. end
  304. -- 小局结算
  305. function Room:onGameXiaoJuResponse(status, response)
  306. logD("--------------------鬼麻將 小局结算 ------------------------")
  307. if not self.roomInfo then
  308. logD("self.roomInfo no exist,容错处理!")
  309. return
  310. end
  311. -- 一局结束的原因
  312. self.roomInfo:setStopFlag(response.stopFlag);
  313. -- 房间信息
  314. self.roomInfo:setStrGameInfo(response.strGameInfo);
  315. ---self.roomInfo.resultInfos = response.allPlayerInfo
  316. --玩家信息
  317. for k,v in pairs(response.allPlayerInfo) do
  318. if self.roomInfo.memberList[v.nUserId] then
  319. self.roomInfo.memberList[v.nUserId].nUserId = v.nUserId;
  320. --当前局分数
  321. self.roomInfo.memberList[v.nUserId].nTurnScore = v.nTurnScore;
  322. --总分
  323. self.roomInfo.memberList[v.nUserId].nTotalMoney = v.nTotalMoney;
  324. -- --番数
  325. -- self.roomInfo.memberList[v.nUserId].fanshu = v.fanshu
  326. -- self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus
  327. -- -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输
  328. -- self.roomInfo.memberList[v.nUserId].huType =v.huType
  329. self.roomInfo.memberList[v.nUserId].operates = v.operates;
  330. self.roomInfo.memberList[v.nUserId].handCards = v.handCards;
  331. self.roomInfo.memberList[v.nUserId].outCards = v.outCards;
  332. -- self.roomInfo.memberList[v.nUserId].huCard = v.huCard
  333. -- --胡牌顺序
  334. -- self.roomInfo.memberList[v.nUserId].huOrder = v.huOrder
  335. -- --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  336. -- self.roomInfo.memberList[v.nUserId].result =v.result
  337. -- --点炮次数
  338. -- self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount
  339. -- --谁点炮
  340. -- self.roomInfo.memberList[v.nUserId].dpSeatId = v.dpSeatId
  341. -- --点炮顺序
  342. -- self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder
  343. --是否大叫
  344. self.roomInfo.memberList[v.nUserId].isDj = v.isDaJiao
  345. -- --是否花猪
  346. -- self.roomInfo.memberList[v.nUserId].isHz = v.isHz
  347. -- --根次数
  348. -- self.roomInfo.memberList[v.nUserId].genCount = v.genCount
  349. -- self.roomInfo.memberList[v.nUserId].luoboScore = v.luoboScore
  350. -- self.roomInfo.memberList[v.nUserId].luoboNum = v.luoboNum or 0
  351. self.roomInfo.memberList[v.nUserId].isBaoPai = v.baoStatus;
  352. self.roomInfo.memberList[v.nUserId].isPiao = v.isPiao;
  353. -- self.roomInfo.memberList[v.nUserId].ganginfo = v.gangInfo or ""
  354. self.roomInfo.memberList[v.nUserId].scoreInfo = v.scoreInfo;
  355. self.roomInfo.memberList[v.nUserId].huCards = v.huCards;
  356. end
  357. -- ljx 胡牌流水通过另外条协议 服务端主动推送过来 解决数据量过大问题
  358. if v.nUserId == self:getMyUserId() then
  359. local scoreInfo = self.roomInfo.allPlayerScoreInfo[v.nUserId]
  360. if scoreInfo then
  361. self.roomInfo:setScoreInfo(scoreInfo);
  362. else
  363. logD("onGameXiaoJuResponse 流水有问题,没推送完全")
  364. end
  365. end
  366. -- if v.nUserId == self:getMyUserId() then
  367. -- self.roomInfo:setScoreInfo(v.scoreInfo);
  368. -- end
  369. end
  370. --是否大局结束,结束是1
  371. self.roomInfo:setIsGameOver(response.isGameOver);
  372. --操作统计
  373. self.roomInfo:setOpsCntMapString(response.opsCntMapString);
  374. --萝卜牌
  375. self.roomInfo:setLuoBoCards(response.luoboCards);
  376. logD("Room:onGameXiaoJuResponse() :", table.tostring(response))
  377. self:dispatchEvent({name = MJDefine.MJEvent.GameXiaoJuResponse,response = response});
  378. end
  379. -- 游戏正式开始
  380. function Room:onGameStartResponse(status, response)
  381. logD("-------------------- 新的一局开始了 ------------------------")
  382. if not self.roomInfo then
  383. logD("self.roomInfo no exist,容错处理!")
  384. return
  385. end
  386. logD("Room:onGameStartResponse(), ", table.tostring(response))
  387. self.roomInfo:setGameStartCount(response.nGameStartCount);
  388. self.roomInfo:setTotalGameNum(response.nTotalGameNum);
  389. self.roomInfo:setRoomOwnedUid(response.nRoomOwnedUid);
  390. self.roomInfo:setBankSeatId(response.nBankSeatId);
  391. self.roomInfo:setLeaveCardNum(72);
  392. self.roomInfo.shuffleList = response.shuffleList;
  393. self.roomInfo.shuffleNum = response.shuffleNum;
  394. -- 清空上一局的手牌信息
  395. self.cards = {}
  396. -- 清空上一局的胡牌信息
  397. for k, v in pairs(self.roomInfo.memberList) do
  398. v.huCards = {};
  399. end
  400. --清空上一局的胡牌过滤过的状态
  401. self.roomInfo.passGuo = false;
  402. self.roomInfo:setScoreInfo(nil);
  403. --ljx 增加所有人的流水信息
  404. self.roomInfo.allPlayerScoreInfo = {}
  405. -- 发送广播通知,游戏开始了
  406. self:dispatchEvent({name = MJDefine.MJEvent.GameStartResponse});
  407. end
  408. --大局结算
  409. function Room:onGameDaJuResponse(status, response)
  410. logD("-------------------- 大局结算 ------------------------")
  411. if not self.roomInfo then
  412. logD("self.roomInfo no exist,容错处理!")
  413. return
  414. end
  415. for k,v in pairs(response.nTotalPlayerInfos) do
  416. if self.roomInfo.memberList[v.nUserId] then
  417. --self.roomInfo.memberList[v.nUserId].nTotalInfo=json.decode(v.nTotalInfo)
  418. self.roomInfo.memberList[v.nUserId].nTotalScore = v.nTotalScore
  419. self.roomInfo.memberList[v.nUserId].roomCard = v.roomCard
  420. self.roomInfo.memberList[v.nUserId].costCard = v.requireCard
  421. end
  422. end
  423. --房卡消耗
  424. --[[for k,v in pairs(response.costCardInfos) do
  425. if self.roomInfo.memberList[v.nUserId] then
  426. self.roomInfo.memberList[v.nUserId].costCard = v.costCard
  427. end
  428. end--]]
  429. self.roomInfo:setStopFlag(response.stopFlag);
  430. --解散状态
  431. local disbandStatus = json.decode(response.strDisbandStatus)
  432. for k,v in pairs(disbandStatus) do
  433. self.dismissInfo[tonumber(k)] = tonumber(v)
  434. end
  435. --结束时间
  436. self.roomInfo:setEndTime(response.nEndTime);
  437. logD("Room:onGameDaJuResponse() :", table.tostring(response))
  438. self:dispatchEvent({name = MJDefine.MJEvent.GameDaJuResponse ,response = response});
  439. end
  440. function Room:pushTing(status,response)
  441. logD("-------------------- Room:pushTing ------------------------")
  442. logD("Room:pushTing(), ", table.tostring(response))
  443. if not self.roomInfo then
  444. print("容错处理")
  445. return
  446. end
  447. self.roomInfo:setTingCards(response.pushTing);
  448. self:dispatchEvent({name = MJDefine.MJEvent.OutCardTings})
  449. end
  450. -- 玩家进入桌子成功
  451. function Room:onSitDownSuccessResponse(status, response)
  452. logD("--------------------玩家进入桌子成功--------------------")
  453. logD("Room:onSitDownSuccessResponse(), ", table.tostring(response))
  454. app.net:onMsgClear()
  455. app.net:onMsgPause()
  456. -- 记录当前桌子号
  457. self:initRoomInfo()
  458. -- 获取到的房间信息
  459. -- self.gameId = response.gameId
  460. self.roomInfo:setGameId(response.gameId);
  461. self.roomInfo:setShowTableId(response.nShowTableId);
  462. self.roomInfo:setMaxPlayerCount(response.nMaxPlayCount);
  463. self.roomInfo:setRoomOwnedUid(response.nRoomOwnedUid);
  464. self.roomInfo:setTotalGameNum(response.nTotalGameNum);
  465. self.roomInfo:setStrGameInfo(response.strGameInfo);
  466. self.roomInfo:setGameStartCount(response.nGameStartCount or 0);
  467. self.roomInfo:setLeaveCardNum(response.nLeaveCardNum or 0);
  468. -- 桌子上其他玩家的信息
  469. for k,v in pairs(response.memberList) do
  470. self.roomInfo.memberList[v.nUserId] = v
  471. self.roomInfo.memberList[v.nUserId].nTingStatus=MJDefine.MJTingStatus.NoTing
  472. end
  473. -- 更新椅子号
  474. self:updateUserSeateShowId()
  475. logD("Room:onSitDownSuccessResponse() roomInfo = ", table.tostring(self.roomInfo))
  476. -- 发送通知
  477. local gamerule = self.roomInfo:getGameRuleByKey("gamerule");
  478. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = response.gameId, gameType = gamerule})
  479. end
  480. function Room:onWaitOperate(status, response)
  481. logD("Room:onWaitOperate(), ", table.tostring(response))
  482. self:dispatchEvent({name = MJDefine.MJEvent.WaitOperate ,response = response});
  483. end
  484. function Room:onQiangDuanOperates(status, response)
  485. logD("Room:onQiangDuanOperates(), ", table.tostring(response))
  486. self:dispatchEvent({name = MJDefine.MJEvent.QiangDuanOperates ,response = response});
  487. end
  488. function Room:onStartPiao(status, response)
  489. logD("Room:onStartPiao(), ", table.tostring(response))
  490. self:dispatchEvent({name = MJDefine.MJEvent.StartPiao ,response = response});
  491. end
  492. function Room:onPiaoResponse(status, response)
  493. logD("Room:onPiaoResponse(), ", table.tostring(response))
  494. self:dispatchEvent({name = MJDefine.MJEvent.PiaoResponse ,response = response});
  495. end
  496. function Room:onFanLuoBoResponse(status, response)
  497. logD("Room:onFanLuoBoResponse(), ", table.tostring(response))
  498. if self.roomInfo and self.roomInfo.setLuoBoCards then
  499. self.roomInfo:setLuoBoCards(response.luoboCards);
  500. end
  501. self:dispatchEvent({name = MJDefine.MJEvent.FanLuoBoResponse ,response = response});
  502. end
  503. -- 其他玩家退出房间
  504. function Room:onOtherLogoutResponse(status, response)
  505. logD("Room:onOtherLogoutResponse(), response = ", table.tostring(response))
  506. if not self.roomInfo then
  507. logD("self.roomInfo no exist,容错处理!")
  508. return
  509. end
  510. local nUserId = response.nUserId
  511. local nSeatShowId = self.userList[nUserId]
  512. if self.roomInfo.isGameOver ~= 1 then
  513. local memberList = self.roomInfo.memberList
  514. memberList[nUserId]=nil
  515. end
  516. self:updateGpsUserInfo(nil,false)
  517. self.roomInfo.nStartGameUid = response.nStartGameUid
  518. logD("30000000--runOtherLogoutResponse")
  519. self:dispatchEvent({name = MJDefine.MJEvent.OtherLogoutResponse , nUserId = nUserId, nSeatShowId = nSeatShowId});
  520. end
  521. function Room:onOperationCodeSuccess(status, response)
  522. Room.super.onOperationCodeSuccess(self, status, response);
  523. local scoreInfo = response.scoreInfo;
  524. self.roomInfo:setScoreInfo(scoreInfo);
  525. end
  526. -- 服务器下发玩家的准备状态
  527. function Room:onUserReadyResponse(status, response)
  528. Room.super.onUserReadyResponse(self, status, response);
  529. if response.nUserId == self:getMyUserId() then
  530. self.roomInfo:setScoreInfo(nil);
  531. self.roomInfo:setLuoBoCards(nil);
  532. end
  533. end
  534. -- 保存萝卜牌
  535. -- @param count 萝卜牌
  536. function Room:setLuoBoCards(luoboCards)
  537. if self.roomInfo and self.roomInfo.setLuoBoCards then
  538. self.roomInfo:setLuoBoCards(luoboCards);
  539. end
  540. end
  541. -- 获取萝卜牌
  542. function Room:getLuoBoCards()
  543. if self.roomInfo and self.roomInfo.getLuoBoCards then
  544. return self.roomInfo:getLuoBoCards();
  545. end
  546. return {}
  547. end
  548. -- 获取萝卜牌张数
  549. -- @params card 麻将牌值
  550. function Room:getLuoBoCardCount( card )
  551. if self.roomInfo and self.roomInfo.getLuoBoCardCount then
  552. return self.roomInfo:getLuoBoCardCount(card)
  553. end
  554. return 0
  555. end
  556. -- 获取萝卜牌汇总
  557. function Room:getLuoBoCardsSummary (cards)
  558. if self.roomInfo and self.roomInfo.getLuoBoCardsSummary then
  559. return self.roomInfo:getLuoBoCardsSummary(cards);
  560. end
  561. return {}
  562. end
  563. -- 托管
  564. function Room:onHostingRequest( status, response )
  565. -- 是否托管
  566. if response.nUserId == self:getMyUserId() then
  567. self.roomInfo.hosting = response.status
  568. end
  569. self:dispatchEvent({name = MJDefine.MJEvent.HostingRequest, response = response});
  570. end
  571. --通知换三张
  572. function Room:onNoticeSwapCardResponse(status, response)
  573. logD("Room:onNoticeSwapCardResponse(), ", table.tostring(response))
  574. self:dispatchEvent({name = MJDefine.MJEvent.NoticeSwapCard ,response = response});
  575. end
  576. --请求换三张
  577. function Room:requestSwapCards( cards )
  578. local request = MJMessage.GetSwapCards:new()
  579. for _,v in ipairs(cards) do
  580. table.insert(request.bySwapCard.Datas, v)
  581. --table.insert(request.byOutCard.Datas, v)
  582. end
  583. self:sendResponse{cmd = RoomCmd.GAME_COMMAND_REQUEST_CHANGE_CARD , sender = request}
  584. end
  585. --换三张错误
  586. function Room:onChangeCardError(status,response)
  587. logD("-------------------- 换三张错误 ------------------------")
  588. if not self.roomInfo then
  589. print("容错处理")
  590. return
  591. end
  592. logD("Room:onChangeCardError(), ", table.tostring(response))
  593. local msg = {
  594. [1] = "换牌数量小于3",
  595. [2] = "牌面值错误",
  596. }
  597. local m = msg[response.errFlag] or "换三张未知错误"
  598. showTooltip(""..m)
  599. self:dispatchEvent({name = MJDefine.MJEvent.SwapCardErr ,response = response});
  600. end
  601. --换三张成功
  602. function Room:onChangeCardSucc(status,response)
  603. logD("Room:onChangeCardSucc(), ", table.tostring(response))
  604. self:dispatchEvent({name = MJDefine.MJEvent.SwapCardSucc ,response = response});
  605. end
  606. --换三张成功后的信息
  607. function Room:onChangeCardInfo(status,response)
  608. logD("Room:onChangeCardInfo(), ", table.tostring(response))
  609. self:dispatchEvent({name = MJDefine.MJEvent.SwapCardSuccInfo ,response = response});
  610. end
  611. function Room:onAfterDingQue(status, response)
  612. logD("-------------------- onAfterDingQue------------------------ 没定缺就是换牌过程后")
  613. if not self.roomInfo then
  614. logD("self.roomInfo no exist,容错处理!")
  615. return
  616. end
  617. self.roomInfo.nLeaveCardNum = response.nLeaveCardNum
  618. self.roomInfo.needOutCardId = response.nUserId
  619. local myUserId = self:getMyUserId()
  620. self.roomInfo.tings={}
  621. if response.nUserId==myUserId then
  622. self.roomInfo.tings = response.pushCardTing
  623. end
  624. -- 发送广播通知,游戏开始了
  625. self:dispatchEvent({name = MJDefine.MJEvent.AfterDingQue ,response = response});
  626. end
  627. function Room:onGameFlowInfo(status, response)
  628. logD("onGameFlowInfo 收到服务端推送的流水信息", table.tostring(response))
  629. if not self.roomInfo then
  630. return
  631. end
  632. local nUserId = response.nUserId
  633. local scoreInfo = response.scoreInfo
  634. local stopFlag = response.stopFlag
  635. if nUserId == self:getMyUserId() then
  636. self.roomInfo:setScoreInfo(scoreInfo);
  637. end
  638. self.roomInfo.allPlayerScoreInfo[nUserId] = scoreInfo
  639. --小局结算主动请求后这里打开
  640. if stopFlag == 1 then
  641. local roomInfo = app.room.roomInfo;
  642. local data = {};
  643. local luoboCards = roomInfo:getLuoBoCards();
  644. luoboCards = roomInfo:getLuoBoCardsSummary(luoboCards)
  645. data.luoboCards = luoboCards;
  646. local scoreData = {};
  647. for k, v in ipairs(scoreInfo) do
  648. table.insert(scoreData, json.decode(v));
  649. end
  650. data.detail = scoreData
  651. app.room:dispatchEvent({name = MJDefine.MJEvent.EVENT_BTN_SHOW_FLOW_VIEW_CLICKED, response = data});
  652. end
  653. end
  654. function Room:ctor(net)
  655. Room.super.ctor(self , net);
  656. -- 请求爆牌
  657. self:defMsgFunc{name = MJDefine.MJEvent.BaoPaiRequest,cmd = RoomCmd.GAME_COMMAND_REQUEST_BAO_PAI,sender = MJMessage.BaoPaiRequest};
  658. -- 请求飘
  659. self:defMsgFunc{name = MJDefine.MJEvent.PiaoRequest,cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO,sender = MJMessage.PiaoRequest};
  660. self:defMsgFunc{name = MJDefine.MJEvent.GetTableInfo,cmd = RoomCmd.GAME_COMMAND_GET_TABLE_INFO};
  661. --玩家出牌的听牌信息
  662. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_OUT_CARD_TING_INFO,reader = MJMessage.OutCardTingInfo,func = handler(self,self.pushTing)}
  663. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_HU,reader = MJMessage.HuResponse,func = handler(self,self.onHuResponse)}
  664. --广播玩家爆牌
  665. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_BAO_PAI,reader = MJMessage.BaoPaiResponse,func = handler(self,self.onBaoPai)}
  666. --通知庄家爆牌
  667. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BANKER_BAO_PAI,reader = MJMessage.BankerBaoPai,func = handler(self,self.onBankerBaoPai)}
  668. --通知等待操作
  669. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_WAIT_OPREATE,reader = MJMessage.WaitOperate,func = handler(self,self.onWaitOperate)}
  670. --通知抢断操作
  671. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_QIANG_DUAN_OPREATE,reader = MJMessage.QiangDuanOperates,func = handler(self,self.onQiangDuanOperates)}
  672. --广播玩家开始飘
  673. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO,reader = MJMessage.PiaoRequest,func = handler(self,self.onStartPiao)}
  674. --广播玩家飘结果
  675. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_PIAO_RESULT,reader = MJMessage.PiaoResponse,func = handler(self,self.onPiaoResponse)}
  676. -- 广播萝卜牌
  677. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_FAN_LUO_BO,reader = MJMessage.FanLuoBoResponse,func = handler(self,self.onFanLuoBoResponse)}
  678. -- 请求托管
  679. self:defMsgFunc{name = MJDefine.MJEvent.HostingRequest, cmd = RoomCmd.GAME_COMMAND_USER_HOSTING_REQUEST, sender = MJMessage.HostingRequest}
  680. -- 收到托管回调
  681. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_HOSTING_REQUEST, reader = MJMessage.HostingRequest, func = handler(self,self.onHostingRequest)}
  682. --换三张,服务器会通过0x8122通知换牌
  683. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_CHANGE_CARD,reader = MJMessage.SwapCards,func = handler(self,self.onNoticeSwapCardResponse)}
  684. --换三张错误
  685. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_CHANGE_CARD_ERR,reader = MJMessage.SwapCardsErr,func = handler(self,self.onChangeCardError)}
  686. --换三张成功
  687. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_CHANGE_CARD_SUCC,reader = MJMessage.SwapCardsSucc,func = handler(self,self.onChangeCardSucc)}
  688. --换三张成功后的信息
  689. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_CHANGE_CARD_INFO,reader = MJMessage.SwapCardsSuccInfo,func = handler(self,self.onChangeCardInfo)}
  690. -- 内容和0x8106保持统一 广播桌子上所有玩家庄家起手操作
  691. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_START_ROUND_OPERATE, reader = MJMessage.BankerOutCard,func = handler(self , self.onAfterDingQue)};
  692. -- 内容和0x8106保持统一 广播桌子上所有玩家庄家起手操作
  693. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_FLOW_INFO, reader = MJMessage.GameFlowInfo, func = handler(self , self.onGameFlowInfo)};
  694. -- 请求小局结算流水详情
  695. self:defMsgFunc{name = MJDefine.MJEvent.ReqFlowInfo,cmd = RoomCmd.GAME_COMMAND_FLOW_REQ,sender = MJMessage.GameFlowReq};
  696. end
  697. return Room;