357 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Lua
		
	
			
		
		
	
	
			357 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Lua
		
	
local LingShouBaoGe = {}
 | 
						|
local lotterySetting=ConfigManager.GetConfig(ConfigName.LotterySetting)
 | 
						|
local privilegeConfig=ConfigManager.GetConfig(ConfigName.PrivilegeTypeConfig)
 | 
						|
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
 | 
						|
local artConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
 | 
						|
local artResourcesConfig =ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
 | 
						|
local SpiritAnimalConfig = ConfigManager.GetConfig(ConfigName.SpiritAnimal)
 | 
						|
local gloAcivity = ConfigManager.GetConfig(ConfigName.GlobalActivity)
 | 
						|
 | 
						|
local sortingOrder = 0
 | 
						|
local parent
 | 
						|
 | 
						|
--按钮类型
 | 
						|
local bType={
 | 
						|
    Btn1=1,
 | 
						|
    Btn10=2
 | 
						|
}
 | 
						|
--type与lotterySetting表中的id对应
 | 
						|
local btns={ [bType.Btn1]={name="Btn1",isInfo=Language[10478]}, [bType.Btn10]={name="Btn10",isInfo=Language[10479]}}
 | 
						|
 | 
						|
function LingShouBaoGe:New(gameObject)
 | 
						|
    local b = {}
 | 
						|
    b.gameObject = gameObject
 | 
						|
    b.transform = gameObject.transform
 | 
						|
    setmetatable(b, { __index = LingShouBaoGe })
 | 
						|
    return b
 | 
						|
end
 | 
						|
function LingShouBaoGe:InitComponent()
 | 
						|
    self.spLoader = SpriteLoader.New()
 | 
						|
    self.helpBtn = Util.GetGameObject(self.gameObject,"help")
 | 
						|
    self.helpPosition=self.helpBtn:GetComponent("RectTransform").localPosition
 | 
						|
 | 
						|
    self.preview = Util.GetGameObject(self.gameObject,"rightUp/preview")
 | 
						|
    self.change = Util.GetGameObject(self.gameObject,"rightUp/change")
 | 
						|
    self.change:SetActive(false)
 | 
						|
    self.detailBtn = Util.GetGameObject(self.gameObject,"rightUp/detailBtn")
 | 
						|
 | 
						|
    self.upper=Util.GetGameObject(self.gameObject,"bottom/times"):GetComponent("Text")   ---召唤上限
 | 
						|
    self.tip1=Util.GetGameObject(self.gameObject,"bottom/Tip1"):GetComponent("Text")   ---刷新时间
 | 
						|
    self.tip2=Util.GetGameObject(self.gameObject,"bottom/Tip2"):GetComponent("Text")   ---必出
 | 
						|
    self.btnGroup=Util.GetGameObject(self.gameObject,"bottom/btngroup")
 | 
						|
    self.leftTime=Util.GetGameObject(self.gameObject,"bottom/lefttime"):GetComponent("Text") 
 | 
						|
 | 
						|
    self.grid = Util.GetGameObject(self.gameObject, "aniRoot")
 | 
						|
    self.title = Util.GetGameObject(self.gameObject, "Bg/title"):GetComponent("Image")
 | 
						|
 | 
						|
    --mid
 | 
						|
    self.progressValue = Util.GetGameObject(self.gameObject, "mid/progress/value"):GetComponent("Image")--fillAmount
 | 
						|
    self.reward = Util.GetGameObject(self.gameObject, "mid/reward")
 | 
						|
    self.value = Util.GetGameObject(self.gameObject, "mid/value")
 | 
						|
 | 
						|
end
 | 
						|
 | 
						|
