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.

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