Mercurial > wow > askmrrobot
comparison Shopping.lua @ 81:0515882856f1 v38
updated for 7.0
| author | yellowfive |
|---|---|
| date | Tue, 19 Jul 2016 10:05:32 -0700 |
| parents | cf2b6b9a8337 |
| children | 6bbe64d587b4 |
comparison
equal
deleted
inserted
replaced
| 80:8f235b016212 | 81:0515882856f1 |
|---|---|
| 4 | 4 |
| 5 local _frameShop | 5 local _frameShop |
| 6 local _panelContent | 6 local _panelContent |
| 7 local _cboPlayers | 7 local _cboPlayers |
| 8 local _selectedPlayer | 8 local _selectedPlayer |
| 9 | |
| 9 local _specs = { | 10 local _specs = { |
| 10 [1] = true, | 11 [1] = true, |
| 11 [2] = true | 12 [2] = true, |
| 13 [3] = true, | |
| 14 [4] = true, | |
| 12 } | 15 } |
| 16 | |
| 13 local _chk1 | 17 local _chk1 |
| 14 local _chk2 | 18 local _chk2 |
| 19 local _chk3 | |
| 20 local _chk4 | |
| 15 local _isAhOpen = false | 21 local _isAhOpen = false |
| 16 | 22 |
| 17 local function onShopFrameClose(widget) | 23 local function onShopFrameClose(widget) |
| 18 AceGUI:Release(widget) | 24 AceGUI:Release(widget) |
| 19 _frameShop = nil | 25 _frameShop = nil |
| 20 _cboPlayers = nil | 26 _cboPlayers = nil |
| 21 _chk1 = nil | 27 _chk1 = nil |
| 22 _chk2 = nil | 28 _chk2 = nil |
| 29 _chk3 = nil | |
| 30 _chk4 = nil | |
| 23 _panelContent = nil | 31 _panelContent = nil |
| 24 end | 32 end |
| 25 | 33 |
| 26 function Amr:HideShopWindow() | 34 function Amr:HideShopWindow() |
| 27 if not _frameShop then return end | 35 if not _frameShop then return end |
| 92 _chk2:SetPoint("LEFT", _chk1.frame, "RIGHT", 30, 0) | 100 _chk2:SetPoint("LEFT", _chk1.frame, "RIGHT", 30, 0) |
| 93 _chk2:SetUserData("spec", 2) | 101 _chk2:SetUserData("spec", 2) |
| 94 _chk2:SetCallback("OnClick", onSpecClick) | 102 _chk2:SetCallback("OnClick", onSpecClick) |
| 95 _frameShop:AddChild(_chk2) | 103 _frameShop:AddChild(_chk2) |
| 96 | 104 |
| 105 _chk3 = AceGUI:Create("AmrUiCheckBox") | |
| 106 _chk3:SetPoint("LEFT", _chk2.frame, "RIGHT", 30, 0) | |
| 107 _chk3:SetUserData("spec", 3) | |
| 108 _chk3:SetCallback("OnClick", onSpecClick) | |
| 109 _frameShop:AddChild(_chk3) | |
| 110 | |
| 111 _chk4 = AceGUI:Create("AmrUiCheckBox") | |
| 112 _chk4:SetPoint("LEFT", _chk3.frame, "RIGHT", 30, 0) | |
| 113 _chk4:SetUserData("spec", 4) | |
| 114 _chk4:SetCallback("OnClick", onSpecClick) | |
| 115 _frameShop:AddChild(_chk4) | |
| 116 | |
| 97 _panelContent = AceGUI:Create("AmrUiPanel") | 117 _panelContent = AceGUI:Create("AmrUiPanel") |
| 98 _panelContent:SetLayout("None") | 118 _panelContent:SetLayout("None") |
| 99 _panelContent:SetTransparent() | 119 _panelContent:SetTransparent() |
| 100 _panelContent:SetPoint("TOPLEFT", _chk1.frame, "BOTTOMLEFT", 0, -10) | 120 _panelContent:SetPoint("TOPLEFT", _chk1.frame, "BOTTOMLEFT", 0, -10) |
| 101 _panelContent:SetPoint("BOTTOMRIGHT", _frameShop.content, "BOTTOMRIGHT") | 121 _panelContent:SetPoint("BOTTOMRIGHT", _frameShop.content, "BOTTOMRIGHT") |
| 197 | 217 |
| 198 function Amr:RefreshShoppingUi() | 218 function Amr:RefreshShoppingUi() |
| 199 | 219 |
| 200 _chk1:SetVisible(false) | 220 _chk1:SetVisible(false) |
| 201 _chk2:SetVisible(false) | 221 _chk2:SetVisible(false) |
| 222 _chk3:SetVisible(false) | |
| 223 _chk4:SetVisible(false) | |
| 202 | 224 |
| 203 _chk1:SetChecked(false) | 225 _chk1:SetChecked(false) |
| 204 _chk2:SetChecked(false) | 226 _chk2:SetChecked(false) |
| 227 _chk3:SetChecked(false) | |
| 228 _chk4:SetChecked(false) | |
| 205 | 229 |
| 206 -- clear out any previous data | 230 -- clear out any previous data |
| 207 _panelContent:ReleaseChildren() | 231 _panelContent:ReleaseChildren() |
| 208 | 232 |
| 209 -- render required gems for the selected player | |
| 210 local data = Amr.db.global.Shopping[_selectedPlayer] | 233 local data = Amr.db.global.Shopping[_selectedPlayer] |
| 211 if not data then | 234 if not data then |
| 212 _panelContent:SetLayout("None") | 235 _panelContent:SetLayout("None") |
| 213 | 236 |
| 214 local lbl = AceGUI:Create("AmrUiLabel") | 237 local lbl = AceGUI:Create("AmrUiLabel") |
| 218 lbl:SetPoint("TOP", _panelContent.content, "TOP", 0, -30) | 241 lbl:SetPoint("TOP", _panelContent.content, "TOP", 0, -30) |
| 219 _panelContent:AddChild(lbl) | 242 _panelContent:AddChild(lbl) |
| 220 else | 243 else |
| 221 -- set labels on checkboxes | 244 -- set labels on checkboxes |
| 222 if data.specs[1] and data.specs[1] ~= 0 then | 245 if data.specs[1] and data.specs[1] ~= 0 then |
| 223 local id, name = GetSpecializationInfoByID(Amr.GetGameSpecId(data.specs[1])) | 246 _chk1:SetText(L.SpecsShort[data.specs[1]]) |
| 224 _chk1:SetText(name .. " " .. L.ShopSpecLabel) | |
| 225 _chk1:SetVisible(true) | 247 _chk1:SetVisible(true) |
| 226 _chk1:SetChecked(_specs[1]) | 248 _chk1:SetChecked(_specs[1]) |
| 227 end | 249 end |
| 228 | 250 |
| 229 if data.specs[2] and data.specs[2] ~= 0 then | 251 if data.specs[2] and data.specs[2] ~= 0 then |
| 230 local id, name = GetSpecializationInfoByID(Amr.GetGameSpecId(data.specs[2])) | 252 _chk2:SetText(L.SpecsShort[data.specs[2]]) |
| 231 _chk2:SetText(name .. " " .. L.ShopSpecLabel) | |
| 232 _chk2:SetVisible(true) | 253 _chk2:SetVisible(true) |
| 233 _chk2:SetChecked(_specs[2]) | 254 _chk2:SetChecked(_specs[2]) |
| 234 end | 255 end |
| 235 | 256 |
| 257 if data.specs[3] and data.specs[3] ~= 0 then | |
| 258 _chk3:SetText(L.SpecsShort[data.specs[3]]) | |
| 259 _chk3:SetVisible(true) | |
| 260 _chk3:SetChecked(_specs[3]) | |
| 261 end | |
| 262 | |
| 263 if data.specs[4] and data.spes[4] ~= 0 then | |
| 264 _chk4:SetText(L.SpecsShort[data.specs[4]]) | |
| 265 _chk4:SetVisible(true) | |
| 266 _chk4:SetChecked(_specs[4]) | |
| 267 end | |
| 268 | |
| 236 local spec = 0 | 269 local spec = 0 |
| 237 if not _specs[1] and not _specs[2] then | 270 if not _specs[1] and not _specs[2] and not _specs[3] and not _specs[4] then |
| 238 -- both unchecked, show nothing | 271 -- all unchecked, show nothing |
| 239 else | 272 else |
| 240 -- both is 0, otherwise the one that is selected | 273 -- both is 0, otherwise the one that is selected |
| 241 if not _specs[1] or not _specs[2] then | 274 if not _specs[1] or not _specs[2] then |
| 242 spec = _specs[1] and 1 or 2 | 275 spec = _specs[1] and 1 or 2 |
| 243 end | 276 end |
| 318 end | 351 end |
| 319 | 352 |
| 320 -- look at both gear sets and find stuff that a player needs to acquire to gem/enchant their gear | 353 -- look at both gear sets and find stuff that a player needs to acquire to gem/enchant their gear |
| 321 function Amr:UpdateShoppingData(player) | 354 function Amr:UpdateShoppingData(player) |
| 322 | 355 |
| 323 -- 0 is combination of both specs, 1 is primary, 2 is secondary | 356 -- TODO: re-enable shopping list when Legion comes out |
| 357 do return end | |
| 358 | |
| 359 -- 0 is combination of all specs | |
| 324 local required = { | 360 local required = { |
| 325 gems = { | 361 gems = { |
| 326 [0] = {}, | 362 [0] = {}, |
| 327 [1] = {}, | 363 [1] = {}, |
| 328 [2] = {} | 364 [2] = {}, |
| 365 [3] = {}, | |
| 366 [4] = {} | |
| 329 }, | 367 }, |
| 330 enchants = { | 368 enchants = { |
| 331 [0] = {}, | 369 [0] = {}, |
| 332 [1] = {}, | 370 [1] = {}, |
| 333 [2] = {} | 371 [2] = {}, |
| 372 [3] = {}, | |
| 373 [4] = {} | |
| 334 }, | 374 }, |
| 335 materials = { | 375 materials = { |
| 336 [0] = {}, | 376 [0] = {}, |
| 337 [1] = {}, | 377 [1] = {}, |
| 338 [2] = {} | 378 [2] = {}, |
| 379 [3] = {}, | |
| 380 [4] = {} | |
| 339 }, | 381 }, |
| 340 specs = player.Specs | 382 specs = player.Specs |
| 341 } | 383 } |
| 342 | 384 |
| 343 local enchantItemIdToId = {} | 385 local enchantItemIdToId = {} |
| 367 end | 409 end |
| 368 end | 410 end |
| 369 end | 411 end |
| 370 | 412 |
| 371 -- now subtract stuff the player already has, and generate a list of materials as well | 413 -- now subtract stuff the player already has, and generate a list of materials as well |
| 372 for spec = 0, 2 do | 414 for spec = 0, 4 do |
| 373 -- now check if the player has any of the gems or enchants in their inventory, and subtract those | 415 local specId = spec == 0 and 1 or GetSpecializationInfo(spec) |
| 374 for itemId, count in pairs(required.gems[spec]) do | 416 if specId then |
| 375 required.gems[spec][itemId] = math.max(count - getOwnedCount(itemId), 0) | 417 -- now check if the player has any of the gems or enchants in their inventory, and subtract those |
| 376 | 418 for itemId, count in pairs(required.gems[spec]) do |
| 377 if required.gems[spec][itemId] == 0 then | 419 required.gems[spec][itemId] = math.max(count - getOwnedCount(itemId), 0) |
| 378 required.gems[spec][itemId] = nil | 420 |
| 379 end | 421 if required.gems[spec][itemId] == 0 then |
| 380 end | 422 required.gems[spec][itemId] = nil |
| 381 | |
| 382 for itemId, count in pairs(required.enchants[spec]) do | |
| 383 -- look in both spec extra info cache | |
| 384 local e = enchantItemIdToId[itemId] | |
| 385 local enchInfo = nil | |
| 386 if Amr.db.char.ExtraEnchantData[1] then | |
| 387 enchInfo = Amr.db.char.ExtraEnchantData[1][e] | |
| 388 end | |
| 389 if not enchInfo then | |
| 390 if Amr.db.char.ExtraEnchantData[2] then | |
| 391 enchInfo = Amr.db.char.ExtraEnchantData[2][e] | |
| 392 end | 423 end |
| 393 end | 424 end |
| 394 | 425 |
| 395 if enchInfo then | 426 for itemId, count in pairs(required.enchants[spec]) do |
| 396 required.enchants[spec][itemId] = math.max(count - getOwnedCount(itemId), 0) | 427 -- look in both spec extra info cache |
| 397 | 428 local e = enchantItemIdToId[itemId] |
| 398 if required.enchants[spec][itemId] == 0 then | 429 local enchInfo = nil |
| 399 required.enchants[spec][itemId] = nil | 430 if Amr.db.char.ExtraEnchantData[1] then |
| 400 else | 431 enchInfo = Amr.db.char.ExtraEnchantData[1][e] |
| 401 -- count up required materials | 432 end |
| 402 if enchInfo.materials then | 433 if not enchInfo then |
| 403 local c = required.enchants[spec][itemId] | 434 if Amr.db.char.ExtraEnchantData[2] then |
| 404 for k, v in pairs(enchInfo.materials) do | 435 enchInfo = Amr.db.char.ExtraEnchantData[2][e] |
| 405 local prev = required.materials[spec][k] | 436 end |
| 406 required.materials[spec][k] = prev and prev + (v * c) or (v * c) | 437 end |
| 438 | |
| 439 if enchInfo then | |
| 440 required.enchants[spec][itemId] = math.max(count - getOwnedCount(itemId), 0) | |
| 441 | |
| 442 if required.enchants[spec][itemId] == 0 then | |
| 443 required.enchants[spec][itemId] = nil | |
| 444 else | |
| 445 -- count up required materials | |
| 446 if enchInfo.materials then | |
| 447 local c = required.enchants[spec][itemId] | |
| 448 for k, v in pairs(enchInfo.materials) do | |
| 449 local prev = required.materials[spec][k] | |
| 450 required.materials[spec][k] = prev and prev + (v * c) or (v * c) | |
| 451 end | |
| 407 end | 452 end |
| 408 end | 453 end |
| 409 end | 454 end |
| 410 end | 455 end |
| 411 end | 456 |
| 412 | 457 -- check if player has any of the materials already |
| 413 -- check if player has any of the materials already | 458 for itemId, count in pairs(required.materials[spec]) do |
| 414 for itemId, count in pairs(required.materials[spec]) do | 459 required.materials[spec][itemId] = math.max(count - getOwnedCount(itemId), 0) |
| 415 required.materials[spec][itemId] = math.max(count - getOwnedCount(itemId), 0) | 460 |
| 416 | 461 if required.materials[spec][itemId] == 0 then |
| 417 if required.materials[spec][itemId] == 0 then | 462 required.materials[spec][itemId] = nil |
| 418 required.materials[spec][itemId] = nil | 463 end |
| 419 end | 464 end |
| 420 end | 465 end |
| 421 end | 466 end |
| 422 | 467 |
| 423 Amr.db.global.Shopping[player.Name .. "-" .. player.Realm] = required | 468 Amr.db.global.Shopping[player.Name .. "-" .. player.Realm] = required |
| 424 end | 469 end |
| 425 | 470 |
| 471 -- TODO: re-enable shopping list with Legion | |
| 472 --[[ | |
| 426 Amr:AddEventHandler("AUCTION_HOUSE_SHOW", function() | 473 Amr:AddEventHandler("AUCTION_HOUSE_SHOW", function() |
| 427 _isAhOpen = true | 474 _isAhOpen = true |
| 428 if Amr.db.profile.options.shopAh then | 475 if Amr.db.profile.options.shopAh then |
| 429 Amr:ShowShopWindow() | 476 Amr:ShowShopWindow() |
| 430 end | 477 end |
| 434 _isAhOpen = false | 481 _isAhOpen = false |
| 435 if Amr.db.profile.options.shopAh then | 482 if Amr.db.profile.options.shopAh then |
| 436 Amr:HideShopWindow() | 483 Amr:HideShopWindow() |
| 437 end | 484 end |
| 438 end) | 485 end) |
| 486 ]] |
