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

387 lines
13 KiB

пре 1 месец
  1. MobilizationModel = MobilizationModel or BaseClass(BaseVo, true)
  2. local MobilizationModel = MobilizationModel
  3. MobilizationModel.REQUEST_INFO = "MobilizationModel.REQUEST_INFO"
  4. MobilizationModel.OPEN_MOBILIZATION_VIEW = "MobilizationModel.OPEN_MOBILIZATION_VIEW"--打开主界面
  5. MobilizationModel.UPDATE_MOBILIZATION_VIEW = "MobilizationModel.UPDATE_MOBILIZATION_VIEW"--更新主界面
  6. MobilizationModel.REQUEST_INFO = "MobilizationModel.REQUEST_INFO"--请求协议
  7. function MobilizationModel:__init()
  8. MobilizationModel.Instance = self
  9. self:Reset()
  10. end
  11. function MobilizationModel:Reset()
  12. self.view_info = {}--界面信息
  13. self.tab_red_dot_info = {}--主页签红点信息
  14. self.sub_tab_red_dot_info = {}--子页签红点信息
  15. self.act_day = {}--活动天数
  16. self:InitCfg()--初始化配置
  17. end
  18. function MobilizationModel:getInstance()
  19. if MobilizationModel.Instance == nil then
  20. MobilizationModel.Instance = MobilizationModel.New()
  21. end
  22. return MobilizationModel.Instance
  23. end
  24. --初始化配置
  25. function MobilizationModel:InitCfg( )
  26. self.mobilization_task_cfg = {}--每日任务配置
  27. local mobilization_task_cfg = DeepCopy(Config.Mobilizetask)
  28. for k,v in pairs(mobilization_task_cfg) do
  29. local data = v
  30. if not self.mobilization_task_cfg[v.subtype] then
  31. self.mobilization_task_cfg[v.subtype] = {}
  32. end
  33. if not self.mobilization_task_cfg[v.subtype][v.day] then
  34. self.mobilization_task_cfg[v.subtype][v.day] = {}
  35. end
  36. self.mobilization_task_cfg[v.subtype][v.day][v.task_type] = data
  37. end
  38. self.mobilization_task_award_cfg = {}--任务奖励配置
  39. local mobilization_task_award_cfg = DeepCopy(Config.Mobilizetaskaward)
  40. for k,v in pairs(mobilization_task_award_cfg) do
  41. local data = v
  42. data.gain_con = stringtotable(data.gain_con)
  43. data.desc = Trim(data.desc)
  44. data.gain_desc = Trim(data.gain_desc)
  45. data.reward = stringtotable(data.reward)
  46. data.gain_link = stringtotable(data.gain_link)
  47. if not self.mobilization_task_award_cfg[v.task_type] then
  48. self.mobilization_task_award_cfg[v.task_type] = {}
  49. end
  50. self.mobilization_task_award_cfg[v.task_type][v.task_id] = data
  51. end
  52. self.mobilization_task_day_cfg = {}--全天奖励配置
  53. local mobilization_task_day_cfg = DeepCopy(Config.Mobilizetaskday)
  54. for k,v in pairs(mobilization_task_day_cfg) do
  55. local data = v
  56. data.reward = stringtotable(data.reward)
  57. data.show_model = stringtotable(data.show_model)
  58. if not self.mobilization_task_day_cfg[v.subtype] then
  59. self.mobilization_task_day_cfg[v.subtype] = {}
  60. end
  61. self.mobilization_task_day_cfg[v.subtype][#self.mobilization_task_day_cfg[v.subtype] + 1] = data
  62. end
  63. self.mobilization_task_type_cfg = {}--任务类型配置
  64. local mobilization_task_type_cfg = DeepCopy(Config.Mobilizetasktype)
  65. for k,v in pairs(mobilization_task_type_cfg) do
  66. local data = v
  67. data.task_string = Trim(data.task_string)--任务关键词
  68. data.desc = Trim(data.desc)--任务描述
  69. data.link = stringtotable(data.link)--完成跳转
  70. self.mobilization_task_type_cfg[v.task_type] = data
  71. end
  72. end
  73. --获得任务奖励配置
  74. function MobilizationModel:GetTaskAwardCfg( task_type,award_id )
  75. if task_type and not award_id then
  76. return self.mobilization_task_award_cfg[task_type]
  77. elseif task_type then
  78. return self.mobilization_task_award_cfg[task_type][award_id]
  79. end
  80. end
  81. --获得任务类型配置
  82. function MobilizationModel:GetTaskTypeCfg( task_type )
  83. return self.mobilization_task_type_cfg[task_type]
  84. end
  85. --获得每日任务配置
  86. function MobilizationModel:GetDayTaskCfg( sub_type,day )
  87. if day and self.mobilization_task_day_cfg[sub_type] then
  88. local day = self:GetCurActDay(sub_type) or 1
  89. for i,v in ipairs(self.mobilization_task_day_cfg[sub_type]) do
  90. if v.day <= day and v.end_day >= day then
  91. return v
  92. end
  93. end
  94. elseif not day and self.mobilization_task_day_cfg[sub_type] then
  95. return self.mobilization_task_day_cfg[sub_type]
  96. end
  97. end
  98. --获得每天的任务总配置
  99. function MobilizationModel:GetTaskCfg( sub_type,day )
  100. if sub_type and day then
  101. local task_cfg_list = {}
  102. for i,v in pairs(Config.Mobilizetask) do
  103. if v.day <= day and v.end_day >= day and sub_type == v.subtype then
  104. task_cfg_list[#task_cfg_list + 1] = v
  105. end
  106. end
  107. return task_cfg_list
  108. else
  109. return self.mobilization_task_cfg[sub_type]
  110. end
  111. end
  112. --检查主界面红点
  113. function MobilizationModel:CheckMainIconRedDot(sub_type)
  114. local bool = false
  115. local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION
  116. if sub_type then
  117. local icon_sub_type = base_type*1000 + sub_type
  118. if sub_type >= 10001 then
  119. icon_sub_type = base_type*100000 + sub_type
  120. end
  121. local red_info = self.tab_red_dot_info[sub_type]
  122. if red_info and TableSize(red_info) > 0 then
  123. for k,v in pairs(red_info) do
  124. if v then
  125. bool = true
  126. break
  127. end
  128. end
  129. end
  130. GlobalEventSystem:Fire(ActivityIconManager.UPDATE_ICON_TIPS, icon_sub_type, bool)
  131. end
  132. end
  133. --检测全民动员活动图标是否需要开启[兼顾设置全民动员活动内部的活动列表]
  134. function MobilizationModel:CheckIconBoolOpen(sub_type)
  135. local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION
  136. local sub_type = CustomActivityModel:getInstance():getActMinSubType(base_type)
  137. local level = RoleManager.Instance.mainRoleInfo.level
  138. local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
  139. local is_open = false
  140. local end_time = 0
  141. local icon_sub_type = base_type*1000 + sub_type
  142. if sub_type >= 10001 then
  143. icon_sub_type = base_type*100000 + sub_type
  144. end
  145. if act_list and act_list.etime then
  146. local have_time = TimeUtil:getServerTime( ) - act_list.stime
  147. if have_time > 0 then
  148. self.act_day[sub_type] = math.ceil(have_time/24/3600) <= 0 and 1 or math.ceil(have_time/24/3600)
  149. end
  150. end_time = act_list.etime - TimeUtil:getServerTime()
  151. end_time = end_time%(24*3600)
  152. is_open = end_time > 0
  153. if GetModuleIsOpen(331,base_type) then
  154. if is_open then
  155. local cur_day = self:GetCurActDay(sub_type)
  156. local end_day = cur_day
  157. for k,v in pairs(Config.Mobilizetaskday) do
  158. if v.day <= cur_day and v.end_day >= cur_day then
  159. end_day = v.end_day
  160. end
  161. end
  162. local str = nil
  163. local server_info = self:GetServerInfo(sub_type)
  164. local sec = act_list.stime + end_day*24*3600 - TimeUtil:getServerTime( )
  165. if server_info and server_info.list then
  166. local cur_day = self:GetCurActDay(sub_type)
  167. local cur_day_data = server_info.list[cur_day]
  168. local task_cfg = self:GetDayTaskCfg(sub_type,cur_day)
  169. if task_cfg and cur_day_data then
  170. local cur = HtmlColorTxt(cur_day_data.complete_day_task_num, cur_day_data.complete_day_task_num < task_cfg.need_num and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK)
  171. str = string.format("进度 %s/%s", cur,task_cfg.need_num)
  172. if cur_day_data.complete_day_task_num >= task_cfg.need_num then
  173. str = nil
  174. sec = -1
  175. end
  176. end
  177. end
  178. --2021.8.2日鸿杰说双服屏蔽
  179. str = nil
  180. sec = -1
  181. ActivityIconManager:getInstance():addIcon(icon_sub_type, sec, str)
  182. else
  183. ActivityIconManager:getInstance():deleteIcon(icon_sub_type)
  184. end
  185. else
  186. -- print("huangcong:MobilizationModel [62]: ",key)
  187. end
  188. else
  189. ActivityIconManager:getInstance():deleteIcon(icon_sub_type)
  190. end
  191. end
  192. --设置全民动员信息
  193. function MobilizationModel:SetMobilizationInfo( scmd )
  194. self.view_info[scmd.sub_type] = {}
  195. local list = {}
  196. local task_list = nil
  197. local sort_func = function ( a, b )
  198. return a.id < b.id
  199. end
  200. local task_type_complete_list = {}--任务完成列表
  201. local day_task_num = 0--任务总数量
  202. local complete_day_task_num = 0--任务完成总数量
  203. for i,v in ipairs(scmd.list) do
  204. task_list = {}
  205. task_type_complete_list = {}
  206. complete_day_task_num = 0--任务完成总数量
  207. day_task_num = 0--任务总数量
  208. for ii,vv in pairs(v.task_list) do
  209. if not task_list[vv.task_type] then
  210. task_list[vv.task_type] = {}
  211. end
  212. task_list[vv.task_type][vv.id] = vv
  213. if not task_type_complete_list[vv.task_type] then
  214. task_type_complete_list[vv.task_type] = 0
  215. end
  216. task_type_complete_list[vv.task_type] = task_type_complete_list[vv.task_type] + (vv.state == 2 and 1 or 0)
  217. day_task_num = day_task_num + 1
  218. complete_day_task_num = (vv.state == 2 and 1 or 0) + complete_day_task_num
  219. end
  220. v.complete_day_task_num = complete_day_task_num
  221. v.day_task_num = day_task_num
  222. v.task_list = task_list
  223. v.task_type_complete_list = task_type_complete_list
  224. local day = self:GetCurActDay(scmd.sub_type) or 1
  225. v.day = day
  226. if v.start_day <= day and v.end_day >= day then
  227. list[day] = v
  228. end
  229. end
  230. scmd.list = list
  231. self.view_info[scmd.sub_type] = scmd
  232. self:CheckGroupBuyingRed(scmd.sub_type)
  233. end
  234. function MobilizationModel:GetCurDayTaskTypePro( sub_type,day,task_type )
  235. local cur_pro = 0
  236. local scmd = self:GetServerInfo(sub_type)
  237. if scmd and scmd.list and scmd.list[day] and scmd.list[day].task_type_complete_list then
  238. cur_pro = scmd.list[day].task_type_complete_list[task_type] or 0
  239. end
  240. return cur_pro
  241. end
  242. --检查团购的红点并刷新主界面图标红点
  243. function MobilizationModel:CheckGroupBuyingRed( sub_type )
  244. local scmd = self:GetServerInfo(sub_type)
  245. if not scmd then return end
  246. self.tab_red_dot_info[scmd.sub_type] = {}--主页签红点信息
  247. self.sub_tab_red_dot_info[scmd.sub_type] = {}--子页签红点信息
  248. local sort_id = 0
  249. -- print("huangcong:MobilizationModel [start:249] scmd.list:", scmd.list)
  250. -- PrintTable(scmd.list)
  251. -- print("huangcong:MobilizationModel [end]")
  252. for i,v in pairs(scmd.list) do
  253. self.tab_red_dot_info[scmd.sub_type][v.day] = v.total_state == 1
  254. for ii,vv in pairs(v.task_list) do
  255. if not self.sub_tab_red_dot_info[scmd.sub_type][v.day] then
  256. self.sub_tab_red_dot_info[scmd.sub_type][v.day] = {}
  257. end
  258. for iii,vvv in pairs(vv) do
  259. sort_id = nil
  260. local cfg_list = self:GetTaskCfg(scmd.sub_type,v.day)
  261. local cfg = nil
  262. if cfg_list then
  263. for l,n in pairs(cfg_list) do
  264. if vvv.task_type == n.task_type then
  265. cfg = n
  266. break
  267. end
  268. end
  269. end
  270. if cfg then
  271. sort_id = cfg.sort
  272. if not self.tab_red_dot_info[scmd.sub_type][v.day] then
  273. self.tab_red_dot_info[scmd.sub_type][v.day] = vvv.state == 1 and vvv.finish_pro == 1
  274. end
  275. if not self.sub_tab_red_dot_info[scmd.sub_type][v.day][sort_id] then
  276. self.sub_tab_red_dot_info[scmd.sub_type][v.day][sort_id] = vvv.state == 1 and vvv.finish_pro == 1
  277. end
  278. if self.sub_tab_red_dot_info[scmd.sub_type][v.day][sort_id] and self.tab_red_dot_info[scmd.sub_type][v.day] then
  279. break
  280. end
  281. end
  282. end
  283. end
  284. end
  285. -- print("huangcong:MobilizationModel [start:243] :", self.sub_tab_red_dot_info)
  286. -- PrintTable(self.sub_tab_red_dot_info)
  287. -- print("huangcong:MobilizationModel [end]")
  288. --找到当前天数对应的团购类型
  289. local base_type = CustomActivityModel.CustomActBaseType.KF_GROUP_BUYING
  290. local act_list = CustomActivityModel:getInstance():getAllActListByBaseType(base_type) or {}
  291. local group_buying_sub_type = nil
  292. if not self.tab_red_dot_info[sub_type] then
  293. self.tab_red_dot_info[sub_type] = {}
  294. end
  295. if act_list then
  296. for i,v in pairs(act_list) do
  297. for ii,vv in ipairs(v.condition_list) do
  298. if vv[1] == "custom_act" then
  299. if not self.tab_red_dot_info[sub_type][tonumber(vv[4])] then--这里主页签还是没有红点就要加上团购的红点
  300. local bool = KfActivityModel:getInstance().act_red_dot_info[base_type]
  301. and KfActivityModel:getInstance().act_red_dot_info[base_type][v.sub_type] or false
  302. self.tab_red_dot_info[sub_type][tonumber(vv[4])] = bool
  303. end
  304. break
  305. end
  306. end
  307. end
  308. end
  309. self:CheckMainIconRedDot(sub_type)
  310. end
  311. --获得全民动员信息
  312. function MobilizationModel:GetServerInfo( sub_type )
  313. return self.view_info[sub_type]
  314. end
  315. --获得页签信息
  316. function MobilizationModel:GetTabInfo( )
  317. return self.act_base_list
  318. end
  319. --获得活动当前天数
  320. function MobilizationModel:GetCurActDay( sub_type )
  321. local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION
  322. local sub_type = CustomActivityModel:getInstance():getActMinSubType(base_type)
  323. local level = RoleManager.Instance.mainRoleInfo.level
  324. local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
  325. local is_open = false
  326. local end_time = 0
  327. if act_list and act_list.etime then
  328. local have_time = TimeUtil:getServerTime( ) - act_list.stime
  329. if have_time > 0 then
  330. self.act_day[sub_type] = math.ceil(have_time/24/3600) <= 0 and 1 or math.ceil(have_time/24/3600)
  331. end
  332. end
  333. return self.act_day[sub_type] or 1
  334. end
  335. --检测全民动员活动是否开启
  336. function MobilizationModel:CheckActOpen(sub_type)
  337. local base_type = CustomActivityModel.CustomActBaseType.MOBILIZATION
  338. local sub_type = CustomActivityModel:getInstance():getActMinSubType(base_type)
  339. local level = RoleManager.Instance.mainRoleInfo.level
  340. local act_list = CustomActivityModel:getInstance():getActList(base_type, sub_type)
  341. local is_open = false
  342. local end_time = 0
  343. if act_list and act_list.etime then
  344. local have_time = TimeUtil:getServerTime( ) - act_list.stime
  345. if have_time > 0 then
  346. self.act_day[sub_type] = math.ceil(have_time/24/3600) <= 0 and 1 or math.ceil(have_time/24/3600)
  347. end
  348. local icon_sub_type = base_type*1000 + sub_type
  349. if sub_type >= 10001 then
  350. icon_sub_type = base_type*100000 + sub_type
  351. end
  352. end_time = act_list.etime - TimeUtil:getServerTime()
  353. is_open = end_time > 0
  354. if GetModuleIsOpen(331,base_type) then
  355. if is_open then
  356. return true
  357. end
  358. end
  359. end
  360. return true
  361. end