選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

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