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

432 行
11 KiB

  1. local wanfa={
  2. gamerule = {
  3. {name="花麻将-两副牌",value=1},
  4. {name="花麻将-三副牌",value=2},
  5. },
  6. playnum={
  7. {name="4人",value=4},
  8. {name="3人",value=3},
  9. {name="2人",value=2},
  10. },
  11. isfaststart={
  12. {name="快速成局",value=1},
  13. {name="",value=0,hide=true},
  14. },
  15. limitfan={
  16. {name="不封顶",value=-1},
  17. {name="3番",value=3},
  18. {name="4番",value=4},
  19. {name="5番",value=5},
  20. },
  21. piaomode={
  22. {name="不飘",value=0},
  23. {name="随飘",value=1},
  24. {name="必飘",value=2},
  25. },
  26. dianganghua={
  27. {name="点杠花(点炮)", value= 0x01},
  28. {name="点杠花(自摸)", value= 0x02},
  29. },
  30. huluobo = {
  31. {name="胡萝卜", value=0x20}
  32. },
  33. chaojiluobo = {
  34. {name="超级萝卜", value=0x40}
  35. },
  36. swapcard = {
  37. {name="换三张(同色)", value=0x1000},
  38. {name="不换三张", value=0x2000},
  39. {name="换三张(混色)", value=0x80000}
  40. },
  41. luobo = {
  42. {name="起始2萝卜", value=0x4000},
  43. {name="起始4萝卜", value=0x8000},
  44. {name="起始6萝卜", value=0x10000}
  45. },
  46. tianhuquanhu = {
  47. {name="天胡全胡", value=0x20000}
  48. },
  49. sirenhuwan = {
  50. {name="四人胡完", value=0x40000}
  51. },
  52. ShenLong = {
  53. {name = "无", value = 0, hide = true},
  54. {name = "神龙10倍", value = 10},
  55. {name = "神龙20倍", value = 20}
  56. },
  57. QiDuiQuanHu = {
  58. {name = "无", value = 0, hide = true},
  59. {name = "七对全胡(自摸)", value = 1},
  60. {name = "七对全胡(点炮)", value = 2}
  61. },
  62. hujiamopai = {
  63. {name="胡家摸牌", value=0x04}
  64. },
  65. zidonghu = {
  66. {name="自动胡", value=0x08}
  67. },
  68. feipai = {
  69. {name="废牌", value=0x10}
  70. },
  71. duogang = {
  72. {name="多头杠加番", value = 0x01},
  73. {name="多头加番", value = 0x02}
  74. },
  75. mojiahupai = {
  76. {name="末家自摸算分", value = 0x100},
  77. },
  78. hujiaqianggang = {
  79. {name = "胡家可抢杠", value = 0x200},
  80. },
  81. zhuanshou = {
  82. {name = "转手", value = 0x400},
  83. },
  84. noqianggang = {
  85. {name = "不可抢杠胡家", value = 0x800},
  86. {name = "不查叫", value = 0},
  87. },
  88. chajiao = {
  89. {name = "查叫", value = 1},
  90. {name = "不查叫", value = 0},
  91. },
  92. baseMulti = {
  93. {name = "积分倍数x", value = 0x0001}
  94. },
  95. forbidProp = {
  96. {name = "屏蔽快捷语与道具", value = 1},
  97. {name = "屏蔽快捷语与道具", value = 0, hide = true},
  98. },
  99. forbidVoice = {
  100. {name = "屏蔽语音", value = 1},
  101. {name = "屏蔽语音", value = 0, hide = true},
  102. },
  103. }
  104. wanfa.clubWanFaTitle={
  105. playnum="人数",
  106. limitfan="封顶",
  107. baseMulti="积分倍数",
  108. forbidProp = "其他",
  109. }
  110. wanfa.ruleText =
  111. {
  112. {
  113. title = "基础规则",
  114. content =
  115. {
  116. "1、用牌:两副牌,每副牌条和筒72张,共计144张,同一张牌有8张。",
  117. " 三副牌,每副牌条和筒108张,共计216张,同一张牌有12张。",
  118. "2、打法:不可吃,可碰杠胡。",
  119. "3、坐庄:上局最先胡牌玩家坐庄;一炮多响,则最先胡牌的玩家为庄;荒庄,则上局庄家继续坐庄。",
  120. "4、碰杠胡顺序:胡>杠>碰。如果同为碰/杠/胡,从出牌的人起,按逆时针顺序优先。",
  121. "5、过胡不胡:若玩家放一手牌未胡,则该玩家再次摸、杠、碰牌前,都不能胡。",
  122. "6、查叫:未胡牌玩家之间需查叫,即未听牌玩家要赔偿听牌玩家最大可能胡牌番数。",
  123. "7、呼叫转移:开杠的人在杠后点炮后,该杠钱要一并转移给接炮的人。",
  124. },
  125. },
  126. --[2] =
  127. --[[{
  128. title = "胡牌类型",
  129. content =
  130. {
  131. "1、平胡:四坎(除4副刻子)加一对将,0番。",
  132. "2、天胡:庄家开局摸到14张牌即胡牌,+2番。",
  133. "3、地胡:庄家打出第一张牌给闲家点炮,+1番。",
  134. "4、七对:由7对将组成的牌型,+2番。",
  135. "5、清一色:全部是一种花色的平胡,+2番。",
  136. "6、大对子:全部由刻子、杠加1对将牌组成,+2番。",
  137. "7、杠上花:自己杠牌后,摸牌且胡牌,+1番。",
  138. "8、杠上炮:玩家杠牌后出的牌,点炮给其他玩家胡牌了,+1番。",
  139. "9、抢杠胡:玩家加扛,其他玩家抢胡此牌,算点炮,+1番。",
  140. "10、卡二条:1条3条卡2条,+1番。",
  141. "11、金钩钓:所有其余牌均已碰/杠,单钓胡牌,+1番。",
  142. }
  143. },
  144. --[3] =
  145. {
  146. title = "特殊规则",
  147. content =
  148. {
  149. "1、血流成河",
  150. " (1)可多次胡牌;",
  151. " (2)已胡牌的玩家不能给其他玩家点炮,但杠上炮或者抢杠胡除外;",
  152. " (3)已胡牌的玩家只能对未胡牌玩家收取分数,但杠分和杠上花可以对所有人收取分数;",
  153. " (4)若已胡牌玩家再次自摸胡牌,则还能摸一张牌,若还能胡,则继续摸牌,直到不能胡牌为止。",
  154. "2、拔萝卜",
  155. " (1)游戏开局前翻出4张牌从游戏中去除,为萝卜牌;",
  156. " (2)有任意玩家进行杠牌时,就再翻1张萝卜。",
  157. "3、飘",
  158. " (1)选择“不飘”,那么不允许任何人飘;",
  159. " (2)选择“随飘”,那么每一小局开始前由玩家自己选择是否飘;",
  160. " (3)选择“必飘”,那么每局每人都是飘家。",
  161. "4、报叫",
  162. " (1)玩家起手听牌可以选择报叫,报叫+1番。",
  163. " (2)报叫后手牌不更换,不可碰牌,不影响叫的情况,可杠。 ",
  164. }
  165. },--]]
  166. }
  167. function wanfa.__parseSpecRule (specRule)
  168. local tbRules = {};
  169. if getNumBand(specRule, 0x01) > 0 then
  170. tbRules.dianganghua = 0x01;
  171. end
  172. if getNumBand(specRule, 0x02) > 0 then
  173. tbRules.dianganghua = 0x02;
  174. end
  175. if getNumBand(specRule, 0x04) > 0 then
  176. tbRules.hujiamopai = 0x04;
  177. end
  178. if getNumBand(specRule, 0x08) > 0 then
  179. tbRules.zidonghu = 0x08;
  180. end
  181. if getNumBand(specRule, 0x10) > 0 then
  182. tbRules.feipai = 0x10;
  183. end
  184. if getNumBand(specRule, 0x20) > 0 then
  185. tbRules.huluobo = 0x20;
  186. end
  187. if getNumBand(specRule, 0x40) > 0 then
  188. tbRules.chaojiluobo = 0x40;
  189. end
  190. if getNumBand(specRule, 0x100) > 0 then
  191. tbRules.mojiahupai = 0x100;
  192. end
  193. if getNumBand(specRule, 0x200) > 0 then
  194. tbRules.hujiaqianggang = 0x200;
  195. end
  196. if getNumBand(specRule, 0x400) > 0 then
  197. tbRules.zhuanshou = 0x400;
  198. end
  199. if getNumBand(specRule, 0x800) > 0 then
  200. tbRules.noqianggang = 0x800;
  201. end
  202. if getNumBand(specRule, 0x1000) > 0 then
  203. tbRules.swapcard = 0x1000;
  204. end
  205. if getNumBand(specRule, 0x2000) > 0 then
  206. tbRules.swapcard = 0x2000;
  207. end
  208. if getNumBand(specRule, 0x80000) > 0 then
  209. tbRules.swapcard = 0x80000;
  210. end
  211. if getNumBand(specRule, 0x4000) > 0 then
  212. tbRules.luobo = 0x4000;
  213. end
  214. if getNumBand(specRule, 0x8000) > 0 then
  215. tbRules.luobo = 0x8000;
  216. end
  217. if getNumBand(specRule, 0x10000) > 0 then
  218. tbRules.luobo = 0x10000;
  219. end
  220. if getNumBand(specRule, 0x20000) > 0 then
  221. tbRules.tianhuquanhu = 0x20000;
  222. end
  223. if getNumBand(specRule, 0x40000) > 0 then
  224. tbRules.sirenhuwan = 0x40000;
  225. end
  226. return tbRules;
  227. end
  228. function wanfa.getWanFaInfo(str)
  229. local tab=json.decode(str)
  230. local temp=""
  231. for k,v in pairs(tab) do
  232. if wanfa[k] then
  233. if k == "playnum" then--and tab["isfaststart"] == 1
  234. temp=temp..""
  235. elseif k == "baseMulti" then
  236. temp=temp..wanfa[k][1].name..v.." "
  237. elseif k == "ShenLong" or k == "QiDuiQuanHu" then
  238. for _,data in pairs(wanfa[k]) do
  239. if v==data.value and not data.hide then
  240. temp=temp..data.name.." "
  241. end
  242. end
  243. else
  244. for _,data in pairs(wanfa[k]) do
  245. if v==data.value and not data.hide then
  246. temp=temp..data.name.." "
  247. end
  248. end
  249. end
  250. end
  251. end
  252. local specRule = wanfa.__parseSpecRule(tab.specRule or 0);
  253. for k,v in pairs(specRule) do
  254. for _,data in pairs(wanfa[k] or {}) do
  255. if v == data.value and not data.hide then
  256. temp=temp..data.name.." "
  257. end
  258. end
  259. end
  260. return temp
  261. end
  262. function wanfa.getWanFaInfoTab(str)
  263. local tab=json.decode(str)
  264. local temp={}
  265. for k,v in pairs(tab) do
  266. if wanfa[k] then
  267. if k == "playnum" then--and tab["isfaststart"] == 1
  268. -- temp=temp..""
  269. elseif k == "baseMulti" then
  270. table.insert(temp,wanfa[k][1].name..v)
  271. elseif k == "ShenLong" or k == "QiDuiQuanHu" then
  272. for _,data in pairs(wanfa[k]) do
  273. if v==data.value and not data.hide then
  274. table.insert(temp, data.name)
  275. end
  276. end
  277. else
  278. for _,data in pairs(wanfa[k]) do
  279. if v==data.value and not data.hide then
  280. -- temp=temp..data.name.." "
  281. table.insert(temp,data.name)
  282. end
  283. end
  284. end
  285. end
  286. end
  287. local specRule = wanfa.__parseSpecRule(tab.specRule or 0);
  288. for k,v in pairs(specRule) do
  289. for _,data in pairs(wanfa[k] or {}) do
  290. if v == data.value and not data.hide then
  291. table.insert(temp,data.name)
  292. end
  293. end
  294. end
  295. return temp
  296. end
  297. function wanfa.getClubWaFaInfo(str)
  298. local tab=json.decode(str)
  299. local temp={}
  300. for k,v in pairs(tab) do
  301. if wanfa[k] then
  302. if k == "playnum" and tab["isfaststart"] == 1 then
  303. --temp=temp..""
  304. elseif k == "baseMulti" then
  305. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={wanfa[k][1].name..v}})
  306. else
  307. for _,data in pairs(wanfa[k]) do
  308. if v==data.value and not data.hide then
  309. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  310. --temp=temp..data.name.." "
  311. end
  312. end
  313. end
  314. end
  315. end
  316. local specRule = wanfa.__parseSpecRule(tab.specRule or 0);
  317. for k,v in pairs(specRule) do
  318. for _,data in pairs(wanfa[k] or {}) do
  319. if v == data.value and not data.hide then
  320. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  321. end
  322. end
  323. end
  324. return temp
  325. end
  326. function wanfa.getClubTableWanFaInfo(str)
  327. local tab=json.decode(str)
  328. local temp=""
  329. for k,v in pairs(tab) do
  330. if wanfa[k] then
  331. if k == "limitfan" or k == "piaomode" then
  332. for _,data in pairs(wanfa[k]) do
  333. if v==data.value then
  334. -- table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  335. temp=temp..data.name.." "
  336. end
  337. end
  338. end
  339. end
  340. end
  341. local specRule = wanfa.__parseSpecRule(tab.specRule or 0);
  342. local tmpData = {};
  343. for k,v in pairs(specRule) do
  344. if k == "huluobo" or k == "chaojiluobo" then
  345. for _,data in pairs(wanfa[k] or {}) do
  346. if v == data.value and not data.hide then
  347. tmpData[k] = data;
  348. end
  349. end
  350. end
  351. end
  352. if tmpData["chaojiluobo"] then
  353. temp = temp .. tmpData["chaojiluobo"].name .. " ";
  354. elseif tmpData["huluobo"] then
  355. temp = temp .. tmpData["huluobo"].name .. " ";
  356. end
  357. return temp
  358. end
  359. ---
  360. -- 获取亲友圈玩法
  361. -- @param gameId
  362. -- @param jushu
  363. -- @param ruleStr
  364. -- @param arena
  365. -- @return
  366. --
  367. function wanfa.getRuleFromString (gameId, jushu, ruleStr,arena)
  368. local str = wanfa.getClubWaFaInfo(ruleStr, jushu)
  369. return str
  370. end
  371. ---
  372. -- 获取包间多玩法桌子上显示的信息
  373. -- @param gameId
  374. -- @param ruleStr
  375. -- @param playerNum
  376. -- @return
  377. --
  378. function wanfa.getClubTableRuleString (gameId, ruleStr, playerNum)
  379. local str = ""
  380. local jsonData=json.decode(ruleStr)
  381. if jsonData.isfaststart == 1 then
  382. str = str .. "快速成局 "
  383. else
  384. if playerNum then
  385. str = str .. playerNum .. "人 "
  386. elseif jsonData.playnum then
  387. str = str .. jsonData.playnum .. "人 "
  388. end
  389. end
  390. local wanfaStr = wanfa.getClubTableWanFaInfo(ruleStr)
  391. str = str .. wanfaStr
  392. return str
  393. end
  394. return wanfa