您不能選擇超過 %s 個話題 話題必須以字母或數字為開頭,可包含連接號 ('-') 且最長為 35 個字

1091 行
38 KiB

  1. -- 五人斗地主消息处理
  2. local zgwrDdzCmd = require("pk_zgwrddz.luaScript.Protocol.zgwrDdzCmd")
  3. local zgwrDdzMessage = require("pk_zgwrddz.luaScript.Protocol.zgwrDdzMessage")
  4. require("luaScript.GameTypeDef")
  5. local Room = class("Room" , require("luaScript.Protocol.ProtocolRoomBase"))
  6. function Room:ctor(net)
  7. --self.net:removeMsgHandler(zgwrDdzCmd.GAME_COMMAND_SERVER_CHANGE_USERINFO)
  8. Room.super.ctor(self , net);
  9. --是否为断线重连
  10. self.isReconnection = false
  11. --上一次检查gps的uid,防止同一个uid检测多次
  12. self.lastCheckUid = 0
  13. -- 兼容俱乐部需要
  14. self.roomInfo = {}
  15. self.roomInfo.memberList = {}
  16. self:registeRequest()
  17. self:registeResponse()
  18. self:resetDismissData()
  19. end
  20. -- 通过玩家逻辑椅子号找到玩家ID
  21. function Room:getUserIdBySeatId(nSeatId)
  22. local p = self:getPlayerCid(nSeatId)
  23. if p then return p.userId end
  24. return nil
  25. end
  26. -- 通过玩家视图椅子号找到玩家ID
  27. function Room:getUserIdByViewId(nViewId)
  28. local p = self:getPlayerVpos(nViewId)
  29. if p then return p.userId end
  30. return nil
  31. end
  32. -- 通过玩家ID获取玩家展示的座位号
  33. function Room:getViewIdByUserId(nUserId)
  34. if self:getPlayer(nUserId) then return self:getPlayer(nUserId).viewPos end
  35. return nil
  36. end
  37. -- 通过玩家逻辑椅子号找到视图椅子号
  38. function Room:getViewIdBySeatId(nSeatId)
  39. local p = self:getPlayerCid(nSeatId)
  40. if p then return p.viewPos end
  41. return nil
  42. end
  43. -- 通过玩家ID找到逻辑椅子号
  44. function Room:getSeatIdByUserId(nViewId)
  45. local p = self:getPlayerVpos(nViewId)
  46. if p then return p.userId end
  47. return nil
  48. end
  49. -- 通过玩家视图椅子号找到逻辑椅子号
  50. function Room:getSeatIdByViewId(nUserId)
  51. local p = self:getPlayerVpos(nUserId)
  52. if p then return p.viewPos end
  53. return nil
  54. end
  55. -- 获取房间内的用户信息
  56. function Room:getUserInfo(uid)
  57. if uid then
  58. logD("Room:getUserInfo uid = "..uid)
  59. else
  60. logD("Room:getUserInfo uid = nil")
  61. end
  62. if self:getPlayer(uid) then
  63. logD("Room:getUserInfo userinfo = "..self:getPlayer(uid).jsonInfo)
  64. return self:getPlayer(uid).jsonInfo
  65. end
  66. return nil
  67. end
  68. -- 缓存房间信息
  69. function Room:setRoomInfo( roominfo )
  70. self.roomInfo = self.roomInfo or {}
  71. for k,v in pairs(roominfo) do
  72. self.roomInfo[k] = v
  73. end
  74. end
  75. -- 获取房间信息
  76. function Room:getRoomInfo()
  77. return self.roomInfo
  78. end
  79. -- 设置当前房间轮次
  80. function Room:setCurTurn( pos )
  81. self.roomInfo.curTurn = pos
  82. end
  83. -- 获取当前房价轮次
  84. function Room:getNextTurn()
  85. local MaxCount = self:getRoomInfo().nMaxPlayCount
  86. if MaxCount == 4 then
  87. if self.roomInfo.curTurn == 4 then
  88. return 1
  89. else
  90. return self.roomInfo.curTurn+1
  91. end
  92. elseif MaxCount == 3 then
  93. if self.roomInfo.curTurn == 3 then
  94. return 1
  95. else
  96. return self.roomInfo.curTurn+1
  97. end
  98. else
  99. if self.roomInfo.curTurn == 2 then
  100. return 1
  101. else
  102. return self.roomInfo.curTurn+1
  103. end
  104. end
  105. end
  106. -- 获取当前玩家的上家
  107. function Room:getPreSeatId( cid )
  108. local MaxCount = self:getRoomInfo().nMaxPlayCount
  109. if MaxCount == 4 then
  110. if cid == 0 then
  111. return 3
  112. else
  113. return cid-1
  114. end
  115. elseif MaxCount == 3 then
  116. if cid == 0 then
  117. return 2
  118. else
  119. return cid-1
  120. end
  121. else
  122. if cid == 0 then
  123. return 1
  124. else
  125. return cid-1
  126. end
  127. end
  128. end
  129. -- 添加玩家,如果玩家存在则更新数据
  130. -- key - value 缓存
  131. function Room:addPlayer( pl )--and update
  132. self._players = self._players or {}
  133. local player = self._players[tostring(pl.userId)]
  134. if player then
  135. for k,v in pairs(pl) do
  136. player[k] = v
  137. end
  138. else
  139. self._players[tostring(pl.userId)] = pl
  140. end
  141. end
  142. -- 删除玩家
  143. function Room:delPlayer( uid )
  144. local player = self._players[tostring(uid)]
  145. if player then
  146. self._players[tostring(uid)] = nil
  147. end
  148. end
  149. -- 获取玩家
  150. function Room:getPlayer( uid )
  151. local player = self._players[tostring(uid)]
  152. return player
  153. end
  154. -- 根据座位号获取玩家数据
  155. function Room:getPlayerCid( cid )
  156. for _,v in pairs(self._players) do
  157. if v.seatId == cid then
  158. return v
  159. end
  160. end
  161. return nil
  162. end
  163. -- 根据视角获取玩家数据
  164. function Room:getPlayerVpos( viewPos )
  165. for _,v in pairs(self._players) do
  166. if v.viewPos == viewPos then
  167. return v
  168. end
  169. end
  170. return nil
  171. end
  172. -- 获取所有玩家
  173. function Room:getPlayers()
  174. return self._players or {}
  175. end
  176. -- 获取玩家数量
  177. function Room:getPlayerNum()
  178. local count = 0
  179. for _,_ in pairs(self._players) do
  180. count = count + 1
  181. end
  182. return count
  183. end
  184. -- 获取玩家信息用于GPS
  185. function Room:getUserInfoList()
  186. local userInfoList = {}
  187. for k,v in pairs(self._players) do
  188. userInfoList[v.userId] = {nSeatId=v.seatId, userInfo=v.jsonInfo}
  189. end
  190. return userInfoList
  191. end
  192. -- 根据id判断是否是自己
  193. function Room:isMyself( uid )
  194. return tonumber(app.user.loginInfo.uid) == tonumber(uid)
  195. end
  196. function Room:getMyUserId()
  197. return tonumber(app.user.loginInfo.uid)
  198. end
  199. -- 获取自己信息
  200. function Room:getMyself()
  201. return self._players[tostring(app.user.loginInfo.uid)]
  202. end
  203. -- 获取模式牌张数
  204. function Room:getRuleCardsNum()
  205. local gameInfo = self:getRoomInfo().nGameInfo
  206. local data = json.decode(gameInfo)
  207. local allCards = 0
  208. if tonumber(data.gamerule) == 1 then --经典
  209. allCards = 16
  210. else--十五张
  211. allCards = 15
  212. end
  213. return allCards
  214. end
  215. -- 视角转换
  216. function Room:transPos( pos )
  217. local myself = self:getMyself()
  218. local MaxCount = self:getRoomInfo().nMaxPlayCount or 5
  219. local showPos = 0
  220. local myPos = myself.seatId
  221. if myPos <= pos then
  222. showPos = pos - myPos
  223. elseif myPos > pos then
  224. showPos = MaxCount - myPos + pos
  225. end
  226. return showPos+1
  227. end
  228. -- 更新玩家flag
  229. function Room:updateFlag( userId, flag )
  230. -- 俱乐部需要
  231. if self.roomInfo.memberList[userId] == nil then
  232. self.roomInfo.memberList[userId] = {}
  233. end
  234. self.roomInfo.memberList[userId].nUserId = userId
  235. self.roomInfo.memberList[userId].nPlayerFlag = flag
  236. end
  237. function Room:resetDismissData()
  238. --玩家解散数据(userId 为Key,解散类型为value)
  239. self.dismissInfo = {}
  240. --解散总时间
  241. self.roomInfo.nDismissToTalTime = nil
  242. -- 解散倒计时
  243. self.roomInfo.nDismissStateTime = nil
  244. -- 解散显示
  245. self.roomInfo.nShowDismiss = false
  246. end
  247. -- 清除缓存信息
  248. function Room:cleanCache()
  249. self:resetDismissData()
  250. self._players = {}
  251. self.roomInfo = {}
  252. self.roomInfo.memberList = {}
  253. end
  254. -------------------------------------------------------------------------------------------
  255. -------------------------------------------------------------------------------------------
  256. -- 我发起请求解散房间
  257. function Room:requestDismissRoom(opType)
  258. --1: 表示发起解散 2:同意解散 3:不同意解散
  259. local request = zgwrDdzMessage.DismissRequest:new()
  260. request.operateType = opType
  261. self:sendResponse{cmd = zgwrDdzCmd.GAME_COMMAND_DISBAND_GAME , sender = request}
  262. end
  263. -- 请求出牌
  264. function Room:requestOutCards( cards ,dcards)
  265. if not dcards then
  266. dcards = cards
  267. end
  268. local request = zgwrDdzMessage.GameOutCards:new()
  269. if cards and #cards > 0 then
  270. request.opType = 1--正常出牌
  271. else
  272. request.opType = 0--pass
  273. end
  274. --出的牌 癞子保持0x5D
  275. for _,v in ipairs(cards) do
  276. table.insert(request.byOutCard.Datas, v)
  277. end
  278. --出的牌 癞子代替具体的牌(0x6X)
  279. for _,v in ipairs(dcards) do
  280. table.insert(request.byOutCardD.Datas, v)
  281. end
  282. logD("Room:requestOutCards = "..table.tostring(request))
  283. self:sendResponse{cmd = zgwrDdzCmd.GAME_CAMMAND_OUT_CARDS , sender = request}
  284. end
  285. -- 请求获取可出牌的牌组(带癞子的牌组需要请求)
  286. function Room:requestGetOutCards( cards )
  287. local request = zgwrDdzMessage.GetOutCards:new()
  288. --出的牌 癞子保持0x5D
  289. for _,v in ipairs(cards) do
  290. table.insert(request.byOutCard.Datas, v)
  291. end
  292. logD("Room:requestGetOutCards = "..table.tostring(request))
  293. self:sendResponse{cmd = zgwrDdzCmd.GAME_COMMAND_GET_GROUP_CARDS , sender = request}
  294. end
  295. -------------------------------------------------------------------------------------------
  296. -------------------------------------------------------------------------------------------
  297. -- 注册客户端发送到服务器的消息
  298. function Room:registeRequest()
  299. -- 离开房间
  300. self:defMsgFunc{name = "callLeaveRequest" , cmd = zgwrDdzCmd.GAME_COMMAND_USER_LEAVE};
  301. -- 玩家请求准备
  302. self:defMsgFunc{name = "callReadyRequestPdk" , cmd = zgwrDdzCmd.GAME_COMMAND_USER_READY};
  303. -- 客户端发起快速请求
  304. --self:defMsgFunc{name = "requestFastStartGame", cmd = zgwrDdzCmd.GAME_COMMAND_FAST_START_GAME, sender = zgwrDdzMessage.FastStartRequest};
  305. -- 玩家请求抢地主
  306. self:defMsgFunc{name = "requestGrabLord" , cmd = zgwrDdzCmd.REQUEST_GRAB_LORD,sender = zgwrDdzMessage.GrabLordRequest};
  307. -- 玩家请求加倍
  308. self:defMsgFunc{name = "requestAddMult" , cmd = zgwrDdzCmd.REQUEST_DOUBLE,sender = zgwrDdzMessage.AddMultRequest};
  309. -- 玩家请求选牌(暗地主)
  310. self:defMsgFunc{name = "requestSelectCard" , cmd = zgwrDdzCmd.PLAYER_REQURST_SELECT_CARD,sender = zgwrDdzMessage.Card};
  311. -- 玩家请求获取手牌
  312. self:defMsgFunc{name = "requestGetUserCards" , cmd = zgwrDdzCmd.GAME_COMMAND_GET_USER_CARDS};
  313. -- 请求托管(取消or发送)
  314. self:defMsgFunc{name = 'HostingRequest', cmd = zgwrDdzCmd.GAME_COMMAND_USER_HOSTING_REQUEST, sender = zgwrDdzMessage.HostingRequest}
  315. -- GPS信息发生变化的时候主动给服务器发消息
  316. app:addEventListener("onUpdateLoctionSuccessed", handler(self, self.onGpsChangeRequest))
  317. end
  318. -- 注册服务器发送到客户端的消息监听
  319. function Room:registeResponse()
  320. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_LOGIN_GAME_SUCCESS, reader = zgwrDdzMessage.GameLoginSuccess, func = handler(self , self.onResponseLoginSuc)};
  321. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_LOGIN_GAME_ERR, reader = zgwrDdzMessage.GameLoginFailed, func = handler(self , self.onResponseLoginFailed)};
  322. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_USER_READY, reader = zgwrDdzMessage.GameUserReady, func = handler(self , self.onResponseUserReady)};
  323. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_LOGOUT_GAME_SUCCESS, reader = zgwrDdzMessage.GameUserLogoutSuc, func = handler(self , self.onResponseLogoutSuc)};
  324. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_USER_LOGOUT, reader = zgwrDdzMessage.GameBroadcastUserLogout, func = handler(self , self.onResponseBroadcastLogout)};
  325. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_USER_LOGIN, reader = zgwrDdzMessage.GameUserEnter, func = handler(self , self.onResponseBroadcastLogin)};
  326. -- 玩家收到解散房间的请求
  327. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_DISBAND_GAME, reader = zgwrDdzMessage.DismissResponse, func = handler(self , self.onDismissResponse)};
  328. -- 收到玩家申请解散房间
  329. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_DISBAND_GAME, reader = zgwrDdzMessage.DismissResult, func = handler(self , self.onUserDismissResultResponse)};
  330. -- 收到其他玩家掉线信息
  331. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_USER_LEAVE, reader = zgwrDdzMessage.OtherDroppedResponse, func = handler(self , self.onOtherDroppedResponse)};
  332. --------------------------------------------------------------------------
  333. -- 游戏处理逻辑协议
  334. --------------------------------------------------------------------------
  335. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_GAME_START, reader = zgwrDdzMessage.GameBroadcastGameStart, func = handler(self , self.onResponseGameStart)};
  336. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_SEND_HAND_CARD, reader = zgwrDdzMessage.GameSendCards, func = handler(self , self.onResponseSendCards)};
  337. -- self:defPushMsg{cmd = zgwrDdzCmd.GAME_CAMMAND_SEND_TIPS, reader = zgwrDdzMessage.GameReturnTips, func = handler(self , self.onResponseSendTips)};
  338. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_OUT_CARD_ERR, reader = zgwrDdzMessage.GameOutCardsErr, func = handler(self , self.onResponseOutCardsErr)};
  339. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_OUT_CARD, reader = zgwrDdzMessage.GameBroadcastOutCards, func = handler(self , self.onResponseOutCards)};
  340. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_RESULT, reader = zgwrDdzMessage.GameBroadcastResult, func = handler(self , self.onResponseGameResult)};
  341. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_GAME_OVER, reader = zgwrDdzMessage.GameGameOver, func = handler(self , self.onResponseGameOver)};
  342. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_RECONNECT_SUCCESS, reader = zgwrDdzMessage.GameGameRecover, func = handler(self , self.onResponseGameRecover)};
  343. -- 更新玩家分数
  344. --self:defPushMsg{cmd = zgwrDdzCmd.GAME_CAMMAND_BROADCAST_SCORES, reader = zgwrDdzMessage.GameUpdateScore, func = handler(self , self.onResponseUpdateScore)};
  345. -- 更新当前轮次
  346. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_TURNS, reader = zgwrDdzMessage.GameBroadcastTurns, func = handler(self , self.onResponseUpdateTurns)};
  347. -- 快速开始请求返回
  348. --self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_FAST_START_RESULT, reader = zgwrDdzMessage.FastStartRequestResult, func = handler(self, self.onUserRequestFast)}
  349. -- 快速开始广播请求
  350. --self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROAD_FAST_START_GAME, reader = zgwrDdzMessage.FastStartStatus, func = handler(self, self.onBroadcastFastRequest)}
  351. -- 快速开始成功
  352. --self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROAD_QUICKLY_START, reader = zgwrDdzMessage.UpdateSeatIds, func = handler(self, self.onFastStartSucc)}
  353. --更新游戏状态
  354. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_GAME_STATUS, reader = zgwrDdzMessage.UpdateGameStatus, func = handler(self , self.onUpdateGameStatus)};
  355. --通知玩家抢地主
  356. self:defPushMsg{cmd = zgwrDdzCmd.BROADCAST_NOTICE_GRAB_LORD, reader = zgwrDdzMessage.NoticeGrabLord, func = handler(self , self.onNoticeGrabLord)};
  357. --无人抢地主重新洗牌
  358. self:defPushMsg{cmd = zgwrDdzCmd.BROADCAST_SHUFFLE_CARDS, reader = zgwrDdzMessage.EmptyContent, func = handler(self , self.onShuffleCards)};
  359. --广播抢地主结果
  360. self:defPushMsg{cmd = zgwrDdzCmd.BROADCAST_GRAB_LORD_RESULT, reader = zgwrDdzMessage.BroadGrabLordResult, func = handler(self , self.onBroadGrabLordResult)};
  361. --将底牌发给地主
  362. self:defPushMsg{cmd = zgwrDdzCmd.SEND_DICARDS_TO_LORD, reader = zgwrDdzMessage.SendDiCardsToLord, func = handler(self , self.onSendDiCardsToLord)};
  363. --通知玩家加倍
  364. self:defPushMsg{cmd = zgwrDdzCmd.BROADCAST_NOTICE_DOUBLE, reader = zgwrDdzMessage.BroadNoticeDouble, func = handler(self , self.onBroadNoticeDouble)};
  365. --玩家加倍结果
  366. self:defPushMsg{cmd = zgwrDdzCmd.BROADCAST_DOUBLE_RESULT, reader = zgwrDdzMessage.AddMultResult, func = handler(self , self.onAddMultResult)};
  367. --广播地主选牌(暗地主)
  368. self:defPushMsg{cmd = zgwrDdzCmd.BROADCAST_LORD_SELECT_CARD, reader = zgwrDdzMessage.BroadLordSelectCard, func = handler(self , self.onBroadLordSelectCard)};
  369. --广播玩家选牌结果
  370. self:defPushMsg{cmd = zgwrDdzCmd.PLAYER_REQURST_SELECT_CARD, reader = zgwrDdzMessage.Card, func = handler(self , self.onLordSelectCardResult)};
  371. --告知暗地主玩家
  372. self:defPushMsg{cmd = zgwrDdzCmd.NOTICE_ANLORD_PLAYER, reader = zgwrDdzMessage.NoticeAnLordPlayer, func = handler(self , self.onNoticeAnLordPlayer)};
  373. --玩家出牌轮次广播
  374. --self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_TURNS, reader = zgwrDdzMessage.BroadPlayerTurn, func = handler(self , self.onBroadPlayerTurn)};
  375. --获取出牌的牌组
  376. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_GET_GROUP_CARDS, reader = zgwrDdzMessage.GetOutCardsResult, func = handler(self , self.onGetOutCardsResult)};
  377. --广播游戏倍数变化
  378. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_BROADCAST_RATE_CHANGE, reader = zgwrDdzMessage.UpdateGameMult, func = handler(self , self.onUpdateGameMult)};
  379. --玩家获取手牌
  380. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_GET_USER_CARDS, reader = zgwrDdzMessage.BroadLordSelectCard, func = handler(self , self.onGetUserCards)};
  381. -- 收到托管回调
  382. self:defPushMsg{cmd = zgwrDdzCmd.GAME_COMMAND_USER_HOSTING_RESPONSE, reader = zgwrDdzMessage.HostingResponse, func = handler(self,self.onHostingResponse)}
  383. end
  384. --玩家获取手牌
  385. function Room:onGetUserCards( status, response )
  386. logD("Room:onGetUserCards response = "..table.tostring(response))
  387. self:dispatchEvent({name = "onGetUserCards" ,response = response})
  388. end
  389. --广播游戏倍数变化
  390. function Room:onUpdateGameMult( status, response )
  391. logD("Room:onUpdateGameMult response = "..table.tostring(response))
  392. self:dispatchEvent({name = "onUpdateGameMult" ,response = response})
  393. end
  394. --获取出牌的牌组
  395. function Room:onGetOutCardsResult( status, response )
  396. logD("Room:onGetOutCardsResult response = "..table.tostring(response))
  397. self:dispatchEvent({name = "onGetOutCardsResult" ,response = response})
  398. end
  399. --[[--玩家出牌轮次广播
  400. function Room:onBroadPlayerTurn( status, response )
  401. logD("Room:onBroadPlayerTurn response = "..table.tostring(response))
  402. self:dispatchEvent({name = "onBroadPlayerTurn" ,response = response})
  403. end--]]
  404. --告知暗地主玩家
  405. function Room:onNoticeAnLordPlayer( status, response )
  406. logD("Room:onNoticeAnLordPlayer response = "..table.tostring(response))
  407. self:dispatchEvent({name = "onNoticeAnLordPlayer" ,response = response})
  408. end
  409. --广播玩家选牌结果
  410. function Room:onLordSelectCardResult( status, response )
  411. logD("Room:onLordSelectCardResult response = "..table.tostring(response))
  412. self:dispatchEvent({name = "onLordSelectCardResult" ,response = response})
  413. end
  414. --广播地主选牌(暗地主)
  415. function Room:onBroadLordSelectCard( status, response )
  416. logD("Room:onBroadLordSelectCard response = "..table.tostring(response))
  417. self:dispatchEvent({name = "onBroadLordSelectCard" ,response = response})
  418. end
  419. --玩家加倍结果
  420. function Room:onAddMultResult( status, response )
  421. logD("Room:onAddMultResult response = "..table.tostring(response))
  422. self:dispatchEvent({name = "onAddMultResult" ,response = response})
  423. end
  424. --将底牌发给地主
  425. function Room:onSendDiCardsToLord( status, response )
  426. logD("Room:onSendDiCardsToLord response = "..table.tostring(response))
  427. self:dispatchEvent({name = "onSendDiCardsToLord" ,response = response})
  428. end
  429. --通知玩家加倍
  430. function Room:onBroadNoticeDouble( status, response )
  431. logD("Room:onBroadNoticeDouble response = "..table.tostring(response))
  432. self:dispatchEvent({name = "onBroadNoticeDouble" ,response = response})
  433. end
  434. --广播抢地主结果
  435. function Room:onBroadGrabLordResult( status, response )
  436. logD("Room:onBroadGrabLordResult response = "..table.tostring(response))
  437. self:dispatchEvent({name = "onBroadGrabLordResult" ,response = response})
  438. end
  439. --通知玩家抢地主
  440. function Room:onShuffleCards( status, response )
  441. logD("Room:onShuffleCards response = "..table.tostring(response))
  442. self:dispatchEvent({name = "onShuffleCards" ,response = response})
  443. end
  444. --通知玩家抢地主
  445. function Room:onNoticeGrabLord( status, response )
  446. logD("Room:onNoticeGrabLord response = "..table.tostring(response))
  447. self:dispatchEvent({name = "onNoticeGrabLord" ,response = response})
  448. end
  449. --更新游戏状态
  450. function Room:onUpdateGameStatus( status, response )
  451. logD("Room:onUpdateGameStatus response = "..table.tostring(response))
  452. self:dispatchEvent({name = "onUpdateGameStatus" ,response = response})
  453. end
  454. -- 快速开始请求返回
  455. function Room:onUserRequestFast( status, response )
  456. --快速开始请求错误提示错误
  457. local errTxt ={
  458. [0] = "成功",
  459. [1] = "人数不够",
  460. [2] = "其他人已请求",
  461. [3] = "房间人数已满",
  462. [4] = "非法操作"
  463. }
  464. local txt = errTxt[response.result]
  465. if txt then
  466. showTooltip(txt)
  467. end
  468. end
  469. -- 快速开始操作广播
  470. function Room:onBroadcastFastRequest( status, response )
  471. logD("Room:onBroadcastFastRequest response = "..table.tostring(response))
  472. self:dispatchEvent({name = "onBroadcastFastRequest" ,response = response})
  473. end
  474. -- 游戏快速开始,更新玩家座位号
  475. function Room:onFastStartSucc( status, response )
  476. logD("Room:onFastStartSucc response = "..table.tostring(response))
  477. --更新最大人数
  478. self.roomInfo.nMaxPlayCount = #response.pList
  479. -- 更新椅子号
  480. for _,v in pairs(response.pList) do
  481. self:addPlayer({userId = v.nUserId, seatId = v.nSeatId})
  482. end
  483. -- 更新视图ID
  484. for _,v in pairs(response.pList) do
  485. self:addPlayer({userId = v.nUserId, viewPos = self:transPos(v.nSeatId)})
  486. end
  487. self:dispatchEvent({name = "onFastStartSucc" ,response = response})
  488. end
  489. -- 更新当前房间轮次
  490. function Room:onResponseUpdateTurns( status, response )
  491. self:dispatchEvent({name = "onResponseUpdateTurns",response = response})
  492. end
  493. -- 更新玩家分数
  494. function Room:onResponseUpdateScore( status, response )
  495. self:dispatchEvent({name = "onResponseUpdateScore",response = response})
  496. end
  497. -- 其他玩家掉线
  498. function Room:onOtherDroppedResponse( status, response )
  499. -- logD("onOtherDroppedResponse:", table.tostring(response))
  500. self:dispatchEvent({name = "onOtherDroppedResponse",response = response})
  501. end
  502. -- 加入房间成功回调处理
  503. function Room:onResponseLoginSuc( status, response )
  504. -- logD("PDK_onResponseLoginSuc:", table.tostring(response))
  505. self:cleanCache()
  506. local roomInfo = {}
  507. roomInfo.nGameInfo = response.nGameInfo--创建房间参数信息
  508. roomInfo.nGameStartCount = response.nGameStartCount or 0
  509. roomInfo.nTotalGameNum = response.nTotalGameNum
  510. roomInfo.nMaxPlayCount = response.nMaxPlayCount
  511. roomInfo.nRoomOwnedUid = response.nRoomOwnedUid
  512. roomInfo.nShowTableId = response.nShowTableId
  513. ------------------------------------和断线重连对比缺失字段,所以设置默认值-------------------------------------------------
  514. roomInfo.gameStatus = 0
  515. roomInfo.reBankerId = -1
  516. --房间是否是解散状态
  517. roomInfo.bUserDisbandGame = 0
  518. --解散剩余时间
  519. roomInfo.leftTimeOut = 0
  520. --快速开始状态1:有人申请提前开始
  521. roomInfo.userFastStartStatus = 0
  522. --快速开始剩余时间
  523. roomInfo.fastStartTimeout = 0
  524. --每个玩家对应快速开始状态
  525. roomInfo.fastStartPlayersStatus = {}
  526. --当前操作玩家id
  527. roomInfo.curOpUid = 0
  528. --当前操作玩家操作类型 0-pass 1-可以出牌也可以pass 2-只能出牌
  529. roomInfo.curOpType = 0
  530. roomInfo.recoverItem = nil
  531. ---------------------------------------------------------------------------------------
  532. self:setRoomInfo(roomInfo)
  533. -- 处理玩家信息
  534. for _,v in ipairs(response.players) do
  535. local player = {}
  536. player.playFlag = v.playFlag
  537. player.userId = v.userId
  538. player.seatId = v.seatId
  539. player.jsonInfo = v.jsonInfo
  540. local oinfo = json.decode(v.jsonInfo)
  541. player.unionid = oinfo.unionid
  542. player.headimgurl = oinfo.headimgurl
  543. player.gpsInfo = oinfo.gpsInfo
  544. player.sex = oinfo.sex
  545. player.openid = oinfo.openid
  546. player.nickname = oinfo.nickname
  547. player.areano = oinfo.areano
  548. --在线状态 0离线 1在线
  549. player.onlineStatus = v.onlineStatus
  550. self:addPlayer(player)
  551. -- 俱乐部需要
  552. if self.roomInfo.memberList[v.userId] == nil then
  553. self.roomInfo.memberList[v.userId] = {}
  554. end
  555. self.roomInfo.memberList[v.userId].nUserId = v.userId
  556. self.roomInfo.memberList[v.userId].nSeatId = v.seatId
  557. self.roomInfo.memberList[v.userId].nPlayerFlag = v.playFlag
  558. self.roomInfo.memberList[v.userId].userInfo = v.jsonInfo
  559. end
  560. for _,v in pairs(self._players) do
  561. self:addPlayer({userId=v.userId, viewPos=self:transPos(v.seatId)})
  562. end
  563. self:dispatchEvent({name = "onEnterRoomSuccess", gameId = GAME_IDS.zgWuRenDouDiZhu, gameType = 1})
  564. end
  565. -- 加入房间失败返回
  566. function Room:onResponseLoginFailed( status, response )
  567. -- logD("onResponseLoginFailed:", table.tostring(response))
  568. if not self.roomInfo then
  569. print("self.roomInfo no exist,容错处理!")
  570. return
  571. end
  572. local errorCode = response.nErrNo
  573. local errorString = ENTER_ROOM_RET_STR[errorCode] or string.format("Unkown Error errorCode = %s", errorCode)
  574. showTooltip(errorString)
  575. -- 发送通知
  576. self:dispatchEvent({name = "onSitDownFailedResponse",response = response})
  577. end
  578. -- 玩家准备广播
  579. function Room:onResponseUserReady( status, response )
  580. -- logD("onResponseUserReady:", table.tostring(response))
  581. self:addPlayer({userId = response.userId, ready = 1})
  582. self:updateFlag( response.userId, 1 )
  583. self:dispatchEvent({name = "onResponseUserReady",userId = response.userId})
  584. self:dispatchEvent({name = "onUserReadyResponse"})--刷新俱乐部里显示状态
  585. end
  586. -- 玩家退出桌子成功
  587. function Room:onResponseLogoutSuc( status, response )
  588. logD("onResponseLogoutSuc:", table.tostring(response))
  589. -- fixed:房卡信息没刷新
  590. -- local ttExtInfo = string.split(response.userInfo, ",")
  591. -- app.user.loginInfo.historyCardNum = ttExtInfo[1] or app.user.loginInfo.historyCardNum
  592. -- app.user.loginInfo.curCardNum = ttExtInfo[2] or app.user.loginInfo.curCardNum
  593. local ttExtInfo = string.split(response.extInfo, ",")
  594. app.user.loginInfo.historyCardNum = ttExtInfo[1];
  595. app.user.loginInfo.curCardNum = ttExtInfo[2];
  596. self.checkGpsID = nil
  597. self:dispatchEvent({name = "onUserExitResponseRoom",response = response})
  598. end
  599. -- 广播桌子玩家离开
  600. function Room:onResponseBroadcastLogout( status, response )
  601. -- logD("onResponseBroadcastLogout:", table.tostring(response))
  602. self:delPlayer(response.userId)
  603. self.roomInfo.memberList[response.userId] = nil
  604. self:updateGpsUserInfo(nil,false)
  605. if self.checkGpsID then
  606. for i,v in pairs(self.checkGpsID) do
  607. if v == response.userId then
  608. table.remove(self.checkGpsID,i)
  609. end
  610. end
  611. end
  612. self:dispatchEvent({name = "onResponseBroadcastLogout",userId = response.userId})
  613. end
  614. -- 其他玩家加入房间
  615. function Room:onResponseBroadcastLogin( status, response )
  616. -- logD("onResponseBroadcastLogin:", table.tostring(response))
  617. local player = {}
  618. local v = response
  619. player.playFlag = v.playFlag--//是否正在玩 -1: 用户站起 0: 用户坐下 1: 准备状态 2: 正在玩
  620. player.userId = v.userId
  621. player.seatId = v.seatId
  622. player.jsonInfo = v.jsonInfo
  623. local oinfo = json.decode(v.jsonInfo)
  624. player.unionid = oinfo.unionid
  625. player.headimgurl = oinfo.headimgurl
  626. player.gpsInfo = oinfo.gpsInfo
  627. player.sex = oinfo.sex
  628. player.openid = oinfo.openid
  629. player.nickname = oinfo.nickname
  630. player.areano = oinfo.areano
  631. player.viewPos = self:transPos(v.seatId)
  632. self:addPlayer(player)
  633. -- 俱乐部需要
  634. if self.roomInfo.memberList[v.userId] == nil then
  635. self.roomInfo.memberList[v.userId] = {}
  636. end
  637. self.roomInfo.memberList[v.userId].nUserId = v.userId
  638. self.roomInfo.memberList[v.userId].nSeatId = v.seatId
  639. self.roomInfo.memberList[v.userId].nPlayerFlag = v.playFlag
  640. self.roomInfo.memberList[v.userId].userInfo = v.jsonInfo
  641. --检测GPS
  642. self:updateGpsUserInfo(v.userId,true)
  643. self:dispatchEvent({name = "onResponseBroadcastLogin", pInfo = player})
  644. end
  645. function Room:onDismissResponse( status, response )
  646. logD("onDismissResponse:", table.tostring(response))
  647. --[[-- nUserId
  648. , defVar("nUserId", VT_Int, 0)
  649. -- 1: 表示发起解散 2:同意解散 3:不同意解散
  650. , defVar("operateType", VT_UChar, 0)
  651. -- 剩余解散超时时间
  652. , defVar("timeLeft", VT_Short, 0) --]]
  653. if not self.roomInfo then
  654. print("self.roomInfo no exist,容错处理!")
  655. return
  656. end
  657. local nUserId = response.nUserId
  658. local operateType = response.operateType
  659. -- 收到玩家发起请求时,数据重置
  660. if response.operateType == 1 then
  661. self:resetDismissData()
  662. end
  663. --数据记录
  664. self.dismissInfo[nUserId] = operateType
  665. self:dispatchEvent({name = "onDismissResponse", response = response})
  666. end
  667. function Room:onUserDismissResultResponse( status, response )
  668. logD("onUserDismissResultResponse:", table.tostring(response))
  669. if not self.roomInfo then
  670. print("self.roomInfo no exist,容错处理!")
  671. return
  672. end
  673. if response.errorCode == 1 then
  674. showTooltip("operateType取值范围不对")
  675. elseif response.errorCode == 2 then
  676. showTooltip("当前没人发起解散")
  677. elseif response.errorCode == 3 then
  678. showTooltip("已经有人申请解散")
  679. elseif response.errorCode == 4 then
  680. showTooltip("用户已经操作过")
  681. else
  682. -- 其他玩家的解散状态
  683. for uid, value in pairs(response.memberList) do
  684. self.dismissInfo[uid] = value.dismissState
  685. end
  686. self:dispatchEvent({name = "onDismissResponse", response = response})
  687. end
  688. end
  689. --------------------------------------------------------------------------
  690. -- 游戏处理逻辑协议
  691. --------------------------------------------------------------------------
  692. -- 广播游戏开始 0x8101
  693. function Room:onResponseGameStart( status, response )
  694. -- logD("onResponseGameStart:", table.tostring(response))
  695. self:setCurTurn(0)
  696. self:setRoomInfo({nGameStartCount=response.gameStartCount, nTotalGameNum=totalGamenum})
  697. self:dispatchEvent({name = "onResponseGameStart", response = response})
  698. end
  699. -- 给玩家发牌 0x8102
  700. function Room:onResponseSendCards( status, response )
  701. logD("onResponseSendCards:", table.tostring(response))
  702. self:dispatchEvent({name = "onResponseSendCards", response = response})
  703. end
  704. -- 服务器返回最佳提示
  705. function Room:onResponseSendTips( status, response )
  706. -- logD("onResponseSendTips:", table.tostring(response))
  707. self:dispatchEvent({name = "onResponseSendTips", response = response})
  708. end
  709. -- 服务器返回出牌错误提示
  710. function Room:onResponseOutCardsErr( status, response )
  711. logD("onResponseOutCardsErr:", table.tostring(response))
  712. local msg = {
  713. [0] = "出牌成功",
  714. [1] = "轮次错误",
  715. [2] = "牌型错误",
  716. [3] = "出牌错误",--牌与手牌对不上
  717. [4] = "出牌为死牌,请重新出牌!",--牌与手牌对不上
  718. [5] = "出牌错误",--牌与手牌对不上
  719. }
  720. if response.errFlag == 0 then return end--出牌成功了不做任何处理
  721. if self:isMyself(response.userId) then
  722. local m = msg[response.errFlag] or "出牌错误"
  723. showTooltip(""..m)
  724. end
  725. self:dispatchEvent({name = "onResponseOutCardsErr", response = response})
  726. end
  727. --玩家出牌成功,广播
  728. function Room:onResponseOutCards( status, response )
  729. -- print("----------------self userId-------------------------"..self:getMyself().userId)
  730. logD("onResponseOutCards:", table.tostring(response))
  731. self:dispatchEvent({name = "onResponseOutCards", response = response})
  732. end
  733. --单局结算
  734. function Room:onResponseGameResult( status, response )
  735. logD("onResponseGameResult:", table.tostring(response))
  736. self:dispatchEvent({name = "onResponseGameResult", response = response})
  737. end
  738. --总结算
  739. function Room:onResponseGameOver( status, response )
  740. logD("onResponseGameOver:", table.tostring(response))
  741. self:dispatchEvent({name = "onResponseGameOver", response = response})
  742. end
  743. --断线重连
  744. function Room:onResponseGameRecover( status, response )
  745. --logD("onResponseGameRecover:", table.tostring(response))
  746. self.isReconnection = true
  747. self:cleanCache()
  748. local roomInfo = {}
  749. roomInfo.nMaxPlayCount = response.maxPlayCount
  750. roomInfo.nRoomOwnedUid = response.roomOwnedUid
  751. roomInfo.nstartGameUid = roomInfo.startGameUid
  752. roomInfo.nGameStartCount = response.gameStartCount
  753. roomInfo.nTotalGameNum = response.totalGamenum
  754. roomInfo.nGameInfo = response.gameInfo--创建房间参数信息
  755. roomInfo.bUserDisbandGame = response.bUserDisbandGame
  756. roomInfo.gameStatus = response.gameStatus
  757. roomInfo.leftTimeOut = response.leftTimeOut
  758. roomInfo.nShowTableId = response.nShowTableId
  759. --总倍数
  760. roomInfo.nHMIShowMult = response.nHMIShowMult
  761. --基础倍数
  762. roomInfo.nBaseMult = response.nBaseMult
  763. --游戏倍数(涨水)
  764. roomInfo.nGameCurMult = response.nGameCurMult
  765. --四张炸倍数
  766. roomInfo.fourBomb = response.fourBomb
  767. --双王炸倍数
  768. roomInfo.twoKingBomb = response.twoKingBomb
  769. --八张炸倍数
  770. roomInfo.eightBomb = response.eightBomb
  771. --四王炸倍数
  772. roomInfo.fourKingBomb = response.fourKingBomb
  773. --12张炸倍数
  774. roomInfo.twelveBomb = response.twelveBomb
  775. --6王炸倍数
  776. roomInfo.sixKingBomb = response.sixKingBomb
  777. --是否自吃
  778. roomInfo.isSelfEat = response.isSelfEat
  779. --游戏底分
  780. roomInfo.nCurBaseScore = response.nCurBaseScore
  781. --地主ID
  782. roomInfo.nLordId = response.nLordId
  783. --暗地主ID
  784. roomInfo.nDarkLordId = response.nDarkLordId
  785. --暗地主牌
  786. roomInfo.nDarkLordCard = response.nDarkLordCard
  787. --底牌
  788. roomInfo.diCards = response.diCards
  789. --当前桌上最后一手牌是否显示地主标签0不显示1显示
  790. roomInfo.lastShowDzFlag = response.lastShowDzFlag
  791. --当前桌上最后一手牌出牌者id
  792. roomInfo.lastOpUid = response.lastOpUid
  793. --当前桌上最后一手牌牌型
  794. roomInfo.lastOpType = response.lastOpType
  795. --当前桌上最后一手牌
  796. roomInfo.lastOutCards = response.lastOutCards
  797. --当前操作玩家id
  798. roomInfo.curOpUid = response.curOpUid
  799. --当前操作玩家出牌状态 0-pass 1-可以出牌也可以pass 2-只能出牌
  800. roomInfo.curOpType = response.outCardStates
  801. --最先出完牌的玩家id
  802. roomInfo.winUserId = response.winUserId
  803. --是否春天 1:春天 0:什么都不是
  804. roomInfo.spring = response.spring
  805. --暗地主可选的牌
  806. roomInfo.canSelectCards = response.canSelectCards
  807. roomInfo.recoverItem = response.recoverItem
  808. --[[--快速开始状态1:有人申请提前开始
  809. roomInfo.userFastStartStatus = response.userFastStartStatus
  810. --快速开始剩余时间
  811. roomInfo.fastStartTimeout = response.fastStartTimeout
  812. --每个玩家对应快速开始状态
  813. roomInfo.fastStartPlayersStatus = {}
  814. --记牌器数据
  815. roomInfo.cardPlayerInfo = response.cardPlayerInfo--]]
  816. if app.club_php.clubID and app.club_php.clubID ~= 0 and roomInfo.nGameStartCount > 0 then
  817. app.club_php:getClubList();
  818. end
  819. self:setRoomInfo(roomInfo)
  820. -- 处理玩家信息
  821. for _,v in ipairs(response.recoverItem) do
  822. local player = {}
  823. player.userId = v.userId
  824. player.seatId = v.seatId
  825. player.playFlag = v.playFlag
  826. --玩家解散状态 0:初始状态, 1:发起解散 2: 同意解散 3:不同意解散
  827. player.disbandStatus = v.disbandStatus
  828. player.onlineStatus = onlineStatus
  829. player.jsonInfo = v.jsonInfo
  830. local oinfo = json.decode(v.jsonInfo)
  831. player.unionid = oinfo.unionid
  832. player.headimgurl = oinfo.headimgurl
  833. player.gpsInfo = oinfo.gpsInfo
  834. player.sex = oinfo.sex
  835. player.openid = oinfo.openid
  836. player.nickname = oinfo.nickname
  837. player.areano = oinfo.areano
  838. self:addPlayer(player)
  839. -- 俱乐部需要
  840. if self.roomInfo.memberList[v.userId] == nil then
  841. self.roomInfo.memberList[v.userId] = {}
  842. end
  843. self.roomInfo.memberList[v.userId].nUserId = v.userId
  844. self.roomInfo.memberList[v.userId].nSeatId = v.seatId
  845. self.roomInfo.memberList[v.userId].nPlayerFlag = v.playFlag
  846. self.roomInfo.memberList[v.userId].userInfo = v.jsonInfo
  847. self.roomInfo.memberList[v.userId].nDisbandStatus = v.disbandStatus
  848. --[[local fastStartPlayer = {}
  849. fastStartPlayer.userId = v.userId
  850. fastStartPlayer.fastStartStatus = v.fastStartStatus
  851. table.insert(roomInfo.fastStartPlayersStatus, fastStartPlayer)--]]
  852. end
  853. if response.extInfo and type(response.extInfo)=='string' and response.extInfo~="" then
  854. local extInfo = json.decode(response.extInfo)
  855. if extInfo and type(extInfo)=='table' and extInfo[tostring(self:getMyself())] then
  856. self.roomInfo.quickStartInfo = extInfo.faststart--提前开局
  857. end
  858. local passShow = extInfo.passuser or {}
  859. local tmpShowPass = {}
  860. for i,v in ipairs(passShow) do
  861. tmpShowPass[tostring(v)] = true
  862. end
  863. for _,v in pairs(roomInfo.recoverItem) do
  864. v.operate = extInfo[tostring(v.userId)].operate
  865. v.passShow = tmpShowPass[tostring(v.userId)]
  866. end
  867. end
  868. for _,v in pairs(self._players) do
  869. self:addPlayer({userId=v.userId, viewPos=self:transPos(v.seatId)})
  870. end
  871. --检测GPS
  872. self:updateGpsUserInfo(nil,false)
  873. self:dispatchEvent({name = "onEnterRoomSuccess", gameId = GAME_IDS.zgWuRenDouDiZhu, gameType = 1})
  874. --
  875. self:dispatchEvent({name = "onResponseGameRecover"})--此句代码无效
  876. end
  877. function Room:test()
  878. logD("--------------------------pdk room test")
  879. end
  880. -- 通知服务器玩家GPS数据发生变化
  881. function Room:onGpsChangeRequest()
  882. print("Room:onUserInfoChangeRequest()")
  883. local request = StringPacket:new()
  884. request.stringValue = app.user.userInfo or ""
  885. logD("Room:onGpsChangeRequest()", table.tostring(request))
  886. self:sendResponse{cmd = zgwrDdzCmd.GAME_COMMAND_CLIENT_CHANGE_USERINFO , sender = request};
  887. end
  888. -- 服务器下发玩家GPS数据发生变化
  889. --[[function Room:onGpsChangeResponse(status, response)
  890. local ttime = os.time()
  891. local limit = false
  892. if not self.gpsChangeTime then
  893. self.gpsChangeTime = ttime
  894. else
  895. local tt = ttime - self.gpsChangeTime
  896. if ttime - self.gpsChangeTime < 3 then
  897. limit = true
  898. end
  899. end
  900. local nUserId = response.uid
  901. if (self.lastCheckUid and self.lastCheckUid == nUserId) or limit then
  902. return
  903. end
  904. self.gpsChangeTime = ttime
  905. local memberInfo = self.roomInfo.memberList[nUserId]
  906. if memberInfo then
  907. memberInfo.userInfo = response.userInfo
  908. end
  909. local player = self._players[tostring(nUserId)]
  910. player.jsonInfo = response.userInfo
  911. self.lastCheckUid = nUserId
  912. self:dispatchEvent({name = "onGpsChangeResponse", nUserId = nUserId});
  913. end--]]
  914. --更新gps用户数据
  915. --需要检测的ID 没有则检测所有人的距离
  916. --isOpenView 危险距离是否主动弹出提示
  917. function Room:updateGpsUserInfo(userId,isOpenView)
  918. self.checkGpsID = self.checkGpsID or {}
  919. for i,v in pairs(self.checkGpsID) do
  920. if v == userId then
  921. table.remove(self.checkGpsID,i)
  922. return--同一ID4秒内只检测一次
  923. end
  924. end
  925. if self.roomInfo and self.roomInfo.memberList then
  926. local gameStartCount = self:getRoomInfo().nGameStartCount or 0
  927. local isGameStart = gameStartCount>0
  928. --如果是游戏开始后收到消息则不处理
  929. local userInfoList = self:getUserInfoList()
  930. --[[for nUserId, memberInfo in pairs(self.roomInfo.memberList) do
  931. local nSeatId = memberInfo.nSeatId
  932. local userInfo = memberInfo.userInfo
  933. if userInfo then
  934. local userInfo2 = json.decode(userInfo)
  935. if userInfo2 then
  936. userInfoList[nUserId] = {nSeatId = nSeatId, userInfo = userInfo}
  937. end
  938. end
  939. end
  940. --]]
  941. if isGameStart then
  942. isOpenView = false
  943. end
  944. table.insert(self.checkGpsID,userId)
  945. self:dispatchEvent({
  946. name = GAME_EVENT.GPS_UPDATE_USER_INFO,
  947. userId=userId,
  948. userInfoList = userInfoList,
  949. isOpenView = isOpenView or false,
  950. isGameStart = isGameStart,
  951. -- maxPlayerNum = self.roomInfo.nMaxPlayCount,
  952. })
  953. end
  954. end
  955. -- 托管通知(回复)
  956. function Room:onHostingResponse(status, response)
  957. logD("Room:onHostingResponse 0x8133()", table.tostring(response))
  958. local userList = response.userList
  959. for k, v in ipairs(userList) do
  960. if self.roomInfo.memberList[v.nUserId] == nil then
  961. self.roomInfo.memberList[v.nUserId] = {}
  962. end
  963. -- 保留状态,为了下一局
  964. self.roomInfo.memberList[v.nUserId].AIStatus = v.status or 0
  965. -- 是否托管
  966. -- if v.nUserId == self:getMyUserId() then
  967. -- self.roomInfo.hosting = v.status
  968. -- end
  969. self:dispatchEvent({name = 'onHostingResponse', response = {nUserId = v.nUserId, status = v.status}})
  970. end
  971. end
  972. return Room