您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

237 行
8.0 KiB

  1. local Define_ERDouDiZhu = {}
  2. local gameConfig = getSubGameConfig(GAME_IDS.DouDiZhu)
  3. --游戏内玩法
  4. Define_ERDouDiZhu.GAME_RULE = {
  5. ["gameid"] = gameConfig.gameName,
  6. ["gamerule"] = gameConfig.GameType,
  7. ["game_num"] = gameConfig.playerNum,
  8. ["deductRule"] = {
  9. ["0"] = "房主支付",
  10. ["1"] = "AA支付",
  11. },
  12. ["playMode"] = {
  13. ["1"] = "叫地主模式",
  14. ["2"] = "叫分模式",
  15. },
  16. ["scoreLimit"] = {
  17. ["0"] = "不封顶",
  18. ["24"] = "24倍封顶",
  19. ["48"] = "48倍封顶",
  20. ["96"] = "96倍封顶",
  21. ["192"] = "192倍封顶",
  22. },
  23. ["rangPai"] = {
  24. ["0"] = "不让牌",
  25. ["2"] = "让2张",
  26. ["3"] = "让3张",
  27. ["4"] = "让4张",
  28. },
  29. ["specialRule"] = {}, -- 使用numand去判断
  30. -- ['extPlay'] = {
  31. -- ["1"] = '屏蔽聊天与互动道具',
  32. -- },
  33. ['forbidProp'] = {
  34. ["1"] = '屏蔽快捷语与道具',
  35. },
  36. ['forbidVoice'] = {
  37. ["1"] = '屏蔽语音',
  38. },
  39. ["baseMulti"] = {
  40. ["1"] = "积分倍数x"
  41. },
  42. }
  43. -- 斗地主规则文本
  44. Define_ERDouDiZhu.ruleText =
  45. {
  46. --[1] =
  47. {
  48. title = "基础规则",
  49. content =
  50. {
  51. "1、发牌:共54张牌,游戏开始后,2名玩家每位各发17张牌,剩3张底牌,埋掉17张牌。",
  52. "2、叫地主:可以选择“不叫”“叫地主” ,玩家可以抢或者是不抢。",
  53. },
  54. },
  55. -- --[2] =
  56. -- {
  57. -- title = "牌型介绍",
  58. -- content =
  59. -- {
  60. -- "1、火箭:即双王,最大的牌。",
  61. -- "2、炸弹:四张同数值牌。",
  62. -- "3、单牌:单个牌。",
  63. -- "4、对牌:数值相同的两张牌。",
  64. -- "5、三张牌:数值相同的三张牌。",
  65. -- "6、三带一:数值相同的三张牌 + 一张单牌或一对牌。不包括 2 点和双王。",
  66. -- "7、双顺(连对):三对或更多的连续对牌。不包括 2 点和双王。",
  67. -- "8、三顺(飞机):二个或更多的连续三张牌。不包括 2 点和双王。",
  68. -- "9、飞机带翅膀:三顺+同数量的单牌(或同数量的对牌)。",
  69. -- "10、四带二:四张牌+任意两张单牌(或任意两对牌,注意:四带二不是炸弹)。",
  70. -- }
  71. -- },
  72. -- --[3] =
  73. -- {
  74. -- title = "牌型大小",
  75. -- content =
  76. -- {
  77. -- "1、火箭最大,可以压任意其他的牌。",
  78. -- "2、炸弹比火箭小,比其他牌大。都是炸弹时按牌的点数比大小。",
  79. -- "3、除火箭和炸弹外,其他牌必须要牌型相同且总张数相同才能比大小。",
  80. -- "4、单牌按分值比大小,依次是:大王>小王>2>A>K>Q>J>10>9>8>7>6>5>4>3 ,不分花色。",
  81. -- "5、对牌,三张牌都按点数比大小。",
  82. -- "6、顺牌按最大的一张牌的点数值来比大小。",
  83. -- "7、飞机带翅膀和四带二按其中的三顺和四张部分来比,带的牌不影响大小。",
  84. -- }
  85. -- },
  86. -- --[4] =
  87. -- {
  88. -- title = "特殊规则",
  89. -- content =
  90. -- {
  91. -- "1、必当地主",
  92. -- "(1)4个2必当:如果起始手牌包含4个2,则轮到自己必须叫3分,当地主。",
  93. -- "(2)双王必当:如果起始手牌包含一对大小王,则轮到自己必须叫3分,当地主。",
  94. -- "(3)单王双2必当:如果起始手牌包含单王双2,则轮到自己必须叫3分,当地主。",
  95. -- "2、无人叫地主时",
  96. -- "(1)重新发牌:如果都不叫,则重新发牌,重新叫牌。",
  97. -- "(2)先叫必当:如果没有玩家选择叫地主,那么本局先叫牌的玩家强制要求做地主。",
  98. -- "3、加倍玩法",
  99. -- "(1)在选择抢完地主后,地主出牌前增加一个翻倍选择功能。在抢完地主后地主把底牌拿到手中,出现翻倍选择功能,用户可以选择加倍或不加倍。但若要进行加倍操作时,玩家必须符合特定条件。",
  100. -- "(2)在限制时间内完成加倍或不加倍的操作后,必须等待其他玩家进行完相关操作或直到限制时间到(限制时间到未选择的默认不加倍,15s),则游戏开始由地主出牌。",
  101. -- "(3)加倍后游戏得分计算为:底分*倍数*自己加倍数*对手加倍数,若有加倍则*2,若没加倍则*1。",
  102. -- }
  103. -- },
  104. -- --[5] =
  105. -- {
  106. -- title = "算分规则",
  107. -- content =
  108. -- {
  109. -- "1、底分:叫牌的分数。",
  110. -- "2、倍数:初始为1,每出一个炸弹或火箭翻一倍(留在手上没出的不算)。",
  111. -- "3、结算:",
  112. -- "(1)地主胜:地主得分为2*底分*倍数。其余玩家各得: -底分*倍数。",
  113. -- "(2)地主败:地主得分为-2*底分*倍数。其余玩家各得:底分*倍数。",
  114. -- "(3)若有加倍时,则计分公式为:底分*倍数*自己加倍数*对手加倍数。",
  115. -- "(4)地主所有牌出完,其他两家一张都未出,春天:分数*2。",
  116. -- "(5)其他两家中有一家先出完牌,地主只出过一手牌,反春天:分数*2。",
  117. -- }
  118. -- },
  119. -- --[6] =
  120. -- {
  121. -- title = "不洗牌",
  122. -- content =
  123. -- {
  124. -- "1、不洗牌玩法的牌型规则与经典玩法相同,但发牌方式不同。",
  125. -- "2、在不洗牌玩法中,玩家打完一局后,所有的牌将不会洗牌,按一定顺序切牌后依次发给下一桌玩家。",
  126. -- "3、玩法特点:a,手牌更加整齐;b,拿到炸弹的可能性更高;c,单局耗时更短,更刺激,更流畅。",
  127. -- }
  128. -- },
  129. }
  130. --俱乐部切换多玩法桌子显示的玩法 8倍 经典/不洗牌 飘分
  131. function Define_ERDouDiZhu.getClubTableWanFaInfo(str)
  132. local tab=json.decode(str)
  133. local temp=""
  134. if tab.playMode then
  135. if tonumber(tab.playMode) == 1 then
  136. temp = temp.."叫地主 "
  137. elseif tonumber(tab.playMode) == 2 then
  138. temp = temp.."叫分 "
  139. end
  140. end
  141. if tab.scoreLimit and tonumber(tab.scoreLimit) >= 0 then
  142. local scoreLimit = tab.scoreLimit
  143. temp = temp .. Define_ERDouDiZhu.GAME_RULE['scoreLimit'][''..scoreLimit]
  144. end
  145. return temp
  146. end
  147. function Define_ERDouDiZhu.getRuleFromString(gameId, jushu, ruleStr)
  148. local jsonData = json.decode(ruleStr)
  149. local tt = {}
  150. if jushu then
  151. local jushuText = string.format("%d 局",jushu);
  152. table.insert(tt, {name = "局数", value = {jushuText}})
  153. end
  154. if jsonData.playMode and jsonData.playMode >= 0 then
  155. local specStr = Define_ERDouDiZhu.GAME_RULE.playMode["" .. jsonData.playMode] or ""
  156. if specStr ~= "" then
  157. table.insert(tt, {name = "玩法模式", value = {specStr}})
  158. end
  159. end
  160. if jsonData.scoreLimit and jsonData.scoreLimit >= 0 then
  161. local specStr = Define_ERDouDiZhu.GAME_RULE.scoreLimit["" .. jsonData.scoreLimit] or ""
  162. if specStr ~= "" then
  163. table.insert(tt, {name = "封顶", value = {specStr}})
  164. end
  165. end
  166. if jsonData.rangPai and jsonData.rangPai >= 0 then
  167. local specStr = Define_ERDouDiZhu.GAME_RULE.rangPai["" .. jsonData.rangPai] or ""
  168. if specStr ~= "" then
  169. table.insert(tt, {name = "让牌", value = {specStr}})
  170. end
  171. end
  172. if jsonData.specialRule and jsonData.specialRule >= 0 then
  173. local specStr = Define_ERDouDiZhu.getSpecialRuleString(jsonData.specialRule)
  174. if specStr ~= "" then
  175. table.insert(tt, {name = "玩法", value = {specStr}})
  176. end
  177. end
  178. if jsonData.extPlay and jsonData.extPlay >= 0 then
  179. local specStr = Define_ERDouDiZhu.GAME_RULE.extPlay["" .. jsonData.extPlay] or ""
  180. if specStr ~= "" then
  181. table.insert(tt, {name = "其他", value = {specStr}})
  182. end
  183. end
  184. if jsonData.baseMulti and jsonData.baseMulti > 0 then
  185. table.insert(tt, {name = '积分倍数', value = {Define_ERDouDiZhu.GAME_RULE.baseMulti["1"] .. jsonData.baseMulti}})
  186. end
  187. return tt
  188. end
  189. function Define_ERDouDiZhu.getClubTableRuleString(gameId, ruleStr, playerNum)
  190. local str = ""
  191. str = str..Define_ERDouDiZhu.getClubTableWanFaInfo(ruleStr)
  192. return str
  193. end
  194. function Define_ERDouDiZhu.getSpecialRuleString(strNum)
  195. strNum = tonumber(strNum) or 0
  196. local values = {
  197. [1] = {val = 0x01, str = '三张'},
  198. [2] = {val = 0x02, str = '三带二'},
  199. [3] = {val = 0x04, str = '四带二'},
  200. [4] = {val = 0x08, str = '加倍'},
  201. [5] = {val = 0x10, str = '底牌翻倍'},
  202. [6] = {val = 0x20, str = '轮流先叫'},
  203. }
  204. local str = ''
  205. for i, v in ipairs(values) do
  206. if getNumBand(strNum, v.val) > 0 then
  207. str = str .. v.str .. ' '
  208. end
  209. end
  210. return str
  211. end
  212. return Define_ERDouDiZhu