Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

391 linhas
11 KiB

  1. local wanfa={
  2. playnum={
  3. {name="4人",value=4},
  4. {name="3人",value=3},
  5. {name="2人",value=2},
  6. },
  7. isfaststart={
  8. {name="快速成局",value=1},
  9. {name="",value=0,hide=true},
  10. },
  11. limitfan={
  12. {name="2番",value=2},
  13. {name="3番",value=3},
  14. {name="4番",value=4},
  15. },
  16. gshmode={
  17. {name="点杠花(点炮)",value=1},
  18. {name="点杠花(自摸)",value=2},
  19. },
  20. playmode={
  21. {name="自摸加底",value=1},
  22. {name="自摸加番",value=2},
  23. {name="自摸不加",value=0},
  24. },
  25. baojiao = {
  26. {name="报叫",value=1},
  27. {name="",value=0,hide=true},
  28. },
  29. swapcard = {
  30. {name="换三张",value=1},
  31. {name="",value=0,hide=true},
  32. },
  33. jdyj = {
  34. {name="幺九将对",value=1},
  35. {name="",value=0,hide=true},
  36. },
  37. mqzz = {
  38. {name="门清中张",value=1},
  39. {name="",value=0,hide=true},
  40. },
  41. tdh = {
  42. {name="天地胡",value=1},
  43. {name="",value=0,hide=true},
  44. },
  45. tingpai = {
  46. {name="听牌提示",value=1},
  47. {name="",value=0,hide=true},
  48. },
  49. specrule={
  50. {name="过张升番可胡",value=0x0001},
  51. {name="博自摸",value=0x0002},
  52. },
  53. diFenLimit={
  54. {name="小于等于%d分加%d",value=1},
  55. {name="",value=0,hide=true},
  56. },
  57. ting = {
  58. {name="听牌提示",value=1},
  59. {name="",value=0,hide=true},
  60. },
  61. duiduihu2fan = {
  62. {name = "对对胡两番", value = 1},
  63. {name = "", value = 0, hide = true}
  64. },
  65. dpcanxiaohu = {
  66. {name = "点炮可平胡", value = 1},
  67. {name = "", value = 0, hide = true}
  68. },
  69. handcard = {
  70. {name = "7张", value = 7},
  71. {name = "10张", value = 10},
  72. {name = "13张", value = 13},
  73. },
  74. baseMulti = {
  75. {name = "积分倍数x", value = 0x0001}
  76. },
  77. forbidProp = {
  78. {name = "屏蔽快捷语与道具", value = 1},
  79. {name = "屏蔽快捷语与道具", value = 0, hide = true},
  80. },
  81. forbidVoice = {
  82. {name = "屏蔽语音", value = 1},
  83. {name = "屏蔽语音", value = 0, hide = true},
  84. },
  85. }
  86. wanfa.clubWanFaTitle={
  87. playmode="玩法",
  88. playnum="人数",
  89. limitfan="封顶",
  90. baseMulti="积分倍数",
  91. forbidProp = "其他",
  92. }
  93. wanfa.ruleText =
  94. {
  95. {
  96. title = "基础规则",
  97. content =
  98. {
  99. "1、人数:3人。",
  100. "2、道具:麻将“筒”“条”“万”共108张。",
  101. "3、玩家胡牌后,其余玩家继续游戏,直到流局或只有一位未胡牌玩家为止。",
  102. "4、三人三房麻将不含“换三张”玩法。",
  103. "5、三人模式下可以选择点炮可平胡,如果没有选择这个选项,胡小胡只能自摸胡。即胡牌分数要大于1倍底分才可胡牌。",
  104. "6、流局时查叫,即未叫玩家要赔偿有叫玩家最大可能番数。",
  105. "7、坐庄规则:上一局最先胡牌玩家当庄,如一炮多响则点炮玩家为庄,流局则此局庄家的下家当庄。",
  106. },
  107. },
  108. --[[{
  109. title = "胡牌类型",
  110. content =
  111. {
  112. "13张模式",
  113. "1、平胡(0番):四坎(除4副刻子)加一对将。",
  114. "2、对对胡(1番或2番):四副刻子加一对将。在对对胡两翻模式下2番,否则1番。",
  115. "3、清一色(2番):全部是一种花色的平胡。",
  116. "4、七对(2番):玩家手牌都是对子,没有碰和刮风下雨。",
  117. "5、龙七对(3番):玩家手牌都是对子,并且有一个根儿,没有碰和刮风下雨。6、清对(3番或4番):清一色+对对胡。在对对胡两翻模式下4番,否则3番",
  118. "6、清七对(4番):清一色+七对",
  119. "7、清龙七对(5番):清一色+龙七对",
  120. "8、全幺九(3番):所有组成的顺子、刻子、将牌里都包含1或9。",
  121. "9、将对(3番):所有牌当中,全部是2、5、8组成的对对胡。",
  122. "10、将七对(4番):所有牌当中,全是2、5、8组成的龙七对。",
  123. "11、门清(1番):胡牌时,没有碰过牌,没有明杠。",
  124. "12、中张(1番):胡牌时所有牌没有一和九。",
  125. "13、夹心五(1番):胡牌时,牌型可以摆成4和6夹一个5的胡牌。比如下面的牌型胡5条时,就是夹心五。",
  126. "",
  127. "10张模式",
  128. "1、平胡(0番):三坎(除3副刻子)加一对将。",
  129. "2、对对胡(1番或2番):三副刻子加一对将。在对对胡两翻模式下2番,否则1番。",
  130. "3、清一色(2番):全部是一种花色的平胡。",
  131. "4、清对(3番或4番):清一色+对对胡。在对对胡两翻模式下4番,否则3番",
  132. "5、全幺九(3番):所有组成的顺子、刻子、将牌里都包含1或9。",
  133. "6、将对(3番):所有牌当中,全部是2、5、8组成的对对胡。",
  134. "",
  135. "7张模式",
  136. "1、平胡(0番):两坎(除2副刻子)加一对将。",
  137. "2、对对胡(1番或2番):两副刻子加一对将。在对对胡两翻模式下2番,否则1番。",
  138. "3、清一色(2番):全部是一种花色的平胡。",
  139. "4、四对(2番):玩家手牌都是对子,没有碰和刮风下雨。",
  140. "5、龙四对(3番):玩家手牌都是对子,并且有一个根儿,没有碰和刮风下雨。6、清对(3番或4番):清一色+对对胡。在对对胡两翻模式下4番,否则3番",
  141. "6、清四对(4番):清一色+四对",
  142. "7、清龙四对(5番):清一色+龙四对",
  143. "8、全幺九(3番):所有组成的顺子、刻子、将牌里都包含1或9。",
  144. "9、将对(3番):所有牌当中,全部是2、5、8组成的对对胡。",
  145. "10、将四对(4番):所有牌当中,全是2、5、8组成的四对。",
  146. }
  147. },
  148. {
  149. title = "算分规则",
  150. content =
  151. {
  152. "番=底金×2 例如:底金为1分,2番=1*2*2=4分 3番=1*2*2*2=8分",
  153. "基本输(赢)积分=番数+刮风下雨+自摸加底(自摸加番玩法则算在总番里)",
  154. "点炮结算方式为1对1,自摸结算方式为1对多。",
  155. "另加番",
  156. "1、根:+1番 所有牌中有4张一样的牌,(无论是否碰、杠),可累计计算。",
  157. "2、杠上开花:+1番",
  158. "3、杠上炮:+1番",
  159. "4、抢杠胡:+1番",
  160. "5、扫底胡:+1番",
  161. "6、金钩胡:+1番",
  162. "7、海底炮:+1番",
  163. "8、天胡:+3番",
  164. "9、地胡:+2番",
  165. "备注:各个牌型不重复计算,只收取最大番。",
  166. }
  167. },--]]
  168. }
  169. function wanfa.getWanFaInfo(str)
  170. local tab=json.decode(str)
  171. local temp=""
  172. for k,v in pairs(tab) do
  173. if wanfa[k] and k ~= "ting" then
  174. if k == "playnum" then--and tab["isfaststart"] == 1
  175. temp=temp..""
  176. elseif k == "baseMulti" then
  177. temp=temp..wanfa[k][1].name..v.." "
  178. elseif k == "diFenLimit" and (tab.playnum == 2 or tab.isfaststart==1) then
  179. if v > 0 and (tab.diFenAdd and tab.diFenAdd > 0) then
  180. for _,data in pairs(wanfa[k]) do
  181. if not data.hide then
  182. local des = string.format(data.name,v,tab.diFenAdd)
  183. temp=temp..des.." "
  184. end
  185. end
  186. else
  187. temp=temp.."不加分".." "
  188. end
  189. elseif k == "specrule" then
  190. for _,data in pairs(wanfa[k]) do
  191. if not data.hide then
  192. if getNumBand(v,data.value) > 0 then
  193. temp=temp..data.name.." "
  194. end
  195. end
  196. end
  197. else
  198. for _,data in pairs(wanfa[k]) do
  199. if v==data.value and not data.hide then
  200. temp=temp..data.name.." "
  201. end
  202. end
  203. end
  204. end
  205. end
  206. return temp
  207. end
  208. function wanfa.getWanFaInfoTab(str)
  209. local tab=json.decode(str)
  210. local temp={}
  211. for k,v in pairs(tab) do
  212. if wanfa[k] and k ~= "ting" then
  213. if k == "playnum" then--and tab["isfaststart"] == 1
  214. -- temp=temp..""
  215. elseif k == "baseMulti" then
  216. table.insert(temp,wanfa[k][1].name..v)
  217. elseif k == "diFenLimit" and (tab.playnum == 2 or tab.isfaststart==1) then
  218. if v > 0 and (tab.diFenAdd and tab.diFenAdd > 0) then
  219. for _,data in pairs(wanfa[k]) do
  220. if not data.hide then
  221. local des = string.format(data.name,v,tab.diFenAdd)
  222. table.insert(temp,des)
  223. end
  224. end
  225. else
  226. table.insert(temp,"不加分")
  227. end
  228. elseif k == "specrule" then
  229. for _,data in pairs(wanfa[k]) do
  230. if not data.hide then
  231. if getNumBand(v,data.value) > 0 then
  232. table.insert(temp,data.name)
  233. end
  234. end
  235. end
  236. else
  237. for _,data in pairs(wanfa[k]) do
  238. if v==data.value and not data.hide then
  239. -- temp=temp..data.name.." "
  240. table.insert(temp,data.name)
  241. end
  242. end
  243. end
  244. end
  245. end
  246. return temp
  247. end
  248. function wanfa.getClubWaFaInfo(str, jushu)
  249. local tab=json.decode(str)
  250. local temp={}
  251. if jushu then
  252. local jushuText = string.format("%d 局", jushu);
  253. table.insert(temp, 1, {name = "局数", value = {jushuText}})
  254. end
  255. local orderList = {
  256. "deductRule",
  257. "playnum",
  258. "limitfan",
  259. "playmode",
  260. "gshmode",
  261. "baojiao",
  262. "swapcard",
  263. "jdyj",
  264. "mqzz",
  265. "tdh",
  266. -- "ting",
  267. "specrule",
  268. -- "diFenLimit",
  269. "duiduihu2fan",
  270. "jiaxinwu",
  271. "dpcanxiaohu",
  272. "tingpai",
  273. "handcard",
  274. "baseMulti",
  275. "forbidProp",
  276. "forbidVoice",
  277. }
  278. for _, key in pairs(orderList) do
  279. if wanfa[key] then
  280. if key == "playnum" and tab["isfaststart"] == 1 then
  281. table.insert(temp, {name = "人数" or "", value={"快速成局"}})
  282. elseif key == "baseMulti" then
  283. table.insert(temp,{name=wanfa.clubWanFaTitle.baseMulti or "",value={wanfa.baseMulti[1].name .. tab.baseMulti}})
  284. elseif key == "diFenLimit" and (tab.playnum == 2 or tab.isfaststart==1) then
  285. if tab[key] and tab[key] > 0 and (tab.diFenAdd and tab.diFenAdd > 0) then
  286. for _,data in pairs(wanfa[key]) do
  287. if not data.hide then
  288. local des = string.format(data.name, tab[key],tab.diFenAdd)
  289. table.insert(temp,{name=wanfa.clubWanFaTitle[key] or "",value={des}})
  290. end
  291. end
  292. else
  293. table.insert(temp,{name=wanfa.clubWanFaTitle[key] or "",value={"不加分"}})
  294. end
  295. elseif key == "specrule" then
  296. local firstWf = true
  297. for _,data in pairs(wanfa[key]) do
  298. if not data.hide then
  299. if tab[key] and getNumBand( tab[key],data.value) > 0 then
  300. if firstWf then
  301. firstWf = false
  302. table.insert(temp,{name=wanfa.clubWanFaTitle[key] or "",value={data.name}})
  303. else
  304. table.insert(temp,{name="",value={data.name}})
  305. end
  306. end
  307. end
  308. end
  309. else
  310. for _,data in pairs(wanfa[key]) do
  311. if tab[key]==data.value and not data.hide then
  312. table.insert(temp,{name=wanfa.clubWanFaTitle[key] or "",value={data.name}})
  313. --temp=temp..data.name.." "
  314. end
  315. end
  316. end
  317. end
  318. end
  319. return temp
  320. end
  321. function wanfa.getClubTableWanFaInfo(str)
  322. local tab=json.decode(str)
  323. local temp=""
  324. for k,v in pairs(tab) do
  325. if wanfa[k] then
  326. if k == "handcard" or k == "limitfan" then
  327. for _,data in pairs(wanfa[k]) do
  328. if v==data.value then
  329. -- table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  330. temp=temp..data.name.." "
  331. end
  332. end
  333. end
  334. end
  335. end
  336. return temp
  337. end
  338. ---
  339. -- 获取亲友圈玩法
  340. -- @param gameId
  341. -- @param jushu
  342. -- @param ruleStr
  343. -- @param arena
  344. -- @return
  345. --
  346. function wanfa.getRuleFromString (gameId, jushu, ruleStr,arena)
  347. local str = wanfa.getClubWaFaInfo(ruleStr, jushu)
  348. return str
  349. end
  350. ---
  351. -- 获取包间多玩法桌子上显示的信息
  352. -- @param gameId
  353. -- @param ruleStr
  354. -- @param playerNum
  355. -- @return
  356. --
  357. function wanfa.getClubTableRuleString (gameId, ruleStr, playerNum)
  358. local str = ""
  359. local jsonData=json.decode(ruleStr)
  360. if jsonData.isfaststart == 1 or jsonData.faststart == 1 then
  361. str = str .. "快速成局 "
  362. else
  363. if playerNum then
  364. str = str .. playerNum .. "人 "
  365. elseif jsonData.playnum then
  366. str = str .. jsonData.playnum .. "人 "
  367. end
  368. end
  369. local wanfaStr = wanfa.getClubTableWanFaInfo(ruleStr)
  370. str = str .. wanfaStr
  371. return str
  372. end
  373. return wanfa