Back to Home

ESO Lua File v101050

ingame/tamrieltomes/tamrieltomespurchasescreen_shared.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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
ZO_TamrielTomesPurchaseScreen_Shared = ZO_DeferredInitializingObject:Subclass()
function ZO_TamrielTomesPurchaseScreen_Shared:Initialize(control, scene)
    self.control = control
    ZO_DeferredInitializingObject.Initialize(self, scene)
    self.fragment = ZO_FadeSceneFragment:New(control)
    scene:AddFragment(self.fragment)
end
function ZO_TamrielTomesPurchaseScreen_Shared:OnDeferredInitialize()
    -- eventId, currencyType, currencyLocation, delta, reason, reasonInfo
    local function OnCurrencyUpdated(_, currencyType)
        if currencyType == CURT_TOME_TOKENS then
            self:UpdateButtons()
        end
    end
    self.control:RegisterForEvent(EVENT_CURRENCY_UPDATE, OnCurrencyUpdated)
    TAMRIEL_TOMES_MANAGER:RegisterCallback("SelectedTomeChanged", self.OnSelectedTomeChanged, self)
    TAMRIEL_TOMES_MANAGER:RegisterCallback("DirectPurchaseDataUpdated", self.UpdateButtons, self)
    DIRECT_PURCHASE_MANAGER:RegisterCallback("CatalogUpdated", self.UpdateButtons, self)
    DIRECT_PURCHASE_MANAGER:RegisterCallback("SettingsUpdated", self.OnSettingsUpdated, self)
    ZO_DIALOG_SYNC_OBJECT:SetHandler("OnStateChanged", function(_, shownDialog)
        self:OnDialogStateChanged(shownDialog)
    end, self:GetScene():GetName())
    ZO_DIALOG_SYNC_OBJECT:SetHandler("OnShown", function()
        self:OnDialogShown()
    end, self:GetScene():GetName())
    ZO_DIALOG_SYNC_OBJECT:SetHandler("OnHidden", function()
        self:OnDialogHidden()
    end, self:GetScene():GetName())
end
function ZO_TamrielTomesPurchaseScreen_Shared:OnDialogStateChanged(shownDialog)
    if self:IsShowing() and shownDialog == "DIRECT_PURCHASE_RESULT" or shownDialog == "TAMRIEL_TOME_PURCHASE_RESULT" then
        self.refreshOnDialogHidden = true
    end
end
function ZO_TamrielTomesPurchaseScreen_Shared:OnDialogShown()
    -- To be overridden
end
function ZO_TamrielTomesPurchaseScreen_Shared:OnDialogHidden()
    if self.refreshOnDialogHidden then
        self.refreshOnDialogHidden = nil
        self:UpdateButtons()
    end
end
function ZO_TamrielTomesPurchaseScreen_Shared:InitializeControls()
    self.titleLabel = self.control:GetNamedChild("Title")
    self.imageControl = self.control:GetNamedChild("Image")
    self.gridListControl = self.control:GetNamedChild("GridList")
    self.premiumPlusIcon = self.control:GetNamedChild("PremiumPlusIcon")
    self.buttonContainer = self.control:GetNamedChild("Buttons")
    self.row1ButtonContainer = self.buttonContainer:GetNamedChild("Row1")
    self.premiumButton = self.row1ButtonContainer:GetNamedChild("PremiumButton")
    self.premiumPlusButton = self.row1ButtonContainer:GetNamedChild("PremiumPlusButton")
    self.premiumPlusDescription = self.row1ButtonContainer:GetNamedChild("PremiumPlusDescription")
    self.row2ButtonContainer = self.buttonContainer:GetNamedChild("Row2")
    self.tokenButton = self.row2ButtonContainer:GetNamedChild("TokenButton")
