Mercurial > wow > ouroloot
comparison core.lua @ 69:8442272a8418
- Make sure popup dialogs are on top of Ace3's widgets.
- Minor code reorganization. Safety hook for future boss-entry code.
- Avoid same bug from a couple revs ago when adding manual boss kills.
- Ask players about snapshot data when manually entering boss kills.
- Blizzard rearranged the button order in 3-entry popups some time ago
and I failed to adapt the code until now.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Fri, 11 May 2012 03:08:12 +0000 |
parents | 3bed6d51e077 |
children | cdee65c1bd8c |
comparison
equal
deleted
inserted
replaced
68:3bed6d51e077 | 69:8442272a8418 |
---|---|
38 - instance name of instance, including size and difficulty | 38 - instance name of instance, including size and difficulty |
39 - maxsize max raid size: 5/10/25, presumably also 15 and 40 could show | 39 - maxsize max raid size: 5/10/25, presumably also 15 and 40 could show |
40 up; can be 0 if we're outside an instance and the player | 40 up; can be 0 if we're outside an instance and the player |
41 inside has an older version | 41 inside has an older version |
42 - duration in seconds; may be missing (only present if local) | 42 - duration in seconds; may be missing (only present if local) |
43 - raidersnap copy of g_loot.raiders at the time of the boss event | 43 - raidersnap copy of g_loot.raiders at the time of the boss event; may be |
44 empty for manual snapshots the player didn't want included | |
45 (not necessarily an "error" if this is missing entirely) | |
44 | 46 |
45 Loot specific g_loot indices: | 47 Loot specific g_loot indices: |
46 - person recipient | 48 - person recipient |
47 - person_class class of recipient if available; may be missing; | 49 - person_class class of recipient if available; may be missing; |
48 will be classID-style (e.g., DEATHKNIGHT) | 50 will be classID-style (e.g., DEATHKNIGHT) |
105 OuroLootSV_log = {} | 107 OuroLootSV_log = {} |
106 | 108 |
107 | 109 |
108 ------ Constants | 110 ------ Constants |
109 local option_defaults = { | 111 local option_defaults = { |
110 ['datarev'] = 18, -- cheating, this isn't actually an option | 112 ['datarev'] = 19, -- cheating, this isn't actually an option |
111 ['popup_on_join'] = true, | 113 ['popup_on_join'] = true, |
112 ['register_slashloot'] = true, | 114 ['register_slashloot'] = true, |
113 ['scroll_to_bottom'] = true, | 115 ['scroll_to_bottom'] = true, |
114 ['chatty_on_kill'] = false, | 116 ['chatty_on_kill'] = false, |
115 ['no_tracking_wipes'] = false, | 117 ['no_tracking_wipes'] = false, |
614 -- Could try detecting any previous LFR loot here, but... gah | 616 -- Could try detecting any previous LFR loot here, but... gah |
615 end | 617 end |
616 end | 618 end |
617 end | 619 end |
618 | 620 |
621 bumpers[18] = bumpers[16] | |
622 -- In the not-very-many days between 16 and 19, I managed to break | |
623 -- the exact same data in the exact same way. At least they're | |
624 -- not actually running the same loop twice... probably... sigh. | |
625 | |
619 --[===[ | 626 --[===[ |
620 local real = bumpers | 627 local real = bumpers |
621 bumpers = newproxy(true) | 628 bumpers = newproxy(true) |
622 local mt = getmetatable(bumpers) | 629 local mt = getmetatable(bumpers) |
623 mt.__index = real | 630 mt.__index = real |
995 do | 1002 do |
996 local function maybe_trash_kill_entry() | 1003 local function maybe_trash_kill_entry() |
997 -- this is set on various boss interactions, so we've got a kill/wipe | 1004 -- this is set on various boss interactions, so we've got a kill/wipe |
998 -- entry already | 1005 -- entry already |
999 if addon.latest_instance then return end | 1006 if addon.latest_instance then return end |
1000 addon.latest_instance = instance_tag() | 1007 --addon.latest_instance = instance_tag() |
1001 local ss, max = addon:snapshot_raid() | 1008 local ss, max, inst = addon:snapshot_raid() |
1002 addon:_mark_boss_kill (addon._addLootEntry{ | 1009 addon.latest_instance = inst |
1010 addon:_mark_boss_kill (addon._addBossEntry{ | |
1003 kind='boss', reason='kill', bossname=[[trash]], | 1011 kind='boss', reason='kill', bossname=[[trash]], |
1004 instance=addon.latest_instance, duration=0, | 1012 instance=addon.latest_instance, duration=0, |
1005 raidersnap=ss, maxsize=max | 1013 raidersnap=ss, maxsize=max |
1006 }) | 1014 }) |
1007 end | 1015 end |
1202 else | 1210 else |
1203 return self:BuildMainDisplay() | 1211 return self:BuildMainDisplay() |
1204 end | 1212 end |
1205 | 1213 |
1206 elseif cmd == "fake" then -- maybe comment this out for real users | 1214 elseif cmd == "fake" then -- maybe comment this out for real users |
1207 self:_mark_boss_kill (self._addLootEntry{ | 1215 self:_mark_boss_kill (self._addBossEntry{ |
1208 kind='boss',reason='kill',bossname="Baron Steamroller",instance=instance_tag(),duration=0 | 1216 kind='boss',reason='kill',bossname="Baron Steamroller",duration=0 |
1209 }) | 1217 }) |
1210 self:CHAT_MSG_LOOT ('manual', my_name, 54797) | 1218 self:CHAT_MSG_LOOT ('manual', my_name, 54797) |
1211 if self.display then | 1219 if self.display then |
1212 self:redisplay() | 1220 self:redisplay() |
1213 end | 1221 end |
1579 addon.dprint('loot', "fixup found boss candidate", i, "duration", c.duration) | 1587 addon.dprint('loot', "fixup found boss candidate", i, "duration", c.duration) |
1580 break | 1588 break |
1581 end | 1589 end |
1582 end | 1590 end |
1583 end | 1591 end |
1584 bossi = addon._addLootEntry(boss) | 1592 bossi = addon._addBossEntry(boss) |
1585 -- addon. | 1593 -- addon. |
1586 bossi = addon._adjustBossOrder (bossi, g_boss_signpost) or bossi | 1594 bossi = addon._adjustBossOrder (bossi, g_boss_signpost) or bossi |
1587 g_boss_signpost = nil | 1595 g_boss_signpost = nil |
1588 addon.latest_instance = boss.instance | 1596 addon.latest_instance = boss.instance |
1589 addon.dprint('loot', "added boss entry", bossi) | 1597 addon.dprint('loot', "added boss entry", bossi) |
1655 self.loot_clean = index-1 | 1663 self.loot_clean = index-1 |
1656 end | 1664 end |
1657 local attempts = 1 | 1665 local attempts = 1 |
1658 local first | 1666 local first |
1659 | 1667 |
1668 -- Maybe redo this to only collapse *contiguous* wipes...? | |
1660 local i,d = 1,g_loot[1] | 1669 local i,d = 1,g_loot[1] |
1661 while d ~= e do | 1670 while d ~= e do |
1662 if d.bossname and | 1671 if d.bossname and |
1663 d.bossname == e.bossname and | 1672 d.bossname == e.bossname and |
1664 d.instance == e.instance and | 1673 d.instance == e.instance and |
1816 e.minute = m | 1825 e.minute = m |
1817 e.stamp = time_t --localuptime | 1826 e.stamp = time_t --localuptime |
1818 local index = #g_loot + 1 | 1827 local index = #g_loot + 1 |
1819 g_loot[index] = e | 1828 g_loot[index] = e |
1820 return index | 1829 return index |
1830 end | |
1831 | |
1832 -- Safety wrapper only. | |
1833 -- XXX Maybe pprint something here. | |
1834 function addon._addBossEntry (e) | |
1835 local ret = addon._addLootEntry(e) | |
1836 assert(e.kind=='boss') | |
1837 local needSize = e.maxsize == nil | |
1838 local needSnap = e.raidersnap == nil | |
1839 local needInst = e.instance == nil | |
1840 if needSize or needSnap then | |
1841 local ss, max, inst = addon:snapshot_raid() | |
1842 if needSize then e.maxsize = max end | |
1843 if needSnap then e.raidersnap = ss end | |
1844 if needInst then e.instance = inst end | |
1845 end | |
1846 return ret | |
1821 end | 1847 end |
1822 | 1848 |
1823 -- Problem: (1) boss kill happens, (2) fast looting happens, (3) boss | 1849 -- Problem: (1) boss kill happens, (2) fast looting happens, (3) boss |
1824 -- cache cleanup fires. Result: loot shows up before boss kill entry. | 1850 -- cache cleanup fires. Result: loot shows up before boss kill entry. |
1825 -- Solution: We need to shuffle the boss entry above any of the loot | 1851 -- Solution: We need to shuffle the boss entry above any of the loot |