Back to Home

ESO Lua File v101032

ingame/crafting/smithing_common.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
ZO_GAMEPAD_SMITHING_HORIZONTAL_LIST_X_PADDING = 20
ZO_GAMEPAD_SMITHING_HORIZONTAL_LIST_Y_PADDING = 4
local g_sceneToManagerMap = {}
local function GetShowingSceneOwner()
    for name, owner in pairs(g_sceneToManagerMap) do
        if SCENE_MANAGER:IsShowing(name) then
            return owner
        end
    end
end
function ZO_Smithing_AddScene(name, owner)
    g_sceneToManagerMap[name] = owner
end
    return GetShowingSceneOwner() ~= nil
end
    local sceneOwner = GetShowingSceneOwner()
    return sceneOwner
end
function ZO_Smithing_IsSmithingStation(craftingType)
    return IsSmithingCraftingType(craftingType)
end
--
-- ZO_Smithing_Common
--
ZO_Smithing_Common = ZO_Object:Subclass()
function ZO_Smithing_Common:New(...)
    local smithing = ZO_Object.New(self)
    smithing:Initialize(...)
    return smithing
end
SMITHING_BONUSES = 
{
    [NON_COMBAT_BONUS_BLACKSMITHING_LEVEL] = true,
    [NON_COMBAT_BONUS_BLACKSMITHING_BOOSTER_BONUS] = true,
    [NON_COMBAT_BONUS_BLACKSMITHING_EXTRACT_LEVEL] = true,
    [NON_COMBAT_BONUS_BLACKSMITHING_CRAFT_PERCENT_DISCOUNT] = true,
    [NON_COMBAT_BONUS_BLACKSMITHING_RESEARCH_LEVEL] = true,
    [NON_COMBAT_BONUS_CLOTHIER_LEVEL] = true,
    [NON_COMBAT_BONUS_CLOTHIER_BOOSTER_BONUS] = true,
    [NON_COMBAT_BONUS_CLOTHIER_EXTRACT_LEVEL] = true,
    [NON_COMBAT_BONUS_CLOTHIER_CRAFT_PERCENT_DISCOUNT] = true,
    [NON_COMBAT_BONUS_CLOTHIER_RESEARCH_LEVEL] = true,
    [NON_COMBAT_BONUS_WOODWORKING_LEVEL] = true,
    [NON_COMBAT_BONUS_WOODWORKING_BOOSTER_BONUS] = true,
    [NON_COMBAT_BONUS_WOODWORKING_EXTRACT_LEVEL] = true,
    [NON_COMBAT_BONUS_WOODWORKING_CRAFT_PERCENT_DISCOUNT] = true,
    [NON_COMBAT_BONUS_WOODWORKING_RESEARCH_LEVEL] = true,
    [NON_COMBAT_BONUS_JEWELRYCRAFTING_LEVEL] = true,
    [NON_COMBAT_BONUS_JEWELRYCRAFTING_BOOSTER_BONUS] = true,
    [NON_COMBAT_BONUS_JEWELRYCRAFTING_EXTRACT_LEVEL] = true,
    [NON_COMBAT_BONUS_JEWELRYCRAFTING_CRAFT_PERCENT_DISCOUNT] = true,
    [NON_COMBAT_BONUS_JEWELRYCRAFTING_RESEARCH_LEVEL] = true,
}
function ZO_Smithing_Common:Initialize(control)
    self.control = control
    self.smithingStationInteraction =
    {
        type = "Smithing Station",
        OnInteractSwitch = function()
            internalassert(false, "OnInteractSwitch is being called.")
            SCENE_MANAGER:ShowBaseScene()
        end,
        interactTypes = { INTERACTION_CRAFT },
    }
    local function OnQuestInformationUpdated(updatedQuestInfo)
        self.shouldRefineForQuest = updatedQuestInfo.smithingItemId ~= nil
        self.shouldCraftForQuest = updatedQuestInfo.hasPatterns and (not updatedQuestInfo.hasItemToImproveForWrit)
        self.shouldImproveForQuest = updatedQuestInfo.hasItemToImproveForWrit
        self.usesProvisioningForQuest = updatedQuestInfo.hasRecipesForQuest
        self:UpdateQuestPins()
    end
    CRAFT_ADVISOR_MANAGER:RegisterCallback("QuestInformationUpdated", OnQuestInformationUpdated)
end
function ZO_Smithing_Common:CreateInteractScene(sceneName)
    return ZO_InteractScene:New(sceneName, SCENE_MANAGER, self.smithingStationInteraction)
