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

432 行
13 KiB

  1. ContractModel = ContractModel or BaseClass(BaseVo, true)
  2. local ContractModel = ContractModel
  3. function ContractModel:__init()
  4. ContractModel.Instance = self
  5. self:Reset()
  6. end
  7. function ContractModel:Reset()
  8. self.basic_data = {}
  9. self.task_process_info = {}
  10. self.week_task_refresh_time = {}
  11. -------------------------
  12. self.red_act = {}
  13. self.red_lv_reward = {}
  14. self.red_task = {}
  15. self.need_open_fuli_view = false
  16. self.first_login_cache = {} -- 记录每次登陆红点是否有点击过
  17. -- self.red_login = {} -- 登陆红点
  18. self.login_red = {} -- 每天首次登陆红点
  19. end
  20. function ContractModel:getInstance()
  21. if ContractModel.Instance == nil then
  22. ContractModel.Instance = ContractModel.New()
  23. end
  24. return ContractModel.Instance
  25. end
  26. --活动信息
  27. function ContractModel:GetBasicData( sub_type )
  28. return self.basic_data[sub_type]
  29. end
  30. function ContractModel:SetBasicData( value )
  31. self.basic_data[value.sub_type] = value
  32. end
  33. function ContractModel:RefreshBasicLvAndScore( data )
  34. local basic_data = self:GetBasicData( data.sub_type )
  35. if basic_data then
  36. basic_data.score = data.score
  37. basic_data.con_lv = data.lv
  38. basic_data.daily_score = data.daily_score
  39. end
  40. end
  41. function ContractModel:RefreshBasicPayStatus( sub_type,state )
  42. local basic_data = self:GetBasicData( sub_type )
  43. if state and basic_data then
  44. basic_data.is_pay = state
  45. end
  46. end
  47. --任务完成进度信息
  48. function ContractModel:GetTaskProcessInfo( sub_type )
  49. return self.task_process_info[sub_type]
  50. end
  51. function ContractModel:SetTaskProcessInfo( value )
  52. self.task_process_info[value.sub_type] = {}
  53. self.week_task_refresh_time[value.sub_type] = value.update_time--周任务刷新时间
  54. for k,v in pairs(value.task_list) do
  55. self.task_process_info[value.sub_type][v.type] = v.tasks
  56. end
  57. end
  58. --周任务刷新时间
  59. function ContractModel:GetWeekTaskEndTime(sub_type)
  60. return self.week_task_refresh_time[sub_type] or 0
  61. end
  62. function ContractModel:RefreshTaskProcess( sub_type,list )
  63. if not list then return end
  64. local task_process_info = self:GetTaskProcessInfo( sub_type )
  65. if not task_process_info then return end
  66. for k,v in pairs(list) do
  67. for kk,vv in pairs(task_process_info[v.task_type] or {}) do
  68. if vv.task_id == v.task_id then
  69. vv.val = v.val
  70. vv.status = v.status
  71. end
  72. end
  73. end
  74. end
  75. -------------------------
  76. --获取活动结束时间
  77. function ContractModel:GetActivityEndTime( sub_type )
  78. local base_type = CustomActivityModel.CustomActBaseType.CONTRACT
  79. local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
  80. -------------------------
  81. if act_list and act_list.etime then
  82. return act_list.etime
  83. end
  84. return 0
  85. end
  86. --等级配置
  87. function ContractModel:GetLvConf( sub_type,lv )
  88. sub_type = sub_type or CustomActivityModel:getInstance():getActMinSubType(CustomActivityModel.CustomActBaseType.CONTRACT)
  89. if lv then
  90. for k,v in pairs(Config.Contractrewards) do
  91. return Config.Contractrewards[sub_type .. "@" .. lv]
  92. end
  93. else
  94. return Config.Contractrewards
  95. end
  96. end
  97. function ContractModel:GetRewardByLvAndOpTy( sub_type,lv,opty )
  98. local conf = self:GetLvConf( sub_type,lv )
  99. if not conf then return {} end
  100. if opty == 1 then--普通
  101. return stringtotable(conf.normal_rewards)
  102. elseif opty == 2 then--王牌
  103. return stringtotable(conf.luxury_rewards)
  104. elseif opty == 3 then--都有
  105. local tab_1 = stringtotable(conf.normal_rewards)
  106. local tab_2 = stringtotable(conf.luxury_rewards)
  107. for k,v in pairs(tab_2) do
  108. table.insert( tab_1, v )
  109. end
  110. return tab_1
  111. end
  112. end
  113. function ContractModel:GetMaxRewardLv( sub_type )
  114. local max_lv = 1
  115. for k,v in pairs(Config.Contractrewards) do
  116. if v.sub_type == sub_type then
  117. max_lv = max_lv > v.pass_lv and max_lv or v.pass_lv
  118. end
  119. end
  120. return max_lv
  121. end
  122. --获得当前选中的等级
  123. function ContractModel:GetCurLvSelect( sub_type )
  124. local min_can_data = false--可领取的最低等级
  125. local max_have_data = false--已领取的最大等级
  126. local basic_data = self:GetBasicData( sub_type )
  127. if basic_data then
  128. for k,v in pairs(basic_data.reward_list) do
  129. if v.normal_status == ContractConst.RewardState.Can or v.extra_status == ContractConst.RewardState.Can then
  130. if min_can_data then
  131. min_can_data = v.lv > min_can_data.lv and min_can_data or v
  132. else
  133. min_can_data = v
  134. end
  135. end
  136. if v.normal_status == ContractConst.RewardState.Have then
  137. if max_have_data then
  138. max_have_data = v.lv > max_have_data.lv and v or max_have_data
  139. else
  140. max_have_data = v
  141. end
  142. end
  143. end
  144. end
  145. if min_can_data then
  146. return min_can_data.lv
  147. elseif max_have_data then
  148. local max_lv = self:GetMaxRewardLv( sub_type )
  149. return max_have_data.lv < max_lv and max_have_data.lv+1 or max_lv
  150. end
  151. return 1
  152. end
  153. --等级奖励红点
  154. function ContractModel:GetLvRewardRed( need_new,sub_type )
  155. if not need_new then
  156. return self.red_lv_reward[sub_type]
  157. end
  158. self.red_lv_reward[sub_type] = false
  159. local basic_data = self:GetBasicData( sub_type )
  160. if basic_data then
  161. for k,v in pairs(basic_data.reward_list) do
  162. if v.normal_status == ContractConst.RewardState.Can or v.extra_status == ContractConst.RewardState.Can then
  163. self.red_lv_reward[sub_type] = true
  164. return true
  165. end
  166. end
  167. end
  168. return false
  169. end
  170. --获取王牌宝典状态
  171. function ContractModel:GetPayState( sub_type )
  172. local basic_data = self:GetBasicData( sub_type )
  173. if basic_data then
  174. return basic_data.is_pay
  175. end
  176. return ContractConst.PayState.Lock
  177. end
  178. function ContractModel:GetLvRewardStatus( sub_type,lv )
  179. local basic_data = self:GetBasicData( sub_type )
  180. if basic_data then
  181. for k,v in pairs(basic_data.reward_list) do
  182. if v.lv == lv then
  183. return v.normal_status,v.extra_status
  184. end
  185. end
  186. end
  187. return ContractConst.RewardState.Cannot,ContractConst.RewardState.Cannot
  188. end
  189. function ContractModel:GetTaskPassConfByType( main_type,type_id,weekday )
  190. for k,v in pairs(Config.Contractpasstask) do
  191. if v.task_type_id == type_id and v.type == main_type and ((v.day == weekday) or (v.day == 0)) then
  192. return v
  193. end
  194. end
  195. end
  196. function ContractModel:GetTaskConfByType( type_id )
  197. for k,v in pairs(Config.Contracttasktype) do
  198. if v.task_type_id == type_id then
  199. return v
  200. end
  201. end
  202. end
  203. function ContractModel:GetPassBuyConf( sub_type )
  204. sub_type = sub_type or CustomActivityModel:getInstance():getActMinSubType(CustomActivityModel.CustomActBaseType.CONTRACT)
  205. for k,v in pairs(Config.Contractpassbuy) do
  206. if v.sub_type == sub_type then
  207. return v
  208. end
  209. end
  210. end
  211. function ContractModel:GetAllRed( need_new )
  212. if need_new then
  213. self.red_act = {}
  214. local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.CONTRACT)
  215. for i,v in pairs(temp_list or {}) do
  216. self.red_act[v.sub_type] = self:GetAllRedBySubType(true,v.sub_type)
  217. end
  218. end
  219. for k,v in pairs(self.red_act) do
  220. if v then
  221. return true
  222. end
  223. end
  224. return false
  225. end
  226. function ContractModel:GetAllRedBySubType( need_new,sub_type )
  227. if need_new then
  228. self:GetTaskRed(true,sub_type)
  229. self:GetLvRewardRed(true,sub_type)
  230. self:GetLoginRed(true,sub_type)
  231. end
  232. return self:GetTaskRed(false,sub_type) or self:GetLvRewardRed(false,sub_type) or self:GetLoginRed(false,sub_type)
  233. end
  234. function ContractModel:GetTaskRed( need_new,sub_type )
  235. if self:GetIsMaxLv(sub_type) then return false end
  236. if need_new then
  237. self.red_task[sub_type] = {}
  238. local data = self:GetTaskProcessInfo(sub_type)
  239. for k,v in pairs(data or {}) do
  240. self.red_task[sub_type][k] = self:GetTaskRedByType( true,k,sub_type )
  241. end
  242. end
  243. for k,v in pairs(self.red_task[sub_type] or {}) do
  244. if v then
  245. return true
  246. end
  247. end
  248. return false
  249. end
  250. function ContractModel:GetTaskRedByType( need_new,type_id,sub_type )
  251. if self:GetIsMaxLv(sub_type) then return false end
  252. if need_new then
  253. self.red_task[sub_type][type_id] = false
  254. local data = self:GetTaskProcessInfo(sub_type)
  255. for k,v in pairs(data and data[type_id] or {}) do
  256. if v.status == ContractConst.RewardState.Can then
  257. self.red_task[sub_type][type_id] = true
  258. break
  259. end
  260. end
  261. end
  262. return self.red_task[sub_type][type_id] and true or false
  263. end
  264. function ContractModel:GetIsMaxLv( sub_type )
  265. local base_data = self:GetBasicData(sub_type)
  266. if base_data then
  267. return base_data.con_lv == self:GetMaxRewardLv(sub_type)
  268. end
  269. end
  270. ----------七天任务 每天首次登陆红点-start---------
  271. -- 每天首次登陆红点cookie
  272. function ContractModel:SetLoginCookie( sub_type, bool )
  273. local list = self:GetLoginCookie() or {}
  274. list[sub_type] = bool
  275. CookieWrapper.Instance:SaveCookie(CookieLevelType.Account,
  276. CookieTimeType.TYPE_DAY2, CookieKey.CONTRACT_WEEK_LOGIN_RED, list)
  277. CookieWrapper.Instance:WriteAll()
  278. end
  279. --每天首次登陆红点cookie
  280. function ContractModel:GetLoginCookie( )
  281. local list = CookieWrapper.Instance:GetCookie(CookieLevelType.Account,
  282. CookieKey.CONTRACT_WEEK_LOGIN_RED) or {}
  283. return list
  284. end
  285. -- 检查有周任务可做时的首次登陆时给红点
  286. function ContractModel:CheckLoginRed( sub_type )
  287. local list = self:GetLoginCookie() or {}
  288. if list[sub_type] == true then
  289. self.login_red[sub_type] = false
  290. else
  291. self.login_red[sub_type] = self:CheckHasWeekTaskCanDo(sub_type)
  292. end
  293. self:Fire(ContractConst.REFRESH_RED_DOT)
  294. -- 刷新福利页签红点
  295. local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.CONTRACT)
  296. for i,v in pairs(temp_list or {}) do
  297. local id = 33100000 + CustomActivityModel.CustomActBaseType.CONTRACT * 1000 + v.sub_type
  298. FuliModel:getInstance():Fire(FuliConst.UPDATE_FULI_RED_DOT,id)
  299. FuliModel:getInstance():Fire(FuliConst.ANS_UPDATE_FULI_RED_DOT,id)
  300. end
  301. return self.login_red[sub_type]
  302. end
  303. function ContractModel:CheckHasWeekTaskCanDo( sub_type )
  304. if self:GetIsMaxLv(sub_type) then return false end
  305. local data = self:GetTaskProcessInfo(sub_type)
  306. for k,v in pairs(data and data[ContractConst.TaskType.Week] or {}) do
  307. if v.status ~= ContractConst.RewardState.Have then -- 只要有一个任务是可以做或可以领的就要红点
  308. return true
  309. end
  310. end
  311. return false
  312. end
  313. function ContractModel:GetLoginRed( need_new,sub_type )
  314. if need_new then
  315. self:CheckLoginRed( sub_type )
  316. end
  317. return self.login_red[sub_type]
  318. end
  319. function ContractModel:SetLoginRed( sub_type, bool )
  320. if self.login_red[sub_type] and bool == false then
  321. self.login_red[sub_type] = false
  322. self:SetLoginCookie( sub_type, true ) -- 今天点开过了
  323. self:CheckLoginRed(sub_type)
  324. end
  325. end
  326. ----------七天任务 每天首次登陆红点-end-----------
  327. ----------每次登陆红点-start--------- 2021.6.23 运营说不要了
  328. -- function ContractModel:CheckLoginRed( sub_type )
  329. -- local type_daily = ContractConst.TaskType.Daily
  330. -- local type_week = ContractConst.TaskType.Week
  331. -- self.first_login_cache[sub_type] = self.first_login_cache[sub_type] or {}
  332. -- self.red_login[sub_type] = self.red_login[sub_type] or {}
  333. -- if not (self.task_process_info and
  334. -- self.task_process_info[sub_type] and
  335. -- self.task_process_info[sub_type][type_daily] and
  336. -- self.task_process_info[sub_type][type_week]) then
  337. -- return
  338. -- end
  339. -- -- 先查每天任务
  340. -- if not self.first_login_cache[sub_type][type_daily] then
  341. -- local bool = false
  342. -- for i,v in pairs(self.task_process_info[sub_type][type_daily]) do
  343. -- if v.status == 0 then
  344. -- bool = true
  345. -- break
  346. -- end
  347. -- end
  348. -- self.red_login[sub_type][type_daily] = bool
  349. -- else
  350. -- self.red_login[sub_type][type_daily] = false
  351. -- end
  352. -- -- 查周任务
  353. -- if not self.first_login_cache[sub_type][type_week] then
  354. -- local bool = false
  355. -- for i,v in pairs(self.task_process_info[sub_type][type_week]) do
  356. -- if v.status == 0 then
  357. -- bool = true
  358. -- break
  359. -- end
  360. -- end
  361. -- self.red_login[sub_type][type_week] = bool
  362. -- else
  363. -- self.red_login[sub_type][type_week] = false
  364. -- end
  365. -- end
  366. -- function ContractModel:GetLoginRed( need_new,sub_type, task_type )
  367. -- if need_new then
  368. -- self:CheckLoginRed( sub_type )
  369. -- end
  370. -- self.red_login[sub_type] = self.red_login[sub_type] or {}
  371. -- if task_type then
  372. -- return self.red_login[sub_type][task_type] == true
  373. -- else
  374. -- for k,v in pairs(self.red_login[sub_type]) do
  375. -- if v then
  376. -- return true
  377. -- end
  378. -- end
  379. -- return false
  380. -- end
  381. -- end
  382. -- function ContractModel:SetLoginCache( sub_type, task_type )
  383. -- if not sub_type or not task_type then
  384. -- return
  385. -- end
  386. -- self.first_login_cache[sub_type] = self.first_login_cache[sub_type] or {}
  387. -- if self.first_login_cache[sub_type][task_type] then -- 已经设置过 就不用设置了
  388. -- return
  389. -- end
  390. -- self.first_login_cache[sub_type][task_type] = true
  391. -- self:CheckLoginRed( sub_type )
  392. -- self:Fire(ContractConst.REFRESH_RED_DOT)
  393. -- -- 刷新福利页签红点
  394. -- local temp_list = CustomActivityModel:getInstance():getAllActListByBaseType(CustomActivityModel.CustomActBaseType.CONTRACT)
  395. -- for i,v in pairs(temp_list or {}) do
  396. -- local id = 33100000 + CustomActivityModel.CustomActBaseType.CONTRACT * 1000 + v.sub_type
  397. -- FuliModel:getInstance():Fire(FuliConst.UPDATE_FULI_RED_DOT,id)
  398. -- FuliModel:getInstance():Fire(FuliConst.ANS_UPDATE_FULI_RED_DOT,id)
  399. -- end
  400. -- end
  401. ----------每次登陆红点-end-----------