Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

660 rader
21 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 yibinmajiangRoomReplayView = class("yibinmajiangRoomReplayView", MJRoomReplayView)
  13. function yibinmajiangRoomReplayView:ctor(data)
  14. dump(data,'dataaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
  15. yibinmajiangRoomReplayView.super.ctor(self,data)
  16. -- --玩家牌局面板
  17. -- self.playerHandCards={}
  18. -- self.data=data
  19. -- app:changeGameProtocol(app.gameId,1)
  20. end
  21. function yibinmajiangRoomReplayView:loadUI()
  22. local ui = loadUI("mj_yibinmajiang/res/ui_fangjian/mj_yibinmajiang_roomView.ui")
  23. self.ui = ui;
  24. self:addChild(ui);
  25. end
  26. function yibinmajiangRoomReplayView:onEnter()
  27. yibinmajiangRoomReplayView.super.onEnter(self)
  28. self:loadTextureCache();
  29. self:setCheckDefault()
  30. self.huOrder = 0
  31. self.queInfo = {}
  32. -- self.ui.Items.Button_Ting_Info:setVisible(false)
  33. self.direcionView:removeFromParent();
  34. self.direcionView:retain();
  35. self:addToLayer("background", self.direcionView);
  36. self:doSound();
  37. end
  38. function yibinmajiangRoomReplayView:loadTextureCache()
  39. yibinmajiangRoomReplayView.super.loadTextureCache(self)
  40. loadSpriteFrameFile("mj_yibinmajiang/res/zy_fangjian/anim/yibinmajiang_effect_guangxiao.plist")
  41. loadSpriteFrameFile("mj_yibinmajiang/res/zy_fangjian/anim/yibinmajiang_effect_guafeng.plist")
  42. loadSpriteFrameFile("mj_yibinmajiang/res/zy_fangjian/anim/yibinmajiang_effect_xiayu.plist")
  43. end
  44. function yibinmajiangRoomReplayView:initGameButton ()
  45. yibinmajiangRoomReplayView.super.initGameButton(self);
  46. self.ui.Items.Layout_Ting_Tip_Card_Panel:setVisible(false);
  47. end
  48. function yibinmajiangRoomReplayView:parseData()
  49. self.piaotimes = 0--记录有几次飘操作,为了飘完后删除飘字
  50. local data = self.data
  51. --战报解析
  52. self.reports={}
  53. local ops=string.split(data.ops,"|")
  54. for k,v in pairs(ops) do
  55. local op=string.split(v,",")
  56. local nUserId=tonumber(op[1])
  57. local opType=op[2]
  58. local opStr = op[3]
  59. if opType == 'PiaoOpt' then -- 飘
  60. self.piaotimes = self.piaotimes + 1
  61. local ops = string.split(opStr, "_")
  62. local piaostate = tonumber(ops[1])
  63. table.insert(self.reports,{nUserId=nUserId,opType=opType,piaostate = piaostate })
  64. elseif opType == 'BenJinCard' then -- 本金牌
  65. local ops = string.split(opStr, '_')
  66. local benjinCard = tonumber(ops[1])
  67. table.insert(self.reports,{nUserId=nUserId,opType=opType,benjinCard = benjinCard})
  68. elseif opType == 'TingYongCard' then -- 听用牌
  69. local ops = string.split(opStr, '_')
  70. local tingYongCount = tonumber(ops[1])
  71. local card = {}
  72. for i = 1, tingYongCount do
  73. local temp = {card = tonumber(ops[i+1])}
  74. table.insert(card, temp)
  75. end
  76. table.insert(self.reports,{nUserId=nUserId,opType=opType,tingCard = card})
  77. elseif opType == 'QueOpt' then -- 定缺牌
  78. local ops = string.split(opStr, "_")
  79. local que = tonumber(ops[1])
  80. table.insert(self.reports,{nUserId=nUserId,opType=opType,que = que })
  81. elseif opType == 'ShowAction' then -- 显示操作
  82. local opList = {}
  83. if nUserId==0 then
  84. local temp = string.split(opStr, ";")
  85. for k,v in pairs(temp) do
  86. local temp2 = string.split(v, " ")
  87. local userId = tonumber(temp2[1])
  88. table.remove(temp2,1)
  89. local operates = temp2
  90. table.insert(opList,{nUserId = userId,operates = self:margeOperates(operates) })
  91. end
  92. else
  93. local operates = string.split(opStr, " ")
  94. table.insert(opList,{nUserId = nUserId,operates = self:margeOperates(operates) })
  95. end
  96. table.insert(self.reports,{opType=opType,opList=opList})
  97. elseif opType == 'SubmitOp' then -- 提交的操作(吃碰杠)
  98. local temp = string.split(opStr, "_")
  99. local submitOp = tonumber(temp[1])
  100. table.insert(self.reports,{nUserId=nUserId,opType=opType,submitOp = submitOp })
  101. elseif opType == 'Fei' then -- 飞操作
  102. local temp = string.split(opStr, "_")
  103. -- local submitOp = tonumber(temp[1])
  104. local card = tonumber(temp[1]) -- 原始牌
  105. local redNum = tonumber(temp[2]) -- 听用牌数量
  106. local lziCard = tonumber(temp[3]) -- 听用牌
  107. table.insert(self.reports,{nUserId = nUserId, opType = opType, card = card, redNum = redNum, lziCard = lziCard})
  108. elseif opType == 'Ti' then -- 提操作
  109. local temp = string.split(opStr, "_")
  110. -- local submitOp = tonumber(temp[1])
  111. local card = tonumber(temp[1]) -- 原始牌
  112. local redNum = tonumber(temp[2]) -- 听用牌数量
  113. local lziCard = tonumber(temp[3]) -- 听用牌
  114. table.insert(self.reports,{nUserId = nUserId, opType = opType, card = card, redNum = redNum, lziCard = lziCard})
  115. elseif 'DisCard' ~= opType then -- 出牌/胡牌(非过操作的)
  116. local tCards = string.split(opStr, "_")
  117. local card,redNum = nil,0
  118. if tCards[1] then card = tonumber(tCards[1]) end
  119. if tCards[2] then redNum = tonumber(tCards[2]) end
  120. table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card,redNum=redNum})
  121. end
  122. end
  123. end
  124. --合并操作 只显示一个杠
  125. function yibinmajiangRoomReplayView:margeOperates(operates)
  126. local ops = {}
  127. local isGang = false
  128. for k,v in pairs(operates) do
  129. local op = tonumber(v)
  130. if (op==MJDefine.MJOperateType.OPREATE_ZHIGANG)
  131. or (op==MJDefine.MJOperateType.OPREATE_BAGANG)
  132. or (op==MJDefine.MJOperateType.OPREATE_ANGANG) then
  133. if not isGang then
  134. table.insert(ops,op)
  135. isGang = true
  136. end
  137. else
  138. table.insert(ops,op)
  139. end
  140. end
  141. return ops
  142. end
  143. function yibinmajiangRoomReplayView:startGame()
  144. self:onGameStartResponse()
  145. --设置为回放模式
  146. for k,v in pairs(self.playerHandCards) do
  147. v:setReplay(true)
  148. end
  149. self:setIsReplay(true)
  150. self:onGameSendCardResponse()
  151. self.playerHandCards[MJDefine.MyViewId]:removeTouchEvent()
  152. end
  153. function yibinmajiangRoomReplayView:initHanders()
  154. yibinmajiangRoomReplayView.super.initHanders(self)
  155. -- self.handers["In"]=handler(self,self.onGetCard) -- 发牌
  156. -- self.handers["Out"]=handler(self,self.onOutCard) -- 出牌
  157. -- self.handers["DianPao"] = handler(self,self.onDianPao)
  158. -- self.handers["PaoHu"] = handler(self,self.onPlayerHu) -- 点炮胡
  159. -- self.handers["QiangGHu"] = handler(self,self.onPlayerHu) -- 抢杠胡
  160. -- self.handers["ZiMo"] = handler(self,self.onPlayerHu) -- 自摸胡
  161. -- self.handers["PreOpt"] = handler(self,self.onShowOperates) -- 显示操作
  162. -- self.handers["SubOp"] = handler(self,self.onSubmitOperate) -- 提交操作
  163. -- self.handers["OpWait"] = handler(self,self.onActionWait) -- 等待操作
  164. self.handers ["PiaoOpt"] = handler(self,self.onPiaoRes) -- 飘
  165. self.handers ["BenJinCard"] = handler(self,self.onBenJinCardRes) -- 本金牌
  166. self.handers ["TingYongCard"] = handler(self,self.onTingYongCard) -- 听用牌
  167. self.handers ["QueOpt"] = handler(self,self.onQueRes) -- 缺
  168. self.handers ["DianPao"] = handler(self,self.onDianPao)
  169. self.handers ["DianPaoHu"] = handler(self,self.onPlayerHu)
  170. self.handers ["QiangGangHu"] = handler(self,self.onPlayerHu)
  171. self.handers ["ZiMoHu"] = handler(self,self.onPlayerHu) -- 自摸胡
  172. self.handers ["ShowAction"] = handler(self,self.onShowOperates)
  173. self.handers ["SubmitOp"] = handler(self,self.onSubmitOperate)
  174. self.handers ["Fei"] = handler(self,self.onOperate)
  175. self.handers ["Ti"] = handler(self,self.onOperate)
  176. end
  177. function yibinmajiangRoomReplayView:onGetCard(data)
  178. local roomInfo=app.room.roomInfo
  179. roomInfo.nLeaveCardNum=roomInfo.nLeaveCardNum-1
  180. local response={
  181. nUserId=data.nUserId,
  182. card=data.card,
  183. -- operates={},
  184. nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  185. nLeaveCardNum = roomInfo.nLeaveCardNum,
  186. }
  187. self:onBankerOutCard({response=response})
  188. end
  189. function yibinmajiangRoomReplayView:onActionWait(data)
  190. local response = {
  191. nUserId = data.nUserId,
  192. opType = data.card,
  193. }
  194. self:onWaitOperate({response = response})
  195. end
  196. function yibinmajiangRoomReplayView:onSubmitOperate(data)
  197. local viewId = app.room:getViewIdByUserId(data.nUserId)
  198. local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate
  199. local btn = Layout_Operate:getChildByTag(data.submitOp)
  200. if btn then
  201. local hand = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_room_hand.png")
  202. btn:addChild(hand)
  203. local size = btn:getContentSize()
  204. hand:setPosition(cc.p(size.width/2+20,size.height/2-20))
  205. local action = cc.Sequence:create(cc.MoveBy:create(0.5,cc.p(-10,10)),cc.MoveBy:create(0.5,cc.p(10,-10)))
  206. hand:runAction(cc.RepeatForever:create(action))
  207. -- if data.submitOp == MJDefine.MJOperateType.OPREATE_CANCEL then
  208. btn:runAction(cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function()
  209. self.playerHandCards[viewId]:hideOperate()
  210. end)))
  211. -- end
  212. end
  213. end
  214. function yibinmajiangRoomReplayView:onShowOperates(data)
  215. local opList = data.opList
  216. for k,v in pairs(opList) do
  217. local nUserId = v.nUserId
  218. local operates = v.operates
  219. local viewId=app.room:getViewIdByUserId(nUserId)
  220. local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate
  221. Layout_Operate:removeAllChildren()
  222. Layout_Operate:setVisible(true)
  223. local x=Layout_Operate:getContentSize().width
  224. if viewId==MJDefine.PlayerViewType.Left then
  225. x = 0
  226. end
  227. table.insert(operates,1,MJDefine.MJOperateType.OPREATE_CANCEL)
  228. local y=Layout_Operate:getContentSize().height/2
  229. local function createOperate(op,isLeft)
  230. local btnOperate=cc.Button:createNode()
  231. btnOperate:setDefaults()
  232. btnOperate:setText("")
  233. btnOperate:loadTextureNormal(MJDefine.MJOperateImage[op])
  234. if isLeft then
  235. x = x + MJDefine.MJ_OPERATE_PADDING
  236. else
  237. x = x -MJDefine.MJ_OPERATE_PADDING
  238. end
  239. btnOperate:setPosition(cc.p(x,y))
  240. btnOperate:setTag(op)
  241. Layout_Operate:addChild(btnOperate)
  242. end
  243. if viewId==MJDefine.PlayerViewType.Left then
  244. for i = #operates,1,-1 do
  245. local op = tonumber(operates[i])
  246. createOperate(op,true)
  247. end
  248. else
  249. for _,strOp in pairs(operates) do
  250. local op = tonumber(strOp)
  251. createOperate(op,false)
  252. end
  253. end
  254. -- self.playerHandCards[viewId]:
  255. if viewId~=MJDefine.MyViewId then
  256. local node = self.playerView.allNodes[viewId]
  257. local pos = cc.pAdd(node.player:getPosition(),cc.p(38,66))
  258. if viewId==MJDefine.PlayerViewType.Left then
  259. Layout_Operate:setAnchorPoint(cc.p(0,0.5))
  260. elseif viewId==MJDefine.PlayerViewType.Top then
  261. pos.y = pos.y-33
  262. end
  263. Layout_Operate:setPosition(pos)
  264. Layout_Operate:setScale(0.7)
  265. end
  266. end
  267. end
  268. function yibinmajiangRoomReplayView:onOperate(data)
  269. local roomInfo=app.room.roomInfo
  270. local operates={
  271. ["Peng"]=MJDefine.MJOperateType.OPREATE_PENG,
  272. ["BaGang"]=MJDefine.MJOperateType.OPREATE_BAGANG,
  273. ["AnGang"]=MJDefine.MJOperateType.OPREATE_ANGANG,
  274. ["Gang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG,
  275. ["ZhiGang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG,
  276. ["Fei"]=MJDefine.MJOperateType.OPREATE_FEI,
  277. ["Ti"]=MJDefine.MJOperateType.OPREATE_TI,
  278. }
  279. self.fromSeatId = self.fromSeatId or roomInfo.memberList[data.nUserId].nSeatId
  280. local response={
  281. nUserId=data.nUserId,
  282. opType=operates[data.opType],
  283. opCard=data.card,
  284. isNeedOutCard=0,
  285. fromSeatId=self.fromSeatId,
  286. useRedNum = data.redNum,
  287. lziCard = data.lziCard,
  288. -- cardNum = data.cardNum,
  289. -- operates={},
  290. -- nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  291. }
  292. --碰了之后需要出牌
  293. if data.opType=="Peng" then
  294. response.isNeedOutCard=1
  295. end
  296. for _,v in pairs(self.playerHandCards) do
  297. v:hideOperate()
  298. end
  299. self:onOperationCodeSuccess({response=response})
  300. end
  301. function yibinmajiangRoomReplayView:onOutCard(data)
  302. local roomInfo=app.room.roomInfo
  303. local response={
  304. nUserId=data.nUserId,
  305. card=data.card,
  306. operates={},
  307. -- nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  308. }
  309. self.fromSeatId=roomInfo.memberList[data.nUserId].nSeatId
  310. local viewId=app.room:getViewIdByUserId(data.nUserId)
  311. self.playerHandCards[viewId]:hideOperate()
  312. if viewId==MJDefine.MyViewId then
  313. -- self.playerHandCards[MJDefine.MyViewId].touchMJ=self.playerHandCards[MJDefine.MyViewId]:getMjByValue(data.card)
  314. end
  315. self:onOutCardSuccess({response=response})
  316. end
  317. function yibinmajiangRoomReplayView:onPiaoRes(data)
  318. local response={
  319. nUserId = data.nUserId,
  320. piaostate = data.piaostate,
  321. }
  322. local viewId = app.room:getViewIdByUserId(data.nUserId)
  323. self.playerHandCards[viewId]:hideOperate()
  324. self:onPiaoResponse({response=response})
  325. local viewId = app.room:getViewIdByUserId(data.nUserId)
  326. local ui=loadUI("mj_yibinmajiang/res/ui_fangjian/mj_yibinmajiang_replay_piao.ui")
  327. local pos = self.playerHandCards[viewId]:getAnimationPostion()
  328. ui:setPosition(pos)
  329. self.ui.Items.Layout_Effect_piao:addChild(ui)
  330. local btn
  331. if tonumber(data.piaostate) == 1 then
  332. btn = ui.Items.Button_Piao
  333. elseif tonumber(data.piaostate) == 0 then
  334. btn = ui.Items.Button_BuPiao
  335. end
  336. if btn then
  337. local hand = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_room_hand.png")
  338. btn:addChild(hand)
  339. local size = btn:getContentSize()
  340. hand:setPosition(cc.p(size.width/2+20,size.height/2-20))
  341. local action = cc.Sequence:create(cc.MoveBy:create(0.5,cc.p(-10,10)),cc.MoveBy:create(0.5,cc.p(10,-10)))
  342. hand:runAction(cc.RepeatForever:create(action))
  343. btn:runAction(cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function()
  344. ui:removeFromParent()
  345. ui = nil
  346. self.piaotimes = self.piaotimes - 1
  347. if self.piaotimes == 0 then--所有飘操作已经完成了,删除桌面上的飘字
  348. --清除桌面上的飘
  349. self.ui.Items.Layout_Effect_piao:removeAllChildren()
  350. end
  351. end)))
  352. end
  353. end
  354. function yibinmajiangRoomReplayView:onBenJinCardRes(data)
  355. local temp = {
  356. benjinCard = data.benjinCard,
  357. }
  358. app.room.roomInfo:setBenJinCard(data.benjinCard)
  359. end
  360. function yibinmajiangRoomReplayView:onTingYongCard(data)
  361. local tingCard = data.tingCard
  362. local benJinCard = app.room.roomInfo:getBenJinCard()
  363. local temp = {
  364. benjinCard = benJinCard,
  365. tingCard = tingCard,
  366. }
  367. self:stopAllActions()
  368. -- 本金动画结束继续步骤
  369. local endFunc = function()
  370. self:play()
  371. end
  372. self:showBenJin({ response = temp }, true, endFunc)
  373. end
  374. function yibinmajiangRoomReplayView:onQueRes(data)
  375. local temp = {
  376. nUserId = data.nUserId,
  377. result = data.que,
  378. }
  379. table.insert(self.queInfo, temp)
  380. app.room.roomInfo:setDingQueInfo(data.nUserId, data.que)
  381. local playerCount = table.nums(app.room.roomInfo.memberList)
  382. if playerCount == #self.queInfo then
  383. self:onDingQueResponse({response = self.queInfo})
  384. end
  385. end
  386. function yibinmajiangRoomReplayView:onDianPao(data)
  387. self.dpUserId = data.nUserId or 0
  388. end
  389. function yibinmajiangRoomReplayView:onPlayerHu(data)
  390. local player = app.room.roomInfo.memberList[data.nUserId];
  391. local huCards = player.huCards or {};
  392. table.insert(huCards, data.card);
  393. local roomInfo=app.room.roomInfo
  394. self.huOrder = self.huOrder + 1
  395. local huType = {
  396. ["ZiMoHu"] = MJDefine.MJGameHuType.HU_ZIMO,
  397. ["DianPaoHu"] = MJDefine.MJGameHuType.HU_DIANPAO,
  398. ["QiangGangHu"] = MJDefine.MJGameHuType.HU_DIANPAO,
  399. }
  400. local opType = {
  401. ["ZiMoHu"] = MJDefine.MJOperateType.OPREATE_ZIMOHU,
  402. ["DianPaoHu"] = MJDefine.MJOperateType.OPREATE_DIANPAOHU,
  403. ["QiangGangHu"] = MJDefine.MJOperateType.OPREATE_QIANG_GANG_HU,
  404. }
  405. local redRealCard = 0
  406. local isQiangGng = 0
  407. if data.opType == "QiangGangHu" then
  408. redRealCard = data.card
  409. isQiangGng =1
  410. end
  411. local tmp = {};
  412. for k, v in ipairs(huCards) do
  413. table.insert(tmp, {
  414. huCard = v,
  415. huType = huType[data.opType], -- 写死
  416. dpSeatId = app.room:getSeatIdByUserId(self.dpUserId), -- 写死
  417. });
  418. end
  419. player.huCards = tmp;
  420. local response={
  421. nUserId=data.nUserId,
  422. huType = huType[data.opType],
  423. fanshu = 0,
  424. paiType = 0,
  425. subPaiType = 0,
  426. huCard = {
  427. huCard = data.card,
  428. huType = huType,
  429. dpSeatId = app.room:getSeatIdByUserId(self.dpUserId),
  430. },
  431. isQiangGng = isQiangGng,
  432. isGspHu = 0,
  433. isGskhHu = 0,
  434. dpUserId = self.dpUserId,
  435. huIndex = self.huOrder,
  436. -- opType = opType[data.opType],
  437. -- redRealCard = redRealCard,
  438. }
  439. local viewId=app.room:getViewIdByUserId(data.nUserId)
  440. for k,v in pairs(self.playerHandCards) do
  441. v:hideOperate()
  442. end
  443. self.playerHandCards[viewId]:hideOperate()
  444. response.isReplay = true;
  445. -- 保存需要用的数据(playerview的showhu里面是用的member数据,所以这里必须强制添加,或者用其他方法jxtd)
  446. player.huType = huType[data.opType]
  447. player.huIndex = self.huOrder
  448. self:onHuResponse({response=response})
  449. end
  450. --出牌成功
  451. function yibinmajiangRoomReplayView:onOutCardSuccess(data)
  452. logE("yibinmajiangRoomReplayView:onOutCardSuccess(), response = ", table.tostring(data.response))
  453. --[[
  454. -- 出牌用户id
  455. , defVar("nOutCardUserId", VT_Int, -1)
  456. -- 出的牌
  457. , defVar("byOutCard", VT_UChar, -1)
  458. -- 可以的操作ma
  459. , defVar("mainOpCode", VT_Short, -1)
  460. -- 玩家操作
  461. , defVar("operations", VT_Vector(ChuPaiPlayerOperation), {})--]]
  462. local function runOnOutCardSuccess(onEnd)
  463. log("2000000000-yibinmajiangRoomReplayView - runOnOutCardSuccess---------")
  464. local viewId = app.room:getViewIdByUserId(data.response.nUserId)
  465. local card= data.response.card
  466. local operates=data.response.operates
  467. local typr = operates.opType
  468. if operates and table.nums(operates)>0 then
  469. self.operates = operates
  470. else
  471. self.operates = {}
  472. end
  473. local function callback()
  474. self.playerHandCards[MJDefine.MyViewId]:showOperate(operates,card)
  475. if onEnd then
  476. onEnd()
  477. end
  478. end
  479. -- self.lastOutCard = card
  480. self.lastOutViewId = viewId
  481. local player = app.room.roomInfo.memberList[data.response.nUserId]
  482. if self.playerHandCards[viewId] then
  483. self.playerHandCards[viewId]:onOutCard(card,callback)--onOutCard(data.response,true)
  484. app.room:dispatchEvent({name = MJDefine.MJEvent.OutCardFalg, value=card ,viewId=viewId})
  485. if viewId==MJDefine.MyViewId then
  486. self.playerHandCards[viewId]:setTing(false)
  487. end
  488. else
  489. callback()
  490. end
  491. end
  492. log("2000000000-yibinmajiangRoomReplayView - addCallBack(runOnOutCardSuccess)")
  493. self:addCallBack(runOnOutCardSuccess)
  494. end
  495. function yibinmajiangRoomReplayView:onGameEnd(data)
  496. local function runGameXiaoJuResponse(onEnd)
  497. local function callback()
  498. --self:endReplay()
  499. --:showXiaoJuView()
  500. if onEnd then
  501. onEnd()
  502. end
  503. end
  504. local roomInfo = app.room.roomInfo
  505. local hutype=self.data.ext.huTypes
  506. local hucard=data.card
  507. self.direcionView:stopAllActions()
  508. -- local resultInfo=json.decode(roomInfo.strResultInfo)
  509. --所有胡牌的人 考虑抢杠胡的问题
  510. --所有胡牌的人 考虑抢杠胡的问题
  511. local viewIds={}
  512. local failViewId=0
  513. for k,v in pairs(roomInfo.memberList) do
  514. local viewId = app.room:getViewIdByUserId(v.nUserId)
  515. if v.result==MJDefine.MJGameResultType.Win then
  516. table.insert(viewIds,viewId)
  517. --处理掉huCard, 不加入手牌
  518. --播放音效
  519. if viewId==MJDefine.MyViewId then
  520. MJSound.PlayWinGame()
  521. end
  522. elseif v.result==MJDefine.MJGameResultType.Fail then
  523. failViewId=viewId
  524. if viewId==MJDefine.MyViewId then
  525. MJSound.PlayLoseGame()
  526. end
  527. end
  528. end
  529. self:showOpenCard()
  530. local function callback()
  531. self:showXiaoJuView()
  532. if onEnd then
  533. onEnd()
  534. end
  535. end
  536. if #viewIds>0 then
  537. for k,viewId in pairs(viewIds) do
  538. local effect
  539. local resultInfo = roomInfo:getResultInfos();
  540. local userId = app.room:getUserIdByViewId(viewId)
  541. if k == #viewIds then --只有最后播放胡牌动画的回调一次就可以了
  542. if resultInfo[userId].result == MJDefine.MJGameHuType.HU_ZIMO then
  543. effect = MJAnimationCompnent.CreateHuEffect("zimo",callback)
  544. else
  545. effect = MJAnimationCompnent.CreateHuEffect("hu",callback)
  546. end
  547. else
  548. end
  549. if effect then
  550. self:addChild(effect)
  551. effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion())
  552. effect:setVisible(false)
  553. end
  554. end
  555. else
  556. if roomInfo:getStopFlag() == MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then
  557. local effect=MJAnimationCompnent.CreateLiuJuEffect(callback)
  558. self:addChild(effect)
  559. else
  560. callback()
  561. end
  562. end
  563. end
  564. log("2000000000-MJRoomView - addCallBack(runGameXiaoJuResponse)" )
  565. self:addCallBack(runGameXiaoJuResponse);
  566. end
  567. function yibinmajiangRoomReplayView:setButtonTingInfoVisible ()
  568. yibinmajiangRoomReplayView.super.setButtonTingInfoVisible(self, false);
  569. end
  570. function yibinmajiangRoomReplayView:setIsReplay()
  571. self._isReplay = true
  572. end
  573. return yibinmajiangRoomReplayView