Back to Home

ESO Lua File v101036

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
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, craftingMode)
    craftingMode = craftingMode or GetCraftingInteractionMode()
    return craftingMode == CRAFTING_INTERACTION_MODE_STANDARD_STATION and IsSmithingCraftingType(craftingType)
end
    craftingMode = craftingMode or GetCraftingInteractionMode()
    return craftingMode == CRAFTING_INTERACTION_MODE_UNIVERSAL_DECONSTRUCTION
end
--
-- ZO_Smithing_Common
--
ZO_Smithing_Common = ZO_InitializingObject:Subclass()
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
local g_craftingTypeModeTutorialMap =
{
    [CRAFTING_TYPE_BLACKSMITHING] =
    {
        [SMITHING_MODE_REFINEMENT] = TUTORIAL_TRIGGER_BLACKSMITHING_REFINEMENT_OPENED,
        [SMITHING_MODE_CREATION] = TUTORIAL_TRIGGER_BLACKSMITHING_CREATION_OPENED,
        [SMITHING_MODE_DECONSTRUCTION] = TUTORIAL_TRIGGER_BLACKSMITHING_DECONSTRUCTION_OPENED,
        [SMITHING_MODE_IMPROVEMENT] = TUTORIAL_TRIGGER_BLACKSMITHING_IMPROVEMENT_OPENED,
        [SMITHING_MODE_RESEARCH] = TUTORIAL_TRIGGER_BLACKSMITHING_RESEARCH_OPENED,
    },
    [CRAFTING_TYPE_CLOTHIER] =
    {
        [SMITHING_MODE_REFINEMENT] = TUTORIAL_TRIGGER_CLOTHIER_REFINEMENT_OPENED,
        [SMITHING_MODE_CREATION] = TUTORIAL_TRIGGER_CLOTHIER_CREATION_OPENED,
        [SMITHING_MODE_DECONSTRUCTION] = TUTORIAL_TRIGGER_CLOTHIER_DECONSTRUCTION_OPENED,
        [SMITHING_MODE_IMPROVEMENT] = TUTORIAL_TRIGGER_CLOTHIER_IMPROVEMENT_OPENED,
        [SMITHING_MODE_RESEARCH] = TUTORIAL_TRIGGER_CLOTHIER_RESEARCH_OPENED,
    },
    [CRAFTING_TYPE_JEWELRYCRAFTING] =
    {
        [SMITHING_MODE_REFINEMENT] = TUTORIAL_TRIGGER_JEWELRYCRAFTING_REFINEMENT_OPENED,
        [SMITHING_MODE_CREATION] = TUTORIAL_TRIGGER_JEWELRYCRAFTING_CREATION_OPENED,
        [SMITHING_MODE_DECONSTRUCTION] = TUTORIAL_TRIGGER_JEWELRYCRAFTING_DECONSTRUCTION_OPENED,
        [SMITHING_MODE_IMPROVEMENT] = TUTORIAL_TRIGGER_JEWELRYCRAFTING_IMPROVEMENT_OPENED,
        [SMITHING_MODE_RESEARCH] = TUTORIAL_TRIGGER_JEWELRYCRAFTING_RESEARCH_OPENED,
    },
    [CRAFTING_TYPE_WOODWORKING] =
    {
        [SMITHING_MODE_REFINEMENT] = TUTORIAL_TRIGGER_WOODWORKING_REFINEMENT_OPENED,
        [SMITHING_MODE_CREATION] = TUTORIAL_TRIGGER_WOODWORKING_CREATION_OPENED,
        [SMITHING_MODE_DECONSTRUCTION] = TUTORIAL_TRIGGER_WOODWORKING_DECONSTRUCTION_OPENED,
        [SMITHING_MODE_IMPROVEMENT] = TUTORIAL_TRIGGER_WOODWORKING_IMPROVEMENT_OPENED,
        [SMITHING_MODE_RESEARCH] = TUTORIAL_TRIGGER_WOODWORKING_RESEARCH_OPENED,
    },
}
function ZO_Smithing_Common:GetTutorialTrigger(craftingType, mode)
    local modeTriggerMap = g_craftingTypeModeTutorialMap[craftingType]
    return modeTriggerMap and modeTriggerMap[mode] or nil
end
function ZO_Smithing_Common:DirtyAllPanels()
    if self.creationPanel then
        self.creationPanel:DirtyAllLists()
    end
    if self.improvementPanel then
        self.improvementPanel:HandleDirtyEvent()
    end
    if self.researchPanel then
        self.researchPanel:HandleDirtyEvent()
    end
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()
    -- Can be overridden
end