local MJRoomToolView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomToolView") local MJRoomMessageView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomMessageView") local MJRoomPlayerView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomPlayerView") local MJDefine=MJFramework.MJImport("mj.luaScript.MJDefine") local MJFunction=MJFramework.MJImport("mj.luaScript.MJFunction") local MJHandCardView=MJFramework.MJImport("mj.luaScript.Views.Game.MJHandCardView") local MJRoomDirection=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDirection") local MJWanFa=MJFramework.MJImport("luaScript.SubGameDefine.MaJiang.MJWanFa") local MJAnimationCompnent=MJFramework.MJImport("mj.luaScript.Views.Compnent.MJAnimationCompnent") local MJSound=MJFramework.MJImport("mj.luaScript.MJSound") local MJRoomReplayView=MJFramework.MJFrameworkClassImprot("mj.luaScript.Views.Room.MJRoomReplayView") local xueliuRoomReplayView = class("xueliuRoomReplayView", MJRoomReplayView) function xueliuRoomReplayView:ctor(data) xueliuRoomReplayView.super.ctor(self,data) -- --玩家牌局面板 -- self.playerHandCards={} -- self.data=data -- app:changeGameProtocol(app.gameId,1) end function xueliuRoomReplayView:loadUI() local ui = loadUI("mj_xueliu/res/ui_fangjian/mj_xueliu_roomView.ui") self.ui = ui; self:addChild(ui); end function xueliuRoomReplayView:onEnter() xueliuRoomReplayView.super.onEnter(self) --self:bindEvent(app.room, MJDefine.MJEvent.EVENT_BTN_SHOW_FLOW_VIEW_CLICKED, handler(self, self.onEventBtnShowFlowViewClicked)); self:initLogo() self:doSound() self:setCheckDefault() self:initSwapLayer() self.huOrder = 0 self.ui.Items.Button_Flow:registerClick(handler(self, self.onButtonFlowClicked)) end function xueliuRoomReplayView:initLogo() self.ui.Items.ImageView_Logo:setVisible(false) end -- 重写父类,分数要除10 function xueliuRoomReplayView:updateRoomData() local data=self.data--=MJDefine.TestData -- self.data=data app.room:initRoomInfo() local roomInfo=app.room.roomInfo roomInfo.nMaxPlayCount = table.nums(data.user) roomInfo.nShowTableId = data.roomid or data.roomNum roomInfo.strGameInfo=json.encode(data.ext) roomInfo.nGameStartCount=data.turn roomInfo.nTotalGameNum=data.totalCount or data.nbound or 0 local dipai=MJFunction.convertToCards(data.dipai) roomInfo.nLeaveCardNum=#dipai roomInfo.stopFlag=data.flag roomInfo.gameId = data.gameid --用户信息 roomInfo.memberList={} for k,v in pairs(data.user) do local nUserId=tonumber(k) if not roomInfo.memberList[nUserId] then roomInfo.memberList[nUserId] = {} end roomInfo.memberList[nUserId].nUserId = nUserId roomInfo.memberList[nUserId].nSeatId = v.seatid -- self.roomInfo.memberList[v.nUserId].nPlayerFlag = v.nPlayerFlag local userInfo=app.playerInfoManager:getPlayerInfo(nUserId) userInfo.nickname = userInfo.name userInfo.headimgurl = userInfo.head roomInfo.memberList[nUserId].userInfo = json.encode(userInfo)--v.userInfo -- self.roomInfo.memberList[v.nUserId].nTurnScore = v.nTurnScore roomInfo.memberList[nUserId].nTotalMoney = app.room:isUseDivision10() and data.score[k] / 10 or data.score[k] -- self.roomInfo.memberList[v.nUserId].nTingStatus = v.nTingStatus -- self.roomInfo.memberList[v.nUserId].gruoupCards = v.gruoupCards -- self.roomInfo.memberList[v.nUserId].outCards = v.outCards local tempCards=MJFunction.convertToCards(v.hand) local handCards={} for k,v in pairs(tempCards) do if tonumber(v) then table.insert(handCards,{card=tonumber(v)}) end end roomInfo.memberList[nUserId].handCards = handCards -- roomInfo.memberList[nUserId].nOnlineStatus = v.nOnlineStatus -- roomInfo.memberList[nUserId].nDisbandStatus = v.nDisbandStatus -- self.dismissInfo[nUserId] = v.nDisbandStatus --这里只记录,暂时没用到。可能战绩回放的时候是需要用的 -- local cardData = self:serverCardToMyCard(v.handCard) -- self.roomInfo.memberList[v.nUserId].cardList = {} -- self.roomInfo.memberList[v.nUserId].cardList = cardData end roomInfo.nBankSeatId=roomInfo.memberList[tonumber(data.ext.banker)].nSeatId app.room:updateUserSeateShowId() self:parseData() end function xueliuRoomReplayView:parseData() self.piaotimes = 0--记录有几次飘操作,为了飘完后删除飘字 local data = self.data --战报解析 self.reports={} local ops=string.split(data.ops,"|") for k,v in pairs(ops) do local op=string.split(v,",") local nUserId=tonumber(op[1]) local opType=op[2] local opStr = op[3] if opType == "ShowAction" then local opList = {} if nUserId==0 then local temp = string.split(opStr, ";") for k,v in pairs(temp) do local temp2 = string.split(v, " ") local userId = tonumber(temp2[1]) table.remove(temp2,1) local operates = temp2 table.insert(opList,{nUserId = userId,operates = self:margeOperates(operates) }) end else local operates = string.split(opStr, " ") table.insert(opList,{nUserId = nUserId,operates = self:margeOperates(operates) }) end table.insert(self.reports,{opType=opType,opList=opList}) elseif opType == "HuanPai" then self.huanPai = self.huanPai or {} local huanCards = {} local tCards = string.split(opStr, "_") for i,v in pairs(tCards) do if v and tonumber(v) then table.insert(huanCards,tonumber(v)) end end table.insert(self.huanPai,{nUserId=nUserId,opType="HuanPai",cards = huanCards }) local op=string.split(ops[k+1],",") local opType=op[2] if opType ~= "HuanPai" then table.insert(self.reports,{huanPaiInfo=self.huanPai,opType="HuanPai" }) end elseif opType == "HuanPaiType" then local temp = string.split(opStr, "_") local huanPaiType = tonumber(temp[1]) table.insert(self.reports,{nUserId=nUserId,opType=opType,huanPaiType = huanPaiType }) elseif opType == "HuanPaiDone" then self.huanPaiDone = self.huanPaiDone or {} local huanCards = {} local tCards = string.split(opStr, "_") for i,v in pairs(tCards) do if v and tonumber(v) then table.insert(huanCards,tonumber(v)) end end table.insert(self.huanPaiDone,{nUserId=nUserId,opType="HuanPaiDone",cards = huanCards }) local op=string.split(ops[k+1],",") local opType=op[2] if opType ~= "HuanPaiDone" then table.insert(self.reports,{huanPaiInfo=self.huanPaiDone,opType="HuanPaiDone" }) end elseif opType == "SelectedQue" then local opList = {} local temp2 = {} table.insert(temp2,tonumber(0)) table.insert(temp2,tonumber(1)) table.insert(temp2,tonumber(2)) table.insert(opList,{nUserId = nUserId,operates = self:margeOperates(temp2) }) table.insert(self.reports,{opType="ShowDingQueOpt",opList=opList}) table.insert(self.reports,{nUserId=nUserId,opType="SubmitOp",submitOp = tonumber(opStr) }) local tCards = string.split(opStr, "_") local card,redNum = nil,0 if tCards[1] then card = tonumber(tCards[1]) end if tCards[2] then redNum = tonumber(tCards[2]) end table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card,redNum=redNum}) elseif opType == "BaoJiao" then local opList = {} local temp2 = {} table.insert(temp2,tonumber(1)) --table.insert(temp2,tonumber(2)) table.insert(opList,{nUserId = nUserId,operates = self:margeOperates(temp2) }) table.insert(self.reports,{opType="ShowBaoOpt",opList=opList}) table.insert(self.reports,{nUserId=nUserId,opType="SubmitOp",submitOp = tonumber(opStr) }) local tCards = string.split(opStr, "_") local card,redNum = nil,0 if tCards[1] then card = tonumber(tCards[1]) end if tCards[2] then redNum = tonumber(tCards[2]) end table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card,redNum=redNum}) elseif opType == "SubmitOp" then --提交的操作 local temp = string.split(opStr, "_") local submitOp = tonumber(temp[1]) table.insert(self.reports,{nUserId=nUserId,opType=opType,submitOp = submitOp }) elseif opType == "PiaoOpt" then self.piaotimes = self.piaotimes + 1 local ops = string.split(opStr, "_") local piaostate = tonumber(ops[1]) table.insert(self.reports,{nUserId=nUserId,opType=opType,piaostate = piaostate }) elseif "DisCard"~=opType then local tCards = string.split(opStr, "_") local card,redNum = nil,0 if tCards[1] then card = tonumber(tCards[1]) end if tCards[2] then redNum = tonumber(tCards[2]) end table.insert(self.reports,{nUserId=nUserId,opType=opType,card=card,redNum=redNum}) end end if self.data.ext.luoboCards then local luoboCards=MJFunction.convertToCards(self.data.ext.luoboCards) if #luoboCards > 0 then table.insert(self.reports,{opType="BaLuoBo"}) end end self.scoreInfoDatas = {}; if self.data.ext.liushui then local userId = app.room:getMyUserId(); local tmpScoreInfo = {}; for k, v in pairs(self.data.ext.liushui) do if tonumber(k) == userId then tmpScoreInfo = v; break; end end local scoreInfo = {}; for k, v in pairs(tmpScoreInfo) do local arr = string.split(v, ";"); local obj = { type = tonumber(arr[1]), card = tonumber(arr[2]), score = tonumber(arr[3]), seat = string.gsub(arr[4], "_", ";"), fanshu = tonumber(arr[5]), paiType = tonumber(arr[6]), genShu = tonumber(arr[7]), subPaiType = tonumber(arr[8]), bIsJinGouDiao = tonumber(arr[9]), bIsHaiDiLaoYue = tonumber(arr[10]), bIsHaiDiPao = tonumber(arr[11]), bGangShangKaiHua = tonumber(arr[12]), bGangShangPao = tonumber(arr[13]), bQiangGangHu = tonumber(arr[14]), bMenQing = tonumber(arr[15]), bZhongZhang = tonumber(arr[16]), totalScore = tonumber(arr[17]), opType = self:parsetOpType(tonumber(arr[1])), }; table.insert(scoreInfo, obj); end self.scoreInfo = scoreInfo; self.scoreIndex = 1; -- app.room.roomInfo:setScoreInfo(scoreInfo); else self.scoreIndex = 1; self.scoreInfo = {} end end --合并操作 只显示一个杠 function xueliuRoomReplayView:margeOperates(operates) local ops = {} local isGang = false for k,v in pairs(operates) do local op = tonumber(v) if (op==MJDefine.MJOperateType.OPREATE_ZHIGANG) or (op==MJDefine.MJOperateType.OPREATE_BAGANG) or (op==MJDefine.MJOperateType.OPREATE_ANGANG) then if not isGang then table.insert(ops,op) isGang = true end else table.insert(ops,op) end end return ops end function xueliuRoomReplayView:startGame() self:onGameStartResponse() --设置为回放模式 for k,v in pairs(self.playerHandCards) do v:setReplay(true) end self:setIsReplay(true) app.room.roomInfo.laizi = tonum(self.data.ext.laizi) self:onGameSendCardResponse() self.playerHandCards[MJDefine.MyViewId]:removeTouchEvent() end function xueliuRoomReplayView:initHanders() xueliuRoomReplayView.super.initHanders(self) self.handers ["BaoPai"] = handler(self,self.onBaoPaiRes) self.handers ["SelectedQue"] = handler(self,self.onSelectedQueRes) self.handers ["DianPao"] = handler(self,self.onDianPao) self.handers ["DianPaoHu"] = handler(self,self.onPlayerHu) self.handers ["QiangGangHu"] = handler(self,self.onPlayerHu) self.handers ["ZiMoHu"] = handler(self,self.onPlayerHu) self.handers ["ShowAction"] = handler(self,self.onShowOperates) self.handers ["ShowBaoOpt"] = handler(self,self.onShowBaoOpt) self.handers ["SubmitOp"] = handler(self,self.onSubmitOperate) self.handers ["ActionWait"] = handler(self,self.onActionWait) self.handers ["BaLuoBo"]=handler(self,self.onBaLuoBo) self.handers ["ShowDingQueOpt"]=handler(self,self.onSelectedQueOpt) self.handers ["HuanPaiType"]=handler(self,self.onHuanPaiType) --self.handers ["HuanPaiType"]=handler(self,self.onHuanPaiType) self.handers ["HuanPaiDone"]=handler(self,self.onHuanPaiDone) self.handers ["HuanPai"]=handler(self,self.onHuanPai) end function xueliuRoomReplayView:onActionWait(data) local response = { nUserId = data.nUserId, opType = data.card, } self:onWaitOperate({response = response}) end function xueliuRoomReplayView:onSubmitOperate(data) local viewId = app.room:getViewIdByUserId(data.nUserId) local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate local btn = Layout_Operate:getChildByTag(data.submitOp) if btn then local hand = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_room_hand.png") btn:addChild(hand) local size = btn:getContentSize() hand:setPosition(cc.p(size.width/2+20,size.height/2-20)) local action = cc.Sequence:create(cc.MoveBy:create(0.5,cc.p(-10,10)),cc.MoveBy:create(0.5,cc.p(10,-10))) hand:runAction(cc.RepeatForever:create(action)) -- if data.submitOp == MJDefine.MJOperateType.OPREATE_CANCEL then btn:runAction(cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function() self.playerHandCards[viewId]:hideOperate() end))) -- end end end function xueliuRoomReplayView:onShowOperates(data) local opList = data.opList for k,v in pairs(opList) do local nUserId = v.nUserId local operates = v.operates local viewId=app.room:getViewIdByUserId(nUserId) local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate Layout_Operate:removeAllChildren() Layout_Operate:setVisible(true) local x=Layout_Operate:getContentSize().width if viewId==MJDefine.PlayerViewType.Left then x = 0 end table.insert(operates,1,MJDefine.MJOperateType.OPREATE_CANCEL) local y=Layout_Operate:getContentSize().height/2 local function createOperate(op,isLeft) local btnOperate=cc.Button:createNode() btnOperate:setDefaults() btnOperate:setText("") btnOperate:loadTextureNormal(MJDefine.MJOperateImage[op]) if isLeft then x = x + MJDefine.MJ_OPERATE_PADDING else x = x -MJDefine.MJ_OPERATE_PADDING end btnOperate:setPosition(cc.p(x,y)) btnOperate:setTag(op) Layout_Operate:addChild(btnOperate) end if viewId==MJDefine.PlayerViewType.Left then for i = #operates,1,-1 do local op = tonumber(operates[i]) createOperate(op,true) end else for _,strOp in pairs(operates) do local op = tonumber(strOp) createOperate(op,false) end end -- self.playerHandCards[viewId]: if viewId~=MJDefine.MyViewId then local node = self.playerView.allNodes[viewId] local pos = cc.pAdd(node.player:getPosition(),cc.p(38,66)) if viewId==MJDefine.PlayerViewType.Left then Layout_Operate:setAnchorPoint(cc.p(0,0.5)) elseif viewId==MJDefine.PlayerViewType.Right then pos.x = pos.x-100 elseif viewId==MJDefine.PlayerViewType.Top then Layout_Operate:setAnchorPoint(cc.p(1,1)) pos.y = pos.y-33*2 end if viewId==MJDefine.PlayerViewType.Left or viewId==MJDefine.PlayerViewType.Right then pos.y = pos.y-104 end Layout_Operate:setPosition(pos) Layout_Operate:setScale(0.7) end end end function xueliuRoomReplayView:onShowBaoOpt(data) local opList = data.opList for k,v in pairs(opList) do local nUserId = v.nUserId local operates = v.operates local viewId=app.room:getViewIdByUserId(nUserId) local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate Layout_Operate:removeAllChildren() Layout_Operate:setVisible(true) local x=Layout_Operate:getContentSize().width if viewId==MJDefine.PlayerViewType.Left then x = 0 end table.insert(operates,1,MJDefine.MJOperateType.OPREATE_CANCEL) local y=Layout_Operate:getContentSize().height/2 local TOperateImage = { [0]="mj/res/ui/zy_fangjian/operate/mj_btn_guo.png", [1]="mj/res/ui/zy_fangjian/operate/mj_btn_bao1.png", --[2]="mj/res/ui/zy_fangjian/operate/mj_btn_bozimo.png", } local function createOperate(op,isLeft) local btnOperate=cc.Button:createNode() btnOperate:setDefaults() btnOperate:setText("") btnOperate:loadTextureNormal(TOperateImage[op]) if isLeft then x = x + MJDefine.MJ_OPERATE_PADDING else x = x -MJDefine.MJ_OPERATE_PADDING end btnOperate:setPosition(cc.p(x,y)) btnOperate:setTag(op) Layout_Operate:addChild(btnOperate) end if viewId==MJDefine.PlayerViewType.Left then for i = #operates,1,-1 do local op = tonumber(operates[i]) createOperate(op,true) end else for _,strOp in pairs(operates) do local op = tonumber(strOp) createOperate(op,false) end end -- self.playerHandCards[viewId]: if viewId~=MJDefine.MyViewId then local node = self.playerView.allNodes[viewId] local pos = cc.pAdd(node.player:getPosition(),cc.p(38,66)) if viewId==MJDefine.PlayerViewType.Left then Layout_Operate:setAnchorPoint(cc.p(0,0.5)) elseif viewId==MJDefine.PlayerViewType.Right then pos.x = pos.x-100 elseif viewId==MJDefine.PlayerViewType.Top then Layout_Operate:setAnchorPoint(cc.p(1,1)) pos.y = pos.y-33*2 end if viewId==MJDefine.PlayerViewType.Left or viewId==MJDefine.PlayerViewType.Right then pos.y = pos.y-104 end Layout_Operate:setPosition(pos) Layout_Operate:setScale(0.7) end end end --显示定缺 function xueliuRoomReplayView:onSelectedQueOpt(data) local opList = data.opList for k,v in pairs(opList) do local nUserId = v.nUserId local operates = v.operates local viewId=app.room:getViewIdByUserId(nUserId) local Layout_Operate = self.playerHandCards[viewId].ui.Items.Layout_Operate Layout_Operate:removeAllChildren() Layout_Operate:setVisible(true) local x=Layout_Operate:getContentSize().width if viewId==MJDefine.PlayerViewType.Left then x = 0 end --table.insert(operates,1,MJDefine.MJOperateType.OPREATE_CANCEL) local y=Layout_Operate:getContentSize().height/2 local TOperateImage = { [0]="mj_xueliu/res/zy_fangjian/xzddadd/xzdd_btn_wan.png", [1]="mj_xueliu/res/zy_fangjian/xzddadd/xzdd_btn_tong.png", [2]="mj_xueliu/res/zy_fangjian/xzddadd/xzdd_btn_tiao.png", } local function createOperate(op,isLeft) local btnOperate=cc.Button:createNode() btnOperate:setDefaults() btnOperate:setText("") btnOperate:loadTextureNormal(TOperateImage[op]) if isLeft then x = x + MJDefine.MJ_OPERATE_PADDING else x = x -MJDefine.MJ_OPERATE_PADDING end btnOperate:setPosition(cc.p(x,y)) btnOperate:setTag(op) Layout_Operate:addChild(btnOperate) end if viewId==MJDefine.PlayerViewType.Left then for i = #operates,1,-1 do local op = tonumber(operates[i]) createOperate(op,true) end else for _,strOp in pairs(operates) do local op = tonumber(strOp) createOperate(op,false) end end -- self.playerHandCards[viewId]: if viewId~=MJDefine.MyViewId then local node = self.playerView.allNodes[viewId] local pos = cc.pAdd(node.player:getPosition(),cc.p(38,-50)) if viewId==MJDefine.PlayerViewType.Left then Layout_Operate:setAnchorPoint(cc.p(0,0.5)) elseif viewId==MJDefine.PlayerViewType.Right then pos.x = pos.x-80 elseif viewId==MJDefine.PlayerViewType.Top then Layout_Operate:setAnchorPoint(cc.p(1,1)) pos.y = pos.y+50 end Layout_Operate:setPosition(pos) Layout_Operate:setScale(0.7) end end end function xueliuRoomReplayView:onHuanPaiType(data) self:showSwapDirection(data.huanPaiType) end function xueliuRoomReplayView:onOperate(data) local roomInfo=app.room.roomInfo local operates={ ["Peng"]=MJDefine.MJOperateType.OPREATE_PENG, ["BaGang"]=MJDefine.MJOperateType.OPREATE_BAGANG, ["AnGang"]=MJDefine.MJOperateType.OPREATE_ANGANG, ["Gang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG, ["ZhiGang"]=MJDefine.MJOperateType.OPREATE_ZHIGANG, } self.fromSeatId = self.fromSeatId or roomInfo.memberList[data.nUserId].nSeatId local response={ nUserId=data.nUserId, opCard=data.card, redNum = data.redNum, opType=operates[data.opType], -- operates={}, nSeatId=roomInfo.memberList[data.nUserId].nSeatId, isNeedOutCard=0, fromSeatId=self.fromSeatId, } --碰了之后需要出牌 if data.opType=="Peng" then response.isNeedOutCard=1 end for k,v in pairs(self.playerHandCards) do v:hideOperate() end self:onOperationCodeSuccess({response=response}) self:updateScoreInfo(response.opType, response.opCard); end function xueliuRoomReplayView:onOutCard(data) local roomInfo=app.room.roomInfo local response={ nUserId=data.nUserId, card=data.card, operates={}, -- nSeatId=roomInfo.memberList[data.nUserId].nSeatId, } self.fromSeatId=roomInfo.memberList[data.nUserId].nSeatId local viewId=app.room:getViewIdByUserId(data.nUserId) self.playerHandCards[viewId]:hideOperate() if viewId==MJDefine.MyViewId then -- self.playerHandCards[MJDefine.MyViewId].touchMJ=self.playerHandCards[MJDefine.MyViewId]:getMjByValue(data.card) end self:onOutCardSuccess({response=response}) end function xueliuRoomReplayView:onBaoPaiRes(data) local response={ nUserId=data.nUserId, isBaoPai=data.card, } local viewId=app.room:getViewIdByUserId(data.nUserId) self.playerHandCards[viewId]:hideOperate() self:onBaoPai({response=response}) end function xueliuRoomReplayView:onSelectedQueRes(data) local viewId=app.room:getViewIdByUserId(data.nUserId) self.playerHandCards[viewId]:hideOperate() self.playerView:showQue(data.card,viewId,true) self.playerHandCards[viewId]:setQueType(data.card) self.playerHandCards[viewId]:resetHandCards() end function xueliuRoomReplayView:onDianPao(data) self.dpUserId = data.nUserId or 0 end function xueliuRoomReplayView:onPlayerHu(data) local roomInfo=app.room.roomInfo self.huOrder = self.huOrder + 1 local huType = { ["ZiMoHu"] = MJDefine.MJGameHuType.HU_ZIMO, ["DianPaoHu"] = MJDefine.MJGameHuType.HU_DIANPAO, ["QiangGangHu"] = MJDefine.MJGameHuType.HU_DIANPAO, } local opType = { ["ZiMoHu"] = MJDefine.MJOperateType.OPREATE_ZIMOHU, ["DianPaoHu"] = MJDefine.MJOperateType.OPREATE_DIANPAOHU, ["QiangGangHu"] = MJDefine.MJOperateType.OPREATE_QIANG_GANG_HU, } local redRealCard = 0 local isQiangGng = 0 if data.opType == "QiangGangHu" then redRealCard = data.card isQiangGng =1 end local response={ nUserId=data.nUserId, huType = huType[data.opType], huCard = data.card, dpId = self.dpUserId, huOrder = self.huOrder, redRealCard = redRealCard, isQiangGng = isQiangGng, } local viewId=app.room:getViewIdByUserId(data.nUserId) for k,v in pairs(self.playerHandCards) do v:hideOperate() end self.playerHandCards[viewId]:hideOperate() self:onHuResponse({response=response}) self:updateScoreInfo(opType[data.opType], data.card); end function xueliuRoomReplayView:onBaLuoBo() local luoboCards=MJFunction.convertToCards(self.data.ext.luoboCards) local function callback() self.ui.Items.Layout_Effect_luobo:removeAllChildren() end local function luoboNumCallBack() if self.data.ext.luobonum > 0 then local index = 1 local playerNum = table.nums(self.data.ext.userExtInfo) for k,v in pairs(self.data.ext.userExtInfo) do local viewId = app.room:getViewIdByUserId(tonumber(k)) local effect if index == playerNum then effect = MJAnimationCompnent.CreateLoBoLabel(v.luoboCount,callback) else effect = MJAnimationCompnent.CreateLoBoLabel(v.luoboCount) end local pos = self.playerHandCards[viewId]:getAnimationPostion() if viewId==MJDefine.PlayerViewType.My then effect:setPosition(pos.x+130,pos.y-60) elseif viewId==MJDefine.PlayerViewType.Left then effect:setPosition(pos.x-20-30,pos.y-70) elseif viewId==MJDefine.PlayerViewType.Right then effect:setPosition(pos.x+10-30,pos.y-70) elseif viewId==MJDefine.PlayerViewType.Top then effect:setPosition(pos.x+130,pos.y+10-50) end self.ui.Items.Layout_Effect_luobo_Lable:addChild(effect) index = index + 1 end else callback() end end local function luoboCallBack() if luoboCards and #luoboCards>0 then local luoNum = #luoboCards --加一个黑底 local layer = cc.LayerColor:create(cc.c4b(0,0,0,120)) layer:setAnchorPoint(cc.p(0.5,0.5)) layer:ignoreAnchorPointForPosition(false) layer:setPosition(cc.p(getWinSize().width/2,getWinSize().height/2)) self.ui.Items.Layout_Effect_luobo:addChild(layer) for i,v in pairs(luoboCards) do local effect if i == #luoboCards then effect = MJAnimationCompnent.CreateLoBoEffect(v,self.desktopType,luoboNumCallBack) else effect = MJAnimationCompnent.CreateLoBoEffect(v,self.desktopType) end if MJDefine.LuoBoPos[luoNum] and MJDefine.LuoBoPos[luoNum][i] then effect:setPosition(MJDefine.LuoBoPos[luoNum][i]) self.ui.Items.Layout_Effect_luobo:addChild(effect) end end else callback() end end luoboCallBack() end --出牌成功 function xueliuRoomReplayView:onOutCardSuccess(data) logE("xueliuRoomReplayView:onOutCardSuccess(), response = ", table.tostring(data.response)) --[[ -- 出牌用户id , defVar("nOutCardUserId", VT_Int, -1) -- 出的牌 , defVar("byOutCard", VT_UChar, -1) -- 可以的操作ma , defVar("mainOpCode", VT_Short, -1) -- 玩家操作 , defVar("operations", VT_Vector(ChuPaiPlayerOperation), {})--]] local function runOnOutCardSuccess(onEnd) log("2000000000-xueliuRoomReplayView - runOnOutCardSuccess---------") local viewId = app.room:getViewIdByUserId(data.response.nUserId) local card= data.response.card local operates=data.response.operates local typr = operates.opType if operates and table.nums(operates)>0 then self.operates = operates else self.operates = {} end local function callback() self.playerHandCards[MJDefine.MyViewId]:showOperate(operates,card) if onEnd then onEnd() end end -- self.lastOutCard = card self.lastOutViewId = viewId local player = app.room.roomInfo.memberList[data.response.nUserId] if self.playerHandCards[viewId] then --and (viewId~=MJDefine.MyViewId or player.isBaoPai == 1) self.playerHandCards[viewId]:onOutCard(card,callback)--onOutCard(data.response,true) app.room:dispatchEvent({name = MJDefine.MJEvent.OutCardFalg, value=card ,viewId=viewId}) if viewId==MJDefine.MyViewId then self.playerHandCards[viewId]:resetHandCards() self.playerHandCards[viewId]:setTing(false) end else callback() end end log("2000000000-xueliuRoomReplayView - addCallBack(runOnOutCardSuccess)") self:addCallBack(runOnOutCardSuccess) end function xueliuRoomReplayView:onGameEnd(data) local function runGameXiaoJuResponse(onEnd) local function callback() --self:endReplay() --:showXiaoJuView() if onEnd then onEnd() end end local roomInfo = app.room.roomInfo local hutype=self.data.ext.huTypes local hucard=data.card self.direcionView:stopAllActions() -- local resultInfo=json.decode(roomInfo.strResultInfo) --所有胡牌的人 考虑抢杠胡的问题 --所有胡牌的人 考虑抢杠胡的问题 local viewIds={} local failViewId=0 for k,v in pairs(roomInfo.memberList) do local viewId = app.room:getViewIdByUserId(v.nUserId) if v.result==MJDefine.MJGameResultType.Win then table.insert(viewIds,viewId) --处理掉huCard, 不加入手牌 --播放音效 if viewId==MJDefine.MyViewId then MJSound.PlayWinGame() end elseif v.result==MJDefine.MJGameResultType.Fail then failViewId=viewId if viewId==MJDefine.MyViewId then MJSound.PlayLoseGame() end end end self:showOpenCard() local function callback() self:showXiaoJuView() if onEnd then onEnd() end end if #viewIds>0 then for k,viewId in pairs(viewIds) do local effect local resultInfo = roomInfo.resultInfos local userId = app.room:getUserIdByViewId(viewId) if k == #viewIds then --只有最后播放胡牌动画的回调一次就可以了 if resultInfo[userId].result == MJDefine.MJGameHuType.HU_ZIMO then effect = MJAnimationCompnent.CreateHuEffect("zimo",callback) else effect = MJAnimationCompnent.CreateHuEffect("hu",callback) end else end if effect then self:addChild(effect) effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) effect:setVisible(false) end end else if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then local effect=MJAnimationCompnent.CreateLiuJuEffect(callback) self:addChild(effect) else callback() end end end log("2000000000-MJRoomView - addCallBack(runGameXiaoJuResponse)" ) self:addCallBack(runGameXiaoJuResponse); end --换牌完成 function xueliuRoomReplayView:onHuanPaiDone(data) if not data.huanPaiInfo or type(data.huanPaiInfo) ~= 'table' then return end for i,v in pairs(data.huanPaiInfo) do local viewId=app.room:getViewIdByUserId(v.nUserId) -- self.playerHandCards[viewId]:createSwapCards(v.cards) self:createSwapCards(viewId, v.cards, true) -- 使用新的创建交换牌方式 for i,v in pairs(v.cards) do self.playerHandCards[viewId]:onGetCard(nil,tonumber(v),true) end local action = cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function() -- self.playerHandCards[viewId]:deleteSwapCards() self:removeAllSwapCard() end)) self.playerHandCards[viewId]:resetHandCards() self:runAction(action) end end --开始换牌 function xueliuRoomReplayView:onHuanPai(data) if not data.huanPaiInfo or type(data.huanPaiInfo) ~= 'table' then return end for i,v in pairs(data.huanPaiInfo) do local viewId=app.room:getViewIdByUserId(v.nUserId) -- self.playerHandCards[viewId]:createSwapCards(v.cards) self:createSwapCards(viewId, v.cards, true) -- 使用新的创建交换牌方式 local tselCards = {} for j,k in pairs(v.cards) do table.insert(tselCards,{card = k}) end self.playerHandCards[viewId]:removeHandCard(tselCards) self.playerHandCards[viewId]:resetHandCards() local action = cc.Sequence:create(cc.DelayTime:create(1),cc.CallFunc:create(function() -- self.playerHandCards[viewId]:deleteSwapCards() self:removeAllSwapCard() end)) self:runAction(action) end end function xueliuRoomReplayView:setIsReplay() self._isReplay = true end --显示换三张 function xueliuRoomReplayView:initSwapLayer()--是否已经操作过 local ui=loadUI("mj_xueliu/res/ui_fangjian/mj_xueliu_swap_card.ui") self.ui.Items.Layout_Player:addChild(ui) self.swapCard=ui self.swapCard.Items.Layout_Content:setVisible(false) end function xueliuRoomReplayView:removeAllSwapCard() self.swapCard.Items.Layout_Swap_MJ:removeAllChildren() end function xueliuRoomReplayView:onButtonFlowClicked () local response = {}; --local roomInfo = app.room.roomInfo; local scoreIndex = self.scoreIndex local scoreInfo = self.scoreInfoDatas or {}; response.liushuiDetail = scoreInfo; response.isReplay = true; local totalScore = 0; if #scoreInfo ~= 0 then totalScore = self.scoreInfo[scoreIndex].totalScore end response.totalScore = totalScore; --xueliuRoomReplayView.super.onEventBtnShowFlowViewClicked(self, {response = response}); local flowView = MJFramework.MJImport("mj_xueliu.luaScript.Views.Compnent.xueliuFlowView"):new(response); self:addChild(flowView); end function xueliuRoomReplayView:updateScoreInfo(opType, opCard) logD("xueliuRoomReplayView:updateScoreInfo", opType, opCard) if not (self.scoreInfo and #self.scoreInfo> 0) then return end for index = self.scoreIndex or 1, #self.scoreInfo do local info = self.scoreInfo[index]; if info.opType == opType and info.card == opCard then local scoreInfo = self.scoreInfoDatas or {}; table.insert(scoreInfo, info); --app.room.roomInfo:setScoreInfo(scoreInfo); self.scoreInfoDatas = scoreInfo self.scoreIndex = #self.scoreInfoDatas; break; end end end --播放一条战报 function xueliuRoomReplayView:playNextReport() xueliuRoomReplayView.super.playNextReport(self); if self.reportIndex > #self.reports then if self.reportIndex >= #self.reports + 1 then--防止最后一步没有播放 self:stopAllActions() end self.scoreIndex = #self.scoreInfo self.scoreInfoDatas = self.scoreInfo end end --获取类型 function xueliuRoomReplayView:parsetOpType(type) local operateType ={ [0] = 0, [0x01] = MJDefine.MJOperateType.OPREATE_ZIMOHU, [0x02] = MJDefine.MJOperateType.OPREATE_DIANPAOHU, [0x03] = MJDefine.MJOperateType.OPREATE_ANGANG, [0x04] = MJDefine.MJOperateType.OPREATE_ZHIGANG, [0x05] = MJDefine.MJOperateType.OPREATE_BAGANG, [0x06] = MJDefine.MJOperateType.OPREATE_DIANPAOHU, [0x07] = 0,--退还杠 最后结束才有 [0x09] = 0,--大叫 最后结束才有 [0x10] = 0--花猪 最后结束才有 } local opType = operateType[type] return opType end return xueliuRoomReplayView