Back to Home

ESO Lua File v101050

ingame/returningplayer/returningplayer_manager.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
ZO_RETURNING_PLAYER_REWARD_TYPE =
{
    DAILY_REWARD = "DailyReward",
    PRIMARY_REWARD = "PrimaryReward",
}
local ReturningPlayer_Manager = ZO_InitializingCallbackObject:Subclass()
function ReturningPlayer_Manager:Initialize()
    PROMOTIONAL_EVENT_MANAGER:RegisterCallback("ActivityProgressUpdated", ZO_GetCallbackForwardingFunction(self, self.OnPromotionalActivityProgressUpdated))
    EVENT_MANAGER:RegisterForEvent("ReturningPlayer_Manager", EVENT_RETURNING_PLAYER_DAILY_LOGIN_REWARD_CLAIMED, ZO_GetEventForwardingFunction(self, self.OnReturningPlayerDailyRewardClaimed))
    local function OnAddOnLoaded(_, name)
        if name == "ZO_Ingame" then
            self:SetupSavedVars()
            EVENT_MANAGER:UnregisterForEvent("ReturningPlayer_Manager", EVENT_ADD_ON_LOADED)
        end
    end
    EVENT_MANAGER:RegisterForEvent("ReturningPlayer_Manager", EVENT_ADD_ON_LOADED, OnAddOnLoaded)
end
function ReturningPlayer_Manager:SetupSavedVars()
    local defaults =
    {
        lastSeenRewardsTimestamp = 0,
    }
    self.savedVars = ZO_SavedVars:NewAccountWide("ZO_Ingame_SavedVariables", 1, "ReturningPlayer_Manager", defaults)
end
function ReturningPlayer_Manager:OnPromotionalActivityProgressUpdated(activityData, ...)
    if not PROMOTIONAL_EVENT_PERSONAL_CAMPAIGN_MANAGER:IsReturningPlayer() or not activityData:IsComplete() then
        return
    end
    -- don't pop up the rewards screen if the player completes the intro activity in the tutorial
    if not IsInIntroGameplayExperienceWorld() then
        return
    end
    local campaignKey, componentType, index = PROMOTIONAL_EVENT_PERSONAL_CAMPAIGN_MANAGER:GetIntroGameplayExperienceData()
    if componentType ~= PROMOTIONAL_EVENTS_COMPONENT_TYPE_ACTIVITY then
        return
    end
    if activityData:MatchesCampaignKey(campaignKey) and activityData:GetActivityIndex() == index then
        self.isCampaignCompletedButUnseen = true
        SYSTEMS:ShowScene("returningPlayerRewards")
    end
end
function ReturningPlayer_Manager:IsCampaignCompletedButUnseen()
    return self.isCampaignCompletedButUnseen
end
function ReturningPlayer_Manager:OnReturningPlayerDailyRewardClaimed()
    self:FireCallbacks("DailyRewardClaimed")
end
function ReturningPlayer_Manager:GetCampaignRewardsDescriptionText()
        self.isCampaignCompletedButUnseen = nil
        local promotionalEventNameText = PROMOTIONAL_EVENT_MANAGER:GetPromotionalEventsColorizedDisplayName()
        return zo_strformat(SI_RETURNING_PLAYER_REWARDS_COMPLETED, promotionalEventNameText)
    else
        return PROMOTIONAL_EVENT_PERSONAL_CAMPAIGN_MANAGER:GetCampaignRewardsDescriptionText()
    end
end
function ReturningPlayer_Manager:ShowReturningPlayerAnnouncementScreen()
    if PROMOTIONAL_EVENT_PERSONAL_CAMPAIGN_MANAGER:IsIntroCampaignComplete() or IsActiveWorldStarterWorld() then
        SYSTEMS:ShowScene("returningPlayerRewards")
    else
        SYSTEMS:ShowScene("returningPlayerIntro")
    end
end
function ReturningPlayer_Manager:IsShowingReturningPlayerScene()
    return SYSTEMS:IsShowing("returningPlayerIntro") or SYSTEMS:IsShowing("returningPlayerRewards")
end
function ReturningPlayer_Manager:GetDailyLoginRewards()
    local numDailyLoginRewards = GetNumReturningPlayerDailyLoginRewards()
    local numClaimedRewards = GetNumReturningPlayerDailyLoginRewardsClaimed()
    local rewards = {}
    for rewardIndex = 1, numDailyLoginRewards do
        local rewardId, quantity = GetReturningPlayerDailyLoginRewardInfo(rewardIndex)
        local rewardData = REWARDS_MANAGER:GetInfoForReward(rewardId, quantity)
        if rewardData then
            local rewardEntry = ZO_EntryData:New(rewardData)
            rewardEntry.type = ZO_RETURNING_PLAYER_REWARD_TYPE.DAILY_REWARD
            rewardEntry.index = rewardIndex
            rewardEntry.claimed = rewardIndex <= numClaimedRewards
            rewardEntry.narrationText = zo_strformat(SI_RETURNING_PLAYER_DAILY_LOGIN_DAY_LABEL, rewardIndex)
            table.insert(rewards, rewardEntry)
        end
    end
    return rewards
end
function ReturningPlayer_Manager:AreAnyDailyLoginRewardsUnclaimed()
    local numDailyLoginRewards = GetNumReturningPlayerDailyLoginRewards()
    local numClaimedRewards = GetNumReturningPlayerDailyLoginRewardsClaimed()
    return numClaimedRewards < numDailyLoginRewards
end
function ReturningPlayer_Manager:HasClaimableDailyReward()
end
function ReturningPlayer_Manager:HasClaimedAllPrimaryAndDailyRewards()
    local numDailyLoginRewards = GetNumReturningPlayerDailyLoginRewards()
    local numClaimedRewards = GetNumReturningPlayerDailyLoginRewardsClaimed()
    if numClaimedRewards < numDailyLoginRewards then
        return false
    end
    return PROMOTIONAL_EVENT_PERSONAL_CAMPAIGN_MANAGER:HasClaimedAllPrimaryRewards()
end
function ReturningPlayer_Manager:ShouldShowReturningPlayerAnnouncement()
    if not PROMOTIONAL_EVENT_PERSONAL_CAMPAIGN_MANAGER:IsReturningPlayer() or HasShownPromotionalEventPersonalCampaignAnnouncement() then
        return false
    end
    -- Always show if we haven't completed the intro
    if not PROMOTIONAL_EVENT_PERSONAL_CAMPAIGN_MANAGER:IsIntroCampaignComplete() then
        return true
    end
    -- Don't show if there aren't any unclaimed rewards
        return false
    end
    return true
end
function ReturningPlayer_Manager:ShouldShowReturningPlayerAnnouncementEntry()
    return PROMOTIONAL_EVENT_PERSONAL_CAMPAIGN_MANAGER:IsReturningPlayer() and not self:HasClaimedAllPrimaryAndDailyRewards()
end
function ReturningPlayer_Manager:MarkRewardsAsSeen()
    self.savedVars.lastSeenRewardsTimestamp = GetTimeStamp()
end
function ReturningPlayer_Manager:GetLastTimeRewardsWereSeen()
    return self.savedVars.lastSeenRewardsTimestamp
end
RETURNING_PLAYER_MANAGER = ReturningPlayer_Manager:New()