源战役客户端
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.

219 lines
6.5 KiB

  1. TreasureHouseModel = TreasureHouseModel or BaseClass(BaseVo)
  2. local table_insert = table.insert
  3. local table_sort = table.sort
  4. function TreasureHouseModel:__init()
  5. TreasureHouseModel.Instance = self
  6. self.treasure_house_count_cfg = {}--保底次数奖励配置表
  7. self:InitTreasureHouseCFG()
  8. self:Reset()
  9. end
  10. function TreasureHouseModel:Reset()
  11. self.treasure_house_base_info = {}--珍宝阁基础信息
  12. self.treasure_house_task_info = {}--珍宝阁任务信息
  13. self.treasure_house_record_info = {}--珍宝阁记录信息
  14. self.not_show_treasure_house_tip = false
  15. end
  16. function TreasureHouseModel:GetInstance()
  17. if TreasureHouseModel.Instance == nil then
  18. TreasureHouseModel.Instance = TreasureHouseModel.New()
  19. end
  20. return TreasureHouseModel.Instance
  21. end
  22. function TreasureHouseModel:getInstance()
  23. if TreasureHouseModel.Instance == nil then
  24. TreasureHouseModel.Instance = TreasureHouseModel.New()
  25. end
  26. return TreasureHouseModel.Instance
  27. end
  28. function TreasureHouseModel:InitTreasureHouseCFG( )
  29. local cfg = Config.Treasurehousecount
  30. for k,v in pairsByKeys(cfg) do
  31. if not self.treasure_house_count_cfg[v.period] then
  32. self.treasure_house_count_cfg[v.period] = {}
  33. end
  34. if not self.treasure_house_count_cfg[v.period][v.round] then
  35. self.treasure_house_count_cfg[v.period][v.round] = {}
  36. end
  37. table.insert(self.treasure_house_count_cfg[v.period][v.round], v)
  38. end
  39. local function sort_func( a,b)
  40. return a.count < b.count
  41. end
  42. for i,v in ipairs(self.treasure_house_count_cfg) do
  43. for ii,vv in ipairs(v) do
  44. table_sort(vv, sort_func)
  45. end
  46. end
  47. end
  48. function TreasureHouseModel:GetTreasureHouseCFG(period, round)
  49. if period and round and self.treasure_house_count_cfg[period] then
  50. return self.treasure_house_count_cfg[period][round]
  51. elseif period and self.treasure_house_count_cfg[period] then
  52. return self.treasure_house_count_cfg[period]
  53. end
  54. return {}
  55. end
  56. function TreasureHouseModel:SetTreasureHouseBaseInfo( vo )
  57. self.treasure_house_base_info = vo
  58. self:ChangeVar("treasure_house_base_info", self.treasure_house_base_info, false, true)
  59. end
  60. function TreasureHouseModel:GetTreasureHouseBaseInfo( )
  61. return self.treasure_house_base_info
  62. end
  63. function TreasureHouseModel:GetTreasureHouseRewardList( )
  64. local data = self:GetTreasureHouseBaseInfo()
  65. local period = 1
  66. if TableSize(data) > 0 then
  67. local period = data.curr_period
  68. end
  69. local reward_list = {}
  70. local cfg = Config.Treasurehouseitems
  71. local data = {[0] = {}, [1] = {}, [2]= {}}--构造数据开始
  72. for i,v in ipairs(cfg) do
  73. if v.period <= period then--只有符合期数的才要加进来
  74. table_insert(data[v.is_rare], v)
  75. end
  76. end
  77. for i=0,2 do
  78. local sort_func = function ( a, b )
  79. return a.show_index > b.show_index
  80. end
  81. table.sort(data[i], sort_func)
  82. end
  83. local rare = 2--从大奖开始拿起
  84. local temp = {}
  85. for i=1,15 do
  86. if i >= 4 and i <= 6 then
  87. rare = 1
  88. elseif i > 6 then
  89. rare = 0
  90. else
  91. rare = 2
  92. end
  93. temp = table.remove(data[rare],1) or temp
  94. table_insert(reward_list, temp)
  95. end
  96. return reward_list
  97. end
  98. function TreasureHouseModel:SetTreasureHouseTaskInfo( vo )
  99. local data = {}
  100. for i,v in ipairs(vo.task_list) do
  101. data[v.id] = v
  102. end
  103. self.treasure_house_task_info = data
  104. self:ChangeVar("treasure_house_task_info", self.treasure_house_task_info, false, true)
  105. end
  106. function TreasureHouseModel:GetTreasureHouseTaskInfo( )
  107. return self.treasure_house_task_info
  108. end
  109. function TreasureHouseModel:SetTreasureHouseRecordInfo( vo )
  110. self.treasure_house_record_info = vo
  111. self:ChangeVar("treasure_house_record_info", self.treasure_house_record_info, false, true)
  112. end
  113. function TreasureHouseModel:AddTreasureHouseRecordInfo( vo )
  114. local data = DeepCopy(self.treasure_house_record_info)
  115. for i,v in ipairs(vo) do
  116. table_insert(data, v)
  117. end
  118. self:ChangeVar("treasure_house_record_info", data, false, true)
  119. end
  120. function TreasureHouseModel:GetTreasureHouseRecordInfo( )
  121. return self.treasure_house_record_info
  122. end
  123. --根据期数和轮次获取该轮最大的保底次数
  124. function TreasureHouseModel:GetMaxNumByPeriodAndRound( period, round )
  125. local cfg = self:GetTreasureHouseCFG(period, round)
  126. return cfg[#cfg].count or 0
  127. end
  128. --根据期数获取最大轮次
  129. function TreasureHouseModel:GetMaxRoundByPeriod( period )
  130. local cfg = self:GetTreasureHouseCFG(period)
  131. return TableSize(cfg)
  132. end
  133. --是否是概率up期
  134. function TreasureHouseModel:IsTreasureHouseUpRatio( )
  135. local bool = false
  136. local openDay = ServerTimeModel:getInstance():GetOpenServerDay()
  137. if 7 < openDay then--开服后7天
  138. local cfg = stringtotable(Config.Treasurehousekv["week_days"].value)
  139. -- 今天是星期几,映射到周一~周日 = 1~7
  140. local cur_wday = os.date("*t", TimeUtil:getServerTime()).wday - 1
  141. if cur_wday > 7 then
  142. cur_wday = cur_wday - 7
  143. elseif cur_wday < 1 then
  144. cur_wday = cur_wday + 7
  145. end
  146. for i,v in ipairs(cfg) do
  147. if cur_wday == v then
  148. bool = true
  149. break
  150. end
  151. end
  152. else
  153. local cfg = stringtotable(Config.Treasurehousekv["open_days"].value)
  154. for i,v in ipairs(cfg) do
  155. if openDay == v then
  156. bool = true
  157. break
  158. end
  159. end
  160. end
  161. return bool
  162. end
  163. function TreasureHouseModel:IsTreasureHouseNeedRed( )
  164. local bool = false
  165. local server_data = self:GetTreasureHouseTaskInfo()
  166. for i,v in pairs(server_data) do
  167. if v.state == 1 then
  168. bool = true
  169. break
  170. end
  171. end
  172. local base_info = self:GetTreasureHouseBaseInfo()
  173. if TableSize(base_info) > 0 and base_info.award_round ~= base_info.real_round then--如果有轮次没领的
  174. bool = true
  175. elseif TableSize(base_info) > 0 then
  176. local data = base_info.count_awards
  177. for i,v in ipairs(data) do
  178. if v.stage == 1 then
  179. bool = true
  180. break
  181. end
  182. end
  183. end
  184. return bool
  185. end
  186. --获取珍宝阁本期时间
  187. function TreasureHouseModel:GetTreasureTime( )
  188. local base_info = self:GetTreasureHouseBaseInfo()
  189. local period = 1
  190. if TableSize(base_info) > 0 then
  191. period = base_info.curr_period
  192. end
  193. local cfg = Config.Treasurehouseperiod
  194. if cfg[period] then
  195. local start_time = ServerTimeModel:getInstance():GetOpenServerTime() + (cfg[period].open_day_min-1) * 60 * 60 * 24
  196. local end_time = ServerTimeModel:getInstance():GetOpenServerTime() + (cfg[period].open_day_max-1) * 60 * 60 * 24
  197. local start_time_date = TimeUtil:timeConversion(start_time,"yyyy.mm.dd")
  198. local end_time_date = "-"..HtmlColorTxt(TimeUtil:timeConversion(end_time,"yyyy.mm.dd"), ColorUtil.GREEN_DARK)
  199. if period == TableSize(cfg) then
  200. end_time_date = "起持续开放"
  201. end
  202. local str = string.format("本期时间: %s%s", HtmlColorTxt(start_time_date, ColorUtil.GREEN_DARK), end_time_date)
  203. return str
  204. end
  205. return ""
  206. end