You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

727 line
22 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 luzhouguiRoomReplayView = class("luzhouguiRoomReplayView", MJRoomReplayView)
  13. function luzhouguiRoomReplayView:ctor(data)
  14. luzhouguiRoomReplayView.super.ctor(self,data)
  15. -- --玩家牌局面板
  16. -- self.playerHandCards={}
  17. -- self.data=data
  18. -- app:changeGameProtocol(app.gameId,1)
  19. end
  20. function luzhouguiRoomReplayView:loadUI()
  21. local ui = loadUI("mj_luzhougui/res/ui_fangjian/mj_luzhou_roomView.ui")
  22. self.ui = ui;
  23. self:addChild(ui);
  24. end
  25. function luzhouguiRoomReplayView:onEnter()
  26. luzhouguiRoomReplayView.super.onEnter(self)
  27. self:setCheckDefault()
  28. self.huOrder = 0
  29. self:initRuleView ()
  30. end
  31. -- function luzhouguiRoomReplayView:onEnter()
  32. -- --ui load
  33. -- local ui = loadUI("mj_luzhougui/res/ui_fangjian/mj_luzhou_roomView.ui")
  34. -- self.ui = ui;
  35. -- self:addChild(ui);
  36. -- self:updateRoomData()
  37. -- self:setCheckDefault()
  38. -- --初始化视图
  39. -- self:initView()
  40. -- -- --初始化游戏事件按钮
  41. -- self:initGameButton()
  42. -- --默认状态
  43. -- self:defaultState()
  44. -- self:initHandCardNodes()
  45. -- self:startReplay()
  46. -- self:loadTextureCache()
  47. -- self.huOrder = 0
  48. -- end
  49. -- function luzhouguiRoomReplayView:defaultState()
  50. -- --队列初始化
  51. -- self.callbackQueue = {}
  52. -- self.callbackRunning = false
  53. -- self.ui.Items.Button_GPS:setVisible(false)
  54. -- --self.ui.Items.Layout_TingPai:setVisible(false)
  55. -- self.playerView:setOffLineVisible(false)
  56. -- self.playerView:setPlayerVisible(false)
  57. -- -- self.ui.Items.Layout_Rule:setVisible(false)
  58. -- self.ui.Items.Text_CardNum:setText("")
  59. -- -- self.playerView:setOperatorTipVisible(false)
  60. -- self:setBtnSitDownVisible(false)
  61. -- self:setTingCardViewVisible(false)
  62. -- self:setGuideView(false)
  63. -- self:setWetChatVisible(false)
  64. -- end
  65. function luzhouguiRoomReplayView:parseData()
  66. local data = self.data
  67. --战报解析
  68. self.reports={}
  69. local ops=string.split(data.ops,"|")
  70. for k,v in pairs(ops) do
  71. local op=string.split(v,",")
  72. local nUserId=tonumber(op[1])
  73. local opType=op[2]
  74. local opStr = op[3]
  75. if opType == "ShowAction" then
  76. local opList = {}
  77. if nUserId==0 then
  78. local temp = string.split(opStr, ";")
  79. for k,v in pairs(temp) do
  80. local temp2 = string.split(v, " ")
  81. local userId = tonumber(temp2[1])
  82. table.remove(temp2,1)
  83. local operates = temp2
  84. table.insert(opList,{nUserId = userId,operates = self:margeOperates(operates) })
  85. end
  86. else
  87. local operates = string.split(opStr, " ")
  88. table.insert(opList,{nUserId = nUserId,operates = self:margeOperates(operates) })
  89. end
  90. table.insert(self.reports,{opType=opType,opList=opList})
  91. elseif opType == "BaoPai" then
  92. local opList = {}
  93. local temp2 = {}
  94. table.insert(temp2,tonumber(1))
  95. table.insert(opList,{nUserId = nUserId,operates = self:margeOperates(temp2) })
  96. table.insert(self.reports,{opType="ShowBaoOpt",opList=opList})
  97. table.insert(self.reports,{nUserId=nUserId,opType="SubmitOp",submitOp = tonumber(opStr) })
  98. local tCards = string.split(opStr, "_")
  99. local card,redNum = nil,0
  100. if tCards[1] then card = tonumber(tCards[1]) end
  101. if tCards[2] then redNum = tonumber(tCards[2]) end
  102. table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card,redNum=redNum})
  103. elseif opType == "SubmitOp" then --提交的操作
  104. local temp = string.split(opStr, "_")
  105. local submitOp = tonumber(temp[1])
  106. table.insert(self.reports,{nUserId=nUserId,opType=opType,submitOp = submitOp })
  107. elseif "DisCard"~=opType then
  108. local tCards = string.split(opStr, "_")
  109. local card,redNum = nil,0
  110. if tCards[1] then card = tonumber(tCards[1]) end
  111. if tCards[2] then redNum = tonumber(tCards[2]) end
  112. table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card,redNum=redNum})
  113. end
  114. end
  115. end
  116. --合并操作 只显示一个杠
  117. function luzhouguiRoomReplayView:margeOperates(operates)
  118. local ops = {}
  119. local isGang = false
  120. for k,v in pairs(operates) do
  121. local op = tonumber(v)
  122. if (op==MJDefine.MJOperateType.OPREATE_ZHIGANG)
  123. or (op==MJDefine.MJOperateType.OPREATE_BAGANG)
  124. or (op==MJDefine.MJOperateType.OPREATE_ANGANG) then
  125. if not isGang then
  126. table.insert(ops,op)
  127. isGang = true
  128. end
  129. else
  130. table.insert(ops,op)
  131. end
  132. end
  133. return ops
  134. end
  135. -- function luzhouguiRoomReplayView:initView()
  136. -- self.ui.Items.ImageView_CardNum:setVisible(false)
  137. -- self.direcionView = MJRoomDirection:new()
  138. -- self.ui.Items.Layout_Player:addChild(self.direcionView)
  139. -- self.direcionView:setVisible(false)
  140. -- --UI相关
  141. -- self.playerView = MJRoomPlayerView:new()
  142. -- self:addChild(self.playerView)
  143. -- self.playerView:setHeadTouchEnable(false)
  144. -- --加载工具层
  145. -- self.toolView = MJRoomToolView:new()
  146. -- self:addChild(self.toolView)
  147. -- self.toolView.ui.Items.Button_Menu:setVisible(false)
  148. -- self.toolView.ui.Items.Layout_Button:setVisible(false)
  149. -- self.toolView.ui.Items.Button_FastStart:setVisible(false)
  150. -- self.toolView.ui.Items.Button_BaoJian:setVisible(false)
  151. -- --self.toolView:setVisible(false)
  152. -- local headInfos = {}
  153. -- for k,v in pairs(self.playerView.allNodes) do
  154. -- local pos = cc.pAdd(v.player:getPosition(),cc.p(38,66))
  155. -- table.insert(headInfos,{headPos=pos})
  156. -- end
  157. -- self.messageView = require("luaScript.Views.Room.ChatView"):new({chatList=MJDefine.MJChatTxt,faceList=MJDefine.MJFaceConfig},headInfos,true)
  158. -- self.playerView.ui.Items.Layout_Player:addChild(self.messageView)
  159. -- self.messageView:setBtnFace(cc.p(1236,348),"room_room_img_face.png")
  160. -- self.messageView:setBtnVoice(cc.p(1236,257),"room_room_img_voice.png")
  161. -- self.messageView:setVisible(false)
  162. -- --加载回放按钮
  163. -- local ui = loadUI("res/ui/ui_fangjian/ui_fangjian_record.ui");
  164. -- self.replayView = ui
  165. -- self:addChild(ui)
  166. -- self.replayView.Items.Text_playProgress:setString("进度:0%")
  167. -- local roomInfo=app.room.roomInfo
  168. -- -- 房间号
  169. -- self.ui.Items.Text_roomNum:setText("房号:"..tostring(roomInfo.nShowTableId))
  170. -- self:updateGameNums()
  171. -- --房间玩法
  172. -- self.toolView:updateRule()
  173. -- --local ruleAll = MJWanFa.getWanFaInfo(roomInfo.strGameInfo)--getLHQRuleStr();
  174. -- --self.ui.Items.Text_Rule:setText(ruleAll)
  175. -- --定时器
  176. -- local time = os.date("%m-%d %X",self.data.endtime) --回放时间这里要求改成成局时候的时间
  177. -- self.ui.Items.Text_Time:setText(time)--(MJFunction.getTimeString())
  178. -- if not self.Time then
  179. -- self.Time = cc.Director:getInstance():getScheduler():scheduleScriptFunc(function()
  180. -- self.ui.Items.Text_Time:setText(time)--(MJFunction.getTimeString())
  181. -- end,1.0,false)
  182. -- end
  183. -- end
  184. -- function luzhouguiRoomReplayView:initGameButton()
  185. -- self.ui.Items.Layout_Touch:registerClick(nil,function()
  186. -- self.toolView:hideRule()
  187. -- end)
  188. -- self.replayView.Items.Button_Play:registerClick(function()
  189. -- self.isPlay=true
  190. -- self.replayView.Items.Button_Pause:setVisible(true)
  191. -- self.replayView.Items.Button_Play:setVisible(false)
  192. -- end)
  193. -- self.replayView.Items.Button_Pause:registerClick(function()
  194. -- self.isPlay=false
  195. -- self.replayView.Items.Button_Play:setVisible(true)
  196. -- self.replayView.Items.Button_Pause:setVisible(false)
  197. -- end)
  198. -- self.replayView.Items.Button_Play:setVisible(false)
  199. -- self.replayView.Items.Button_Toward:registerClick(function()
  200. -- self:playNextReport()
  201. -- end)
  202. -- self.replayView.Items.Button_Backward:setVisible(false)
  203. -- self.replayView.Items.Button_Exit:registerClick(function()
  204. -- self:removeFromParent()
  205. -- end)
  206. -- end
  207. function luzhouguiRoomReplayView:startGame()
  208. self:onGameStartResponse()
  209. --设置为回放模式
  210. for k,v in pairs(self.playerHandCards) do
  211. v:setReplay(true)
  212. end
  213. app.room.roomInfo.laizi = tonum(self.data.ext.laizi)
  214. self:onGameSendCardResponse()
  215. self.playerHandCards[MJDefine.MyViewId]:removeTouchEvent()
  216. end
  217. function luzhouguiRoomReplayView:initHanders()
  218. luzhouguiRoomReplayView.super.initHanders(self)
  219. self.handers ["BaoPai"] = handler(self,self.onBaoPaiRes)
  220. self.handers ["DianPao"] = handler(self,self.onDianPao)
  221. self.handers ["DianPaoHu"] = handler(self,self.onPlayerHu)
  222. self.handers ["QiangGangHu"] = handler(self,self.onPlayerHu)
  223. self.handers ["ZiMoHu"] = handler(self,self.onPlayerHu)
  224. self.handers ["ShowAction"] = handler(self,self.onShowOperates)
  225. self.handers ["ShowBaoOpt"] = handler(self,self.onShowBaoOpt)
  226. self.handers ["SubmitOp"] = handler(self,self.onSubmitOperate)
  227. self.handers ["ActionWait"] = handler(self,self.onActionWait)
  228. end
  229. function luzhouguiRoomReplayView:onActionWait(data)
  230. local response = {
  231. nUserId = data.nUserId,
  232. opType = data.card,
  233. }
  234. self:onWaitOperate({response = response})
  235. end
  236. function luzhouguiRoomReplayView:onSubmitOperate(data)
  237. local viewId = app.room:getViewIdByUserId(data.nUserId)
  238. local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate
  239. local btn = Layout_Operate:getChildByTag(data.submitOp)
  240. if btn then
  241. local hand = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_room_hand.png")
  242. btn:addChild(hand)
  243. local size = btn:getContentSize()
  244. hand:setPosition(cc.p(size.width/2+20,size.height/2-20))
  245. local action = cc.Sequence:create(cc.MoveBy:create(0.5,cc.p(-10,10)),cc.MoveBy:create(0.5,cc.p(10,-10)))
  246. hand:runAction(cc.RepeatForever:create(action))
  247. -- if data.submitOp == MJDefine.MJOperateType.OPREATE_CANCEL then
  248. btn:runAction(cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function()
  249. self.playerHandCards[viewId]:hideOperate()
  250. end)))
  251. -- end
  252. end
  253. end
  254. function luzhouguiRoomReplayView:onShowOperates(data)
  255. local opList = data.opList
  256. for k,v in pairs(opList) do
  257. local nUserId = v.nUserId
  258. local operates = v.operates
  259. local viewId=app.room:getViewIdByUserId(nUserId)
  260. local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate
  261. Layout_Operate:removeAllChildren()
  262. Layout_Operate:setVisible(true)
  263. local x=Layout_Operate:getContentSize().width
  264. if viewId==MJDefine.PlayerViewType.Left then
  265. x = 0
  266. end
  267. table.insert(operates,1,MJDefine.MJOperateType.OPREATE_CANCEL)
  268. local y=Layout_Operate:getContentSize().height/2
  269. local function createOperate(op,isLeft)
  270. local btnOperate=cc.Button:createNode()
  271. btnOperate:setDefaults()
  272. btnOperate:setText("")
  273. btnOperate:loadTextureNormal(MJDefine.MJOperateImage[op])
  274. if isLeft then
  275. x = x + MJDefine.MJ_OPERATE_PADDING
  276. else
  277. x = x -MJDefine.MJ_OPERATE_PADDING
  278. end
  279. btnOperate:setPosition(cc.p(x,y))
  280. btnOperate:setTag(op)
  281. Layout_Operate:addChild(btnOperate)
  282. end
  283. if viewId==MJDefine.PlayerViewType.Left then
  284. for i = #operates,1,-1 do
  285. local op = tonumber(operates[i])
  286. createOperate(op,true)
  287. end
  288. else
  289. for _,strOp in pairs(operates) do
  290. local op = tonumber(strOp)
  291. createOperate(op,false)
  292. end
  293. end
  294. -- self.playerHandCards[viewId]:
  295. if viewId~=MJDefine.MyViewId then
  296. local node = self.playerView.allNodes[viewId]
  297. local pos = cc.pAdd(node.player:getPosition(),cc.p(38,66))
  298. if viewId==MJDefine.PlayerViewType.Left then
  299. Layout_Operate:setAnchorPoint(cc.p(0,0.5))
  300. elseif viewId==MJDefine.PlayerViewType.Right then
  301. pos.x = pos.x-100
  302. elseif viewId==MJDefine.PlayerViewType.Top then
  303. Layout_Operate:setAnchorPoint(cc.p(1,1))
  304. pos.y = pos.y-33*2
  305. end
  306. if viewId==MJDefine.PlayerViewType.Left or viewId==MJDefine.PlayerViewType.Right then
  307. pos.y = pos.y-104
  308. end
  309. Layout_Operate:setPosition(pos)
  310. Layout_Operate:setScale(0.7)
  311. end
  312. end
  313. end
  314. function luzhouguiRoomReplayView:onShowBaoOpt(data)
  315. local opList = data.opList
  316. for k,v in pairs(opList) do
  317. local nUserId = v.nUserId
  318. local operates = v.operates
  319. local viewId=app.room:getViewIdByUserId(nUserId)
  320. local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate
  321. Layout_Operate:removeAllChildren()
  322. Layout_Operate:setVisible(true)
  323. local x=Layout_Operate:getContentSize().width
  324. if viewId==MJDefine.PlayerViewType.Left then
  325. x = 0
  326. end
  327. table.insert(operates,1,MJDefine.MJOperateType.OPREATE_CANCEL)
  328. local y=Layout_Operate:getContentSize().height/2
  329. local TOperateImage = {
  330. [0]="mj/res/ui/zy_fangjian/operate/mj_btn_guo.png",
  331. [1]="mj/res/ui/zy_fangjian/operate/mj_btn_bao.png",
  332. }
  333. local function createOperate(op,isLeft)
  334. local btnOperate=cc.Button:createNode()
  335. btnOperate:setDefaults()
  336. btnOperate:setText("")
  337. btnOperate:loadTextureNormal(TOperateImage[op])
  338. if isLeft then
  339. x = x + MJDefine.MJ_OPERATE_PADDING
  340. else
  341. x = x -MJDefine.MJ_OPERATE_PADDING
  342. end
  343. btnOperate:setPosition(cc.p(x,y))
  344. btnOperate:setTag(op)
  345. Layout_Operate:addChild(btnOperate)
  346. end
  347. if viewId==MJDefine.PlayerViewType.Left then
  348. for i = #operates,1,-1 do
  349. local op = tonumber(operates[i])
  350. createOperate(op,true)
  351. end
  352. else
  353. for _,strOp in pairs(operates) do
  354. local op = tonumber(strOp)
  355. createOperate(op,false)
  356. end
  357. end
  358. -- self.playerHandCards[viewId]:
  359. if viewId~=MJDefine.MyViewId then
  360. local node = self.playerView.allNodes[viewId]
  361. local pos = cc.pAdd(node.player:getPosition(),cc.p(38,66))
  362. if viewId==MJDefine.PlayerViewType.Left then
  363. Layout_Operate:setAnchorPoint(cc.p(0,0.5))
  364. elseif viewId==MJDefine.PlayerViewType.Top then
  365. Layout_Operate:setAnchorPoint(cc.p(1,1))
  366. pos.y = pos.y-33*2
  367. end
  368. if viewId==MJDefine.PlayerViewType.Left or viewId==MJDefine.PlayerViewType.Right then
  369. pos.y = pos.y-104
  370. end
  371. Layout_Operate:setPosition(pos)
  372. Layout_Operate:setScale(0.7)
  373. end
  374. end
  375. end
  376. --播放一条战报
  377. -- function luzhouguiRoomReplayView:playNextReport()
  378. -- local handers={
  379. -- ["DealCard"]=handler(self,self.onGetCard),
  380. -- ["OutCard"]=handler(self,self.onOutCard),
  381. -- ["Peng"]=handler(self,self.onOperate),
  382. -- ["BaGang"]=handler(self,self.onOperate),
  383. -- ["AnGang"]=handler(self,self.onOperate),
  384. -- ["Gang"]=handler(self,self.onOperate),
  385. -- ["ZhiGang"]=handler(self,self.onOperate),
  386. -- ["BaoPai"]=handler(self,self.onBaoPaiRes),
  387. -- ["DianPao"]=handler(self,self.onDianPao),
  388. -- ["DianPaoHu"]=handler(self,self.onPlayerHu),
  389. -- ["QiangGangHu"]=handler(self,self.onPlayerHu),
  390. -- ["ZiMoHu"]=handler(self,self.onPlayerHu),
  391. -- }
  392. -- local v= self.reports[self.reportIndex]
  393. -- if v then
  394. -- if handers[v.opType] then
  395. -- print(table.tostring(v).." reportIndex:"..self.reportIndex)
  396. -- handers[v.opType](v)
  397. -- end
  398. -- self.reportIndex=self.reportIndex+1
  399. -- end
  400. -- local progress=self.reportIndex>#self.reports and #self.reports or self.reportIndex
  401. -- progress=math.ceil(progress/#self.reports*100)
  402. -- self.replayView.Items.Text_playProgress:setString("进度:"..progress.."%")
  403. -- end
  404. function luzhouguiRoomReplayView:onOperate(data)
  405. local roomInfo=app.room.roomInfo
  406. local operates={
  407. ["Peng"]=MJDefine.MJOperateType.OPREATE_PENG,
  408. ["BaGang"]=MJDefine.MJOperateType.OPREATE_BAGANG,
  409. ["AnGang"]=MJDefine.MJOperateType.OPREATE_ANGANG,
  410. ["Gang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG,
  411. ["ZhiGang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG,
  412. }
  413. self.fromSeatId = self.fromSeatId or roomInfo.memberList[data.nUserId].nSeatId
  414. local response={
  415. nUserId=data.nUserId,
  416. opCard=data.card,
  417. redNum = data.redNum,
  418. opType=operates[data.opType],
  419. -- operates={},
  420. nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  421. isNeedOutCard=0,
  422. fromSeatId=self.fromSeatId,
  423. }
  424. --碰了之后需要出牌
  425. if data.opType=="Peng" then
  426. response.isNeedOutCard=1
  427. end
  428. for k,v in pairs(self.playerHandCards) do
  429. v:hideOperate()
  430. end
  431. self:onOperationCodeSuccess({response=response})
  432. end
  433. function luzhouguiRoomReplayView:onOutCard(data)
  434. local roomInfo=app.room.roomInfo
  435. local response={
  436. nUserId=data.nUserId,
  437. card=data.card,
  438. operates={},
  439. -- nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  440. }
  441. self.fromSeatId=roomInfo.memberList[data.nUserId].nSeatId
  442. local viewId=app.room:getViewIdByUserId(data.nUserId)
  443. self.playerHandCards[viewId]:hideOperate()
  444. if viewId==MJDefine.MyViewId then
  445. -- self.playerHandCards[MJDefine.MyViewId].touchMJ=self.playerHandCards[MJDefine.MyViewId]:getMjByValue(data.card)
  446. end
  447. self:onOutCardSuccess({response=response})
  448. end
  449. function luzhouguiRoomReplayView:onBaoPaiRes(data)
  450. local response={
  451. nUserId=data.nUserId,
  452. isBaoPai=data.card,
  453. }
  454. local viewId=app.room:getViewIdByUserId(data.nUserId)
  455. self.playerHandCards[viewId]:hideOperate()
  456. self:onBaoPai({response=response})
  457. end
  458. function luzhouguiRoomReplayView:onDianPao(data)
  459. self.dpUserId = data.nUserId or 0
  460. end
  461. function luzhouguiRoomReplayView:onPlayerHu(data)
  462. local roomInfo=app.room.roomInfo
  463. self.huOrder = self.huOrder + 1
  464. local huType = {
  465. ["ZiMoHu"] = MJDefine.MJGameHuType.HU_ZIMO,
  466. ["DianPaoHu"] = MJDefine.MJGameHuType.HU_DIANPAO,
  467. ["QiangGangHu"] = MJDefine.MJGameHuType.HU_DIANPAO,
  468. }
  469. local redRealCard = 0
  470. local isQiangGng = 0
  471. if data.opType == "QiangGangHu" then
  472. redRealCard = data.card
  473. isQiangGng =1
  474. end
  475. local response={
  476. nUserId=data.nUserId,
  477. huType = huType[data.opType],
  478. huCard = data.card,
  479. dpId = self.dpUserId,
  480. huOrder = self.huOrder,
  481. redRealCard = redRealCard,
  482. isQiangGng = isQiangGng,
  483. }
  484. local viewId=app.room:getViewIdByUserId(data.nUserId)
  485. for k,v in pairs(self.playerHandCards) do
  486. v:hideOperate()
  487. end
  488. self.playerHandCards[viewId]:hideOperate()
  489. self:onHuResponse({response=response})
  490. end
  491. --出牌成功
  492. function luzhouguiRoomReplayView:onOutCardSuccess(data)
  493. logE("luzhouguiRoomReplayView:onOutCardSuccess(), response = ", table.tostring(data.response))
  494. --[[
  495. -- 出牌用户id
  496. , defVar("nOutCardUserId", VT_Int, -1)
  497. -- 出的牌
  498. , defVar("byOutCard", VT_UChar, -1)
  499. -- 可以的操作ma
  500. , defVar("mainOpCode", VT_Short, -1)
  501. -- 玩家操作
  502. , defVar("operations", VT_Vector(ChuPaiPlayerOperation), {})--]]
  503. local function runOnOutCardSuccess(onEnd)
  504. log("2000000000-luzhouguiRoomReplayView - runOnOutCardSuccess---------")
  505. local viewId = app.room:getViewIdByUserId(data.response.nUserId)
  506. local card= data.response.card
  507. local operates=data.response.operates
  508. local typr = operates.opType
  509. if operates and table.nums(operates)>0 then
  510. self.operates = operates
  511. else
  512. self.operates = {}
  513. end
  514. local function callback()
  515. self.playerHandCards[MJDefine.MyViewId]:showOperate(operates,card)
  516. if onEnd then
  517. onEnd()
  518. end
  519. end
  520. -- self.lastOutCard = card
  521. self.lastOutViewId = viewId
  522. local player = app.room.roomInfo.memberList[data.response.nUserId]
  523. if self.playerHandCards[viewId] then --and (viewId~=MJDefine.MyViewId or player.isBaoPai == 1)
  524. self.playerHandCards[viewId]:onOutCard(card,callback)--onOutCard(data.response,true)
  525. app.room:dispatchEvent({name = MJDefine.MJEvent.OutCardFalg, value=card ,viewId=viewId})
  526. if viewId==MJDefine.MyViewId then
  527. self.playerHandCards[viewId]:setTing(false)
  528. end
  529. else
  530. callback()
  531. end
  532. end
  533. log("2000000000-luzhouguiRoomReplayView - addCallBack(runOnOutCardSuccess)")
  534. self:addCallBack(runOnOutCardSuccess)
  535. end
  536. function luzhouguiRoomReplayView:onGameEnd(data)
  537. local function runGameXiaoJuResponse(onEnd)
  538. local function callback()
  539. --self:endReplay()
  540. --:showXiaoJuView()
  541. if onEnd then
  542. onEnd()
  543. end
  544. end
  545. local roomInfo = app.room.roomInfo
  546. local hutype=self.data.ext.huTypes
  547. local hucard=data.card
  548. self.direcionView:stopAllActions()
  549. -- local resultInfo=json.decode(roomInfo.strResultInfo)
  550. --所有胡牌的人 考虑抢杠胡的问题
  551. --所有胡牌的人 考虑抢杠胡的问题
  552. local viewIds={}
  553. local failViewId=0
  554. for k,v in pairs(roomInfo.memberList) do
  555. local viewId = app.room:getViewIdByUserId(v.nUserId)
  556. if v.result==MJDefine.MJGameResultType.Win then
  557. table.insert(viewIds,viewId)
  558. --处理掉huCard, 不加入手牌
  559. --播放音效
  560. if viewId==MJDefine.MyViewId then
  561. MJSound.PlayWinGame()
  562. end
  563. elseif v.result==MJDefine.MJGameResultType.Fail then
  564. failViewId=viewId
  565. if viewId==MJDefine.MyViewId then
  566. MJSound.PlayLoseGame()
  567. end
  568. end
  569. end
  570. self:showOpenCard()
  571. --[[--被抢杠的人回退补杠
  572. if hutype==MJDefine.MJHuType.QiangGangHu and roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_NORMAL then
  573. self.playerHandCards[failViewId]:retoreBuGang(hucard)
  574. end--]]
  575. local function callback()
  576. self:showXiaoJuView()
  577. if onEnd then
  578. onEnd()
  579. end
  580. end
  581. if #viewIds>0 then
  582. for k,viewId in pairs(viewIds) do
  583. local effect
  584. local resultInfo = roomInfo.resultInfos
  585. local userId = app.room:getUserIdByViewId(viewId)
  586. if k == #viewIds then --只有最后播放胡牌动画的回调一次就可以了
  587. if resultInfo[userId].result == MJDefine.MJGameHuType.HU_ZIMO then
  588. effect = MJAnimationCompnent.CreateHuEffect("zimo",callback)
  589. else
  590. effect = MJAnimationCompnent.CreateHuEffect("hu",callback)
  591. end
  592. --local userInfo=app.room:getUserInfoByViewId(viewId)
  593. --[[if userInfo then --音效
  594. if resultInfo[userId].result == MJDefine.MJGameHuType.HU_ZIMO then --1为自摸
  595. MJSound.PlayOperateSound(userInfo.sex,MJDefine.MJOperateType.OPREATE_ZIMOHU)
  596. elseif resultInfo[userId].result == MJDefine.MJGameHuType.HU_DIANPAO then
  597. MJSound.PlayOperateSound(userInfo.sex,MJDefine.MJOperateType.OPREATE_DIANPAOHU)
  598. else
  599. MJSound.PlayOperateSound(userInfo.sex,MJDefine.MJOperateType.OPREATE_DIANPAOHU)
  600. end
  601. end--]]
  602. else
  603. --[[if resultInfo[userId].result == MJDefine.MJGameHuType.HU_ZIMO then
  604. effect = MJAnimationCompnent.CreateHuEffect("zimo")
  605. else
  606. effect = MJAnimationCompnent.CreateHuEffect("hu")
  607. end--]]
  608. end
  609. if effect then
  610. self:addChild(effect)
  611. effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion())
  612. effect:setVisible(false)
  613. end
  614. end
  615. else
  616. if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then
  617. local effect=MJAnimationCompnent.CreateLiuJuEffect(callback)
  618. self:addChild(effect)
  619. else
  620. callback()
  621. end
  622. end
  623. end
  624. log("2000000000-MJRoomView - addCallBack(runGameXiaoJuResponse)" )
  625. self:addCallBack(runGameXiaoJuResponse);
  626. end
  627. return luzhouguiRoomReplayView