Mercurial > wow > wowdb-profiler
comparison Main.lua @ 246:f506c09d75a9 5.2.0-5
Improved detection of LFR and World Boss IDs - take kills from party/raid members and pets into consideration instead of simply relying on the killed NPC being the player's target.
| author | James D. Callahan III <jcallahan@curse.com> |
|---|---|
| date | Mon, 11 Mar 2013 12:34:58 -0500 |
| parents | 9b1faccbccc8 |
| children | 4cb26edfd905 |
comparison
equal
deleted
inserted
replaced
| 245:9b1faccbccc8 | 246:f506c09d75a9 |
|---|---|
| 1 ----------------------------------------------------------------------- | 1 -- LUA API ------------------------------------------------------------ |
| 2 -- Upvalued Lua API. | 2 |
| 3 ----------------------------------------------------------------------- | |
| 4 local _G = getfenv(0) | 3 local _G = getfenv(0) |
| 5 | 4 |
| 6 local pairs = _G.pairs | 5 local pairs = _G.pairs |
| 7 local tonumber = _G.tonumber | 6 local tonumber = _G.tonumber |
| 8 | 7 |
| 11 local table = _G.table | 10 local table = _G.table |
| 12 | 11 |
| 13 local select = _G.select | 12 local select = _G.select |
| 14 | 13 |
| 15 | 14 |
| 16 ----------------------------------------------------------------------- | 15 -- ADDON NAMESPACE ---------------------------------------------------- |
| 17 -- AddOn namespace. | 16 |
| 18 ----------------------------------------------------------------------- | |
| 19 local ADDON_NAME, private = ... | 17 local ADDON_NAME, private = ... |
| 20 | 18 |
| 21 local LibStub = _G.LibStub | 19 local LibStub = _G.LibStub |
| 22 local WDP = LibStub("AceAddon-3.0"):NewAddon(ADDON_NAME, "AceEvent-3.0", "AceTimer-3.0") | 20 local WDP = LibStub("AceAddon-3.0"):NewAddon(ADDON_NAME, "AceEvent-3.0", "AceTimer-3.0") |
| 23 | 21 |
| 27 | 25 |
| 28 local DatamineTT = _G.CreateFrame("GameTooltip", "WDPDatamineTT", _G.UIParent, "GameTooltipTemplate") | 26 local DatamineTT = _G.CreateFrame("GameTooltip", "WDPDatamineTT", _G.UIParent, "GameTooltipTemplate") |
| 29 DatamineTT:SetOwner(_G.WorldFrame, "ANCHOR_NONE") | 27 DatamineTT:SetOwner(_G.WorldFrame, "ANCHOR_NONE") |
| 30 | 28 |
| 31 | 29 |
| 32 ----------------------------------------------------------------------- | 30 -- CONSTANTS ---------------------------------------------------------- |
| 33 -- Local constants. | 31 |
| 34 ----------------------------------------------------------------------- | 32 local AF = private.ACTION_TYPE_FLAGS |
| 33 local CLIENT_LOCALE = _G.GetLocale() | |
| 35 local DB_VERSION = 16 | 34 local DB_VERSION = 16 |
| 36 local DEBUGGING = true | 35 local DEBUGGING = false |
| 37 local EVENT_DEBUG = false | 36 local EVENT_DEBUG = false |
| 38 | 37 local OBJECT_ID_ANVIL = 192628 |
| 38 local OBJECT_ID_FORGE = 1685 | |
| 39 local PLAYER_CLASS = _G.select(2, _G.UnitClass("player")) | |
| 40 local PLAYER_FACTION = _G.UnitFactionGroup("player") | |
| 41 local PLAYER_GUID = _G.UnitGUID("player") | |
| 42 local PLAYER_NAME = _G.UnitName("player") | |
| 43 local PLAYER_RACE = _G.select(2, _G.UnitRace("player")) | |
| 44 | |
| 45 local ALLOWED_LOCALES = { | |
| 46 enUS = true, | |
| 47 enGB = true, | |
| 48 } | |
| 39 | 49 |
| 40 local DATABASE_DEFAULTS = { | 50 local DATABASE_DEFAULTS = { |
| 41 char = {}, | 51 char = {}, |
| 42 global = { | 52 global = { |
| 43 items = {}, | 53 items = {}, |
| 46 quests = {}, | 56 quests = {}, |
| 47 spells = {}, | 57 spells = {}, |
| 48 zones = {}, | 58 zones = {}, |
| 49 } | 59 } |
| 50 } | 60 } |
| 51 | |
| 52 | 61 |
| 53 local EVENT_MAPPING = { | 62 local EVENT_MAPPING = { |
| 54 AUCTION_HOUSE_SHOW = true, | 63 AUCTION_HOUSE_SHOW = true, |
| 55 BANKFRAME_OPENED = true, | 64 BANKFRAME_OPENED = true, |
| 56 BATTLEFIELDS_SHOW = true, | 65 BATTLEFIELDS_SHOW = true, |
| 63 COMBAT_LOG_EVENT_UNFILTERED = true, | 72 COMBAT_LOG_EVENT_UNFILTERED = true, |
| 64 COMBAT_TEXT_UPDATE = true, | 73 COMBAT_TEXT_UPDATE = true, |
| 65 CURSOR_UPDATE = true, | 74 CURSOR_UPDATE = true, |
| 66 FORGE_MASTER_OPENED = true, | 75 FORGE_MASTER_OPENED = true, |
| 67 GOSSIP_SHOW = true, | 76 GOSSIP_SHOW = true, |
| 77 GROUP_ROSTER_CHANGE = true, | |
| 68 GUILDBANKFRAME_OPENED = true, | 78 GUILDBANKFRAME_OPENED = true, |
| 69 ITEM_TEXT_BEGIN = true, | 79 ITEM_TEXT_BEGIN = true, |
| 70 ITEM_UPGRADE_MASTER_OPENED = true, | 80 ITEM_UPGRADE_MASTER_OPENED = true, |
| 71 LOOT_CLOSED = true, | 81 LOOT_CLOSED = true, |
| 72 LOOT_OPENED = true, | 82 LOOT_OPENED = true, |
| 87 TAXIMAP_OPENED = true, | 97 TAXIMAP_OPENED = true, |
| 88 TRADE_SKILL_SHOW = true, | 98 TRADE_SKILL_SHOW = true, |
| 89 TRAINER_CLOSED = true, | 99 TRAINER_CLOSED = true, |
| 90 TRAINER_SHOW = true, | 100 TRAINER_SHOW = true, |
| 91 TRANSMOGRIFY_OPEN = true, | 101 TRANSMOGRIFY_OPEN = true, |
| 102 UNIT_PET = true, | |
| 92 UNIT_QUEST_LOG_CHANGED = true, | 103 UNIT_QUEST_LOG_CHANGED = true, |
| 93 UNIT_SPELLCAST_FAILED = "HandleSpellFailure", | 104 UNIT_SPELLCAST_FAILED = "HandleSpellFailure", |
| 94 UNIT_SPELLCAST_FAILED_QUIET = "HandleSpellFailure", | 105 UNIT_SPELLCAST_FAILED_QUIET = "HandleSpellFailure", |
| 95 UNIT_SPELLCAST_INTERRUPTED = "HandleSpellFailure", | 106 UNIT_SPELLCAST_INTERRUPTED = "HandleSpellFailure", |
| 96 UNIT_SPELLCAST_SENT = true, | 107 UNIT_SPELLCAST_SENT = true, |
| 100 ZONE_CHANGED_INDOORS = "SetCurrentAreaID", | 111 ZONE_CHANGED_INDOORS = "SetCurrentAreaID", |
| 101 ZONE_CHANGED_NEW_AREA = "SetCurrentAreaID", | 112 ZONE_CHANGED_NEW_AREA = "SetCurrentAreaID", |
| 102 } | 113 } |
| 103 | 114 |
| 104 | 115 |
| 105 local OBJECT_ID_ANVIL = 192628 | 116 -- VARIABLES ---------------------------------------------------------- |
| 106 local OBJECT_ID_FORGE = 1685 | 117 |
| 107 | |
| 108 | |
| 109 local AF = private.ACTION_TYPE_FLAGS | |
| 110 | |
| 111 | |
| 112 local PLAYER_CLASS = _G.select(2, _G.UnitClass("player")) | |
| 113 local PLAYER_FACTION = _G.UnitFactionGroup("player") | |
| 114 local PLAYER_GUID = _G.UnitGUID("player") | |
| 115 local PLAYER_NAME = _G.UnitName("player") | |
| 116 local PLAYER_RACE = _G.select(2, _G.UnitRace("player")) | |
| 117 | |
| 118 | |
| 119 local CLIENT_LOCALE = _G.GetLocale() | |
| 120 | |
| 121 | |
| 122 local ALLOWED_LOCALES = { | |
| 123 enUS = true, | |
| 124 enGB = true, | |
| 125 } | |
| 126 | |
| 127 | |
| 128 ----------------------------------------------------------------------- | |
| 129 -- Local variables. | |
| 130 ----------------------------------------------------------------------- | |
| 131 local anvil_spell_ids = {} | 118 local anvil_spell_ids = {} |
| 132 local currently_drunk | 119 local currently_drunk |
| 133 local char_db | 120 local char_db |
| 134 local global_db | 121 local global_db |
| 122 local group_member_uids = {} | |
| 123 local group_owner_guids_to_pet_guids = {} | |
| 124 local group_pet_guids = {} | |
| 135 local item_process_timer_handle | 125 local item_process_timer_handle |
| 136 local faction_standings = {} | 126 local faction_standings = {} |
| 137 local forge_spell_ids = {} | 127 local forge_spell_ids = {} |
| 138 local languages_known = {} | 128 local languages_known = {} |
| 139 local name_to_id_map = {} | 129 local name_to_id_map = {} |
| 141 local target_location_timer_handle | 131 local target_location_timer_handle |
| 142 local current_target_id | 132 local current_target_id |
| 143 local current_area_id | 133 local current_area_id |
| 144 local current_loot | 134 local current_loot |
| 145 | 135 |
| 146 ----------------------------------------------------------------------- | |
| 147 -- Data for our current action. Including possible values as a reference. | 136 -- Data for our current action. Including possible values as a reference. |
| 148 ----------------------------------------------------------------------- | |
| 149 local current_action = { | 137 local current_action = { |
| 150 identifier = nil, | 138 identifier = nil, |
| 151 loot_label = nil, | 139 loot_label = nil, |
| 152 loot_list = nil, | 140 loot_list = nil, |
| 153 loot_sources = nil, | 141 loot_sources = nil, |
| 157 x = nil, | 145 x = nil, |
| 158 y = nil, | 146 y = nil, |
| 159 zone_data = nil, | 147 zone_data = nil, |
| 160 } | 148 } |
| 161 | 149 |
| 162 ----------------------------------------------------------------------- | 150 |
| 163 -- Helper Functions. | 151 -- HELPERS ------------------------------------------------------------ |
| 164 ----------------------------------------------------------------------- | 152 |
| 165 local function Debug(message, ...) | 153 local function Debug(message, ...) |
| 166 if not DEBUGGING then | 154 if not DEBUGGING then |
| 167 return | 155 return |
| 168 end | 156 end |
| 169 _G.print(message:format(...)) | 157 _G.print(message:format(...)) |
| 416 end -- do-block | 404 end -- do-block |
| 417 | 405 |
| 418 | 406 |
| 419 local UpdateDBEntryLocation | 407 local UpdateDBEntryLocation |
| 420 do | 408 do |
| 421 local pi = math.pi | |
| 422 | |
| 423 -- Fishing node coordinate code based on code in GatherMate2 with permission from Kagaro. | 409 -- Fishing node coordinate code based on code in GatherMate2 with permission from Kagaro. |
| 424 local function FishingCoordinates(x, y, yard_width, yard_height) | 410 local function FishingCoordinates(x, y, yard_width, yard_height) |
| 425 local facing = _G.GetPlayerFacing() | 411 local facing = _G.GetPlayerFacing() |
| 426 | 412 |
| 427 if not facing then | 413 if not facing then |
| 428 return x, y | 414 return x, y |
| 429 end | 415 end |
| 430 local rad = facing + pi | 416 local rad = facing + math.pi |
| 431 return x + math.sin(rad) * 15 / yard_width, y + math.cos(rad) * 15 / yard_height | 417 return x + math.sin(rad) * 15 / yard_width, y + math.cos(rad) * 15 / yard_height |
| 432 end | 418 end |
| 433 | 419 |
| 434 | 420 |
| 435 function UpdateDBEntryLocation(entry_type, identifier) | 421 function UpdateDBEntryLocation(entry_type, identifier) |
| 715 _G.SetCVar("Sound_EnableSFX", sfx_value) | 701 _G.SetCVar("Sound_EnableSFX", sfx_value) |
| 716 end | 702 end |
| 717 end | 703 end |
| 718 end | 704 end |
| 719 | 705 |
| 720 ----------------------------------------------------------------------- | 706 |
| 721 -- Methods. | 707 -- METHODS ------------------------------------------------------------ |
| 722 ----------------------------------------------------------------------- | 708 |
| 723 function WDP:OnInitialize() | 709 function WDP:OnInitialize() |
| 724 local db = LibStub("AceDB-3.0"):New("WoWDBProfilerData", DATABASE_DEFAULTS, "Default") | 710 local db = LibStub("AceDB-3.0"):New("WoWDBProfilerData", DATABASE_DEFAULTS, "Default") |
| 725 global_db = db.global | 711 global_db = db.global |
| 726 char_db = db.char | 712 char_db = db.char |
| 727 | 713 |
| 786 end | 772 end |
| 787 local _, item_link = _G.GetItemInfo(identifier) | 773 local _, item_link = _G.GetItemInfo(identifier) |
| 788 HandleItemUse(item_link) | 774 HandleItemUse(item_link) |
| 789 end) | 775 end) |
| 790 self:SetCurrentAreaID("OnEnable") | 776 self:SetCurrentAreaID("OnEnable") |
| 777 self:GROUP_ROSTER_CHANGE() | |
| 791 end | 778 end |
| 792 | 779 |
| 793 | 780 |
| 794 local ScrapeItemUpgradeStats | 781 local ScrapeItemUpgradeStats |
| 795 do | 782 do |
| 1006 zone_data[("%d:%d:%d"):format(map_level, x, y)] = true | 993 zone_data[("%d:%d:%d"):format(map_level, x, y)] = true |
| 1007 end | 994 end |
| 1008 end -- do-block | 995 end -- do-block |
| 1009 | 996 |
| 1010 | 997 |
| 1011 ----------------------------------------------------------------------- | 998 -- EVENT HANDLERS ----------------------------------------------------- |
| 1012 -- Event handlers. | 999 |
| 1013 ----------------------------------------------------------------------- | |
| 1014 function WDP:BLACK_MARKET_ITEM_UPDATE(event_name) | 1000 function WDP:BLACK_MARKET_ITEM_UPDATE(event_name) |
| 1015 if not ALLOWED_LOCALES[CLIENT_LOCALE] then | 1001 if not ALLOWED_LOCALES[CLIENT_LOCALE] then |
| 1016 return | 1002 return |
| 1017 end | 1003 end |
| 1018 local num_items = _G.C_BlackMarket.GetNumItems() | 1004 local num_items = _G.C_BlackMarket.GetNumItems() |
| 1021 local name, texture, quantity, item_type, is_usable, level, level_type, seller_name, min_bid, min_increment, current_bid, has_high_bid, num_bids, time_left, item_link, market_id = _G.C_BlackMarket.GetItemInfoByIndex(index); | 1007 local name, texture, quantity, item_type, is_usable, level, level_type, seller_name, min_bid, min_increment, current_bid, has_high_bid, num_bids, time_left, item_link, market_id = _G.C_BlackMarket.GetItemInfoByIndex(index); |
| 1022 | 1008 |
| 1023 if item_link then | 1009 if item_link then |
| 1024 DBEntry("items", ItemLinkToID(item_link)).black_market = seller_name or "UNKNOWN" | 1010 DBEntry("items", ItemLinkToID(item_link)).black_market = seller_name or "UNKNOWN" |
| 1025 end | 1011 end |
| 1012 end | |
| 1013 end | |
| 1014 | |
| 1015 | |
| 1016 function WDP:GROUP_ROSTER_CHANGE() | |
| 1017 local is_raid = _G.IsInRaid() | |
| 1018 local unit_type = is_raid and "raid" or "party" | |
| 1019 local group_size = is_raid and _G.GetNumGroupMembers() or _G.GetNumSubgroupMembers() | |
| 1020 | |
| 1021 table.wipe(group_member_uids) | |
| 1022 | |
| 1023 for index = 1, group_size do | |
| 1024 group_member_uids[_G.UnitGUID(unit_type .. index)] = true | |
| 1025 end | |
| 1026 group_member_uids[_G.UnitGUID("player")] = true | |
| 1027 end | |
| 1028 | |
| 1029 | |
| 1030 function WDP:UNIT_PET(event_name, unit_id) | |
| 1031 local unit_guid = _G.UnitGUID(unit_id) | |
| 1032 local current_pet_guid = group_owner_guids_to_pet_guids[unit_guid] | |
| 1033 | |
| 1034 if current_pet_guid then | |
| 1035 Debug("Removing existing pet GUID for %s", _G.UnitName(unit_id)) | |
| 1036 group_owner_guids_to_pet_guids[unit_guid] = nil | |
| 1037 group_pet_guids[current_pet_guid] = nil | |
| 1038 end | |
| 1039 local pet_guid = _G.UnitGUID(unit_id .. "pet") | |
| 1040 | |
| 1041 if pet_guid then | |
| 1042 Debug("Adding new pet GUID for %s.", _G.UnitName(unit_id)) | |
| 1043 group_owner_guids_to_pet_guids[unit_id] = pet_guid | |
| 1044 group_pet_guids[pet_guid] = true | |
| 1026 end | 1045 end |
| 1027 end | 1046 end |
| 1028 | 1047 |
| 1029 | 1048 |
| 1030 function WDP:SHOW_LOOT_TOAST(event_name, loot_type, item_link, quantity) | 1049 function WDP:SHOW_LOOT_TOAST(event_name, loot_type, item_link, quantity) |
| 1211 end | 1230 end |
| 1212 end | 1231 end |
| 1213 | 1232 |
| 1214 local HEAL_BATTLE_PETS_SPELL_ID = 125801 | 1233 local HEAL_BATTLE_PETS_SPELL_ID = 125801 |
| 1215 | 1234 |
| 1235 local previous_combat_event = {} | |
| 1236 | |
| 1216 local COMBAT_LOG_FUNCS = { | 1237 local COMBAT_LOG_FUNCS = { |
| 1217 SPELL_AURA_APPLIED = RecordNPCSpell, | 1238 SPELL_AURA_APPLIED = RecordNPCSpell, |
| 1218 SPELL_CAST_START = RecordNPCSpell, | 1239 SPELL_CAST_START = RecordNPCSpell, |
| 1219 SPELL_CAST_SUCCESS = function(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name) | 1240 SPELL_CAST_SUCCESS = function(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name) |
| 1220 if spell_id == HEAL_BATTLE_PETS_SPELL_ID then | 1241 if spell_id == HEAL_BATTLE_PETS_SPELL_ID then |
| 1235 ClearKilledBossID() | 1256 ClearKilledBossID() |
| 1236 private.harvesting = nil | 1257 private.harvesting = nil |
| 1237 return | 1258 return |
| 1238 end | 1259 end |
| 1239 | 1260 |
| 1240 if dest_guid ~= _G.UnitGUID("target") then | 1261 if source_guid == "" then |
| 1262 source_guid = nil | |
| 1263 end | |
| 1264 local killer_guid = source_guid or previous_combat_event.source_guid | |
| 1265 local killer_name = source_name or previous_combat_event.source_name | |
| 1266 | |
| 1267 if not group_member_uids[killer_guid] and not group_pet_guids[killer_guid] then | |
| 1241 ClearKilledNPC() | 1268 ClearKilledNPC() |
| 1242 ClearKilledBossID() | 1269 ClearKilledBossID() |
| 1243 return | 1270 return |
| 1244 end | 1271 end |
| 1245 | 1272 |
| 1260 WDP:ScheduleTimer(ClearKilledBossID, 1) | 1287 WDP:ScheduleTimer(ClearKilledBossID, 1) |
| 1261 end, | 1288 end, |
| 1262 } | 1289 } |
| 1263 | 1290 |
| 1264 | 1291 |
| 1292 local NON_DAMAGE_EVENTS = { | |
| 1293 SPELL_AURA_APPLIED = true, | |
| 1294 SPELL_AURA_REMOVED = true, | |
| 1295 SPELL_AURA_REMOVED_DOSE = true, | |
| 1296 SPELL_CAST_FAILED = true, | |
| 1297 SWING_MISSED = true, | |
| 1298 } | |
| 1299 | |
| 1300 | |
| 1265 function WDP:COMBAT_LOG_EVENT_UNFILTERED(event_name, time_stamp, sub_event, hide_caster, source_guid, source_name, source_flags, source_raid_flags, dest_guid, dest_name, dest_flags, dest_raid_flags, ...) | 1301 function WDP:COMBAT_LOG_EVENT_UNFILTERED(event_name, time_stamp, sub_event, hide_caster, source_guid, source_name, source_flags, source_raid_flags, dest_guid, dest_name, dest_flags, dest_raid_flags, ...) |
| 1266 local combat_log_func = COMBAT_LOG_FUNCS[sub_event] | 1302 local combat_log_func = COMBAT_LOG_FUNCS[sub_event] |
| 1267 | 1303 |
| 1268 if not combat_log_func then | 1304 if not combat_log_func then |
| 1305 if not NON_DAMAGE_EVENTS[sub_event] then | |
| 1306 Debug("Recording for %s", sub_event) | |
| 1307 previous_combat_event.source_guid = source_guid | |
| 1308 previous_combat_event.source_name = source_name | |
| 1309 previous_combat_event.dest_guid = dest_guid | |
| 1310 previous_combat_event.dest_name = dest_name | |
| 1311 end | |
| 1269 return | 1312 return |
| 1270 end | 1313 end |
| 1271 combat_log_func(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, ...) | 1314 combat_log_func(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, ...) |
| 1315 table.wipe(previous_combat_event) | |
| 1272 end | 1316 end |
| 1273 | 1317 |
| 1274 local DIPLOMACY_SPELL_ID = 20599 | 1318 local DIPLOMACY_SPELL_ID = 20599 |
| 1275 local MR_POP_RANK1_SPELL_ID = 78634 | 1319 local MR_POP_RANK1_SPELL_ID = 78634 |
| 1276 local MR_POP_RANK2_SPELL_ID = 78635 | 1320 local MR_POP_RANK2_SPELL_ID = 78635 |
