require("luaScript.Views.Room.RoomFunctions") 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 MJHandCardView=MJFramework.MJImport("mj.luaScript.Views.Game.MJHandCardView") local MJRoomXiaoJuView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomXiaoJuView") local MJRoomDaJuView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDaJuView") local MJRoomDismissView=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDismissView") local MJRoomDirection=MJFramework.MJImport("mj.luaScript.Views.Room.MJRoomDirection") local MJMessage=MJFramework.MJImport("mj.luaScript.Protocol.MJMessage") local MJ=MJFramework.MJImport("mj.luaScript.Views.Game.MJ") local MJWanFa=MJFramework.ImportWanFa("luaScript.SubGameDefine.MaJiang.MJWanFa") local MJAnimationCompnent=MJFramework.MJImport("mj.luaScript.Views.Compnent.MJAnimationCompnent") local MJFunction=MJFramework.MJImport("mj.luaScript.MJFunction") local MJSound = MJFramework.MJImport("mj.luaScript.MJSound") local MJRoomView = MJFramework.MJFrameworkClassImprot("mj.luaScript.Views.Room.MJRoomView") local zigong7zRoomView = class("zigong7zRoomView", cc.UIView) local zhongNiaoTime = 1.33 local HU_EFFECT_TAG = 100 -- 组件相关 local GPS_Component = 'mj_zigong7z.luaScript.Views.Component.zigong7z_GPS_Component' local Single_Component = 'mj_zigong7z.luaScript.Views.Component.zigong7z_Single_Component' local RoomInfo_Component = 'mj_zigong7z.luaScript.Views.Component.zigong7z_RoomHeadInfo_Component' local LastCardTip_Component = 'mj_zigong7z.luaScript.Views.Component.zigong7z_LastCardTip_Component' local Reconnect_Component = 'mj_zigong7z.luaScript.Views.Component.zigong7z_Reconnect_Component' local Operate_Component = 'mj_zigong7z.luaScript.Views.Component.zigong7z_Operate_Component' function zigong7zRoomView:ctor() zigong7zRoomView.super.ctor(self) -- value self.ui = nil self._gps = nil self._singleComponent = nil self._roomHeadInfo = nil self._lastCardTip = nil self._ruleView = nil self._reconnnet = nil self._operateComponent = nil self.playerHandCards={} -- 玩家牌局面板 self.operates = {} if app.systemSetting.info.viewType == MJDefine.DesktopType.TwoD then -- viewType只保存2d 3d类型 mj_desktop_2d_mjType保存2d麻将类型 local value = loadUserInfo("mj_desktop_2d_mjType") local value = loadUserInfo("mj_zg_desktop_2d_mjType") if value=="" or not value then value = MJDefine.DesktopType.ThreeD saveUserInfo("mj_desktop_2d_mjType", value) saveUserInfo("mj_zg_desktop_2d_mjType", value) end self.desktopType = value else self.desktopType = app.systemSetting.info.viewType end cc.Director:getInstance():getEventDispatcher():addEventListenerWithFixedPriority( cc.EventListenerCustom:create("applicationScreenSizeChanged" , handler(self, self.applicationScreenSizeChanged)), 1 ) MJDefine.MJConfig = MJDefine.loadMJConfig(self.desktopType) end -- 加载ui function zigong7zRoomView:loadUi() local ui = loadUI("mj_zigong7z/res/ui_fangjian/mj_zigong_roomView.ui") self.ui = ui self:addChild(ui) end function zigong7zRoomView:onEnter() zigong7zRoomView.super.onEnter(self) self:loadUi() -- 加载UI self:initAllComponent() -- 加载所有组件 self:loadTextureCache() --加载纹理缓存 self:defaultState() -- 默认状态 self:bindAllEvent() --监听事件 self:onGameReconnection() -- 初始化重连(如果有重连则会回复重连状态) self:initDefaultValue() self:startGame() -- 游戏开始 end -- 初始化所有组件 function zigong7zRoomView:initAllComponent() self:initRoomHeadInfo() -- 初始化桌面信息面板 self:initGpsComponent() -- 初始化GPS组件 self:initSingleComponent() -- 初始化电池和信号组件 self:initDirectionComponent() -- 初始化方位组件 self:initToolComponent() -- 初始化工具组件 self:initPlayerComponent() -- 初始化玩家组件 self:initRuleComponent() -- 初始化规则面板 self:initLastCardTipsComponent() -- 初始化剩余牌提示面板 self:initOperateComponent() -- 初始化操作界面组件 self:initReconnectComponent() -- 初始化重连组件 self:initDefaultView() --初始化默认视图 self:initPlayGameAgain() -- 初始化大解散再来一局按钮 self:checkCanDismiss() -- 检查是否可以解散房间 end -- 初始化默认值 function zigong7zRoomView:initDefaultValue() self:setCheckDefault() -- 设置是否贴鬼杠和是否自动对齐 self:changeWaterMark() -- 水印 MJSound.PlayGameBGM() -- 启动BGM self:doSound() -- 设置语言 end -- 初始化信息面板 function zigong7zRoomView:initRoomHeadInfo() local roomHeadInfo = require(RoomInfo_Component):new() self:addChild(roomHeadInfo) self._roomHeadInfo = roomHeadInfo end -- 初始化GPS组件 function zigong7zRoomView:initGpsComponent() if self._isReplay then return end local gps = require(GPS_Component):new() self:addChild(gps) self._gps = gps end -- 初始化信号和电量组件 function zigong7zRoomView:initSingleComponent() local single = require(Single_Component):new() self:addChild(single) self._singleComponent = single end -- 初始化方位组件 function zigong7zRoomView:initDirectionComponent() self.direcionView = MJRoomDirection:new(self.desktopType) self.ui.Items.Layout_Player:addChild(self.direcionView) self.direcionView:setVisible(false) -- 隐藏中间内容 end -- 初始化剩余牌提示面板 function zigong7zRoomView:initLastCardTipsComponent() self._lastCardTip = require(LastCardTip_Component):new() self.ui.Items.Layout_Player:addChild(self._lastCardTip) self:setLastCardTipVisible() end -- 初始化操作界面组件 function zigong7zRoomView:initOperateComponent() self._operateComponent = require(Operate_Component):new(self, self.desktopType) self:addChild(self._operateComponent) end -- 初始化重连组件 function zigong7zRoomView:initReconnectComponent() local reconnect = import(Reconnect_Component):new(self) self._reconnect = reconnect end -- 初始化工具组件 function zigong7zRoomView:initToolComponent() self.toolView = MJRoomToolView:new() self:addChild(self.toolView) end -- 初始化玩家组件 function zigong7zRoomView:initPlayerComponent() self.playerView = MJRoomPlayerView:new() self.toolView:addLayoutToChatLayer(self.playerView) end -- 默认试图 function zigong7zRoomView:initDefaultView() self:startSysTime() self:onChangeChatEnable() -- 聊天 self:changeGameBg() -- 背景 self:initGameButton() --初始化游戏事件按钮 end -- 系统时间启动 function zigong7zRoomView:startSysTime() if self._roomHeadInfo then self._roomHeadInfo:setTime(MJFunction.getTimeString()) end if not self.Time then self.Time = cc.Director:getInstance():getScheduler():scheduleScriptFunc(function() if self._roomHeadInfo then self._roomHeadInfo:setTime(MJFunction.getTimeString()) end end,1.0,false) end end -- 初始化规则弹框 function zigong7zRoomView:initRuleComponent() if self._ruleView then return end local RuleViewClass = MJFramework.MJImport("mj.luaScript.Views.Room.MJRuleViewVertical") local ruleView = RuleViewClass:new() self:addChild(ruleView); local roomInfo = app.room.roomInfo or {} local ruleList = MJWanFa.getWanFaInfoTab(roomInfo.strGameInfo, roomInfo.nTotalGameNum) ruleView:setRuleList(ruleList or {}) ruleView:setBtnRuleOffset(60, nil); self._ruleView = ruleView end function zigong7zRoomView:onExit() zigong7zRoomView.super.onExit(self) if self.Time then cc.Director:getInstance():getScheduler():unscheduleScriptEntry(self.Time) end if self.taiPaiTimer then cc.Director:getInstance():getScheduler():unscheduleScriptEntry(self.taiPaiTimer) end if self._singleComponent then self._singleComponent:exit() end app.room:dispatchEvent({name=MJDefine.MJEvent.DismissClose}); stopBGMusic() self:cleanCache() end -- 清理缓存 function zigong7zRoomView:cleanCache() local preload = package.loaded for k, v in pairs(package.loaded or {}) do local res1 = string.find( k, "mj.luaScript") or 0 local res2 = string.find( k, "mj_zigong7z.luaScript") or 0 if res1 > 0 or res2 > 0 then package.loaded[k] = nil end end end -- 设置语言 1 普通话 2 方言 function zigong7zRoomView:doSound() local cacheLan = "mj_language"..(MJDefine.GameID or app.gameId) local defaultValue = tonumber(loadUserInfo(cacheLan)) or 2 saveUserInfo(cacheLan,defaultValue) MJSound.setSoundType(defaultValue) end function zigong7zRoomView:setCheckDefault() MJDefine.isAutomatic = true end -- 一键截屏 function zigong7zRoomView:onClickButtonShot( sender ) playBtnEffect() showScreenShot() end --隐藏俱乐部 function zigong7zRoomView:hideClub() -- self.ui.Items.Button_Club:setVisible(false) if self.clubView and not tolua.isnull(self.clubView) then self.clubView:removeFromParent() self.clubView=nil end end --更换桌布(同维度) function zigong7zRoomView:changeGameBg(isUpdateViewType) if isUpdateViewType then if app.systemSetting.info.viewType == MJDefine.DesktopType.TwoD then --更新2D麻将类型 金色还是绿色 local value = loadUserInfo("mj_zg_desktop_2d_mjType") --or MJDefine.DesktopType.TwoD if value=="" or not value then value = MJDefine.DesktopType.TwoD saveUserInfo("mj_zg_desktop_2d_mjType", value) end logD("changeGameBg value:"..value) self.desktopType = value else self.desktopType = app.systemSetting.info.viewType end self:loadTextureCache() logD("changeGameBg"..self.desktopType) end local defaultValue = tonumber(loadUserInfo("zigong_mj_desktop_group")) or 1 local bgData = MJDefine.CHANGE_GAME_BG[defaultValue] if self.desktopType==MJDefine.DesktopType.TwoD or self.desktopType==MJDefine.DesktopType.TwoDGold then self.ui.Items.ImageView_bg:loadTexture(bgData['2d']) else self.ui.Items.ImageView_bg:loadTexture(bgData['3d']) end end function zigong7zRoomView:defaultState() --队列初始化 self.callbackQueue = {} self.callbackRunning = false self.playerView:setOffLineVisible(false) self.playerView:setPlayerVisible(false) if self.waitOperates and #self.waitOperates>0 then for k,v in pairs(self.waitOperates) do v:removeFromParent() end end self.waitOperates = {} self:resetGame() end function zigong7zRoomView:loadTextureCache() cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("res/ui/zy_fangjian/RoomMenu/RoomMenu2.plist") local mjRes = MJDefine.MJRes[self.desktopType] if mjRes then for k,v in pairs(mjRes) do cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile(v) end end loadSpriteFrameFile("mj_zigong7z/res/zy_fangjian/zigong_operateEffect.plist") loadSpriteFrameFile("mj_zigong7z/res/zy_fangjian/effect_guangxiao.plist") loadSpriteFrameFile("mj_zigong7z/res/zy_fangjian/effect_guafeng.plist") loadSpriteFrameFile("mj_zigong7z/res/zy_fangjian/effect_xiayu.plist") end -- 初始化游戏按钮 function zigong7zRoomView:initGameButton() --点击空白 self.ui.Items.Layout_Touch:registerClick(nil,function() -- 隐藏个人信息 self.playerView:removePlayerInfoView() self.toolView:setMenuVisible(false) self._operateComponent:hideOperateItem() self.toolView:hideRule() self:setTingCardViewVisible(false); end) --隐藏听牌模板 self.ui.Items.Item_Ting:setVisible(false) self.ui.Items.Button_Ting_Info:setVisible(false); self.ui.Items.Button_Ting_Info:registerClick(handler(self, self.onBtnTingInfoClicked)) -- 聊天按钮 -- self.toolView:setButtonFacePos(cc.p(1208*g_radio_x,(322+25)*g_radio_y)) -- self.toolView:setButtonVoicePos(cc.p(1208*g_radio_x,(237+30)*g_radio_y)) end --通知庄家可以爆牌 function zigong7zRoomView:onBankerBaoPai(data) local function runBankerBaoPai(onEnd) local myUserId = app.room:getMyUserId() local viewId = app.room:getViewIdByUserId(myUserId) if data.response.nUserId == myUserId then self:showBaoJiao() self.playerHandCards[viewId]:setOutCardEnable(false) end if onEnd then onEnd() end end self:addCallBack(runBankerBaoPai) end --广播玩家爆牌 function zigong7zRoomView:onBaoPai(data) if data.response.isBaoPai == 1 then local effect=MJAnimationCompnent.CreateBaoEffect() local viewId = app.room:getViewIdByUserId(data.response.nUserId) local myUserId = app.room:getMyUserId() local userInfo=app.room:getUserInfoByViewId(viewId) --爆牌音效 MJSound.PlayBaoSound(userInfo.sex) if effect then self.ui.Items.Layout_Player:addChild(effect) effect:setLocalZOrder(1000) effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) end if myUserId == data.response.nUserId then self.playerHandCards[viewId]:lockHandCard(true) -- self.playerHandCards[viewId]:setOutCardEnable(false) else --self.playerHandCards[viewId]:setOutCardEnable(true) end self.playerView:playBaoAnim(viewId) elseif data.response.isBaoPai == 2 then--博自摸 local effect=MJAnimationCompnent.CreateBoZiMoEffect() local viewId = app.room:getViewIdByUserId(data.response.nUserId) local myUserId = app.room:getMyUserId() local userInfo=app.room:getUserInfoByViewId(viewId) --爆牌音效 MJSound.PlayBaoSound(userInfo.sex) if effect then self.ui.Items.Layout_Player:addChild(effect) effect:setLocalZOrder(1000) effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) end if myUserId == data.response.nUserId then self.playerHandCards[viewId]:lockHandCard(true) else end self.playerView:showBoZiMo(viewId,true) end if app.room:getMyUserId() == data.response.nUserId then self:hideBaoJiao() if (data.response.isBaoPai == 1 or data.response.isBaoPai == 2) then local gameInfo =json.decode(app.room.roomInfo.strGameInfo); if gameInfo.tingpai > 0 then self.ui.Items.Button_Ting_Info:setVisible(true); app.room.roomInfo.memberList[data.response.nUserId].nTingStatus = MJDefine.MJTingStatus.Ting; end end end end function zigong7zRoomView:onGameSendCardResponse() --发牌的时候清除桌面上的飘 self.ui.Items.Layout_Effect_luobo:removeAllChildren() local function runGameSendCardResponse(onEnd) log("2000000000-zigong7zRoomView - runGameSendCardResponse()" ) --走过重连标志值为false self.isRunGameReconnection = false self:hidePiao() local myUserId = app.room:getMyUserId() for k,v in pairs(app.room.roomInfo.memberList) do local viewId = app.room:getViewIdByUserId(v.nUserId) if self.playerHandCards[viewId] then self.playerHandCards[viewId]:createHandCards(v.handCards) self.playerHandCards[viewId]:resetHandCards() end if v.isBaoPai == 1 and myUserId == v.nUserId then --self.playerHandCards[viewId]:showBaoPai() self:showBaoJiao() end end -- local effect=MJAnimationCompnent.CreateGameStart() -- self.ui.Items.Layout_Player:addChild(effect,5) -- MJSound.PlayStartGame() MJAnimationCompnent.CreateStartSendCards(self.playerHandCards,onEnd) -- if onEnd then -- onEnd() -- end self.toolView:showTuoGuan(app.room.roomInfo.hosting==1) end log("2000000000-zigong7zRoomView - addCallBack(runGameSendCardResponse)" ) self:addCallBack(runGameSendCardResponse); end function zigong7zRoomView:onUserReadyResponse(response) -- self:setPlayerVisible(false) local uids = {} for k,v in pairs(app.room.roomInfo.memberList) do local nSeatShowId = app.room:getViewIdByUserId(v.nUserId) self.playerView:setReadyStatus(nSeatShowId,v.nPlayerFlag == 1) self.playerView:updatePlayerInfo(nSeatShowId) uids[v.nUserId] = true end if self.messageView then self.messageView:setPlayerUids(uids) end local nUserId = app.room:getMyUserId()--app.user.loginInfo.uid if response and response.nUserId==nUserId then self.toolView:updateButton(true) self:resetGame() else self.toolView:updateButton() end if response and response.nUserId==nUserId then self:resetGame() end local myUserId = app.room:getMyUserId() if response and response.nUserId==myUserId then self.playerView:clearBao() self.playerView:clearAllPiao() self.playerView:clearAllBoZiMo() app.room.roomInfo.luoboCards = nil -- local roomInfo = app.room.roomInfo -- for k,v in pairs(roomInfo.memberList) do -- self.ui.Items.Layout_Player:removeChildByTag(HU_EFFECT_TAG) -- end end self.ui.Items.Button_Ting_Info:setVisible(false); end -- 广播桌子上所有玩家庄家起手操作 这里其实是发牌 function zigong7zRoomView:onBankerOutCard(data) --[[ -- 庄家uid , defVar("nUserId", VT_Int, 0) -- 庄家操作类型 , defVar("mainOpCode", VT_Short, 0) --庄家是否需要出牌0不需要 1:需要 , defVar("IsShouldOutCard", VT_UChar, 0)--]] local function runOnBankerOutCard(onEnd) logE("zigong7zRoomView onBankerOutCard :"..table.tostring(data.response)) -- if not data.response.nUserId then -- showTooltip("庄家起手操作nUserId is not exist") -- end local viewId = app.room:getViewIdByUserId(data.response.nUserId) local card= data.response.card local operates=data.response.operates local nSeatId=data.response.nSeatId -- app.room.roomInfo.outCardUserId = data.response.nUserId if self.playerHandCards[viewId] then self.playerHandCards[viewId]:onGetCard(operates,card) end --先清除所有操作按钮 self._operateComponent:hideOperateItem() self._operateComponent:showOperate(operates,card,true) if viewId == MJDefine.MyViewId then self.ui.Items.Button_Ting_Info:setVisible(false) if operates and table.nums(operates)>0 then self.operates = operates else self.operates = {} end if self.playerHandCards[MJDefine.MyViewId] then self.playerHandCards[MJDefine.MyViewId]:setTing(false) local player = app.room.roomInfo.memberList[data.response.nUserId] if player and (player.isBaoPai==1 or player.isBaoPai == 2) then self.playerHandCards[MJDefine.MyViewId]:lockHandCard(true) end end app.room:dispatchEvent({name = MJDefine.MJEvent.SelectCard}) app.room:dispatchEvent({name = MJDefine.MJEvent.PushTing}) -- app.room:dispatchEvent({name = MJDefine.MJEvent.ShowTing}) local curHandCards = self.playerHandCards[viewId]:getHandCardsNum() if curHandCards%3 ~= 2 then--抓了牌之后,手牌不正确,主动重连一下 app.room.roomInfo.requestGetTableInfo = true self.ui:sendMsg(app.room, MJDefine.MJEvent.GetTableInfo); end end self:showGuideTip(viewId == MJDefine.MyViewId) -- local myUserId = app.room:getMyUserId() -- if data.response.nUserId == myUserId then -- if self.playerHandCards[MJDefine.MyViewId] then -- self.playerHandCards[MJDefine.MyViewId]:pushTing() -- end -- end self:updateGameNums() self.direcionView:updateDirection(nSeatId) if onEnd then onEnd() end end log("2000000000-zigong7zRoomView - addCallBack(runOnBankerOutCard)") self:addCallBack(runOnBankerOutCard); end function zigong7zRoomView:onTurnOutCard(data) local function runOnTurnOutCard(onEnd) logE("zigong7zRoomView:runOnOutCard(), response = ", table.tostring(data.response)) log("2000000000-MJRoomView - runOnOutCard") if app.room.roomInfo.lastOutViewId~=MJDefine.MyViewId then self.playerHandCards[MJDefine.MyViewId]:setOutCardEnable(true) end -- local viewId = app.room:getViewIdByUserId(data.response.nUserId) -- local card= data.response.card -- if self.playerHandCards[viewId] then -- self.playerHandCards[viewId]:createOutCards(card) -- end if onEnd then onEnd() end end log("2000000000-MJRoomView - addCallBack(runOnTurnOutCard)") self:addCallBack(runOnTurnOutCard) end --出牌成功 function zigong7zRoomView:onOutCardSuccess(data) logE("zigong7zRoomView:onOutCardSuccess(), response = ", table.tostring(data.response)) local function runOnOutCardSuccess(onEnd) log("2000000000-zigong7zRoomView - runOnOutCardSuccess---------") -- app.room.roomInfo.outCardUserId = data.response.nUserId 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() -- app.room.roomInfo.lastOutViewId = nil self._operateComponent:showOperate(operates,card) if onEnd then onEnd() end end -- self.lastOutCard = card if self.playerHandCards[viewId] then --(viewId~=MJDefine.MyViewId or player.isBaoPai == 1) and app.room.roomInfo.lastOutViewId~=MJDefine.MyViewId if viewId==MJDefine.MyViewId then local player = app.room.roomInfo.memberList[data.response.nUserId] self.playerHandCards[viewId]:setTing(false) local curHandCards = self.playerHandCards[viewId]:getHandCardsNum() or 0 if ((player.isBaoPai==1 or player.isBaoPai==2) and app.room.roomInfo.lastOutViewId~=MJDefine.MyViewId) or app.room.roomInfo.hosting == 1 then --点击爆牌的时候 前端已经打出牌 要判断上次出牌的人是不是自己 避免重复出牌 self.playerHandCards[viewId]:onOutCard(card,callback) --音效 local userInfo=app.room:getUserInfoByViewId(viewId) if userInfo then MJSound.PlayMJSound(userInfo.sex,card) end elseif self.needDeleteOutCard and true == self.needDeleteOutCard then self.needDeleteOutCard = nil uploadLogs("mjduopai") self.playerHandCards[viewId]:onOutCard(card,callback) elseif self.isRunGameReconnection and true ==self.isRunGameReconnection and curHandCards%3 == 2 then--重连后,手牌是可以出牌的,则删除一张牌 self.playerHandCards[viewId]:onOutCard(card,callback) else callback() end self.isRunGameReconnection = false local gameInfo = json.decode(app.room.roomInfo.strGameInfo); if gameInfo.tingpai > 0 then self._isOutCardTingCheck = true; self.ui:sendMsg(app.room,MJDefine.MJEvent.Ting) end self:setGuideView(false) else self.playerHandCards[viewId]:onOutCard(card,callback) end app.room:dispatchEvent({name = MJDefine.MJEvent.OutCardFalg, value=card ,viewId=viewId}) else callback() end app.room.roomInfo.lastOutViewId = viewId end log("2000000000-zigong7zRoomView - addCallBack(runOnOutCardSuccess)") self:addCallBack(runOnOutCardSuccess) end --已经发送了过操作,此时就算再勾选贴鬼碰,也不会显示操作 function zigong7zRoomView:onSendGuo() --发牌重置,主要用于贴鬼碰/杠 MJDefine.isSendGuo = false self.operates = {} end -- 操作成功 function zigong7zRoomView:onOperationCodeSuccess(data) local function runOnOperationSuccess(onEnd) local response = data.response local nUserId = response.nUserId local opType = response.opType local opCard = response.opCard local bIsOutCard = response.isNeedOutCard > 0 local fromSeatId = response.fromSeatId local redNum = response.redNum local viewId = app.room:getViewIdByUserId(nUserId) local fromViewId = app.room:getViewIdBySeatId(fromSeatId) local opSeatId = app.room:getSeatIdByViewId(viewId) local fromUserId = app.room:getUserIdBySeatId(fromSeatId) if self.playerHandCards[viewId] then --组合一下牌 local groups={ self:getChangeGruopDatas({opType=opType, opCard=opCard, redNum = redNum, targetSeatId=opSeatId, opUserId=fromUserId}) } --删除手中对应的牌 local deleteCards for k,v in pairs(groups) do if v.showType==MJDefine.MJGroupType.Peng then self.playerHandCards[viewId]:removeHandCardByNum(opCard,2,v.redNum) elseif v.showType==MJDefine.MJGroupType.Chi then --TODO:吃的牌删除两张 elseif v.showType==MJDefine.MJGroupType.AnGang or v.showType==MJDefine.MJGroupType.MAnGang then self.playerHandCards[viewId]:removeHandCardByNum(opCard,4,v.redNum) else if opType==MJDefine.MJOperateType.OPREATE_BAGANG then self.playerHandCards[viewId]:removeHandCardByNum(opCard,1,v.redNum) else self.playerHandCards[viewId]:removeHandCardByNum(opCard,3,v.redNum) end end end --删除出去的牌 遍历哪些操作需要删除牌 for k,v in pairs(MJDefine.MJOperateNeedRemoveCard) do if v==opType then self.playerHandCards[fromViewId]:removeOutCard(opCard) break end end if opType==MJDefine.MJOperateType.OPREATE_BAGANG then self.playerHandCards[viewId]:buGang(opCard,redNum) else self.playerHandCards[viewId]:createGroupCards(groups)--创建显示的牌 end self.playerHandCards[viewId]:resetHandCards() self._operateComponent:hideOperate() self.playerHandCards[viewId]:setOutCardEnable(bIsOutCard) self:showGuideTip(viewId == MJDefine.MyViewId) self.direcionView:updateDirection(app.room:getSeatIdByViewId(viewId)) end local function guafengxiayuEffect() local effect if (opType==MJDefine.MJOperateType.OPREATE_ZHIGANG) or (opType==MJDefine.MJOperateType.OPREATE_BAGANG) or (opType==MJDefine.MJOperateType.OPREATE_MINGGANG) then effect=MJAnimationCompnent.createGuaFengEffect() MJSound.PlayWindSound() elseif (opType==MJDefine.MJOperateType.OPREATE_ANGANG) then effect=MJAnimationCompnent.createXiaYuEffect() MJSound.PlayRainSound() end if effect then self.ui.Items.Layout_Player:addChild(effect) effect:setLocalZOrder(1000) effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) end end if (opType==MJDefine.MJOperateType.OPREATE_ZHIGANG) or (opType==MJDefine.MJOperateType.OPREATE_BAGANG) or (opType==MJDefine.MJOperateType.OPREATE_MINGGANG) or (opType==MJDefine.MJOperateType.OPREATE_ANGANG) then guafengxiayuEffect() else --播放动画 local effect=MJAnimationCompnent.CreateOperareEffect(opType)--,onEnd) if effect then self.ui.Items.Layout_Player:addChild(effect) effect:setLocalZOrder(1000) effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) -- else -- if onEnd then -- onEnd() -- end end end --音效 local userInfo=app.room:getUserInfo(nUserId) if userInfo then MJSound.PlayOperateSound(userInfo.sex,opType) end if viewId == MJDefine.MyViewId then self.playerHandCards[MJDefine.MyViewId]:setTing(false) self:setTingCardViewVisible(false) self.ui.Items.Button_Ting_Info:setVisible(false) self.operates={} end --删除等待操作的显示 if self.waitOperates and #self.waitOperates>0 then for k,v in pairs(self.waitOperates) do v:removeFromParent() end self.waitOperates={} end --[[if viewId == MJDefine.MyViewId and opType==MJDefine.MJOperateType.OPREATE_PENG then local cards = {opCard} self.playerHandCards[viewId]:cardEnabled(cards, true) end--]] -- 取消操作按钮 self._operateComponent:hideOperate() -- 操作完后,隐藏手势 self:showGuideTip(false) if onEnd then onEnd() end end self:addCallBack(runOnOperationSuccess) end function zigong7zRoomView:test() self.playerHandCards={} self.playerHandCards[MJDefine.MyViewId] = MJHandCardView:new(MJDefine.MyViewId) self:addChild(self.playerHandCards[MJDefine.MyViewId]) self.playerView = MJRoomPlayerView:new() self:addChild(self.playerView) end --飘状态停止 function zigong7zRoomView:stopDirection() self.direcionView:stopAllActions() self.direcionView.ui.Items.ImageView_Dir_Down:setVisible(false) self.direcionView.ui.Items.ImageView_Dir_Up:setVisible(false) self.direcionView.ui.Items.ImageView_Dir_Left:setVisible(false) self.direcionView.ui.Items.ImageView_Dir_Right:setVisible(false) self.direcionView.ui.Items.Text_Time:setString(string.format("%02d",0)) self.direcionView.ui.Items.Text_Leave_Card_Num:setText("72") end function zigong7zRoomView:onGameReconnection() if self._isReplay then return end --更新房间基础数据 local roomInfo = app.room.roomInfo; self:updateRoomBaseData() self.toolView:updateButton() --显示离线状态 for k,v in pairs(roomInfo.memberList) do local viewId = app.room:getViewIdByUserId(k) local nOffLineState = v.nOnlineStatus self.playerView:setPlayerOffLineVisible(nOffLineState ~= MJDefine.PlayerOnlineStatus.Online,viewId) end --断线重连 if roomInfo.nGameStartCount > 0 then if self._fastRequestView then self._fastRequestView:removeSelf() self._fastRequestView = nil end local function runOnGameReconnection(onEnd) self._reconnect:checkCode(onEnd) end log("2000000000-MJRoomView - self:addCallBack(runOnGameReconnection)" ) self:addCallBack(runOnGameReconnection) else -- 游戏未开始 if roomInfo.nStatus and roomInfo.nStatus0 then table.insert(viewIds,viewId) --处理掉huCard, 不加入手牌 --播放音效 if viewId==MJDefine.MyViewId then --MJSound.PlayWinGame() end if v.result==MJDefine.MJGameHuType.HU_DIANPAO then failViewId = app.room:getViewIdBySeatId(v.dpSeatId) end end end self:showOpenCard() for k,v in pairs(roomInfo.memberList) do local viewId = app.room:getViewIdByUserId(v.nUserId) if viewId and self.playerHandCards[viewId] then if viewId==MJDefine.MyViewId then else --倒牌 if v.huCard and v.huCard ~= 0 then self.playerHandCards[viewId]:createOpenHandCards(v.huCard) self.playerHandCards[viewId]:moveLastOpenCard() end end end end --被抢杠的人回退补杠 -- if resultInfo.hutype==MJDefine.MJHuType.QiangGangHu and roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_NORMAL then -- self.playerHandCards[failViewId]:retoreBuGang(resultInfo.hucard) -- end local function callback() self:showXiaoJuView() if onEnd then onEnd() end self.ui.Items.Layout_Effect_luobo:removeAllChildren() end local function luoboNumCallBack() local strGameInfo = json.decode(app.room.roomInfo.strGameInfo) if strGameInfo.luobonum and strGameInfo.luobonum > 0 then local index = 1 for k,v in pairs(roomInfo.memberList) do local viewId = app.room:getViewIdByUserId(v.nUserId) local effect if index == app.room.roomInfo.nMaxPlayCount then effect = MJAnimationCompnent.CreateLoBoLabel(v.luoboNum,callback) else effect = MJAnimationCompnent.CreateLoBoLabel(v.luoboNum) end local pos = self.playerHandCards[viewId]:getAnimationPostion() local offsetX, offsetY = self:getLuoBoOffset(viewId) effect:setPosition(pos.x + offsetX, pos.y + offsetY) self.ui.Items.Layout_Effect_luobo_Lable:addChild(effect) index = index + 1 end else callback() end end local luoboCards = roomInfo.luoboCards 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) local tPos = self.ui.Items.ImageView_Logo:getPosition() local tLuoBoPos = { [1] = {[1] = cc.p(tPos.x,360-40)}, [2] = {[1] = cc.p(tPos.x-50,360),[2] = cc.p(tPos.x+50,360)}, } 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(tLuoBoPos[luoNum][i]) self.ui.Items.Layout_Effect_luobo:addChild(effect) end end else self:runDelay(1.0,function() callback() end) end end if #viewIds>0 then if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_LONG_NOT_END or roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_DISBAND_GAME then self:runDelay(1.0,function() callback() end) else luoboCallBack() end local userInfo=app.room:getUserInfo(app.room:getMyUserId()) if userInfo then --拔萝卜音效 end else if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then local effect=MJAnimationCompnent.CreateLiuJuEffect(callback) self.ui.Items.Layout_Player:addChild(effect) effect:setLocalZOrder(1000) MJSound.PlayHuangZhuang() else callback() end end end self:addCallBack(runGameXiaoJuResponse); end -- 显示小局结算 function zigong7zRoomView:showXiaoJuView() self.direcionView:stopAllActions() self:setTingCardViewVisible(false) if self.xiaojuView then self.xiaojuView:removeFromParent() end local roomInfo = app.room.roomInfo self.xiaojuView = MJRoomXiaoJuView:new(self.desktopType) self:addChild(self.xiaojuView) end function zigong7zRoomView:setTingCardViewVisible(bVisible,tingCards) log("setTingCardViewVisible :"..table.tostring(tingCards)) self.ui.Items.Layout_Ting_Tip_Card_Panel:setVisible(bVisible) -- self.ui.Items.ListView_Ting:removeAllItems() -- self.ui.Items.ListView_Ting:getHBar():setVisible(false) self.ui.Items.ListView_Ting:removeAllChildren() -- self.ui.Items.Item_Ting:setVisible(false) -- self.toolView:setVisible(false) if not tingCards then return end local count = #tingCards local row = math.ceil(count/5) --几行 self.ui.Items.ListView_Ting:setSize(cc.size(670,80*row)) self.ui.Items.Layout_Ting_Tip_Card_Panel:setSize(cc.size(row>1 and 786 or count*134+116,80*row+40)) self.ui.Items.ImageView_Ting:setPositionY(self.ui.Items.Layout_Ting_Tip_Card_Panel:getContentSize().height-60) for k,v in pairs(tingCards) do local item = self.ui.Items.Item_Ting:getCopied() item:setVisible(true) local items = getUIItems(item) items.Text_Num:setString(v.count.."张") items.Text_Fan:setString(v.fanshu.."番") local mj=MJ:new(v.card,MJDefine.MJType.Stand,MJDefine.MyViewId,self.desktopType) mj:setPosition(cc.p(20,30)) mj:setScale(0.5) items.Node:addChild(mj) self.ui.Items.ListView_Ting:addChild(item) end self.ui.Items.ListView_Ting:requestDoLayout() self.ui.Items.ListView_Ting:doLayout() end --显示查听的牌 function zigong7zRoomView:setChaTingCardViewVisible(bVisible,tingCards) end function zigong7zRoomView:onTingCardStatus() local myUserId=app.user.loginInfo.uid local memberList=app.room.roomInfo.memberList if memberList[myUserId] then local nTingStatus=memberList[myUserId].nTingStatus if nTingStatus == MJDefine.MJTingStatus.Ting then print("---------onTingCardStatus-----------1 "..myUserId) -- self:setChaTingCardViewVisible(true) -- self:setTingCardViewVisible(true, ) --self._isTingStateChanged = true--防止出现听牌提示闪一下的bug --self.ui:sendMsg(app.room,MJDefine.MJEvent.Ting) self.ui.Items.Button_Ting_Info:setVisible(true); else print("---------onTingCardStatus-----------0 "..myUserId) -- self:setChaTingCardViewVisible(false) self:setTingCardViewVisible(false) self.ui.Items.Button_Ting_Info:setVisible(false); end end end function zigong7zRoomView:onTingCardResult(data) print("---------听牌结果-------------") if data.response.tingType==MJDefine.MJTingType.QuanTing then -- self:setChaTingCardViewVisible(true,{}) else if self._isOutCardTingCheck then self._isOutCardTingCheck = false local count = table.nums(data.response.tingCards); local isTing = count > 0; self.ui.Items.Button_Ting_Info:setVisible(isTing); self:setTingCardViewVisible(false, data.response.tingCards) else self:setTingCardViewVisible(true, data.response.tingCards) end end end function zigong7zRoomView:showTing(evet) local roomInfo=app.room.roomInfo -- if evet.card and roomInfo.tings and roomInfo.tings[evet.card] then -- self:setTingCardViewVisible(true,roomInfo.tings[evet.card]) -- else -- self:setTingCardViewVisible(false) -- end if evet.card and roomInfo.tings and #roomInfo.tings>0 then local isTing = false for k,v in pairs(roomInfo.tings) do if evet.card==v.outCard then self:setTingCardViewVisible(true,v.tingCards) isTing = true end end if not isTing then self:setTingCardViewVisible(false) end else self:setTingCardViewVisible(false) end end function zigong7zRoomView:pushTing() local function runPushTing(onEnd) if self.playerHandCards[MJDefine.MyViewId] then self.playerHandCards[MJDefine.MyViewId]:pushTing() end if onEnd then onEnd() end end self:addCallBack(runPushTing); end function zigong7zRoomView:onHuResponse(data) local function runHuResponse(onEnd) local response = data.response logD('有人胡牌了', table.tostring(response)) local function callback() self:playHuAni(response) if onEnd then onEnd() end end local viewId = app.room:getViewIdByUserId(response.nUserId) local userInfo=app.room:getUserInfoByViewId(viewId) --先播放胡牌动画和音效,再显示胡牌顺序 local effect = MJAnimationCompnent.CreateHuEffect(response.huType,callback) if response.huType == MJDefine.MJGameHuType.HU_ZIMO then MJSound.PlayOperateSound(userInfo.sex,MJDefine.MJOperateType.OPREATE_ZIMOHU) -- effect=MJAnimationCompnent.CreateHuEffect("zimo",callback) -- elseif response.huType == MJDefine.MJGameHuType.HU_QIANGGANG then else MJSound.PlayOperateSound(userInfo.sex,MJDefine.MJOperateType.OPREATE_DIANPAOHU) -- effect=MJAnimationCompnent.CreateHuEffect("hu",callback) -- --点炮显示 end if effect then self.ui.Items.Layout_Effect:addChild(effect) effect:setTag(HU_EFFECT_TAG) effect:setLocalZOrder(1000) effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) end --删除等待操作的显示 if self.waitOperates and #self.waitOperates>0 then for k,v in pairs(self.waitOperates) do v:removeFromParent() end self.waitOperates={} end if response.huType==MJDefine.MJGameHuType.HU_DIANPAO and response.curOpType ~= 1 then local failViewId = app.room:getViewIdByUserId(response.dpId) --点炮胡或抢杠胡,胡牌类型都是发 点炮胡 if response.isQiangGng > 0 then local huCard = response.huCard == 65 and response.redRealCard or response.huCard --如果胡的牌是红中 用真实的牌 否则用胡的牌 -- logD("isQiangGng huCard:"..huCard) --抢杠胡 self.playerHandCards[viewId]:onGetCard(nil,huCard) --被抢杠的人回退补杠 self.playerHandCards[failViewId]:retoreBuGang(huCard,1) --[[elseif response.isGspHu and response.isGspHu > 0 then local gameInfo =json.decode(app.room.roomInfo.strGameInfo); if gameInfo.dianganghua == 1 then dghDianPao = true --点杠炮(选择的点杠花)时手上已经有杠的牌 不需要再加一张胡的牌 else self.playerHandCards[viewId]:onGetCard(nil,response.huCard) --将胡的牌收走 self.playerHandCards[failViewId]:removeOutCard(response.huCard) end--]] else self.playerHandCards[viewId]:onGetCard(nil,response.huCard) --将胡的牌收走 self.playerHandCards[failViewId]:removeOutCard(response.huCard) end --放炮动画 effect=MJAnimationCompnent.CreateDianPaoEffect() self.ui.Items.Layout_Effect:addChild(effect) effect:setLocalZOrder(1000) effect:setPosition(self.playerHandCards[failViewId]:getAnimationPostion()) if failViewId==MJDefine.MyViewId and app.room.roomInfo.lastOutViewId==MJDefine.MyViewId then --修改点炮的人连续二次出牌 不删除牌 app.room.roomInfo.lastOutViewId = nil end --此处仅做保留,没有实际意义 elseif response.huType==MJDefine.MJGameHuType.HU_QIANGGANG then local failViewId = app.room:getViewIdByUserId(response.dpId) if response.redRealCard > 0 then --抢杠胡时,胡牌的人将胡的牌加入手中 self.playerHandCards[viewId]:onGetCard(nil,response.redRealCard) --被抢杠的人回退补杠 self.playerHandCards[failViewId]:retoreBuGang(response.redRealCard,1) end end if response.nUserId == app.room:getMyUserId() then self.playerHandCards[viewId]:setOutCardEnable(false) self:setTingCardViewVisible(false) self.playerHandCards[viewId]:setTing(false) else -- 其他人胡了倒牌 local handCards = {} for k,v in pairs(self.playerHandCards[viewId]:getHandCardNodes() or {}) do table.insert(handCards,{card = v.value or v:getValue()}) end if response.huType==MJDefine.MJGameHuType.HU_ZIMO or response.curOpType == 1 then --如果是自摸胡 把最后一张替换为胡的牌或点杠花点炮 handCards[#handCards] = {card = response.huCard} end self.playerHandCards[viewId]:removeAllHandCards() dump(handCards, '胡牌handCards....') self.playerHandCards[viewId]:createOpenHandCards(handCards) self.playerHandCards[viewId]:moveLastOpenCard() end self._operateComponent:hideOperate() end self:addCallBack(runHuResponse); end function zigong7zRoomView:playHuAni(response) local strGameInfo = json.decode(app.room.roomInfo.strGameInfo) local effect = MJAnimationCompnent.CreateHuOrderEffect(response.huType,response.huOrder) -- if response.huType == 1 then -- effect=MJAnimationCompnent.CreateHuOrderEffect("zimo",response.huOrder) -- else -- effect=MJAnimationCompnent.CreateHuOrderEffect("hu",response.huOrder) -- end local viewId = app.room:getViewIdByUserId(response.nUserId) if effect then self.ui.Items.Layout_Effect:addChild(effect) effect:setTag(HU_EFFECT_TAG) effect:setLocalZOrder(1000) local pos = self.playerHandCards[viewId]:getAnimationPostion() local offsetX, offsetY = self:getHuFlagOffset(viewId) effect:setPosition(pos.x + offsetX, pos.y + offsetY) end end function zigong7zRoomView:onQiangDuanOperates(data) local function runOnQiangDuanOperates(onEnd) logD("zigong7zRoomView:runOnQiangDuanOperates") local response = data.response if response.operates and self.playerHandCards[MJDefine.MyViewId] then self._operateComponent:showOperate(operates) end if onEnd then onEnd() end end logD("zigong7zRoomView:onQiangDuanOperates") self:addCallBack(runOnQiangDuanOperates) end --游戏消息 function zigong7zRoomView:bindExtendMessage() self:bindEvent(app.room , MJDefine.MJEvent.OutCardTings, handler(self , self.pushTing)); self:bindEvent(app.room , MJDefine.MJEvent.HuResponse, handler(self , self.onHuResponse)) self:bindEvent(app.room , MJDefine.MJEvent.BaoPaiResponse, handler(self , self.onBaoPai)) self:bindEvent(app.room , MJDefine.MJEvent.BankerBaoPai, handler(self , self.onBankerBaoPai)) self:bindEvent(app.room , MJDefine.MJEvent.SendGuo, handler(self , self.onSendGuo)) self:bindEvent(app.room , MJDefine.MJEvent.QiangDuanOperates, handler(self , self.onQiangDuanOperates)) self:bindEvent(app , MJDefine.MJEvent.ChangeLanguage , handler(self , self.doSound)) self:bindEvent(app.room , MJDefine.MJEvent.StartPiao, handler(self , self.onStartPiao)) self:bindEvent(app.room , MJDefine.MJEvent.PiaoResponse, handler(self , self.onPiaoResponse)) self:bindEvent(app, MJDefine.MJEvent.ChangeViewType, handler(self, self.onEventChangeViewType )) -- 托管 self:bindEvent(app.room , MJDefine.MJEvent.HostingRequest, handler(self, self.onHostingRequest)) self:bindEvent(app , MJDefine.MJEvent.HeadShowHighLight , handler(self , self.onHeadShowHighLight)) -- 头像显示高亮 self:bindEvent(app.room , MJDefine.MJEvent.HideOperateLayer , handler(self , self.onHideOperateLayer)) -- 隐藏操作界面 self:bindEvent(app.room , MJDefine.MJEvent.HideGuideTip , handler(self , self.onHideGuideTip)) -- 隐藏手势提示 end function zigong7zRoomView:clean() self.playerView:init() -- --默认状态 self:defaultState() app.room:resetRoomInfo() self:setBtnSitDownVisible(false) self.ui:sendMsg(app.room, MJDefine.MJEvent.CallReadyRequest) -- self._gameoverview = nil end function zigong7zRoomView:updateReady() local nUserId = app.room:getMyUserId()--app.user.loginInfo.uid if app.room.roomInfo.nGameStartCount > 0 then self.toolView:setButtonLeaveEnable(false) self:setBtnSitDownVisible(false) else self.toolView:setButtonLeaveEnable(true) end if app.room.roomInfo.nGameStartCount == 0 and app.room.roomInfo.nRoomOwnedUid ~= nUserId then self.toolView:setButtonToolEnable(false) else self.toolView:setButtonToolEnable(true) end self:checkCanDismiss() end -- 游戏开始 function zigong7zRoomView:onGameStartResponse() local function runGameStartResponse(onEnd) log("2000000000-MJRoomView - runGameStartResponse()" ) --更新背景 self:changeGameBg(true) --隐藏俱乐部 self:hideClub() --重置玩家数据 self:resetGame() self:initHandCardNodes() --写入数据 for k,v in pairs(app.room.roomInfo.memberList) do v.nPlayerFlag = 2 end --更新玩家状态状态 self:onUserReadyResponse() self.toolView:updateButton() -- 隐藏邀请好友 -- self:setWetChatVisible(false) -- 更新局数 self:updateGameNums() --更新庄家 self:updateBanker() -- 显示剩余牌 self:setLastCardTipVisible(true) --初始化方位 self.direcionView:initDirection(self.desktopType) self.direcionView:updateDirection(app.room.roomInfo.nBankSeatId) if onEnd then onEnd() end -- cc.Device:vibrate(5) end log("2000000000-MJRoomView - addCallBack(runGameStartResponse)" ) self:addCallBack(runGameStartResponse); self._gameoverview = nil end -- 大局结算 function zigong7zRoomView:onGameDaJuResponse(data) app.club_php:dispatchEvent({name = GAME_EVENT.CLUB_BACK_ROOM}) if self._gameoverview then return end if app.room.roomInfo.needJieSuanInfo == 1 then--显示总结算 self:showGameOverResult(data.response) else --[[local roomInfo=app.room.roomInfo --如果是解散直接跳转总结算 if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_LONG_NOT_END or roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_DISBAND_GAME then self:showGameOverResult(data.response) end --]] local roomInfo=app.room.roomInfo local isNoCard = false--没有手牌 for i,player in pairs(roomInfo.memberList) do if type(player.handCards) == 'table' and #player.handCards <= 0 then local a = #player.handCards isNoCard = true break end end if isNoCard then self:showGameOverResult(data.response) end app.room:dispatchEvent({name = GAME_EVENT.DISSMISS_CLOSE}) end end -- 大局结算 function zigong7zRoomView:showGameOverResult(data) if self._gameoverview ~= nil then return end self.direcionView:stopAllActions() self:resetGame() local view=MJRoomDaJuView:new(data) view:setAnchorPoint(cc.p(0.5, 0.5)) app:showWaitDialog(view) self._gameoverview = view self:showGameOverAward() end -- 显示抽奖界面 function zigong7zRoomView:showGameOverAward() if not (dd and dd.IGameOverAward) then return end self:runDelay(0.1, function ( ) -- 延迟0.1秒执行,可能有些游戏弹大结算的时候还未收到抽奖消息 dd.IGameOverAward.showAwardView(); end) end function zigong7zRoomView:onOtherLogoutResponse(data) -- local jushu = app.room.roomInfo.nGameStartCount or 0 if (not data or not data.nUserId or not data.nSeatShowId) then return end local function test(onEnd) self.playerView:updatePlayerInfo(data.nSeatShowId) self:onUserReadyResponse() --更新GPS --self:updateAllGpsInfo() --self:checkGpsDistance() -- 是否显示邀请好友 self.toolView:updateButton() if self._fastRequestView then self._fastRequestView:removeSelf() self._fastRequestView = nil end logE("88888-onOtherLogoutResponse onEnd") if onEnd then onEnd() end end self:addCallBack(test) end function zigong7zRoomView:resetGame() logE("===========重置游戏数据===============") self.direcionView:setVisible(false) -- self.playerView:setOperatorTipVisible(false) self:setTingCardViewVisible(false) self:setChaTingCardViewVisible(false) self:setGuideView(false) self:showGuideTip(false) self:setLastCardTipVisible(false) for k,v in pairs(self.playerHandCards) do v:removeFromParent() end self.playerHandCards={} if self.xiaojuView then self.xiaojuView:removeFromParent() self.xiaojuView=nil end --隐藏工具界面 详情 -- if self.toolView.ui.Items.ImageView_Rule_bg then -- self.toolView.ui.Items.ImageView_Rule_bg:setVisible(false) -- end --操作码 -- self.operationLocalCode = 0 -- self.isMoPaiOperator = false -- self.isGameOver = false -- self.isTianHu = false -- self.isGodHand = false -- --重置开招次数 -- for i = 1,4 do -- -- self.playerZhao[i] = 0 -- end self.ui.Items.Layout_Effect:removeAllChildren() self.ui.Items.Layout_Effect_luobo_Lable:removeAllChildren() self.ui.Items.Layout_Effect_luobo:removeAllChildren() self.playerView:clearBao() self.playerView:clearAllPiao() self.playerView:clearAllBoZiMo() self.playerView:setPlayerHeadLight() -- 清空头像光 self.playerView:setPlayerClock() -- 清空头像闹钟 end function zigong7zRoomView:showPiao() self:stopDirection() self.playerView:setPlayerHeadLight() -- 清空头像光 self.playerView:setPlayerClock() -- 清空头像闹钟 local roomInfo=app.room.roomInfo local gameInfo=json.decode(roomInfo.strGameInfo) if not gameInfo.piaomode or tonumber(gameInfo.piaomode)==0 then return end self:hidePiao() local ui=loadUI("mj_zigong7z/res/ui_fangjian/mj_zigong_piao.ui") self.ui.Items.Layout_Player:addChild(ui) self.piao=ui ui.Items.Button_BuPiao:registerClick(function() playBtnEffect() self:hidePiao() local request = MJMessage.PiaoRequest:new() request.isPiao = 0 self.ui:sendMsg(app.room,MJDefine.MJEvent.PiaoRequest,request) end) ui.Items.Button_Piao:registerClick(function() playBtnEffect() self:hidePiao() local request = MJMessage.PiaoRequest:new() request.isPiao = 1 self.ui:sendMsg(app.room,MJDefine.MJEvent.PiaoRequest,request) end) end function zigong7zRoomView:hidePiao() if self.piao then self.piao:removeFromParent() self.piao=nil end end --显示飘操作按钮 function zigong7zRoomView:onStartPiao(response) local function runPiao(onEnd) logD("zigong7zRoomView:onStartPiao") self:showPiao() if onEnd then onEnd() end end logD("zigong7zRoomView:runPiao") self:addCallBack(runPiao) end --飘结果 function zigong7zRoomView:onPiaoResponse(response) local function runonPiaoResponse(onEnd) logD("zigong7zRoomView:runonPiaoResponse") local data = response.response local userId = data.nUserId--操作的玩家 local playersPiaostate = data.playerPiaoState--所有玩家的飘状态 if playersPiaostate then for i,v in pairs(playersPiaostate) do local viewId = app.room:getViewIdByUserId(v.nUserId) local myUserId = app.room:getMyUserId() local userInfo=app.room:getUserInfoByViewId(viewId) if myUserId == data.nUserId then else end self.playerView:showPiao(viewId,v.piaostate==1) if v.piaostate==1 and userId == v.nUserId then --飘音效 MJSound.PlayPiaoSound(userInfo.sex) local effect = MJAnimationCompnent.CreatePiaoEffect() if effect then self.ui.Items.Layout_Effect_luobo:addChild(effect) effect:setLocalZOrder(1000) effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) end end end else local viewId = app.room:getViewIdByUserId(userId) self.playerView:showPiao(viewId,data.piaostate==1) if data.piaostate and data.piaostate == 1 then --飘音效 local userInfo=app.room:getUserInfoByViewId(viewId) MJSound.PlayPiaoSound(userInfo.sex) local effect = MJAnimationCompnent.CreatePiaoEffect() if effect then self.ui.Items.Layout_Effect_luobo:addChild(effect) effect:setLocalZOrder(1000) effect:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) end end end if onEnd then onEnd() end end logD("zigong7zRoomView:runonPiaoResponse--------") self:addCallBack(runonPiaoResponse) end function zigong7zRoomView:showBaoJiao() self:hideBaoJiao() local ui=loadUI("mj_zigong7z/res/ui_fangjian/mj_zigong_baojiao.ui") self:addChild(ui) self.baojiao=ui ui.Items.Button_bozimo:registerClick(function() playBtnEffect() self:hideBaoJiao() local request = MJMessage.BaoPaiRequest:new() request.isBaoPai = 2 logD(request.isBaoPai,"发送爆:2") self.ui:sendMsg(app.room, MJDefine.MJEvent.BaoPaiRequest, request) end) ui.Items.Button_Bao:registerClick(function() playBtnEffect() self:hideBaoJiao() local request = MJMessage.BaoPaiRequest:new() request.isBaoPai = 1 logD(request.isBaoPai,"发送爆:1") self.ui:sendMsg(app.room, MJDefine.MJEvent.BaoPaiRequest, request) end) ui.Items.Button_guo:registerClick(function() playBtnEffect() self:hideBaoJiao() local request = MJMessage.BaoPaiRequest:new() request.isBaoPai = 0 logD(request.isBaoPai,"发送爆:0") self.ui:sendMsg(app.room, MJDefine.MJEvent.BaoPaiRequest, request) end) local gameInfo =json.decode(app.room.roomInfo.strGameInfo); if gameInfo.baojiao then ui.Items.Button_Bao:setVisible(gameInfo.baojiao == 1); end if gameInfo.specrule then local bozimo = getNumBand(gameInfo.specrule, 0x0002) > 0 ui.Items.Button_bozimo:setVisible(bozimo); end ui.Items.Layout_baojiao:requestDoLayout() ui.Items.Layout_baojiao:doLayout(); end function zigong7zRoomView:hideBaoJiao() if self.baojiao then self.baojiao:removeFromParent() self.baojiao=nil end end function zigong7zRoomView:onBtnTingInfoClicked( ) playBtnEffect() if self.ui.Items.Layout_Ting_Tip_Card_Panel:isVisible() then self.ui.Items.Layout_Ting_Tip_Card_Panel:setVisible(false) else self.ui:sendMsg(app.room,MJDefine.MJEvent.Ting) end end function zigong7zRoomView:onChangeChatEnable() if not self.messageView or tolua.isnull(self.messageView) then return end local voiceEnable = tonumber(loadUserInfo("zigongPingBiYuYinKG")) or 1 local propEnable = tonumber(loadUserInfo("zigongHuDongBiaoQingKG")) or 1 self.messageView:setVoiceEnabled(voiceEnable==1) self.messageView:setPropEnabled(propEnable==1) end function zigong7zRoomView:onEventChangeViewType(data) MJDefine.MJConfig = MJDefine.loadMJConfig() self:changeGameBg(true) app.room.roomInfo.requestGetTableInfo = true self.ui:sendMsg(app.room, MJDefine.MJEvent.GetTableInfo); end function zigong7zRoomView:onHostingRequest( data ) local response = data.response if response.nUserId == app.user.loginInfo.uid then if response.status == 1 then --托管状态 self.toolView:showTuoGuan(true) elseif response.status == 0 then--取消托管状态 self.toolView:showTuoGuan(false) end end local isTuoGuan = response.status == 1; local viewId = app.room:getViewIdByUserId(response.nUserId) self.playerView:showTuoGuanByViewId(viewId,isTuoGuan) if isTuoGuan then self:hidePiao() self:hideBaoJiao() end end function zigong7zRoomView:bindAllEvent() --[[ 消息分类管理 ]] --用户状态(包括准备,其他玩家进入或者离开通知,离线等) self:bindUserStatedMessage() --私人场消息(包括解散等) self:bindPrivateMessage() --游戏消息 self:bindGameMessage() --游戏场景消息 self:bindGameSceneMessage() --更换视图 -- self:bindEvent(app , MJDefine.MJEvent.ChangeViewType , handler(self , self.onChangeViewType)); self:bindEvent(app , MJDefine.MJEvent.ChangeViewBG , handler(self , self.changeGameBg)); -- self:bindEvent(app , MJDefine.MJEvent.ChangeChatEnable , handler(self , self.onChangeChatEnable)); --绑定更换桌布事件 -- self:bindEvent(app , "onChangeTable" , handler(self , self.onChangeTable)); --发送道具 -- self:bindEvent(app.room,"showProp" , handler(self , self.showProp)); self:bindExtendMessage() end -- 开始游戏,起飞 function zigong7zRoomView:startGame() app.net:onMsgResume() end --更换水印,不同平台水印不同,在子游戏配置里面配置图片 function zigong7zRoomView:changeWaterMark() self:initLogo() end -- 水印 function zigong7zRoomView:initLogo() if tolua.isnull(self.ui.Items.ImageView_Logo) then return end if not (type(getSubGameRoomLogo) == 'function') then--大厅不支持此方法,则隐藏logo self.ui.Items.ImageView_Logo:setVisible(false); return end local roomInfo = app.room.roomInfo local gameInfo = json.decode(roomInfo.strGameInfo or "") local gamerule = tonumber(gameInfo.gamerule or 1) roomInfo.gameId = roomInfo.gameId or MJDefine.GameID or 0 local logofile = getSubGameRoomLogo(roomInfo.gameId,gamerule) if logofile then self.ui.Items.ImageView_Logo:loadTexture(logofile) self.ui.Items.ImageView_Logo:setVisible(true); else self.ui.Items.ImageView_Logo:setVisible(false); end end -- 初始化大结算再来一局 function zigong7zRoomView:initPlayGameAgain() local strGameInfo = app.room.roomInfo.strGameInfo local isInClub = app.club_php.clubID and app.club_php.clubID ~= 0 if not isInClub then logD("IPlayGameAgain.initPlayGameAgain", "当前玩家不在亲友圈内,不能再来一局"); return end local clubGameInfo = json.decode(strGameInfo) or {} if not clubGameInfo.ruleid then logD("IPlayGameAgain.initPlayGameAgain", "游戏包间id不存在,不能再来一局"); return end dd.IPlayGameAgain.setAgainGameBaoJianId(clubGameInfo.ruleid) end -- 检测是否可以解散房间 function zigong7zRoomView:checkCanDismiss( ) local onCanDismissCallback = function (info) local nUserId = app.room:getMyUserId() local roomInfo = app.room.roomInfo or {} local canDismiss = (tonumber(info.canDismiss or 1) == 1) or roomInfo.nRoomOwnedUid == nUserId or dd.IClub.isAdmin() if roomInfo.nGameStartCount == 0 and roomInfo.nRoomOwnedUid ~= nUserId then canDismiss = false end self:onCanDismissCallback(canDismiss) end if dd.IClub.getCanDismiss then local canDismiss = dd.IClub.getCanDismiss(onCanDismissCallback) if canDismiss then onCanDismissCallback({canDismiss = canDismiss}) end end end function zigong7zRoomView:onCanDismissCallback(canDismiss) if not self.toolView then return end if self.toolView:getIsHaveButtonDismiss() then self.toolView:setButtonToolEnable(canDismiss) end end --用户状态消息 function zigong7zRoomView:bindUserStatedMessage() --默认状态 self:bindEvent(app.room , "defaultState" , handler(self , self.defaultState)); -- 玩家准备 self:bindEvent(app.room , MJDefine.MJEvent.UserReadyResponse , handler(self , self.onUserReadyResponse)); -- 其他玩家进入房间 self:bindEvent(app.room , MJDefine.MJEvent.OtherSitDownResponse , handler(self , self.onOtherSitDownResponse)); -- 其他玩家退出房間 self:bindEvent(app.room , MJDefine.MJEvent.OtherLogoutResponse , handler(self , self.onOtherLogoutResponse)); -- 其他玩家掉线 self:bindEvent(app.room , MJDefine.MJEvent.OtherDroppedResponse , handler(self , self.onOtherDroppedResponse)); -- 用户T出 self:bindEvent(app.room , MJDefine.MJEvent.UserExitResponseRoom , handler(self , self.onUserExitResponseRoom)); -- 玩家的GPS信息发生变化 self:bindEvent(app.room , MJDefine.MJEvent.GpsChangeResponse , handler(self , self.onGpsChangeResponse)); end --私人场消息 function zigong7zRoomView:bindPrivateMessage() -- 玩家收到解散房间的请求 self:bindEvent(app.room , MJDefine.MJEvent.DismissResponse , handler(self , self.onDismissResponse)); end --游戏消息 function zigong7zRoomView:bindGameMessage() -- 游戏开始 self:bindEvent(app.room , MJDefine.MJEvent.GameStartResponse , handler(self , self.onGameStartResponse)); -- 开始给桌子上用户发牌 self:bindEvent(app.room , MJDefine.MJEvent.GameSendCardResponse , handler(self , self.onGameSendCardResponse)); -- 系统发给自己可串可哨的消息 -- self:bindEvent(app.room , "onSystemOperationStart" , handler(self , self.onSystemOperationStart)); -- 广播桌子上所有玩家庄家起手操作 self:bindEvent(app.room , MJDefine.MJEvent.BankerOutCard, handler(self , self.onBankerOutCard)); -- 出牌错误 self:bindEvent(app.room , MJDefine.MJEvent.OutCardError , handler(self , self.onOutCardError)); -- 出牌成功 self:bindEvent(app.room , MJDefine.MJEvent.OutCardSuccess, handler(self , self.onOutCardSuccess)); self:bindEvent(app.room , MJDefine.MJEvent.TurnOutCard , handler(self , self.onTurnOutCard)); -- 抢杠胡 self:bindEvent(app.room , MJDefine.MJEvent.QiangGangHu, handler(self , self.onQiangGangHu)); -- 弃牌 self:bindEvent(app.room , MJDefine.MJEvent.OutCardResponse , handler(self , self.onOutCard)); -- 操作错误 self:bindEvent(app.room , MJDefine.MJEvent.OperationError, handler(self , self.onOperationError)); -- 先操作玩家 -- self:bindEvent(app.room , "onOperationFirst", handler(self , self.onOperationFirst)); -- 操作成功 self:bindEvent(app.room , MJDefine.MJEvent.OperationCodeSuccess , handler(self , self.onOperationCodeSuccess)); -- 听牌 self:bindEvent(app.room , MJDefine.MJEvent.TingSatus, handler(self , self.onTingCardStatus)); self:bindEvent(app.room , MJDefine.MJEvent.TingResult, handler(self , self.onTingCardResult)); self:bindEvent(app.room , MJDefine.MJEvent.ShowTing, handler(self , self.showTing)); self:bindEvent(app.room , MJDefine.MJEvent.PushTing, handler(self , self.pushTing)); self:bindEvent(app.room , MJDefine.MJEvent.WaitOperate, handler(self , self.onWaitOperate)) -- 听牌 -- self:bindEvent(app.room , "onDaiXing",handler(self , self.onDaiXing)); --弃胡通知自己 -- self:bindEvent(app.room , "onQiHuSelfResponese",handler(self , self.onQiHuSelfResponese)); --弃胡通知其他 -- self:bindEvent(app.room , "onOtherQiHuTongZhi",handler(self , self.onOtherQiHuTongZhi)); self:bindEvent(app.room , MJDefine.MJEvent.BraodcastFastStart , handler(self , self.onBroadcastFaststart)); self:bindEvent(app.room , MJDefine.MJEvent.FastStartSucc , handler(self , self.onFastStartSucc)); self:bindEvent(app.room , MJDefine.MJEvent.GameXiaoJuResponse , handler(self , self.onGameXiaoJuResponse)); self:bindEvent(app.room , MJDefine.MJEvent.GameDaJuResponse , handler(self , self.onGameDaJuResponse)); -- user pass self:bindEvent(app.room , MJDefine.MJEvent.USER_PASS, handler(self, self.onUserPassRequest)) end --场景恢复 function zigong7zRoomView:bindGameSceneMessage() local function onEnterRoomSuccess(event) if tolua.isnull(self.ui) then logE("self.is null") return end local roomInfo = app.room.roomInfo local myUserId = app.room:getMyUserId() for userId,v in pairs(roomInfo.memberList) do local viewId = app.room:getViewIdByUserId(userId) --出牌瞬间重连,会先收到重连消息再收到出牌成功,导致多一张牌,这时要在出牌成功那里删一次牌 if self.playerHandCards[viewId] and v.handCards and type(v.handCards) == 'table' then if userId == myUserId then local rHandCards = #v.handCards local curHandCards = self.playerHandCards[viewId]:getHandCardsNum() if curHandCards+1 == rhandCards then self.needDeleteOutCard = true end end end end self:stopAllActions() self:defaultState() self:onGameReconnection() self:startGame() end app.hall:addEventListener("onEnterRoomSuccess", onEnterRoomSuccess) end function zigong7zRoomView:onFastStartSucc(data) if self._fastRequestView then self._fastRequestView:removeSelf() self._fastRequestView = nil end --self.toolView:showFastStart(false) self.playerView:setPlayerVisible(false) self:updateRoomBaseData() end --更新房间基础数据 function zigong7zRoomView:updateRoomBaseData() --初始化背景 -- local idx2 = tonumber(loadUserInfo("lhqgameBgPicture")) or 4 -- self:setTableImg(idx2) --初始化方言 -- local languageType = tonumber(loadUserInfo("lhqLanguageType")) or LHQ_GAME_LANGUAGE_TYPE.FANG_YAN -- setLHQCurLanguage(languageType) local roomInfo = app.room.roomInfo; -- 房间号 self._roomHeadInfo:setRoomNum(tostring(roomInfo.nShowTableId)) --局数 self:updateGameNums() --房间玩法 self.toolView:updateRule() -- local ruleAll = MJWanFa.getWanFaInfo(roomInfo.strGameInfo)--getLHQRuleStr(); -- self.ui.Items.Text_Rule:setText(ruleAll) --local heght=self.ui.Items.Text_Rule:getContentSize().height+20 --self.ui.Items.Layout_Rule:setSize(cc.size(self.ui.Items.Layout_Rule:getContentSize().width,self.ui.Items.Text_Rule:getContentSize().height)) -- self.ui.Items.Layout_Rule:doLayout() self:onUserReadyResponse() for i = 1,6 do self.playerView:updatePlayerInfo(i) end self.toolView:updateButton() -- -- 是否显示邀请好友 -- self:setWetChatVisible(table.nums(app.room.roomInfo.memberList) < app.room.roomInfo.nMaxPlayCount) -- if isReviewVersion() then -- self:setWetChatVisible(false); -- end -- -- 更新玩家手牌列表时,按需显示 -- if app.room.roomInfo.nGameStartCount > 0 then -- self:setWetChatVisible(false) -- --self:setBtnSitDownVisible(false) -- end end -- 分辨率改变回调(针对部分机型切后台后,导致牌数据位置不对(宽高分辨率对调了)) function zigong7zRoomView:applicationScreenSizeChanged() print('zigong7zRoomView:applicationScreenSizeChanged') if not self then print('zigong7zRoomView:applicationScreenSizeChanged return not self') return end if tolua.isnull(self) then print('zigong7zRoomView:applicationScreenSizeChanged return tolua.isnull(self)') return end -- 出现小局不请求重连 -- if self.xiaojuView and self.xiaojuView:isVisible() then -- print('zigong7zRoomView:applicationScreenSizeChanged return self.xiaojuView is showing') -- return -- end local callFunc = function(onEnd) if self.playerHandCards[MJDefine.MyViewId].isUseNew3D then if self.playerHandCards[MJDefine.MyViewId]:isUseNew3D() then MJDefine.loadMJConfig(self.desktopType) end end self:requestReconnect() if onEnd then onEnd() end end local winSize = cc.Director:getInstance():getWinSize() for i, v in pairs(self.playerHandCards) do if v:getHandCardPosInitY() > winSize.height then self:addCallBack(callFunc) break end end end -- 其他玩家坐下成功 function zigong7zRoomView:onOtherSitDownResponse(data) if not data or not data.nSeatShowId then return end -- local nSeatShowId = data.nSeatShowId; -- local nUserId = app.room:getUserIdByViewId(nSeatShowId) -- self:checkGpsDistance(nUserId,true); self:onUserReadyResponse() -- 是否显示邀请好友 self.toolView:updateButton() end function zigong7zRoomView:onOtherDroppedResponse(data) if not data.response.nUserId then return end local nUserId = data.response.nUserId local nOnlineStatus = data.response.nOnlineStatus local viewId = app.room:getViewIdByUserId(nUserId) self.playerView:setPlayerOffLineVisible(nOnlineStatus == MJDefine.PlayOnlineStatus.offline,viewId) end function zigong7zRoomView:onUserExitResponseRoom(data) local function runUserExitResponseRoom(onEnd) log("2000000000-MJRoomView - runUserExitResponseRoom()" ) local response = data.response -- 0: 不退出, 1: 退出 if response.logoutFlag == 1 then --房间号 local roomid = app.room.roomInfo.nShowTableId --app:gotoView(import("luaScript.Views.Main.MainView"):new(app.gameId,roomid)); gotoMainView(app.gameId,roomid) end app.room:dispatchEvent({name = "onUserExitResponseHall"}); logE("88888-onUserExitResponseRoom onEnd") if onEnd then onEnd() end end log("2000000000-MJRoomView - addCallBack(runUserExitResponseRoom)" ) self:addCallBack(runUserExitResponseRoom); end -- 服务器广播玩家数据发生变化 function zigong7zRoomView:onGpsChangeResponse(data) logD("zigong7zRoomView:onGpsChangeResponse()") if not data or not data.nUserId then return end local roomInfo = app.room.roomInfo local nUserId = data.nUserId logD("zigong7zRoomView:onGpsChangeResponse()", tostring(nUserId)) self:checkGpsDistance(nUserId,roomInfo.nGameStartCount==0) end -- 玩家收到解散房间的请求 function zigong7zRoomView:onDismissResponse(event) if not event or not event.response then return end logE("onDismissResponse() response = ", event.response) local response = event.response --当前时间 app.room.roomInfo.nDismissStateTime = response.timeLeft --总的时间 app.room.roomInfo.nDismissToTalTime = app.room.roomInfo.nDisbandTimeout --显示解散(此标志会影响闹钟时间会冻住) app.room.roomInfo.nShowDismiss = true if response.operateType == 1 then local initiateUserId = response.nUserId if response.memberList ~= nil then for k,v in pairs(response.memberList) do if v.dismissState == 1 then initiateUserId = v.nUserId end end end --如果上次的解散界面还存在 先发送关闭事件 app.room:dispatchEvent({name = GAME_EVENT.DISSMISS_CLOSE}) local view = require("luaScript.Views.Room.RoomDismissView"):new(initiateUserId,app.room.roomInfo.memberList,response.timeLeft) view:setAnchorPoint(cc.p(0.5, 0.5)) app:showWaitDialog(view) -- self.ui:sendMsg(app.room, MJDefine.MJEvent.CallReadyRequest) -- if response.memberList ~= nil then --自己发起 -- for k,v in pairs(response.memberList) do -- if v.dismissState == 1 then -- local view = MJRoomDismissView:new(v.nUserId); -- view:setAnchorPoint(cc.p(0.5, 0.5)); -- app:showWaitDialog(view); -- return -- end -- end -- else --其他收到 -- local view = MJRoomDismissView:new(response.nUserId); -- view:setAnchorPoint(cc.p(0.5, 0.5)); -- app:showWaitDialog(view); -- end else --如果不是发起操作则只转发状态给解散界面 local memberStatus={} -- local userId = response.nUserId if response.memberList ~= nil then for k,v in pairs(response.memberList) do table.insert(memberStatus,{userId = v.nUserId, status = v.dismissState}) -- if v.dismissState == 1 then -- initiateUserId = v.nUserId -- end end else table.insert(memberStatus,{userId = response.nUserId, status = response.operateType}) end app.room:dispatchEvent({name = GAME_EVENT.DISSMISS_UPDATE_STATUS , memberStatus = memberStatus}); end end --出牌错误 function zigong7zRoomView:onOutCardError(data) local function runOnOutCardError(onEnd) logE("zigong7zRoomView:onOutCardError(), response = ", table.tostring(data.response)) log("2000000000-MJRoomView - runOnOutCardError") --出牌错误主动上报日志 uploadLogs(GAME_ERROR_TYPE.AUTO) -- --隐藏出牌效果 -- self:setOutCardVisible(false) -- --恢复出的那张牌的透明度 -- local index = self.ui.Items.ImageView_handTempCard.index -- self.handCardItem[index]:setOpacity(255) -- self.bOutCard = true self:requestReconnect(); if onEnd then onEnd() end end log("2000000000-MJRoomView - addCallBack(runOnOutCardError)") self:addCallBack(runOnOutCardError) end function zigong7zRoomView:onQiangGangHu(data) --[[ -- 庄家uid , defVar("nUserId", VT_Int, 0) -- 庄家操作类型 , defVar("mainOpCode", VT_Short, 0) --庄家是否需要出牌0不需要 1:需要 , defVar("IsShouldOutCard", VT_UChar, 0)--]] local function runOnQiangGangHu(onEnd) -- log("2000000000-MJRoomView - (runOnBankerOutCard)") -- logE("name = ", data.name) logE("runOnQiangGangHu :"..table.tostring(data.response)) -- if not data.response.nUserId then -- showTooltip("庄家起手操作nUserId is not exist") -- end -- local viewId = app.room:getViewIdByUserId(data.response.nUserId) local opType=data.response.opType local opCard= data.response.opCard local outCardSuccess=MJMessage.OutCardSuccess:new() -- local operates=VT_Vector(MJMessage.OperateCard) local operate=MJMessage.OperateCard:new() operate.opType=opType operate.opCard=opCard table.insert(outCardSuccess.operates.Datas,operate) self._operateComponent:showOperate(outCardSuccess.operates,opCard) -- local operates=data.response.operates -- local nSeatId=data.response.nSeatId -- if self.playerHandCards[viewId] then -- self.playerHandCards[viewId]:onGetCard(operates,card) -- end -- self.playerHandCards[MJDefine.MyViewId]:showOperate(operates,card) -- self:updateGameNums() -- self.direcionView:updateDirection(nSeatId) if onEnd then onEnd() end end log("2000000000-MJRoomView - addCallBack(runOnQiangGangHu)") self:addCallBack(runOnQiangGangHu); end function zigong7zRoomView:onOutCard(data) local function runOnOutCard(onEnd) logE("zigong7zRoomView:runOnOutCard(), response = ", table.tostring(data.response)) log("2000000000-MJRoomView - runOnOutCard") -- local viewId = app.room:getViewIdByUserId(data.response.nUserId) -- local card= data.response.card -- if self.playerHandCards[viewId] then -- self.playerHandCards[viewId]:createOutCards(card) -- end if onEnd then onEnd() end end log("2000000000-MJRoomView - addCallBack(runOnOutCard)") self:addCallBack(runOnOutCard) end --操作错误 function zigong7zRoomView:onOperationError(data) local function runOnOperationError(onEnd) log("2000000000-MJRoomView - (runOnOperationError)") --恢复操作面板 -- self:touchEatOneCardCallBack() if onEnd then onEnd() end end log("2000000000-MJRoomView - addCallBack(runOnOperationError)") self:addCallBack(runOnOperationError) end function zigong7zRoomView:onWaitOperate(data) --等待操作的UID local nUserId = data.response.nUserId --操作类型 local opType = data.response.opType local viewId = app.room:getViewIdByUserId(nUserId) local waitSprite = nil if opType==MJDefine.MJOperateType.OPREATE_PENG then waitSprite = cc.Sprite:create("mj/res/ui/zy_fangjian/operate/mj_effect_wait_peng.png") elseif opType==MJDefine.MJOperateType.OPREATE_ZHIGANG or opType==MJDefine.MJOperateType.OPREATE_BAGANG or opType==MJDefine.MJOperateType.OPREATE_ANGANG then waitSprite = cc.Sprite:create("mj/res/ui/zy_fangjian/operate/mj_effect_wait_gang.png") elseif opType==MJDefine.MJOperateType.OPREATE_DIANPAOHU or opType==MJDefine.MJOperateType.OPREATE_QIANG_GANG_HU then waitSprite = cc.Sprite:create("mj/res/ui/zy_fangjian/operate/mj_effect_wait_hu.png") end if waitSprite then self.ui.Items.Layout_Player:addChild(waitSprite) waitSprite:setLocalZOrder(1000) waitSprite:setPosition(self.playerHandCards[viewId]:getAnimationPostion()) table.insert(self.waitOperates,waitSprite) end end function zigong7zRoomView:onBroadcastFaststart(data) local response = data.response local remove = false if response.nUserId and response.nStatus then if response.nStatus == 3 or response.nStatus>4 then remove = true end end if not remove then for _,v in ipairs(response.pList) do if v.nStatus == 3 or v.nStatus>4 then remove = true end end end if response.timeOut <=0 then remove = true end if self._fastRequestView == nil then if remove then return "" end local requesterId = 0 for _,v in ipairs(response.pList) do if v.nStatus == 1 then requesterId = v.nUserId end end if requesterId<=0 then return "" end local view = import("mj.luaScript.Views.Room.MJRequestStartView"):new(requesterId) view:setAnchorPoint(cc.p(0.5, 0.5)) view:showItems(response) app:showWaitDialog(view) self._fastRequestView = view else if remove then local userInfo = app.room.roomInfo.memberList[response.nUserId] self._fastRequestView:removeSelf() self._fastRequestView = nil if userInfo then local u = json.decode(userInfo.userInfo) local txt = string.format("玩家【%s】拒绝立即开局", u.nickname) showTooltip(txt) end app.room:resetFastInfo() --self.toolView:showFastStart(true) else self._fastRequestView:updateView(response) end end end --托管状态,服务器下发过操作,客户端隐藏操作界面 function zigong7zRoomView:onUserPassRequest( data ) local response = data.response if app.room:getMyUserId() == response.nUserId then self._operateComponent:hideOperate() end end -- 添加延迟回调事件,delay不传默认为0,但是需注意,排在有delay的后面事件,也会相应的跟着一起间隔 function zigong7zRoomView:addCallBack(callback, delay) local callbackInfo = { callback = callback, delay = delay or 0 } -- 将回调放在一起管理 table.insert(self.callbackQueue, callbackInfo) logE(" #self.callbackQueue:".. #self.callbackQueue) cc.Director:getInstance():getScheduler():setTimeScale(1.0) local function runFunc() if #self.callbackQueue <= 0 then self.callbackRunning = false return end local callbackInfo = self.callbackQueue[1] local func = callbackInfo.callback; local delay = callbackInfo.delay; table.remove(self.callbackQueue,1) -- 执行一个则删除一个回调 self.callbackRunning = true local function runCallback (cb) cb(function() self.callbackRunning = false; runFunc(); -- 然后继续执行下一个回调 end) end -- 如果有delay,那么启动全局定时器 if delay and delay > 0 then local entryId = nil; entryId = cc.Director:getInstance():getScheduler():scheduleScriptFunc(function() runCallback(func); if entryId then cc.Director:getInstance():getScheduler():unscheduleScriptEntry(entryId); end end, delay, false); else runCallback(func); end end log("self.callbackRunning:",self.callbackRunning) if not self.callbackRunning then runFunc(); end end --隐藏提示界面 function zigong7zRoomView:setGuideView(bVisible) self.ui.Items.Layout_tips:setVisible(bVisible) if bVisible then self.ui.Items.ImageView_3:playClip("tip") end end -- 初始化手牌界面 function zigong7zRoomView:initHandCardNodes() if MJDefine.MJRoomPlayerSitConfig[app.room:getMaxPlayerCount()] then for k,v in pairs(MJDefine.MJRoomPlayerSitConfig[app.room:getMaxPlayerCount()]) do if self.playerHandCards[v] then self.playerHandCards[v]:removeFromParent() end self.playerHandCards[v] = MJHandCardView:new(v,self.desktopType) self.ui.Items.Layout_Player:addChild(self.playerHandCards[v],v) end end end -- 获得手牌界面 function zigong7zRoomView:getHandCardNodesByViewId(viewId) return self.playerHandCards[viewId] end function zigong7zRoomView:updateGameNums() -- 更新当前局数 -- local roomInfo = app.room.roomInfo -- local curCount = roomInfo.nGameStartCount or 0 -- local str = string.format("局数%d/%d", curCount, roomInfo.nTotalGameNum) -- self.ui.Items.Text_JuShu:setText(str) --更新牌数 -- self.ui.Items.Text_CardNum:setText(roomInfo.nLeaveCardNum or 0) -- if curCount>0 then -- self.ui.Items.ImageView_CardNum:setVisible(false) -- self.ui.Items.Layout_GameInfo:setVisible(true) -- else -- self.ui.Items.ImageView_CardNum:setVisible(false) -- self.ui.Items.Layout_GameInfo:setVisible(false) -- end local roomInfo = app.room.roomInfo if self.direcionView then self.direcionView:updateGameNums() end if self._lastCardTip then self._lastCardTip:setLastCardCount(roomInfo.nLeaveCardNum or 0) end if self._roomHeadInfo then self._roomHeadInfo:setRoundCount(roomInfo.nGameStartCount, roomInfo.nTotalGameNum) end end --更新庄家 function zigong7zRoomView:updateBanker() --隐藏所有的庄家标志 -- self:setBankerVisible() --只显示当前的庄家座位号 local nBankerSeatId = app.room.roomInfo.nBankSeatId local viewId = app.room:getViewIdBySeatId(nBankerSeatId) self.playerView:setBankerVisible(viewId,true) -- if self.allNodes[viewId] then -- self.allNodes[viewId].banker:setVisible(true) -- else -- showTooltip("庄家椅子号"..nBankerSeatId.."不匹配") -- end end --隐藏准备按钮 function zigong7zRoomView:setBtnSitDownVisible(bVisible) -- self.toolView.ui.Items.Button_Ready:setVisible(bVisible) --self.ui.Items.Button_Ready:setVisible(bVisible) -- self:updateButtonPosition() end --倒牌 function zigong7zRoomView:showOpenCard() local roomInfo = app.room.roomInfo for k,v in pairs(roomInfo.memberList) do local viewId = app.room:getViewIdByUserId(v.nUserId) if viewId and self.playerHandCards[viewId] then if viewId==MJDefine.MyViewId then -- 我自己则屏蔽触摸事件 self.playerHandCards[viewId]:removeTouchEvent() else --倒牌 self.playerHandCards[viewId]:removeAllHandCards() self.playerHandCards[viewId]:createOpenHandCards(v.handCards) end end end end -- 胡标记偏移位置 function zigong7zRoomView:getHuFlagOffset(viewId) local offset = { [MJDefine.PlayerViewType.My] = {x = 0, y = 0}, [MJDefine.PlayerViewType.LeftUp] = {x = 0, y = 0}, [MJDefine.PlayerViewType.LeftDown] = {x = 0, y = 0}, [MJDefine.PlayerViewType.Top] = {x = 0, y = 0}, [MJDefine.PlayerViewType.RightUp] = {x = 0, y = 0}, [MJDefine.PlayerViewType.RightDown] = {x = 0, y = 0}, } if offset[viewId] then return offset[viewId].x, offset[viewId].y else return 0, 0 end end --显示高亮头像 function zigong7zRoomView:onHeadShowHighLight(response) if not response then return end local data = response.response if not data then return end self.playerView:setPlayerHeadLight(data.viewId, true) self.playerView:setPlayerClock(data.viewId, true, 30) -- 清空头像闹钟 end -- 手势提示 function zigong7zRoomView:showGuideTip(isShow) if self._isReplay then self.ui.Items.Layout_tips:setVisible(false) return end local isShow = isShow or false self.ui.Items.Layout_tips:setVisible(isShow) local startPos = cc.p(97, 67) if isShow then local moveBy = cc.MoveBy:create(0.5, cc.p(0, 80)) local callfunc = cc.CallFunc:create(function() self.ui.Items.ImageView_3:setPosition(startPos) end) local delay = cc.DelayTime:create(1) local seq = cc.Sequence:create(moveBy, delay, callfunc) local rep = cc.RepeatForever:create(seq) self.ui.Items.ImageView_3:runAction(rep) else self.ui.Items.ImageView_3:stopAllActions() self.ui.Items.ImageView_3:setPosition(startPos) end local is3D = self:getDeskopType() == MJDefine.DesktopType.ThreeD self.ui.Items.ImageView_1:setVisible(not is3D) self.ui.Items.ImageView_2:setVisible(not is3D) self.ui.Items.ImageView_3:setVisible(is3D) end -- 获得方位组件 function zigong7zRoomView:getDirectionView() return self.direcionView end -- 获得桌子类型 function zigong7zRoomView:getDeskopType() return self.desktopType end -- 获得玩家面板 function zigong7zRoomView:getPlayerView() return self.playerView end -- 设置正在重连属性 function zigong7zRoomView:setRunningReconnect(bool) self.isRunGameReconnection = bool end -- 获得特效面板 function zigong7zRoomView:getEffectLayer() return self.ui.Items.Layout_Effect end -- 获得萝卜特效面板 function zigong7zRoomView:getEffectLuoboLayer() return self.ui.Items.Layout_Effect_luobo end -- 获得听按钮 function zigong7zRoomView:getButtonTingInfo() return self.ui.Items.Button_Ting_Info end -- 设置操作数据 function zigong7zRoomView:setOperates(data) self.operates = data or {} end -- 获得工具层 function zigong7zRoomView:getToolView() return self.toolView end -- 隐藏操作界面 function zigong7zRoomView:onHideOperateLayer() if not self._operateComponent then return end self._operateComponent:hideOperateLayer() end -- 获得操作界面 function zigong7zRoomView:getOperateComponent() return self._operateComponent end -- 萝卜标记偏移位置 function zigong7zRoomView:getLuoBoOffset(viewId) local offset = { [MJDefine.PlayerViewType.My] = {x = -500, y = -100}, [MJDefine.PlayerViewType.LeftUp] = {x = 0, y = -60}, [MJDefine.PlayerViewType.LeftDown] = {x = 0, y = -60}, [MJDefine.PlayerViewType.Top] = {x = 100, y = 100}, [MJDefine.PlayerViewType.RightUp] = {x = 0, y = -60}, [MJDefine.PlayerViewType.RightDown] = {x = 0, y = -60}, } if offset[viewId] then return offset[viewId].x, offset[viewId].y else return 0, 0 end end -- 获得是否回放 function zigong7zRoomView:getIsReplay() return self._isReplay or false end -- 设置剩余牌显示 function zigong7zRoomView:setLastCardTipVisible(bool) self._lastCardTip:setVisible(bool or false) end -- 隐藏手势提示界面 function zigong7zRoomView:onHideGuideTip() self:showGuideTip(false) end -- 请求重连 function zigong7zRoomView:requestReconnect() if not MJDefine then return end if not MJDefine.MJEvent then return end if not MJDefine.MJEvent.GetTableInfo then return end self.ui:sendMsg(app.room,MJDefine.MJEvent.GetTableInfo) end return zigong7zRoomView