Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

353 rader
9.5 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="5番",value=5},
  13. {name="6番",value=6},
  14. },
  15. piaomode={
  16. {name="不飘",value=0},
  17. {name="随飘",value=1},
  18. {name="定飘",value=2},
  19. },
  20. jingnum={
  21. {name="4听用",value=4},
  22. {name="8听用",value=8},
  23. {name="11听用",value=11},
  24. },
  25. -- jingelevenrule={
  26. -- {name="2番起胡", value= 0x01},
  27. -- {name="无听用加3番", value= 0x02},
  28. -- },
  29. fan2qihu = {
  30. {name = '2番起胡', value = 0x01},
  31. },
  32. jia3fan = {
  33. {name = '无听用加3番', value = 0x02},
  34. },
  35. humode={
  36. {name="点炮胡", value= 2},
  37. {name="自摸胡", value= 1},
  38. },
  39. -- specialrule={
  40. -- {name="定缺", value= 0x01},
  41. -- {name="天胡满贯", value= 0x02},
  42. -- },
  43. dingque = {
  44. {name = '定缺', value = 0x01},
  45. },
  46. tianhumanguan = {
  47. {name = '天胡满贯', value = 0x02},
  48. },
  49. baseMulti = {
  50. ["1"] = "积分倍数x"
  51. },
  52. forbidProp = {
  53. {name = "屏蔽快捷语与道具", value = 1},
  54. {name = "屏蔽快捷语与道具", value = 0, hide = true},
  55. },
  56. forbidVoice = {
  57. {name = "屏蔽语音", value = 1},
  58. {name = "屏蔽语音", value = 0, hide = true},
  59. },
  60. }
  61. wanfa.clubWanFaTitle={
  62. playnum = "人数",
  63. isfaststart = '人数',
  64. limitfan = "封顶",
  65. piaomode ='玩法',
  66. baseMulti="积分倍数",
  67. forbidProp = "其他",
  68. }
  69. wanfa.ruleText =
  70. {
  71. {
  72. title = "基础规则",
  73. content =
  74. {
  75. '1、用牌:筒、条、万3种花色,共108张牌。',
  76. '2、打法:可碰、可杠、自摸/点炮。',
  77. '3、坐庄:上局最先胡牌玩家坐庄,若一炮多响,则点炮玩家坐庄,流局则上局庄家继续坐庄。',
  78. '4、缺一门:必须要打缺之后才能胡牌,即胡牌最多只有两种花色,否则为花猪,系统默认有定缺牌时,必须出定缺牌。',
  79. '5、血战:玩家胡牌后,其余玩家继续游戏。',
  80. '6、查大叫:流局时,检查玩家是否下叫,未下叫玩家(花猪除外)要赔付已下叫的玩家最大可能番数。',
  81. },
  82. },
  83. --[2] =
  84. --[[{
  85. title = "胡牌类型",
  86. content =
  87. {
  88. '1、平胡:四坎牌(除四副刻子)加一对将。',
  89. '2、对对胡:四副刻子加一对将。',
  90. '3、清一色:全部是一种花色的平胡。',
  91. '4、七对:玩家手牌都是两张一对的,没有碰和杠。',
  92. '5、龙七对:牌型为七对,但玩家手中有四张一样的牌(没有杠出)。只能算一个龙七对,其他的算根。',
  93. '6、清对:清一色+对对胡。',
  94. '7、清七对:清一色+七对。',
  95. '8、清龙七对:清一色+龙七对。',
  96. }
  97. },
  98. --[3] =
  99. {
  100. title = "特殊规则",
  101. content =
  102. {
  103. '1、飘:牌局开始前玩家选择“飘”或“不飘”来决定加倍与否。',
  104. '2、本金:牌局开始时,庄家在尾家摸完牌后,将接下来的那张牌翻开,翻开的这张牌叫本金。',
  105. '3、听用: “听用”牌可以代替其他任意牌,即癞子的作用,不可被打出。',
  106. '4、飞:听用牌可以代替其他牌进行碰的操作,即用一张听用牌和一张与对手打出相同的牌碰对手打出的牌,称为“飞”。',
  107. '5、提:“飞”牌后,若摸到碰牌中的非听用牌,则可进行“提”操作,用摸到的牌把听用牌提出来,重新交换到手牌中。',
  108. '6、根:四张相同的牌未开杠,与听用牌组成的四张相同的牌也算,为一根。',
  109. '7、杠:只有纯四张相同的牌才能进行杠操作,含听用牌的不行,明/暗/补杠,都需要亮出来给别人看,有杠胡牌可加番。',
  110. }
  111. },--]]
  112. }
  113. function wanfa.__parseTingRule(tingRule)
  114. local tbRules = {};
  115. if getNumBand(tingRule, 0x01) > 0 then
  116. tbRules.fan2qihu = 0x01
  117. end
  118. if getNumBand(tingRule, 0x02) > 0 then
  119. tbRules.jia3fan = 0x02
  120. end
  121. return tbRules;
  122. end
  123. function wanfa.__parseSpecRule (specialrule)
  124. local tbRules = {};
  125. if getNumBand(specialrule, 0x01) > 0 then
  126. tbRules.dingque = 0x01
  127. end
  128. if getNumBand(specialrule, 0x02) > 0 then
  129. tbRules.tianhumanguan = 0x02
  130. end
  131. return tbRules;
  132. end
  133. -- 小结算的规则显示
  134. function wanfa.getWanFaInfo(str)
  135. local tab=json.decode(str)
  136. local temp=""
  137. for k,v in pairs(tab) do
  138. if wanfa[k] then
  139. if k == "playnum" then--and tab["isfaststart"] == 1
  140. temp=temp..""
  141. else
  142. for _,data in pairs(wanfa[k]) do
  143. if v==data.value and not data.hide then
  144. temp=temp..data.name.." "
  145. end
  146. end
  147. end
  148. end
  149. end
  150. local specialrule = wanfa.__parseSpecRule(tab.specialrule or 0);
  151. for k,v in pairs(specialrule) do
  152. for _,data in pairs(wanfa[k] or {}) do
  153. if v == data.value and not data.hide then
  154. temp=temp..data.name.." "
  155. end
  156. end
  157. end
  158. local jingelevenrule = wanfa.__parseTingRule(tab.jingelevenrule or 0);
  159. for k,v in pairs(jingelevenrule) do
  160. for _,data in pairs(wanfa[k] or {}) do
  161. if v == data.value and not data.hide then
  162. temp=temp..data.name.." "
  163. end
  164. end
  165. end
  166. return temp
  167. end
  168. -- 房间规则显示
  169. function wanfa.getWanFaInfoTab(str)
  170. local tab=json.decode(str)
  171. local temp={}
  172. for k,v in pairs(tab) do
  173. if wanfa[k] then
  174. if k == "playnum" then--and tab["isfaststart"] == 1
  175. -- temp=temp..""
  176. else
  177. for _,data in pairs(wanfa[k]) do
  178. if v==data.value and not data.hide then
  179. -- temp=temp..data.name.." "
  180. table.insert(temp,data.name)
  181. end
  182. end
  183. end
  184. end
  185. end
  186. -- 听用规则
  187. if tab.jingelevenrule and tab.jingelevenrule ~= 0 then
  188. local jingelevenrule = wanfa.__parseTingRule(tab.jingelevenrule or 0);
  189. for k,v in pairs(jingelevenrule) do
  190. for _,data in pairs(wanfa[k] or {}) do
  191. if v == data.value and not data.hide then
  192. table.insert(temp,data.name)
  193. end
  194. end
  195. end
  196. end
  197. -- 特殊规则
  198. local specialrule = wanfa.__parseSpecRule(tab.specialrule or 0);
  199. for k,v in pairs(specialrule) do
  200. for _,data in pairs(wanfa[k] or {}) do
  201. if v == data.value and not data.hide then
  202. table.insert(temp,data.name)
  203. end
  204. end
  205. end
  206. if tab.baseMulti and tab.baseMulti > 0 then
  207. table.insert(temp, wanfa.baseMulti['1']..tab.baseMulti)
  208. end
  209. if tab.forbidProp and tab.forbidProp > 0 then
  210. table.insert(temp, wanfa.forbidProp['1'])
  211. end
  212. if tab.forbidVoice and tab.forbidVoice > 0 then
  213. table.insert(temp, wanfa.forbidVoice['1'])
  214. end
  215. return temp
  216. end
  217. -- 俱乐部的包间玩法显示
  218. function wanfa.getClubWaFaInfo(str)
  219. local tab=json.decode(str)
  220. local temp={}
  221. -- 根据顺序显示(局数,房费,人数,封顶,玩法(飘,听用,胡牌,定缺,天胡满贯)),通过位运算的需要另外添加
  222. local t = { 'playnum', 'isfaststart', 'limitfan', 'piaomode', 'jingnum', 'humode', 'forbidProp','forbidVoice',}
  223. -- 如果有快开,那么不显示具体人数,直接杀出
  224. if tab.isfaststart == 1 then
  225. tab.playnum = nil
  226. end
  227. for _, v in ipairs(t) do
  228. if wanfa[v] and tab[v] then
  229. local value = tab[v] -- 选择的值
  230. local ruleTab = wanfa[v] -- 上面定义的规则表
  231. for _, j in pairs(ruleTab) do
  232. if value == j.value and not j.hide then
  233. table.insert(temp, {name = wanfa.clubWanFaTitle[v] or "", value = {j.name}, })
  234. break
  235. end
  236. end
  237. end
  238. end
  239. local specialrule = wanfa.__parseSpecRule(tab.specialrule or 0);
  240. for k,v in pairs(specialrule) do
  241. for _,data in pairs(wanfa[k] or {}) do
  242. if v == data.value and not data.hide then
  243. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  244. end
  245. end
  246. end
  247. local jingelevenrule = wanfa.__parseTingRule(tab.jingelevenrule or 0);
  248. for k,v in pairs(jingelevenrule) do
  249. for _,data in pairs(wanfa[k] or {}) do
  250. if v == data.value and not data.hide then
  251. table.insert(temp,{name=wanfa.clubWanFaTitle[k] or "",value={data.name}})
  252. end
  253. end
  254. end
  255. if tab.baseMulti and tab.baseMulti > 0 then
  256. table.insert(temp, {name = wanfa.clubWanFaTitle.baseMulti, value = {wanfa.baseMulti["1"] .. tab.baseMulti}})
  257. end
  258. return temp
  259. end
  260. -- 俱乐部规则,包间模式下的桌子显示(人数,封顶番数,飘的情况,胡牌规则)
  261. function wanfa.getClubTableWanFaInfo(str)
  262. local tab=json.decode(str)
  263. local str = ""
  264. local temp = { 'limitfan', 'piaomode', 'humode' } -- 待拼接的字段,不需要人数,人数在另一边有拼接
  265. for i, v in ipairs(temp) do
  266. if tab[v] and wanfa[v] then -- 如果有此规则,并且已有定义
  267. local value = tab[v] -- 选择的值
  268. local ruleTab = wanfa[v] -- 上面定义的规则表
  269. for _, j in pairs(ruleTab) do
  270. if value == j.value then
  271. str = str .. j.name .. ' '
  272. break
  273. end
  274. end
  275. end
  276. end
  277. -- local specialrule = wanfa.__parseSpecRule(tab.specialrule or 0);
  278. -- for i, v in pairs(specialrule) do
  279. -- if wanfa[i] then
  280. -- local ruleTab = wanfa[i]
  281. -- for _, j in pairs(ruleTab) do
  282. -- if v == j.value then
  283. -- str = str .. j.name .. ' '
  284. -- break
  285. -- end
  286. -- end
  287. -- end
  288. -- end
  289. return str
  290. end
  291. function wanfa.getRuleFromString (gameId, jushu, ruleStr,arena)
  292. local str = wanfa.getClubWaFaInfo(ruleStr, jushu)
  293. return str
  294. end
  295. function wanfa.getClubTableRuleString (gameId, ruleStr, playerNum)
  296. local str = ""
  297. local jsonData=json.decode(ruleStr)
  298. if jsonData.isfaststart == 1 then
  299. str = str .. "快速成局 "
  300. else
  301. if playerNum then
  302. str = str .. playerNum .. "人 "
  303. elseif jsonData.playnum then
  304. str = str .. jsonData.playnum .. "人 "
  305. end
  306. end
  307. local wanfaStr = wanfa.getClubTableWanFaInfo(ruleStr)
  308. str = str .. wanfaStr
  309. return str
  310. end
  311. return wanfa