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.

569 lines
17 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 MJRoomXiaoJuView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomXiaoJuView")
  8. -- local MJRoomDaJuView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDaJuView")
  9. -- local MJRoomDismissView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDismissView")
  10. local MJRoomDirection=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDirection")
  11. -- local MJMessage=MJFramework.MJImport("mj.luaScript.Protocol.MJMessage")
  12. -- local MJ=MJFramework.MJImport("mj.luaScript.Views.Game.MJ")
  13. local MJWanFa=MJFramework.MJImport("luaScript.SubGameDefine.MaJiang.MJWanFa")
  14. local MJAnimationCompnent=MJFramework.MJImport("mj.luaScript.Views.Compnent.MJAnimationCompnent")
  15. local MJSound=MJFramework.MJImport("mj.luaScript.MJSound")
  16. local MJRoomReplayView=MJFramework.MJFrameworkClassImprot("mj.luaScript.Views.Room.MJRoomReplayView")
  17. local hongzhongRoomReplayView = class("hongzhongRoomReplayView", MJRoomReplayView)
  18. function hongzhongRoomReplayView:onEnter()
  19. -- MJRoomReplayView.super.onEnter(self)
  20. --ui load
  21. --初始化处理函数
  22. if self.initHanders then
  23. self:initHanders()
  24. end
  25. local ui = loadUI("hongzhong/res/ui_fangjian/hongzhong_ui_fangjian.ui");
  26. self.ui = ui;
  27. self:addChild(ui);
  28. -- 初始化GPS组件
  29. -- self:initGpsComponent();
  30. --加载纹理缓存
  31. self:loadTextureCache()
  32. -- --监听事件
  33. -- self:bindAllEvent()
  34. -- self:onGameReconnection()
  35. self:updateRoomData()
  36. --初始化视图
  37. self:initView()
  38. -- --初始化游戏事件按钮
  39. self:initGameButton()
  40. --默认状态
  41. self:defaultState()
  42. self:initHandCardNodes()
  43. self:startReplay()
  44. -- MJSound.PlayGameBGM()
  45. -- playLHQMusic()
  46. -- 房间号
  47. local roomInfo=app.room.roomInfo
  48. self.ui.Items.Text_roomNum:setText(tostring(roomInfo.nShowTableId))
  49. local ruleAll = MJWanFa.getWanFaInfo(roomInfo.strGameInfo)
  50. self.ui.Items.Text_Rule:setText(ruleAll)
  51. self.ui.Items.Layout_TingPai:setVisible(false)
  52. end
  53. function hongzhongRoomReplayView:ctor(data)
  54. hongzhongRoomReplayView.super.ctor(self,data)
  55. -- --玩家牌局面板
  56. -- self.playerHandCards={}
  57. -- self.data=data
  58. -- app:changeGameProtocol(app.gameId,1)
  59. end
  60. function hongzhongRoomReplayView:updateRoomData()
  61. hongzhongRoomReplayView.super.updateRoomData(self)
  62. if self.data.ext.piaofen then
  63. local roomInfo=app.room.roomInfo
  64. for k,v in pairs(self.data.ext.piaofen) do
  65. local nUserId=tonumber(k)
  66. roomInfo.memberList[nUserId].nPiaoNum = v
  67. end
  68. end
  69. end
  70. function hongzhongRoomReplayView:initView()
  71. hongzhongRoomReplayView.super.initView(self)
  72. cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("hongzhong/res/zy_fangjian/mj_piao_fen.plist")
  73. self:onXiaPiaoResponse({})
  74. --self:init3DPos()
  75. self.ui.Items.Button_Info:setVisible(false)
  76. self.ui.Items.Button_Club:setVisible(false)
  77. self.ui.Items.Text_Rule:setPositionY(62)
  78. local exitPt = self.replayView.Items.Button_Exit:getPosition()
  79. self.replayView.Items.Button_Exit:setPositionY(exitPt.y-30)
  80. self:adaptPlayerViewPos()
  81. end
  82. function hongzhongRoomReplayView:adaptPlayerViewPos()
  83. self.playerNodePos = {}
  84. for i=1,4 do
  85. if self.playerView.allNodes[i].player then
  86. self.playerNodePos[i] = self.playerView.allNodes[i].player:getPosition()
  87. end
  88. end
  89. self.playerView.allNodes[1].player:setPositionX(self.playerNodePos[1].x-8)
  90. self.playerView.allNodes[2].player:setPositionY(self.playerNodePos[2].y-20)
  91. self.playerView.allNodes[3].player:setPositionX(self.playerNodePos[3].x+8)
  92. self.playerView.allNodes[4].player:setPosition(cc.p(self.playerNodePos[4].x+12,self.playerNodePos[4].y+10))
  93. end
  94. -- function hongzhongRoomReplayView:onEnter()
  95. -- hongzhongRoomReplayView.super.onEnter(self)
  96. -- --ui load
  97. -- local ui = loadUI("mj/res/ui/ui_fangjian/mj_ui_fangjian.ui");
  98. -- self.ui = ui;
  99. -- self:addChild(ui);
  100. -- -- 初始化GPS组件
  101. -- -- self:initGpsComponent();
  102. -- --加载纹理缓存
  103. -- -- self:loadTextureCache()
  104. -- -- --初始化游戏事件按钮
  105. -- self:initGameButton()
  106. -- -- --监听事件
  107. -- -- self:bindAllEvent()
  108. -- -- self:onGameReconnection()
  109. -- self:updateRoomData()
  110. -- --初始化视图
  111. -- self:initView()
  112. -- --默认状态
  113. -- self:defaultState()
  114. -- self:initHandCardNodes()
  115. -- self:startReplay()
  116. -- -- MJSound.PlayGameBGM()
  117. -- -- playLHQMusic()
  118. -- end
  119. -- function hongzhongRoomReplayView:updateRoomData()
  120. -- local data=self.data--=MJDefine.TestData
  121. -- -- self.data=data
  122. -- app.room:initRoomInfo()
  123. -- local roomInfo=app.room.roomInfo
  124. -- roomInfo.nMaxPlayCount = table.nums(data.user)
  125. -- roomInfo.nShowTableId = data.roomid
  126. -- roomInfo.strGameInfo=json.encode(data.ext)
  127. -- roomInfo.nGameStartCount=data.turn
  128. -- roomInfo.nTotalGameNum=data.nbound
  129. -- local dipai=MJFunction.convertToCards(data.dipai)
  130. -- roomInfo.nLeaveCardNum=#dipai
  131. -- roomInfo.stopFlag=data.flag
  132. -- --用户信息
  133. -- roomInfo.memberList={}
  134. -- for k,v in pairs(data.user) do
  135. -- local nUserId=tonumber(k)
  136. -- if not roomInfo.memberList[nUserId] then
  137. -- roomInfo.memberList[nUserId] = {}
  138. -- end
  139. -- roomInfo.memberList[nUserId].nUserId = nUserId
  140. -- roomInfo.memberList[nUserId].nSeatId = v.seatid
  141. -- -- self.roomInfo.memberList[v.nUserId].nPlayerFlag = v.nPlayerFlag
  142. -- local userInfo=app.playerInfoManager:getPlayerInfo(nUserId)
  143. -- userInfo.nickname=userInfo.name
  144. -- roomInfo.memberList[nUserId].userInfo = json.encode(userInfo)--v.userInfo
  145. -- -- self.roomInfo.memberList[v.nUserId].nTurnScore = v.nTurnScore
  146. -- roomInfo.memberList[nUserId].nTotalMoney = data.score[k]
  147. -- -- self.roomInfo.memberList[v.nUserId].nTingStatus = v.nTingStatus
  148. -- -- self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards
  149. -- -- self.roomInfo.memberList[v.nUserId].outCards = v.outCards
  150. -- local tempCards=MJFunction.convertToCards(v.hand)
  151. -- local handCards={}
  152. -- for k,v in pairs(tempCards) do
  153. -- table.insert(handCards,{card=tonumber(v)})
  154. -- end
  155. -- roomInfo.memberList[nUserId].handCards = handCards
  156. -- -- roomInfo.memberList[nUserId].nOnlineStatus = v.nOnlineStatus
  157. -- -- roomInfo.memberList[nUserId].nDisbandStatus = v.nDisbandStatus
  158. -- -- self.dismissInfo[nUserId] = v.nDisbandStatus
  159. -- --这里只记录,暂时没用到。可能战绩回放的时候是需要用的
  160. -- -- local cardData = self:serverCardToMyCard(v.handCard)
  161. -- -- self.roomInfo.memberList[v.nUserId].cardList = {}
  162. -- -- self.roomInfo.memberList[v.nUserId].cardList = cardData
  163. -- end
  164. -- roomInfo.nBankSeatId=roomInfo.memberList[tonumber(data.ext.banker)].nSeatId
  165. -- app.room:updateUserSeateShowId()
  166. -- --战报解析
  167. -- self.reports={}
  168. -- local ops=string.split(data.ops,"|")
  169. -- for k,v in pairs(ops) do
  170. -- local op=string.split(v,",")
  171. -- local nUserId=tonumber(op[1])
  172. -- local opType=op[2]
  173. -- local card=tonumber(op[3])
  174. -- table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card})
  175. -- -- print(table.tostring(op))
  176. -- end
  177. -- end
  178. -- function hongzhongRoomReplayView:initGameButton()
  179. -- --详细按钮
  180. -- self.ui.Items.Button_Info:registerClick(function()
  181. -- playBtnEffect()
  182. -- self.ui.Items.Layout_Rule:setVisible(not self.ui.Items.Layout_Rule:isVisible())
  183. -- end)
  184. -- --点击空白
  185. -- self.ui.Items.Layout_Touch:registerClick(nil,function()
  186. -- -- 隐藏个人信息
  187. -- -- self.playerView:removePlayerInfoView()
  188. -- -- self.ui.Items.Layout_Card_Panel:setVisible(false)
  189. -- self.ui.Items.Layout_Rule:setVisible(false)
  190. -- -- local effect=MJAnimationCompnent.CreateGameStart(onEnd)
  191. -- -- self.ui.Items.Layout_Player:addChild(effect)
  192. -- -- self.ui.Items.Button_Invite:setVisible(false)
  193. -- -- self.ui.Items.Button_Ready:setVisible(false)
  194. -- end)
  195. -- end
  196. -- function hongzhongRoomReplayView:defaultState()
  197. -- --队列初始化
  198. -- self.callbackQueue = {}
  199. -- self.callbackRunning = false
  200. -- self.ui.Items.Button_GPS:setVisible(false)
  201. -- self.ui.Items.Layout_TingPai:setVisible(false)
  202. -- self.playerView:setOffLineVisible(false)
  203. -- self.playerView:setPlayerVisible(false)
  204. -- self.ui.Items.Layout_Rule:setVisible(false)
  205. -- self.ui.Items.Text_CardNum:setText("")
  206. -- -- self.playerView:setOperatorTipVisible(false)
  207. -- self:setBtnSitDownVisible(false)
  208. -- self:setTingCardViewVisible(false)
  209. -- self:setGuideView(false)
  210. -- self:setWetChatVisible(false)
  211. -- end
  212. -- function hongzhongRoomReplayView:initView()
  213. -- self.direcionView = MJRoomDirection:new()
  214. -- self.ui.Items.Layout_Player:addChild(self.direcionView)
  215. -- self.direcionView:setVisible(false)
  216. -- --UI相关
  217. -- self.playerView = MJRoomPlayerView:new()
  218. -- self:addChild(self.playerView)
  219. -- self.playerView:setHeadTouchEnable(false)
  220. -- -- 添加语音相关的界面
  221. -- self.messageView = MJRoomMessageView:new()
  222. -- self:addChild(self.messageView)
  223. -- self.messageView:setVisible(false)
  224. -- --加载工具层
  225. -- self.toolView = MJRoomToolView:new()
  226. -- self:addChild(self.toolView)
  227. -- self.toolView:setVisible(false)
  228. -- local roomInfo=app.room.roomInfo
  229. -- -- 房间号
  230. -- self.ui.Items.Text_roomNum:setText(tostring(roomInfo.nShowTableId))
  231. -- self:updateGameNums()
  232. -- --房间玩法
  233. -- local ruleAll = MJWanFa:getWanFaInfo(roomInfo.strGameInfo)--getLHQRuleStr();
  234. -- self.ui.Items.Text_Rule:setText(ruleAll)
  235. -- local heght=self.ui.Items.Text_Rule:getContentSize().height+20
  236. -- self.ui.Items.Layout_Rule:setSize(cc.size(self.ui.Items.Layout_Rule:getContentSize().width,heght))
  237. -- self.ui.Items.Text_Rule:setPositionY(heght-10)
  238. -- end
  239. -- function hongzhongRoomReplayView:startReplay()
  240. -- self:startGame()
  241. -- local handers={
  242. -- ["DealCard"]=handler(self,self.onGetCard),
  243. -- ["OutCard"]=handler(self,self.onOutCard),
  244. -- ["Peng"]=handler(self,self.onOperate),
  245. -- ["BaGang"]=handler(self,self.onOperate),
  246. -- ["AnGang"]=handler(self,self.onOperate),
  247. -- ["Gang"]=handler(self,self.onOperate),
  248. -- ["DianPao"]=handler(self,self.onGameEnd),
  249. -- ["ZiMoHu"]=handler(self,self.onGameEnd),
  250. -- }
  251. -- local actions={}
  252. -- for k,v in pairs(self.reports) do
  253. -- if handers[v.opType] then
  254. -- table.insert(actions,cc.DelayTime:create(1))
  255. -- table.insert(actions,cc.CallFunc:create(function()
  256. -- print(table.tostring(v))
  257. -- handers[v.opType](v)
  258. -- end))
  259. -- end
  260. -- end
  261. -- table.insert(actions,cc.DelayTime:create(1))
  262. -- table.insert(actions,cc.CallFunc:create(function()
  263. -- self:endReplay()
  264. -- -- print(table.tostring(v))
  265. -- -- handers[v.opType](v)
  266. -- end))
  267. -- self:runAction(cc.Sequence:create(actions))
  268. -- end
  269. -- function hongzhongRoomReplayView:startGame()
  270. -- self:onGameStartResponse()
  271. -- self:onGameSendCardResponse()
  272. -- self.playerHandCards[MJDefine.MyViewId]:removeTouchEvent()
  273. -- end
  274. -- function hongzhongRoomReplayView:onGetCard(data)
  275. -- local roomInfo=app.room.roomInfo
  276. -- roomInfo.nLeaveCardNum=roomInfo.nLeaveCardNum-1
  277. -- local response={
  278. -- nUserId=data.nUserId,
  279. -- card=data.card,
  280. -- -- operates={},
  281. -- nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  282. -- }
  283. -- self:onBankerOutCard({response=response})
  284. -- end
  285. function hongzhongRoomReplayView:onOutCard(data)
  286. local roomInfo=app.room.roomInfo
  287. local response={
  288. nUserId=data.nUserId,
  289. card=data.card,
  290. -- operates={},
  291. -- nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  292. }
  293. self.fromSeatId=roomInfo.memberList[data.nUserId].nSeatId
  294. local viewId=app.room:getViewIdByUserId(data.nUserId)
  295. if viewId==MJDefine.MyViewId then
  296. -- self.playerHandCards[MJDefine.MyViewId].touchMJ=self.playerHandCards[MJDefine.MyViewId]:getMjByValue(data.card)
  297. end
  298. self:onOutCardSuccess({response=response})
  299. end
  300. -- function hongzhongRoomReplayView:onOperate(data)
  301. -- local roomInfo=app.room.roomInfo
  302. -- local operates={
  303. -- ["Peng"]=MJDefine.MJOperateType.OPREATE_PENG,
  304. -- ["BaGang"]=MJDefine.MJOperateType.OPREATE_BAGANG,
  305. -- ["AnGang"]=MJDefine.MJOperateType.OPREATE_ANGANG,
  306. -- ["Gang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG,
  307. -- }
  308. -- local response={
  309. -- nUserId=data.nUserId,
  310. -- opCard=data.card,
  311. -- opType=operates[data.opType],
  312. -- -- operates={},
  313. -- nSeatId=roomInfo.memberList[data.nUserId].nSeatId,
  314. -- isNeedOutCard=1,
  315. -- fromSeatId=self.fromSeatId,
  316. -- }
  317. -- self:onOperationCodeSuccess({response=response})
  318. -- end
  319. function hongzhongRoomReplayView:onGameEnd(data)
  320. local function runGameXiaoJuResponse(onEnd)
  321. local function callback()
  322. -- self:endReplay()
  323. -- self:showXiaoJuView()
  324. if onEnd then
  325. onEnd()
  326. end
  327. end
  328. local roomInfo = app.room.roomInfo
  329. local hutype=self.data.ext.huTypes
  330. local hucard=data.card
  331. self.direcionView:stopAllActions()
  332. -- local resultInfo=json.decode(roomInfo.strResultInfo)
  333. --所有胡牌的人 考虑抢杠胡的问题
  334. local viewIds={}
  335. local failViewId=0
  336. if self.data.ext.result then
  337. for k,v in pairs(self.data.ext.result) do
  338. local viewId = app.room:getViewIdByUserId(v.uid)
  339. if v.ishu==MJDefine.MJGameResultType.Win then
  340. table.insert(viewIds,viewId)
  341. elseif v.ishu==MJDefine.MJGameResultType.Fail then
  342. failViewId=viewId
  343. end
  344. end
  345. end
  346. --[[for k,v in pairs(roomInfo.memberList) do
  347. local viewId = app.room:getViewIdByUserId(v.nUserId)
  348. if v.nTotalMoney>0 then
  349. table.insert(viewIds,viewId)
  350. elseif v.nTotalMoney<0 then
  351. failViewId=viewId
  352. end
  353. -- if v.result==MJDefine.MJGameResultType.Win then
  354. -- table.insert(viewIds,viewId)
  355. -- elseif v.result==MJDefine.MJGameResultType.Fail then
  356. -- failViewId=viewId
  357. -- end
  358. end--]]
  359. --被抢杠的人回退补杠
  360. if hutype==MJDefine.MJHuType.QiangGangHu and roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_NORMAL then
  361. self.playerHandCards[failViewId]:retoreBuGang(hucard)
  362. end
  363. local tabZhaniaocards=MJFunction.convertToCards(self.data.ext.zhaNiaoCards)
  364. local tabZhongniaocards=MJFunction.convertToCards(self.data.ext.zhongNiaoCards)
  365. self:outNiaoCards(viewIds,failViewId,tabZhaniaocards)
  366. local function zhongNiao()
  367. self:showZhongNiaoView(tabZhongniaocards,viewIds,callback)
  368. end
  369. local function niaoFly()
  370. if #tabZhongniaocards>0 then
  371. self:showNiaoAniamtion(viewIds,zhongNiao)
  372. else
  373. callback()
  374. end
  375. end
  376. local function niaoCallBack()
  377. if #tabZhaniaocards>0 then
  378. self:showNiaoView(tabZhaniaocards,niaoFly)
  379. else
  380. callback()
  381. end
  382. end
  383. if #viewIds>0 then
  384. for k,viewId in pairs(viewIds) do
  385. local effect
  386. if k == #viewIds then --只有最后播放胡牌动画的回调一次就可以了
  387. effect=MJAnimationCompnent.CreateHuEffect(niaoCallBack)
  388. --音效
  389. local userInfo=app.room:getUserInfoByViewId(viewId)
  390. if userInfo then
  391. if hutype==MJDefine.MJHuType.Zimo then
  392. MJSound.PlayOperateSound(userInfo.sex,MJDefine.MJOperateType.OPREATE_ZIMOHU)
  393. else
  394. MJSound.PlayOperateSound(userInfo.sex,MJDefine.MJOperateType.OPREATE_DIANPAOHU)
  395. end
  396. end
  397. else
  398. effect=MJAnimationCompnent.CreateHuEffect()
  399. end
  400. if effect then
  401. self:addChild(effect)
  402. effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion())
  403. end
  404. end
  405. else
  406. if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then
  407. local effect=MJAnimationCompnent.CreateLiuJuEffect(callback)
  408. self:addChild(effect)
  409. else
  410. callback()
  411. end
  412. end
  413. end
  414. log("2000000000-MJRoomView - addCallBack(runGameXiaoJuResponse)" )
  415. self:addCallBack(runGameXiaoJuResponse);
  416. end
  417. -- function hongzhongRoomReplayView:endReplay()
  418. -- local roomInfo = app.room.roomInfo
  419. -- -- local function sortMj(mjA,mjB)
  420. -- -- if mjA.sortValue<mjB.sortValue then
  421. -- -- return true
  422. -- -- elseif mjA.sortValue==mjB.sortValue then
  423. -- -- if mjA:getPositionX()<mjB:getPositionX() then
  424. -- -- return true
  425. -- -- end
  426. -- -- end
  427. -- -- return false
  428. -- -- end
  429. -- for k,v in pairs(roomInfo.memberList) do
  430. -- local viewId = app.room:getViewIdByUserId(v.nUserId)
  431. -- if self.playerHandCards[viewId] then
  432. -- local handCards={}
  433. -- for _,mj in pairs(self.playerHandCards[viewId].handCards) do
  434. -- table.insert(handCards,{card=mj.value})
  435. -- end
  436. -- -- table.sort(handCards,sortMj)
  437. -- if viewId==MJDefine.MyViewId then
  438. -- --我自己则屏蔽触摸事件
  439. -- -- self.playerHandCards[viewId]:removeTouchEvent()
  440. -- else
  441. -- --显示所有底牌
  442. -- self.playerHandCards[viewId]:removeAllHandCards()
  443. -- self.playerHandCards[viewId]:createOpenHandCards(handCards)
  444. -- end
  445. -- end
  446. -- end
  447. -- self:runAction(cc.Sequence:create(
  448. -- cc.DelayTime:create(3),
  449. -- cc.CallFunc:create(function()
  450. -- local MJMainView=MJFramework.MJImport("mj.luaScript.Views.Main.MJMainView")
  451. -- app:gotoView(MJMainView:new())
  452. -- end)
  453. -- ))
  454. -- end
  455. return hongzhongRoomReplayView