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

534 行
14 KiB

  1. TaskSubCommonView = TaskSubCommonView or BaseClass(BaseItem)
  2. local TaskSubCommonView = TaskSubCommonView
  3. function TaskSubCommonView:__init(parent_wnd)
  4. self.base_file = "task"
  5. self.layout_file = "TaskSubCommonView"
  6. self.model = TaskModel:getInstance()
  7. self.layer_name = "UI"
  8. self.award_item_list = {}
  9. self.show_tabs = {}
  10. self.last_click_time = 0
  11. self:Load()
  12. end
  13. function TaskSubCommonView:__delete()
  14. if self.task_event_id then
  15. self.model:UnBind(self.task_event_id)
  16. self.task_event_id = nil
  17. end
  18. for i,item in pairs(self.award_item_list) do
  19. item:DeleteMe()
  20. end
  21. self.award_item_list = {}
  22. if self.verTabBar then
  23. self.verTabBar:DeleteMe()
  24. end
  25. self.verTabBar = nil
  26. end
  27. function TaskSubCommonView:Load_callback()
  28. self.task_desc_txt,
  29. self.level_txt,
  30. self.opt_btn_txt,
  31. self.empty_tip_txt,
  32. self.guild_vip_desc_txt = self:GetChildTexts({
  33. "MessagePanel/TaskDesc",
  34. "MessagePanel/Level",
  35. "MessagePanel/OptBtn/Text",
  36. "EmptyPanel/EmptyTip",
  37. "MessagePanel/GuildDesc/VipDesc",
  38. })
  39. self.message_panel,
  40. self.empty_panel,
  41. self.opt_btn,
  42. self.opt_btn_bg,
  43. self.finish_btn,
  44. self.award_title_con,
  45. self.guild_desc = self:GetChildGameObjects({
  46. "MessagePanel",
  47. "EmptyPanel",
  48. "MessagePanel/OptBtn",
  49. "MessagePanel/OptBtn/Bg",
  50. "MessagePanel/FinishBtn",
  51. "MessagePanel/3",
  52. "MessagePanel/GuildDesc",
  53. })
  54. self.mContent,
  55. self.effect,
  56. self.bar_parent = self:GetChildTransforms({
  57. "MessagePanel/ScrollView/Viewport/Content",
  58. "MessagePanel/OptBtn/Effect",
  59. "Info",
  60. })
  61. self:InitEvent()
  62. if self.need_refreshData then
  63. self:SetData(self.parent_index,self.sub_index)
  64. end
  65. end
  66. function TaskSubCommonView:InitEvent()
  67. local function onClickHandler(target)
  68. if target == self.opt_btn then
  69. if not self.data then
  70. return
  71. end
  72. if Status.NowTime - self.last_click_time < 1 then
  73. return
  74. end
  75. self.last_click_time = Status.NowTime
  76. if self.data.mainTip then
  77. GlobalEventSystem:Fire(EventName.OPEN_DAILY_VIEW)
  78. self.model:Fire(TaskEvent.CLOSE_TASK_VIEW)
  79. else
  80. if self:IsExtendFinish() then
  81. GlobalEventSystem:Fire(TaskEventType.SEND_TASK_FINISH, self.data.id)
  82. else
  83. self:AutoFindWay()
  84. end
  85. end
  86. elseif target == self.finish_btn then
  87. --只有赏金或社团任务才能直接完成
  88. if not self.data then
  89. return
  90. end
  91. if self.model.not_show_alert then
  92. --不提示,直接完成
  93. if Status.NowTime - self.model.last_time > 1 then
  94. local need_jin = self.model:GetCostFinishTask(self.data.type)
  95. if GoodsModel:getInstance():IsJinEnough(need_jin) then
  96. self.model.last_time = Status.NowTime
  97. GlobalEventSystem:Fire(TaskEventType.SEND_TASK_FINISH, self.data.id)
  98. else
  99. if ClientConfig.alpha_mode then
  100. Message.show("您的彩钻余额不足")
  101. return
  102. end
  103. GlobalEventSystem:Fire(EventName.OPEN_RECHARGE_TIP_VIEW, true)
  104. end
  105. end
  106. else
  107. GlobalEventSystem:Fire(EventName.OPEN_TASK_FINISH_TIP_VIEW, true, self.data.type, self.data.id)
  108. end
  109. end
  110. end
  111. AddClickEvent(self.opt_btn,onClickHandler)
  112. AddClickEvent(self.finish_btn,onClickHandler)
  113. -- 刷新列表
  114. local function onUpdateView( )
  115. if not self.data then
  116. return
  117. end
  118. local task_id = self.data.id
  119. self.tab_data = self:GetDailyTabData()
  120. local main_index,sub_index = self:GetTabIndexByTaskId(task_id)
  121. if main_index ~= 0 and self.verTabBar then
  122. self.verTabBar:SetSelectTab(main_index,sub_index,true)
  123. else
  124. self:SetData()
  125. end
  126. end
  127. self.task_event_id = self.model:Bind(TaskEvent.TASK_LIST_INIT,onUpdateView)
  128. end
  129. function TaskSubCommonView:ShowMessagePanel(bool)
  130. if bool then
  131. if not self.message_panel.activeSelf then
  132. self.message_panel:SetActive(true)
  133. end
  134. if self.empty_panel.activeSelf then
  135. self.empty_panel:SetActive(false)
  136. end
  137. else
  138. if self.message_panel.activeSelf then
  139. self.message_panel:SetActive(false)
  140. end
  141. if not self.empty_panel.activeSelf then
  142. self.empty_panel:SetActive(true)
  143. end
  144. end
  145. end
  146. function TaskSubCommonView:AutoFindWay()
  147. if self.data then
  148. self.model:ClearCollectTaskId()
  149. self.model:TaskClickFun(self.data)
  150. self.model:Fire(TaskEvent.CLOSE_TASK_VIEW)
  151. end
  152. end
  153. function TaskSubCommonView:GetDefaultSelectIndex()
  154. if self.parent_index and self.sub_index then
  155. local parent_index = self.parent_index
  156. local sub_index = self.sub_index
  157. if self.sub_index == 0 then
  158. local data = self.tab_data[self.parent_index]
  159. if data and #data.sub_tab > 0 then
  160. sub_index = 1
  161. end
  162. end
  163. self.parent_index = false
  164. self.sub_index = false
  165. return parent_index,sub_index
  166. end
  167. if not self.tab_data then
  168. return 1,0
  169. end
  170. for index,data in ipairs(self.tab_data) do
  171. if #data.sub_tab > 0 then
  172. return index,1
  173. end
  174. end
  175. return 1,0
  176. end
  177. function TaskSubCommonView:CreateNewUICusVerTabBar()
  178. self.tab_data = self:GetDailyTabData()
  179. if not self.verTabBar then
  180. self.verTabBar = NewUICusVerTabBar.New(self.bar_parent, Vector2(280, 580), TaskVerTabSubBtn, co.TableXY(274, 70),co.TableXY(140, -103))
  181. end
  182. local function select_callback(parent_index,sub_index,data)
  183. self:SeletedTabbar(parent_index,sub_index,data)
  184. end
  185. self.verTabBar:SetTabBars(self.tab_data, select_callback, true, true)
  186. end
  187. function TaskSubCommonView:SeletedTabbar(parent_index,sub_index)
  188. self.parent_index = parent_index
  189. self.sub_index = sub_index
  190. if self.verTabBar ~= nil then
  191. self.verTabBar:SetTabBarIndex(parent_index,sub_index)
  192. self:SwitchBar()
  193. end
  194. end
  195. function TaskSubCommonView:SwitchBar()
  196. local parent_index,sub_index = self.verTabBar:GetCurrentSelectIndex()
  197. local has_task = false
  198. if parent_index > 0 and sub_index > 0 then
  199. local data = self.tab_data[parent_index]
  200. if not data then
  201. return
  202. end
  203. data = data.sub_tab[sub_index]
  204. if data then
  205. has_task = true
  206. self:ShowMessagePanel(true)
  207. self:SelectTask(data)
  208. end
  209. end
  210. if not has_task then
  211. if parent_index > 0 then
  212. local data = self.tab_data[parent_index]
  213. if not data then
  214. return
  215. end
  216. if #data.sub_tab == 0 then
  217. self:ShowMessagePanel(false)
  218. if self.verTabBar then
  219. self.verTabBar:CancelCurrSelect()
  220. end
  221. local str = ""
  222. local real_index = self:GetRealTabIndex(parent_index)
  223. if real_index == 1 then
  224. str = "您已完成今天的日常任务\n每天凌晨4:00重置哦!"
  225. elseif real_index == 2 then
  226. local guild_id = RoleManager:getInstance():GetMainRoleVo().guild_id
  227. if guild_id == 0 then
  228. str = "先加入社团,再来领取社团任务吧!"
  229. else
  230. str = "您已完成今日份的社团任务\n每天凌晨4点重置哦!"
  231. end
  232. elseif real_index == 3 then
  233. str = string.format("暂无%s", TaskModel.TaskTypeStr3[TaskType.TRUN_LINE])
  234. end
  235. self.empty_tip_txt.text = str
  236. end
  237. end
  238. end
  239. end
  240. function TaskSubCommonView:SetData(taskType,task_id,parent_index,sub_index)
  241. self.parent_index = parent_index or self.parent_index
  242. self.sub_index = sub_index or self.sub_index
  243. if self.is_loaded then
  244. self.need_refreshData = false
  245. self:CreateNewUICusVerTabBar()
  246. local parent_index,sub_index = self:GetDefaultSelectIndex()
  247. self:SeletedTabbar(parent_index,sub_index,true)
  248. self.verTabBar:SetSelectTab(parent_index,sub_index,true)
  249. else
  250. self.need_refreshData = true
  251. end
  252. end
  253. function TaskSubCommonView:GetTabIndexByTaskId(task_id)
  254. if not self.tab_data then
  255. return 0,0
  256. end
  257. for index,data in ipairs(self.tab_data) do
  258. for index1,data1 in ipairs(data.sub_tab) do
  259. if data1.id == task_id then
  260. return index,index1
  261. end
  262. end
  263. end
  264. return 0,0
  265. end
  266. function TaskSubCommonView:SelectTask(task_vo)
  267. self.data = task_vo
  268. self.model:MakeTaskTip(task_vo)
  269. self:ShowMessagePanel(true)
  270. local temp_award_tab = {}
  271. self.task_desc_txt.text = Trim(task_vo.tipContent)
  272. self.level_txt.text = string.format("等级要求:<color=#439a13>%d级</color>",task_vo.level)
  273. --日常任务
  274. if task_vo.type == TaskType.GUILD_LINE then
  275. if task_vo.award_list and #task_vo.award_list > 0 then
  276. local temp = DeepCopy(task_vo.award_list[1])
  277. temp.is_guild = true
  278. for index,data in ipairs(task_vo.award_list) do
  279. table.insert(temp_award_tab,data)
  280. end
  281. local function sort_func(vo1,vo2)
  282. local type1 = tonumber(vo1[1]) or 0
  283. local type2 = tonumber(vo2[1]) or 0
  284. return type1 < type2
  285. end
  286. table.sort(temp_award_tab,sort_func)
  287. -- local lv = GuildModel:getInstance():GetGuildBuildLvInfo(6)
  288. -- if lv and lv > 1 then
  289. -- table.insert(temp_award_tab,temp)
  290. -- end
  291. end
  292. self.guild_desc:SetActive(true)
  293. -- local lv = GuildModel:getInstance():GetGuildBuildLvInfo(6)
  294. -- self.guild_desc:GetComponent("Text").text = "社团任务经验加成:<color='#4eae1a'>+"..GuildModel:getInstance():GetGuildTaskAddition(lv).."%</color>"
  295. local vip_flag = RoleManager.Instance.mainRoleInfo.vip_flag
  296. if vip_flag >= 4 then
  297. self.guild_vip_desc_txt.text = "已开启特权:<color='#4eae1a'>自动进行社团任务</color>"
  298. else
  299. self.guild_vip_desc_txt.text = "提升至V4可开启特权:<color='#4eae1a'>自动进行社团任务</color>"
  300. end
  301. DialogueModel:getInstance():Fire(DialogueModel.REQUEST_CCMD_EVENT, 30011, task_vo.id)
  302. elseif task_vo.type == TaskType.BOUNTY_LINE then
  303. if task_vo.award_list and #task_vo.award_list > 0 then
  304. local temp = DeepCopy(task_vo.award_list[1])
  305. temp.is_vip = true
  306. for index,data in ipairs(task_vo.award_list) do
  307. table.insert(temp_award_tab,data)
  308. end
  309. local function sort_func(vo1,vo2)
  310. local type1 = tonumber(vo1[1]) or 0
  311. local type2 = tonumber(vo2[1]) or 0
  312. return type1 < type2
  313. end
  314. table.sort(temp_award_tab,sort_func)
  315. local vip_lv = RoleManager.Instance.mainRoleInfo.vip_flag
  316. if vip_lv and vip_lv ~= 0 then
  317. table.insert(temp_award_tab,temp)
  318. end
  319. end
  320. self.guild_desc:SetActive(false)
  321. DialogueModel:getInstance():Fire(DialogueModel.REQUEST_CCMD_EVENT, 30011, task_vo.id)
  322. elseif task_vo.type == TaskType.TRUN_LINE then
  323. self.guild_desc:SetActive(false)
  324. end
  325. local award_list = temp_award_tab or {}
  326. for i,v in ipairs(award_list) do
  327. local item = self.award_item_list[i]
  328. if item == nil then
  329. item = AwardItem.New(self.mContent)
  330. item:SetItemSize(80, 80)
  331. self.award_item_list[i] = item
  332. end
  333. item:SetVisible(true)
  334. local goods_id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
  335. item:SetData(goods_id, v[3], nil, nil, lock)
  336. if v.is_guild then
  337. item:SetVipAdditionTip(false)
  338. item:SetGuildAdditionTip(true)
  339. elseif v.is_vip then
  340. item:SetGuildAdditionTip(false)
  341. item:SetVipAdditionTip(true)
  342. end
  343. end
  344. self.mContent.sizeDelta = Vector2(#award_list * 85,100)
  345. if #award_list > 0 then
  346. self.award_title_con:SetActive(true)
  347. else
  348. self.award_title_con:SetActive(false)
  349. end
  350. for i = #award_list + 1, #self.award_item_list do
  351. self.award_item_list[i]:SetVisible(false)
  352. end
  353. self:SetOptBtnState(task_vo)
  354. self:SetFinishBtnState(task_vo)
  355. end
  356. function TaskSubCommonView:SetOptBtnState(taskVO)
  357. if taskVO.isFinish then
  358. self.opt_btn:SetActive(false)
  359. else
  360. self.opt_btn:SetActive(true)
  361. if taskVO.acceptType == 1 then
  362. if taskVO.mainTip then
  363. self.opt_btn_txt.text = "前往日常"
  364. self:ClearEffect()
  365. else
  366. self.opt_btn_txt.text = "领取任务"
  367. --self:AddUIEffect("ui_anniu_1", self.effect, self.layer_name, nil, {x=1.22,y=1.1}, true)
  368. end
  369. else
  370. self.opt_btn_txt.text = "立即前往"
  371. self.opt_btn_bg:SetActive(false)
  372. self:ClearEffect()
  373. --如果是支线已完成的
  374. if self:IsExtendFinish() then
  375. self.opt_btn_txt.text = "领取奖励"
  376. self.opt_btn_bg:SetActive(true)
  377. -- self:AddUIEffect("ui_anniu_1", self.effect, self.layer_name, nil, {x=1.22,y=1.1}, true)
  378. end
  379. end
  380. end
  381. end
  382. function TaskSubCommonView:SetFinishBtnState(taskVO)
  383. if taskVO.id == Config.ConfigTaskEffect.guildTaskTipId or taskVO.id == Config.ConfigTaskEffect.bountyTaskTipId then
  384. self.finish_btn:SetActive(false)
  385. return
  386. end
  387. if taskVO.type == TaskType.BOUNTY_LINE or taskVO.type == TaskType.GUILD_LINE then
  388. self.finish_btn:SetActive(true)
  389. else
  390. self.finish_btn:SetActive(false)
  391. end
  392. end
  393. function TaskSubCommonView:IsExtendFinish( )
  394. if self.model:IsNeedClickTask(self.data) then
  395. --点击判断是否已经完成任务,是的话发协议完成任务
  396. local tip = self.model:GetExtendSpecialTip(self.data)
  397. if tip and tip.isFinish == 1 then
  398. return true
  399. end
  400. end
  401. end
  402. function TaskSubCommonView:ClearEffect( )
  403. self:ClearUIEffect(self.effect)
  404. end
  405. --获取任务面板的支线数据
  406. function TaskSubCommonView:GetDailyTabData()
  407. local tab_data = {
  408. [1] = {main_tab = "日常任务", sub_tab = {}},
  409. }
  410. local taskVo = self.model:GetBountyTipTask()
  411. if taskVo then
  412. --当日赏金任务任务未做
  413. tab_data[1].sub_tab = {[1] = taskVo}
  414. else
  415. tab_data[1].sub_tab = self.model:GetTabData(TaskType.BOUNTY_LINE)
  416. end
  417. table.insert(self.show_tabs,1)
  418. local playerLv = RoleManager:getInstance():GetMainRoleVo().level
  419. if playerLv >= Config.ConfigOpenLv.Other.guild_task then
  420. local guild_id = RoleManager:getInstance():GetMainRoleVo().guild_id
  421. tab_data[2] = {main_tab = "社团任务", sub_tab = {}}
  422. table.insert(self.show_tabs,2)
  423. if guild_id > 0 then
  424. local taskVo = self.model:GetGuildTipTask()
  425. if taskVo then
  426. --当日社团任务任务未做
  427. tab_data[2].sub_tab = {[1] = taskVo}
  428. else
  429. tab_data[2].sub_tab = self.model:GetTabData(TaskType.GUILD_LINE)
  430. end
  431. end
  432. end
  433. if playerLv >= Config.ConfigOpenLv.Other.turn and self.model:HasTurnLine() then
  434. tab_data[3] = {main_tab = "转生任务", sub_tab = {}}
  435. tab_data[3].sub_tab = self.model:GetTabData(TaskType.TRUN_LINE)
  436. table.insert(self.show_tabs,3)
  437. end
  438. return tab_data
  439. end
  440. function TaskSubCommonView:GetRealTabIndex(index)
  441. for i,parent_index in ipairs(self.show_tabs) do
  442. if parent_index == index then
  443. return i
  444. end
  445. end
  446. return 1
  447. end