local TimeLimitedCall = {} local sortingOrder = 0 local globalActive = ConfigManager.GetConfig(ConfigName.GlobalActivity) local lotterySetting=ConfigManager.GetConfig(ConfigName.LotterySetting) local privilegeConfig=ConfigManager.GetConfig(ConfigName.PrivilegeTypeConfig) local artResourcesConfig =ConfigManager.GetConfig(ConfigName.ArtResourcesConfig) local itemConfig=ConfigManager.GetConfig(ConfigName.ItemConfig) local heroConfig=ConfigManager.GetConfig(ConfigName.HeroConfig) function TimeLimitedCall:New(gameObject) local b = {} b.gameObject = gameObject b.transform = gameObject.transform setmetatable(b, { __index = TimeLimitedCall }) return b end --初始化组件(用于子类重写) function TimeLimitedCall:InitComponent() self.spLoader = SpriteLoader.New() self.helpBtn = Util.GetGameObject(self.gameObject,"help") self.helpPosition=self.helpBtn:GetComponent("RectTransform").localPosition self.btnActivity = Util.GetGameObject(self.gameObject,"btngroup/btnActivity") self.btnRewardBtn = Util.GetGameObject(self.gameObject,"btngroup/btnRewardBtn") self.btnRewardBtn:SetActive(false) self.btns = {} self.bgs = {} for i = 1 , 2 do self.bgs[i] = {} self.bgs[i].bg = Util.GetGameObject(self.gameObject,"Bg"..i) self.bgs[i].title = Util.GetGameObject(self.bgs[i].bg,"Image (3)"):GetComponent("Image") self.bgs[i].heros = {} for j = 1 , 3 do self.bgs[i].heros[j] = {} self.bgs[i].heros[j].hero = Util.GetGameObject(self.bgs[i].bg,"hero"..j) self.bgs[i].heros[j].heroIma = Util.GetGameObject(self.bgs[i].heros[j].hero,"hero"):GetComponent("Image") self.bgs[i].heros[j].heroIcon = Util.GetGameObject(self.bgs[i].heros[j].hero,"icon"):GetComponent("Image") self.bgs[i].heros[j].heroName = Util.GetGameObject(self.bgs[i].heros[j].hero,"name"):GetComponent("Text") end self.btns[i] = {} self.btns[i].btn = Util.GetGameObject(self.gameObject,"btngroup/btn"..i) self.btns[i].red = Util.GetGameObject(self.btns[i].btn.gameObject,"redPoint") self.btns[i].info = Util.GetGameObject(self.btns[i].btn.gameObject,"layout/Text"):GetComponent("Text") self.btns[i].icon = Util.GetGameObject(self.btns[i].btn.gameObject,"layout/icon"):GetComponent("Image") self.btns[i].num = Util.GetGameObject(self.btns[i].btn.gameObject,"layout/num"):GetComponent("Text") end self.timeupdate=Util.GetGameObject(self.gameObject,"timeupdate"):GetComponent("Text") --免费次数剩余刷新时间 self.upper=Util.GetGameObject(self.gameObject,"maxtimes/times"):GetComponent("Text") ---召唤上限 self.recruitTimeUpdate = Util.GetGameObject(self.gameObject,"recruitTimesUpdate/Text1") :GetComponent("Text") --活动剩余时间 self.recruitTimesUpdate = Util.GetGameObject(self.gameObject,"recruitTimesUpdate/Text") :GetComponent("Text") --保底剩余次数 self.getBtn=Util.GetGameObject(self.gameObject,"nextlevel") self.slider = Util.GetGameObject(self.getBtn, "Slider"):GetComponent("Slider") self.sliderText=Util.GetGameObject(self.getBtn,"Text"):GetComponent("Text") self.sliderText2=Util.GetGameObject(self.slider.gameObject,"Text"):GetComponent("Text") self.nextReward = Util.GetGameObject(self.getBtn, "reward") self.effect=Util.GetGameObject(self.nextReward,"juneng_chenggong") end --绑定事件(用于子类重写) function TimeLimitedCall:BindEvent() Util.AddOnceClick(self.helpBtn, function() UIManager.OpenPanel(UIName.HelpPopup,self.actConfig.HelpId,self.helpPosition.x,self.helpPosition.y) end) Util.AddOnceClick(self.btnActivity, function() UIManager.OpenPanel(UIName.GeneralBigPopup,GENERAL_POPUP_TYPE.RecrutDetail,self.actConfig.HelpId,self.actType,PRE_REWARD_POOL_TYPE.TIME_LIMITED_UP,PRE_REWARD_POOL_TYPE.TIME_LIMITED) end) end --添加事件监听(用于子类重写) function TimeLimitedCall:AddListener() end --移除事件监听(用于子类重写) function TimeLimitedCall:RemoveListener() end --界面打开时调用(用于子类重写) function TimeLimitedCall:OnOpen(_activityConfig,_index,parent) self.actConfig = _activityConfig self.pageIndex = _index self.parent = parent end function TimeLimitedCall:OnSortingOrderChange() end -- 打开,重新打开时回调 function TimeLimitedCall:OnShow(_sortingOrder) self.gameObject:SetActive(true) sortingOrder = _sortingOrder self.actId = self.actConfig.ActId self.actType = self.actConfig.ActiveType > 0 and self.actConfig.ActiveType or self.actConfig.FunType if self.actConfig.IfBack == 1 then if self.actConfig.ActiveType > 0 then local id = ActivityGiftManager.IsActivityTypeOpen(self.actConfig.ActiveType) if id and id > 0 then self.actId = id local config = ConfigManager.TryGetConfigDataByThreeKey(ConfigName.ActivityGroups,"PageType",self.actConfig.PageType,"ActiveType",self.actConfig.ActiveType,"ActId",id) if config then self.actConfig = config end end end end for k,v in ipairs(self.bgs) do v.bg.gameObject:SetActive(false) end local array = ConfigManager.GetAllConfigsDataByKey(ConfigName.LotterySetting,"ActivityId",self.actId) self.singleRecruit = array[1] self.tenRecruit = array[2] self.freeTimesId=self.singleRecruit.FreeTimes self.maxtimesId=self.singleRecruit.MaxTimes self:RefreshHeroData() self:RefreshGetHeroTimes() self:TimeCountDown() self:RefreshNextLevelReward() end function TimeLimitedCall:RefreshHeroData() for k,v in ipairs(self.bgs) do v.bg.gameObject:SetActive(false) end self.bgs[self.actConfig.UIName[2]].bg.gameObject:SetActive(true) self.bgs[self.actConfig.UIName[2]].title.sprite = self.spLoader:LoadSprite(self.actConfig.Icon[6]) self.bgs[self.actConfig.UIName[2]].title:SetNativeSize() self.UpHero = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.TIME_LIMITED_UP) table.sort(self.UpHero,function(a,b) return a.Id < b.Id end) for n,m in ipairs(self.UpHero) do self.bgs[self.actConfig.UIName[2]].heros[n].heroIma.sprite = self.spLoader:LoadSprite(self.actConfig.Icon[n+2]) local configinfo= ConfigManager.GetConfigDataByKey(ConfigName.HeroConfig, "Id", m.Reward[1]) --LogGreen("configinfo.PropertyName:"..configinfo.PropertyName) self.bgs[self.actConfig.UIName[2]].heros[n].heroIcon.sprite=self.spLoader:LoadSprite(GetJobSpriteStrByJobNum(configinfo.PropertyName)) self.bgs[self.actConfig.UIName[2]].heros[n].heroName.text=configinfo.ReadingName Util.AddOnceClick(self.bgs[self.actConfig.UIName[2]].heros[n].hero, function() UIManager.OpenPanel(UIName.RoleGetInfoPopup, false, m.Reward[1], 5) end) end end --刷新剩余次数 function TimeLimitedCall:RefreshGetHeroTimes() local curTimes = PrivilegeManager.GetPrivilegeUsedTimes(self.maxtimesId) self.upper.text= "今日召唤上限:"..curTimes.."/"..privilegeConfig[self.maxtimesId].Condition[1][2]--特权上限 self.timeupdate.gameObject:SetActive(true) local freeTime = 0 if self.freeTimesId and self.freeTimesId > 0 then freeTime = PrivilegeManager.GetPrivilegeRemainValue(self.freeTimesId) RecruitManager.freeUseTimeList[self.freeTimesId]=freeTime end --按钮赋值 for n, m in ipairs(self.btns) do --存在免费次数 并且 免费>=1 并且是1按钮 local isFree = freeTime >= 1 and n == 1 m.red.gameObject:SetActive(isFree) m.icon.gameObject:SetActive(not isFree) m.num.gameObject:SetActive(not isFree) local itemId=0 local itemNum=0 local type = 0 if n == 1 then type = self.singleRecruit.Id m.info.text = "1次" else type = self.tenRecruit.Id m.info.text = "10次" end local d = {} if (isFree) then self.timeupdate.gameObject:SetActive(false) m.info.text="免费抽取" else local d = RecruitManager.GetExpendData(type) itemId=d[1] itemNum=d[2] m.icon.sprite=self.spLoader:LoadSprite(artResourcesConfig[itemConfig[itemId].ResourceID].Name) m.num.text= tostring(itemNum) end Util.AddOnceClick(m.btn,function() if not isFree then if BagManager.GetItemCountById(itemId)%s次必得UP英雄",reMaintimes) end function TimeLimitedCall:Recruit(recrutType,recrutId,bType) if PrivilegeManager.GetPrivilegeUsedTimes(self.maxtimesId)+recrutType>privilegeConfig[self.maxtimesId].Condition[1][2] then PopupTipPanel.ShowTip("无法超出每日召唤次数上限!") return end RecruitManager.RecruitRequest(recrutId, function(msg) PrivilegeManager.RefreshPrivilegeUsedTimes(self.maxtimesId,recrutType)--记录抽卡次数 if bType == 1 then UIManager.OpenPanel(UIName.SingleRecruitPanel, msg.drop.Hero[1],recrutId,bType,{RecruitType.TimeLimitSingle,RecruitType.TimeLimitTen}) else UIManager.OpenPanel(UIName.SingleRecruitPanel, msg.drop.Hero,recrutId,bType,{RecruitType.TimeLimitSingle,RecruitType.TimeLimitTen}) end CheckRedPointStatus(RedPointType.TimeLimited) end,self.freeTimesId) end --刷新时间 function TimeLimitedCall:TimeCountDown() if self.timer then self.timer:Stop() self.timer = nil end local timeDown=CalculateSecondsNowTo_N_OClock(0)--ActivityGiftManager.GetTaskRemainTime(ActivityTypeDef.FindFairy) local endTime = ActivityGiftManager.GetTaskEndTime(self.actType) - PlayerManager.serverTime self.recruitTimeUpdate.text = string.format("活动剩余时间:"..self:TimeToDHMS(endTime)) self.timeupdate.text = TimeToHMS(timeDown).."后刷新" self.timer = Timer.New(function() if timeDown < 1 then self:RefreshGetHeroTimes() return else self.timeupdate.text = TimeToHMS(timeDown).."后刷新" end if endTime < 1 then self.timer:Stop() self.timer = nil self:OnShow(sortingOrder) return else self.recruitTimeUpdate.text = string.format("活动剩余时间:"..self:TimeToDHMS(endTime)) end endTime = endTime - 1 timeDown = timeDown - 1 end, 1, -1, true) self.timer:Start() end function TimeLimitedCall:RefreshNextLevelReward() -- 0 无法领取 1已领取 2可领取 -1 全部领取完 local curState = 0 local data1 = ConfigManager.GetAllConfigsDataByKey(ConfigName.ActivityRewardConfig,"ActivityId",self.actId) --通过活动id获取阶段任务 local rewardItem = nil local mission = nil for n,m in ipairs(data1) do mission = ActivityGiftManager.GetActivityInfo(self.actId, m.Id) if(mission.progress >= m.Values[1][1])then if mission.state == 0 then rewardItem = m curState = 2 break end else curState = 0 rewardItem = m break end end --所有任务都已完成 if not rewardItem then curState = -1 rewardItem = data1[#data1] end OperatingManager.TimeLimitedTimes = mission.progress if not self.itemView then self.itemView = SubUIManager.Open(SubUIConfig.ItemView,self.nextReward.transform) end self.itemView:OnOpen(false, {rewardItem.Reward[1][1],rewardItem.Reward[1][2]}, 0.73, false) self.itemView.gameObject:SetActive(true) Util.GetGameObject(self.itemView.gameObject,"item/frame"):GetComponent("Button").enabled=false if (curState == 2) then local temp = mission.progress <= rewardItem.Values[1][1] and mission.progress or rewardItem.Values[1][1] self.sliderText2.text = temp.."/"..rewardItem.Values[1][1] self.slider.value = temp /rewardItem.Values[1][1] local vec=self.sliderText.transform:GetComponent("RectTransform").anchoredPosition3D vec.y=22.4 self.sliderText.transform:GetComponent("RectTransform").anchoredPosition3D=vec self.sliderText.text="奖励可领取" self.sliderText.fontSize=26 Util.AddOnceClick(self.getBtn,function() NetManager.GetActivityRewardRequest(mission.missionId, self.actId, function(respond) UIManager.OpenPanel(UIName.RewardItemPopup, respond, 1) self:RefreshNextLevelReward() self:RefreshGetHeroTimes() end) end) self.effect.gameObject:SetActive(true) elseif (curState == -1) then self.slider.value=1 Util.GetGameObject(self.slider.gameObject,"Text"):GetComponent("Text").text="300/300" self.sliderText.text="奖励已全部领取" Util.AddOnceClick(self.getBtn,function() UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.RecrutReward,self.actType,self.actId) end) else self.slider.gameObject:SetActive(true) Util.GetGameObject(self.slider.gameObject,"Text"):GetComponent("Text").text=mission.progress.."/"..rewardItem.Values[1][1] local vec=self.sliderText.transform:GetComponent("RectTransform").anchoredPosition3D vec.y=22.4 self.sliderText.transform:GetComponent("RectTransform").anchoredPosition3D = vec self.sliderText.text="下一阶段:"..mission.progress.."/"..rewardItem.Values[1][1] self.sliderText.fontSize=26 self.slider.value=mission.progress/rewardItem.Values[1][1] self.effect.gameObject:SetActive(false) Util.AddOnceClick(self.getBtn,function() UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.RecrutReward,self.actType,self.actId) end) end end --- 将一段时间转换为天时分秒 function TimeLimitedCall:TimeToDHMS(second) local day = math.floor(second / (24 * 3600)) local minute = math.floor(second / 60) % 60 local sec = math.floor(second % 60) local hour = math.floor(math.floor(second - day * 24 * 3600 - sec - minute * 60) / 3600) if day <= 0 and hour <= 0 then return string.format("%s分%s秒",minute, sec) else return string.format("%s天%s小时",day, hour) end end --界面关闭时调用(用于子类重写) function TimeLimitedCall:OnClose() self.gameObject:SetActive(false) if self.timer then self.timer:Stop() self.timer = nil end end --界面销毁时调用(用于子类重写) function TimeLimitedCall:OnDestroy() self.spLoader:Destroy() self.btns = {} SubUIManager.Close(self.itemView) self.itemView = nil end return TimeLimitedCall