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

888 lines
28 KiB

  1. local MJRoomToolView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomToolView")
  2. local MJRoomMessageView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomMessageView")
  3. local MJRoomPlayerView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomPlayerView")
  4. local MJDefine=MJFramework.MJImport("mj.luaScript.MJDefine")
  5. local MJFunction=MJFramework.MJImport("mj.luaScript.MJFunction")
  6. local MJHandCardView=MJFramework.MJImport("mj.luaScript.Views.Game.MJHandCardView")
  7. local MJRoomDirection=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDirection")
  8. local MJWanFa=MJFramework.MJImport("luaScript.SubGameDefine.MaJiang.MJWanFa")
  9. local MJAnimationCompnent=MJFramework.MJImport("mj.luaScript.Views.Compnent.MJAnimationCompnent")
  10. local MJSound=MJFramework.MJImport("mj.luaScript.MJSound")
  11. local MJRoomReplayView=MJFramework.MJFrameworkClassImprot("mj.luaScript.Views.Room.MJRoomReplayView")
  12. local bazhongRoomReplayView = class("bazhongRoomReplayView", MJRoomReplayView)
  13. function bazhongRoomReplayView:ctor(data)
  14. bazhongRoomReplayView.super.ctor(self,data)
  15. -- --玩家牌局面板
  16. -- self.playerHandCards={}
  17. -- self.data=data
  18. -- app:changeGameProtocol(app.gameId,1)
  19. end
  20. function bazhongRoomReplayView:loadUI()
  21. local ui = loadUI("mj_bazhong/res/ui_fangjian/mj_bazhong_roomView.ui")
  22. self.ui = ui;
  23. self:addChild(ui);
  24. end
  25. function bazhongRoomReplayView:onEnter()
  26. bazhongRoomReplayView.super.onEnter(self)
  27. self:initLogo()
  28. self:doSound()
  29. self:setCheckDefault()
  30. self:initSwapLayer()
  31. self.huOrder = 0
  32. end
  33. function bazhongRoomReplayView:initLogo()
  34. self.ui.Items.ImageView_Logo:setVisible(false)
  35. end
  36. -- 重写父类,分数要除10
  37. function bazhongRoomReplayView:updateRoomData()
  38. local data=self.data--=MJDefine.TestData
  39. -- self.data=data
  40. app.room:initRoomInfo()
  41. local roomInfo=app.room.roomInfo
  42. roomInfo.nMaxPlayCount = table.nums(data.user)
  43. roomInfo.nShowTableId = data.roomid or data.roomNum
  44. roomInfo.strGameInfo=json.encode(data.ext)
  45. roomInfo.nGameStartCount=data.turn
  46. roomInfo.nTotalGameNum=data.totalCount or data.nbound or 0
  47. local dipai=MJFunction.convertToCards(data.dipai)
  48. roomInfo.nLeaveCardNum=#dipai
  49. roomInfo.stopFlag=data.flag
  50. roomInfo.gameId = data.gameid
  51. --用户信息
  52. roomInfo.memberList={}
  53. for k,v in pairs(data.user) do
  54. local nUserId=tonumber(k)
  55. if not roomInfo.memberList[nUserId] then
  56. roomInfo.memberList[nUserId] = {}
  57. end
  58. roomInfo.memberList[nUserId].nUserId = nUserId
  59. roomInfo.memberList[nUserId].nSeatId = v.seatid
  60. -- self.roomInfo.memberList[v.nUserId].nPlayerFlag = v.nPlayerFlag
  61. local userInfo=app.playerInfoManager:getPlayerInfo(nUserId)
  62. userInfo.nickname = userInfo.name
  63. userInfo.headimgurl = userInfo.head
  64. roomInfo.memberList[nUserId].userInfo = json.encode(userInfo)--v.userInfo
  65. -- self.roomInfo.memberList[v.nUserId].nTurnScore = v.nTurnScore
  66. roomInfo.memberList[nUserId].nTotalMoney = app.room:isUseDivision10() and data.score[k] / 10 or data.score[k]
  67. -- self.roomInfo.memberList[v.nUserId].nTingStatus = v.nTingStatus
  68. -- self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards
  69. -- self.roomInfo.memberList[v.nUserId].outCards = v.outCards
  70. local tempCards=MJFunction.convertToCards(v.hand)
  71. local handCards={}
  72. for k,v in pairs(tempCards) do
  73. if tonumber(v) then
  74. table.insert(handCards,{card=tonumber(v)})
  75. end
  76. end
  77. roomInfo.memberList[nUserId].handCards = handCards
  78. -- roomInfo.memberList[nUserId].nOnlineStatus = v.nOnlineStatus
  79. -- roomInfo.memberList[nUserId].nDisbandStatus = v.nDisbandStatus
  80. -- self.dismissInfo[nUserId] = v.nDisbandStatus
  81. --这里只记录,暂时没用到。可能战绩回放的时候是需要用的
  82. -- local cardData = self:serverCardToMyCard(v.handCard)
  83. -- self.roomInfo.memberList[v.nUserId].cardList = {}
  84. -- self.roomInfo.memberList[v.nUserId].cardList = cardData
  85. end
  86. roomInfo.nBankSeatId=roomInfo.memberList[tonumber(data.ext.banker)].nSeatId
  87. app.room:updateUserSeateShowId()
  88. self:parseData()
  89. end
  90. function bazhongRoomReplayView:parseData()
  91. self.piaotimes = 0--记录有几次飘操作,为了飘完后删除飘字
  92. local data = self.data
  93. --战报解析
  94. self.reports={}
  95. local ops=string.split(data.ops,"|")
  96. for k,v in pairs(ops) do
  97. local op=string.split(v,",")
  98. local nUserId=tonumber(op[1])
  99. local opType=op[2]
  100. local opStr = op[3]
  101. if opType == "ShowAction" then
  102. local opList = {}
  103. if nUserId==0 then
  104. local temp = string.split(opStr, ";")
  105. for k,v in pairs(temp) do
  106. local temp2 = string.split(v, " ")
  107. local userId = tonumber(temp2[1])
  108. table.remove(temp2,1)
  109. local operates = temp2
  110. table.insert(opList,{nUserId = userId,operates = self:margeOperates(operates) })
  111. end
  112. else
  113. local operates = string.split(opStr, " ")
  114. table.insert(opList,{nUserId = nUserId,operates = self:margeOperates(operates) })
  115. end
  116. table.insert(self.reports,{opType=opType,opList=opList})
  117. elseif opType == "HuanPai" then
  118. self.huanPai = self.huanPai or {}
  119. local huanCards = {}
  120. local tCards = string.split(opStr, "_")
  121. for i,v in pairs(tCards) do
  122. if v and tonumber(v) then
  123. table.insert(huanCards,tonumber(v))
  124. end
  125. end
  126. table.insert(self.huanPai,{nUserId=nUserId,opType="HuanPai",cards = huanCards })
  127. local op=string.split(ops[k+1],",")
  128. local opType=op[2]
  129. if opType ~= "HuanPai" then
  130. table.insert(self.reports,{huanPaiInfo=self.huanPai,opType="HuanPai" })
  131. end
  132. elseif opType == "HuanPaiType" then
  133. local temp = string.split(opStr, "_")
  134. local huanPaiType = tonumber(temp[1])
  135. table.insert(self.reports,{nUserId=nUserId,opType=opType,huanPaiType = huanPaiType })
  136. elseif opType == "HuanPaiDone" then
  137. self.huanPaiDone = self.huanPaiDone or {}
  138. local huanCards = {}
  139. local tCards = string.split(opStr, "_")
  140. for i,v in pairs(tCards) do
  141. if v and tonumber(v) then
  142. table.insert(huanCards,tonumber(v))
  143. end
  144. end
  145. table.insert(self.huanPaiDone,{nUserId=nUserId,opType="HuanPaiDone",cards = huanCards })
  146. local op=string.split(ops[k+1],",")
  147. local opType=op[2]
  148. if opType ~= "HuanPaiDone" then
  149. table.insert(self.reports,{huanPaiInfo=self.huanPaiDone,opType="HuanPaiDone" })
  150. end
  151. elseif opType == "SelectedQue" then
  152. local opList = {}
  153. local temp2 = {}
  154. table.insert(temp2,tonumber(0))
  155. table.insert(temp2,tonumber(1))
  156. table.insert(temp2,tonumber(2))
  157. table.insert(opList,{nUserId = nUserId,operates = self:margeOperates(temp2) })
  158. table.insert(self.reports,{opType="ShowDingQueOpt",opList=opList})
  159. table.insert(self.reports,{nUserId=nUserId,opType="SubmitOp",submitOp = tonumber(opStr) })
  160. local tCards = string.split(opStr, "_")
  161. local card,redNum = nil,0
  162. if tCards[1] then card = tonumber(tCards[1]) end
  163. if tCards[2] then redNum = tonumber(tCards[2]) end
  164. table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card,redNum=redNum})
  165. elseif opType == "BaoJiao" then
  166. local opList = {}
  167. local temp2 = {}
  168. table.insert(temp2,tonumber(1))
  169. --table.insert(temp2,tonumber(2))
  170. table.insert(opList,{nUserId = nUserId,operates = self:margeOperates(temp2) })
  171. table.insert(self.reports,{opType="ShowBaoOpt",opList=opList})
  172. table.insert(self.reports,{nUserId=nUserId,opType="SubmitOp",submitOp = tonumber(opStr) })
  173. local tCards = string.split(opStr, "_")
  174. local card,redNum = nil,0
  175. if tCards[1] then card = tonumber(tCards[1]) end
  176. if tCards[2] then redNum = tonumber(tCards[2]) end
  177. table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card,redNum=redNum})
  178. elseif opType == "SubmitOp" then --提交的操作
  179. local temp = string.split(opStr, "_")
  180. local submitOp = tonumber(temp[1])
  181. table.insert(self.reports,{nUserId=nUserId,opType=opType,submitOp = submitOp })
  182. elseif opType == "PiaoOpt" then
  183. self.piaotimes = self.piaotimes + 1
  184. local ops = string.split(opStr, "_")
  185. local piaostate = tonumber(ops[1])
  186. table.insert(self.reports,{nUserId=nUserId,opType=opType,piaostate = piaostate })
  187. elseif "DisCard"~=opType then
  188. local tCards = string.split(opStr, "_")
  189. local card,redNum = nil,0
  190. if tCards[1] then card = tonumber(tCards[1]) end
  191. if tCards[2] then redNum = tonumber(tCards[2]) end
  192. table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card,redNum=redNum})
  193. end
  194. end
  195. if self.data.ext.luoboCards then
  196. local luoboCards=MJFunction.convertToCards(self.data.ext.luoboCards)
  197. if #luoboCards > 0 then
  198. table.insert(self.reports,{opType="BaLuoBo"})
  199. end
  200. end
  201. end
  202. --合并操作 只显示一个杠
  203. function bazhongRoomReplayView:margeOperates(operates)
  204. local ops = {}
  205. local isGang = false
  206. for k,v in pairs(operates) do
  207. local op = tonumber(v)
  208. if (op==MJDefine.MJOperateType.OPREATE_ZHIGANG)
  209. or (op==MJDefine.MJOperateType.OPREATE_BAGANG)
  210. or (op==MJDefine.MJOperateType.OPREATE_ANGANG) then
  211. if not isGang then
  212. table.insert(ops,op)
  213. isGang = true
  214. end
  215. else
  216. table.insert(ops,op)
  217. end
  218. end
  219. return ops
  220. end
  221. function bazhongRoomReplayView:startGame()
  222. self:onGameStartResponse()
  223. --设置为回放模式
  224. for k,v in pairs(self.playerHandCards) do
  225. v:setReplay(true)
  226. end
  227. self:setIsReplay(true)
  228. app.room.roomInfo.laizi = tonum(self.data.ext.laizi)
  229. self:onGameSendCardResponse()
  230. self.playerHandCards[MJDefine.MyViewId]:removeTouchEvent()
  231. end
  232. function bazhongRoomReplayView:initHanders()
  233. bazhongRoomReplayView.super.initHanders(self)
  234. self.handers ["BaoPai"] = handler(self,self.onBaoPaiRes)
  235. self.handers ["SelectedQue"] = handler(self,self.onSelectedQueRes)
  236. self.handers ["DianPao"] = handler(self,self.onDianPao)
  237. self.handers ["DianPaoHu"] = handler(self,self.onPlayerHu)
  238. self.handers ["QiangGangHu"] = handler(self,self.onPlayerHu)
  239. self.handers ["ZiMoHu"] = handler(self,self.onPlayerHu)
  240. self.handers ["ShowAction"] = handler(self,self.onShowOperates)
  241. self.handers ["ShowBaoOpt"] = handler(self,self.onShowBaoOpt)
  242. self.handers ["SubmitOp"] = handler(self,self.onSubmitOperate)
  243. self.handers ["ActionWait"] = handler(self,self.onActionWait)
  244. self.handers ["BaLuoBo"]=handler(self,self.onBaLuoBo)
  245. self.handers ["ShowDingQueOpt"]=handler(self,self.onSelectedQueOpt)
  246. self.handers ["HuanPaiType"]=handler(self,self.onHuanPaiType)
  247. --self.handers ["HuanPaiType"]=handler(self,self.onHuanPaiType)
  248. self.handers ["HuanPaiDone"]=handler(self,self.onHuanPaiDone)
  249. self.handers ["HuanPai"]=handler(self,self.onHuanPai)
  250. end
  251. function bazhongRoomReplayView:onActionWait(data)
  252. local response = {
  253. nUserId = data.nUserId,
  254. opType = data.card,
  255. }
  256. self:onWaitOperate({response = response})
  257. end
  258. function bazhongRoomReplayView:onSubmitOperate(data)
  259. local viewId = app.room:getViewIdByUserId(data.nUserId)
  260. local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate
  261. local btn = Layout_Operate:getChildByTag(data.submitOp)
  262. if btn then
  263. local hand = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_room_hand.png")
  264. btn:addChild(hand)
  265. local size = btn:getContentSize()
  266. hand:setPosition(cc.p(size.width/2+20,size.height/2-20))
  267. local action = cc.Sequence:create(cc.MoveBy:create(0.5,cc.p(-10,10)),cc.MoveBy:create(0.5,cc.p(10,-10)))
  268. hand:runAction(cc.RepeatForever:create(action))
  269. -- if data.submitOp == MJDefine.MJOperateType.OPREATE_CANCEL then
  270. btn:runAction(cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function()
  271. self.playerHandCards[viewId]:hideOperate()
  272. end)))
  273. -- end
  274. end
  275. end
  276. function bazhongRoomReplayView:onShowOperates(data)
  277. local opList = data.opList
  278. for k,v in pairs(opList) do
  279. local nUserId = v.nUserId
  280. local operates = v.operates
  281. local viewId=app.room:getViewIdByUserId(nUserId)
  282. local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate
  283. Layout_Operate:removeAllChildren()
  284. Layout_Operate:setVisible(true)
  285. local x=Layout_Operate:getContentSize().width
  286. if viewId==MJDefine.PlayerViewType.Left then
  287. x = 0
  288. end
  289. table.insert(operates,1,MJDefine.MJOperateType.OPREATE_CANCEL)
  290. local y=Layout_Operate:getContentSize().height/2
  291. local function createOperate(op,isLeft)
  292. local btnOperate=cc.Button:createNode()
  293. btnOperate:setDefaults()
  294. btnOperate:setText("")
  295. btnOperate:loadTextureNormal(MJDefine.MJOperateImage[op])
  296. if isLeft then
  297. x = x + MJDefine.MJ_OPERATE_PADDING
  298. else
  299. x = x -MJDefine.MJ_OPERATE_PADDING
  300. end
  301. btnOperate:setPosition(cc.p(x,y))
  302. btnOperate:setTag(op)
  303. Layout_Operate:addChild(btnOperate)
  304. end
  305. if viewId==MJDefine.PlayerViewType.Left then
  306. for i = #operates,1,-1 do
  307. local op = tonumber(operates[i])
  308. createOperate(op,true)
  309. end
  310. else
  311. for _,strOp in pairs(operates) do
  312. local op = tonumber(strOp)
  313. createOperate(op,false)
  314. end
  315. end
  316. -- self.playerHandCards[viewId]:
  317. if viewId~=MJDefine.MyViewId then
  318. local node = self.playerView.allNodes[viewId]
  319. local pos = cc.pAdd(node.player:getPosition(),cc.p(38,66))
  320. if viewId==MJDefine.PlayerViewType.Left then
  321. Layout_Operate:setAnchorPoint(cc.p(0,0.5))
  322. elseif viewId==MJDefine.PlayerViewType.Right then
  323. pos.x = pos.x-100
  324. elseif viewId==MJDefine.PlayerViewType.Top then
  325. Layout_Operate:setAnchorPoint(cc.p(1,1))
  326. pos.y = pos.y-33*2
  327. end
  328. if viewId==MJDefine.PlayerViewType.Left or viewId==MJDefine.PlayerViewType.Right then
  329. pos.y = pos.y-104
  330. end
  331. Layout_Operate:setPosition(pos)
  332. Layout_Operate:setScale(0.7)
  333. end
  334. end
  335. end
  336. function bazhongRoomReplayView:onShowBaoOpt(data)
  337. local opList = data.opList
  338. for k,v in pairs(opList) do
  339. local nUserId = v.nUserId
  340. local operates = v.operates
  341. local viewId=app.room:getViewIdByUserId(nUserId)
  342. local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate
  343. Layout_Operate:removeAllChildren()
  344. Layout_Operate:setVisible(true)
  345. local x=Layout_Operate:getContentSize().width
  346. if viewId==MJDefine.PlayerViewType.Left then
  347. x = 0
  348. end
  349. table.insert(operates,1,MJDefine.MJOperateType.OPREATE_CANCEL)
  350. local y=Layout_Operate:getContentSize().height/2
  351. local TOperateImage = {
  352. [0]="mj/res/ui/zy_fangjian/operate/mj_btn_guo.png",
  353. [1]="mj/res/ui/zy_fangjian/operate/mj_btn_bao1.png",
  354. --[2]="mj/res/ui/zy_fangjian/operate/mj_btn_bozimo.png",
  355. }
  356. local function createOperate(op,isLeft)
  357. local btnOperate=cc.Button:createNode()
  358. btnOperate:setDefaults()
  359. btnOperate:setText("")
  360. btnOperate:loadTextureNormal(TOperateImage[op])
  361. if isLeft then
  362. x = x + MJDefine.MJ_OPERATE_PADDING
  363. else
  364. x = x -MJDefine.MJ_OPERATE_PADDING
  365. end
  366. btnOperate:setPosition(cc.p(x,y))
  367. btnOperate:setTag(op)
  368. Layout_Operate:addChild(btnOperate)
  369. end
  370. if viewId==MJDefine.PlayerViewType.Left then
  371. for i = #operates,1,-1 do
  372. local op = tonumber(operates[i])
  373. createOperate(op,true)
  374. end
  375. else
  376. for _,strOp in pairs(operates) do
  377. local op = tonumber(strOp)
  378. createOperate(op,false)
  379. end
  380. end
  381. -- self.playerHandCards[viewId]:
  382. if viewId~=MJDefine.MyViewId then
  383. local node = self.playerView.allNodes[viewId]
  384. local pos = cc.pAdd(node.player:getPosition(),cc.p(38,66))
  385. if viewId==MJDefine.PlayerViewType.Left then
  386. Layout_Operate:setAnchorPoint(cc.p(0,0.5))
  387. elseif viewId==MJDefine.PlayerViewType.Right then
  388. pos.x = pos.x-100
  389. elseif viewId==MJDefine.PlayerViewType.Top then
  390. Layout_Operate:setAnchorPoint(cc.p(1,1))
  391. pos.y = pos.y-33*2
  392. end
  393. if viewId==MJDefine.PlayerViewType.Left or viewId==MJDefine.PlayerViewType.Right then
  394. pos.y = pos.y-104
  395. end
  396. Layout_Operate:setPosition(pos)
  397. Layout_Operate:setScale(0.7)
  398. end
  399. end
  400. end
  401. --显示定缺
  402. function bazhongRoomReplayView:onSelectedQueOpt(data)
  403. local opList = data.opList
  404. for k,v in pairs(opList) do
  405. local nUserId = v.nUserId
  406. local operates = v.operates
  407. local viewId=app.room:getViewIdByUserId(nUserId)
  408. local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate
  409. Layout_Operate:removeAllChildren()
  410. Layout_Operate:setVisible(true)
  411. local x=Layout_Operate:getContentSize().width
  412. if viewId==MJDefine.PlayerViewType.Left then
  413. x = 0
  414. end
  415. --table.insert(operates,1,MJDefine.MJOperateType.OPREATE_CANCEL)
  416. local y=Layout_Operate:getContentSize().height/2
  417. local TOperateImage = {
  418. [0]="mj_bazhong/res/zy_fangjian/xzddadd/xzdd_btn_wan.png",
  419. [1]="mj_bazhong/res/zy_fangjian/xzddadd/xzdd_btn_tong.png",
  420. [2]="mj_bazhong/res/zy_fangjian/xzddadd/xzdd_btn_tiao.png",
  421. }
  422. local function createOperate(op,isLeft)
  423. local btnOperate=cc.Button:createNode()
  424. btnOperate:setDefaults()
  425. btnOperate:setText("")
  426. btnOperate:loadTextureNormal(TOperateImage[op])
  427. if isLeft then
  428. x = x + MJDefine.MJ_OPERATE_PADDING
  429. else
  430. x = x -MJDefine.MJ_OPERATE_PADDING
  431. end
  432. btnOperate:setPosition(cc.p(x,y))
  433. btnOperate:setTag(op)
  434. Layout_Operate:addChild(btnOperate)
  435. end
  436. if viewId==MJDefine.PlayerViewType.Left then
  437. for i = #operates,1,-1 do
  438. local op = tonumber(operates[i])
  439. createOperate(op,true)
  440. end
  441. else
  442. for _,strOp in pairs(operates) do
  443. local op = tonumber(strOp)
  444. createOperate(op,false)
  445. end
  446. end
  447. -- self.playerHandCards[viewId]:
  448. if viewId~=MJDefine.MyViewId then
  449. local node = self.playerView.allNodes[viewId]
  450. local pos = cc.pAdd(node.player:getPosition(),cc.p(38,-50))
  451. if viewId==MJDefine.PlayerViewType.Left then
  452. Layout_Operate:setAnchorPoint(cc.p(0,0.5))
  453. elseif viewId==MJDefine.PlayerViewType.Right then
  454. pos.x = pos.x-80
  455. elseif viewId==MJDefine.PlayerViewType.Top then
  456. Layout_Operate:setAnchorPoint(cc.p(1,1))
  457. pos.y = pos.y+50
  458. end
  459. Layout_Operate:setPosition(pos)
  460. Layout_Operate:setScale(0.7)
  461. end
  462. end
  463. end
  464. function bazhongRoomReplayView:onHuanPaiType(data)
  465. self:showSwapDirection(data.huanPaiType)
  466. end
  467. function bazhongRoomReplayView:onOperate(data)
  468. local roomInfo=app.room.roomInfo
  469. local operates={
  470. ["Peng"]=MJDefine.MJOperateType.OPREATE_PENG,
  471. ["BaGang"]=MJDefine.MJOperateType.OPREATE_BAGANG,
  472. ["AnGang"]=MJDefine.MJOperateType.OPREATE_ANGANG,
  473. ["Gang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG,
  474. ["ZhiGang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG,
  475. }
  476. self.fromSeatId = self.fromSeatId or roomInfo.memberList[data.nUserId].nSeatId
  477. local response={
  478. nUserId=data.nUserId,
  479. opCard=data.card,
  480. redNum = data.redNum,
  481. opType=operates[data.opType],
  482. -- operates={},
  483. nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  484. isNeedOutCard=0,
  485. fromSeatId=self.fromSeatId,
  486. }
  487. --碰了之后需要出牌
  488. if data.opType=="Peng" then
  489. response.isNeedOutCard=1
  490. end
  491. for k,v in pairs(self.playerHandCards) do
  492. v:hideOperate()
  493. end
  494. self:onOperationCodeSuccess({response=response})
  495. end
  496. function bazhongRoomReplayView:onOutCard(data)
  497. local roomInfo=app.room.roomInfo
  498. local response={
  499. nUserId=data.nUserId,
  500. card=data.card,
  501. operates={},
  502. -- nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  503. }
  504. self.fromSeatId=roomInfo.memberList[data.nUserId].nSeatId
  505. local viewId=app.room:getViewIdByUserId(data.nUserId)
  506. self.playerHandCards[viewId]:hideOperate()
  507. if viewId==MJDefine.MyViewId then
  508. -- self.playerHandCards[MJDefine.MyViewId].touchMJ=self.playerHandCards[MJDefine.MyViewId]:getMjByValue(data.card)
  509. end
  510. self:onOutCardSuccess({response=response})
  511. end
  512. function bazhongRoomReplayView:onBaoPaiRes(data)
  513. local response={
  514. nUserId=data.nUserId,
  515. isBaoPai=data.card,
  516. }
  517. local viewId=app.room:getViewIdByUserId(data.nUserId)
  518. self.playerHandCards[viewId]:hideOperate()
  519. self:onBaoPai({response=response})
  520. end
  521. function bazhongRoomReplayView:onSelectedQueRes(data)
  522. local viewId=app.room:getViewIdByUserId(data.nUserId)
  523. self.playerHandCards[viewId]:hideOperate()
  524. self.playerView:showQue(data.card,viewId,true)
  525. self.playerHandCards[viewId]:setQueType(data.card)
  526. self.playerHandCards[viewId]:resetHandCards()
  527. end
  528. function bazhongRoomReplayView:onDianPao(data)
  529. self.dpUserId = data.nUserId or 0
  530. end
  531. function bazhongRoomReplayView:onPlayerHu(data)
  532. local roomInfo=app.room.roomInfo
  533. self.huOrder = self.huOrder + 1
  534. local huType = {
  535. ["ZiMoHu"] = MJDefine.MJGameHuType.HU_ZIMO,
  536. ["DianPaoHu"] = MJDefine.MJGameHuType.HU_DIANPAO,
  537. ["QiangGangHu"] = MJDefine.MJGameHuType.HU_DIANPAO,
  538. }
  539. local redRealCard = 0
  540. local isQiangGng = 0
  541. if data.opType == "QiangGangHu" then
  542. redRealCard = data.card
  543. isQiangGng =1
  544. end
  545. local response={
  546. nUserId=data.nUserId,
  547. huType = huType[data.opType],
  548. huCard = data.card,
  549. dpId = self.dpUserId,
  550. huOrder = self.huOrder,
  551. redRealCard = redRealCard,
  552. isQiangGng = isQiangGng,
  553. }
  554. local viewId=app.room:getViewIdByUserId(data.nUserId)
  555. for k,v in pairs(self.playerHandCards) do
  556. v:hideOperate()
  557. end
  558. self.playerHandCards[viewId]:hideOperate()
  559. self:onHuResponse({response=response})
  560. end
  561. function bazhongRoomReplayView:onBaLuoBo()
  562. local luoboCards=MJFunction.convertToCards(self.data.ext.luoboCards)
  563. local function callback()
  564. self.ui.Items.Layout_Effect_luobo:removeAllChildren()
  565. end
  566. local function luoboNumCallBack()
  567. if self.data.ext.luobonum > 0 then
  568. local index = 1
  569. local playerNum = table.nums(self.data.ext.userExtInfo)
  570. for k,v in pairs(self.data.ext.userExtInfo) do
  571. local viewId = app.room:getViewIdByUserId(tonumber(k))
  572. local effect
  573. if index == playerNum then
  574. effect = MJAnimationCompnent.CreateLoBoLabel(v.luoboCount,callback)
  575. else
  576. effect = MJAnimationCompnent.CreateLoBoLabel(v.luoboCount)
  577. end
  578. local pos = self.playerHandCards[viewId]:getAnimationPostion()
  579. if viewId==MJDefine.PlayerViewType.My then
  580. effect:setPosition(pos.x+130,pos.y-60)
  581. elseif viewId==MJDefine.PlayerViewType.Left then
  582. effect:setPosition(pos.x-20-30,pos.y-70)
  583. elseif viewId==MJDefine.PlayerViewType.Right then
  584. effect:setPosition(pos.x+10-30,pos.y-70)
  585. elseif viewId==MJDefine.PlayerViewType.Top then
  586. effect:setPosition(pos.x+130,pos.y+10-50)
  587. end
  588. self.ui.Items.Layout_Effect_luobo_Lable:addChild(effect)
  589. index = index + 1
  590. end
  591. else
  592. callback()
  593. end
  594. end
  595. local function luoboCallBack()
  596. if luoboCards and #luoboCards>0 then
  597. local luoNum = #luoboCards
  598. --加一个黑底
  599. local layer = cc.LayerColor:create(cc.c4b(0,0,0,120))
  600. layer:setAnchorPoint(cc.p(0.5,0.5))
  601. layer:ignoreAnchorPointForPosition(false)
  602. layer:setPosition(cc.p(getWinSize().width/2,getWinSize().height/2))
  603. self.ui.Items.Layout_Effect_luobo:addChild(layer)
  604. for i,v in pairs(luoboCards) do
  605. local effect
  606. if i == #luoboCards then
  607. effect = MJAnimationCompnent.CreateLoBoEffect(v,self.desktopType,luoboNumCallBack)
  608. else
  609. effect = MJAnimationCompnent.CreateLoBoEffect(v,self.desktopType)
  610. end
  611. if MJDefine.LuoBoPos[luoNum] and MJDefine.LuoBoPos[luoNum][i] then
  612. effect:setPosition(MJDefine.LuoBoPos[luoNum][i])
  613. self.ui.Items.Layout_Effect_luobo:addChild(effect)
  614. end
  615. end
  616. else
  617. callback()
  618. end
  619. end
  620. luoboCallBack()
  621. end
  622. --出牌成功
  623. function bazhongRoomReplayView:onOutCardSuccess(data)
  624. logE("bazhongRoomReplayView:onOutCardSuccess(), response = ", table.tostring(data.response))
  625. --[[
  626. -- 出牌用户id
  627. , defVar("nOutCardUserId", VT_Int, -1)
  628. -- 出的牌
  629. , defVar("byOutCard", VT_UChar, -1)
  630. -- 可以的操作ma
  631. , defVar("mainOpCode", VT_Short, -1)
  632. -- 玩家操作
  633. , defVar("operations", VT_Vector(ChuPaiPlayerOperation), {})--]]
  634. local function runOnOutCardSuccess(onEnd)
  635. log("2000000000-bazhongRoomReplayView - runOnOutCardSuccess---------")
  636. local viewId = app.room:getViewIdByUserId(data.response.nUserId)
  637. local card= data.response.card
  638. local operates=data.response.operates
  639. local typr = operates.opType
  640. if operates and table.nums(operates)>0 then
  641. self.operates = operates
  642. else
  643. self.operates = {}
  644. end
  645. local function callback()
  646. self.playerHandCards[MJDefine.MyViewId]:showOperate(operates,card)
  647. if onEnd then
  648. onEnd()
  649. end
  650. end
  651. -- self.lastOutCard = card
  652. self.lastOutViewId = viewId
  653. local player = app.room.roomInfo.memberList[data.response.nUserId]
  654. if self.playerHandCards[viewId] then --and (viewId~=MJDefine.MyViewId or player.isBaoPai == 1)
  655. self.playerHandCards[viewId]:onOutCard(card,callback)--onOutCard(data.response,true)
  656. app.room:dispatchEvent({name = MJDefine.MJEvent.OutCardFalg, value=card ,viewId=viewId})
  657. if viewId==MJDefine.MyViewId then
  658. self.playerHandCards[viewId]:resetHandCards()
  659. self.playerHandCards[viewId]:setTing(false)
  660. end
  661. else
  662. callback()
  663. end
  664. end
  665. log("2000000000-bazhongRoomReplayView - addCallBack(runOnOutCardSuccess)")
  666. self:addCallBack(runOnOutCardSuccess)
  667. end
  668. function bazhongRoomReplayView:onGameEnd(data)
  669. local function runGameXiaoJuResponse(onEnd)
  670. local function callback()
  671. --self:endReplay()
  672. --:showXiaoJuView()
  673. if onEnd then
  674. onEnd()
  675. end
  676. end
  677. local roomInfo = app.room.roomInfo
  678. local hutype=self.data.ext.huTypes
  679. local hucard=data.card
  680. self.direcionView:stopAllActions()
  681. -- local resultInfo=json.decode(roomInfo.strResultInfo)
  682. --所有胡牌的人 考虑抢杠胡的问题
  683. --所有胡牌的人 考虑抢杠胡的问题
  684. local viewIds={}
  685. local failViewId=0
  686. for k,v in pairs(roomInfo.memberList) do
  687. local viewId = app.room:getViewIdByUserId(v.nUserId)
  688. if v.result==MJDefine.MJGameResultType.Win then
  689. table.insert(viewIds,viewId)
  690. --处理掉huCard, 不加入手牌
  691. --播放音效
  692. if viewId==MJDefine.MyViewId then
  693. MJSound.PlayWinGame()
  694. end
  695. elseif v.result==MJDefine.MJGameResultType.Fail then
  696. failViewId=viewId
  697. if viewId==MJDefine.MyViewId then
  698. MJSound.PlayLoseGame()
  699. end
  700. end
  701. end
  702. self:showOpenCard()
  703. local function callback()
  704. self:showXiaoJuView()
  705. if onEnd then
  706. onEnd()
  707. end
  708. end
  709. if #viewIds>0 then
  710. for k,viewId in pairs(viewIds) do
  711. local effect
  712. local resultInfo = roomInfo.resultInfos
  713. local userId = app.room:getUserIdByViewId(viewId)
  714. if k == #viewIds then --只有最后播放胡牌动画的回调一次就可以了
  715. if resultInfo[userId].result == MJDefine.MJGameHuType.HU_ZIMO then
  716. effect = MJAnimationCompnent.CreateHuEffect("zimo",callback)
  717. else
  718. effect = MJAnimationCompnent.CreateHuEffect("hu",callback)
  719. end
  720. else
  721. end
  722. if effect then
  723. self:addChild(effect)
  724. effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion())
  725. effect:setVisible(false)
  726. end
  727. end
  728. else
  729. if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then
  730. local effect=MJAnimationCompnent.CreateLiuJuEffect(callback)
  731. self:addChild(effect)
  732. else
  733. callback()
  734. end
  735. end
  736. end
  737. log("2000000000-MJRoomView - addCallBack(runGameXiaoJuResponse)" )
  738. self:addCallBack(runGameXiaoJuResponse);
  739. end
  740. --换牌完成
  741. function bazhongRoomReplayView:onHuanPaiDone(data)
  742. if not data.huanPaiInfo or type(data.huanPaiInfo) ~= 'table' then return end
  743. for i,v in pairs(data.huanPaiInfo) do
  744. local viewId=app.room:getViewIdByUserId(v.nUserId)
  745. -- self.playerHandCards[viewId]:createSwapCards(v.cards)
  746. self:createSwapCards(viewId, v.cards, true) -- 使用新的创建交换牌方式
  747. for i,v in pairs(v.cards) do
  748. self.playerHandCards[viewId]:onGetCard(nil,tonumber(v),true)
  749. end
  750. local action = cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function()
  751. -- self.playerHandCards[viewId]:deleteSwapCards()
  752. self:removeAllSwapCard()
  753. end))
  754. self.playerHandCards[viewId]:resetHandCards()
  755. self:runAction(action)
  756. end
  757. end
  758. --开始换牌
  759. function bazhongRoomReplayView:onHuanPai(data)
  760. if not data.huanPaiInfo or type(data.huanPaiInfo) ~= 'table' then return end
  761. for i,v in pairs(data.huanPaiInfo) do
  762. local viewId=app.room:getViewIdByUserId(v.nUserId)
  763. -- self.playerHandCards[viewId]:createSwapCards(v.cards)
  764. self:createSwapCards(viewId, v.cards, true) -- 使用新的创建交换牌方式
  765. local tselCards = {}
  766. for j,k in pairs(v.cards) do
  767. table.insert(tselCards,{card = k})
  768. end
  769. self.playerHandCards[viewId]:removeHandCard(tselCards)
  770. self.playerHandCards[viewId]:resetHandCards()
  771. local action = cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function()
  772. -- self.playerHandCards[viewId]:deleteSwapCards()
  773. self:removeAllSwapCard()
  774. end))
  775. self:runAction(action)
  776. end
  777. end
  778. function bazhongRoomReplayView:setIsReplay()
  779. self._isReplay = true
  780. end
  781. --显示换三张
  782. function bazhongRoomReplayView:initSwapLayer()--是否已经操作过
  783. local ui=loadUI("mj_bazhong/res/ui_fangjian/mj_bazhong_swap_card.ui")
  784. self.ui.Items.Layout_Player:addChild(ui)
  785. self.swapCard=ui
  786. self.swapCard.Items.Layout_Content:setVisible(false)
  787. end
  788. function bazhongRoomReplayView:removeAllSwapCard()
  789. self.swapCard.Items.Layout_Swap_MJ:removeAllChildren()
  790. end
  791. return bazhongRoomReplayView