Não pode escolher mais do que 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.

367 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="封顶3番",value=3},
  13. {name="封顶4番",value=4},
  14. {name="封顶5番",value=5},
  15. },
  16. piaomode={
  17. {name="不飘",value=0},
  18. {name="自由飘",value=1},
  19. {name="固定飘",value=2},
  20. },
  21. gamescore={
  22. {name="1+1",value=1},
  23. {name="2+1",value=2},
  24. {name="3+1",value=3},
  25. {name="4+1",value=4},
  26. {name="5+1",value=5},
  27. },--]]
  28. gshmode={
  29. {name="点杠花(点炮)",value=1},
  30. {name="点杠花(自摸)",value=2},
  31. },
  32. twoFang={
  33. {name="",value=0,hide=true},
  34. {name="2人2房",value=1},
  35. },
  36. baojiao = {
  37. {name="报叫",value=1},
  38. {name="",value=0,hide=true},
  39. },
  40. zimomode = {
  41. --{name="自摸不加",value=0},
  42. {name="自摸加番",value=2},
  43. {name="自摸加底",value=1},
  44. },
  45. difen = {
  46. {name = "底分x", value = 0x0001}
  47. },
  48. baseMulti = {
  49. {name = "积分倍数x", value = 0x0001}
  50. },
  51. specRule={
  52. {name="听牌提示",value=0x0001},
  53. {name="换三张",value=0x0002},
  54. {name="定缺",value=0x0004},
  55. {name="比番",value=0x0008},
  56. {name="过张升番胡",value=0x0010},
  57. {name="庄家买马",value=0x0020},
  58. },
  59. forbidProp = {
  60. {name = "屏蔽快捷语与道具", value = 1},
  61. {name = "屏蔽快捷语与道具", value = 0, hide = true},
  62. },
  63. forbidVoice = {
  64. {name = "屏蔽语音", value = 1},
  65. {name = "屏蔽语音", value = 0, hide = true},
  66. },
  67. }
  68. wanfa.clubWanFaTitle={
  69. playnum="人数",
  70. --limitfan="封顶",
  71. difen="底分",
  72. specRule="玩法",
  73. baseMulti="积分倍数",
  74. isfaststart="人数",
  75. forbidProp = "其他",
  76. }
  77. wanfa.RuleText =
  78. {
  79. {
  80. title = "基础规则",
  81. content =
  82. {
  83. "1、人数:4人,庄家发14张牌,闲家13张。",
  84. "2、道具:麻将“万”“筒”“条”“中”“发”“白”共120张。",
  85. "3、玩法:玩家胡牌后,其余玩家继续游戏,直到流局或只有一位未胡牌玩家为止。",
  86. "4、缺一门:胡牌时,手牌最多只有2种花色,否则不可以胡牌。",
  87. "5、查叫:流局时查叫,即未叫玩家要赔偿有叫玩家最大可能番数。",
  88. "6、查花猪:游戏结束后,手上只要有3门牌的玩家即为花猪",
  89. "7、坐庄:上一局最先胡牌玩家当庄,如一炮多响则点炮玩家为庄,流局则此局庄家的下家当庄。",
  90. },
  91. },
  92. --[[{
  93. title = "名词解释",
  94. content =
  95. {
  96. "1、刮风(明杠),分为直杠和巴杠。",
  97. "(1)直杠:玩家手中有三张一样的牌,其他玩家打出此牌,该玩家杠。",
  98. "(2)巴杠(面下杠):玩家已经碰出一对牌,又自摸到碰的牌选中杠。",
  99. "2、下雨(暗杠):玩家手中有4张相同的牌选择杠。",
  100. "3、过手胡:在同一回合中,若有人点炮,玩家没有胡牌,则此回合其他玩家点炮,只要没有加番就不能胡,自摸可以胡。",
  101. "4、查大叫:流局时没有听牌的玩家赔给有叫的玩家最大番数,刮风下雨结算(未听牌玩家刮风下雨分数返还)。",
  102. "5、自摸加底:玩家自摸后,除获得相应牌型分后再加1底分。",
  103. "6、自摸加番:玩家自摸后,计算牌型分后,再在该牌型分*2。",
  104. "7、呼叫转移:开杠的人在杠上炮后,杠钱要一井转移给接炮的人,如果杠不结算则不转移。",
  105. "8、杠上花:明暗杠后,补张自摸。",
  106. "9、杠上炮:玩家开杠后放炮。",
  107. }
  108. },--]]
  109. --[[{
  110. title = "牌型介绍",
  111. content =
  112. {
  113. "1、平胡:四坎(除4副刻子)加一对将。",
  114. "2、边张:只能是1、2胡3和8、9胡7。",
  115. "3、卡张:即胡两张牌中间的一张,如手上有4、6胡卡5;6、8胡卡7。",
  116. "4、单调:手上没有对子,需要调将的叫单调。",
  117. "5、门清:没有吃牌,碰牌,杠牌,全凭自己摸牌上听。",
  118. "6、大对子:手上每坎牌都是三张一样的牌。",
  119. "7、七对:手牌都是对子,没有碰和杠。",
  120. "8、龙七对:手牌都是对子,没有碰和杠,且胡的那张牌有四张。",
  121. "9、清一色:手上全是一门牌、可以包含“中发白”的牌型都叫清一色。",
  122. "10、大三元:中发白每个牌都碰了或者每个含三张牌(及以上)。",
  123. "11、十八学士:所有牌杠后单调。",
  124. }
  125. },--]]
  126. --[[{
  127. title = "番数计算",
  128. content =
  129. {
  130. "1、1番=1分,+1番即+1分,+2番即+2分。",
  131. "2、基本输积分将由番数和飘算出。",
  132. "3、点炮计算方式为1对1,自摸结算方式为1对多。",
  133. "4、另加番:",
  134. "(1)根:+1番,所有牌中有4张一样的牌,(无论是否碰、杠),可以累计计算。",
  135. "(2)杠上花:+1番",
  136. "(3)杠上炮:+1番",
  137. "(4)抢杠胡:+1番",
  138. "(5)扫底胡:+1番",
  139. "(6)海底炮:+1番",
  140. "(7)金钩钓:+1番",
  141. "(8)金钩炮:+1番",
  142. "(9)卡心五:+1番",
  143. "(10)摆牌:+2番",
  144. "(11)摆独张:+5番",
  145. }
  146. },--]]
  147. --[[{
  148. title = "算分规则",
  149. content =
  150. {
  151. "1、番=底分 例如:底分为1分,1番=1分 2番=2分",
  152. "2、计分=平胡2番+牌型番(所有牌型番,可叠加)+另加番",
  153. "3、点炮结算方式为1对1,自摸结算方式为1对多。",
  154. "4、另加番:",
  155. "(1)自摸:+1番",
  156. "(2)中、发、白:碰+1番、明杠+2番、暗杠+3番",
  157. "(3)杠上开花:+5番",
  158. "(4)杠上炮:+5番",
  159. "(5)抢杠胡:+5番",
  160. "(6)金钩钓:+4番,指所有其余牌均已碰(或杠),只留有一张手牌",
  161. "(7)海底胡、海底炮:+5番",
  162. "(8)海底杠上炮:+10番",
  163. }
  164. },--]]
  165. --[[{
  166. title = "特殊规则",
  167. content =
  168. {
  169. "1、摆牌:",
  170. "(1)在叫胡的情况下,可选择摆胡或不摆胡,摆牌后,系统自动出牌。",
  171. "(2)摆牌要把自己要胡的所有牌型亮出,让其他玩家看到,知道摆牌玩家胡什么牌,摆胡家不能更换手上所有的牌,但手上的牌有杠可以杠,摆出来的牌是不能杠。",
  172. "(3)没有摆牌的玩家摸到摆胡玩家的炮牌不能打出。",
  173. "(4)如果一局有2家或3家同时摆胡,且其中1家摸到点炮牌,则必须放炮给另外也摆胡的玩家。这种情况下放炮的玩家所输的摆牌倍数要加2番,如果被放炮玩家普通摆牌,则+4番,如果是摆独张,则+7番。",
  174. "(5)当牌桌剩下12张牌时则不能摆胡,前面已经摆好的可以胡。",
  175. "(6)放炮(自摸)必胡。",
  176. "(7)特殊情况:有一家未摆牌的玩家,手上的牌全部为别的玩家摆胡的炮牌,并且摸上的牌也是的情况下,他可以随意打出一张牌。",
  177. }
  178. },--]]
  179. }
  180. function wanfa.getWanFaInfo(str)
  181. local tab=json.decode(str)
  182. local temp=""
  183. for k,v in pairs(tab) do
  184. if wanfa[k] then
  185. if k == "playnum" and (tab["isfaststart"] == 1 or tab["twoFang"] == 1) then
  186. temp=temp..""
  187. elseif k == "baseMulti" or k == "difen" then
  188. temp=temp..wanfa[k][1].name..v.." "
  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] then
  213. if k == "playnum" and (tab["isfaststart"] == 1 or tab["twoFang"] == 1) then
  214. -- temp=temp..""
  215. elseif k == "baseMulti" or k == "difen" then
  216. table.insert(temp,wanfa[k][1].name..v)
  217. elseif k == "specRule" then
  218. for _,data in pairs(wanfa[k]) do
  219. if not data.hide then
  220. if getNumBand(v,data.value) > 0 then
  221. table.insert(temp,data.name)
  222. end
  223. end
  224. end
  225. else
  226. for _,data in pairs(wanfa[k]) do
  227. if v==data.value and not data.hide then
  228. -- temp=temp..data.name.." "
  229. table.insert(temp,data.name)
  230. end
  231. end
  232. end
  233. end
  234. end
  235. return temp
  236. end
  237. function wanfa.getClubWaFaInfo(str)
  238. local tab=json.decode(str)
  239. local temp={}
  240. if wanfa["limitfan"] then
  241. local limitfanValue = tab.limitfan;
  242. for _,data in pairs(wanfa["limitfan"]) do
  243. if limitfanValue==data.value and not data.hide then
  244. table.insert(temp,{name=wanfa.clubWanFaTitle["limitfan"] or "",value={data.name}});
  245. end
  246. end
  247. end
  248. local isFirstOne = true;
  249. for kk,vv in pairs(wanfa) do
  250. for k,v in pairs(tab) do
  251. if kk == k then
  252. if (k == "playnum" and (tab["isfaststart"] == 1 or tab["twoFang"] == 1)) or k == "limitfan" then
  253. elseif k == "baseMulti" then
  254. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={wanfa[k][1].name..v}})
  255. elseif k == "specRule" then
  256. local firstWf = true
  257. for _,data in pairs(wanfa[k]) do
  258. if not data.hide then
  259. if getNumBand(v,data.value) > 0 then
  260. if firstWf then
  261. firstWf = false
  262. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  263. else
  264. table.insert(temp,{name="",value={data.name}})
  265. end
  266. end
  267. end
  268. end
  269. else
  270. for _,data in pairs(vv) do
  271. if v==data.value and not data.hide then
  272. if isFirstOne then
  273. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "玩法",value={data.name}})
  274. if not wanfa.clubWanFaTitle[k] then
  275. isFirstOne = false;
  276. end
  277. else
  278. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  279. --temp=temp..data.name.." "
  280. end
  281. end
  282. end
  283. end
  284. end
  285. end
  286. end
  287. return temp
  288. end
  289. function wanfa.getClubTableWanFaInfo(str)
  290. local tab=json.decode(str)
  291. local temp=""
  292. for kk,vv in pairs(wanfa) do
  293. for k,v in pairs(tab) do
  294. if kk == k then
  295. if k == "baseMulti" then--or k == "gshmode"
  296. for _,data in pairs(vv) do
  297. if k == "baseMulti" then
  298. temp=temp..data.name..v.." "
  299. elseif v==data.value then
  300. -- table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  301. temp=temp..data.name.." "
  302. end
  303. end
  304. end
  305. end
  306. end
  307. end
  308. return temp
  309. end
  310. ---
  311. -- 获取亲友圈玩法
  312. -- @param gameId
  313. -- @param jushu
  314. -- @param ruleStr
  315. -- @param arena
  316. -- @return
  317. --
  318. function wanfa.getRuleFromString (gameId, jushu, ruleStr,arena)
  319. local str = wanfa.getClubWaFaInfo(ruleStr, jushu)
  320. return str
  321. end
  322. ---
  323. -- 获取包间多玩法桌子上显示的信息
  324. -- @param gameId
  325. -- @param ruleStr
  326. -- @param playerNum
  327. -- @return
  328. --
  329. function wanfa.getClubTableRuleString (gameId, ruleStr, playerNum)
  330. local str = ""
  331. local jsonData=json.decode(ruleStr)
  332. if jsonData.isfaststart == 1 or jsonData.faststart == 1 then
  333. str = str .. "快速成局 "
  334. elseif jsonData.twoFang == 1 then
  335. str = str .. "2人2房 "
  336. else
  337. if playerNum then
  338. str = str .. playerNum .. "人 "
  339. elseif jsonData.playnum then
  340. str = str .. jsonData.playnum .. "人 "
  341. end
  342. end
  343. local wanfaStr = wanfa.getClubTableWanFaInfo(ruleStr)
  344. str = str .. wanfaStr
  345. return str
  346. end
  347. return wanfa