end
ZO_TamrielTomesPurchaseScreen_Shared:MUST_IMPLEMENT("InitializeGridList")
-- Should at least define self.keybindStripDescriptor
ZO_TamrielTomesPurchaseScreen_Shared:MUST_IMPLEMENT("InitializeKeybindStripDescriptors")
ZO_TamrielTomesPurchaseScreen_Shared:MUST_IMPLEMENT("GetRewardEntryTemplate")
ZO_TamrielTomesPurchaseScreen_Shared:MUST_IMPLEMENT("GetVerticalDividerEntryTemplate")
ZO_TamrielTomesPurchaseScreen_Shared:MUST_IMPLEMENT("ShowTokenRedemptionDialog")
ZO_TamrielTomesPurchaseScreen_Shared:MUST_IMPLEMENT("ShowInsufficientTokenRedemptionDialog")
function ZO_TamrielTomesPurchaseScreen_Shared:OnSettingsUpdated()
end
function ZO_TamrielTomesPurchaseScreen_Shared:UpdateKeybinds()
    KEYBIND_STRIP:UpdateKeybindButtonGroup(self.keybindStripDescriptor)
end
function ZO_TamrielTomesPurchaseScreen_Shared:OnShown()
    self:UpdateInfo()
    KEYBIND_STRIP:AddKeybindButtonGroup(self.keybindStripDescriptor)
    if ShowPlatformStoreIcon then
        ShowPlatformStoreIcon(PLATFORM_STORE_ICON_LOCATION_LOWER_RIGHT)
    end
end
function ZO_TamrielTomesPurchaseScreen_Shared:OnHiding()
    if HidePlatformStoreIcon then
        HidePlatformStoreIcon()
    end
    KEYBIND_STRIP:RemoveKeybindButtonGroup(self.keybindStripDescriptor)
end
function ZO_TamrielTomesPurchaseScreen_Shared:OnSelectedTomeChanged()
    if self:IsShowing() then
        KEYBIND_STRIP:RemoveKeybindButtonGroup(self.keybindStripDescriptor)
        SCENE_MANAGER:HideCurrentScene()
    end
end
function ZO_TamrielTomesPurchaseScreen_Shared:UpdateInfo()
    local selectedTomeId = TAMRIEL_TOMES_MANAGER:GetSelectedTomeId()
    local backgroundFile = GetTamrielTomePremiumUpgradeBackgroundFileIndex(selectedTomeId)
    self.imageControl:SetTexture(backgroundFile)
end
function ZO_TamrielTomesPurchaseScreen_Shared:UpdateGridList()
    self.gridList:ClearGridList()
    local selectedTomeId = TAMRIEL_TOMES_MANAGER:GetSelectedTomeId()
    local rewards = TAMRIEL_TOMES_MANAGER:GetFeaturedTomeRewards(selectedTomeId)
    local rewardEntryTemplate = self:GetRewardEntryTemplate()
    for index, reward in ipairs(rewards) do
        local rewardEntry = ZO_GridSquareEntryData_Shared:New(reward)
        self.gridList:AddEntry(rewardEntry, rewardEntryTemplate)
    end
    local bonusRewardId, bonusRewardQuantity = TAMRIEL_TOMES_MANAGER:GetTomePremiumPlusBonusRewardInfo(selectedTomeId)
    local bonusRewardData = REWARDS_MANAGER:GetInfoForReward(bonusRewardId, bonusRewardQuantity)
    local bonusRewardEntry
    if bonusRewardData then
        if #rewards > 0 then
            local verticalDividerEntryTemplate = self:GetVerticalDividerEntryTemplate()
            self.gridList:AddEntry({}, verticalDividerEntryTemplate)
        end
        bonusRewardEntry = ZO_GridSquareEntryData_Shared:New(bonusRewardData)
        self.gridList:AddEntry(bonusRewardEntry, rewardEntryTemplate)
    end
    self.gridList:CommitGridList()
    self.premiumPlusIcon:SetHidden(true)
    if bonusRewardEntry then
        local control = self.gridList:GetControlFromData(bonusRewardEntry)
        if control then
            self.premiumPlusIcon:SetHidden(false)
            self.premiumPlusIcon:SetAnchor(CENTER, control, BOTTOM)
end
    end
