源战役客户端
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

304 lignes
8.4 KiB

il y a 4 semaines
  1. TaskAnnounceModel = TaskAnnounceModel or BaseClass(BaseModel)
  2. TaskAnnounceModel.OPEN_ANNOUNCE_VIEW = "TaskAnnounceModel.OPEN_ANNOUNCE_VIEW"
  3. TaskAnnounceModel.UPDATE_ANNOUNCE_VIEW = "TaskAnnounceModel.UPDATE_ANNOUNCE_VIEW"
  4. TaskAnnounceModel.REQUEST_CCMD_EVENT = "TaskAnnounceModel.REQUEST_CCMD_EVENT"
  5. TaskAnnounceModel.UPDATE_ANNOUNCE_VISIBLE = "TaskAnnounceModel.UPDATE_ANNOUNCE_VISIBLE" --更新右边功能提示界面是否显示
  6. TaskAnnounceModel.UPDATE_ANNOUNCE_RED_DOT = "TaskAnnounceModel.UPDATE_ANNOUNCE_RED_DOT" --功能预告红点
  7. function TaskAnnounceModel:__init()
  8. TaskAnnounceModel.Instance = self
  9. self.reward_list = {}
  10. self.show_menu = true--是否显示功能预告
  11. self.red_dot = nil
  12. self.reward_red_idx_list = false
  13. end
  14. --主界面模型类展示的 缩放和位置
  15. TaskAnnounceModel.MainUIStyle =
  16. {
  17. [1001] = {140, 14, 125, 0}, --坐骑
  18. [1003] = {400, 0, 110,0},--宝具
  19. [1004] = {200, 0, 80,0}, -- 武器
  20. [1005] = {180, 0, 68, 0},--AI娘
  21. [1301] = {2, 0, 100, 0},--幻光
  22. [1002] = {250, 15, 150, -280},--炫翼
  23. [1201] = {300, 0, 90, -280},--宠物, 宝宝 暂时也用这个
  24. [1006] = {300, 0, 90, -280},--磁炮
  25. [1008] = {400, -40, 45, -280},--幻甲
  26. [1007] = {300, 12, 120, -280}, --星翼
  27. }
  28. --功能预告界面模型类展示的 缩放和位置
  29. TaskAnnounceModel.TAViewUIStyle =
  30. {
  31. [1301] = {3, 0, -820, 0},--幻光
  32. [1001] = {180, -144, 250, 0}, --坐骑
  33. [1004] = {250, -50, 155,0}, -- 武器(无效)
  34. [1003] = {600, -60, 110,0},--宝具
  35. [1005] = {250, -60, 150, 0},--AI娘 /
  36. [1002] = {300,-65, 200, 0},--炫翼
  37. [1201] = {300, -60, 220, 0},--宠物,
  38. [1601] = {300, -50, 220, 0},-- 孩子
  39. [1006] = {400, -68, 162, 0},--磁炮
  40. [1008] = {450, -77, 150, 0},--幻甲
  41. [1007] = {400, -71, 167, 0},--星翼
  42. [1009] = {800, -60, 300, 0},--星辰
  43. [1401] = {400, -60, 240, 0},--装备
  44. [1101] = {110, -60, 160, 0},--怪物
  45. [1010] = {3, 45, -840, 0},--圣物
  46. [1011] = {100, -70, 120, 0},-- 神座
  47. [1701] = {400, -60, 200, 0},-- 战魂
  48. [9999] = {100, -80, 220, 0}, --龙神宝库
  49. }
  50. --功能预告界面模型类展示的 缩放和位置
  51. TaskAnnounceModel.WeaponUIStyle =
  52. {
  53. [1] = {300, -50, 225,0}, -- 武器 男剑
  54. [2] = {300, -50, 225,0}, -- 武器 女剑
  55. [3] = {600, -50, 0,0}, -- 武器 男枪
  56. [4] = {600, -50, 0,0}, -- 武器 女枪
  57. }
  58. function TaskAnnounceModel:ResetData()
  59. self.red_dot = nil
  60. end
  61. function TaskAnnounceModel:getInstance()
  62. if TaskAnnounceModel.Instance == nil then
  63. TaskAnnounceModel.New()
  64. end
  65. return TaskAnnounceModel.Instance
  66. end
  67. function TaskAnnounceModel:SetRewardInfo(list)
  68. self.reward_list = list or {}
  69. self:Fire(TaskAnnounceModel.UPDATE_ANNOUNCE_VIEW)
  70. self:CheckTaskAnnounceRedDot()
  71. end
  72. function TaskAnnounceModel:SetRewardData(data)
  73. if self.reward_list then
  74. local is_find = false
  75. for k,v in pairs(self.reward_list) do
  76. if v.func_id == data.func_id then
  77. is_find = true
  78. v.reward_state = data.reward_state
  79. break
  80. end
  81. end
  82. if not is_find then
  83. table.insert(self.reward_list, data)
  84. end
  85. self:Fire(TaskAnnounceModel.UPDATE_ANNOUNCE_VIEW)
  86. self:CheckTaskAnnounceRedDot()
  87. end
  88. end
  89. --state
  90. --0 不可领取
  91. --1, 可领取,但未领取
  92. --2 已经领取
  93. function TaskAnnounceModel:GetRewardData(id)
  94. local state = 0
  95. if self.reward_list then
  96. for k,v in pairs(self.reward_list) do
  97. if v.func_id ==id then
  98. state = v.reward_state
  99. break
  100. end
  101. end
  102. end
  103. return state
  104. end
  105. --获取预告的vo
  106. function TaskAnnounceModel:GetTaskAnnounceVo()
  107. local cfg_list = self:GetTaskAnnounceList()
  108. local find = false
  109. local find_vo = nil
  110. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  111. local level = RoleManager:getInstance():GetMainRoleVo().level
  112. for i,v in ipairs(cfg_list) do
  113. if not v.has_open then
  114. --如果此项没有开服天数,则说明是等级或者主线没有完成
  115. if v.open_day == 0 then
  116. find = true
  117. find_vo = v
  118. break
  119. else
  120. --如果已经达到了开服天数,则和正常项目已于
  121. if open_day >= v.open_day then
  122. find = true
  123. find_vo = v
  124. break
  125. else
  126. --如果此项依赖开服天数,并且没达到开服天数,如果超过了这个等级,就显示下一个
  127. if level < v.open_lv then
  128. find = true
  129. find_vo = v
  130. break
  131. end
  132. end
  133. end
  134. end
  135. end
  136. return find,find_vo
  137. end
  138. --获取功能预告红点
  139. function TaskAnnounceModel:GetTaskAnnounceRedDot()
  140. return self.red_dot
  141. end
  142. --刷新红点
  143. function TaskAnnounceModel:CheckTaskAnnounceRedDot()
  144. local dot = self.red_dot
  145. self.red_dot = false
  146. self.reward_list = self.reward_list or {}
  147. for k,v in pairs(self.reward_list) do
  148. if v.reward_state == 1 then
  149. self.red_dot = true
  150. break
  151. end
  152. end
  153. if dot ~= self.red_dot then
  154. self:Fire(TaskAnnounceModel.UPDATE_ANNOUNCE_RED_DOT)
  155. end
  156. end
  157. function TaskAnnounceModel:GetTaskAnnounceList()
  158. local list = {}
  159. local cfg_list = {}
  160. local ori_cfg = Config.Moduleadvance
  161. local level = RoleManager:getInstance():GetMainRoleVo().level
  162. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  163. for k,v in pairs(ori_cfg) do
  164. local open_data = stringtotable(v.condition)
  165. local has_open = MainUIModel:getInstance():GetFunOpenState(open_data[1] or 1, open_data[2] or 0) and v.open_day <= open_day
  166. local data = {
  167. id = v.id,
  168. name = v.name,
  169. open_lv = open_data[1] or 1,
  170. reward = v.reward,
  171. icon = v.icon,
  172. has_open = has_open,
  173. open_day = v.open_day,
  174. is_next = false,
  175. con_desc = v.con_desc,
  176. func_desc = v.func_desc,
  177. condition = v.condition,
  178. model_res = v.model_res,
  179. title_pic = v.title_pic,
  180. mod_desc1 = v.mod_desc1,
  181. mod_desc2 = v.mod_desc2,
  182. jump = v.jump,
  183. }
  184. table.insert(cfg_list, data)
  185. end
  186. table.sort(cfg_list, function(a,b)
  187. return a.open_lv < b.open_lv
  188. end)
  189. return cfg_list
  190. end
  191. --功能预告界面内排序规则
  192. --已领取——已达成可领取——未达成不可领取(同梯度按照等级排序)
  193. function TaskAnnounceModel:GetTaskAnnounceListInView()
  194. local list = {}
  195. local cfg_list = {}
  196. local ori_cfg = Config.Moduleadvance
  197. local level = RoleManager:getInstance():GetMainRoleVo().level
  198. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  199. for k,v in pairs(ori_cfg) do
  200. local open_data = stringtotable(v.condition)
  201. local has_open = MainUIModel:getInstance():GetFunOpenState(open_data[1] or 1, open_data[2] or 0) and v.open_day <= open_day
  202. --0 不可领取
  203. --1, 可领取,但未领取
  204. --2 已经领取
  205. local sort_id = 0
  206. local reward_state = self:GetRewardData(v.id)
  207. if reward_state == 2 then
  208. sort_id = 3
  209. elseif reward_state == 1 then
  210. sort_id = 2
  211. end
  212. local data = {
  213. id = v.id,
  214. name = v.name,
  215. open_lv = open_data[1] or 1,
  216. reward = v.reward,
  217. icon = v.icon,
  218. has_open = has_open,
  219. open_day = v.open_day,
  220. is_next = false,
  221. con_desc = v.con_desc,
  222. func_desc = v.func_desc,
  223. condition = v.condition,
  224. model_res = v.model_res,
  225. title_pic = v.title_pic,
  226. mod_desc1 = v.mod_desc1,
  227. mod_desc2 = v.mod_desc2,
  228. jump = v.jump,
  229. sort_id = sort_id,
  230. }
  231. table.insert(cfg_list, data)
  232. end
  233. table.sort(cfg_list, function(a,b)
  234. if a.sort_id ~= b.sort_id then
  235. return a.sort_id > b.sort_id
  236. else
  237. return a.open_lv < b.open_lv
  238. end
  239. end)
  240. return cfg_list
  241. end
  242. --获取某个位置 一侧是否有红点
  243. function TaskAnnounceModel:GetRewardByIndexSide(idx, is_left, force_update)
  244. if not self.reward_red_idx_list or force_update then
  245. self.reward_red_idx_list = {}
  246. local list = self:GetTaskAnnounceListInView()
  247. local left_red_idx = 0
  248. local right_red_idx = 0
  249. for i,v in ipairs(list) do
  250. if v.has_open then
  251. local state = self:GetRewardData(v.id)
  252. if state == 1 then
  253. left_red_idx = left_red_idx == 0 and i or left_red_idx
  254. right_red_idx = i
  255. end
  256. end
  257. --初始化,左侧红点
  258. self.reward_red_idx_list[i] = self.reward_red_idx_list[i] or {}
  259. self.reward_red_idx_list[i].left_have_red = left_red_idx ~= 0 and (left_red_idx < i) or false
  260. self.reward_red_idx_list[i].id = v.id
  261. self.reward_red_idx_list[i].name = v.name
  262. end
  263. --初始化右侧红点
  264. for i,v in ipairs(list) do
  265. self.reward_red_idx_list[i] = self.reward_red_idx_list[i] or {}
  266. self.reward_red_idx_list[i].right_have_red = right_red_idx ~= 0 and (right_red_idx > i) or false
  267. end
  268. end
  269. if idx and self.reward_red_idx_list and #self.reward_red_idx_list >= idx then
  270. if is_left then
  271. return self.reward_red_idx_list[idx].left_have_red
  272. else
  273. return self.reward_red_idx_list[idx].right_have_red
  274. end
  275. end
  276. return false
  277. end