function LingShouBaoGe:BindEvent()
 | 
						|
 | 
						|
    Util.AddOnceClick(self.helpBtn, function()
 | 
						|
        UIManager.OpenPanel(UIName.HelpPopup,HELP_TYPE.LingShouBaoGe,self.helpPosition.x,self.helpPosition.y)
 | 
						|
    end)
 | 
						|
    Util.AddOnceClick(self.detailBtn, function()
 | 
						|
        UIManager.OpenPanel(UIName.GeneralBigPopup,GENERAL_POPUP_TYPE.RecrutDetail,self.actConfig.HelpId,self.actType,PRE_REWARD_POOL_TYPE.LING_SHOU_UP,PRE_REWARD_POOL_TYPE.LING_SHOU)
 | 
						|
    end)
 | 
						|
    Util.AddOnceClick(self.change, function()
 | 
						|
        UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.LingShouBaoGe,self.actData,self.showData.monsterId,function()
 | 
						|
            self:Refresh()
 | 
						|
        end)
 | 
						|
    end)
 | 
						|
 | 
						|
    Util.AddOnceClick(self.preview, function()
 | 
						|
        local battleId = tonumber(gloAcivity[self.activityId].ExpertDec) 
 | 
						|
        local fdata, fseed = BattleManager.GetFakeBattleData(battleId)
 | 
						|
        local testFightData = {
 | 
						|
        fightData = fdata,
 | 
						|
        fightSeed = fseed,
 | 
						|
        fightType = 0,
 | 
						|
        maxRound = 20
 | 
						|
        }
 | 
						|
        UIManager.OpenPanel(UIName.BattlePanel, testFightData, BATTLE_TYPE.Test,function ()
 | 
						|
            -- Timer.New(function ()
 | 
						|
            --     self:Refresh()
 | 
						|
            -- end,3):Start()
 | 
						|
        end)
 | 
						|
    end)
 | 
						|
end
 | 
						|
 | 
						|
--界面打开时调用(用于子类重写)
 | 
						|
function LingShouBaoGe:OnOpen(_activityConfig,_index,parent)
 | 
						|
    SoundManager.PlaySound(SoundConfig.UI_Siyuanzhen)
 | 
						|
    self.actConfig = _activityConfig
 | 
						|
    self.pageIndex = _index
 | 
						|
    self.parent = parent
 | 
						|
end
 | 
						|
 | 
						|
function LingShouBaoGe:OnSortingOrderChange()
 | 
						|
end
 | 
						|
 | 
						|
function LingShouBaoGe: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           
 | 
						|
 | 
						|
    self:Refresh()
 | 
						|
end
 | 
						|
 | 
						|
function LingShouBaoGe:Refresh()
 | 
						|
    self.actData = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.LingShouBaoGe)
 | 
						|
    self.activityId = self.actData.activityId
 | 
						|
    self.LSrewardData = ConfigManager.GetAllConfigsDataByKey(ConfigName.ActivityRewardConfig,"ActivityId",self.activityId)
 | 
						|
    local array = ConfigManager.GetAllConfigsDataByKey(ConfigName.LotterySetting,"ActivityId",self.activityId)
 | 
						|
    self.singleRecruit = array[1]
 | 
						|
    self.tenRecruit = array[2]
 | 
						|
    self.change:SetActive(false)
 | 
						|
 | 
						|
    CheckRedPointStatus(RedPointType.LingShouBaoGe)
 | 
						|
    self:refreshBtnShow()--刷新按钮显示
 | 
						|
    self:TimeCountDown()--时间
 | 
						|
    self:SetData()--加载界面数据立绘+进度条
 | 
						|
end
 | 
						|
 | 
						|
local PositionList = {
 | 
						|
    [20007] = {pos = 176,title = "l_lingshou_fenghuang_zh"},
 | 
						|
    [20006] = {pos = 70,title = "l_lingshou_baize_zh"},
 | 
						|
    [20005] = {pos = 70,title = "l_lingshou_pixiu_zh"},
 | 
						|
    [20008] = {pos = 70,title = "l_lingshou_jinwu_zh"},
 | 
						|
    [20009] = {pos = 70,title = "l_lingshou_jukun_zh"},
 | 
						|
}
 | 
						|
