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.

276 lines
7.9 KiB

  1. local wanfa={
  2. highLimit={
  3. {name="3番",value=1},
  4. {name="4番",value=0},
  5. {name="5番",value=2},
  6. },
  7. Piaorule={
  8. {name="不漂",value=0},
  9. {name="随漂",value=1},
  10. {name="定漂",value=2},
  11. },
  12. playnum = {
  13. {name="三人玩",value=3},
  14. {name="四人玩",value=4},
  15. {name="快速成局",value=-1},
  16. },
  17. specRule={
  18. {name="十八烂",value=0x0001},
  19. {name="可弯叫",value=0x0002},
  20. {name="占山玩法",value=0x0004},
  21. {name="招吃无叫",value=0x0008},
  22. {name="头当",value=0x0010},
  23. {name="小家自摸加番",value=0x0020},
  24. {name="正吃正打",value=0x0040},
  25. {name="吊锥",value=0x0080},
  26. {name="扯锥",value= 0x0100},
  27. {name="乱吃乱打",value=0x0200},
  28. {name="推当",value=0x0400},
  29. {name="滚番",value=0x0800},
  30. {name="梯番",value=0x1000},
  31. {name="软四根加番",value=0x2000},
  32. },
  33. baseMulti = {
  34. {name = "积分倍数x", value = 0x0001}
  35. },
  36. forbidProp = {
  37. {name = "屏蔽快捷语与道具", value = 1},
  38. {name = "屏蔽快捷语与道具", value = 0, hide = true},
  39. },
  40. forbidVoice = {
  41. {name = "屏蔽聊天", value = 1},
  42. {name = "屏蔽聊天", value = 0, hide = true},
  43. },
  44. }
  45. wanfa.clubWanFaTitle={
  46. playnum = "玩家人数",
  47. Piaorule = "漂",
  48. highLimit = "封顶",
  49. specRule="玩法",
  50. baseMulti="积分倍数",
  51. forbidProp="其他",
  52. forbidVoice="其他",
  53. }
  54. wanfa.RuleText =
  55. {
  56. --[1] =
  57. {
  58. title = "基础规则",
  59. content =
  60. {
  61. "1、人数:3人、4人",
  62. "2、用牌:长牌一套,总共84张牌,21种牌,每种牌4张。",
  63. "3、发牌:庄家18张,两家17张,小家5张。",
  64. },
  65. },
  66. --[2] =
  67. --[[{
  68. title = "游戏玩法",
  69. content =
  70. {
  71. "1.漂:摸牌前选择漂,漂后相互结算的玩家加1分/漂。",
  72. "2.吃:上家打出、翻出的牌以及自己翻出的牌,与自己手牌可组成“点数和等于14”的吃牌组合时,可选择吃,吃的牌需展示至桌面。",
  73. "3.暗:大家起手有3/4张一样的牌,必须暗(系统强制),胡牌时手上不能有暗牌。轮到小家偷牌后,有3/4张一样的可以暗或者过。",
  74. "4.碰:手中有一对牌,其他玩家打/翻出,或自己翻出同样的牌时,可以碰,碰牌后需偷一张牌。",
  75. "5. 垮:对局中,大家碰/垮后偷了一张牌,刚好与手上的对子凑成3张的情况。",
  76. "6. 偷:暗/垮/碰牌后或轮到小家偷牌,玩家从牌墩抓一张牌到手中,不展示给其他玩家看。",
  77. "7. 违规:在有玩家碰了天(/地/丁/斧)的情况下,手中有单张(没有成对,也没成组合)的地(/天/斧/丁),且是曾吃过的牌时,必须打出的情况。若是偷牌后报退打出,则不算违规。",
  78. "8. 胡:手牌和出现的牌全部两两成吃牌组合,且满足胡牌条件,即可胡牌。",
  79. "9. 红十八:没有碰牌的情况下,摆牌和手牌全部成14组合,且全部是红牌(可以有丁点斧头);",
  80. "10. 十八烂:大家原手牌没有2张一样的牌,可直接胡牌;需在创建房间时勾选该玩法;",
  81. "11.招吃无叫:玩家报招吃后,不能胡牌,下次吃碰操作后即可解除招吃无叫的限制。",
  82. "12. 正吃正打:同点数的牌,只能吃红打黑,不能吃红打红,不能吃黑打红。",
  83. "13. 弯叫:玩家换叫,不管够不够点,单次或者多次连续吃牌后变换叫,即为弯叫。",
  84. }
  85. },
  86. --[2] =
  87. {
  88. title = "胡牌结算",
  89. content =
  90. {
  91. "1. 点数计算:(胡牌需满足:庄家20点,闲家18点,小家5点。)",
  92. "单张红牌:1点",
  93. "碰/暗/垮3张红牌:8点,暗4张红牌:10点",
  94. "碰/暗/垮3张黑牌:4点,暗4张黑牌:6点",
  95. "2. 番数计算:",
  96. "(1)大家:",
  97. "①五门红(天、地、人、和、幺四)碰/暗/垮3张1番,原手暗4张2番;",
  98. "②其他牌原手暗4张1番;",
  99. "③十八烂:1番;",
  100. "④红十八:3番;",
  101. "⑤30点:点数≥30,1番;",
  102. "(2)小家:",
  103. "①五门红(天、地、人、和、幺四)碰/暗/垮3张1番,原手暗4张2番;",
  104. "②其他牌原手暗4张1番;",
  105. "③全红/全黑:1番",
  106. "④10点1番,满12点2番,满18点3番",
  107. "⑤自摸1番;",
  108. }
  109. },--]]
  110. }
  111. --获取玩法规则
  112. function wanfa.getRuleInfo(ruleStr)
  113. if not ruleStr then
  114. ruleStr = app.room.roomInfo.strGameInfo
  115. end
  116. --return "luzhouclubwanfa"
  117. local tab=json.decode(ruleStr)
  118. local temp=""
  119. for k,v in pairs(tab) do
  120. if wanfa[k] then
  121. if k == "specRule" then
  122. for _,data in pairs(wanfa[k]) do
  123. if not data.hide then
  124. if getNumBand(v,data.value) > 0 then
  125. temp = temp..data.name.." "
  126. else
  127. if data.value == 0x0002 then
  128. temp = temp.."不可弯叫".." "
  129. end
  130. end
  131. end
  132. end
  133. else
  134. if k == "baseMulti" then
  135. temp = temp .. wanfa.baseMulti[1].name .. v .. " "
  136. else
  137. for _,data in pairs(wanfa[k]) do
  138. if v==data.value and not data.hide then
  139. temp = temp..data.name.." "
  140. end
  141. end
  142. end
  143. end
  144. end
  145. end
  146. return temp
  147. end
  148. --获取茶馆玩法规则
  149. function wanfa.getClubRuleInfo(ruleStr)
  150. if not ruleStr then
  151. ruleStr = app.room.roomInfo.strGameInfo
  152. end
  153. --return "luzhouclubwanfa"
  154. local tab=json.decode(ruleStr)
  155. local temp={}
  156. for k,v in pairs(tab) do
  157. if wanfa[k] then
  158. if k == "specRule" then
  159. for _,data in pairs(wanfa[k]) do
  160. if not data.hide then
  161. if getNumBand(v,data.value) > 0 then
  162. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  163. --只有第一行显示玩法
  164. k = ""
  165. -- 仪陇考考可勾可不勾十八烂 不用默认显示 ljx
  166. --[[ else
  167. if data.value == 0x0001 then
  168. table.insert(temp,{name="",value={data.name}})
  169. k = ""
  170. end--]]
  171. end
  172. end
  173. end
  174. else
  175. if k == "baseMulti" then
  176. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={wanfa.baseMulti[1].name .. v}})
  177. else
  178. for _,data in pairs(wanfa[k]) do
  179. if v==data.value and not data.hide then
  180. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  181. end
  182. end
  183. end
  184. end
  185. end
  186. end
  187. return temp
  188. end
  189. function wanfa.getClubTableWanFaInfo(str)
  190. local tab=json.decode(str)
  191. local temp=""
  192. local tempTab = {}
  193. tempTab["Piaorule"] = tab.Piaorule or 1
  194. tempTab["specRule"] = tab.specRule or 0
  195. for k,v in pairs(tab) do
  196. if wanfa[k] then
  197. if k ~= "playnum" and k ~= "highLimit" then
  198. if k == "specRule" then
  199. local iswanJiao = false
  200. if getNumBand(v,0x0002) > 0 then
  201. iswanJiao = true
  202. end
  203. for _,data in pairs(wanfa[k]) do
  204. if getNumBand(v,data.value) > 0 then
  205. temp=temp..data.name.." "
  206. end
  207. end
  208. if not iswanJiao then
  209. temp=temp.."不可弯叫".." "
  210. end
  211. else
  212. --[[if k == "baseMulti" then
  213. -- temp = temp .. wanfa.baseMulti[1].name .. v .. " "
  214. elseif k == "forbidProp" then
  215. else
  216. for _,data in pairs(wanfa[k]) do
  217. if v==data.value then
  218. temp=temp..data.name.." "
  219. end
  220. end
  221. end--]]
  222. if tab.limitfan then
  223. for k,v in pairs(wanfa.limitfan) do
  224. if tab.limitfan == v.value then
  225. temp = temp..v.name.." "
  226. end
  227. end
  228. end
  229. if tab.swapcard then
  230. for k,v in pairs(wanfa.swapcard) do
  231. if tab.swapcard == v.value then
  232. temp = temp..v.name.." "
  233. end
  234. end
  235. end
  236. end
  237. end
  238. end
  239. end
  240. return temp
  241. end
  242. function wanfa.getRuleFromString (gameId, jushu, ruleStr,arena)
  243. local str = wanfa.getClubRuleInfo(ruleStr, jushu)
  244. return str
  245. end
  246. function wanfa.getClubTableRuleString (gameId, ruleStr, playerNum)
  247. local str = ""
  248. local jsonData=json.decode(ruleStr)
  249. if jsonData.startMode == 1 then
  250. str = "快速成局 "
  251. else
  252. if jsonData.playerNum == 2 then
  253. str = str .. "快速成局 "
  254. else
  255. str = tostring(playerNum) .. "人 "
  256. end
  257. end
  258. local wanfaStr = wanfa.getClubTableWanFaInfo(ruleStr)
  259. str = str .. wanfaStr
  260. return str
  261. end
  262. return wanfa