25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

851 satır
32 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("ncmajRoom" , 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("ncmaJRoom: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("ncmaJRoom:onBankerBaoPai(), response = ", table.tostring(response))
  143. self:dispatchEvent({name = MJDefine.MJEvent.BankerBaoPai ,response = response});
  144. end
  145. -- 获取听牌信息
  146. function Room:getTingCards()
  147. return self.roomInfo.tings or {};
  148. end
  149. --- Room:getTingCardsByCard 通过指定牌,获取听牌信息
  150. -- @param card int
  151. function Room:getTingCardsByCard (card)
  152. local curTingCards = {};
  153. for k, v in pairs(self.roomInfo.tings) do
  154. if v.outCard == card then
  155. curTingCards = v.tingCards;
  156. break;
  157. end
  158. end
  159. return curTingCards;
  160. end
  161. --- Room:getAllTingCards 获取所有可能听的牌
  162. function Room:getAllTingCards()
  163. local curTingCards = {};
  164. for k, v in pairs(self.roomInfo.tings) do
  165. for i,j in pairs(v.tingCards) do
  166. local isHave = false
  167. for ii,jj in pairs(curTingCards) do
  168. if jj.card == j.card then
  169. isHave = true
  170. break
  171. end
  172. end
  173. if not isHave then
  174. table.insert(curTingCards,j)
  175. end
  176. end
  177. end
  178. return curTingCards;
  179. end
  180. --断线重连
  181. function Room:onGameReconnection(status,response)
  182. logD("===============重连成功,清空之前所有存在的队列==================")
  183. app.net:onMsgClear()
  184. app.net:onMsgPause()
  185. logD("Room:onGameReconnection(), response = ", table.tostring(response))
  186. self:initRoomInfo();
  187. -- 获取到的房间信息
  188. self.roomInfo.isEapCreate = response.isEapCreate --是否由电竞SDK创建的房间 1是 0否
  189. self.roomInfo.EapTime = response.EapTime -- 电竞倒计时时间
  190. self.roomInfo.shuffleNum = response.shuffleNum;
  191. self.roomInfo.gameId = response.gameId
  192. self.roomInfo.nShowTableId = response.nShowTableId
  193. self.roomInfo.nMaxPlayCount = response.nMaxPlayCount
  194. self.roomInfo.nRoomOwnedUid = response.nRoomOwnedUid
  195. self.roomInfo.nTotalGameNum = response.nTotalGameNum
  196. self.roomInfo.nBaseChips = response.nBaseChips
  197. self.roomInfo.strGameInfo = response.strGameInfo
  198. self.roomInfo.nGameStartCount = response.nGameStartCount
  199. self.roomInfo.nStatus = response.nStatus
  200. self.roomInfo.nBankSeatId = response.nBankSeatId
  201. self.roomInfo.nMySeatId = response.nMySeatId
  202. self.roomInfo.bUserDisbandGame = response.bUserDisbandGame
  203. self.roomInfo.nDismissStateTime = response.nDismissStateTime
  204. self.roomInfo.leaveCards = response.leaveCards
  205. self.roomInfo.nLeaveCardNum = #self.roomInfo.leaveCards
  206. self.roomInfo.outCardUserId = response.outCardUserId
  207. self.roomInfo.outCardSeatId = response.outCardSeatId
  208. self.roomInfo.lastOpCard = response.lastOpCard
  209. --萝卜牌
  210. self.roomInfo.luoboCards = response.luoboCards
  211. self.roomInfo.operates = response.operates
  212. --炮牌
  213. self.roomInfo.paoCards = response.paoCards
  214. self.roomInfo.isNeedOutCard = response.isNeedOutCard
  215. self.roomInfo.needOutCardId = response.needOutCardId
  216. --self.roomInfo.lastOutCard = response.lastOutCard
  217. self.roomInfo.stopFlag = response.stopFlag
  218. self.roomInfo.playerInfos = response.playerInfos
  219. --胡牌玩家列表
  220. self.roomInfo.resultInfos = response.resultInfos
  221. self.roomInfo.opsCntMapString = response.opsCntMapString
  222. self.roomInfo.tingStatus = response.tingStatus==255 and 0 or 1 --服务器-1为没听 0为听
  223. self.roomInfo.tings = response.tingCard
  224. --杠信息
  225. self.roomInfo.ganginfo = response.opsCntMapString or ""
  226. --快速开局信息
  227. self.roomInfo.bUserFastStartGame = response.bUserFastStartGame--是否在快开始界面,1是0否
  228. self.roomInfo.leftFastStartGameTime = response.leftFastStartGameTime--当前快速开始等待时间
  229. self.roomInfo.pList = response.pList--快速开始状态
  230. if self.roomInfo.nGameStartCount > 0 then
  231. self.roomInfo.nMaxPlayCount = table.nums(response.playerInfos)
  232. end
  233. -- 桌子上其他玩家的信息
  234. for k,v in pairs(response.playerInfos) do
  235. self:setMemberInfo(v)
  236. self.dismissInfo[v.nUserId] = v.nDisbandStatus
  237. --这里只记录,暂时没用到。可能战绩回放的时候是需要用的
  238. -- local cardData = self:serverCardToMyCard(v.handCard)
  239. -- self.roomInfo.memberList[v.nUserId].cardList = {}
  240. -- self.roomInfo.memberList[v.nUserId].cardList = cardData
  241. end
  242. local myUserId = self:getMyUserId();
  243. self.roomInfo.memberList[myUserId].nTingStatus = self.roomInfo.tingStatus--response.tingStatus;
  244. --结算信息
  245. for k,v in pairs(response.resultInfos) do
  246. --胡牌者的用户id
  247. self.roomInfo.memberList[v.nUserId].nUserId=v.nUserId
  248. --1胡牌 2听叫 0默认
  249. self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus
  250. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  251. self.roomInfo.memberList[v.nUserId].result=v.result
  252. -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输
  253. self.roomInfo.memberList[v.nUserId].huType=v.huType
  254. --胡的牌
  255. self.roomInfo.memberList[v.nUserId].huCard=v.huCard
  256. --胡牌顺序
  257. self.roomInfo.memberList[v.nUserId].huOrder=v.huOrder
  258. --谁点的炮
  259. self.roomInfo.memberList[v.nUserId].dpSeatId=v.dpSeatId
  260. --根次数
  261. self.roomInfo.memberList[v.nUserId].genCount=v.genCount
  262. --子胡牌类型(天胡、地胡等)
  263. self.roomInfo.memberList[v.nUserId].subPaiType = v.subPaiType
  264. --是否绝张
  265. self.roomInfo.memberList[v.nUserId].isJueZhang = v.isJueZhang or 0
  266. --是否金钩钓
  267. self.roomInfo.memberList[v.nUserId].isJinGouDiao = v.isJinGouDiao or 0
  268. --是否海底捞月
  269. self.roomInfo.memberList[v.nUserId].isHaiDiLaoYue = v.isHaiDiLaoYue or 0
  270. --是否海底炮
  271. self.roomInfo.memberList[v.nUserId].isHaiDiPao = v.isHaiDiPao or 0
  272. --是否杠上开花
  273. self.roomInfo.memberList[v.nUserId].isGangShangKaiHua = v.isGangShangKaiHua or 0
  274. --是否杠上炮
  275. self.roomInfo.memberList[v.nUserId].isGangShangPao = v.isGangShangPao or 0
  276. --是否抢杠胡
  277. self.roomInfo.memberList[v.nUserId].isQiangGangHu = v.isQiangGangHu or 0
  278. --是否门清
  279. self.roomInfo.memberList[v.nUserId].isMenQing = v.isMenQing or 0
  280. --是否中张
  281. self.roomInfo.memberList[v.nUserId].isZhongZhang = v.isZhongZhang or 0
  282. --重连胡牌着,胡的牌也在手中,需要删掉
  283. local isDeleted = false
  284. if self.roomInfo.memberList[v.nUserId].result > 0 then--胡牌了
  285. for i,t in pairs(self.roomInfo.memberList[v.nUserId].handCards) do
  286. if t.card == v.huCard then
  287. table.remove(self.roomInfo.memberList[v.nUserId].handCards.Datas,i)
  288. isDeleted = true
  289. break
  290. end
  291. end
  292. --table.removeItem(self.roomInfo.memberList[v.nUserId].handCards,self.roomInfo.memberList[v.nUserId].huCard)
  293. if not isDeleted then
  294. table.remove(self.roomInfo.memberList[v.nUserId].handCards.Datas,1)
  295. end
  296. end
  297. end
  298. self:addExtendData(response)
  299. --[[-- 飘信息
  300. for k,v in pairs(response.PiaoInfo) do
  301. self.roomInfo.memberList[v.nUserId].canPiao=v.canPiao
  302. self.roomInfo.memberList[v.nUserId].isPiao=v.isPiao
  303. end--]]
  304. local extInfo = json.decode(response.extJson or "")
  305. local uid = self:getMyUserId()
  306. if extInfo and type(extInfo) == 'table' then
  307. --local myInfo = extInfo[tostring(uid)]
  308. --self.roomInfo.hosting = myInfo.hosted or 0--托管状态
  309. self.roomInfo.quickStartInfo = extInfo.faststart
  310. if extInfo.offlinetime then
  311. for nUserId,offlinetime in pairs(extInfo.offlinetime) do
  312. self.roomInfo.memberList[tonumber(nUserId)].offlinetime = offlinetime or 0
  313. end
  314. end
  315. end
  316. --更新自己的数据
  317. -- local myUserId = app.user.loginInfo.uid
  318. -- self.cards[myUserId] = self.roomInfo.memberList[myUserId].handCards
  319. print("self.cards[myUserId]:"..table.tostring(self.cards[myUserId]))
  320. -- 更新椅子号
  321. self:updateUserSeateShowId()
  322. local jsonInfo = json.decode(self.roomInfo.strGameInfo)
  323. -- 发送通知
  324. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = self.roomInfo.gameId or app.gameId, gameType = jsonInfo.gamerule})
  325. end
  326. function Room:addExtendData(response)
  327. end
  328. function Room:setMemberInfo(v)
  329. Room.super.setMemberInfo(self,v)
  330. self.roomInfo.memberList[v.nUserId].nTurnScore = v.nTurnScore--/10
  331. self.roomInfo.memberList[v.nUserId].nTotalMoney = v.nTotalMoney--/10
  332. self.roomInfo.memberList[v.nUserId].fanshu = v.fanshu
  333. --是否大叫
  334. self.roomInfo.memberList[v.nUserId].isDj = v.isDj
  335. --是否花猪
  336. self.roomInfo.memberList[v.nUserId].isHz = v.isHz
  337. --点炮次数
  338. self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount
  339. --点炮顺序
  340. self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder
  341. self.roomInfo.memberList[v.nUserId].result = v.result or 0
  342. self.roomInfo.memberList[v.nUserId].huType = v.huType or 0
  343. --是否换过牌
  344. self.roomInfo.memberList[v.nUserId].isSwapCard = v.isSwapCard or 0
  345. --是否定缺
  346. self.roomInfo.memberList[v.nUserId].isDingQue = v.isDingQue or 0
  347. --定缺牌类型 0万 1筒 2条
  348. self.roomInfo.memberList[v.nUserId].nQue = v.nQue or 0
  349. --服务器推荐的最佳定缺牌
  350. self.roomInfo.memberList[v.nUserId].nZjQue = v.nZjQue or 0
  351. self.roomInfo.memberList[v.nUserId].canPiao = v.isPiao
  352. self.roomInfo.memberList[v.nUserId].isPiao = v.piaoType
  353. --是否已爆牌
  354. self.roomInfo.memberList[v.nUserId].isBaoPai = v.baoJiao
  355. --是否可以爆牌
  356. self.roomInfo.memberList[v.nUserId].canBaoPai = v.canBaoJiao
  357. --躺牌
  358. self.roomInfo.memberList[v.nUserId].tangCards = v.tangCards
  359. --摆牌 0没有摆1摆牌2独摆
  360. self.roomInfo.memberList[v.nUserId].isBaiPai = v.isBaiPai or 0
  361. end
  362. function Room:onHuResponse(status,response)
  363. logD("--------------------血战 通知胡 ------------------------")
  364. logD("Room:onHuResponse(), response = ", table.tostring(response))
  365. if not self.roomInfo then
  366. logD("self.roomInfo no exist,容错处理!")
  367. return
  368. end
  369. if self.roomInfo.memberList[response.nUserId] then
  370. self.roomInfo.memberList[response.nUserId].nUserId = response.nUserId
  371. self.roomInfo.memberList[response.nUserId].huCard = response.huCard
  372. self.roomInfo.memberList[response.nUserId].isQiangGng = response.isQiangGng
  373. self.roomInfo.memberList[response.nUserId].isGspHu = response.isGspHu
  374. self.roomInfo.memberList[response.nUserId].isGskhHu = response.isGskhHu
  375. self.roomInfo.memberList[response.nUserId].redRealCard = response.redRealCard
  376. end
  377. self:dispatchEvent({name = MJDefine.MJEvent.HuResponse,response = response});
  378. end
  379. -- 小局结算
  380. function Room:onGameXiaoJuResponse(status, response)
  381. logD("--------------------ncmaj 小局结算 ------------------------")
  382. if not self.roomInfo then
  383. logD("self.roomInfo no exist,容错处理!")
  384. return
  385. end
  386. -- 一局结束的原因
  387. self.roomInfo.stopFlag=response.stopFlag
  388. -- 房间信息
  389. self.roomInfo.strGameInfo=response.strGameInfo
  390. ---self.roomInfo.resultInfos = response.allPlayerInfo
  391. --杠信息
  392. self.roomInfo.ganginfo = response.opsCntMapString or ""
  393. --玩家信息
  394. for k,v in pairs(response.allPlayerInfo) do
  395. if self.roomInfo.memberList[v.nUserId] then
  396. self.roomInfo.memberList[v.nUserId].nUserId = v.nUserId
  397. --当前局分数
  398. self.roomInfo.memberList[v.nUserId].nTurnScore=v.nTurnScore--/10
  399. --总分
  400. self.roomInfo.memberList[v.nUserId].nTotalMoney=v.nTotalMoney--/10
  401. --番数
  402. self.roomInfo.memberList[v.nUserId].fanshu=v.fanshu
  403. self.roomInfo.memberList[v.nUserId].userStatus = v.userStatus
  404. -- 胡牌牌类型-7对胡、平胡,0为输或者不胡不输
  405. self.roomInfo.memberList[v.nUserId].huType=v.huType
  406. if v.gruoupCards then
  407. for _,group in ipairs(v.gruoupCards) do
  408. group.targetSeatId = self:getSeatIdByUserId(v.nUserId)
  409. end
  410. end
  411. self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards
  412. self.roomInfo.memberList[v.nUserId].handCards = v.handCards
  413. self.roomInfo.memberList[v.nUserId].outCards = v.outCards
  414. self.roomInfo.memberList[v.nUserId].huCard = v.huCard
  415. --胡牌顺序
  416. self.roomInfo.memberList[v.nUserId].huOrder = v.huOrder
  417. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  418. self.roomInfo.memberList[v.nUserId].result = v.result
  419. --点炮次数
  420. self.roomInfo.memberList[v.nUserId].dpCount = v.dpCount
  421. --谁点炮
  422. self.roomInfo.memberList[v.nUserId].dpSeatId = v.dpSeatId
  423. --点炮顺序
  424. self.roomInfo.memberList[v.nUserId].dpOrder = v.dpOrder
  425. --是否大叫
  426. self.roomInfo.memberList[v.nUserId].isDj = v.isDj
  427. --是否花猪
  428. self.roomInfo.memberList[v.nUserId].isHz = v.isHz
  429. --根次数
  430. self.roomInfo.memberList[v.nUserId].genCount = v.genCount
  431. --是否已爆牌
  432. self.roomInfo.memberList[v.nUserId].isBaoPai = v.isBaoJiao
  433. --子胡牌类型(天胡、地胡等)
  434. self.roomInfo.memberList[v.nUserId].subPaiType = v.subPaiType
  435. --是否绝张
  436. self.roomInfo.memberList[v.nUserId].isJueZhang = v.isJueZhang or 0
  437. --是否金钩钓
  438. self.roomInfo.memberList[v.nUserId].isJinGouDiao = v.isJinGouDiao or 0
  439. --是否海底捞月
  440. self.roomInfo.memberList[v.nUserId].isHaiDiLaoYue = v.isHaiDiLaoYue or 0
  441. --是否海底炮
  442. self.roomInfo.memberList[v.nUserId].isHaiDiPao = v.isHaiDiPao or 0
  443. --是否杠上开花
  444. self.roomInfo.memberList[v.nUserId].isGangShangKaiHua = v.isGangShangKaiHua or 0
  445. --是否杠上炮
  446. self.roomInfo.memberList[v.nUserId].isGangShangPao = v.isGangShangPao or 0
  447. --是否抢杠胡
  448. self.roomInfo.memberList[v.nUserId].isQiangGangHu = v.isQiangGangHu or 0
  449. --是否门清
  450. self.roomInfo.memberList[v.nUserId].isMenQing = v.isMenQing or 0
  451. --是否中张
  452. self.roomInfo.memberList[v.nUserId].isZhongZhang = v.isZhongZhang or 0
  453. --摆牌 0没有摆1摆牌2独摆
  454. self.roomInfo.memberList[v.nUserId].isBaiPai = v.isBaiPai or 0
  455. if self.roomInfo.memberList[v.nUserId].result > 0 then--胡牌了
  456. for i,t in pairs(self.roomInfo.memberList[v.nUserId].handCards) do
  457. if t.card == v.huCard then
  458. table.remove(self.roomInfo.memberList[v.nUserId].handCards.Datas,i)
  459. break
  460. end
  461. end
  462. --table.removeItem(self.roomInfo.memberList[v.nUserId].handCards,self.roomInfo.memberList[v.nUserId].huCard)
  463. end
  464. end
  465. --[[self.roomInfo.resultInfos[v.nUserId].nUserId = v.nUserId
  466. self.roomInfo.resultInfos[v.nUserId].huType=v.huType
  467. --根次数
  468. self.roomInfo.resultInfos[v.nUserId].genCount = v.genCount
  469. --胡牌顺序
  470. self.roomInfo.resultInfos[v.nUserId].huOrder = v.huOrder
  471. --玩家本局输赢情况 0不胡不输 1胡,2点炮或者输
  472. self.roomInfo.resultInfos[v.nUserId].result=v.result
  473. self.roomInfo.resultInfos[v.nUserId].isXiQian=v.isXiQian]]--
  474. end
  475. -- self.roomInfo.playerInfos",VT_Vector(message.XiaojuPlayerInfo),{})
  476. --是否大局结束,结束是1
  477. self.roomInfo.isGameOver=response.isGameOver
  478. --操作统计
  479. self.roomInfo.opsCntMapString=response.opsCntMapString
  480. --萝卜牌
  481. self.roomInfo.luoboCards = response.luoboCards
  482. logD("ncmajRoom:onGameXiaoJuResponse() :", table.tostring(response))
  483. self:dispatchEvent({name = MJDefine.MJEvent.GameXiaoJuResponse,response = response});
  484. end
  485. -- 游戏正式开始
  486. function Room:onGameStartResponse(status, response)
  487. logD("-------------------- 新的一局开始了 ------------------------")
  488. if not self.roomInfo then
  489. logD("self.roomInfo no exist,容错处理!")
  490. return
  491. end
  492. logD("Room:onGameStartResponse(), ", table.tostring(response))
  493. self.roomInfo.nGameStartCount = response.nGameStartCount;
  494. self.roomInfo.nTotalGameNum = response.nTotalGameNum;
  495. self.roomInfo.nRoomOwnedUid = response.nRoomOwnedUid;
  496. self.roomInfo.nBankSeatId = response.nBankSeatId;
  497. self.roomInfo.nLeaveCardNum = 108--72
  498. self.roomInfo.shuffleList = response.shuffleList;
  499. self.roomInfo.shuffleNum = response.shuffleNum;
  500. -- 清空上一局的手牌信息
  501. self.cards = {}
  502. -- 发送广播通知,游戏开始了
  503. self:dispatchEvent({name = MJDefine.MJEvent.GameStartResponse});
  504. end
  505. --大局结算
  506. function Room:onGameDaJuResponse(status, response)
  507. logD("-------------------- 大局结算 ------------------------")
  508. if not self.roomInfo then
  509. logD("self.roomInfo no exist,容错处理!")
  510. return
  511. end
  512. for k,v in pairs(response.nTotalPlayerInfos) do
  513. if self.roomInfo.memberList[v.nUserId] then
  514. --self.roomInfo.memberList[v.nUserId].nTotalInfo=json.decode(v.nTotalInfo)
  515. v.nTotalScore = v.nTotalScore--/10 --血战总分服务器乘以了10,客户端除以10
  516. self.roomInfo.memberList[v.nUserId].nTotalScore = v.nTotalScore
  517. self.roomInfo.memberList[v.nUserId].roomCard = v.roomCard
  518. self.roomInfo.memberList[v.nUserId].costCard = v.requireCard
  519. end
  520. end
  521. --房卡消耗
  522. --[[for k,v in pairs(response.costCardInfos) do
  523. if self.roomInfo.memberList[v.nUserId] then
  524. self.roomInfo.memberList[v.nUserId].costCard = v.costCard
  525. end
  526. end--]]
  527. self.roomInfo.stopFlag = response.stopFlag
  528. --解散状态
  529. local disbandStatus = json.decode(response.strDisbandStatus)
  530. for k,v in pairs(disbandStatus) do
  531. self.dismissInfo[tonumber(k)] = tonumber(v)
  532. end
  533. --结束时间
  534. self.roomInfo.nEndTime = response.nEndTime or os.time()
  535. logD("Room:onGameDaJuResponse() :", table.tostring(response))
  536. self:dispatchEvent({name = MJDefine.MJEvent.GameDaJuResponse ,response = response});
  537. end
  538. function Room:pushTing(status,response)
  539. logD("-------------------- Room:pushTing ------------------------")
  540. logD("Room:pushTing(), ", table.tostring(response))
  541. if not self.roomInfo then
  542. print("容错处理")
  543. return
  544. end
  545. self.roomInfo.tings={}
  546. for k,v in pairs(response.pushTing) do
  547. self.roomInfo.tings=response.pushTing
  548. --self.roomInfo.tings[v.outCard]=v.tingCards.Datas
  549. end
  550. self:dispatchEvent({name = MJDefine.MJEvent.OutCardTings})
  551. self:dispatchEvent({name = MJDefine.MJEvent.ClearBaiView,showValue = 10})
  552. end
  553. -- 玩家进入桌子成功
  554. function Room:onSitDownSuccessResponse(status, response)
  555. logD("--------------------玩家进入桌子成功--------------------")
  556. logD("Room:onSitDownSuccessResponse(), ", table.tostring(response))
  557. app.net:onMsgClear()
  558. app.net:onMsgPause()
  559. -- 记录当前桌子号
  560. self:initRoomInfo()
  561. -- 获取到的房间信息
  562. -- self.gameId = response.gameId
  563. self.roomInfo.isEapCreate = response.isEapCreate --是否由电竞SDK创建的房间 1是 0否
  564. self.roomInfo.EapTime = response.EapTime -- 电竞倒计时时间
  565. self.roomInfo.gameId = response.gameId
  566. self.roomInfo.nShowTableId = response.nShowTableId
  567. self.roomInfo.nMaxPlayCount = response.nMaxPlayCount
  568. self.roomInfo.nRoomOwnedUid = response.nRoomOwnedUid
  569. self.roomInfo.nTotalGameNum = response.nTotalGameNum
  570. self.roomInfo.strGameInfo = response.strGameInfo
  571. self.roomInfo.nGameStartCount = response.nGameStartCount or 0
  572. self.roomInfo.nLeaveCardNum = response.nLeaveCardNum or 0
  573. -- 桌子上其他玩家的信息
  574. for k,v in pairs(response.memberList) do
  575. self.roomInfo.memberList[v.nUserId] = v
  576. self.roomInfo.memberList[v.nUserId].nTingStatus=MJDefine.MJTingStatus.NoTing
  577. end
  578. -- 更新椅子号
  579. self:updateUserSeateShowId()
  580. logD("Room:onSitDownSuccessResponse() roomInfo = ", table.tostring(self.roomInfo))
  581. if self.roomInfo.isEapCreate == 1 then
  582. self:sendResponse{cmd = RoomCmd.GAME_COMMAND_USER_READY}
  583. end
  584. -- 发送通知
  585. self:dispatchEvent({name = MJDefine.MJEvent.EnterRoomSuccess, gameId = self.roomInfo.gameId or app.gameId, gameType = self.roomInfo.strGameInfo.gamerule})
  586. end
  587. function Room:onWaitOperate(status, response)
  588. logD("Room:onWaitOperate(), ", table.tostring(response))
  589. self:dispatchEvent({name = MJDefine.MJEvent.WaitOperate ,response = response});
  590. end
  591. function Room:onQiangDuanOperates(status, response)
  592. logD("Room:onQiangDuanOperates(), ", table.tostring(response))
  593. self:dispatchEvent({name = MJDefine.MJEvent.QiangDuanOperates ,response = response});
  594. end
  595. function Room:onStartPiao(status, response)
  596. logD("Room:onStartPiao(), ", table.tostring(response))
  597. self:dispatchEvent({name = MJDefine.MJEvent.StartPiao ,response = response});
  598. end
  599. function Room:onPiaoResponse(status, response)
  600. logD("Room:onPiaoResponse(), ", table.tostring(response))
  601. self:dispatchEvent({name = MJDefine.MJEvent.PiaoResponse ,response = response});
  602. end
  603. --请求躺牌
  604. function Room:requestTangCards(tangCards,curSelectCard)
  605. local request = MJMessage.TangRequest:new()
  606. request.operateCodes = 2
  607. request.curOutCard = curSelectCard
  608. for _,v in ipairs(tangCards) do
  609. table.insert(request.curTangCards.Datas, v)
  610. end
  611. self:sendResponse{cmd = RoomCmd.GAME_COMMAND_USER_TANG_CARD , sender = request}
  612. end
  613. --躺返回
  614. function Room:onTangResponse(status, response)
  615. logD("Room:onTangResponse(), ", table.tostring(response))
  616. self:dispatchEvent({name = MJDefine.MJEvent.TangPaiResponse ,response = response});
  617. end
  618. --躺错误
  619. function Room:onTangError(status, response)
  620. logD("Room:onTangError(), ", table.tostring(response))
  621. local errCode = response.errCode
  622. if errCode == 1 then
  623. local tips = "摆牌错误,请重新摆牌!"--请选择正确牌型
  624. local view = require("mj_ncmaj.luaScript.Views.Compnent.ncmajShowTipsView"):new(tips)
  625. local winSize = cc.Director:getInstance():getVisibleSize()
  626. local pos = cc.p(winSize.width/2,winSize.height/2+150)
  627. view:setPosition(pos)
  628. app.mainScene:addChild(view)
  629. end
  630. self:dispatchEvent({name = MJDefine.MJEvent.BaiError ,response = response});
  631. end
  632. --通知换三张
  633. function Room:onNoticeSwapCardResponse(status, response)
  634. logD("Room:onNoticeSwapCardResponse(), ", table.tostring(response))
  635. self:dispatchEvent({name = MJDefine.MJEvent.NoticeSwapCard ,response = response});
  636. end
  637. --请求换三张
  638. function Room:requestSwapCards( cards )
  639. local request = MJMessage.GetSwapCards:new()
  640. for _,v in ipairs(cards) do
  641. table.insert(request.bySwapCard.Datas, v)
  642. --table.insert(request.byOutCard.Datas, v)
  643. end
  644. self:sendResponse{cmd = RoomCmd.GAME_COMMAND_REQUEST_CHANGE_CARD , sender = request}
  645. end
  646. --换三张错误
  647. function Room:onChangeCardError(status,response)
  648. logD("-------------------- 换三张错误 ------------------------")
  649. if not self.roomInfo then
  650. print("容错处理")
  651. return
  652. end
  653. logD("Room:onChangeCardError(), ", table.tostring(response))
  654. local msg = {
  655. [1] = "换牌数量小于3",
  656. [2] = "牌面值错误",
  657. }
  658. local m = msg[response.errFlag] or "换三张未知错误"
  659. showTooltip(""..m)
  660. self:dispatchEvent({name = MJDefine.MJEvent.SwapCardErr ,response = response});
  661. end
  662. --换三张成功
  663. function Room:onChangeCardSucc(status,response)
  664. logD("Room:onChangeCardSucc(), ", table.tostring(response))
  665. self:dispatchEvent({name = MJDefine.MJEvent.SwapCardSucc ,response = response});
  666. end
  667. --换三张成功后的信息
  668. function Room:onChangeCardInfo(status,response)
  669. logD("Room:onChangeCardInfo(), ", table.tostring(response))
  670. self:dispatchEvent({name = MJDefine.MJEvent.SwapCardSuccInfo ,response = response});
  671. end
  672. --服务器通知定缺
  673. function Room:onNoticeDingQueResponse(status,response)
  674. logD("Room:onNoticeDingQueResponse(), ", table.tostring(response))
  675. self:dispatchEvent({name = MJDefine.MJEvent.NoticeDingQue ,response = response});
  676. end
  677. --广播定缺成功
  678. function Room:onDingQueSuccResponse(status,response)
  679. logD("Room:onDingQueSuccResponse(), ", table.tostring(response))
  680. self:dispatchEvent({name = MJDefine.MJEvent.DingQueSucc ,response = response});
  681. end
  682. --定缺成功广播告诉玩家定缺类型
  683. function Room:onDingQueSuccInfoResponse(status,response)
  684. logD("Room:onDingQueSuccInfoResponse(), ", table.tostring(response))
  685. self:dispatchEvent({name = MJDefine.MJEvent.DingQueSuccInfo ,response = response});
  686. end
  687. -- 托管
  688. function Room:onHostingRequest( status, response )
  689. -- 是否托管
  690. for k,v in pairs(response.userCnt) do
  691. if v.nUserID == self:getMyUserId() then
  692. self.roomInfo.hosting = v.aiStatus;
  693. end
  694. end
  695. self.roomInfo.hostInfos = response.userCnt
  696. self:dispatchEvent({name = MJDefine.MJEvent.HostingRequest, response = response});
  697. end
  698. function Room:ctor(net)
  699. Room.super.ctor(self , net);
  700. -- 请求爆牌
  701. self:defMsgFunc{name = MJDefine.MJEvent.BaoPaiRequest,cmd = RoomCmd.GAME_COMMAND_REQUEST_BAO_PAI,sender = MJMessage.BaoPaiRequest};
  702. --请求换三张
  703. --self:defMsgFunc{name = MJDefine.MJEvent.RequestSwapCard , cmd = RoomCmd.GAME_COMMAND_REQUEST_CHANGE_CARD, sender = MJMessage.SwapCards};
  704. --客户端请求定缺
  705. self:defMsgFunc{name = MJDefine.MJEvent.RequestDingQue , cmd = RoomCmd.GAME_COMMAND_REQUEST_DINGQUE, sender = MJMessage.QueCard};
  706. -- 请求飘
  707. self:defMsgFunc{name = MJDefine.MJEvent.PiaoRequest,cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO,sender = MJMessage.PiaoRequest};
  708. -- 请求刷新桌子
  709. self:defMsgFunc{name = MJDefine.MJEvent.GetTableInfo,cmd = RoomCmd.GAME_COMMAND_GET_TABLE_INFO};
  710. --请求躺牌
  711. self:defMsgFunc{name = MJDefine.MJEvent.TangPaiRequest , cmd = RoomCmd.GAME_COMMAND_USER_TANG_CARD, sender = MJMessage.TangRequest};
  712. --玩家出牌的听牌信息
  713. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_OUT_CARD_TING_INFO,reader = MJMessage.OutCardTingInfo,func = handler(self,self.pushTing)}
  714. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_HU,reader = MJMessage.HuRespone,func = handler(self,self.onHuResponse)}
  715. --广播玩家爆牌
  716. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_BAO_PAI,reader = MJMessage.BaoPaiResponse,func = handler(self,self.onBaoPai)}
  717. --通知庄家爆牌
  718. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BANKER_BAO_PAI,reader = MJMessage.BankerBaoPai,func = handler(self,self.onBankerBaoPai)}
  719. --通知等待操作
  720. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_WAIT_OPREATE,reader = MJMessage.WaitOperate,func = handler(self,self.onWaitOperate)}
  721. --通知抢断操作
  722. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_QIANG_DUAN_OPREATE,reader = MJMessage.QiangDuanOperates,func = handler(self,self.onQiangDuanOperates)}
  723. --广播玩家开始飘
  724. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_NOTIFY_PIAO,reader = MJMessage.PiaoRequest,func = handler(self,self.onStartPiao)}
  725. --广播玩家飘结果
  726. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_PIAO_RESULT,reader = MJMessage.PiaoResponse,func = handler(self,self.onPiaoResponse)}
  727. --换三张,服务器会通过0x8122通知换牌
  728. --self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_CHANGE_CARD,reader = MJMessage.SwapCards,func = handler(self,self.onNoticeSwapCardResponse)}
  729. --换三张错误
  730. --self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_CHANGE_CARD_ERR,reader = MJMessage.SwapCardsErr,func = handler(self,self.onChangeCardError)}
  731. --换三张成功
  732. --self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_CHANGE_CARD_SUCC,reader = MJMessage.SwapCardsSucc,func = handler(self,self.onChangeCardSucc)}
  733. --换三张成功后的信息
  734. --self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_CHANGE_CARD_INFO,reader = MJMessage.SwapCardsSuccInfo,func = handler(self,self.onChangeCardInfo)}
  735. --服务器通知定缺
  736. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_BROADCAST_DINGQUE,reader = MJMessage.QueCard,func = handler(self,self.onNoticeDingQueResponse)}
  737. --当玩家操作成功后,通过0x8131广播定缺成功
  738. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_DINGQUE_SUCC,reader = MJMessage.DingQueSucc,func = handler(self,self.onDingQueSuccResponse)}
  739. --当所有玩家定缺成功后,服务器会通过广播告诉玩家定缺类型
  740. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_DINGQUE_RESULT,reader = MJMessage.DingQueSuccInfo,func = handler(self,self.onDingQueSuccInfoResponse)}
  741. -- 内容和0x8106保持统一 广播桌子上所有玩家庄家起手操作
  742. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_START_ROUND_OPERATE, reader = MJMessage.BankerOutCard,func = handler(self , self.onAfterDingQue)};
  743. --广播躺牌结果
  744. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_TANG_CARD,reader = MJMessage.TangResponse,func = handler(self,self.onTangResponse)}
  745. --躺牌失败
  746. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_USER_TANG_ERROR,reader = MJMessage.TangError,func = handler(self,self.onTangError)}
  747. -- 请求托管
  748. self:defMsgFunc{name = MJDefine.MJEvent.HostingRequest, cmd = RoomCmd.GAME_COMMAND_REQUEST_TUOGUAN, sender = MJMessage.HostingRequest}
  749. -- 收到托管回调
  750. self:defPushMsg{cmd = RoomCmd.GAME_COMMAND_TUOGUAN_RESPONSE, reader = MJMessage.TuoGuanResponse, func = handler(self,self.onHostingRequest)}
  751. end
  752. return Room;