您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

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