No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

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