Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

474 linhas
10 KiB

  1. local RoomInfo = class("huamajiangRoomInfo");
  2. function RoomInfo.getInstance (isForceCreate)
  3. if isForceCreate then
  4. RoomInfo.__instance = nil;
  5. end
  6. if not RoomInfo.__instance then
  7. RoomInfo.__instance = RoomInfo:new();
  8. end
  9. return RoomInfo.__instance;
  10. end
  11. function RoomInfo:ctor( )
  12. self.memberList = {};
  13. end
  14. function RoomInfo:reset()
  15. self.memberList = {};
  16. self.nMaxPlayCount = nil;
  17. self.needOutCardId = nil;
  18. self.nLeaveCardNum = 72;
  19. self.tings = {};
  20. self.tingStatus = -1;
  21. self.gameId = 0;
  22. self.nShowTableId = 0;
  23. self.nRoomOwnedUid = 0;
  24. self.nTotalGameNum = 0;
  25. self.nGameStartCount = 0;
  26. self.nBankSeatId = -1;
  27. self.nMySeatId = -1;
  28. self.bUserDisbandGame = false;
  29. self.outCardUserId = 0;
  30. self.outCardSeatId = 0;
  31. self.lastOpCard = 0;
  32. self.stopFlag = nil;
  33. self.isGameOver = 0;
  34. self.nStatus = -1;
  35. self.nEndTime = nil;
  36. self.operates = {};
  37. self.playerInfos = {};
  38. self.resultInfos = {};
  39. self.quickStartInfo = {};
  40. self.lastOutViewId = nil;
  41. self.needJieSuanInfo = 0;
  42. self.luoboCards = {};
  43. self.scoreInfo = {};
  44. self.passGuo = false;
  45. --ljx 所有人的流水信息
  46. self.allPlayerScoreInfo = {};
  47. end
  48. -- 保存最大玩牌人数
  49. function RoomInfo:setMaxPlayerCount (maxPlayerCount)
  50. self.nMaxPlayCount = maxPlayerCount;
  51. end
  52. -- 获取最大玩牌人数
  53. function RoomInfo:getMaxPlayerCount ()
  54. return self.nMaxPlayCount;
  55. end
  56. -- 保存剩余牌
  57. -- @param leaveCards table
  58. function RoomInfo:setLeaveCards (leaveCards)
  59. self.leaveCards = leaveCards;
  60. end
  61. -- 获取剩余牌
  62. -- @return table
  63. function RoomInfo:getLeaveCards ()
  64. return self.leaveCards or {};
  65. end
  66. -- 保存剩余牌张数
  67. function RoomInfo:setLeaveCardNum( leaveCardNum )
  68. self.nLeaveCardNum = leaveCardNum;
  69. end
  70. -- 获取剩余牌张数
  71. function RoomInfo:getLeaveCardNum ()
  72. return self.nLeaveCardNum;
  73. end
  74. -- 保存是否需要出牌
  75. -- @param isNeedOutCard boolean
  76. function RoomInfo:setIsNeedOutCard (isNeedOutCard)
  77. self.isNeedOutCard = isNeedOutCard;
  78. end
  79. -- 获取是否需要出牌
  80. function RoomInfo:getIsNeedOutCard ()
  81. return self.isNeedOutCard;
  82. end
  83. -- 保存需要出牌的玩家id
  84. function RoomInfo:setNeedOutCardId( userId )
  85. self.needOutCardId = userId;
  86. end
  87. -- 获取需要出牌的玩家id
  88. function RoomInfo:getNeedOutCardId()
  89. return self.needOutCardId;
  90. end
  91. -- 保存出牌玩家id(重连使用)
  92. -- @param userId int
  93. function RoomInfo:setOutCardUserId (userId)
  94. self.outCardUserId = userId;
  95. end
  96. -- 获取出牌玩家id(重连使用)
  97. function RoomInfo:getOutCardUserId ()
  98. return self.outCardUserId or 0;
  99. end
  100. -- 保存出牌玩家座位(重连使用)
  101. -- @param seatId int 逻辑座位
  102. function RoomInfo:setOutCardSeatId (seatId)
  103. self.outCardSeatId = seatId;
  104. end
  105. -- 获取出牌玩家座位(重连使用)
  106. function RoomInfo:getOutCardSeatId ()
  107. return self.outCardSeatId or 0;
  108. end
  109. -- 保存最后操作的牌(重连使用)
  110. -- @param card int
  111. function RoomInfo:setLastOpCard (card)
  112. self.lastOpCard = card;
  113. end
  114. -- 获取最后操作的牌(重连使用)
  115. function RoomInfo:getLastOpCard ()
  116. return self.lastOpCard or 0;
  117. end
  118. -- 保存游戏状态(重连使用)
  119. function RoomInfo:setGameStatus (status)
  120. self.nStatus = status;
  121. end
  122. -- 获取游戏状态(重连使用)
  123. function RoomInfo:getGameStatus ()
  124. return self.nStatus;
  125. end
  126. -- 保存玩家信息(重连使用)
  127. function RoomInfo:setPlayerInfos (playerInfos)
  128. self.playerInfos = playerInfos;
  129. end
  130. -- 获取玩家信息(重连使用)
  131. function RoomInfo:getPlayerInfos ()
  132. return self.playerInfos or {};
  133. end
  134. -- 保存胡牌玩家列表(重连使用)(只发现在回放RoomView使用)
  135. -- @param resultInfos table
  136. function RoomInfo:setResultInfos (resultInfos)
  137. self.resultInfos = resultInfos;
  138. end
  139. -- 获取胡牌玩家列表(重连使用)
  140. function RoomInfo:getResultInfos ()
  141. return self.resultInfos or {};
  142. end
  143. -- 保存操作列表(重连使用)
  144. function RoomInfo:setOperates (operates)
  145. self.operates = operates;
  146. end
  147. -- 获取操作列表(重连使用)
  148. function RoomInfo:getOperates ()
  149. return self.operates;
  150. end
  151. -- 保存听牌信息
  152. -- @param tingCards { outCard: 0x01, tingCards: {0x01, 0x02}}
  153. function RoomInfo:setTingCards(tingCards)
  154. self.tings = tingCards;
  155. end
  156. -- 获取听牌信息
  157. function RoomInfo:getTingCards()
  158. return self.tings or {};
  159. end
  160. --- RoomInfo:getTingCardsByCard 通过指定牌,获取听牌信息
  161. -- @param card int
  162. function RoomInfo:getTingCardsByCard (card)
  163. local curTingCards = {};
  164. for k, v in pairs(self.tings) do
  165. if v.outCard == card then
  166. curTingCards = v.tingCards;
  167. break;
  168. end
  169. end
  170. return curTingCards;
  171. end
  172. -- 保存听牌状态
  173. -- @ param tingStatus -1为没听 0为听
  174. function RoomInfo:setTingStatus(tingStatus)
  175. self.tingStatus = tingStatus;
  176. end
  177. -- 获取听牌状态
  178. function RoomInfo:getTingStatus()
  179. return self.tingStatus;
  180. end
  181. -- 保存游戏id
  182. -- @param gameId int
  183. function RoomInfo:setGameId(gameId)
  184. self.gameId = gameId;
  185. end
  186. -- 获取游戏id
  187. function RoomInfo:getGameId()
  188. return self.gameId;
  189. end
  190. -- 保存桌子号
  191. -- @param int 426146
  192. function RoomInfo:setShowTableId(showTableId)
  193. self.nShowTableId = showTableId;
  194. end
  195. -- 获取桌子号
  196. function RoomInfo:getShowTableId()
  197. return self.nShowTableId;
  198. end
  199. -- 保存房主id
  200. -- @param userId int
  201. function RoomInfo:setRoomOwnedUid(userId)
  202. self.nRoomOwnedUid = userId;
  203. end
  204. -- 获取房主id
  205. function RoomInfo:getRoomOwnedUid()
  206. return self.nRoomOwnedUid;
  207. end
  208. -- 保存庄家座位
  209. -- @param bankSeatId int
  210. function RoomInfo:setBankSeatId(bankSeatId)
  211. self.nBankSeatId = bankSeatId;
  212. end
  213. -- 获取庄家座位
  214. function RoomInfo:getBankSeatId()
  215. return self.nBankSeatId;
  216. end
  217. -- 保存本家逻辑座位
  218. -- @param mySeatId int
  219. function RoomInfo:setMySeatId(mySeatId)
  220. self.nMySeatId = mySeatId;
  221. end
  222. -- 获取本家座位
  223. function RoomInfo:getMySeatId()
  224. return self.nMySeatId or -1;
  225. end
  226. -- 保存总局数
  227. -- @param totalGameNum int
  228. function RoomInfo:setTotalGameNum( totalGameNum )
  229. self.nTotalGameNum = totalGameNum;
  230. end
  231. -- 获取总局数
  232. function RoomInfo:getTotalGameNum()
  233. return self.nTotalGameNum;
  234. end
  235. -- 保存底注
  236. -- @param baseChips int
  237. function RoomInfo:setBaseChips(baseChips)
  238. self.nBaseChips = baseChips;
  239. end
  240. -- 获取底注
  241. function RoomInfo:getBaseChips()
  242. return self.nBaseChips;
  243. end
  244. -- 保存玩法规则
  245. -- @param strGameInfo string json串
  246. function RoomInfo:setStrGameInfo( strGameInfo )
  247. self.strGameInfo = strGameInfo;
  248. end
  249. -- 获取玩法规则
  250. -- @return string json串
  251. function RoomInfo:getStrGameInfo()
  252. return self.strGameInfo;
  253. end
  254. -- 获取玩法规则
  255. -- @return table
  256. function RoomInfo:getGameRule()
  257. return json.decode(self.strGameInfo);
  258. end
  259. -- 通过key获取玩法规则
  260. -- @param ruleKey 玩法规则key
  261. function RoomInfo:getGameRuleByKey (ruleKey)
  262. if not ruleKey then
  263. return "";
  264. end
  265. local gameRule = self:getGameRule();
  266. if not gameRule then
  267. return "";
  268. end
  269. return gameRule[ruleKey] or "";
  270. end
  271. -- 保存已开局数
  272. -- @param gameStartCount int
  273. function RoomInfo:setGameStartCount (gameStartCount)
  274. self.nGameStartCount = gameStartCount;
  275. end
  276. -- 获取已开局数
  277. function RoomInfo:getGameStartCount ()
  278. return self.nGameStartCount or 0;
  279. end
  280. -- 保存快速开始信息
  281. function RoomInfo:setQuickStartInfo (info)
  282. self.quickStartInfo = info;
  283. end
  284. -- 获取快速开始信息
  285. function RoomInfo:getQuickStartInfo ()
  286. return self.quickStartInfo or {};
  287. end
  288. -- 保存上次出牌玩家id
  289. function RoomInfo:setLastOutViewId (viewId)
  290. self.lastOutViewId = viewId;
  291. end
  292. -- 获取上次出牌玩家id
  293. function RoomInfo:getLastOutViewId ()
  294. return self.lastOutViewId;
  295. end
  296. -- 保存是否有玩家解散房间
  297. -- @param isDisban boolean
  298. function RoomInfo:setIsUserDisbandGame(isDisband)
  299. self.bUserDisbandGame = isDisband;
  300. end
  301. -- 是否有玩家解散房间
  302. -- @return boolean
  303. function RoomInfo:getIsUserDisbandGame ()
  304. return self.bUserDisbandGame;
  305. end
  306. -- 保存解散剩余时间
  307. -- @dismissTime int 秒数
  308. function RoomInfo:setDismissStateTime (dismissTime)
  309. self.nDismissStateTime = dismissTime;
  310. end
  311. -- 获取解散剩余时间
  312. function RoomInfo:getDismissStateTime ()
  313. return self.nDismissStateTime or 0;
  314. end
  315. -- 保存牌局结束原因
  316. -- @param stopFlag int
  317. function RoomInfo:setStopFlag (stopFlag)
  318. self.stopFlag = stopFlag;
  319. end
  320. -- 获取牌局结束原因
  321. function RoomInfo:getStopFlag ()
  322. return self.stopFlag;
  323. end
  324. -- 操作统计 opsCntMapString
  325. function RoomInfo:setOpsCntMapString (opsCntMapString)
  326. self.opsCntMapString = opsCntMapString;
  327. end
  328. -- 操作统计 opsCntMapString
  329. function RoomInfo:getOpsCntMapString ()
  330. return self.opsCntMapString;
  331. end
  332. -- 保存是否大局结束
  333. -- @param isGameOver 1为大局结束
  334. function RoomInfo:setIsGameOver (isGameOver)
  335. self.isGameOver = isGameOver;
  336. end
  337. -- 是否大局结束
  338. function RoomInfo:getIsGameOver ()
  339. return self.isGameOver;
  340. end
  341. -- 保存牌局结束时间
  342. -- @param endTime 结束时间
  343. function RoomInfo:setEndTime (endTime)
  344. self.nEndTime = endTime or os.time();
  345. end
  346. function RoomInfo:getEndTime ()
  347. return self.nEndTime;
  348. end
  349. -- 保存萝卜牌
  350. -- @param luoboCards table
  351. function RoomInfo:setLuoBoCards ( luoboCards )
  352. self.luoboCards = luoboCards;
  353. end
  354. -- 获取所有萝卜牌
  355. function RoomInfo:getLuoBoCards ( )
  356. return self.luoboCards or {};
  357. end
  358. -- 获取指定萝卜牌张数
  359. -- @param card int
  360. function RoomInfo:getLuoBoCardCount( card )
  361. local count = 0;
  362. for k, v in ipairs(self.luoboCards or {}) do
  363. if v == card then
  364. count = count + 1;
  365. end
  366. end
  367. return count;
  368. end
  369. -- 获取萝卜牌汇总
  370. -- @param cards table
  371. function RoomInfo:getLuoBoCardsSummary (cards)
  372. local result = {};
  373. for k, v in ipairs(cards or {}) do
  374. result[v] = result[v] and (result[v] + 1) or 1;
  375. end
  376. return result;
  377. end
  378. -- 保存流水明细数据
  379. -- @param scoreInfo {{gs = 0, hs = 0, ht = 0x08, gf = 0, ls = 0, ot = 0x02, seat = "1;3;4"}, ...}
  380. -- @desc gs: 杠分
  381. -- hs: 胡分
  382. -- ht: 胡牌类型(自摸or点炮)
  383. -- gf: 杠番
  384. -- ls: 萝卜分
  385. -- ot: 操作类型,胡 or 杠等
  386. -- seat: 本次收费的座位id,多个;分割
  387. function RoomInfo:setScoreInfo (scoreInfo)
  388. self.scoreInfo = scoreInfo;
  389. end
  390. -- 获取流水明细数据
  391. function RoomInfo:getScoreInfo ()
  392. return self.scoreInfo or {};
  393. end
  394. return RoomInfo;