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.

284 lines
8.6 KiB

  1. local wanfa={
  2. {
  3. playerNum = {
  4. {name="2人",value=2},
  5. {name="3人",value=3},
  6. {name="4人",value=4},
  7. {name="快速成局",value=5},
  8. },
  9. },
  10. {
  11. deductRule={
  12. {name="房主支付",value=0},
  13. {name="AA支付",value=1},
  14. },
  15. },
  16. {
  17. baseScore={
  18. {name="1分",value=1},
  19. {name="2分",value=2},
  20. {name="5分",value=5},
  21. {name="10分",value=10},
  22. {name="20分",value=20},
  23. },
  24. },
  25. {
  26. jiaoPaiType={
  27. {name="明叫",value=1},
  28. {name="暗叫",value=2},
  29. },
  30. isAndOr = false;
  31. },
  32. {
  33. fanBao={
  34. {name="允许反包",value=1},
  35. },
  36. },
  37. {
  38. firstBao={
  39. {name="允许第一把包牌",value=1},
  40. },
  41. },
  42. {
  43. fightAlone={
  44. {name="各自为战",value=1},
  45. },
  46. },
  47. {
  48. unshuffle={
  49. {name="不洗牌玩法",value=1},
  50. },
  51. },
  52. {
  53. bombScore={
  54. {name="炸弹加分",value=1},
  55. },
  56. },
  57. {
  58. withFlower={
  59. {name="带花牌",value=1},
  60. },
  61. },
  62. {
  63. reNumShow={
  64. {name="显示剩余张数",value=1},
  65. },
  66. },
  67. {
  68. jzdybq={
  69. {name="禁用快捷语和表情",value=1},
  70. },
  71. },
  72. {
  73. baseMulti = {
  74. {name = "积分倍数x"}
  75. }
  76. },
  77. -- {
  78. -- forbidProp = {
  79. -- {name = "屏蔽聊天与互动道具", value = 1, hide = false},
  80. -- {name = "屏蔽聊天与互动道具", value = 0, hide = true},
  81. -- }
  82. -- }
  83. {
  84. forbidProp = {
  85. {name = "屏蔽快捷语与道具", value = 1, hide = false},
  86. {name = "", value = 0, hide = true},
  87. }
  88. },
  89. {
  90. forbidVoice = {
  91. {name = "屏蔽语音", value = 1, hide = false},
  92. {name = "", value = 0, hide = true},
  93. }
  94. }
  95. }
  96. wanfa.clubWanFaTitle = {
  97. playerNum = "玩家人数",
  98. deductRule = "房费",
  99. baseScore = "底分",
  100. jiaoPaiType = "叫牌",
  101. fanBao = "玩法",
  102. fanBao = "玩法",
  103. firstBao = "玩法",
  104. fightAlone = "玩法",
  105. unshuffle = "玩法",
  106. bombScore = "玩法",
  107. withFlower = "玩法",
  108. reNumShow = "玩法",
  109. jzdybq = "玩法",
  110. baseMulti="积分倍数",
  111. forbidProp= "其他",
  112. }
  113. wanfa.ruleStr = ""
  114. --获取茶馆玩法规则
  115. function wanfa.getClubRuleInfo(ruleStr)
  116. if not ruleStr then
  117. ruleStr = app.room.roomInfo.strGameInfo
  118. end
  119. local strGameInfo = json.decode(ruleStr)
  120. local temp = {}
  121. wanfa.ruleStr = ""
  122. for k,v in ipairs(wanfa) do
  123. for serverKey,serverValue in pairs(strGameInfo) do
  124. if v[serverKey] then
  125. if v.isAndOr then
  126. for i,data in ipairs(v[serverKey]) do
  127. if not data.hide then
  128. if getNumBand(serverValue,data.value) > 0 then
  129. table.insert(temp,{name=wanfa.clubWanFaTitle[serverKey] or "",value={data.name}})
  130. wanfa.ruleStr = wanfa.ruleStr..data.name.." "
  131. end
  132. end
  133. end
  134. else
  135. for i,data in ipairs(v[serverKey]) do
  136. if serverKey == "baseMulti" then
  137. table.insert(temp,{name=wanfa.clubWanFaTitle[serverKey] or "",value={data.name .. serverValue}})
  138. wanfa.ruleStr = wanfa.ruleStr..data.name .. serverValue .. " "
  139. break;
  140. end
  141. if serverValue == data.value and not data.hide then
  142. table.insert(temp,{name=wanfa.clubWanFaTitle[serverKey] or "",value={data.name}})
  143. wanfa.ruleStr = wanfa.ruleStr..data.name.." "
  144. break
  145. end
  146. end
  147. end
  148. break;
  149. end
  150. end
  151. end
  152. return temp,wanfa.ruleStr
  153. end
  154. --获取玩法规则
  155. function wanfa.getRuleInfo(ruleStr)
  156. local temp,tempStr = wanfa.getClubRuleInfo(ruleStr)
  157. return tempStr;
  158. end
  159. --获取玩法规则
  160. function wanfa.getInviteInfo()
  161. local strGameInfo = json.decode(app.room.roomInfo.strGameInfo)
  162. local gameRuleName = getSubGameRuleName(29,strGameInfo.gamerule)
  163. local roomInfo = app.room.roomInfo
  164. return (roomInfo.nTotalGameNum.."局 "..tostring(gameRuleName))
  165. end
  166. function wanfa.getClubTableWanFaInfo(ruleStr,key)
  167. local strGameInfo = json.decode(ruleStr)
  168. local temp = ""
  169. local word = key or "highLimit"
  170. for serverKey,serverValue in pairs(strGameInfo) do
  171. if serverKey == word then
  172. for k,v in ipairs(wanfa) do
  173. if v[serverKey] then
  174. if v.isAndOr then
  175. for i,data in ipairs(v[serverKey]) do
  176. if getNumBand(serverValue,data.value) > 0 then
  177. temp = data.name.." "
  178. end
  179. end
  180. else
  181. for i,data in ipairs(v[serverKey]) do
  182. if serverKey == "baseMulti" then
  183. temp = temp .. data.name .. serverValue .. " "
  184. break;
  185. end
  186. if serverValue == data.value then
  187. temp = data.name.." "
  188. break
  189. end
  190. end
  191. end
  192. break
  193. end
  194. end
  195. break
  196. end
  197. end
  198. return temp
  199. end
  200. -- 规则文本
  201. wanfa.RuleText =
  202. {
  203. --[1] =
  204. {
  205. title = "基础规则",
  206. content =
  207. {
  208. "1、庄家:",
  209. "板子炮游戏每局均以拥有黑桃7者为庄家,其他3人为闲家。庄家具有叫牌和“包牌”和出牌的优先发言权。",
  210. "2、包牌和反包:",
  211. "包牌玩法时,每局均由庄家先发言,选挥“包牌”或“不包”,如果庄家“不包”,则依次由闲家选择包牌或不包;如果有人选择包牌了,则他的下家还可以选“反包”;如果四人均发言完毕,仍无人“包牌”,则包牌环节结束。如果有人包牌无人反包,则包牌玩家当庄1打3的局面,哪一方先有玩家出完牌则获得胜利;如果有人包牌且有人反包,则两人之间分胜负,谁先出完谁胜,另外两名玩家不继续参与本轮游戏。",
  212. "3、叫牌:",
  213. "无人包牌时,庄家开始叫牌。庄家必须叫一张手中没有的牌,从2开始叫,叫牌还需要分花色,抓有庄家所叫的那张牌的人成为庄家的伴家。另外两人则是对手,就形成2人对2人的局面,有一方两名玩家最先出牌(称为双关)或者第一个和第三个出完牌(称为单关)则決出胜负。若一方两名玩家第二个和第三个出完牌,则此局平局。",
  214. "4、各自为战:",
  215. "若无人包牌时,庄家直接开始打牌,四名玩家各自決出名次,谁先出完牌谁的名次靠前。",
  216. "5、伴家:",
  217. "根据叫牌环节庄家选出的牌决定了伴家,在牌桌上未出现该张叫牌之前除了伴家之外的三家不能知晓谁是伴家。",
  218. "6、接风:",
  219. "当玩家出完最后一手牌无人打时,由其下家开始下一轮出牌。",
  220. },
  221. },
  222. -- --[2] =
  223. -- {
  224. -- title = "牌型介绍",
  225. -- content =
  226. -- {
  227. -- "1、用牌:一副牌不带王牌,52张牌。也可以选择带4张花牌,花牌可作任意牌组合。",
  228. -- "2、单张:即单个牌。",
  229. -- "3、顺子:3个或3个以上连牌(不帯2)。",
  230. -- "4、炸弹:即3张相同的牌,炸弹可以打上述牌型。",
  231. -- "5、板子炮:也常称作双顺或双龙,由3对或3对以上连牌组成,可以打上述牌型。板子炮之间大小首先看牌数,同牌数则看牌面大小。",
  232. -- "6、氢弹:即4张相同的牌,氢弹可以打上述牌型。",
  233. -- "7、滚筒:由连续3个或3个以上的炸弹组成,可以打上述牌型。滚筒间的大小比较类似板子炮。",
  234. -- "8、滚龙: 由连续4个或4个以上的炸弹组成,可打上述牌型。滚龙间的大小类似板子炮。",
  235. -- "9、天牌: 即手中全是单张牌,没有任何2张大小相同的牌。",
  236. -- }
  237. -- },
  238. -- --[3] =
  239. -- {
  240. -- title = "算分规则",
  241. -- content =
  242. -- {
  243. -- "1、常规模式:",
  244. -- "(1)如果某人包牌且获胜,则包牌者获9倍底分,其他每人扣3倍底分。否则需付其他每人3倍底分。",
  245. -- "(2)如果某两人选择了包牌与反包,如果反包失败,则反包者扣18倍底分,包牌者获18倍底分;反包成功则反包者获9倍底分,包牌者扣9底分,其他2人得分为零。",
  246. -- "(3)2V2模式下,双关时,胜方各获得2倍底分,输方各扣2倍底分。",
  247. -- "(4)2V2模式下,单关时,胜方各获得1倍底分,输方各扣倍底分。",
  248. -- "(5)2V2模式下,平局时,全部得分零分。",
  249. -- "2、各自为战:",
  250. -- "(1)如果某人包牌并获胜,则包牌者获12倍底分,其他每人扣4倍底分。否则需付其他每人4倍底分。",
  251. -- "(2)如果某两人选择了包牌与反包,如果反包失败,则反包者扣24倍底分,包牌者获24倍底分;反包成功则反包者获12倍底分,包牌者扣倍底分,其他2人得分为零。",
  252. -- "(3)无人包牌时,四名玩家決出各自名次,第一名获得6倍底分,第二名扣倍底分,第三名扣2倍底分,第四名扣3倍底分。",
  253. -- }
  254. -- },
  255. }
  256. function wanfa.getClubTableWanFaString(rule)
  257. local str = ""
  258. local jsonData=json.decode(rule)
  259. if jsonData.playerNum == 5 then
  260. str = str .. "快速成局"
  261. else
  262. str = tostring(jsonData.playerNum) .. "人"
  263. end
  264. if jsonData.baseScore then
  265. local valueStr = string.format("%d分", jsonData.baseScore)
  266. str = str .. valueStr
  267. end
  268. return str
  269. end
  270. return wanfa