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.

248 lines
7.1 KiB

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