function LingShouBaoGe:SetData()
 | 
						|
    self.rewardData={}
 | 
						|
    self.showData={}
 | 
						|
    self.rewardData,self.showData,self.curScore = DynamicActivityManager.LingShouBuildData()
 | 
						|
    self.title.sprite = self.spLoader:LoadSprite(PositionList[self.showData.monsterId].title) 
 | 
						|
    --设置立绘
 | 
						|
    self.bgName =  artConfig[SpiritAnimalConfig[self.showData.monsterId].Live].Name
 | 
						|
    local pos = SpiritAnimalConfig[self.showData.monsterId].Position
 | 
						|
    local scale = SpiritAnimalConfig[self.showData.monsterId].Scale
 | 
						|
    if self.Live then
 | 
						|
        poolManager:UnLoadLive(self.bgName, self.Live)
 | 
						|
    end
 | 
						|
    self.Live = poolManager:LoadLive(self.bgName, self.grid.transform, Vector3.one*scale*0.8, Vector2.New(pos[1],pos[2]+PositionList[self.showData.monsterId].pos))
 | 
						|
    local RoleLiveGOGraphic = self.Live:GetComponent("SkeletonGraphic")
 | 
						|
    RoleLiveGOGraphic.AnimationState:SetAnimation(0, "idle", true)
 | 
						|
 | 
						|
    local leftTime = lotterySetting[self.singleRecruit.Id].DiamondBoxContain[1][2] - self.actData.value
 | 
						|
    self.tip2.text = Language[10480].."<color=green>"..leftTime..Language[10481]..GetLanguageStrById(SpiritAnimalConfig[self.showData.monsterId].Name)
 | 
						|
 | 
						|
    --设置奖励
 | 
						|
    self.progressValue.fillAmount = self.curScore/self.LSrewardData[#self.LSrewardData].Values[1][1]
 | 
						|
    Util.GetGameObject(self.value, "num"):GetComponent("Text").text = self.curScore
 | 
						|
    Util.GetGameObject(self.value, "tips"):GetComponent("Text").text = Language[10482]
 | 
						|
 | 
						|
    for i = 1, self.reward.transform.childCount do
 | 
						|
        local item = self.reward.transform:GetChild(i-1)
 | 
						|
        Util.GetGameObject(item, "num/Text"):GetComponent("Text").text = self.LSrewardData[i].Reward[1][2]
 | 
						|
        Util.GetGameObject(item, "Text"):GetComponent("Text").text = self.LSrewardData[i].Values[1][1]
 | 
						|
        Util.GetGameObject(item, "icon"):GetComponent("Image").sprite = self.spLoader:LoadSprite(artConfig[SpiritAnimalConfig[self.showData.monsterId].Icon].Name)
 | 
						|
        Util.GetGameObject(item, "red"):SetActive(self.rewardData[i].state == 1)
 | 
						|
        local btn = Util.GetGameObject(item, "icon")
 | 
						|
        Util.AddOnceClick(btn,function ()
 | 
						|
            if self.rewardData[i].state == 1 then
 | 
						|
                NetManager.GetActivityRewardRequest(self.rewardData[i].missionId,self.activityId,function (drop)
 | 
						|
                    UIManager.OpenPanel(UIName.RewardItemPopup, drop, 1,function ()
 | 
						|
                        self:Refresh()
 | 
						|
                    end)
 | 
						|
                end)
 | 
						|
            else
 | 
						|
                UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,self.LSrewardData[i].Reward[1][1],nil)
 | 
						|
            end
 | 
						|
        end)
 | 
						|
    end
 | 
						|
 | 
						|
end
 | 
						|
 | 
						|
