Mercurial > wow > wowdb-profiler
comparison Main.lua @ 214:9b0333c7513e
Don't create an encounter_data entry for NPCs unless it's required.
| author | James D. Callahan III <jcallahan@curse.com> |
|---|---|
| date | Mon, 21 Jan 2013 18:01:26 -0600 |
| parents | 3c1623ab71db |
| children | 3b04818b4c03 |
comparison
equal
deleted
inserted
replaced
| 213:52d1e3f75eaf | 214:9b0333c7513e |
|---|---|
| 323 global_db[data_type][unit_id] = unit | 323 global_db[data_type][unit_id] = unit |
| 324 end | 324 end |
| 325 return unit | 325 return unit |
| 326 end | 326 end |
| 327 | 327 |
| 328 | 328 local NPCEntry |
| 329 local function NPCEntry(identifier) | 329 do |
| 330 local npc = DBEntry("npcs", identifier) | 330 local npc_prototype = {} |
| 331 | 331 local npc_meta = { |
| 332 if not npc then | 332 __index = npc_prototype |
| 333 return | 333 } |
| 334 end | 334 |
| 335 local instance_token = InstanceDifficultyToken() | 335 function NPCEntry(identifier) |
| 336 npc.encounter_data = npc.encounter_data or {} | 336 local npc = _G.setmetatable(DBEntry("npcs", identifier), npc_meta) |
| 337 npc.encounter_data[instance_token] = npc.encounter_data[instance_token] or {} | 337 |
| 338 npc.encounter_data[instance_token].stats = npc.encounter_data[instance_token].stats or {} | 338 if not npc then |
| 339 return npc | 339 return |
| 340 end | |
| 341 return npc | |
| 342 end | |
| 343 | |
| 344 function npc_prototype:EncounterData() | |
| 345 local instance_token = InstanceDifficultyToken() | |
| 346 self.encounter_data = self.encounter_data or {} | |
| 347 self.encounter_data[instance_token] = self.encounter_data[instance_token] or {} | |
| 348 self.encounter_data[instance_token].stats = self.encounter_data[instance_token].stats or {} | |
| 349 | |
| 350 return self.encounter_data | |
| 351 end | |
| 352 | |
| 340 end | 353 end |
| 341 | 354 |
| 342 | 355 |
| 343 local function CurrentLocationData() | 356 local function CurrentLocationData() |
| 344 if _G.GetCurrentMapAreaID() ~= current_area_id then | 357 if _G.GetCurrentMapAreaID() ~= current_area_id then |
| 908 npc.genders = npc.genders or {} | 921 npc.genders = npc.genders or {} |
| 909 npc.genders[GENDER_NAMES[_G.UnitSex("target")] or "UNDEFINED"] = true | 922 npc.genders[GENDER_NAMES[_G.UnitSex("target")] or "UNDEFINED"] = true |
| 910 npc.is_pvp = _G.UnitIsPVP("target") and true or nil | 923 npc.is_pvp = _G.UnitIsPVP("target") and true or nil |
| 911 npc.reaction = ("%s:%s:%s"):format(_G.UnitLevel("player"), _G.UnitFactionGroup("player"), REACTION_NAMES[_G.UnitReaction("player", "target")]) | 924 npc.reaction = ("%s:%s:%s"):format(_G.UnitLevel("player"), _G.UnitFactionGroup("player"), REACTION_NAMES[_G.UnitReaction("player", "target")]) |
| 912 | 925 |
| 913 local encounter_data = npc.encounter_data[InstanceDifficultyToken()].stats | 926 local encounter_data = npc:EncounterData()[InstanceDifficultyToken()].stats |
| 914 local npc_level = ("level_%d"):format(_G.UnitLevel("target")) | 927 local npc_level = ("level_%d"):format(_G.UnitLevel("target")) |
| 915 | 928 |
| 916 if not encounter_data[npc_level] then | 929 if not encounter_data[npc_level] then |
| 917 encounter_data[npc_level] = { | 930 encounter_data[npc_level] = { |
| 918 max_health = _G.UnitHealthMax("target"), | 931 max_health = _G.UnitHealthMax("target"), |
| 948 | 961 |
| 949 if not npc then | 962 if not npc then |
| 950 return | 963 return |
| 951 end | 964 end |
| 952 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData() | 965 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData() |
| 953 local npc_data = npc.encounter_data[difficulty_token].stats[("level_%d"):format(_G.UnitLevel("target"))] | 966 local npc_data = npc:EncounterData()[difficulty_token].stats[("level_%d"):format(_G.UnitLevel("target"))] |
| 954 local zone_token = ("%s:%d"):format(zone_name, area_id) | 967 local zone_token = ("%s:%d"):format(zone_name, area_id) |
| 955 npc_data.locations = npc_data.locations or {} -- TODO: Fix this. It is broken. Possibly something to do with the timed updates. | 968 npc_data.locations = npc_data.locations or {} -- TODO: Fix this. It is broken. Possibly something to do with the timed updates. |
| 956 | 969 |
| 957 local zone_data = npc_data.locations[zone_token] | 970 local zone_data = npc_data.locations[zone_token] |
| 958 | 971 |
| 1007 if not item_id then | 1020 if not item_id then |
| 1008 Debug(("%s: ItemID is nil, from item link %s"):format(event_name, item_link)) | 1021 Debug(("%s: ItemID is nil, from item link %s"):format(event_name, item_link)) |
| 1009 return | 1022 return |
| 1010 end | 1023 end |
| 1011 local loot_type = "drops" | 1024 local loot_type = "drops" |
| 1012 local encounter_data = npc.encounter_data[InstanceDifficultyToken()] | 1025 local encounter_data = npc:EncounterData()[InstanceDifficultyToken()] |
| 1013 encounter_data[loot_type] = encounter_data[loot_type] or {} | 1026 encounter_data[loot_type] = encounter_data[loot_type] or {} |
| 1014 encounter_data.loot_counts = encounter_data.loot_counts or {} | 1027 encounter_data.loot_counts = encounter_data.loot_counts or {} |
| 1015 encounter_data.loot_counts[loot_type] = (encounter_data.loot_counts[loot_type] or 0) + 1 | 1028 encounter_data.loot_counts[loot_type] = (encounter_data.loot_counts[loot_type] or 0) + 1 |
| 1016 | 1029 |
| 1017 table.insert(encounter_data[loot_type], ("%d:%d"):format(item_id, quantity)) | 1030 table.insert(encounter_data[loot_type], ("%d:%d"):format(item_id, quantity)) |
| 1167 if not source_id or not UnitTypeIsNPC(source_type) then | 1180 if not source_id or not UnitTypeIsNPC(source_type) then |
| 1168 return | 1181 return |
| 1169 end | 1182 end |
| 1170 | 1183 |
| 1171 if bit.band(FLAGS_NPC_CONTROL, source_flags) == FLAGS_NPC_CONTROL and bit.band(FLAGS_NPC, source_flags) ~= 0 then | 1184 if bit.band(FLAGS_NPC_CONTROL, source_flags) == FLAGS_NPC_CONTROL and bit.band(FLAGS_NPC, source_flags) ~= 0 then |
| 1172 local encounter_data = NPCEntry(source_id).encounter_data[InstanceDifficultyToken()] | 1185 local encounter_data = NPCEntry(source_id):EncounterData()[InstanceDifficultyToken()] |
| 1173 encounter_data.spells = encounter_data.spells or {} | 1186 encounter_data.spells = encounter_data.spells or {} |
| 1174 encounter_data.spells[spell_id] = (encounter_data.spells[spell_id] or 0) + 1 | 1187 encounter_data.spells[spell_id] = (encounter_data.spells[spell_id] or 0) + 1 |
| 1175 end | 1188 end |
| 1176 end | 1189 end |
| 1177 | 1190 |
| 1444 for source_guid, loot_data in pairs(current_loot.sources) do | 1457 for source_guid, loot_data in pairs(current_loot.sources) do |
| 1445 local source_id = select(2, ParseGUID(source_guid)) | 1458 local source_id = select(2, ParseGUID(source_guid)) |
| 1446 local npc = NPCEntry(source_id) | 1459 local npc = NPCEntry(source_id) |
| 1447 | 1460 |
| 1448 if npc then | 1461 if npc then |
| 1449 local encounter_data = npc.encounter_data[difficulty_token] | 1462 local encounter_data = npc:EncounterData()[difficulty_token] |
| 1450 encounter_data[loot_type] = encounter_data[loot_type] or {} | 1463 encounter_data[loot_type] = encounter_data[loot_type] or {} |
| 1451 | 1464 |
| 1452 if not source_list[source_guid] then | 1465 if not source_list[source_guid] then |
| 1453 encounter_data.loot_counts = encounter_data.loot_counts or {} | 1466 encounter_data.loot_counts = encounter_data.loot_counts or {} |
| 1454 encounter_data.loot_counts[loot_type] = (encounter_data.loot_counts[loot_type] or 0) + 1 | 1467 encounter_data.loot_counts[loot_type] = (encounter_data.loot_counts[loot_type] or 0) + 1 |
| 1468 local npc = NPCEntry(current_loot.identifier) | 1481 local npc = NPCEntry(current_loot.identifier) |
| 1469 | 1482 |
| 1470 if not npc then | 1483 if not npc then |
| 1471 return | 1484 return |
| 1472 end | 1485 end |
| 1473 local encounter_data = npc.encounter_data[difficulty_token] | 1486 local encounter_data = npc:EncounterData()[difficulty_token] |
| 1474 encounter_data[loot_type] = encounter_data[loot_type] or {} | 1487 encounter_data[loot_type] = encounter_data[loot_type] or {} |
| 1475 | 1488 |
| 1476 if not source_list[current_loot.identifier] then | 1489 if not source_list[current_loot.identifier] then |
| 1477 encounter_data.loot_counts = encounter_data.loot_counts or {} | 1490 encounter_data.loot_counts = encounter_data.loot_counts or {} |
| 1478 encounter_data.loot_counts[loot_type] = (encounter_data.loot_counts[loot_type] or 0) + 1 | 1491 encounter_data.loot_counts[loot_type] = (encounter_data.loot_counts[loot_type] or 0) + 1 |
