sk-client/Assets/ManagedResources/~Lua/Modules/DynamicActivity/TimeLimitedCall.lua

435 lines
18 KiB
Lua
Raw Permalink Normal View History

2024-07-03 18:38:10 +08:00
local TimeLimitedCall = quick_class("TimeLimitedCall")
local ActivityDetail = require("Modules/DynamicActivity/ActivityDetail")--活动详情
local RewardPreview = require("Modules/DynamicActivity/RewardPreview")--奖励预览
local sortingOrder = 0
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)
local SpecialConfig = ConfigManager.GetConfig(ConfigName.SpecialConfig)
local parent
local activityId = 0
local singleRecruit = nil
local tenRecruit = nil
--按钮类型
local bType = {
Btn1 = 1,
Btn10 = 2
}
--type与lotterySetting表中的id对应
local btns = {
[bType.Btn1] = {
name = "btngroup/once",isInfo = GetLanguageStrById(10644)
},
[bType.Btn10] = {
name = "btngroup/ten",isInfo = GetLanguageStrById(12182)}
}
local curLv = 0--当前阶段id
local itemView
local isJump = false
function TimeLimitedCall:ctor(mainPanel, gameObject)
self.mainPanel = mainPanel
self.gameObject = gameObject
self:InitComponent(gameObject)
self:BindEvent()
end
function TimeLimitedCall:InitComponent(gameObject)
self.helpBtn = Util.GetGameObject(self.gameObject,"helpBtn")
self.helpPosition = self.helpBtn:GetComponent("RectTransform").localPosition
self.activityBtn = Util.GetGameObject(self.gameObject,"activityBtn")--活动详情
self.rewardBtn = Util.GetGameObject(self.gameObject,"rewardBtn")--奖励预览
self.timeUpdate = Util.GetGameObject(self.gameObject,"timeUpdate"):GetComponent("Text")--免费次数剩余刷新时间
self.upper = Util.GetGameObject(self.gameObject,"maxtimes"):GetComponent("Text")--召唤上限
self.nextlevel = Util.GetGameObject(self.gameObject,"nextlevel")
self.nextNum = Util.GetGameObject(self.gameObject,"nextlevel/nextNum/value"):GetComponent("Text")
self.slider = Util.GetGameObject(self.nextlevel, "Slider"):GetComponent("Slider")
self.sliderText = Util.GetGameObject(self.nextlevel,"Slider/Text"):GetComponent("Text")
self.nextReward = Util.GetGameObject(self.nextlevel, "reward")--下一级奖励
--活动详情
self.detail = Util.GetGameObject(self.gameObject, "detail")
self.detail.gameObject:SetActive(false)
--奖励预览
self.reward = Util.GetGameObject(self.gameObject, "reward")
self.reward.gameObject:SetActive(false)
self.jumpBtn = Util.GetGameObject(self.gameObject, "jumpBtn")--跳过动画
self.jumpBtnChoose = Util.GetGameObject(self.gameObject, "jumpBtn/choose")
self.effect = Util.GetGameObject(self.nextReward,"juneng_chenggong")
self.recruitTimeUpdate = Util.GetGameObject(self.gameObject,"time/timeText"):GetComponent("Text")--活动剩余时间
self.recruitTimesUpdate = Util.GetGameObject(self.gameObject,"recruitTimesUpdate/Text"):GetComponent("Text")--保底剩余次数
self.receiveAll = Util.GetGameObject(self.gameObject, "receiveAll")--全部领取完
end
function TimeLimitedCall:BindEvent()
Util.AddClick(self.helpBtn, function()
UIManager.OpenPanel(UIName.HelpPopup,HELP_TYPE.TimeLimitedCall,self.helpPosition.x,self.helpPosition.y)
end)
Util.AddClick(self.rewardBtn, function()
ActivityDetail.new(self.detail,1, nil, sortingOrder)
end)
-- Util.AddClick(self.rewardBtn, function()
-- UIManager.OpenPanel(UIName.BattleStartPopup, function ()
-- local fb = ConfigManager.GetConfigData(ConfigName.FakeBattle, 1001)
-- local testFightData = {
-- fightData = loadstring("return "..fb.FightData)(),
-- fightSeed = fb.TimeSeed,
-- fightType = 0,
-- maxRound = 20
-- }
-- UIManager.OpenPanel(UIName.BattlePanel, testFightData, BATTLE_TYPE.Test)
-- end)
-- end)
--跳过动画
Util.AddClick(self.jumpBtn, function ()
isJump = not isJump
if isJump then
self.jumpBtnChoose:SetActive(true)
else
self.jumpBtnChoose:SetActive(false)
end
end)
Util.AddClick(self.activityBtn,function()
RewardPreview.new(self.reward, sortingOrder)
end)
end
function TimeLimitedCall:OnShow(_sortingOrder,_parent)
parent = _parent
sortingOrder = _sortingOrder
self.gameObject:SetActive(true)
activityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.FindFairy)
local configData = ConfigManager.GetConfigDataByKey(ConfigName.AcitvityShow, "ActivityId", activityId)
local array = ConfigManager.GetAllConfigsDataByKey(ConfigName.LotterySetting,"ActivityId",activityId)
singleRecruit = array[1]
tenRecruit = array[2]
local UpHero = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.TIME_LIMITED_UP)
table.sort(UpHero,function(a,b) return a.Reward[1] < b.Reward[1] end)
local idx = 1
for n,m in ipairs(configData.Hero) do
local configinfo = ConfigManager.GetConfigDataByKey(ConfigName.HeroConfig, "Id", m)
local loadspr = GetProStrImageByProNum(configinfo.PropertyName)
local hero = Util.GetGameObject(self.gameObject,"Bg/hero" .. idx)
local icon = Util.GetGameObject(hero,"bg/icon")
icon:GetComponent("Image").sprite = Util.LoadSprite(configData.Heroimg[idx])
icon:GetComponent("Image"):SetNativeSize()
icon:GetComponent("RectTransform").localScale = Vector3.one * tonumber(configData.HeroimgTransform[idx][1])
icon:GetComponent("RectTransform").anchoredPosition = Vector2.New(configData.HeroimgTransform[idx][2],configData.HeroimgTransform[idx][3])
Util.GetGameObject(hero,"nameBg/pro"):GetComponent("Image").sprite = Util.LoadSprite(loadspr)
Util.GetGameObject(hero,"nameBg/name"):GetComponent("Text").text = GetLanguageStrById(configinfo.ReadingName)
Util.AddOnceClick(hero, function()
UIManager.OpenPanel(UIName.RoleGetInfoPopup, false, m, 5)
end)
idx = idx + 1
end
self:RefreshGetHeroTimes()
self:TimeCountDown()
self:RefreshNextLevelReward()
end
--刷新下一级奖励
function TimeLimitedCall:RefreshNextLevelReward()
local curLvstate = 0
local info = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.FindFairy)
local curTimes = 0
local data1 = ConfigManager.GetAllConfigsDataByKey(ConfigName.ActivityRewardConfig,"ActivityId",activityId) --通过活动id获取阶段任务
local rewarditem
for n,m in ipairs(data1) do
curTimes,curLvstate = self:GetMissionStateById(m.Id,activityId)
if curTimes >= m.Values[1][1] then
if curLvstate == 0 then
curLvstate = 0
curLv = m.Id
rewarditem = m
break
end
else
curLvstate = 2
curLv = m.Id
rewarditem = m
break
end
end
--所有任务都已完成
if not rewarditem then
curLvstate = -1
rewarditem = data1[#data1]
curLv = data1[#data1].Id
end
OperatingManager.TimeLimitedTimes = curTimes
if not itemView then
itemView = SubUIManager.Open(SubUIConfig.ItemView,self.nextReward.transform)
end
itemView:OnOpen(false, {rewarditem.Reward[1][1],rewarditem.Reward[1][2]}, 0.55, false)
itemView.gameObject:SetActive(true)
Util.GetGameObject(itemView.gameObject,"item/frame"):GetComponent("Button").enabled = false
self.nextlevel:SetActive(true)
self.receiveAll:SetActive(false)
if curLvstate == 0 then
local temp = curTimes <= rewarditem.Values[1][1] and curTimes or rewarditem.Values[1][1]
self.sliderText.text = temp.."/"..rewarditem.Values[1][1]
self.slider.value = temp /rewarditem.Values[1][1]
self.nextNum.text = rewarditem.Values[1][1]
Util.AddOnceClick(self.nextReward,function()
NetManager.GetActivityRewardRequest(curLv, activityId,
function(respond)
UIManager.OpenPanel(UIName.RewardItemPopup, respond, 1)
self:RefreshNextLevelReward()
self:RefreshGetHeroTimes()
end)
end)
self.effect.gameObject:SetActive(true)
elseif curLvstate == -1 then
self.nextlevel:SetActive(false)
self.receiveAll:SetActive(true)
else
self.slider.gameObject:SetActive(true)
self.sliderText.text = curTimes.."/"..rewarditem.Values[1][1]
self.slider.value = curTimes/rewarditem.Values[1][1]
Util.GetGameObject(self.nextlevel,"nextNum/value"):GetComponent("Text").text = rewarditem.Values[1][1]
self.effect.gameObject:SetActive(false)
end
local reMaintimes = info.value
local totalTimes = ConfigManager.GetConfigDataByKey(ConfigName.LotterySpecialConfig,"Type",singleRecruit.MergePool).Count
reMaintimes = totalTimes - reMaintimes
if reMaintimes == 0 then
reMaintimes = totalTimes
end
self.recruitTimesUpdate.text = string.format(GetLanguageStrById(12229),reMaintimes)
local timeDown = info.endTime - PlayerManager.serverTime
self.recruitTimeUpdate.text = string.format(GetLanguageStrById(12230)..self:TimeToDHMS(timeDown))
Timer.New(function()
if timeDown < 1 then
self.recruitTimeUpdate.text = string.format(GetLanguageStrById(12230)..self:TimeToDHMS(0))
else
timeDown = timeDown - 1
self.recruitTimeUpdate.text = string.format(GetLanguageStrById(12230)..self:TimeToDHMS(timeDown))
end
end, 1, -1, true):Start()
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(GetLanguageStrById(12231),minute, sec)
else
return string.format(GetLanguageStrById(12232),day, hour)
end
end
function TimeLimitedCall:GetMissionStateById(num,activityId)
local mission = ActivityGiftManager.GetActivityInfo(activityId,num) --从后端获取到的阶段数据
return mission.progress,mission.state
end
--刷新剩余次数
function TimeLimitedCall:RefreshGetHeroTimes()
local freeTimesId = lotterySetting[singleRecruit.Id].FreeTimes
local maxtimesId = lotterySetting[singleRecruit.Id].MaxTimes --lotterySetting表中的MaxTimes对应privilegeConfig表中的id
-- local curTimes = PrivilegeManager.GetPrivilegeUsedTimes(maxtimesId)
-- self.upper.text = GetLanguageStrById(12225)..curTimes.."/"..privilegeConfig[maxtimesId].Condition[1][2]--特权上限
self.upper.text = GetLanguageStrById(50181) .. PrivilegeManager.dailyGemRandomTimes .. "/" .. SpecialConfig[500].Value
local freeTime = 0
if freeTimesId > 0 then
freeTime = PrivilegeManager.GetPrivilegeRemainValue(freeTimesId)
RecruitManager.freeUseTimeList[freeTimesId] = freeTime
end
--按钮赋值
for n, m in ipairs(btns) do
local btn = Util.GetGameObject(self.gameObject,m.name)
local redPot = Util.GetGameObject(btn.gameObject,"redPoint")
-- local info = Util.GetGameObject(btn.gameObject,"mask/Text"):GetComponent("Text")
local icon = Util.GetGameObject(btn.gameObject,"layout/icon"):GetComponent("Image")
local num = Util.GetGameObject(btn.gameObject,"layout/num"):GetComponent("Text")
--存在免费次数 并且 免费>=1 并且是1按钮
local isFree = freeTime and freeTime >= 1 and n == bType.Btn1
redPot.gameObject:SetActive(isFree)
icon.gameObject:SetActive(not isFree)
num.gameObject:SetActive(not isFree)
if n == bType.Btn1 and isFree then
self.timeUpdate.gameObject:SetActive(false)
Util.GetGameObject(btn.gameObject,"free"):SetActive(true)
Util.GetGameObject(btn.gameObject,"noFree"):SetActive(false)
elseif n == bType.Btn1 and not isFree then
self.timeUpdate.gameObject:SetActive(true)
Util.GetGameObject(btn.gameObject,"free"):SetActive(false)
Util.GetGameObject(btn.gameObject,"noFree"):SetActive(true)
end
local itemId = 0
local itemNum = 0
local type = 0
if n == bType.Btn1 then
type = singleRecruit.Id
else
type = tenRecruit.Id
end
local d,v1 = RecruitManager.GetExpendData(type)
if isFree then
-- info.text = GetLanguageStrById(11759)
else
itemId = d[1]
itemNum = d[2]
icon.sprite = Util.LoadSprite(artResourcesConfig[itemConfig[itemId].ResourceID].Name)
-- info.text = m.isInfo
if itemId == 16 then
num.text = tostring(itemNum)
else
num.text = BagManager.GetItemCountById(itemId).."/"..tostring(itemNum)
end
end
Util.AddOnceClick(btn,function()
local state_1 = PlayerPrefs.GetInt(PlayerManager.uid.."GeneralPopup_RecruitConfirm"..singleRecruit.Id)
local state_10 = PlayerPrefs.GetInt(PlayerManager.uid.."GeneralPopup_RecruitConfirm"..tenRecruit.Id)
if n == bType.Btn1 then
if not isFree then
if BagManager.GetItemCountById(itemId) < d[2] then
PopupTipPanel.ShowTip(GetLanguageStrById(itemConfig[itemId].Name)..GetLanguageStrById(10492))
return
end
end
if PrivilegeManager.GetPrivilegeUsedTimes(maxtimesId)+1 > privilegeConfig[maxtimesId].Condition[1][2] then
PopupTipPanel.ShowTip(GetLanguageStrById(11760))
return
end
local recruitOne = function()
RecruitManager.RecruitRequest(singleRecruit.Id, function(msg)
if isFree then
PrivilegeManager.RefreshPrivilegeUsedTimes(freeTimesId,1)--记录免费抽卡次数
end
PrivilegeManager.RefreshPrivilegeUsedTimes(maxtimesId,1)--记录抽卡次数
UIManager.OpenPanel(UIName.SingleRecruitPanel, msg.drop.Hero[1],singleRecruit.Id,bType.Btn1)
CheckRedPointStatus(RedPointType.TimeLimited)
end,freeTimesId)
end
if state_1 == 0 and d[1] == 16 and not isFree then
UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.RecruitConfirm,singleRecruit.Id,recruitOne)
else
recruitOne()
end
elseif n == bType.Btn10 then
local lotterySettingConfig = G_LotterySetting[type]
local count = BagManager.GetItemCountById(lotterySettingConfig.CostItem[1][1])
local singleCost = lotterySettingConfig.CostItem[2][2]/lotterySettingConfig.PerCount
if count > lotterySettingConfig.PerCount then
count = lotterySettingConfig.PerCount
end
local deficiencyCount = lotterySettingConfig.PerCount-count
if BagManager.GetItemCountById(d[1]) < deficiencyCount*singleCost then
PopupTipPanel.ShowTip(GetLanguageStrById(itemConfig[d[1]].Name)..GetLanguageStrById(10492))
return
end
if PrivilegeManager.GetPrivilegeUsedTimes(maxtimesId)+10 > privilegeConfig[maxtimesId].Condition[1][2] then
PopupTipPanel.ShowTip(GetLanguageStrById(11760))
return
end
local recruitTen = function()
RecruitManager.RecruitRequest(tenRecruit.Id, function(msg)
PrivilegeManager.RefreshPrivilegeUsedTimes(maxtimesId,10)--记录抽卡次数
if isJump then
local heros = RecruitManager.RandomHerosSort(msg.drop.Hero)--随机排序
UIManager.OpenPanel(UIName.TenRecruitPanel,heros,tenRecruit.Id,isJump)
else
UIManager.OpenPanel(UIName.SingleRecruitPanel, msg.drop.Hero, tenRecruit.Id,bType.Btn10)
end
CheckRedPointStatus(RedPointType.TimeLimited)
end,freeTimesId)
end
if d[1] == 16 and not isFree and BagManager.GetItemCountById(v1)>0 then
UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.Recruit,tenRecruit.Id,recruitTen)
elseif state_10 == 0 and d[1] == 16 and not isFree and BagManager.GetItemCountById(v1) <= 0 then
UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.Recruit,tenRecruit.Id,recruitTen)
else
recruitTen()
end
end
end)
end
end
--刷新时间
function TimeLimitedCall:TimeCountDown()
if self.timer then
self.timer:Stop()
self.timer = nil
end
local timeDown = CalculateSecondsNowTo_N_OClock(24)--ActivityGiftManager.GetTaskRemainTime(ActivityTypeDef.FindFairy)
self.timeUpdate.text = TimeToHMS(timeDown)..GetLanguageStrById(12200)
self.timer = Timer.New(function()
if timeDown < 1 then
self.timer:Stop()
self.timer = nil
parent:ClosePanel()
return
end
timeDown = timeDown - 1
self.timeUpdate.text = TimeToHMS(timeDown)..GetLanguageStrById(12200)
end, 1, -1, true)
self.timer:Start()
end
function TimeLimitedCall:OnHide()
self.gameObject:SetActive(false)
self.detail.gameObject:SetActive(false)
self.reward.gameObject:SetActive(false)
if self.timer then
self.timer:Stop()
self.timer = nil
end
end
function TimeLimitedCall:OnDestroy()
ActivityDetail:OnDestroy()
RewardPreview:OnDestroy()
if itemView then
SubUIManager.Close(itemView)
itemView = nil
end
isJump = false
end
--添加事件监听(用于子类重写)
function TimeLimitedCall:AddListener()
end
--移除事件监听(用于子类重写)
function TimeLimitedCall:RemoveListener()
end
return TimeLimitedCall