function LingShouBaoGe:refreshBtnShow()
 | 
						|
    --下方的数量显示
 | 
						|
    local maxtimesId=lotterySetting[self.singleRecruit.Id].MaxTimes
 | 
						|
    local curTimes=PrivilegeManager.GetPrivilegeUsedTimes(maxtimesId)
 | 
						|
    self.upper.text = Language[10483]..curTimes.."/"..privilegeConfig[maxtimesId].Condition[1][2]--召唤上限
 | 
						|
 | 
						|
 | 
						|
    --是否是免费抽
 | 
						|
    local freeTimesId=lotterySetting[self.singleRecruit.Id].FreeTimes
 | 
						|
    if freeTimesId > 0 then
 | 
						|
        self.freeTime = PrivilegeManager.GetPrivilegeRemainValue(freeTimesId)
 | 
						|
        RecruitManager.freeUseTimeList[freeTimesId] = self.freeTime
 | 
						|
    end
 | 
						|
    --按钮赋值
 | 
						|
    for n, m in ipairs(btns) do
 | 
						|
        local btn = Util.GetGameObject(self.btnGroup,m.name)
 | 
						|
        local redPot = Util.GetGameObject(btn.gameObject,"RedPoint")
 | 
						|
        local info = Util.GetGameObject(btn.gameObject,"Content/Info"):GetComponent("Text")
 | 
						|
        local icon = Util.GetGameObject(btn.gameObject,"Content/Icon"):GetComponent("Image")
 | 
						|
        local num = Util.GetGameObject(btn.gameObject,"Content/Num"):GetComponent("Text")
 | 
						|
        --存在免费次数 并且 免费>=1 并且是1按钮
 | 
						|
        local isFree = self.freeTime and self.freeTime >= 1 and n == bType.Btn1
 | 
						|
        redPot.gameObject:SetActive(isFree)
 | 
						|
        icon.gameObject:SetActive(not isFree)
 | 
						|
        num.gameObject:SetActive(not isFree)
 | 
						|
        self.tip1.gameObject:SetActive(self.freeTime == 0)
 | 
						|
 | 
						|
        local itemId=0
 | 
						|
        local itemNum=0
 | 
						|
        local type = 0
 | 
						|
 | 
						|
        type = n == bType.Btn1 and self.singleRecruit.Id or self.tenRecruit.Id
 | 
						|
        local d = RecruitManager.GetExpendData(type)
 | 
						|
 | 
						|
        if isFree then
 | 
						|
            info.text=" "..Language[10493]
 | 
						|
        else
 | 
						|
            itemId = d[1]
 | 
						|
            itemNum = d[2]
 | 
						|
            icon.sprite = self.spLoader:LoadSprite(artResourcesConfig[itemConfig[itemId].ResourceID].Name)
 | 
						|
            info.text = m.isInfo
 | 
						|
            num.text = "x"..itemNum
 | 
						|
        end
 | 
						|
 | 
						|
        Util.AddOnceClick(btn,function()
 | 
						|
            local state = PlayerPrefs.GetInt(PlayerManager.uid.."GeneralPopup_RecruitConfirm"..RecruitType.BaoGeTen)
 | 
						|
            if n == bType.Btn1 then
 | 
						|
                if isFree then
 | 
						|
                    self:Recruit(type,maxtimesId,0,0,state,freeTimesId,{RecruitType.BaoGeSingle,RecruitType.BaoGeTen})
 | 
						|
                else
 | 
						|
                    self:Recruit(type,maxtimesId,itemId,itemNum,state,freeTimesId,{RecruitType.BaoGeSingle,RecruitType.BaoGeTen})
 | 
						|
                end
 | 
						|
            elseif n==bType.Btn10 then
 | 
						|
                self:Recruit(type,maxtimesId,itemId,itemNum,state,freeTimesId,{RecruitType.BaoGeTen,RecruitType.BaoGeTen})
 | 
						|
            end
 | 
						|
        end)
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function LingShouBaoGe:Recruit(id,RecruitMaxtimesId,itemId,itemNum,state,freeTimesId,recruitType)
 | 
						|
    local generalType = id%2 == 0 and RecruitType.BaoGeSingle or RecruitType.BaoGeTen
 | 
						|
    local num = id%2 == 0 and 1 or 10
 | 
						|
    --是否超过每日最大上限
 | 
						|
    if PrivilegeManager.GetPrivilegeRemainValue(RecruitMaxtimesId) < num then
 | 
						|
        PopupTipPanel.ShowTip(Language[10485])
 | 
						|
        return
 | 
						|
    end
 | 
						|
    if itemId ~= 0 then
 | 
						|
        if BagManager.GetItemCountById(itemId) < itemNum then
 | 
						|
            PopupTipPanel.ShowTip(GetLanguageStrById(itemConfig[itemId].Name)..Language[10486])
 | 
						|
            return
 | 
						|
        end
 | 
						|
    end
 | 
						|
    if itemId == 16 and state == 0 then
 | 
						|
        UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.RecruitConfirm,generalType,
 | 
						|
            function()
 | 
						|
                RecruitManager.RecruitRequest(id,function(msg)
 | 
						|
                    PrivilegeManager.RefreshPrivilegeUsedTimes(RecruitMaxtimesId,num)
 | 
						|
                    UIManager.OpenPanel(UIName.PokemonSingleResultPanel,id,msg.drop,self.activityId,recruitType,function ()
 | 
						|
                        self:Refresh()
 | 
						|
                    end)
 | 
						|
                end,freeTimesId,itemId,itemNum)
 | 
						|
            end,itemNum)
 | 
						|
    else
 | 
						|
        RecruitManager.RecruitRequest(id, function(msg)
 | 
						|
            PrivilegeManager.RefreshPrivilegeUsedTimes(RecruitMaxtimesId,num)
 | 
						|
            UIManager.OpenPanel(UIName.PokemonSingleResultPanel,id,msg.drop,self.activityId,recruitType,function ()
 | 
						|
                self:Refresh()
 | 
						|
            end)
 | 
						|
        end,freeTimesId,itemId,itemNum)
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
--- 将一段时间转换为天时分秒
 | 
						|
