local wanfa={ gamerule = { {name="花麻将-两副牌",value=1}, {name="花麻将-三副牌",value=2}, }, playnum={ {name="4人",value=4}, {name="3人",value=3}, {name="2人",value=2}, }, isfaststart={ {name="快速成局",value=1}, {name="",value=0,hide=true}, }, limitfan={ {name="不封顶",value=-1}, {name="3番",value=3}, {name="4番",value=4}, {name="5番",value=5}, }, piaomode={ {name="不飘",value=0}, {name="随飘",value=1}, {name="必飘",value=2}, }, dianganghua={ {name="点杠花(点炮)", value= 0x01}, {name="点杠花(自摸)", value= 0x02}, }, huluobo = { {name="胡萝卜", value=0x20} }, chaojiluobo = { {name="超级萝卜", value=0x40} }, swapcard = { {name="换三张(同色)", value=0x1000}, {name="不换三张", value=0x2000}, {name="换三张(混色)", value=0x80000} }, luobo = { {name="起始2萝卜", value=0x4000}, {name="起始4萝卜", value=0x8000}, {name="起始6萝卜", value=0x10000} }, tianhuquanhu = { {name="天胡全胡", value=0x20000} }, sirenhuwan = { {name="四人胡完", value=0x40000} }, ShenLong = { {name = "无", value = 0, hide = true}, {name = "神龙10倍", value = 10}, {name = "神龙20倍", value = 20} }, QiDuiQuanHu = { {name = "无", value = 0, hide = true}, {name = "七对全胡(自摸)", value = 1}, {name = "七对全胡(点炮)", value = 2} }, hujiamopai = { {name="胡家摸牌", value=0x04} }, zidonghu = { {name="自动胡", value=0x08} }, feipai = { {name="废牌", value=0x10} }, duogang = { {name="多头杠加番", value = 0x01}, {name="多头加番", value = 0x02} }, mojiahupai = { {name="末家自摸算分", value = 0x100}, }, hujiaqianggang = { {name = "胡家可抢杠", value = 0x200}, }, zhuanshou = { {name = "转手", value = 0x400}, }, noqianggang = { {name = "不可抢杠胡家", value = 0x800}, {name = "不查叫", value = 0}, }, chajiao = { {name = "查叫", value = 1}, {name = "不查叫", value = 0}, }, baseMulti = { {name = "积分倍数x", value = 0x0001} }, forbidProp = { {name = "屏蔽快捷语与道具", value = 1}, {name = "屏蔽快捷语与道具", value = 0, hide = true}, }, forbidVoice = { {name = "屏蔽语音", value = 1}, {name = "屏蔽语音", value = 0, hide = true}, }, } wanfa.clubWanFaTitle={ playnum="人数", limitfan="封顶", baseMulti="积分倍数", forbidProp = "其他", } wanfa.ruleText = { { title = "基础规则", content = { "1、用牌:两副牌,每副牌条和筒72张,共计144张,同一张牌有8张。", " 三副牌,每副牌条和筒108张,共计216张,同一张牌有12张。", "2、打法:不可吃,可碰杠胡。", "3、坐庄:上局最先胡牌玩家坐庄;一炮多响,则最先胡牌的玩家为庄;荒庄,则上局庄家继续坐庄。", "4、碰杠胡顺序:胡>杠>碰。如果同为碰/杠/胡,从出牌的人起,按逆时针顺序优先。", "5、过胡不胡:若玩家放一手牌未胡,则该玩家再次摸、杠、碰牌前,都不能胡。", "6、查叫:未胡牌玩家之间需查叫,即未听牌玩家要赔偿听牌玩家最大可能胡牌番数。", "7、呼叫转移:开杠的人在杠后点炮后,该杠钱要一并转移给接炮的人。", }, }, --[2] = --[[{ title = "胡牌类型", content = { "1、平胡:四坎(除4副刻子)加一对将,0番。", "2、天胡:庄家开局摸到14张牌即胡牌,+2番。", "3、地胡:庄家打出第一张牌给闲家点炮,+1番。", "4、七对:由7对将组成的牌型,+2番。", "5、清一色:全部是一种花色的平胡,+2番。", "6、大对子:全部由刻子、杠加1对将牌组成,+2番。", "7、杠上花:自己杠牌后,摸牌且胡牌,+1番。", "8、杠上炮:玩家杠牌后出的牌,点炮给其他玩家胡牌了,+1番。", "9、抢杠胡:玩家加扛,其他玩家抢胡此牌,算点炮,+1番。", "10、卡二条:1条3条卡2条,+1番。", "11、金钩钓:所有其余牌均已碰/杠,单钓胡牌,+1番。", } }, --[3] = { title = "特殊规则", content = { "1、血流成河", " (1)可多次胡牌;", " (2)已胡牌的玩家不能给其他玩家点炮,但杠上炮或者抢杠胡除外;", " (3)已胡牌的玩家只能对未胡牌玩家收取分数,但杠分和杠上花可以对所有人收取分数;", " (4)若已胡牌玩家再次自摸胡牌,则还能摸一张牌,若还能胡,则继续摸牌,直到不能胡牌为止。", "2、拔萝卜", " (1)游戏开局前翻出4张牌从游戏中去除,为萝卜牌;", " (2)有任意玩家进行杠牌时,就再翻1张萝卜。", "3、飘", " (1)选择“不飘”,那么不允许任何人飘;", " (2)选择“随飘”,那么每一小局开始前由玩家自己选择是否飘;", " (3)选择“必飘”,那么每局每人都是飘家。", "4、报叫", " (1)玩家起手听牌可以选择报叫,报叫+1番。", " (2)报叫后手牌不更换,不可碰牌,不影响叫的情况,可杠。 ", } },--]] } function wanfa.__parseSpecRule (specRule) local tbRules = {}; if getNumBand(specRule, 0x01) > 0 then tbRules.dianganghua = 0x01; end if getNumBand(specRule, 0x02) > 0 then tbRules.dianganghua = 0x02; end if getNumBand(specRule, 0x04) > 0 then tbRules.hujiamopai = 0x04; end if getNumBand(specRule, 0x08) > 0 then tbRules.zidonghu = 0x08; end if getNumBand(specRule, 0x10) > 0 then tbRules.feipai = 0x10; end if getNumBand(specRule, 0x20) > 0 then tbRules.huluobo = 0x20; end if getNumBand(specRule, 0x40) > 0 then tbRules.chaojiluobo = 0x40; end if getNumBand(specRule, 0x100) > 0 then tbRules.mojiahupai = 0x100; end if getNumBand(specRule, 0x200) > 0 then tbRules.hujiaqianggang = 0x200; end if getNumBand(specRule, 0x400) > 0 then tbRules.zhuanshou = 0x400; end if getNumBand(specRule, 0x800) > 0 then tbRules.noqianggang = 0x800; end if getNumBand(specRule, 0x1000) > 0 then tbRules.swapcard = 0x1000; end if getNumBand(specRule, 0x2000) > 0 then tbRules.swapcard = 0x2000; end if getNumBand(specRule, 0x80000) > 0 then tbRules.swapcard = 0x80000; end if getNumBand(specRule, 0x4000) > 0 then tbRules.luobo = 0x4000; end if getNumBand(specRule, 0x8000) > 0 then tbRules.luobo = 0x8000; end if getNumBand(specRule, 0x10000) > 0 then tbRules.luobo = 0x10000; end if getNumBand(specRule, 0x20000) > 0 then tbRules.tianhuquanhu = 0x20000; end if getNumBand(specRule, 0x40000) > 0 then tbRules.sirenhuwan = 0x40000; end return tbRules; end function wanfa.getWanFaInfo(str) local tab=json.decode(str) local temp="" for k,v in pairs(tab) do if wanfa[k] then if k == "playnum" then--and tab["isfaststart"] == 1 temp=temp.."" elseif k == "baseMulti" then temp=temp..wanfa[k][1].name..v.." " elseif k == "ShenLong" or k == "QiDuiQuanHu" then for _,data in pairs(wanfa[k]) do if v==data.value and not data.hide then temp=temp..data.name.." " end end else for _,data in pairs(wanfa[k]) do if v==data.value and not data.hide then temp=temp..data.name.." " end end end end end local specRule = wanfa.__parseSpecRule(tab.specRule or 0); for k,v in pairs(specRule) do for _,data in pairs(wanfa[k] or {}) do if v == data.value and not data.hide then temp=temp..data.name.." " end end end return temp end function wanfa.getWanFaInfoTab(str) local tab=json.decode(str) local temp={} for k,v in pairs(tab) do if wanfa[k] then if k == "playnum" then--and tab["isfaststart"] == 1 -- temp=temp.."" elseif k == "baseMulti" then table.insert(temp,wanfa[k][1].name..v) elseif k == "ShenLong" or k == "QiDuiQuanHu" then for _,data in pairs(wanfa[k]) do if v==data.value and not data.hide then table.insert(temp, data.name) end end else for _,data in pairs(wanfa[k]) do if v==data.value and not data.hide then -- temp=temp..data.name.." " table.insert(temp,data.name) end end end end end local specRule = wanfa.__parseSpecRule(tab.specRule or 0); for k,v in pairs(specRule) do for _,data in pairs(wanfa[k] or {}) do if v == data.value and not data.hide then table.insert(temp,data.name) end end end return temp end function wanfa.getClubWaFaInfo(str) local tab=json.decode(str) local temp={} for k,v in pairs(tab) do if wanfa[k] then if k == "playnum" and tab["isfaststart"] == 1 then --temp=temp.."" elseif k == "baseMulti" then table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={wanfa[k][1].name..v}}) else for _,data in pairs(wanfa[k]) do if v==data.value and not data.hide then table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}}) --temp=temp..data.name.." " end end end end end local specRule = wanfa.__parseSpecRule(tab.specRule or 0); for k,v in pairs(specRule) do for _,data in pairs(wanfa[k] or {}) do if v == data.value and not data.hide then table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}}) end end end return temp end function wanfa.getClubTableWanFaInfo(str) local tab=json.decode(str) local temp="" for k,v in pairs(tab) do if wanfa[k] then if k == "limitfan" or k == "piaomode" then for _,data in pairs(wanfa[k]) do if v==data.value then -- table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}}) temp=temp..data.name.." " end end end end end local specRule = wanfa.__parseSpecRule(tab.specRule or 0); local tmpData = {}; for k,v in pairs(specRule) do if k == "huluobo" or k == "chaojiluobo" then for _,data in pairs(wanfa[k] or {}) do if v == data.value and not data.hide then tmpData[k] = data; end end end end if tmpData["chaojiluobo"] then temp = temp .. tmpData["chaojiluobo"].name .. " "; elseif tmpData["huluobo"] then temp = temp .. tmpData["huluobo"].name .. " "; end return temp end --- -- 获取亲友圈玩法 -- @param gameId -- @param jushu -- @param ruleStr -- @param arena -- @return -- function wanfa.getRuleFromString (gameId, jushu, ruleStr,arena) local str = wanfa.getClubWaFaInfo(ruleStr, jushu) return str end --- -- 获取包间多玩法桌子上显示的信息 -- @param gameId -- @param ruleStr -- @param playerNum -- @return -- function wanfa.getClubTableRuleString (gameId, ruleStr, playerNum) local str = "" local jsonData=json.decode(ruleStr) if jsonData.isfaststart == 1 then str = str .. "快速成局 " else if playerNum then str = str .. playerNum .. "人 " elseif jsonData.playnum then str = str .. jsonData.playnum .. "人 " end end local wanfaStr = wanfa.getClubTableWanFaInfo(ruleStr) str = str .. wanfaStr return str end return wanfa