源战役客户端
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

411 rindas
14 KiB

pirms 4 nedēļām
  1. SevenDayTargetModel = SevenDayTargetModel or BaseClass(BaseModel)
  2. local SevenDayTargetModel = SevenDayTargetModel
  3. SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO = "SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO"
  4. SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD = "SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD"
  5. SevenDayTargetModel.OPEN_SEVEN_DAY_TARGET_MAIN_VIEW = "SevenDayTargetModel.OPEN_SEVEN_DAY_TARGET_MAIN_VIEW"
  6. SevenDayTargetModel.CLOSE_SEVEN_DAY_TARGET_MAIN_VIEW = "SevenDayTargetModel.CLOSE_SEVEN_DAY_TARGET_MAIN_VIEW"
  7. SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_RED_INFO = "SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_RED_INFO"
  8. SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_BTN = "SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_BTN"
  9. local table_insert = table.insert
  10. function SevenDayTargetModel:__init()
  11. SevenDayTargetModel.Instance = self
  12. self.seven_day_target_task_cfg = {}
  13. self:Reset( )
  14. end
  15. function SevenDayTargetModel:getInstance()
  16. if SevenDayTargetModel.Instance==nil then
  17. SevenDayTargetModel.New()
  18. end
  19. return SevenDayTargetModel.Instance
  20. end
  21. function SevenDayTargetModel:GetInstance()
  22. if SevenDayTargetModel.Instance==nil then
  23. SevenDayTargetModel.New()
  24. end
  25. return SevenDayTargetModel.Instance
  26. end
  27. function SevenDayTargetModel:Reset( )
  28. self.seven_day_target_info = {}
  29. self.seven_day_target_red_data = {}
  30. end
  31. function SevenDayTargetModel:SetSevenDayTargetInfo( vo )
  32. local data = {}
  33. -- for i,v in ipairs(vo.task_state) do
  34. -- if not data[v.days] then
  35. -- data[v.days] = {}
  36. -- end
  37. -- if not data[v.days][v.mod_id] then
  38. -- data[v.days][v.mod_id] = {}
  39. -- end
  40. -- if not data[v.days][v.mod_id][v.sub_id] then
  41. -- data[v.days][v.mod_id][v.sub_id] = {}
  42. -- end
  43. -- data[v.days][v.mod_id][v.sub_id][v.diff] = v
  44. -- end
  45. for i,v in ipairs(vo.task_state) do
  46. if not data[v.days] then
  47. data[v.days] = {}
  48. end
  49. data[v.days][self:GetKeyValve(v.days, v.mod_id, v.sub_id)] = v
  50. end
  51. vo.task_state = data
  52. local score_state = {}
  53. for i,v in ipairs(vo.score_state) do
  54. score_state[v.score_id] = true
  55. end
  56. vo.score_state = score_state
  57. local skill_state = {}
  58. for i,v in ipairs(vo.skill_state) do
  59. skill_state[v.days] = true
  60. end
  61. vo.skill_state = skill_state
  62. self.seven_day_target_info = vo
  63. self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO)
  64. self:CheckSevenDayTargetRed()
  65. end
  66. function SevenDayTargetModel:GetKeyValve( days, mod_id, sub_id )
  67. return days * 100000 + mod_id * 100 + sub_id
  68. end
  69. function SevenDayTargetModel:GetSevenDayTargetInfo( day )
  70. if day and TableSize(self.seven_day_target_info) > 0 then
  71. return self.seven_day_target_info.task_state[day]
  72. end
  73. return self.seven_day_target_info
  74. end
  75. function SevenDayTargetModel:SetSevenDayTargetOneInfo( vo,is_get_award )
  76. local data = self:GetSevenDayTargetInfo()
  77. if data and TableSize(data) > 0 then
  78. if not is_get_award then
  79. data.score = vo.score
  80. end
  81. if data.task_state[vo.days] and data.task_state[vo.days][self:GetKeyValve(vo.days, vo.mod_id, vo.sub_id)] then
  82. local temp_data = data.task_state[vo.days][self:GetKeyValve(vo.days, vo.mod_id, vo.sub_id)]
  83. if temp_data then -- 有数据
  84. if is_get_award then
  85. temp_data.is_receive = 1
  86. else
  87. temp_data.progress = vo.progress
  88. end
  89. self.seven_day_target_info = data
  90. self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO, is_get_award)
  91. self:CheckSevenDayTargetRed(vo.days)
  92. return
  93. end
  94. -- for i,v in pairs(data.task_state[vo.days]) do
  95. -- if i == vo.mod_id then
  96. -- for ii,vv in pairs(v) do
  97. -- if ii == vo.sub_id then
  98. -- for iii,vvv in pairs(vv) do
  99. -- if vvv.diff == vo.diff then
  100. -- if is_get_award then
  101. -- vvv.is_receive = 1
  102. -- else
  103. -- vvv.progress = vo.progress
  104. -- end
  105. -- self.seven_day_target_info = data
  106. -- self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO, is_get_award)
  107. -- self:CheckSevenDayTargetRed(vo.days)
  108. -- return
  109. -- end
  110. -- end
  111. -- end
  112. -- end
  113. -- end
  114. -- end
  115. end
  116. --跑完上面的 没找到 只能给他加进去了
  117. -- if not data.task_state[vo.days][vo.mod_id] then
  118. -- data.task_state[vo.days][vo.mod_id] = {}
  119. -- end
  120. if not data.task_state[vo.days] then
  121. data.task_state[vo.days] = {}
  122. end
  123. data.task_state[vo.days][self:GetKeyValve(vo.days, vo.mod_id, vo.sub_id)] = {
  124. days = vo.days,
  125. mod_id = vo.mod_id,
  126. sub_id = vo.sub_id,
  127. -- diff = vo.diff,
  128. progress = vo.progress or 0, --这个只是为了容错的 一般不会有没数据却能领取奖励的情况
  129. is_receive = 0,
  130. }
  131. self.seven_day_target_info = data
  132. self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO)
  133. self:CheckSevenDayTargetRed(vo.days)
  134. end
  135. end
  136. function SevenDayTargetModel:SetSevenDayTargetRewardInfo( vo )
  137. local data = self:GetSevenDayTargetInfo()
  138. if TableSize(data) > 0 then
  139. if vo.type == 1 then--积分奖励
  140. data.score_state[vo.reward_id] = true
  141. else
  142. data.skill_state[vo.reward_id] = true
  143. end
  144. self.seven_day_target_info = data
  145. self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO)
  146. if vo.type == 1 then--积分奖励
  147. self:CheckSevenDayTargetRed(nil,true)
  148. else
  149. self:CheckSevenDayTargetRed(vo.reward_id)
  150. end
  151. end
  152. end
  153. function SevenDayTargetModel:InitSevenDayTargetTaskCFG( )
  154. self.seven_day_target_task_cfg = {}
  155. local cfg = Config.Sevengoaltask
  156. for k,v in pairs(cfg) do
  157. if not self.seven_day_target_task_cfg[v.days] then
  158. self.seven_day_target_task_cfg[v.days] = {}
  159. end
  160. v.limit_condition = stringtotable(v.condition)
  161. for ii,vv in ipairs(v.limit_condition) do
  162. if vv[1] == "limit_times" then
  163. v.limit_times = vv[2]
  164. break
  165. end
  166. end
  167. v.reward_info = stringtotable(v.reward)
  168. table_insert(self.seven_day_target_task_cfg[v.days], v)
  169. end
  170. end
  171. function SevenDayTargetModel:GetSevenDayTargetTaskCFGByDay( day )
  172. if TableSize(self.seven_day_target_task_cfg) == 0 then
  173. self:InitSevenDayTargetTaskCFG()
  174. end
  175. return self.seven_day_target_task_cfg[day]
  176. end
  177. function SevenDayTargetModel:GetSevenDayTargetTaskOneCFG( day,mod_id,sub_id )
  178. local cfg = self:GetSevenDayTargetTaskCFGByDay(day)
  179. if cfg then
  180. for i,v in pairs(cfg) do
  181. if v.mod_id == mod_id and v.sub_id == sub_id then
  182. return v
  183. end
  184. end
  185. end
  186. end
  187. function SevenDayTargetModel:GetSevenDayTargetLoginDay( )
  188. if TableSize(self.seven_day_target_info) > 0 then
  189. if self.seven_day_target_info.login_days > 7 then -- 第八天以后 默认是7
  190. return 7
  191. end
  192. return self.seven_day_target_info.login_days
  193. end
  194. end
  195. function SevenDayTargetModel:GetSevenDayTargetScoreInfo( )
  196. local data = self:GetSevenDayTargetInfo()
  197. return data.score or 0, data.score_state or {}
  198. end
  199. function SevenDayTargetModel:GetSevenDayTargetSkillInfo( )
  200. local data = self:GetSevenDayTargetInfo()
  201. return data.skill_state or {}
  202. end
  203. --check_reward是否要检查积分奖励是否可领取
  204. function SevenDayTargetModel:CheckSevenDayTargetRed( day,check_reward)
  205. if not self:IsSevenDayTargetOpen() then--如果已经不开放了就没必要算红点了 直接把图标杀了吧
  206. self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_BTN)
  207. -- GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS,176,false)
  208. return
  209. end
  210. if day then--如果有这东西 就意味着能不用跑完下面的了
  211. local server_data = self:GetSevenDayTargetInfo(day) or {}
  212. self.seven_day_target_red_data[day] = nil
  213. local cur_num = 0
  214. for i,v in pairs(server_data) do
  215. -- for ii,vv in pairs(v) do
  216. -- for iii,vvv in pairs(vv) do
  217. local cfg = self:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id)
  218. if cfg then
  219. if v.progress >= cfg.limit_times then--已完成的任务
  220. cur_num = cur_num + 1
  221. if v.is_receive == 0 then--如果还没领取就有红点
  222. self.seven_day_target_red_data[day] = true
  223. break
  224. end
  225. end
  226. end
  227. -- end
  228. -- if self.seven_day_target_red_data[day] then--有红点了就跳出吧
  229. -- break
  230. -- end
  231. -- end
  232. if self.seven_day_target_red_data[day] then--有红点了就跳出吧
  233. break
  234. end
  235. end
  236. --如果上面的跑完没红点 那完成当天所有任务并且没有领取技能的情况下 有红点
  237. local server_data = self:GetSevenDayTargetInfo()
  238. if not server_data.skill_state[day] and not self.seven_day_target_red_data[day] then
  239. local skill_cfg = self:GetSevenDayTargetTaskCFGByDay(day)
  240. self.seven_day_target_red_data[day] = cur_num >= TableSize(skill_cfg) and not server_data.skill_state[day]
  241. end
  242. --积分奖励能否领取
  243. self.seven_day_target_red_data.score_red = nil
  244. local score_cfg = Config.Sevengoalscore
  245. local cur_score, server_score_data = self:GetSevenDayTargetScoreInfo()
  246. for k,v in pairs(score_cfg) do
  247. if v.score <= cur_score and not server_score_data[v.score] then--没领的就有红点
  248. self.seven_day_target_red_data.score_red = true
  249. break
  250. end
  251. end
  252. elseif check_reward then--意味着是领取积分奖励进来的也就是17602
  253. --积分奖励能否领取
  254. self.seven_day_target_red_data.score_red = nil
  255. local score_cfg = Config.Sevengoalscore
  256. local cur_score, server_score_data = self:GetSevenDayTargetScoreInfo()
  257. for k,v in pairs(score_cfg) do
  258. if v.score <= cur_score and not server_score_data[v.score] then--没领的就有红点
  259. self.seven_day_target_red_data.score_red = true
  260. break
  261. end
  262. end
  263. else--以下是全检查
  264. self.seven_day_target_red_data = {}
  265. local server_data = self:GetSevenDayTargetInfo()
  266. if server_data.task_state then
  267. for login_day=1,server_data.login_days do
  268. if server_data.task_state[login_day] then
  269. local cur_num = 0
  270. for i,v in pairs(server_data.task_state[login_day]) do
  271. -- for ii,vv in pairs(v) do
  272. -- for iii,vvv in pairs(vv) do
  273. local cfg = self:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id)
  274. if cfg then
  275. if v.progress >= cfg.limit_times then--已完成的任务
  276. cur_num = cur_num + 1
  277. if v.is_receive == 0 then--如果还没领取就有红点
  278. self.seven_day_target_red_data[login_day] = true
  279. break
  280. end
  281. end
  282. end
  283. -- end
  284. -- if self.seven_day_target_red_data[login_day] then--有红点了就跳出吧
  285. -- break
  286. -- end
  287. -- end
  288. if self.seven_day_target_red_data[login_day] then--有红点了就跳出吧
  289. break
  290. end
  291. end
  292. --如果上面的跑完没红点 那完成当天所有任务并且没有领取技能的情况下 有红点
  293. if not server_data.skill_state[login_day] and not self.seven_day_target_red_data[login_day] then
  294. local skill_cfg = self:GetSevenDayTargetTaskCFGByDay(login_day)
  295. self.seven_day_target_red_data[login_day] = cur_num >= TableSize(skill_cfg) and not server_data.skill_state[day]
  296. end
  297. end
  298. end
  299. end
  300. --积分奖励能否领取
  301. if server_data.score_state then
  302. self.seven_day_target_red_data.score_red = false
  303. local score_cfg = Config.Sevengoalscore
  304. local cur_score, server_score_data = self:GetSevenDayTargetScoreInfo()
  305. for k,v in pairs(score_cfg) do
  306. if v.score <= cur_score and not server_score_data[v.score] then--没领的就有红点
  307. self.seven_day_target_red_data.score_red = true
  308. break
  309. end
  310. end
  311. end
  312. end
  313. self:Fire(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_RED_INFO)
  314. for k,v in pairs(self.seven_day_target_red_data) do
  315. if v then
  316. GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS,176,true)
  317. return true
  318. end
  319. end
  320. GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS,176,false)
  321. return false
  322. end
  323. function SevenDayTargetModel:GetSevenDayTargetRedData( )
  324. return self.seven_day_target_red_data
  325. end
  326. --判断七日目标是否还在开放
  327. function SevenDayTargetModel:IsSevenDayTargetOpen( )
  328. local server_data = self:GetSevenDayTargetInfo()
  329. if TableSize(server_data) > 0 then
  330. if server_data.real_time - TimeUtil:getServerTime() <= 0 then
  331. return true
  332. end
  333. if TableSize(server_data.score_state) < 5 then--小于5个积分奖励都不用判断了 肯定还没领完的
  334. return true
  335. end
  336. --走到这里就要查一下是否领完了奖励了
  337. if server_data.task_state then
  338. if server_data.login_days < 7 then--小于7天都不用判断了 肯定还没领完的
  339. return true
  340. end
  341. if TableSize(server_data.skill_state) < 7 then--只有技能激活数少于7才需要判断下面的任务奖励是否领取
  342. for login_day=1,server_data.login_days do
  343. if server_data.task_state[login_day] then
  344. local len = TableSize(server_data.task_state[login_day])
  345. --如果服务端任务数据比配置少 那肯定也还没领完
  346. local skill_cfg = self:GetSevenDayTargetTaskCFGByDay(login_day)
  347. if len < TableSize(skill_cfg) then
  348. return true
  349. else--走到这里说明数据有了 先看看技能奖励领取了没 没领就活动还没完成
  350. if not server_data.skill_state[login_day] then
  351. return true
  352. else--技能奖励已经领取了 也要看看是不是每一个任务都是领取了奖励的了 但凡有一个任务没领 活动就没完成
  353. for i,v in pairs(server_data.task_state[login_day]) do
  354. for ii,vv in pairs(v) do
  355. for iii,vvv in pairs(vv) do
  356. if vvv.is_receive == 0 then
  357. return true
  358. end
  359. end
  360. end
  361. end
  362. end
  363. end
  364. end
  365. end
  366. end
  367. end
  368. end
  369. return false
  370. end
  371. function SevenDayTargetModel:IsSevenDayTargetSkill( skill_id )
  372. for i,v in ipairs(Config.Sevenskillreward) do
  373. if v.skill_reward == skill_id then
  374. return true
  375. end
  376. end
  377. return false
  378. end
  379. ----------领取动画状态-start---------
  380. function SevenDayTargetModel:SetTaskItemAnimState( is_anim )
  381. self.task_item_is_animing = is_anim
  382. end
  383. function SevenDayTargetModel:TaskItemIsAniming( )
  384. return self.task_item_is_animing
  385. end
  386. ----------领取动画状态-end-----------