end
function ZO_TamrielTomesPurchaseScreen_Shared:UpdateButtons()
    if not self:IsShowing() then
        return
    end
    if ZO_DIALOG_SYNC_OBJECT:IsShown() then
        self.refreshOnDialogHidden = true
        return
    end
    if not TAMRIEL_TOMES_MANAGER:CanPurchaseAnySelectedTomeProduct() then
        KEYBIND_STRIP:RemoveKeybindButtonGroup(self.keybindStripDescriptor)
        SCENE_MANAGER:HideCurrentScene()
        return
    end
    -- Use the enabled state of the Direct Purchase system to determine whether the buttons are visible.
    local isSystemEnabled = DIRECT_PURCHASE_MANAGER:IsSystemEnabled()
    self.buttonContainer:SetHidden(not isSystemEnabled)
    if not isSystemEnabled then
        return
    end
    local premiumProductType = TAMRIEL_TOME_PRODUCT_TYPE_PREMIUM
    local premiumProductData = TAMRIEL_TOMES_MANAGER:GetPurchaseDataForSelectedTomeProductType(premiumProductType)
    self.premiumButton.productData = premiumProductData
    local shouldEnablePremium = false
    if premiumProductData ~= nil then
        shouldEnablePremium = premiumProductData:CanPurchase()
        if shouldEnablePremium then
            local priceString = TAMRIEL_TOMES_MANAGER:GetPricingStringFormattedForSelectedTomeProductType(premiumProductType)
            self.premiumButton:SetModifyTextType(MODIFY_TEXT_TYPE_NONE)
            self.premiumButton:SetText(priceString)
        else
            self.premiumButton:SetModifyTextType(MODIFY_TEXT_TYPE_UPPERCASE)
            self.premiumButton:SetText(GetString(SI_TAMRIEL_TOMES_PURCHASED_UPGRADE))
        end
    else
        -- We shouldn't be in this screen if we don't have direct purchase data.
        self.premiumButton:SetText("")
    end
    self.premiumButton:SetEnabled(shouldEnablePremium)
    local plusProductType = self:GetPremiumPlusProductType()
    local premiumPlusProductData = TAMRIEL_TOMES_MANAGER:GetPurchaseDataForSelectedTomeProductType(plusProductType)
    self.premiumPlusButton.productData = premiumPlusProductData
    local hasPremiumPlusProductData = premiumPlusProductData ~= nil
    if hasPremiumPlusProductData then
        local premiumPlusPriceString = TAMRIEL_TOMES_MANAGER:GetPricingStringFormattedForSelectedTomeProductType(plusProductType)
        self.premiumPlusButton:SetModifyTextType(MODIFY_TEXT_TYPE_NONE)
        self.premiumPlusButton:SetText(premiumPlusPriceString)
    else
        -- We shouldn't be in this screen if we don't have direct purchase data.
        self.premiumPlusButton:SetText("")
    end
    self.premiumPlusButton:SetEnabled(hasPremiumPlusProductData)
    -- If premium is owned, you can't use tokens. If both are owned, you can't even be in this screen.
    self.tokenButton:SetEnabled(hasPremiumPlusProductData and shouldEnablePremium)
    local selectedTomeId = TAMRIEL_TOMES_MANAGER:GetSelectedTomeId()
    local premiumPlusDescription = hasPremiumPlusProductData and TAMRIEL_TOMES_MANAGER:GetTomePremiumPlusRewardDescription(selectedTomeId) or ""
    self.premiumPlusDescription:SetText(premiumPlusDescription)
    local currencyCost = GetCurrencyCostToUpgradeTamrielTome()
    local IS_UPPER = false
    local currencyName = GetCurrencyName(CURT_TOME_TOKENS, IsCountSingularForm(currencyCost), IS_UPPER)
    local tokenButtonString = zo_strformat(SI_TAMRIEL_TOMES_PREMIUM_PLUS_TOKEN_UPGRADE_LABEL, currencyCost, currencyName)
    self.tokenButton:SetText(tokenButtonString)
end
function ZO_TamrielTomesPurchaseScreen_Shared:GetPremiumPlusProductType()
    if self:CanAcquireTomeProduct(TAMRIEL_TOME_PRODUCT_TYPE_PREMIUM) and self:CanAcquireTomeProduct(TAMRIEL_TOME_PRODUCT_TYPE_PREMIUM_PLUS) then
        return TAMRIEL_TOME_PRODUCT_TYPE_PREMIUM_PLUS
    else
        return TAMRIEL_TOME_PRODUCT_TYPE_PREMIUM_PLUS_UPGRADE
    end
end
function ZO_TamrielTomesPurchaseScreen_Shared:RequestPurchaseTome(tomeProductType)
    local productData = TAMRIEL_TOMES_MANAGER:GetPurchaseDataForSelectedTomeProductType(tomeProductType)
    if productData then
        productData:GetSkuData():RequestPurchase()
    end
