comparison Import.lua @ 124:e31b02b24488

Updated for 8.0 pre-patch and BfA.
author yellowfive
date Tue, 17 Jul 2018 09:57:39 -0700
parents 6bbe64d587b4
children a0894ffebd15
comparison
equal deleted inserted replaced
123:7a6364917f86 124:e31b02b24488
40 local function renderImportWindow(container, fromOverwolf) 40 local function renderImportWindow(container, fromOverwolf)
41 41
42 local panelImport = Amr:RenderCoverChrome(container, 700, 450) 42 local panelImport = Amr:RenderCoverChrome(container, 700, 450)
43 43
44 local lbl = AceGUI:Create("AmrUiLabel") 44 local lbl = AceGUI:Create("AmrUiLabel")
45 panelImport:AddChild(lbl)
45 lbl:SetWidth(600) 46 lbl:SetWidth(600)
46 lbl:SetText(L.ImportHeader) 47 lbl:SetText(L.ImportHeader)
47 lbl:SetPoint("TOP", panelImport.content, "TOP", 0, -10) 48 lbl:SetPoint("TOP", panelImport.content, "TOP", 0, -10)
48 panelImport:AddChild(lbl)
49 49
50 _txtImport = AceGUI:Create("AmrUiTextarea") 50 _txtImport = AceGUI:Create("AmrUiTextarea")
51 _txtImport:SetWidth(600) 51 _txtImport:SetWidth(600)
52 _txtImport:SetHeight(300) 52 _txtImport:SetHeight(300)
53 _txtImport:SetPoint("TOP", lbl.frame, "BOTTOM", 0, -10)
54 _txtImport:SetFont(Amr.CreateFont("Regular", 12, Amr.Colors.Text)) 53 _txtImport:SetFont(Amr.CreateFont("Regular", 12, Amr.Colors.Text))
55 _txtImport:SetCallback("OnEnterPressed", onTextEnterPressed) 54 _txtImport:SetCallback("OnEnterPressed", onTextEnterPressed)
56 panelImport:AddChild(_txtImport) 55 panelImport:AddChild(_txtImport)
56 _txtImport:SetPoint("TOP", lbl.frame, "BOTTOM", 0, -10)
57 57
58 local btnImportOk = AceGUI:Create("AmrUiButton") 58 local btnImportOk = AceGUI:Create("AmrUiButton")
59 btnImportOk:SetText(L.ImportButtonOk) 59 btnImportOk:SetText(L.ImportButtonOk)
60 btnImportOk:SetBackgroundColor(Amr.Colors.Green) 60 btnImportOk:SetBackgroundColor(Amr.Colors.Green)
61 btnImportOk:SetFont(Amr.CreateFont("Bold", 16, Amr.Colors.White)) 61 btnImportOk:SetFont(Amr.CreateFont("Bold", 16, Amr.Colors.White))
62 btnImportOk:SetWidth(120) 62 btnImportOk:SetWidth(120)
63 btnImportOk:SetHeight(28) 63 btnImportOk:SetHeight(28)
64 btnImportOk:SetPoint("TOPLEFT", _txtImport.frame, "BOTTOMLEFT", 0, -10)
65 btnImportOk:SetCallback("OnClick", onImportOkClick) 64 btnImportOk:SetCallback("OnClick", onImportOkClick)
66 panelImport:AddChild(btnImportOk) 65 panelImport:AddChild(btnImportOk)
66 btnImportOk:SetPoint("TOPLEFT", _txtImport.frame, "BOTTOMLEFT", 0, -10)
67 67
68 local btnImportCancel = AceGUI:Create("AmrUiButton") 68 local btnImportCancel = AceGUI:Create("AmrUiButton")
69 btnImportCancel:SetText(L.ImportButtonCancel) 69 btnImportCancel:SetText(L.ImportButtonCancel)
70 btnImportCancel:SetBackgroundColor(Amr.Colors.Green) 70 btnImportCancel:SetBackgroundColor(Amr.Colors.Green)
71 btnImportCancel:SetFont(Amr.CreateFont("Bold", 16, Amr.Colors.White)) 71 btnImportCancel:SetFont(Amr.CreateFont("Bold", 16, Amr.Colors.White))
72 btnImportCancel:SetWidth(120) 72 btnImportCancel:SetWidth(120)
73 btnImportCancel:SetHeight(28) 73 btnImportCancel:SetHeight(28)
74 btnImportCancel:SetPoint("LEFT", btnImportOk.frame, "RIGHT", 20, 0)
75 btnImportCancel:SetCallback("OnClick", onImportCancelClick) 74 btnImportCancel:SetCallback("OnClick", onImportCancelClick)
76 panelImport:AddChild(btnImportCancel) 75 panelImport:AddChild(btnImportCancel)
76 btnImportCancel:SetPoint("LEFT", btnImportOk.frame, "RIGHT", 20, 0)
77 77
78 _lblError = AceGUI:Create("AmrUiLabel") 78 _lblError = AceGUI:Create("AmrUiLabel")
79 panelImport:AddChild(_lblError)
79 _lblError:SetWidth(600) 80 _lblError:SetWidth(600)
80 _lblError:SetFont(Amr.CreateFont("Bold", 14, Amr.Colors.Red)) 81 _lblError:SetFont(Amr.CreateFont("Bold", 14, Amr.Colors.Red))
81 _lblError:SetText("") 82 _lblError:SetText("")
82 _lblError:SetPoint("TOPLEFT", btnImportOk.frame, "BOTTOMLEFT", 0, -20) 83 _lblError:SetPoint("TOPLEFT", btnImportOk.frame, "BOTTOMLEFT", 0, -20)
83 panelImport:AddChild(_lblError)
84 84
85 if fromOverwolf then 85 if fromOverwolf then
86 -- show a cover preventing interaction until we receive data from overwolf 86 -- show a cover preventing interaction until we receive data from overwolf
87 _panelCover = AceGUI:Create("AmrUiPanel") 87 _panelCover = AceGUI:Create("AmrUiPanel")
88 _panelCover:SetLayout("None") 88 _panelCover:SetLayout("None")
89 _panelCover:EnableMouse(true) 89 _panelCover:EnableMouse(true)
90 _panelCover:SetBackgroundColor(Amr.Colors.Black, 0.75) 90 _panelCover:SetBackgroundColor(Amr.Colors.Black, 0.75)
91 panelImport:AddChild(_panelCover)
91 _panelCover:SetPoint("TOPLEFT", panelImport.frame, "TOPLEFT") 92 _panelCover:SetPoint("TOPLEFT", panelImport.frame, "TOPLEFT")
92 _panelCover:SetPoint("BOTTOMRIGHT", panelImport.frame, "BOTTOMRIGHT") 93 _panelCover:SetPoint("BOTTOMRIGHT", panelImport.frame, "BOTTOMRIGHT")
93 panelImport:AddChild(_panelCover)
94 94
95 local coverMsg = AceGUI:Create("AmrUiLabel") 95 local coverMsg = AceGUI:Create("AmrUiLabel")
96 _panelCover:AddChild(coverMsg)
96 coverMsg:SetWidth(500) 97 coverMsg:SetWidth(500)
97 coverMsg:SetFont(Amr.CreateFont("Regular", 16, Amr.Colors.TextTan)) 98 coverMsg:SetFont(Amr.CreateFont("Regular", 16, Amr.Colors.TextTan))
98 coverMsg:SetJustifyH("MIDDLE") 99 coverMsg:SetJustifyH("MIDDLE")
99 coverMsg:SetJustifyV("MIDDLE") 100 coverMsg:SetJustifyV("MIDDLE")
100 coverMsg:SetText(L.ImportOverwolfWait) 101 coverMsg:SetText(L.ImportOverwolfWait)
101 coverMsg:SetPoint("CENTER", _panelCover.frame, "CENTER", 0, 20) 102 coverMsg:SetPoint("CENTER", _panelCover.frame, "CENTER", 0, 20)
102 _panelCover:AddChild(coverMsg)
103 103
104 -- after adding, set cover to sit on top of everything 104 -- after adding, set cover to sit on top of everything
105 _panelCover:SetStrata("FULLSCREEN_DIALOG") 105 _panelCover:SetStrata("FULLSCREEN_DIALOG")
106 _panelCover:SetLevel(Amr.FrameLevels.Highest) 106 _panelCover:SetLevel(Amr.FrameLevels.Highest)
107 end 107 end
187 return L.ImportErrorLevel 187 return L.ImportErrorLevel
188 end 188 end
189 end 189 end
190 190
191 -- if we make it this far, the data is valid, so read item information 191 -- if we make it this far, the data is valid, so read item information
192 local specSlot = tonumber(parts[10]) 192 local specSlot = tonumber(parts[11])
193 193
194 local importData = {} 194 local importData = {}
195
196 local itemInfo = {}
197 local gemInfo = {}
198 local enchantInfo = {} 195 local enchantInfo = {}
199 196
200 local prevItemId = 0 197 local prevItemId = 0
201 local prevGemId = 0 198 local prevGemId = 0
202 local prevEnchantId = 0 199 local prevEnchantId = 0
203 local prevUpgradeId = 0 200 local prevUpgradeId = 0
204 local prevBonusId = 0 201 local prevBonusId = 0
205 local prevLevel = 0 202 local prevLevel = 0
203 local prevAzeriteId = 0
206 local digits = { 204 local digits = {
207 ["-"] = true, 205 ["-"] = true,
208 ["0"] = true, 206 ["0"] = true,
209 ["1"] = true, 207 ["1"] = true,
210 ["2"] = true, 208 ["2"] = true,
214 ["6"] = true, 212 ["6"] = true,
215 ["7"] = true, 213 ["7"] = true,
216 ["8"] = true, 214 ["8"] = true,
217 ["9"] = true, 215 ["9"] = true,
218 } 216 }
219 for i = 18, #parts do 217 for i = 16, #parts do
220 local itemString = parts[i] 218 local itemString = parts[i]
221 if itemString ~= "" and itemString ~= "_" then 219 if itemString ~= "" and itemString ~= "_" then
222 local tokens = {} 220 local tokens = {}
223 local bonusIds = {} 221 local bonusIds = {}
224 local relicBonusIds = {} 222 local azerite = {}
225 table.insert(relicBonusIds, {})
226 table.insert(relicBonusIds, {})
227 table.insert(relicBonusIds, {})
228 local hasRelics = false
229 local hasBonuses = false 223 local hasBonuses = false
224 local hasAzerites = false
230 local token = "" 225 local token = ""
231 local prop = "i" 226 local prop = "i"
232 local tokenComplete = false 227 local tokenComplete = false
233 for j = 1, string.len(itemString) do 228 for j = 1, string.len(itemString) do
234 local c = string.sub(itemString, j, j) 229 local c = string.sub(itemString, j, j)
256 val = val + prevGemId 251 val = val + prevGemId
257 prevGemId = val 252 prevGemId = val
258 elseif prop == "e" then 253 elseif prop == "e" then
259 val = val + prevEnchantId 254 val = val + prevEnchantId
260 prevEnchantId = val 255 prevEnchantId = val
256 elseif prop == "a" then
257 val = val + prevAzeriteId
258 prevAzeriteId = val
261 end 259 end
262 260
263 if prop == "b" then 261 if prop == "b" then
264 table.insert(bonusIds, val) 262 table.insert(bonusIds, val)
265 hasBonuses = true 263 hasBonuses = true
266 elseif prop == "m" then 264 elseif prop == "a" then
267 table.insert(relicBonusIds[1], val) 265 table.insert(azerite, val)
268 hasRelics = true 266 hasAzerites = true
269 elseif prop == "n" then
270 table.insert(relicBonusIds[2], val)
271 hasRelics = true
272 elseif prop == "o" then
273 table.insert(relicBonusIds[3], val)
274 hasRelics = true
275 else 267 else
276 tokens[prop] = val 268 tokens[prop] = val
277 end 269 end
278 270
279 token = "" 271 token = ""
297 obj.gemIds = {} 289 obj.gemIds = {}
298 table.insert(obj.gemIds, tokens["x"] or 0) 290 table.insert(obj.gemIds, tokens["x"] or 0)
299 table.insert(obj.gemIds, tokens["y"] or 0) 291 table.insert(obj.gemIds, tokens["y"] or 0)
300 table.insert(obj.gemIds, tokens["z"] or 0) 292 table.insert(obj.gemIds, tokens["z"] or 0)
301 table.insert(obj.gemIds, 0) 293 table.insert(obj.gemIds, 0)
302
303 if hasRelics then
304 obj.relicBonusIds = relicBonusIds
305 end
306 294
307 if hasBonuses then 295 if hasBonuses then
308 obj.bonusIds = bonusIds 296 obj.bonusIds = bonusIds
309 end 297 end
310 298
311 local itemObj = {} 299 if hasAzerites then
312 itemObj.id = obj.id 300 obj.azerite = azerite
313 itemInfo[obj.id] = itemObj 301 end
314
315 -- look for any socket color information, add to our extra data
316 if tokens["c"] then
317 itemObj.socketColors = {}
318 for j = 1, string.len(tokens["c"]) do
319 table.insert(itemObj.socketColors, tonumber(string.sub(tokens["c"], j, j)))
320 end
321 end
322
323 -- look for item ID duplicate info, deals with old SoO items
324 if tokens["d"] then
325 itemObj.duplicateId = tonumber(tokens["d"])
326 itemInfo[itemObj.duplicateId] = itemObj
327 end
328
329 end 302 end
330 end 303 end
331 304
332 -- now read any extra display information 305 -- now read any extra display information
333 parts = { strsplit("@", data1[3]) } 306 parts = { strsplit("@", data1[3]) }
334 for i = 1, #parts do 307 for i = 1, #parts do
335 local infoParts = { strsplit("\\", parts[i]) } 308 local infoParts = { strsplit("\\", parts[i]) }
336 309
337 if infoParts[1] == "g" then 310 if infoParts[1] == "e" then
338
339 local gemObj = {}
340 gemObj.enchantId = tonumber(infoParts[2])
341 gemObj.id = tonumber(infoParts[3])
342
343 local identicalGems = infoParts[4]
344 if string.len(identicalGems) > 0 then
345 gemObj.identicalGroup = {}
346 identicalGems = { strsplit(",", identicalGems) }
347 for j = 1, #identicalGems do
348 gemObj.identicalGroup[tonumber(identicalGems[j])] = true
349 end
350 end
351
352 gemObj.text = string.gsub(infoParts[5], "_(%a+)_", function(s) return L.StatsShort[s] end)
353 if infoParts[6] == nil or string.len(infoParts[6]) == 0 then
354 gemObj.identicalItemGroup = {[gemObj.id]=true}
355 else
356 local identicalIds = { strsplit(',', infoParts[6]) }
357 gemObj.identicalItemGroup = {}
358 for j = 1, #identicalIds do
359 gemObj.identicalItemGroup[tonumber(identicalIds[j])] = true
360 end
361 end
362
363 gemInfo[gemObj.id] = gemObj
364
365 elseif infoParts[1] == "e" then
366 311
367 local enchObj = {} 312 local enchObj = {}
368 enchObj.id = tonumber(infoParts[2]) 313 enchObj.id = tonumber(infoParts[2])
369 enchObj.itemId = tonumber(infoParts[3]) 314 enchObj.itemId = tonumber(infoParts[3])
370 enchObj.spellId = tonumber(infoParts[4]) 315 enchObj.spellId = tonumber(infoParts[4])
378 local kv = { strsplit("=", mats[j]) } 323 local kv = { strsplit("=", mats[j]) }
379 enchObj.materials[tonumber(kv[1])] = tonumber(kv[2]) 324 enchObj.materials[tonumber(kv[1])] = tonumber(kv[2])
380 end 325 end
381 end 326 end
382 327
383 enchantInfo[enchObj.id] = enchObj 328 enchantInfo[enchObj.id] = enchObj
384
385 end 329 end
386 end 330 end
387 331
388 if isTest then 332 if isTest then
389 print("spec " .. specSlot) 333 print("spec " .. specSlot)
395 print(link) 339 print(link)
396 if link == nil then 340 if link == nil then
397 print(blah) 341 print(blah)
398 print("bad item: " .. v.id) 342 print("bad item: " .. v.id)
399 end 343 end
400 end 344 end
401
402
403 else 345 else
404 -- we have succeeded, record the result 346 -- we have succeeded, record the result
405 Amr.db.char.GearSets[specSlot] = importData 347 Amr.db.char.GearSets[specSlot] = importData
406 Amr.db.char.ExtraItemData[specSlot] = itemInfo 348
407 Amr.db.char.ExtraGemData[specSlot] = gemInfo 349 for k,v in pairs(enchantInfo) do
408 Amr.db.char.ExtraEnchantData[specSlot] = enchantInfo 350 Amr.db.char.ExtraEnchantData[k] = v
351 end
409 352
410 -- also update shopping list after import 353 -- also update shopping list after import
411 Amr:UpdateShoppingData(currentPlayerData) 354 Amr:UpdateShoppingData(currentPlayerData)
412 end 355 end
413 end 356 end