Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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