end
function ZO_TamrielTomesPurchaseScreen_Shared:RequestPurchasePremiumTome()
    self:RequestPurchaseTome(TAMRIEL_TOME_PRODUCT_TYPE_PREMIUM)
end
function ZO_TamrielTomesPurchaseScreen_Shared:RequestPurchasePremiumPlusTome()
    local productType = self:GetPremiumPlusProductType()
    self:RequestPurchaseTome(productType)
end
function ZO_TamrielTomesPurchaseScreen_Shared:CanAcquireTomeProduct(tomeProductType)
    local productData = TAMRIEL_TOMES_MANAGER:GetPurchaseDataForSelectedTomeProductType(tomeProductType)
    if productData then
        local canPurchase = productData:CanPurchase()
        return canPurchase
    end
    return false
end
function ZO_TamrielTomesPurchaseScreen_Shared:RequestRedeemTomeTokens()
    local numTokens = GetPlayerStoredCurrencyAmount(CURT_TOME_TOKENS)
    local hasEnoughTokens = numTokens >= GetCurrencyCostToUpgradeTamrielTome()
    if hasEnoughTokens then
    else
    end
end
function ZO_TamrielTomesPurchaseScreen_Shared.RewardGridEntrySetup(control, data, selected)
    control.data = data
    control.icon:SetHidden(false)
    local quantity = nil
    local quantityString = nil
    if data:GetRewardType() == REWARD_ENTRY_TYPE_REWARD_LIST then
        local rewardListId = GetRewardListIdFromReward(data:GetRewardId())
        local numRewardListRewards = GetNumRewardListEntries(rewardListId)
        if numRewardListRewards > 1 then
            quantity = numRewardListRewards
            quantityString = zo_strformat(SI_TAMRIEL_TOMES_REWARD_LIST_QUANTITY_FORMATTER, quantity - 1)
        end
    end
    if not quantityString then
        quantity = data:GetQuantity()
        if quantity > 1 then
            quantityString = data:GetAbbreviatedQuantity()
        end
    end
    if quantityString then 
        control.quantityLabel:SetText(quantityString)
        control.quantityLabel:SetHidden(false)
    else
        control.quantityLabel:SetHidden(true)
    end
end
function ZO_TamrielTomesPurchaseScreen_Shared:SetFocusedRewardControl(control, isPopUpRewardData)
    if control then
        local rewardData = control.GetRewardData and control.GetRewardData() or control.data
        if rewardData then
            self.focusedRewardControl = control
            self.focusedRewardData = rewardData
            self.isFocusedRewardDataPopUp = isPopUpRewardData
            self:UpdateKeybinds()
            return
        end
    end
    self.focusedRewardControl = nil
    self.focusedRewardData = nil
    self.isFocusedRewardDataPopUp = nil
end
function ZO_TamrielTomesPurchaseScreen_Shared:GetPreviewFocusedRewardKeybindName()
    local rewardType = self.focusedRewardData:GetRewardType()
    if rewardType == REWARD_ENTRY_TYPE_REWARD_LIST then
        return GetString(SI_REWARD_LIST_VIEW_ACTION)
    end
    return GetString(SI_TAMRIEL_TOMES_PREVIEW_ACTION)
end
function ZO_TamrielTomesPurchaseScreen_Shared:CanPreviewFocusedReward()
    if self.focusedRewardData then
        local rewardType = self.focusedRewardData:GetRewardType()
        if rewardType == REWARD_ENTRY_TYPE_REWARD_LIST then
            return true
        else
            local rewardId = self.focusedRewardData:GetRewardId()
            return CanPreviewReward(rewardId) and not SYSTEMS:GetObject("itemPreview"):IsCurrentlyPreviewing(ZO_ITEM_PREVIEW_REWARD, rewardId)
        end
    end
    return false
end
function ZO_TamrielTomesPurchaseScreen_Shared:BeginPreviewFocusedReward()
    
end
function ZO_TamrielTomesPurchaseScreen_Shared:EndPreviewFocusedReward()
    SYSTEMS:GetObject("itemPreview"):EndCurrentPreview()
end
function ZO_TamrielTomesPurchaseScreen_Shared.RewardGridEntryReset(control)
end