comparison core.lua @ 135:feca7e0e1f89

Remove MoP transition code, be smarter about detecting groups.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Fri, 31 Aug 2012 23:15:40 -0400
parents 47b149f9a5d7
children 8345df517488
comparison
equal deleted inserted replaced
134:7817367a008e 135:feca7e0e1f89
111 OuroLootSV_hist = nil 111 OuroLootSV_hist = nil
112 OuroLootSV_log = {} 112 OuroLootSV_log = {}
113 113
114 114
115 ------ Constants 115 ------ Constants
116 local RAID_ROSTER_UPDATE_EVENT = 'GROUP_ROSTER_UPDATE'
117 --(select(4,GetBuildInfo()) >= 50000) and 'GROUP_ROSTER_UPDATE' or 'RAID_ROSTER_UPDATE'
118 local option_defaults = { profile = { 116 local option_defaults = { profile = {
119 --['datarev'] = 20, -- cheating, this isn't actually an option 117 --['datarev'] = 20, -- cheating, this isn't actually an option
120 ['popup_on_join'] = true, 118 ['popup_on_join'] = true,
121 ['register_slash_synonyms'] = false, 119 ['register_slash_synonyms'] = false,
122 ['slash_synonyms'] = '/ol,/oloot', 120 ['slash_synonyms'] = '/ol,/oloot',
390 local type, select, next, pairs, ipairs, tinsert, tremove, tostring, tonumber, wipe = 388 local type, select, next, pairs, ipairs, tinsert, tremove, tostring, tonumber, wipe =
391 type, select, next, pairs, ipairs, table.insert, table.remove, tostring, tonumber, table.wipe 389 type, select, next, pairs, ipairs, table.insert, table.remove, tostring, tonumber, table.wipe
392 390
393 local pprint, tabledump = addon.pprint, flib.tabledump 391 local pprint, tabledump = addon.pprint, flib.tabledump
394 local CopyTable = CopyTable 392 local CopyTable = CopyTable
395 local GetNumRaidMembers = GetNumGroupMembers or GetNumRaidMembers 393 local GetNumGroupMembers = GetNumGroupMembers
396 local IsInRaid = IsInRaid or (function() return GetNumRaidMembers() > 0 end) 394 local IsInRaid = IsInRaid
397 -- En masse forward decls of symbols defined inside local blocks 395 -- En masse forward decls of symbols defined inside local blocks
398 local _register_bossmod, makedate, create_new_cache, _init, _log, _do_loot_metas 396 local _register_bossmod, makedate, create_new_cache, _init, _log, _do_loot_metas
399 local _history_by_loot_id, _setup_unique_replace, _unavoidable_collision 397 local _history_by_loot_id, _setup_unique_replace, _unavoidable_collision
400 local _notify_about_change, _LFR_suppressing, _add_loot_disposition 398 local _notify_about_change, _LFR_suppressing, _add_loot_disposition
401 399
872 self.OnInitialize = nil -- free up ALL the things! 870 self.OnInitialize = nil -- free up ALL the things!
873 end 871 end
874 872
875 function addon:OnEnable() 873 function addon:OnEnable()
876 self:RegisterEvent("PLAYER_LOGOUT") 874 self:RegisterEvent("PLAYER_LOGOUT")
877 self:RegisterEvent(RAID_ROSTER_UPDATE_EVENT,"RAID_ROSTER_UPDATE") 875 self:RegisterEvent("GROUP_ROSTER_UPDATE")
878 876
879 -- This Print cribbed from Talented. I like the way jerry thinks: the 877 -- This Print cribbed from Talented. I like the way jerry thinks: the
880 -- first string argument can be a format spec for the remainder of the 878 -- first string argument can be a format spec for the remainder of the
881 -- arguments. AceConsole:Printf isn't used because we can't specify a 879 -- arguments. AceConsole:Printf isn't used because we can't specify a
882 -- prefix without jumping through ridonkulous hoops. 880 -- prefix without jumping through ridonkulous hoops.
1293 _G.OuroLootSV_hist = nil 1291 _G.OuroLootSV_hist = nil
1294 _G.OuroLootSV_log = nil 1292 _G.OuroLootSV_log = nil
1295 ReloadUI() 1293 ReloadUI()
1296 end 1294 end
1297 function addon:PLAYER_LOGOUT() 1295 function addon:PLAYER_LOGOUT()
1298 self:UnregisterEvent(RAID_ROSTER_UPDATE_EVENT) 1296 -- Can these still fire at the very last instant?
1297 self:UnregisterEvent("GROUP_ROSTER_UPDATE")
1299 self:UnregisterEvent("PLAYER_ENTERING_WORLD") 1298 self:UnregisterEvent("PLAYER_ENTERING_WORLD")
1300 1299
1301 local worth_saving = #g_loot > 0 or next(g_loot.raiders) 1300 local worth_saving = #g_loot > 0 or next(g_loot.raiders)
1302 if not worth_saving then for text in self:registered_textgen_iter() do 1301 if not worth_saving then for text in self:registered_textgen_iter() do
1303 worth_saving = worth_saving or g_loot.printed[text] > 0 1302 worth_saving = worth_saving or g_loot.printed[text] > 0
1335 UnitLevel, UnitInRaid, UnitIsVisible, GetGuildInfo, GetRaidRosterInfo = 1334 UnitLevel, UnitInRaid, UnitIsVisible, GetGuildInfo, GetRaidRosterInfo =
1336 IsInInstance, UnitIsConnected, UnitClass, UnitRace, UnitSex, 1335 IsInInstance, UnitIsConnected, UnitClass, UnitRace, UnitSex,
1337 UnitLevel, UnitInRaid, UnitIsVisible, GetGuildInfo, GetRaidRosterInfo 1336 UnitLevel, UnitInRaid, UnitIsVisible, GetGuildInfo, GetRaidRosterInfo
1338 local time, difftime = time, difftime 1337 local time, difftime = time, difftime
1339 local R_ACTIVE, R_OFFLINE, R_LEFT = 'online', 'offline', 'no_longer' 1338 local R_ACTIVE, R_OFFLINE, R_LEFT = 'online', 'offline', 'no_longer'
1339 local was_in_raid
1340 1340
1341 local lastevent, now = 0, 0 1341 local lastevent, now = 0, 0
1342 local redo_count = 0 1342 local redo_count = 0
1343 local redo, timer_handle, my_realm 1343 local redo, timer_handle, my_realm
1344 1344
1369 1369
1370 if redo then 1370 if redo then
1371 redo_count = redo_count + 1 1371 redo_count = redo_count + 1
1372 end 1372 end
1373 redo = false 1373 redo = false
1374 for i = 1, GetNumRaidMembers() do 1374 for i = 1, GetNumGroupMembers() do
1375 local unit = 'raid'..i 1375 local unit = 'raid'..i
1376 -- We grab a bunch of return values here, but only pay attention to 1376 -- We grab a bunch of return values here, but only pay attention to
1377 -- them under specific circumstances. Try to use as many of these 1377 -- them under specific circumstances. Try to use as many of these
1378 -- values as possible rather than multiple Unit* calls. 1378 -- values as possible rather than multiple Unit* calls.
1379 local fname, connected, subgroup, level, class, _ 1379 local fname, connected, subgroup, level, class, _
1414 redo = redo or r.needinfo 1414 redo = redo or r.needinfo
1415 end 1415 end
1416 end 1416 end
1417 if redo then -- XXX test redo_count here and eventually give up? 1417 if redo then -- XXX test redo_count here and eventually give up?
1418 if not timer_handle then 1418 if not timer_handle then
1419 timer_handle = self:ScheduleRepeatingTimer("RAID_ROSTER_UPDATE", 60) 1419 timer_handle = self:ScheduleRepeatingTimer("GROUP_ROSTER_UPDATE", 60)
1420 end 1420 end
1421 else 1421 else
1422 redo_count = 0 1422 redo_count = 0
1423 if timer_handle then 1423 if timer_handle then
1424 self:CancelTimer(timer_handle) 1424 self:CancelTimer(timer_handle)
1425 timer_handle = nil 1425 timer_handle = nil
1426 end 1426 end
1427 end 1427 end
1428 end 1428 end
1429 1429
1430 function addon:RAID_ROSTER_UPDATE (event) 1430 function addon:GROUP_ROSTER_UPDATE (event)
1431 if GetNumRaidMembers() == 0 then 1431 if not IsInRaid() then
1432 -- Leaving a raid group. 1432 if was_in_raid then
1433 -- Because of PLAYER_ENTERING_WORLD, this code also executes on load 1433 -- Leaving a raid group.
1434 -- screens while soloing and in regular groups. Take care. 1434 self.dprint('flow', "no longer in raid group")
1435 self.dprint('flow', "GetNumRaidMembers == 0") 1435 was_in_raid = false
1436 if self.enabled and not self.debug.notraid then 1436 if self.enabled and not self.debug.notraid then
1437 self.dprint('flow', "enabled, leaving raid") 1437 self.dprint('flow', "enabled, leaving raid")
1438 self.popped = nil 1438 self.popped = nil
1439 self:Deactivate() 1439 self:Deactivate()
1440 self:CheckRoster(--[[leaving raid]]true) 1440 self:CheckRoster(--[[leaving raid]]true)
1441 end 1441 end
1442 _LFR_suppressing = nil 1442 _LFR_suppressing = nil
1443 end
1444 -- Flow for 5-player groups goes right to here.
1443 return 1445 return
1444 end 1446 end
1445 1447
1446 local inside,whatkind = IsInInstance() 1448 local inside,whatkind = IsInInstance()
1447 if inside and (whatkind == "pvp" or whatkind == "arena") then 1449 if inside and (whatkind == "pvp" or whatkind == "arena") then
1448 self.dprint('flow', "got RRU event but in pvp zone, bailing") 1450 self.dprint('flow', "got RRU event but in pvp zone, bailing")
1449 return 1451 return
1450 end 1452 end
1451 1453
1452 local docheck = self.enabled 1454 local docheck = self.enabled
1453 if event == "Activate" then 1455 if event == "GROUP_ROSTER_UPDATE" then
1454 -- dispatched from Activate
1455 if opts.history_suppress_LFR
1456 and GetLFGMode(LE_LFG_CATEGORY_RF)
1457 then
1458 _LFR_suppressing = true
1459 end
1460 my_realm = self.history.realm
1461 _register_bossmod(self)
1462 self:RegisterEvent("CHAT_MSG_LOOT")
1463 docheck = true
1464 elseif event == RAID_ROSTER_UPDATE_EVENT then
1465 -- hot code path, be careful 1456 -- hot code path, be careful
1466 1457
1467 -- event registration from onload, joined a raid, maybe show popup 1458 -- event registration from onload, joined a raid, maybe show popup
1468 self.dprint('flow', "RRU check:", self.popped, opts.popup_on_join) 1459 self.dprint('flow', "RRU check:", self.popped, opts.popup_on_join)
1469 if (not self.popped) and opts.popup_on_join then 1460 if (not self.popped) and opts.popup_on_join then
1470 self.popped = StaticPopup_Show "OUROL_REMIND" 1461 self.popped = StaticPopup_Show "OUROL_REMIND"
1471 self.popped.data = self 1462 self.popped.data = self
1472 return 1463 return
1473 end 1464 end
1474 end 1465 elseif event == "Activate" then
1466 -- dispatched from Activate
1467 if opts.history_suppress_LFR
1468 and GetLFGMode(LE_LFG_CATEGORY_RF)
1469 then
1470 _LFR_suppressing = true
1471 end
1472 my_realm = self.history.realm
1473 _register_bossmod(self)
1474 self:RegisterEvent("CHAT_MSG_LOOT")
1475 was_in_raid = true
1476 docheck = true
1477 end
1478
1475 -- Throttle the checks fired by common events. 1479 -- Throttle the checks fired by common events.
1476 if docheck and not InCombatLockdown() then 1480 if docheck and not InCombatLockdown() then
1477 now = time() 1481 now = time()
1478 if difftime(now,lastevent) > 45 then 1482 if difftime(now,lastevent) > 45 then
1479 lastevent = now 1483 lastevent = now
1942 1946
1943 ------ On/off 1947 ------ On/off
1944 -- Both of these need to be (effectively) idempotent. 1948 -- Both of these need to be (effectively) idempotent.
1945 function addon:Activate (opt_threshold, opt_bcast_only) 1949 function addon:Activate (opt_threshold, opt_bcast_only)
1946 self.dprint('flow', ":Activate is running") 1950 self.dprint('flow', ":Activate is running")
1947 self:RegisterEvent(RAID_ROSTER_UPDATE_EVENT,"RAID_ROSTER_UPDATE") 1951 self:RegisterEvent("GROUP_ROSTER_UPDATE")
1948 self:RegisterEvent("PLAYER_ENTERING_WORLD", 1952 self:RegisterEvent("PLAYER_ENTERING_WORLD",
1949 function() self:ScheduleTimer("RAID_ROSTER_UPDATE", 5, "PLAYER_ENTERING_WORLD") end) 1953 function() self:ScheduleTimer("GROUP_ROSTER_UPDATE", 5, "PLAYER_ENTERING_WORLD") end)
1950 self.popped = true 1954 self.popped = true
1951 if self.DO_ITEMID_FIX then 1955 if self.DO_ITEMID_FIX then
1952 self.DO_ITEMID_FIX = nil 1956 self.DO_ITEMID_FIX = nil
1953 self:do_item_cache_fixup(--[[force_silent=]]not self.author_debug) 1957 self:do_item_cache_fixup(--[[force_silent=]]not self.author_debug)
1954 self.loot_clean = nil 1958 self.loot_clean = nil
1955 end 1959 end
1956 if IsInRaid() then 1960 if IsInRaid() then
1957 self.dprint('flow', ">:Activate calling RRU") 1961 self.dprint('flow', ">:Activate calling RRU")
1958 self:RAID_ROSTER_UPDATE("Activate") 1962 self:GROUP_ROSTER_UPDATE("Activate")
1959 elseif self.debug.notraid then 1963 elseif self.debug.notraid then
1960 self.dprint('flow', ">:(notraid) Activate registering loot and bossmods") 1964 self.dprint('flow', ">:(notraid) Activate registering loot and bossmods")
1961 self:RegisterEvent("CHAT_MSG_LOOT") 1965 self:RegisterEvent("CHAT_MSG_LOOT")
1962 _register_bossmod(self) 1966 _register_bossmod(self)
1963 elseif g_restore_p then 1967 elseif g_restore_p then
1996 -- Note: running '/ouroloot off' will also avoid the popup reminder when 2000 -- Note: running '/ouroloot off' will also avoid the popup reminder when
1997 -- joining a raid, but will not change the saved option setting. 2001 -- joining a raid, but will not change the saved option setting.
1998 function addon:Deactivate() 2002 function addon:Deactivate()
1999 self.enabled = false 2003 self.enabled = false
2000 self.rebroadcast = false 2004 self.rebroadcast = false
2001 self:UnregisterEvent(RAID_ROSTER_UPDATE_EVENT) 2005 self:UnregisterEvent("GROUP_ROSTER_UPDATE")
2002 self:UnregisterEvent("PLAYER_ENTERING_WORLD") 2006 self:UnregisterEvent("PLAYER_ENTERING_WORLD")
2003 self:UnregisterEvent("CHAT_MSG_LOOT") 2007 self:UnregisterEvent("CHAT_MSG_LOOT")
2004 _LFR_suppressing = nil 2008 _LFR_suppressing = nil
2005 -- Passing .raiders directly doesn't work with a proxy (again, WTB Lua 2009 -- Passing .raiders directly doesn't work with a proxy (again, WTB Lua
2006 -- 5.2 and its __pairs iterators). Give it the same structure as a boss 2010 -- 5.2 and its __pairs iterators). Give it the same structure as a boss