|
- 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
|