end
SMITHING_MODE_ROOT = 0
SMITHING_MODE_REFINEMENT = 1
SMITHING_MODE_CREATION = 2
SMITHING_MODE_DECONSTRUCTION = 3
SMITHING_MODE_IMPROVEMENT = 4
SMITHING_MODE_RESEARCH = 5
SMITHING_MODE_RECIPES = 6
function ZO_Smithing_Common:GetTutorialTrigger(craftingType, mode)
    if craftingType == CRAFTING_TYPE_BLACKSMITHING then
        if mode == SMITHING_MODE_REFINEMENT then
            return TUTORIAL_TRIGGER_BLACKSMITHING_REFINEMENT_OPENED
        elseif mode == SMITHING_MODE_CREATION then
            return TUTORIAL_TRIGGER_BLACKSMITHING_CREATION_OPENED
        elseif mode == SMITHING_MODE_DECONSTRUCTION then
            return TUTORIAL_TRIGGER_BLACKSMITHING_DECONSTRUCTION_OPENED
        elseif mode == SMITHING_MODE_IMPROVEMENT then
            return TUTORIAL_TRIGGER_BLACKSMITHING_IMPROVEMENT_OPENED
        elseif mode == SMITHING_MODE_RESEARCH then
            return TUTORIAL_TRIGGER_BLACKSMITHING_RESEARCH_OPENED
        end
    elseif craftingType == CRAFTING_TYPE_CLOTHIER then
        if mode == SMITHING_MODE_REFINEMENT then
            return TUTORIAL_TRIGGER_CLOTHIER_REFINEMENT_OPENED
        elseif mode == SMITHING_MODE_CREATION then
            return TUTORIAL_TRIGGER_CLOTHIER_CREATION_OPENED
        elseif mode == SMITHING_MODE_DECONSTRUCTION then
            return TUTORIAL_TRIGGER_CLOTHIER_DECONSTRUCTION_OPENED
        elseif mode == SMITHING_MODE_IMPROVEMENT then
            return TUTORIAL_TRIGGER_CLOTHIER_IMPROVEMENT_OPENED
        elseif mode == SMITHING_MODE_RESEARCH then
            return TUTORIAL_TRIGGER_CLOTHIER_RESEARCH_OPENED
        end
    elseif craftingType == CRAFTING_TYPE_WOODWORKING then
        if mode == SMITHING_MODE_REFINEMENT then
            return TUTORIAL_TRIGGER_WOODWORKING_REFINEMENT_OPENED
        elseif mode == SMITHING_MODE_CREATION then
            return TUTORIAL_TRIGGER_WOODWORKING_CREATION_OPENED
        elseif mode == SMITHING_MODE_DECONSTRUCTION then
            return TUTORIAL_TRIGGER_WOODWORKING_DECONSTRUCTION_OPENED
        elseif mode == SMITHING_MODE_IMPROVEMENT then
            return TUTORIAL_TRIGGER_WOODWORKING_IMPROVEMENT_OPENED
        elseif mode == SMITHING_MODE_RESEARCH then
            return TUTORIAL_TRIGGER_WOODWORKING_RESEARCH_OPENED
        end
    elseif craftingType == CRAFTING_TYPE_JEWELRYCRAFTING then
        if mode == SMITHING_MODE_REFINEMENT then
            return TUTORIAL_TRIGGER_JEWELRYCRAFTING_REFINEMENT_OPENED
        elseif mode == SMITHING_MODE_CREATION then
            return TUTORIAL_TRIGGER_JEWELRYCRAFTING_CREATION_OPENED
        elseif mode == SMITHING_MODE_DECONSTRUCTION then
            return TUTORIAL_TRIGGER_JEWELRYCRAFTING_DECONSTRUCTION_OPENED
        elseif mode == SMITHING_MODE_IMPROVEMENT then
            return TUTORIAL_TRIGGER_JEWELRYCRAFTING_IMPROVEMENT_OPENED
        elseif mode == SMITHING_MODE_RESEARCH then
            return TUTORIAL_TRIGGER_JEWELRYCRAFTING_RESEARCH_OPENED
        end
    end
end
function ZO_Smithing_Common:DirtyAllPanels()
    self.creationPanel:DirtyAllLists()
    self.improvementPanel:HandleDirtyEvent()
    self.researchPanel:HandleDirtyEvent()
end
function ZO_Smithing_Common:IsItemAlreadySlottedToCraft(bagId, slotIndex)
    if self.mode == SMITHING_MODE_REFINEMENT then
        return self.refinementPanel:IsItemAlreadySlottedToCraft(bagId, slotIndex)
    elseif self.mode == SMITHING_MODE_IMPROVEMENT then
        return self.improvementPanel:IsItemAlreadySlottedToCraft(bagId, slotIndex)
    elseif self.mode == SMITHING_MODE_DECONSTRUCTION then
        return self.deconstructionPanel:IsItemAlreadySlottedToCraft(bagId, slotIndex)
    end
