You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

338 lines
9.8 KiB

  1. local wanfa={
  2. playnum={
  3. {name="3人",value=3},
  4. {name="4人",value=4},
  5. {name="5人",value=5},
  6. {name="6人",value=6},
  7. },
  8. isfaststart={
  9. {name="快速成局",value=1},
  10. {name="",value=0,hide=true},
  11. },
  12. limitfan={
  13. {name="3番",value=3},
  14. {name="4番",value=4},
  15. {name="5番",value=5},
  16. },
  17. luobonum={
  18. {name="无萝卜",value=0},
  19. {name="1萝卜",value=1},
  20. {name="2萝卜",value=2},
  21. },
  22. piaomode={
  23. {name="不飘",value=0},
  24. {name="随飘",value=1},
  25. {name="必飘",value=2},
  26. },
  27. dianganghua={
  28. {name="点杠花(点炮)",value=1},
  29. {name="点杠花(自摸)",value=2},
  30. },
  31. zimomode={
  32. {name="自摸加底",value=1},
  33. {name="自摸加番",value=2},
  34. {name="自摸不加",value=0},
  35. },
  36. baojiao = {
  37. {name="报叫",value=1},
  38. {name="",value=0,hide=true},
  39. },
  40. jingoudiao = {
  41. {name="金钩钓",value=1},
  42. {name="",value=0,hide=true},
  43. },
  44. tingpai = {
  45. {name="听牌提示",value=1},
  46. {name="",value=0,hide=true},
  47. },
  48. specrule={
  49. {name="过张升番可胡",value=0x0001},
  50. {name="博自摸",value=0x0002},
  51. },
  52. -- diFenLimit={
  53. -- {name="小于等于%d分加%d",value=1},
  54. -- {name="",value=0,hide=true},
  55. -- },
  56. baseMulti = {
  57. {name = "积分倍数x", value = 0x0001}
  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. specrule="玩法",
  70. playnum="人数",
  71. limitfan="封顶",
  72. luobonum="萝卜",
  73. -- diFenLimit="低分加分",
  74. baseMulti="积分倍数",
  75. forbidProp = "其他",
  76. }
  77. wanfa.ruleText =
  78. {
  79. {
  80. title = "基础规则",
  81. content =
  82. {
  83. "1、人数:3-6人。",
  84. "2、用牌:条和筒二房牌共计72张,起手每家7张牌,庄家8张。",
  85. "3、玩法:可碰、杠、不可吃,可点炮、自摸、一炮多响",
  86. "4、坐庄规则:首局第一个进房间的玩家坐庄,之后由最先胡牌玩家当庄,一炮多响则点炮玩家为庄,流局则摸最后一张牌的玩家当庄。",
  87. "5、最后4张牌必胡——牌堆数量小于4张时不能赌自摸。",
  88. },
  89. },
  90. --[2] =
  91. --[[{
  92. title = "名词解释",
  93. content =
  94. {
  95. "1、刮风(明杠),分为直杠和巴杠。",
  96. " (1)直杠:玩家手中有三张一样的牌,其他玩家打出此牌,该玩家杠。",
  97. " (2)巴杠(面下杠):玩家已经碰出一对牌,又自摸到碰的牌选中杠。",
  98. "2、下雨(暗杠):玩家手中有4张相同的牌选择杠。",
  99. "3、过手胡:在同一回合中,若有人点炮,玩家没有胡牌,则此回合其他玩家点炮,只要没有加番就不能胡,自摸可以胡。",
  100. "4、查大叫:流局时没有听牌的玩家赔给有叫的玩家最大番数,刮风下雨结算(未听牌玩家刮风下雨分数返还)。",
  101. "5、自摸加底:玩家自摸后,除获得相应牌型分后再加1底分。",
  102. "6、自摸加番:玩家自摸后,计算牌型分后,再在该牌型分*2。",
  103. "7、呼叫转移:开杠的人在杠上炮后,杠钱要一井转移给接炮的人,如果杠不结算则不转移。",
  104. "8、杠上花:明暗杠后,补张自摸。",
  105. "9、杠上炮:玩家开杠后放炮。",
  106. }
  107. },
  108. --[3] =
  109. {
  110. title = "胡牌类型",
  111. content =
  112. {
  113. "1、平胡:四坎(除4副刻子)加一对将。",
  114. "2、对对胡:四副刻子加一对将。",
  115. "3、清一色:全部是一种花色的平胡。",
  116. "4、七对:玩家手牌都是对子。",
  117. "5、龙七对:玩家手牌都是对子,并且有一个根儿。",
  118. "6、清大对:清一色+对对胡。",
  119. "7、清七对:清一色+七对。",
  120. "8、清龙七对:清一色+龙七对。",
  121. "9、天胡:庄家起牌就胡牌。",
  122. "10、地胡:只在庄家出的第一张牌为地胡。",
  123. }
  124. },
  125. --[4] =
  126. {
  127. title = "特殊玩法",
  128. content =
  129. {
  130. "1、报叫:可选择报叫,赌自摸,不报。AB玩家均报,相互结算+2番;AB玩家其中1家报,相互结算+1番;AB玩家均不报,相互不加番。",
  131. "2、飘:如果开设房间时选择“不飘”,那么不允许任何人飘;如果开设房间时选择“随飘”,那么每一小局开始前由玩家自己选择是否飘;如果开设房间时选择“必飘”,那么每局每人都是飘家。",
  132. " (1)AB玩家均飘,相互结算+2番",
  133. " (2)AB玩家其中1家飘,相互结算+1番;",
  134. " (3)AB玩家均不飘,相互不加番。",
  135. "3、拔萝卜:",
  136. " (1)一局结束,系统随机抽萝卜牌(如果创建房间选择1个萝卜,那么抽一张;如果创建房间选择2个萝卜,那么抽两张...)。",
  137. " (2)胡牌玩家手牌中(包括碰、胡牌)有一张萝卜牌,则+1分。",
  138. " (3)拔出相同萝卜,萝卜数*2。",
  139. }
  140. },--]]
  141. }
  142. function wanfa.getWanFaInfo(str)
  143. str = str or ""
  144. local tab=json.decode(str)
  145. local temp=""
  146. for k,v in pairs(tab) do
  147. if wanfa[k] then
  148. if k == "playnum" then--and tab["isfaststart"] == 1
  149. temp=temp..""
  150. elseif k == "baseMulti" then
  151. temp=temp..wanfa[k][1].name..v.." "
  152. elseif k == "diFenLimit" and (tab.playnum == 2 or tab.isfaststart==1) then
  153. -- if v > 0 and (tab.diFenAdd and tab.diFenAdd > 0) then
  154. -- for _,data in pairs(wanfa[k]) do
  155. -- if not data.hide then
  156. -- local des = string.format(data.name,v,tab.diFenAdd)
  157. -- temp=temp..des.." "
  158. -- end
  159. -- end
  160. -- else
  161. -- temp=temp.."不加分".." "
  162. -- end
  163. elseif k == "specrule" then
  164. for _,data in pairs(wanfa[k]) do
  165. if not data.hide then
  166. if getNumBand(v,data.value) > 0 then
  167. temp=temp..data.name.." "
  168. end
  169. end
  170. end
  171. else
  172. for _,data in pairs(wanfa[k]) do
  173. if v==data.value and not data.hide then
  174. temp=temp..data.name.." "
  175. end
  176. end
  177. end
  178. end
  179. end
  180. return temp
  181. end
  182. function wanfa.getWanFaInfoTab(str)
  183. str = str or ""
  184. local tab=json.decode(str)
  185. local temp={}
  186. if tab.isfaststart and tab.isfaststart == 1 then
  187. table.insert(temp,wanfa.isfaststart[1].name)
  188. else
  189. if tab.playnum then
  190. for _,data in pairs(wanfa.playnum) do
  191. if tab.playnum==data.value and not data.hide then
  192. table.insert(temp,data.name)
  193. break
  194. end
  195. end
  196. end
  197. end
  198. for k,v in pairs(tab) do
  199. if wanfa[k] then
  200. if k == "baseMulti" then
  201. table.insert(temp,wanfa[k][1].name..v)
  202. elseif k == "diFenLimit" and (tab.playnum == 2 or tab.isfaststart==1) then
  203. -- if v > 0 and (tab.diFenAdd and tab.diFenAdd > 0) then
  204. -- for _,data in pairs(wanfa[k]) do
  205. -- if not data.hide then
  206. -- local des = string.format(data.name,v,tab.diFenAdd)
  207. -- table.insert(temp,des)
  208. -- end
  209. -- end
  210. -- else
  211. -- table.insert(temp,"不加分")
  212. -- end
  213. elseif k == "specrule" then
  214. for _,data in pairs(wanfa[k]) do
  215. if not data.hide then
  216. if getNumBand(v,data.value) > 0 then
  217. table.insert(temp,data.name)
  218. end
  219. end
  220. end
  221. elseif k ~= 'playnum' and k ~= 'isfaststart' then
  222. for _,data in pairs(wanfa[k]) do
  223. if v==data.value and not data.hide then
  224. -- temp=temp..data.name.." "
  225. table.insert(temp,data.name)
  226. end
  227. end
  228. end
  229. end
  230. end
  231. return temp
  232. end
  233. function wanfa.getClubWaFaInfo(str)
  234. str = str or ""
  235. local tab=json.decode(str)
  236. local temp={}
  237. for k,v in pairs(tab) do
  238. if wanfa[k] then
  239. if k == "playnum" and tab["isfaststart"] == 1 then
  240. --temp=temp..""
  241. elseif k == "baseMulti" then
  242. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={wanfa[k][1].name..v}})
  243. elseif k == "diFenLimit" and (tab.playnum == 2 or tab.isfaststart==1) then
  244. -- if v > 0 and (tab.diFenAdd and tab.diFenAdd > 0) then
  245. -- for _,data in pairs(wanfa[k]) do
  246. -- if not data.hide then
  247. -- local des = string.format(data.name,v,tab.diFenAdd)
  248. -- table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={des}})
  249. -- end
  250. -- end
  251. -- else
  252. -- table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={"不加分"}})
  253. -- end
  254. elseif k == "specrule" then
  255. local firstWf = true
  256. for _,data in pairs(wanfa[k]) do
  257. if not data.hide then
  258. if getNumBand(v,data.value) > 0 then
  259. if firstWf then
  260. firstWf = false
  261. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  262. else
  263. table.insert(temp,{name="",value={data.name}})
  264. end
  265. end
  266. end
  267. end
  268. else
  269. for _,data in pairs(wanfa[k]) do
  270. if v==data.value and not data.hide then
  271. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  272. --temp=temp..data.name.." "
  273. end
  274. end
  275. end
  276. end
  277. end
  278. return temp
  279. end
  280. function wanfa.getClubTableWanFaInfo(str)
  281. str = str or ""
  282. local tab=json.decode(str)
  283. local temp=""
  284. for k,v in pairs(tab) do
  285. if wanfa[k] then
  286. if k == "limitfan" or k == "laizinum" or k == "luobonum" then
  287. for _,data in pairs(wanfa[k]) do
  288. if 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. return temp
  297. end
  298. ---
  299. -- 获取亲友圈玩法
  300. -- @param gameId
  301. -- @param jushu
  302. -- @param ruleStr
  303. -- @param arena
  304. -- @return
  305. --
  306. function wanfa.getRuleFromString (gameId, jushu, ruleStr,arena)
  307. local str = wanfa.getClubWaFaInfo(ruleStr, jushu)
  308. return str
  309. end
  310. function wanfa.getClubTableRuleString (gameId, ruleStr, playerNum)
  311. local str = ""
  312. local jsonData=json.decode(ruleStr)
  313. if jsonData.isfaststart == 1 then
  314. str = str .. "快速成局 "
  315. else
  316. if playerNum then
  317. str = str .. playerNum .. "人 "
  318. elseif jsonData.playnum then
  319. str = str .. jsonData.playnum .. "人 "
  320. end
  321. end
  322. local wanfaStr = wanfa.getClubTableWanFaInfo(ruleStr)
  323. str = str .. wanfaStr
  324. return str
  325. end
  326. return wanfa