Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

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