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

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