Mercurial > wow > ouroloot
comparison core.lua @ 66:43913e02a1ef
Detect LFR loot as best we can, and bundle it into the same warning given for heroic loot formatted by name only. Less tedious method of bumping data revisions.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Fri, 27 Apr 2012 10:11:56 +0000 |
parents | 69fd720f853e |
children | c01875b275ca |
comparison
equal
deleted
inserted
replaced
65:69fd720f853e | 66:43913e02a1ef |
---|---|
54 - disposition offspec/gvault/shard; missing otherwise; can be set from | 54 - disposition offspec/gvault/shard; missing otherwise; can be set from |
55 the extratext field | 55 the extratext field |
56 - count e.g., "x3"; missing otherwise; can be set/removed from | 56 - count e.g., "x3"; missing otherwise; can be set/removed from |
57 extratext; triggers only for a stack of items, not "the boss | 57 extratext; triggers only for a stack of items, not "the boss |
58 dropped double axes today" | 58 dropped double axes today" |
59 - is_heroic true if item is heroic; missing otherwise | 59 - variant 1 = heroic item, 2 = LFR item; missing otherwise |
60 - cache_miss if GetItemInfo failed; SHOULD be missing (changes other fields) | 60 - cache_miss if GetItemInfo failed; SHOULD be missing (changes other fields) |
61 - bcast_from player's name if received rebroadcast from that player; | 61 - bcast_from player's name if received rebroadcast from that player; |
62 missing otherwise; can be deleted as a result of in-game | 62 missing otherwise; can be deleted as a result of in-game |
63 fiddling of loot data | 63 fiddling of loot data |
64 - extratext text in Note column, including disposition and rebroadcasting | 64 - extratext text in Note column, including disposition and rebroadcasting |
105 OuroLootSV_log = {} | 105 OuroLootSV_log = {} |
106 | 106 |
107 | 107 |
108 ------ Constants | 108 ------ Constants |
109 local option_defaults = { | 109 local option_defaults = { |
110 ['datarev'] = 17, -- cheating, this isn't actually an option | 110 ['datarev'] = 18, -- cheating, this isn't actually an option |
111 ['popup_on_join'] = true, | 111 ['popup_on_join'] = true, |
112 ['register_slashloot'] = true, | 112 ['register_slashloot'] = true, |
113 ['scroll_to_bottom'] = true, | 113 ['scroll_to_bottom'] = true, |
114 ['chatty_on_kill'] = false, | 114 ['chatty_on_kill'] = false, |
115 ['no_tracking_wipes'] = false, | 115 ['no_tracking_wipes'] = false, |
468 end,10,self) | 468 end,10,self) |
469 else | 469 else |
470 virgin = nil | 470 virgin = nil |
471 end | 471 end |
472 opts = OuroLootSV_opts | 472 opts = OuroLootSV_opts |
473 local stored_datarev = opts.datarev | 473 local stored_datarev = opts.datarev or 14 |
474 for opt,default in pairs(option_defaults) do | 474 for opt,default in pairs(option_defaults) do |
475 if opts[opt] == nil then | 475 if opts[opt] == nil then |
476 opts[opt] = default | 476 opts[opt] = default |
477 end | 477 end |
478 end | 478 end |
540 --OuroLootSV_hist = nil | 540 --OuroLootSV_hist = nil |
541 | 541 |
542 -- Handle changes to the stored data format in stages from oldest to newest. | 542 -- Handle changes to the stored data format in stages from oldest to newest. |
543 if OuroLootSV then | 543 if OuroLootSV then |
544 local dirty = false | 544 local dirty = false |
545 if stored_datarev == nil then | 545 local bumpers = {} |
546 self:Print("Transitioning saved data format to 15..."); dirty = true | 546 bumpers[14] = function() |
547 for i,e in ipairs(OuroLootSV) do | 547 for i,e in ipairs(OuroLootSV) do |
548 if e.bosskill then | 548 if e.bosskill then |
549 e.bossname, e.bosskill = e.bosskill, nil | 549 e.bossname, e.bosskill = e.bosskill, nil |
550 end | 550 end |
551 end | 551 end |
552 stored_datarev = 15 | 552 end |
553 end | 553 |
554 if stored_datarev == 15 then | 554 bumpers[15] = function() |
555 self:Print("Transitioning saved data format to 16..."); dirty = true | |
556 for i,e in ipairs(OuroLootSV) do | 555 for i,e in ipairs(OuroLootSV) do |
557 if e.kind == 'boss' then | 556 if e.kind == 'boss' then |
558 e.maxsize, e.raiderlist, e.raidersnap = 0, nil, {} | 557 e.maxsize, e.raiderlist, e.raidersnap = 0, nil, {} |
559 end | 558 end |
560 end | 559 end |
561 OuroLootSV.raiders = OuroLootSV.raiders or {} | 560 OuroLootSV.raiders = OuroLootSV.raiders or {} |
562 for name,r in pairs(OuroLootSV.raiders) do | 561 for name,r in pairs(OuroLootSV.raiders) do |
563 r.subgroup = 0 | 562 r.subgroup = 0 |
564 end | 563 end |
565 stored_datarev = 16 | 564 end |
566 end | 565 |
567 if stored_datarev == 16 then | 566 bumpers[16] = function() |
568 self:Print("Transitioning saved data format to 17..."); dirty = true | |
569 for i,e in ipairs(OuroLootSV) do | 567 for i,e in ipairs(OuroLootSV) do |
570 if e.kind == 'boss' then -- brown paper bag bugs | 568 if e.kind == 'boss' then -- brown paper bag bugs |
571 e.raidersnap = e.raidersnap or {} | 569 e.raidersnap = e.raidersnap or {} |
572 e.maxsize = e.maxsize or 0 | 570 e.maxsize = e.maxsize or 0 |
573 end | 571 end |
574 end | 572 end |
575 stored_datarev = 17 | 573 end |
574 | |
575 bumpers[17] = function() | |
576 for i,e in ipairs(OuroLootSV) do | |
577 if e.kind == 'loot' and e.is_heroic then | |
578 e.variant, e.is_heroic = 1, nil | |
579 -- Could try detecting any previous LFR loot here, but... gah | |
580 end | |
581 end | |
582 end | |
583 | |
584 --[===[ | |
585 local real = bumpers | |
586 bumpers = newproxy(true) | |
587 local mt = getmetatable(bumpers) | |
588 mt.__index = real | |
589 mt.__gc = function() print"whadda ya know, garbage collection works" end ]===] | |
590 | |
591 while stored_datarev < opts.datarev do | |
592 self:Printf("Transitioning saved data format to %d...", stored_datarev+1) | |
593 dirty = true | |
594 bumpers[stored_datarev]() | |
595 stored_datarev = stored_datarev + 1 | |
576 end | 596 end |
577 if dirty then self:Print("Saved data has been massaged into shape.") end | 597 if dirty then self:Print("Saved data has been massaged into shape.") end |
578 assert(stored_datarev==opts.datarev) | |
579 end | 598 end |
580 | 599 |
581 _init(self) | 600 _init(self) |
582 self.dprint('flow', "version strings:", revision_large, self.status_text) | 601 self.dprint('flow', "version strings:", revision_large, self.status_text) |
583 self.OnInitialize = nil | 602 self.OnInitialize = nil -- free up ALL the things! |
584 end | 603 end |
585 | 604 |
586 function addon:OnEnable() | 605 function addon:OnEnable() |
587 self:RegisterEvent("PLAYER_LOGOUT") | 606 self:RegisterEvent("PLAYER_LOGOUT") |
588 self:RegisterEvent("RAID_ROSTER_UPDATE") | 607 self:RegisterEvent("RAID_ROSTER_UPDATE") |
1026 itexture = itexture, | 1045 itexture = itexture, |
1027 disposition = (recipient == self.sharder) and 'shard' or nil, | 1046 disposition = (recipient == self.sharder) and 'shard' or nil, |
1028 count = (count and count ~= "") and count or nil, | 1047 count = (count and count ~= "") and count or nil, |
1029 bcast_from = from, | 1048 bcast_from = from, |
1030 extratext = extratext, | 1049 extratext = extratext, |
1031 is_heroic = self:is_heroic_item(ilink), | 1050 variant = self:is_variant_item(ilink), |
1032 } | 1051 } |
1033 if local_override then | 1052 if local_override then |
1034 -- player is adding loot by hand, don't wait for network cache timeouts | 1053 -- player is adding loot by hand, don't wait for network cache timeouts |
1035 -- keep this sync'd with prefer_local_loots above | 1054 -- keep this sync'd with prefer_local_loots above |
1036 if i.extratext == 'shard' | 1055 if i.extratext == 'shard' |
1430 lefts[i] = L | 1449 lefts[i] = L |
1431 end | 1450 end |
1432 tip.lefts = lefts | 1451 tip.lefts = lefts |
1433 return tip | 1452 return tip |
1434 end | 1453 end |
1435 function addon:is_heroic_item(item) -- returns true or *nil* | 1454 function addon:is_variant_item(item) -- returns number or *nil* |
1436 itt = itt or create() | 1455 itt = itt or create() |
1437 itt:SetOwner(UIParent,"ANCHOR_NONE") | 1456 itt:SetOwner(UIParent,"ANCHOR_NONE") |
1438 itt:ClearLines() | 1457 itt:ClearLines() |
1439 itt:SetHyperlink(item) | 1458 itt:SetHyperlink(item) |
1440 local t = itt.lefts[2]:GetText() | 1459 local t = itt.lefts[2]:GetText() |
1441 itt:Hide() | 1460 itt:Hide() |
1442 return (t == ITEM_HEROIC) or nil | 1461 return (t == ITEM_HEROIC and 1) |
1462 or (t == RAID_FINDER and 2) -- no ITEM_ for this, apparently | |
1463 or nil | |
1443 end | 1464 end |
1444 end | 1465 end |
1445 | 1466 |
1446 -- Called when first loading up, and then also when a 'clear' is being | 1467 -- Called when first loading up, and then also when a 'clear' is being |
1447 -- performed. If SV's are present then g_restore_p will be true. | 1468 -- performed. If SV's are present then g_restore_p will be true. |