local ZPDef = ZPFramework.ZPImport("zp_base.luaScript.ZPDef") local ZPFunctions = {} --获取字牌资源名字 function ZPFunctions.getZPCardImgByValue(value,cardType) if not value then logE("ZPFunctions.getZPCardImgByValue", "value:", value, "cardType:", cardType) return "" end -- value小写:1 - 10 -- value大写:17- 26 --资源是1-20,牌背名称特殊,value > 20即可 --此个if是配合代码里的资源 if value >= 17 and value <= 26 then value = value - 6 end local cacheGameCard = "ZPCardType"..(ZPDef.GameID or app.gameId) local cardTypeRes = tonumber(loadUserInfo(cacheGameCard)) or ZPDef.defaultCardRes local textureName = "" if cardType == ZPDef.CardType.CARD_TYPE_HAND then --手牌 if value <= 20 then textureName = string.format(ZPDef.CardFile.CARD_FILE_HAND,cardTypeRes,value) else textureName = string.format(ZPDef.CardFile.CARD_FILE_HAND_BACK,cardTypeRes) end elseif cardType == ZPDef.CardType.CARD_TYPE_TABLE then --组合牌 if value <= 20 then textureName = string.format(ZPDef.CardFile.CARD_FILE_WEAVE_CARD,cardTypeRes,value) else textureName = string.format(ZPDef.CardFile.CARD_FILE_WEAVE_CARD_BACK,cardTypeRes) end elseif cardType == ZPDef.CardType.CARD_TYPE_OUTCARD then --出牌 if value <= 20 then textureName = string.format(ZPDef.CardFile.CARD_FILE_OUT_CARD,cardTypeRes,value) else textureName = string.format(ZPDef.CardFile.CARD_FILE_OUT_CARD_BACK,cardTypeRes) end end return textureName end --字牌是否是2710 function ZPFunctions.getZPIsErQiShi(card) return card == 0x02 or card == 0x12 or card == 0x07 or card == 0x17 or card == 0x0A or card == 0x1A end --字牌是否是1510 function ZPFunctions.getZPIsYiWuShi(card) return card == 0x01 or card == 0x11 or card == 0x05 or card == 0x15 or card == 0x0A or card == 0x1A end --[[ @boolean:true为大写,false为小写 ]] function ZPFunctions.getZPCardIsBig(card) return card - 10 > 0 end --是否是二七十,也作红牌判断 function ZPFunctions.getIsErQiShi(card) return card == 0x02 or card == 0x12 or card == 0x07 or card == 0x17 or card == 0x0A or card == 0x1A end function ZPFunctions.getIsYiWuShi(card) return card == 0x01 or card == 0x11 or card == 0x05 or card == 0x15 or card == 0x0A or card == 0x1A end --根据一张牌和类型,获取组合牌 function ZPFunctions.getZPCardList(card,mType) if mType == ZPDef.SendCardType.GUN_ZI_FOUR_SAME or mType == ZPDef.SendCardType.CHI_PAI_TI then --四张同牌 提 return {card,card,card,card},ZPDef.OpType.OP_TYPE_TI elseif mType == ZPDef.SendCardType.KUAI_SHUI_FOUR_SAME or mType == ZPDef.SendCardType.CHI_PAI_SHAO_PAO or mType == ZPDef.SendCardType.CHI_PAI_PENG_PAO then --四张同牌 跑 return {card,card,card,card},ZPDef.OpType.OP_TYPE_PAO elseif mType == ZPDef.SendCardType.KAN_THREE_SAME then -- 暗偎 return {card,card,card},ZPDef.OpType.OP_TYPE_ANWEI elseif mType == ZPDef.SendCardType.DIRTY_THREE_SAME then -- 明偎 return {card,card,card},ZPDef.OpType.OP_TYPE_MINGWEI elseif mType == ZPDef.SendCardType.DUI_THREE_SAME then --碰 return {card,card,card},ZPDef.OpType.OP_TYPE_PENG elseif mType == ZPDef.SendCardType.TWO_SEVEN_TEN then --2.7,10 return {card,card+5,card+8},ZPDef.OpType.OP_TYPE_CHI elseif mType == ZPDef.SendCardType.ONE_FIVE_TEN then --1.5,10 return {card,card + 4,card + 9},ZPDef.OpType.OP_TYPE_CHI elseif mType == ZPDef.SendCardType.ONE_TWO_THREE then --1,2,3 return {card,card+1,card+2},ZPDef.OpType.OP_TYPE_CHI elseif mType == ZPDef.SendCardType.SHUN_ZI then --顺子 return {card,card+1,card+2},ZPDef.OpType.OP_TYPE_CHI elseif mType == ZPDef.SendCardType.DA_ZI_TWO_AND_ONE then -- 二同牌+同数字其它花色牌 吃操作 if card - 10 > 0 then return {card,card - 16,card - 16},ZPDef.OpType.OP_TYPE_CHI else return {card + 16,card + 16,card},ZPDef.OpType.OP_TYPE_CHI end elseif mType == ZPDef.SendCardType.ZHUANG_ZI then --对子 return {card,card},0 elseif mType == ZPDef.SendCardType.MIX_ZHUANG_ZI then --混对子,如大壹与小一 if card - 10 > 0 then return {card,card - 16},0 else return {card + 16,card},0 end elseif mType == ZPDef.SendCardType.SINGLE_CARD then --单牌 return {card},0 end end --获取操作显示类型 function ZPFunctions.getZPOperationType(mType,isHaveGuo,isChongZhao) local mResult = {} --判断是否有吃 local ret1 = bit32.band(mType,ZPDef.OpCode.OP_CHI_LEFT_SHUN_ZI) local ret2 = bit32.band(mType,ZPDef.OpCode.OP_CHI_MID_SHUN_ZI) local ret3 = bit32.band(mType,ZPDef.OpCode.OP_CHI_RIGHT_SHUN_ZI) local ret4 = bit32.band(mType,ZPDef.OpCode.OP_CHI_DA_ZI_BY_SAME) local ret5 = bit32.band(mType,ZPDef.OpCode.OP_CHI_DA_ZI_BY_MIX) local ret6 = bit32.band(mType,ZPDef.OpCode.OP_CHI_TWO_SEVEN_TEN) local ret7 = bit32.band(mType,ZPDef.OpCode.OP_CHI_ONE_FIVE_TEN) if ret1 > 0 or ret2 > 0 or ret3 > 0 or ret4 > 0 or ret5 > 0 or ret6 > 0 or ret7 > 0 then table.insert(mResult,ZPDef.OpType.OP_TYPE_CHI) end --判断是否有碰 local retPeng = bit32.band(mType,ZPDef.OpCode.OP_PENG) if retPeng > 0 then table.insert(mResult,ZPDef.OpType.OP_TYPE_PENG) end --判断是否有明偎 local retShao = bit32.band(mType,ZPDef.OpCode.OP_MING_SHAO) if retShao > 0 then table.insert(mResult,ZPDef.OpType.OP_TYPE_MINGWEI) end --判断是否有暗偎 local retShao = bit32.band(mType,ZPDef.OpCode.OP_AN_SHAO) if retShao > 0 then table.insert(mResult,ZPDef.OpType.OP_TYPE_ANWEI) end --判断是否有提 local retChuang = bit32.band(mType,ZPDef.OpCode.OP_TI) if retChuang > 0 then table.insert(mResult,ZPDef.OpType.OP_TYPE_TI) end --判断是否有重跑 local retKaiZhao = bit32.band(mType,ZPDef.OpCode.OP_PAO) if retKaiZhao > 0 then if isChongZhao then table.insert(mResult,ZPDef.OpType.OP_TYPE_CHONG_PAO) else table.insert(mResult,ZPDef.OpType.OP_TYPE_PAO) end end --判断是否有胡 local retHu = bit32.band(mType,ZPDef.OpCode.OP_HU) if retHu > 0 then table.insert(mResult,ZPDef.OpType.OP_TYPE_HU) end --默认有过操作 if isHaveGuo then table.insert(mResult,ZPDef.OpType.OP_TYPE_CANCEL) end print("getZiPaiOperationType : "..table.tostring(mResult)) return mResult end --获取吃牌组合牌 function ZPFunctions.getZPEatCardWeave(card,mType) if mType == ZPDef.OpCode.OP_CHI_LEFT_SHUN_ZI then return {card,card + 1,card + 2} elseif mType == ZPDef.OpCode.OP_CHI_MID_SHUN_ZI then return {card,card - 1,card + 1} elseif mType == ZPDef.OpCode.OP_CHI_RIGHT_SHUN_ZI then return {card,card - 2,card - 1} elseif mType == ZPDef.OpCode.OP_CHI_DA_ZI_BY_SAME then if card - 10 > 0 then return {card,card - 16,card - 16} else return {card,card + 16,card + 16} end elseif mType == ZPDef.OpCode.OP_CHI_DA_ZI_BY_MIX then if card - 10 > 0 then return {card,card,card - 16} else return {card,card,card + 16} end elseif mType == ZPDef.OpCode.OP_CHI_TWO_SEVEN_TEN then if card - 10 > 0 then if card == 18 then return {18,23,26} elseif card == 23 then return {23,18,26} elseif card == 26 then return {26,18,23} end else if card == 2 then return {2,7,10} elseif card == 7 then return {7,2,10} elseif card == 10 then return {10,2,7} end end elseif mType == ZPDef.OpCode.OP_CHI_ONE_FIVE_TEN then if card - 10 > 0 then if card == 17 then return {17,21,26} elseif card == 21 then return {21,17,26} elseif card == 26 then return {26,17,21} end else if card == 1 then return {1,5,10} elseif card == 5 then return {5,1,10} elseif card == 10 then return {10,1,5} end end end end --预加载图片 function ZPFunctions.loadSpriteFromFile(fileName) cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile(fileName); end --操作牌放在第一位置 function ZPFunctions.getOpCardFirstList(operationType,list,card) --排序优先操作牌在第一张 if operationType == ZPDef.OpType.OP_TYPE_CHI then local sameCount = 0 for i = 1,3 do if card == list[i] then sameCount = sameCount + 1 end end for i = 1,3 do if card == list[i] then table.remove(list,i) break end end local tt = {} tt[1] = card if sameCount == 2 then tt[2] = card if card < 16 then tt[3] = card + 16 else tt[3] = card - 16 end else tt[2] = list[1] tt[3] = list[2] end list = tt end return list end --根据组合牌获取胡息 function ZPFunctions.getHuXiByList(card,mType) if not card then return end --判断大小写 local isBig = ZPFunctions.getZPCardIsBig(card) local zpTp = (isBig == true) and 2 or 1--小字1 大字2 return ZPDef.SendCardTypeYou[mType][zpTp] end --获取版本号 function ZPFunctions.getZPCurVersion() local versionInfo = ZPFramework.ZPImport("zp_base.luaScript.ZPVersion") return versionInfo.ResourceVersion end --扑克多少张,从1-20,key分别代表小写到大写的1-10,value代表有多少张数 function ZPFunctions.switchToCardIndex(cardData) --设置变量 local cbCardIndex = {} for i = 1,20 do cbCardIndex[i] = 0 end for i = 1,#cardData do if cardData[i] then local index = ZPFunctions.switchToIndex(cardData[i]) cbCardIndex[index] = cbCardIndex[index] + 1 end end return cbCardIndex end --扑克转换 function ZPFunctions.switchToIndex(cbCardData)--返回牌的位置,从小写1-10,大写依次返回11-20 if cbCardData - 10 > 0 then return cbCardData - 16 + 10 else return cbCardData end end --创建一个imageNode function ZPFunctions.createImageNode(fileName) local img = cc.ImageView:createNode() img:loadTextureFromPlist(fileName) return img end --获取创建房间时选择的人数 function ZPFunctions.getCreateRoomPlayerNum() local roomInfo = app.room.roomInfo; local jsonInfo = json.decode(roomInfo.strGameInfo) if jsonInfo then if jsonInfo.playnum == -1 then return 4 else return jsonInfo.playnum or ZPDef.GameConst.ZiPai_GAME_CONST_PLAYER end end return nil end --获取是否是自摸 function ZPFunctions.isZiMo(ty) local ret = getNumBand(ty,ZPDef.HuType.ZI_MO_HU) if ret > 0 then return true end return false end --扑克多少张,从1-20,key分别代表小写到大写的1-10,value代表有多少张数 function ZPFunctions.switchToCardIndexForRecord(cardData) --设置变量 local cbCardIndex = {} cbCardIndex[1] = {} cbCardIndex[2] = {} local cbCardBigCount = 0 local cbCardLittleCount = 0 for i = 1,10 do cbCardIndex[1][i] = 0 --小写 cbCardIndex[2][i] = 0 --大写 end --数组为cbCardIndex【1】小写牌下标有多少张,最后一个为小写总共多少张 --数组为cbCardIndex【2】大写牌下标有多少张,最后一个为大写总共多少张 for i = 1,#cardData do if cardData[i] then local index = ZPFunctions.switchToIndex(cardData[i]) if index > 10 then index = index - 10 end if ZPFunctions.getZPCardIsBig(cardData[i]) then cbCardIndex[2][index] = cbCardIndex[2][index] + 1 else cbCardIndex[1][index] = cbCardIndex[1][index] + 1 end end end for i = 1,10 do if cbCardIndex[1][i] then cbCardLittleCount = cbCardIndex[1][i] + cbCardLittleCount end if cbCardIndex[2][i] then cbCardBigCount = cbCardBigCount + cbCardIndex[2][i] end end cbCardIndex[1][11] = cbCardLittleCount cbCardIndex[2][11] = cbCardBigCount return cbCardIndex end --获取游戏速度,默认使用通用里的一套(快速) function ZPFunctions.getGameSpeed() local roomInfo = app.room.roomInfo; local jsonInfo = json.decode(roomInfo.strGameInfo) if jsonInfo then return jsonInfo.speed end return nil end function ZPFunctions.getClubInviteWanFa( gameId, roomInfo ) local data = json.decode(roomInfo.strGameInfo or "") if data == nil then return "" end local gamerule = data.gamerule or 1 -- 玩法 local roundCount = roomInfo.nTotalGameNum or 0 -- 局数 local gameConfig = getSubGameConfig(gameId) or {} local gameType = gameConfig.GameType or {} local content = string.format("%s局 %s", roundCount, gameType[gamerule] or gameConfig.gameName) return content end function ZPFunctions.isPropFobided( ) if not app.room then return end local roomInfo = app.room.roomInfo or {} local strGameInfo = app.room.roomInfo.strGameInfo or "" local info = json.decode(strGameInfo) or {} local isFobided = info.forbidProp == 1 return isFobided end --- -- 检测语音是否可以使用 -- 亲友圈配置 -- @return -- function ZPFunctions.isVoiceFobided () if not app.room then return end local roomInfo = app.room.roomInfo or {} local strGameInfo = app.room.roomInfo.strGameInfo or "" local info = json.decode(strGameInfo) or {} local isFobided = false if not info.forbidVoice then--此字段没有说明还没有分开控制 return ZPFunctions:isPropFobided () end isFobided = info.forbidVoice == 1 return isFobided end return ZPFunctions