function LingShouBaoGe: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(Language[10472],minute, sec)
 | 
						|
    else
 | 
						|
        return string.format(Language[10473],day, hour)
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
--刷新时间
 | 
						|
function LingShouBaoGe:TimeCountDown()
 | 
						|
    if self.timer then
 | 
						|
        self.timer:Stop()
 | 
						|
        self.timer = nil
 | 
						|
    end
 | 
						|
 | 
						|
    local timeDown=CalculateSecondsNowTo_N_OClock(0)
 | 
						|
    self.tip1.text = TimeToHMS(timeDown)..Language[10488]
 | 
						|
    local timeDown2 = self.actData.endTime - GetTimeStamp()
 | 
						|
    self.leftTime.text = Language[10023]..TimeToFelaxible(timeDown2)
 | 
						|
 | 
						|
    self.tip1.gameObject:SetActive((timeDown < timeDown2) and (self.freeTime == 0))
 | 
						|
 | 
						|
    self.timer = Timer.New(function()
 | 
						|
        if timeDown < 1 then
 | 
						|
            self.timer:Stop()
 | 
						|
            self.timer = nil
 | 
						|
            self:Refresh()
 | 
						|
            return
 | 
						|
        end
 | 
						|
        if timeDown2 < 1 then
 | 
						|
            self.timer:Stop()
 | 
						|
            self.timer = nil
 | 
						|
            self.parent:ClosePanel()
 | 
						|
            return
 | 
						|
        end
 | 
						|
        timeDown = timeDown - 1
 | 
						|
        timeDown2 = timeDown2 -1
 | 
						|
        self.tip1.text = TimeToHMS(timeDown)..Language[10488]
 | 
						|
        self.leftTime.text = Language[10023]..TimeToFelaxible(timeDown2)
 | 
						|
    end, 1, -1, true)
 | 
						|
    self.timer:Start()
 | 
						|
end
 | 
						|
 | 
						|
function LingShouBaoGe:OnClose()
 | 
						|
    self.gameObject:SetActive(false)
 | 
						|
    if self.Live then
 | 
						|
        poolManager:UnLoadLive(self.bgName, self.Live)
 | 
						|
    end
 | 
						|
    self.Live = nil
 | 
						|
    if self.timer then
 | 
						|
        self.timer:Stop()
 | 
						|
        self.timer = nil
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function LingShouBaoGe:OnDestroy()
 | 
						|
    if self.Live then
 | 
						|
        poolManager:UnLoadLive(self.bgName, self.Live)
 | 
						|
    end
 | 
						|
    self.Live = nil
 | 
						|
    self.spLoader:Destroy()
 | 
						|
end
 | 
						|
 | 
						|
--添加事件监听(用于子类重写)
 | 
						|
function LingShouBaoGe:AddListener()
 | 
						|
    
 | 
						|
end
 | 
						|
 | 
						|
--移除事件监听(用于子类重写)
 | 
						|
function LingShouBaoGe:RemoveListener()
 | 
						|
    
 | 
						|
end
 | 
						|
 | 
						|
return LingShouBaoGe |