end
function ZO_Smithing_Common:CanItemBeAddedToCraft(bagId, slotIndex)
    if self.mode == SMITHING_MODE_REFINEMENT then
        return self.refinementPanel:CanItemBeAddedToCraft(bagId, slotIndex)
    elseif self.mode == SMITHING_MODE_IMPROVEMENT then
        return self.improvementPanel:CanItemBeAddedToCraft(bagId, slotIndex)
    elseif self.mode == SMITHING_MODE_DECONSTRUCTION then
        return self.deconstructionPanel:CanItemBeAddedToCraft(bagId, slotIndex)
    end
end
function ZO_Smithing_Common:AddItemToCraft(bagId, slotIndex)
    if self.mode == SMITHING_MODE_REFINEMENT then
        self.refinementPanel:AddItemToCraft(bagId, slotIndex)
    elseif self.mode == SMITHING_MODE_IMPROVEMENT then
        self.improvementPanel:AddItemToCraft(bagId, slotIndex)
    elseif self.mode == SMITHING_MODE_DECONSTRUCTION then
        self.deconstructionPanel:AddItemToCraft(bagId, slotIndex)
    end
end
function ZO_Smithing_Common:RemoveItemFromCraft(bagId, slotIndex)
    if self.mode == SMITHING_MODE_REFINEMENT then
        self.refinementPanel:RemoveItemFromCraft(bagId, slotIndex)
    elseif self.mode == SMITHING_MODE_IMPROVEMENT then
        self.improvementPanel:RemoveItemFromCraft(bagId, slotIndex)
    elseif self.mode == SMITHING_MODE_DECONSTRUCTION then
        self.deconstructionPanel:RemoveItemFromCraft(bagId, slotIndex)
    end
end
function ZO_Smithing_Common:ClearSelections()
    if self.mode == SMITHING_MODE_REFINEMENT then
        self.refinementPanel:ClearSelections()
    elseif self.mode == SMITHING_MODE_IMPROVEMENT then
        self.improvementPanel:ClearSelections()
    elseif self.mode == SMITHING_MODE_DECONSTRUCTION then
        self.deconstructionPanel:ClearSelections()
    end
end
function ZO_Smithing_Common:DoesCurrentModeHaveSlotAnimations()
    return self.mode == SMITHING_MODE_IMPROVEMENT or self.mode == SMITHING_MODE_REFINEMENT or self.mode == SMITHING_MODE_DECONSTRUCTION
end
function ZO_Smithing_Common:IsCreating()
    return self.mode == SMITHING_MODE_CREATION
end
function ZO_Smithing_Common:IsImproving()
    return self.mode == SMITHING_MODE_IMPROVEMENT
end
function ZO_Smithing_Common:IsExtracting()
    return self.mode == SMITHING_MODE_REFINEMENT or self.mode == SMITHING_MODE_DECONSTRUCTION
end
function ZO_Smithing_Common:IsDeconstructing()
    return self.mode == SMITHING_MODE_DECONSTRUCTION
end
-- The following functions to update keybinds are called by both
-- gamepad/keyboard, but only affect the shared keybind strip on keyboard. Where
-- possible, refactor away from these functions and toward calling UpdateSharedKeybinds directly
-- on the keyboard side of things
function ZO_Smithing_Common:OnImprovementSlotChanged()
    KEYBIND_STRIP:UpdateKeybindButtonGroup(self.keybindStripDescriptor)
end
function ZO_Smithing_Common:OnExtractionSlotChanged()
    KEYBIND_STRIP:UpdateKeybindButtonGroup(self.keybindStripDescriptor)
end
function ZO_Smithing_Common:OnResearchSlotChanged()
    KEYBIND_STRIP:UpdateKeybindButtonGroup(self.keybindStripDescriptor)
end
    control.listControl = control:GetNamedChild("List")
    control.titleLabel = control:GetNamedChild("Title")
    control.extraInfoLabel = control:GetNamedChild("ExtraInfoLabel")
    --Center the selected label text in the whole control but limit its width such that it doesn't run into title text which is on the left side of it
    local selectedLabel = control:GetNamedChild("SelectedLabel")
    control.selectedLabel = selectedLabel
    control.titleLabel:SetHandler("OnTextChanged", function(titleLabel)
        local titleWidth = titleLabel:GetTextWidth()
        local totalWidth = control:GetWidth()
        local TITLE_SELECTED_LABEL_PADDING_X = 10
        local selectedLabelWidth = (totalWidth - titleWidth * 2) - TITLE_SELECTED_LABEL_PADDING_X * 2
        selectedLabel:SetWidth(selectedLabelWidth)
    end)
end
function ZO_Smithing_Common:GetMode()
     return self.mode
end
function ZO_Smithing_Common:UpdateQuestPins()
    -- To be overridden
end