TaskSubCommonView = TaskSubCommonView or BaseClass(BaseItem) local TaskSubCommonView = TaskSubCommonView function TaskSubCommonView:__init(parent_wnd) self.base_file = "task" self.layout_file = "TaskSubCommonView" self.model = TaskModel:getInstance() self.layer_name = "UI" self.award_item_list = {} self.show_tabs = {} self.last_click_time = 0 self:Load() end function TaskSubCommonView:__delete() if self.task_event_id then self.model:UnBind(self.task_event_id) self.task_event_id = nil end for i,item in pairs(self.award_item_list) do item:DeleteMe() end self.award_item_list = {} if self.verTabBar then self.verTabBar:DeleteMe() end self.verTabBar = nil end function TaskSubCommonView:Load_callback() self.task_desc_txt, self.level_txt, self.opt_btn_txt, self.empty_tip_txt, self.guild_vip_desc_txt = self:GetChildTexts({ "MessagePanel/TaskDesc", "MessagePanel/Level", "MessagePanel/OptBtn/Text", "EmptyPanel/EmptyTip", "MessagePanel/GuildDesc/VipDesc", }) self.message_panel, self.empty_panel, self.opt_btn, self.opt_btn_bg, self.finish_btn, self.award_title_con, self.guild_desc = self:GetChildGameObjects({ "MessagePanel", "EmptyPanel", "MessagePanel/OptBtn", "MessagePanel/OptBtn/Bg", "MessagePanel/FinishBtn", "MessagePanel/3", "MessagePanel/GuildDesc", }) self.mContent, self.effect, self.bar_parent = self:GetChildTransforms({ "MessagePanel/ScrollView/Viewport/Content", "MessagePanel/OptBtn/Effect", "Info", }) self:InitEvent() if self.need_refreshData then self:SetData(self.parent_index,self.sub_index) end end function TaskSubCommonView:InitEvent() local function onClickHandler(target) if target == self.opt_btn then if not self.data then return end if Status.NowTime - self.last_click_time < 1 then return end self.last_click_time = Status.NowTime if self.data.mainTip then GlobalEventSystem:Fire(EventName.OPEN_DAILY_VIEW) self.model:Fire(TaskEvent.CLOSE_TASK_VIEW) else if self:IsExtendFinish() then GlobalEventSystem:Fire(TaskEventType.SEND_TASK_FINISH, self.data.id) else self:AutoFindWay() end end elseif target == self.finish_btn then --只有赏金或社团任务才能直接完成 if not self.data then return end if self.model.not_show_alert then --不提示,直接完成 if Status.NowTime - self.model.last_time > 1 then local need_jin = self.model:GetCostFinishTask(self.data.type) if GoodsModel:getInstance():IsJinEnough(need_jin) then self.model.last_time = Status.NowTime GlobalEventSystem:Fire(TaskEventType.SEND_TASK_FINISH, self.data.id) else if ClientConfig.alpha_mode then Message.show("您的彩钻余额不足") return end GlobalEventSystem:Fire(EventName.OPEN_RECHARGE_TIP_VIEW, true) end end else GlobalEventSystem:Fire(EventName.OPEN_TASK_FINISH_TIP_VIEW, true, self.data.type, self.data.id) end end end AddClickEvent(self.opt_btn,onClickHandler) AddClickEvent(self.finish_btn,onClickHandler) -- 刷新列表 local function onUpdateView( ) if not self.data then return end local task_id = self.data.id self.tab_data = self:GetDailyTabData() local main_index,sub_index = self:GetTabIndexByTaskId(task_id) if main_index ~= 0 and self.verTabBar then self.verTabBar:SetSelectTab(main_index,sub_index,true) else self:SetData() end end self.task_event_id = self.model:Bind(TaskEvent.TASK_LIST_INIT,onUpdateView) end function TaskSubCommonView:ShowMessagePanel(bool) if bool then if not self.message_panel.activeSelf then self.message_panel:SetActive(true) end if self.empty_panel.activeSelf then self.empty_panel:SetActive(false) end else if self.message_panel.activeSelf then self.message_panel:SetActive(false) end if not self.empty_panel.activeSelf then self.empty_panel:SetActive(true) end end end function TaskSubCommonView:AutoFindWay() if self.data then self.model:ClearCollectTaskId() self.model:TaskClickFun(self.data) self.model:Fire(TaskEvent.CLOSE_TASK_VIEW) end end function TaskSubCommonView:GetDefaultSelectIndex() if self.parent_index and self.sub_index then local parent_index = self.parent_index local sub_index = self.sub_index if self.sub_index == 0 then local data = self.tab_data[self.parent_index] if data and #data.sub_tab > 0 then sub_index = 1 end end self.parent_index = false self.sub_index = false return parent_index,sub_index end if not self.tab_data then return 1,0 end for index,data in ipairs(self.tab_data) do if #data.sub_tab > 0 then return index,1 end end return 1,0 end function TaskSubCommonView:CreateNewUICusVerTabBar() self.tab_data = self:GetDailyTabData() if not self.verTabBar then self.verTabBar = NewUICusVerTabBar.New(self.bar_parent, Vector2(280, 580), TaskVerTabSubBtn, co.TableXY(274, 70),co.TableXY(140, -103)) end local function select_callback(parent_index,sub_index,data) self:SeletedTabbar(parent_index,sub_index,data) end self.verTabBar:SetTabBars(self.tab_data, select_callback, true, true) end function TaskSubCommonView:SeletedTabbar(parent_index,sub_index) self.parent_index = parent_index self.sub_index = sub_index if self.verTabBar ~= nil then self.verTabBar:SetTabBarIndex(parent_index,sub_index) self:SwitchBar() end end function TaskSubCommonView:SwitchBar() local parent_index,sub_index = self.verTabBar:GetCurrentSelectIndex() local has_task = false if parent_index > 0 and sub_index > 0 then local data = self.tab_data[parent_index] if not data then return end data = data.sub_tab[sub_index] if data then has_task = true self:ShowMessagePanel(true) self:SelectTask(data) end end if not has_task then if parent_index > 0 then local data = self.tab_data[parent_index] if not data then return end if #data.sub_tab == 0 then self:ShowMessagePanel(false) if self.verTabBar then self.verTabBar:CancelCurrSelect() end local str = "" local real_index = self:GetRealTabIndex(parent_index) if real_index == 1 then str = "您已完成今天的日常任务\n每天凌晨4:00重置哦!" elseif real_index == 2 then local guild_id = RoleManager:getInstance():GetMainRoleVo().guild_id if guild_id == 0 then str = "先加入社团,再来领取社团任务吧!" else str = "您已完成今日份的社团任务\n每天凌晨4点重置哦!" end elseif real_index == 3 then str = string.format("暂无%s", TaskModel.TaskTypeStr3[TaskType.TRUN_LINE]) end self.empty_tip_txt.text = str end end end end function TaskSubCommonView:SetData(taskType,task_id,parent_index,sub_index) self.parent_index = parent_index or self.parent_index self.sub_index = sub_index or self.sub_index if self.is_loaded then self.need_refreshData = false self:CreateNewUICusVerTabBar() local parent_index,sub_index = self:GetDefaultSelectIndex() self:SeletedTabbar(parent_index,sub_index,true) self.verTabBar:SetSelectTab(parent_index,sub_index,true) else self.need_refreshData = true end end function TaskSubCommonView:GetTabIndexByTaskId(task_id) if not self.tab_data then return 0,0 end for index,data in ipairs(self.tab_data) do for index1,data1 in ipairs(data.sub_tab) do if data1.id == task_id then return index,index1 end end end return 0,0 end function TaskSubCommonView:SelectTask(task_vo) self.data = task_vo self.model:MakeTaskTip(task_vo) self:ShowMessagePanel(true) local temp_award_tab = {} self.task_desc_txt.text = Trim(task_vo.tipContent) self.level_txt.text = string.format("等级要求:%d级",task_vo.level) --日常任务 if task_vo.type == TaskType.GUILD_LINE then if task_vo.award_list and #task_vo.award_list > 0 then local temp = DeepCopy(task_vo.award_list[1]) temp.is_guild = true for index,data in ipairs(task_vo.award_list) do table.insert(temp_award_tab,data) end local function sort_func(vo1,vo2) local type1 = tonumber(vo1[1]) or 0 local type2 = tonumber(vo2[1]) or 0 return type1 < type2 end table.sort(temp_award_tab,sort_func) -- local lv = GuildModel:getInstance():GetGuildBuildLvInfo(6) -- if lv and lv > 1 then -- table.insert(temp_award_tab,temp) -- end end self.guild_desc:SetActive(true) -- local lv = GuildModel:getInstance():GetGuildBuildLvInfo(6) -- self.guild_desc:GetComponent("Text").text = "社团任务经验加成:+"..GuildModel:getInstance():GetGuildTaskAddition(lv).."%" local vip_flag = RoleManager.Instance.mainRoleInfo.vip_flag if vip_flag >= 4 then self.guild_vip_desc_txt.text = "已开启特权:自动进行社团任务" else self.guild_vip_desc_txt.text = "提升至V4可开启特权:自动进行社团任务" end DialogueModel:getInstance():Fire(DialogueModel.REQUEST_CCMD_EVENT, 30011, task_vo.id) elseif task_vo.type == TaskType.BOUNTY_LINE then if task_vo.award_list and #task_vo.award_list > 0 then local temp = DeepCopy(task_vo.award_list[1]) temp.is_vip = true for index,data in ipairs(task_vo.award_list) do table.insert(temp_award_tab,data) end local function sort_func(vo1,vo2) local type1 = tonumber(vo1[1]) or 0 local type2 = tonumber(vo2[1]) or 0 return type1 < type2 end table.sort(temp_award_tab,sort_func) local vip_lv = RoleManager.Instance.mainRoleInfo.vip_flag if vip_lv and vip_lv ~= 0 then table.insert(temp_award_tab,temp) end end self.guild_desc:SetActive(false) DialogueModel:getInstance():Fire(DialogueModel.REQUEST_CCMD_EVENT, 30011, task_vo.id) elseif task_vo.type == TaskType.TRUN_LINE then self.guild_desc:SetActive(false) end local award_list = temp_award_tab or {} for i,v in ipairs(award_list) do local item = self.award_item_list[i] if item == nil then item = AwardItem.New(self.mContent) item:SetItemSize(80, 80) self.award_item_list[i] = item end item:SetVisible(true) local goods_id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2]) item:SetData(goods_id, v[3], nil, nil, lock) if v.is_guild then item:SetVipAdditionTip(false) item:SetGuildAdditionTip(true) elseif v.is_vip then item:SetGuildAdditionTip(false) item:SetVipAdditionTip(true) end end self.mContent.sizeDelta = Vector2(#award_list * 85,100) if #award_list > 0 then self.award_title_con:SetActive(true) else self.award_title_con:SetActive(false) end for i = #award_list + 1, #self.award_item_list do self.award_item_list[i]:SetVisible(false) end self:SetOptBtnState(task_vo) self:SetFinishBtnState(task_vo) end function TaskSubCommonView:SetOptBtnState(taskVO) if taskVO.isFinish then self.opt_btn:SetActive(false) else self.opt_btn:SetActive(true) if taskVO.acceptType == 1 then if taskVO.mainTip then self.opt_btn_txt.text = "前往日常" self:ClearEffect() else self.opt_btn_txt.text = "领取任务" --self:AddUIEffect("ui_anniu_1", self.effect, self.layer_name, nil, {x=1.22,y=1.1}, true) end else self.opt_btn_txt.text = "立即前往" self.opt_btn_bg:SetActive(false) self:ClearEffect() --如果是支线已完成的 if self:IsExtendFinish() then self.opt_btn_txt.text = "领取奖励" self.opt_btn_bg:SetActive(true) -- self:AddUIEffect("ui_anniu_1", self.effect, self.layer_name, nil, {x=1.22,y=1.1}, true) end end end end function TaskSubCommonView:SetFinishBtnState(taskVO) if taskVO.id == Config.ConfigTaskEffect.guildTaskTipId or taskVO.id == Config.ConfigTaskEffect.bountyTaskTipId then self.finish_btn:SetActive(false) return end if taskVO.type == TaskType.BOUNTY_LINE or taskVO.type == TaskType.GUILD_LINE then self.finish_btn:SetActive(true) else self.finish_btn:SetActive(false) end end function TaskSubCommonView:IsExtendFinish( ) if self.model:IsNeedClickTask(self.data) then --点击判断是否已经完成任务,是的话发协议完成任务 local tip = self.model:GetExtendSpecialTip(self.data) if tip and tip.isFinish == 1 then return true end end end function TaskSubCommonView:ClearEffect( ) self:ClearUIEffect(self.effect) end --获取任务面板的支线数据 function TaskSubCommonView:GetDailyTabData() local tab_data = { [1] = {main_tab = "日常任务", sub_tab = {}}, } local taskVo = self.model:GetBountyTipTask() if taskVo then --当日赏金任务任务未做 tab_data[1].sub_tab = {[1] = taskVo} else tab_data[1].sub_tab = self.model:GetTabData(TaskType.BOUNTY_LINE) end table.insert(self.show_tabs,1) local playerLv = RoleManager:getInstance():GetMainRoleVo().level if playerLv >= Config.ConfigOpenLv.Other.guild_task then local guild_id = RoleManager:getInstance():GetMainRoleVo().guild_id tab_data[2] = {main_tab = "社团任务", sub_tab = {}} table.insert(self.show_tabs,2) if guild_id > 0 then local taskVo = self.model:GetGuildTipTask() if taskVo then --当日社团任务任务未做 tab_data[2].sub_tab = {[1] = taskVo} else tab_data[2].sub_tab = self.model:GetTabData(TaskType.GUILD_LINE) end end end if playerLv >= Config.ConfigOpenLv.Other.turn and self.model:HasTurnLine() then tab_data[3] = {main_tab = "转生任务", sub_tab = {}} tab_data[3].sub_tab = self.model:GetTabData(TaskType.TRUN_LINE) table.insert(self.show_tabs,3) end return tab_data end function TaskSubCommonView:GetRealTabIndex(index) for i,parent_index in ipairs(self.show_tabs) do if parent_index == index then return i end end return 1 end