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.

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