local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine") local MJMessage = MJFramework.MJImport("mj.luaScript.Protocol.MJMessage") local MJSound = MJFramework.MJImport("mj.luaScript.MJSound") local CommonHandCard = MJFramework.MJFrameworkClassImprot("mj.luaScript.Common.2d.CommonHandCard") local HandCard2D = class("HandCard2D", CommonHandCard) function HandCard2D:ctor(...) HandCard2D.super.ctor(self, ...) end --- HandCard2D:onAfterCreateHandcards 创建手牌之后的处理 function HandCard2D:onAfterCreateHandcards() HandCard2D.super.onAfterCreateHandcards(self) end --- -- 摊牌之后的处理 -- function HandCard2D:onAfterCreateOpenHandcards() HandCard2D.super.onAfterCreateOpenHandcards(self) end function HandCard2D:createGroupCards(arg, fromViewId) for _, v in pairs(arg) do if not fromViewId then fromViewId = v.fromViewId end local group = nil if v.opType == MJDefine.MJOperateType.OPREATE_ANGANG then group = self:getGroup(v.values[1], {MJDefine.MJOperateType.OPREATE_ANGANG}) if group then group:setCardNum(v.cardNum) group:customRefresh(v) return end end local groupIndex = table.nums(self._groupNodes) + 1 group = self:createGroup(v.values, v.showType, self._viewId, groupIndex, v.cardNum) if group then group.fromViewId = v.fromViewId ---保留触发操作的玩家位置,补杠需要 group.opType = v.opType local x, y = self:getGroupPosition(group, groupIndex) group:setPosition(cc.p(x, y)) group:customRefresh(v) self:addChild(group) table.insert(self._groupNodes, group) end end self:refreshGroupZOrder() end --- -- 补杠 -- @param card 补杠的牌 -- @param cardNum 多头杠牌张数 -- @return -- function HandCard2D:buGang(card, cardNum) local oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_BAGANG, MJDefine.MJOperateType.OPREATE_ZHIGANG, MJDefine.MJOperateType.OPREATE_ANGANG}) if oldGroup then -- 如果没有碰牌,则查看是否已经有补杠 local cards = oldGroup:getCards() if cards and cards[4] then oldGroup:setCardNum(cardNum) cards[4]:setOperateBackImage() end return else oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_PENG}) if not oldGroup then oldGroup = self:getGroup(card, {MJDefine.MJOperateType.OPREATE_TI}) end end if not oldGroup then return end local fromViewId = oldGroup.fromViewId -- 杠牌对家,换成第四张 if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then fromViewId = 4 end if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then fromViewId = 4 end local oldPos = oldGroup:getPosition() local index = table.indexOf(self._groupNodes, oldGroup) table.remove(self._groupNodes, index) oldGroup:removeFromParent() local newGroup = self:createGroup({card, card, card, card}, MJDefine.MJGroupType.BaGang, self._viewId, index, cardNum) if not newGroup then return end newGroup.fromViewId = fromViewId newGroup.opType = MJDefine.MJOperateType.OPREATE_BAGANG table.insert(self._groupNodes, index, newGroup) newGroup:setPosition(oldPos) newGroup:customRefresh(newGroup) self:addChild(newGroup) self:refreshGroupZOrder() end --- HandCard2D:retoreBuGang 还原补杠 -- @param card 牌值 -- @param cardNum 牌张数 function HandCard2D:restoreBuGang(card, cardNum) local oldGroup = self:getGroup( card, { MJDefine.MJOperateType.OPREATE_BAGANG, MJDefine.MJOperateType.OPREATE_ANGANG, MJDefine.MJOperateType.OPREATE_ZHIGANG }) if not oldGroup then return end if type(oldGroup.getCardNum)=='function' then local oldCardNum = oldGroup:getCardNum() if oldCardNum > 4 then oldCardNum = oldCardNum - 1 oldGroup:setCardNum(oldCardNum) oldGroup:customRefresh() return end end local fromViewId = oldGroup.fromViewId -- 杠牌对家,换成第四张 if app.room:getMaxPlayerCount() == 2 and fromViewId ~= 0 then fromViewId = 4 end if app.room:getMaxPlayerCount() == 4 and fromViewId == 2 then fromViewId = 4 end local oldPos = oldGroup:getPosition() local index = table.indexOf(self._groupNodes, oldGroup) table.remove(self._groupNodes, index) oldGroup:removeFromParent() local newGroup = self:createGroup({card, card, card}, MJDefine.MJGroupType.Peng, self._viewId, index, cardNum) if not newGroup then return end newGroup.fromViewId = fromViewId newGroup.opType = MJDefine.MJOperateType.OPREATE_PENG table.insert(self._groupNodes, index, newGroup) newGroup:setPosition(oldPos) self:addChild(newGroup) self:refreshGroupZOrder() end -- 重写排序,让听用牌放在最左边,定缺牌放最右边 function HandCard2D:sortHandCards() -- 拆分 local temp = {} local tCard = {} local nCard = {} local qCard = {} for i, v in ipairs(self._handCardNodes) do if v:getIsTingYongCard() then table.insert(tCard, v) elseif v:getIsDingQueCard() or (v:getMJColorType() == self.queType) then table.insert(qCard, v) else table.insert(nCard, v) end end -- 按牌值顺序排序 local function sortFun(c1, c2) return c1:getValue() < c2:getValue() end table.sort(tCard, sortFun) table.sort(nCard, sortFun) table.sort(qCard, sortFun) -- 添加到大表temp里面 for i, v in ipairs(tCard) do table.insert(temp, v) end for i, v in ipairs(nCard) do table.insert(temp, v) end for i, v in ipairs(qCard) do table.insert(temp, v) end self._handCardNodes = temp end --发送出牌消息 function HandCard2D:sendOutCard() app.room:dispatchEvent({name = MJDefine.MJEvent.checkIsNeedSendGuo}) HandCard2D.super.sendOutCard(self) end --判断是否符合换三张规则 function HandCard2D:checkIsInSwapRule() local roomInfo=app.room.roomInfo local gameInfo=json.decode(roomInfo.strGameInfo) local selectNums = #self._selectCards --local tipsMessage = "当前服务器传下来换牌的张数:" .. gameInfo.swapcardcount .. "当前选中的牌张数:" .. selectNums; --showTooltip(tipsMessage) if selectNums ~= tonumber(gameInfo.swapcardcount) then return false end local huase = self._selectCards[1]:getMJColorType() for i,v in pairs(self._selectCards) do local tHuase = v:getMJColorType() if tHuase ~= huase then return false end end return true end return HandCard2D