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

253 lines
7.6 KiB

  1. KfBossTreasureModel = KfBossTreasureModel or BaseClass(BaseVo, true)
  2. local KfBossTreasureModel = KfBossTreasureModel
  3. function KfBossTreasureModel:__init()
  4. KfBossTreasureModel.Instance = self
  5. self:Reset()
  6. end
  7. function KfBossTreasureModel:Reset()
  8. self.basic_data = {}
  9. self.task_process_info = {}
  10. self.reward_info = {}--后端发来的奖励配置
  11. -------------------------
  12. self.red_act = {}
  13. self.red_lv_reward = {}
  14. end
  15. function KfBossTreasureModel:getInstance()
  16. if KfBossTreasureModel.Instance == nil then
  17. KfBossTreasureModel.Instance = KfBossTreasureModel.New()
  18. end
  19. return KfBossTreasureModel.Instance
  20. end
  21. --活动信息
  22. function KfBossTreasureModel:GetBasicData( sub_type )
  23. return self.basic_data[sub_type]
  24. end
  25. function KfBossTreasureModel:SetBasicData( value )
  26. self.basic_data[value.sub_type] = value
  27. end
  28. function KfBossTreasureModel:RefreshBasicPayStatus( sub_type,state )
  29. local basic_data = self:GetBasicData( sub_type )
  30. if state and basic_data then
  31. basic_data.is_pay = state
  32. end
  33. end
  34. --任务完成进度信息
  35. function KfBossTreasureModel:GetTaskProcessInfo( sub_type )
  36. return self.task_process_info[sub_type]
  37. end
  38. function KfBossTreasureModel:SetTaskProcessInfo( value )
  39. self.task_process_info[value.sub_type] = {}
  40. for k,v in pairs(value.task_list) do
  41. self.task_process_info[value.sub_type][v.task_id] = v
  42. -------------------------
  43. local temp_conf = self:GetTaskConfByType( v.task_id )
  44. if temp_conf and temp_conf.limit_times > v.times then
  45. v.status = KfBossTreasureConst.RewardState.Cannot
  46. else
  47. v.status = KfBossTreasureConst.RewardState.Have
  48. end
  49. -------------------------
  50. end
  51. end
  52. --获取活动结束时间
  53. function KfBossTreasureModel:GetActivityEndTime( sub_type )
  54. local base_type = CustomActivityModel.CustomActBaseType.BOSS_TREASURE
  55. local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
  56. -------------------------
  57. if act_list and act_list.etime then
  58. return act_list.etime
  59. end
  60. return 0
  61. end
  62. --等级配置
  63. function KfBossTreasureModel:GetLvConf( sub_type,lv )
  64. local server_data = self:GetRewardInfo( sub_type )
  65. local server_max_lv = server_data and TableSize(server_data) or 0
  66. -------------------------
  67. sub_type = sub_type or CustomActivityModel:getInstance():getActMinSubType(CustomActivityModel.CustomActBaseType.BOSS_TREASURE)
  68. if lv then
  69. for k,v in pairs(Config.Passrewards) do
  70. return Config.Passrewards["104@" .. sub_type .. "@" .. lv]
  71. end
  72. else
  73. local data = {}
  74. for k,v in pairs(Config.Passrewards) do
  75. if server_max_lv >= v.pass_lv then
  76. --有数据的才放进去
  77. data[k] = v
  78. end
  79. end
  80. return data
  81. end
  82. end
  83. function KfBossTreasureModel:GetRewardByLvAndOpTy( sub_type,lv,opty )
  84. local conf = self:GetLvConf( sub_type,lv )
  85. if not conf then return {} end
  86. local server_reward = self:GetRewardInfo( sub_type ) and self:GetRewardInfo( sub_type )[lv]
  87. if opty == 1 then--普通
  88. return stringtotable(server_reward and server_reward.normal_reward or conf.normal_rewards)
  89. elseif opty == 2 then--王牌
  90. return stringtotable(server_reward and server_reward.trump_reward or conf.trump_rewards)
  91. elseif opty == 3 then--都有
  92. local tab_1 = stringtotable(server_reward and server_reward.normal_reward or conf.normal_rewards)
  93. local tab_2 = stringtotable(server_reward and server_reward.trump_reward or conf.trump_rewards)
  94. for k,v in pairs(tab_2) do
  95. table.insert( tab_1, v )
  96. end
  97. return tab_1
  98. end
  99. end
  100. function KfBossTreasureModel:GetMaxRewardLv( sub_type )
  101. --取服务端和本地配置最低的等级
  102. local server_data = self:GetRewardInfo( sub_type )
  103. local server_max_lv = server_data and TableSize(server_data) or 0
  104. -------------------------
  105. local max_lv = 1
  106. for k,v in pairs(Config.Passrewards) do
  107. if v.sub_type == sub_type then
  108. max_lv = max_lv > v.pass_lv and max_lv or v.pass_lv
  109. end
  110. end
  111. return server_max_lv > max_lv and max_lv or server_max_lv
  112. end
  113. --获得当前选中的等级
  114. function KfBossTreasureModel:GetCurLvSelect( sub_type )
  115. local min_can_data = false--可领取的最低等级
  116. local max_have_data = false--已领取的最大等级
  117. local basic_data = self:GetBasicData( sub_type )
  118. local server_data = self:GetRewardInfo( sub_type )
  119. local server_max_lv = server_data and TableSize(server_data) or 0
  120. if basic_data then
  121. for k,v in pairs(basic_data.reward_list) do
  122. if v.lv <= server_max_lv then--要在服务端数据等级之内才有效
  123. if v.normal_status == KfBossTreasureConst.RewardState.Can or v.extra_status == KfBossTreasureConst.RewardState.Can then
  124. if min_can_data then
  125. min_can_data = v.lv > min_can_data.lv and min_can_data or v
  126. else
  127. min_can_data = v
  128. end
  129. end
  130. if v.normal_status == KfBossTreasureConst.RewardState.Have then
  131. if max_have_data then
  132. max_have_data = v.lv > max_have_data.lv and v or max_have_data
  133. else
  134. max_have_data = v
  135. end
  136. end
  137. end
  138. end
  139. end
  140. if min_can_data then
  141. return min_can_data.lv
  142. elseif max_have_data then
  143. local max_lv = self:GetMaxRewardLv( sub_type )
  144. return max_have_data.lv < max_lv and max_have_data.lv+1 or max_lv
  145. end
  146. return 1
  147. end
  148. --等级奖励红点
  149. function KfBossTreasureModel:GetLvRewardRed( need_new,sub_type )
  150. if not need_new then
  151. return self.red_lv_reward[sub_type]
  152. end
  153. self.red_lv_reward[sub_type] = false
  154. local basic_data = self:GetBasicData( sub_type )
  155. local server_data = self:GetRewardInfo( sub_type )
  156. local server_max_lv = server_data and TableSize(server_data) or 0
  157. if basic_data then
  158. for k,v in pairs(basic_data.reward_list) do
  159. if v.lv <= server_max_lv then--要在服务端数据等级之内才有效
  160. if v.normal_status == KfBossTreasureConst.RewardState.Can or v.extra_status == KfBossTreasureConst.RewardState.Can then
  161. self.red_lv_reward[sub_type] = true
  162. return true
  163. end
  164. end
  165. end
  166. end
  167. return false
  168. end
  169. --获取王牌宝典状态
  170. function KfBossTreasureModel:GetPayState( sub_type )
  171. local basic_data = self:GetBasicData( sub_type )
  172. if basic_data then
  173. return basic_data.is_pay
  174. end
  175. return KfBossTreasureConst.PayState.Lock
  176. end
  177. function KfBossTreasureModel:GetLvRewardStatus( sub_type,lv )
  178. local basic_data = self:GetBasicData( sub_type )
  179. if basic_data then
  180. for k,v in pairs(basic_data.reward_list) do
  181. if v.lv == lv then
  182. return v.normal_status,v.extra_status
  183. end
  184. end
  185. end
  186. return KfBossTreasureConst.RewardState.Cannot,KfBossTreasureConst.RewardState.Cannot
  187. end
  188. function KfBossTreasureModel:GetTaskConfByType( type_id )
  189. for k,v in pairs(Config.Phantomtasktype) do
  190. if v.task_type_id == type_id then
  191. return v
  192. end
  193. end
  194. end
  195. function KfBossTreasureModel:GetAllRed( need_new )
  196. if need_new then
  197. self.red_act = {}
  198. local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.BOSS_TREASURE)
  199. for i,v in pairs(temp_list or {}) do
  200. self.red_act[v.sub_type] = self:GetAllRedBySubType(true,v.sub_type)
  201. end
  202. end
  203. for k,v in pairs(self.red_act) do
  204. if v then
  205. return true
  206. end
  207. end
  208. return false
  209. end
  210. function KfBossTreasureModel:GetAllRedBySubType( need_new,sub_type )
  211. if need_new then
  212. self:GetLvRewardRed(true,sub_type)
  213. KfActivityModel:getInstance():IsNeedRed(KfActivityModel.TabID.BossTreasure,nil,sub_type)
  214. end
  215. return self:GetLvRewardRed(false,sub_type)
  216. end
  217. function KfBossTreasureModel:GetIsMaxLv( sub_type )
  218. local base_data = self:GetBasicData(sub_type)
  219. if base_data then
  220. return base_data.con_lv == self:GetMaxRewardLv(sub_type)
  221. end
  222. end
  223. --后端发来的奖励配置
  224. function KfBossTreasureModel:GetRewardInfo( sub_type )
  225. return self.reward_info[sub_type]
  226. end
  227. --后端发来的奖励配置
  228. function KfBossTreasureModel:SetRewardInfo( sub_type,reward_list )
  229. local temp = {}
  230. for k,v in pairs(reward_list) do
  231. temp[v.lv] = v
  232. end
  233. self.reward_info[sub_type] = temp
  234. end