miduo_client/Assets/ManagedResources/~Lua/Modules/DynamicActivity/TimeLimitedCall.lua

437 lines
18 KiB
Lua
Raw Normal View History

2020-08-25 15:46:38 +08:00
local TimeLimitedCall= quick_class("TimeLimitedCall")
2020-06-28 17:48:49 +08:00
2020-08-21 11:23:46 +08:00
local ActivityDetail = require("Modules/DynamicActivity/ActivityDetail")--活动详情
local RewardPreview = require("Modules/DynamicActivity/RewardPreview")--奖励预览
2020-06-28 17:48:49 +08:00
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 parent
local activityId = 0
local singleRecruit = nil
local tenRecruit = nil
2020-06-28 17:48:49 +08:00
--按钮类型
local bType={
Btn1=1,
Btn10=2
}
local activityType = {
--破阵诛仙 限时召唤
[4301] = {
bg = "Bg1",
hero = {
2020-10-13 20:36:01 +08:00
[1]={name="Bg1/hero1",id=10001,hero="x_xianshizaohuan_fx"}, --伏羲
[2]={name="Bg1/hero3",id=10041,hero="x_xianshizaohuan_ttjz"}, --通天教主
[3]={name="Bg1/hero2",id=10089,hero="x_xianshizaohuan_rd"}, --燃灯
},
title = "x_xianshizaohuan_solgan",
helptype = HELP_TYPE.TimeLimitedCall
},
--勇冠三军 限时召唤
[4302] = {
bg = "Bg2",
hero = {
2020-10-13 20:36:01 +08:00
[1]={name="Bg2/hero1",id=10009,hero="c_ygsj_kuang02"}, --龙吉公主
[2]={name="Bg2/hero3",id=10026,hero="c_ygsj_kuang03"}, --东华帝君
[3]={name="Bg2/hero2",id=10040,hero="c_ygsj_kuang01"}, --杨戬
},
title = "c_ydsj_slogan",
helptype = HELP_TYPE.TimeLimitedCall
},
--叱咤风云 限时召唤
[4303] = {
bg = "Bg2",
hero = {
2020-10-13 20:36:01 +08:00
[1]={name="Bg2/hero1",id=10006,hero="c_ccfy_kuang02"}, --共工
[2]={name="Bg2/hero3",id=10023,hero="c_ccfy_kuang03"}, --孙悟空
[3]={name="Bg2/hero2",id=10014,hero="c_ccfy_kuang01"}, --哪吒
},
title = "c_ccfy_slogan",
helptype = HELP_TYPE.TimeLimitedCall
},
2020-09-29 15:35:08 +08:00
--叱咤风云 限时召唤
[4304] = {
bg = "Bg2",
hero = {
2020-10-13 20:36:01 +08:00
[1]={name="Bg2/hero1",id=10003,hero="d_danxinbixue_shenjiang1"}, --猪八戒
[2]={name="Bg2/hero3",id=10024,hero="d_danxinbixue_shenjiang3"}, --姜子牙
[3]={name="Bg2/hero2",id=10089,hero="d_danxinbixue_shenjiang2"}, ----燃灯
2020-09-29 15:35:08 +08:00
},
2020-10-15 16:19:59 +08:00
title = "d_danxinbixue_zi",
2020-09-29 15:35:08 +08:00
helptype = HELP_TYPE.TimeLimitedCall
},
2020-10-13 20:36:01 +08:00
--势不可挡 限时召唤
[4305] = {
2020-10-13 20:36:01 +08:00
bg = "Bg2",
hero = {
[1]={name="Bg2/hero1",id=10014,hero="s_shibukedang_shenjiang1"}, ----哪吒
[2]={name="Bg2/hero3",id=10090,hero="s_shibukedang_shenjiang3"}, --阎罗王
[3]={name="Bg2/hero2",id=10085,hero="s_shibukedang_shenjiang4"}, ----敖丙
2020-10-13 20:36:01 +08:00
},
title = "s_shibukedang_zi",
helptype = HELP_TYPE.TimeLimitedCall
},
}
--type与lotterySetting表中的id对应
local btns={ [bType.Btn1]={name="btngroup/once",isInfo=Language[10644]}, [bType.Btn10]={name="btngroup/ten",isInfo=Language[12182]}}
local curLv = 0 --当前阶段id
2020-07-28 20:09:41 +08:00
local itemView
2020-06-28 17:48:49 +08:00
function TimeLimitedCall:ctor(mainPanel, gameObject)
self.mainPanel = mainPanel
self.gameObject = gameObject
self:InitComponent(gameObject)
self:BindEvent()
end
function TimeLimitedCall:InitComponent(gameObject)
2020-09-02 14:07:57 +08:00
self.helpBtn = Util.GetGameObject(self.gameObject,"help")
2020-06-28 17:48:49 +08:00
self.helpPosition=self.helpBtn:GetComponent("RectTransform").localPosition
2020-09-02 14:07:57 +08:00
self.activityBtn = Util.GetGameObject(self.gameObject,"activity")
self.rewardBtn = Util.GetGameObject(self.gameObject,"rewardBtn")
2020-08-03 20:01:59 +08:00
self.rewardBtn:SetActive(false)--(暂时关闭)
self.timeupdate=Util.GetGameObject(self.gameObject,"timeupdate"):GetComponent("Text") --免费次数剩余刷新时间
2020-07-14 11:34:40 +08:00
self.upper=Util.GetGameObject(self.gameObject,"maxtimes/times"):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.nextReward = Util.GetGameObject(self.getBtn, "reward")
2020-06-28 17:48:49 +08:00
self.detail= Util.GetGameObject(self.gameObject, "detail")
2020-07-08 16:23:04 +08:00
self.detail.gameObject:SetActive(false)
2020-06-28 17:48:49 +08:00
self.reward= Util.GetGameObject(self.gameObject, "reward")
2020-07-08 16:23:04 +08:00
self.reward.gameObject:SetActive(false)
2020-06-28 17:48:49 +08:00
self.effect=Util.GetGameObject(self.nextReward,"juneng_chenggong")
2020-07-06 20:35:39 +08:00
self.recruitTimeUpdate = Util.GetGameObject(self.gameObject,"recruitTimesUpdate/Text1") :GetComponent("Text") --活动剩余时间
self.recruitTimesUpdate = Util.GetGameObject(self.gameObject,"recruitTimesUpdate/Text") :GetComponent("Text") --保底剩余次数
2020-06-28 17:48:49 +08:00
end
function TimeLimitedCall:BindEvent()
2020-06-28 17:48:49 +08:00
Util.AddClick(self.helpBtn, function()
UIManager.OpenPanel(UIName.HelpPopup,activityType[activityId].helptype,self.helpPosition.x,self.helpPosition.y)
2020-06-28 17:48:49 +08:00
end)
Util.AddClick(self.activityBtn, function()
ActivityDetail.new(self.detail,1)
2020-06-28 17:48:49 +08:00
end)
Util.AddClick(self.rewardBtn, function()
2020-06-28 17:48:49 +08:00
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
function TimeLimitedCall:OnShow(_sortingOrder,_parent)
parent = _parent
2020-06-28 17:48:49 +08:00
sortingOrder = _sortingOrder
self.gameObject:SetActive(true)
for n,m in pairs(activityType) do
Util.GetGameObject(self.gameObject,m.bg):SetActive(false)
end
activityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.FindFairy)
2020-10-15 11:06:45 +08:00
LogBlue("限时招募 activityId:"..activityId)
Util.GetGameObject(self.gameObject,activityType[activityId].bg):SetActive(true)
Util.GetGameObject(self.gameObject,activityType[activityId].bg.."/Image (3)"):GetComponent("Image").sprite = Util.LoadSprite(activityType[activityId].title)
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)
for n,m in ipairs(activityType[activityId].hero) do
2020-06-28 17:48:49 +08:00
Util.GetGameObject(self.gameObject,m.name.."/hero"):GetComponent("Image").sprite=Util.LoadSprite(m.hero)
local configinfo= ConfigManager.GetConfigDataByKey(ConfigName.HeroConfig, "Id", m.id)
--LogGreen("configinfo.PropertyName:"..configinfo.PropertyName)
2020-06-28 17:48:49 +08:00
Util.GetGameObject(self.gameObject,m.name.."/icon"):GetComponent("Image").sprite=Util.LoadSprite(GetJobSpriteStrByJobNum(configinfo.PropertyName))
Util.GetGameObject(self.gameObject,m.name.."/name"):GetComponent("Text").text=configinfo.ReadingName
Util.AddOnceClick(Util.GetGameObject(self.gameObject,m.name), function()
UIManager.OpenPanel(UIName.RoleGetInfoPopup, false, m.id, 5)
end)
2020-06-28 17:48:49 +08:00
end
self:RefreshGetHeroTimes()
self:TimeCountDown()
self:RefreshNextLevelReward()
end
function TimeLimitedCall:RefreshNextLevelReward()
2020-07-07 16:35:57 +08:00
local curLvstate = 0
local info= ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.FindFairy)
2020-07-07 16:35:57 +08:00
local curTimes = 0
local data1 = ConfigManager.GetAllConfigsDataByKey(ConfigName.ActivityRewardConfig,"ActivityId",activityId) --通过活动id获取阶段任务
2020-06-28 17:48:49 +08:00
local rewarditem
for n,m in ipairs(data1) do
curTimes,curLvstate = self:GetMissionStateById(m.Id,activityId)
2020-07-06 20:35:39 +08:00
if(curTimes>=m.Values[1][1]) then
2020-06-28 17:48:49 +08:00
if curLvstate==0 then
curLvstate=0
curLv=m.Id
rewarditem=m
break
end
else
curLvstate=2
curLv=m.Id
rewarditem=m
break
end
end
2020-07-08 19:16:04 +08:00
--所有任务都已完成
if not rewarditem then
curLvstate = -1
rewarditem = data1[#data1]
curLv=data1[#data1].Id
end
2020-07-09 10:04:20 +08:00
OperatingManager.TimeLimitedTimes = curTimes
2020-07-28 20:09:41 +08:00
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.73, false)
itemView.gameObject:SetActive(true)
Util.GetGameObject(itemView.gameObject,"item/frame"):GetComponent("Button").enabled=false
2020-06-28 17:48:49 +08:00
if (curLvstate==0) then
2020-07-28 20:09:41 +08:00
-- self.slider.gameObject:SetActive(false)\
local temp = curTimes <= rewarditem.Values[1][1] and curTimes or rewarditem.Values[1][1]
Util.GetGameObject(self.slider.gameObject,"Text"):GetComponent("Text").text=temp.."/"..rewarditem.Values[1][1]
self.slider.value=temp /rewarditem.Values[1][1]
2020-06-28 17:48:49 +08:00
local vec=self.sliderText.transform:GetComponent("RectTransform").anchoredPosition3D
2020-06-30 18:59:44 +08:00
vec.y=22.4
2020-06-28 17:48:49 +08:00
self.sliderText.transform:GetComponent("RectTransform").anchoredPosition3D=vec
self.sliderText.text=Language[12183]
2020-06-30 18:59:44 +08:00
self.sliderText.fontSize=26
2020-06-28 17:48:49 +08:00
Util.AddOnceClick(self.getBtn,function()
NetManager.GetActivityRewardRequest(curLv, activityId,
2020-06-28 17:48:49 +08:00
function(respond)
UIManager.OpenPanel(UIName.RewardItemPopup, respond, 1)
self:RefreshNextLevelReward()
self:RefreshGetHeroTimes()
end)
end)
self.effect.gameObject:SetActive(true)
2020-07-08 19:16:04 +08:00
elseif (curLvstate==-1) then
2020-07-28 20:09:41 +08:00
self.slider.value=1
Util.GetGameObject(self.slider.gameObject,"Text"):GetComponent("Text").text="300/300"
2020-08-25 15:46:38 +08:00
self.sliderText.text=Language[12322]
2020-07-08 19:16:04 +08:00
Util.AddOnceClick(self.getBtn,function()
RewardPreview.new(self.reward)
end)
2020-06-28 17:48:49 +08:00
else
self.slider.gameObject:SetActive(true)
2020-06-30 18:59:44 +08:00
Util.GetGameObject(self.slider.gameObject,"Text"):GetComponent("Text").text=curTimes.."/"..rewarditem.Values[1][1]
2020-06-28 17:48:49 +08:00
local vec=self.sliderText.transform:GetComponent("RectTransform").anchoredPosition3D
2020-06-30 18:59:44 +08:00
vec.y=22.4
self.sliderText.transform:GetComponent("RectTransform").anchoredPosition3D = vec
2020-06-28 17:48:49 +08:00
self.sliderText.text=Language[12184]..curTimes.."/"..rewarditem.Values[1][1]
2020-06-30 18:59:44 +08:00
self.sliderText.fontSize=26
2020-06-28 17:48:49 +08:00
self.slider.value=curTimes/rewarditem.Values[1][1]
self.effect.gameObject:SetActive(false)
Util.AddOnceClick(self.getBtn,function()
RewardPreview.new(self.reward)
end)
end
local reMaintimes = info.value
--LogBlue("reMaintimes:"..reMaintimes)
--LogGreen("singleRecruit.MergePool:"..singleRecruit.MergePool)
local totalTimes = ConfigManager.GetConfigDataByKey(ConfigName.LotterySpecialConfig,"Type",singleRecruit.MergePool).Count
reMaintimes = totalTimes - reMaintimes
2020-07-13 11:15:53 +08:00
if reMaintimes == 0 then
reMaintimes = totalTimes
2020-07-13 11:15:53 +08:00
end
2020-07-10 19:13:29 +08:00
self.recruitTimesUpdate.text = string.format(Language[12229],reMaintimes)
2020-10-21 23:18:39 +08:00
local timeDown = info.endTime - PlayerManager.serverTime
self.recruitTimeUpdate.text = string.format(Language[12230]..self:TimeToDHMS(timeDown))
Timer.New(function()
if timeDown < 1 then
self.recruitTimeUpdate.text = string.format(Language[12230]..self:TimeToDHMS(0))
else
timeDown = timeDown - 1
self.recruitTimeUpdate.text = string.format(Language[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
2020-10-21 23:18:39 +08:00
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
2020-07-10 19:13:29 +08:00
return string.format(Language[12231],minute, sec)
else
2020-07-10 19:13:29 +08:00
return string.format(Language[12232],day, hour)
end
2020-06-28 17:48:49 +08:00
end
function TimeLimitedCall:GetMissionStateById(num,activityId)
local mission= ActivityGiftManager.GetActivityInfo(activityId,num) --从后端获取到的阶段数据
2020-07-06 20:35:39 +08:00
return mission.progress,mission.state
2020-06-28 17:48:49 +08:00
end
--刷新剩余次数
function TimeLimitedCall:RefreshGetHeroTimes()
local freeTimesId=lotterySetting[singleRecruit.Id].FreeTimes
local maxtimesId=lotterySetting[singleRecruit.Id].MaxTimes --lotterySetting表中的MaxTimes对应privilegeConfig表中的id
2020-07-06 20:35:39 +08:00
local curTimes=PrivilegeManager.GetPrivilegeUsedTimes(maxtimesId)
2020-07-14 11:34:40 +08:00
self.upper.text= Language[12225]..curTimes.."/"..privilegeConfig[maxtimesId].Condition[1][2]--特权上限
2020-07-20 10:02:12 +08:00
self.timeupdate.gameObject:SetActive(true)
2020-06-28 17:48:49 +08:00
local freeTime= 0
if freeTimesId>0 then
2020-07-13 11:15:53 +08:00
freeTime = PrivilegeManager.GetPrivilegeRemainValue(freeTimesId)
2020-06-28 17:48:49 +08:00
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,"layout/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)
2020-07-20 10:02:12 +08:00
if n==bType.Btn1 and isFree then
self.timeupdate.gameObject:SetActive(false)
end
2020-06-28 17:48:49 +08:00
local itemId=0
local itemNum=0
local type = 0
if n==bType.Btn1 then
type = singleRecruit.Id
else
type = tenRecruit.Id
end
local d=RecruitManager.GetExpendData(type)
2020-06-28 17:48:49 +08:00
if(isFree) then
info.text=Language[11759]
2020-07-14 11:34:40 +08:00
else
2020-06-28 17:48:49 +08:00
itemId=d[1]
itemNum=d[2]
icon.sprite=Util.LoadSprite(artResourcesConfig[itemConfig[itemId].ResourceID].Name)
info.text=m.isInfo
2020-06-30 18:59:44 +08:00
num.text= tostring(itemNum)
2020-06-28 17:48:49 +08:00
end
Util.AddOnceClick(btn,function()
if not isFree then
if BagManager.GetItemCountById(itemId)<d[2] then
PopupTipPanel.ShowTip(itemConfig[itemId].Name..Language[10492])
return
end
end
2020-07-28 15:24:11 +08:00
local state = PlayerPrefs.GetInt(PlayerManager.uid.."GeneralPopup_RecruitConfirm"..RecruitType.TimeLimitTen)
2020-06-28 17:48:49 +08:00
if n==bType.Btn1 then
if PrivilegeManager.GetPrivilegeUsedTimes(maxtimesId)+1>privilegeConfig[maxtimesId].Condition[1][2] then
PopupTipPanel.ShowTip(Language[11760])
return
end
2020-07-28 15:24:11 +08:00
local recruitOne = function()
RecruitManager.RecruitRequest(singleRecruit.Id, function(msg)
2020-07-28 15:24:11 +08:00
PrivilegeManager.RefreshPrivilegeUsedTimes(maxtimesId,1)--记录抽卡次数
UIManager.OpenPanel(UIName.SingleRecruitPanel, msg.drop.Hero[1],singleRecruit.Id,bType.Btn1)
2020-07-28 15:24:11 +08:00
CheckRedPointStatus(RedPointType.TimeLimited)
end,freeTimesId)
end
if state==0 and d[1] == 16 and not isFree then
UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.RecruitConfirm,singleRecruit.Id,recruitOne)
2020-07-28 15:24:11 +08:00
else
recruitOne()
end
2020-06-28 17:48:49 +08:00
elseif n==bType.Btn10 then
if PrivilegeManager.GetPrivilegeUsedTimes(maxtimesId)+10>privilegeConfig[maxtimesId].Condition[1][2] then
PopupTipPanel.ShowTip(Language[11760])
return
end
2020-07-28 15:24:11 +08:00
local recruitTen = function()
RecruitManager.RecruitRequest(tenRecruit.Id, function(msg)
2020-07-28 15:24:11 +08:00
PrivilegeManager.RefreshPrivilegeUsedTimes(maxtimesId,10)--记录抽卡次数
UIManager.OpenPanel(UIName.SingleRecruitPanel, msg.drop.Hero, tenRecruit.Id,bType.Btn10)
2020-07-28 15:24:11 +08:00
CheckRedPointStatus(RedPointType.TimeLimited)
end,freeTimesId)
end
2020-07-28 17:25:50 +08:00
if state==0 and d[1] ==16 and not isFree then
UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.RecruitConfirm,tenRecruit.Id,recruitTen)
2020-07-28 15:24:11 +08:00
else
recruitTen()
end
2020-06-28 17:48:49 +08:00
end
end)
end
end
--刷新时间
function TimeLimitedCall:TimeCountDown()
if self.timer then
self.timer:Stop()
self.timer = nil
end
local timeDown=CalculateSecondsNowTo_N_OClock(5)--ActivityGiftManager.GetTaskRemainTime(ActivityTypeDef.FindFairy)
2020-07-10 19:13:29 +08:00
self.timeupdate.text = TimeToHMS(timeDown)..Language[12200]
2020-06-28 17:48:49 +08:00
self.timer = Timer.New(function()
if timeDown < 1 then
self.timer:Stop()
self.timer = nil
parent:ClosePanel()
2020-06-28 17:48:49 +08:00
return
end
timeDown = timeDown - 1
2020-07-10 19:13:29 +08:00
self.timeupdate.text = TimeToHMS(timeDown)..Language[12200]
2020-06-28 17:48:49 +08:00
end, 1, -1, true)
self.timer:Start()
end
function TimeLimitedCall:OnHide()
self.gameObject:SetActive(false)
2020-07-08 16:23:04 +08:00
self.detail.gameObject:SetActive(false)
self.reward.gameObject:SetActive(false)
2020-06-28 17:48:49 +08:00
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
2020-06-28 17:48:49 +08:00
end
--添加事件监听(用于子类重写)
function TimeLimitedCall:AddListener()
end
--移除事件监听(用于子类重写)
function TimeLimitedCall:RemoveListener()
end
2020-06-28 17:48:49 +08:00
return TimeLimitedCall