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