Mercurial > wow > wowdb-profiler
comparison Main.lua @ 328:3487529df8e5
Fixed several nil errors, including at least four with zone_data, and spell detection now ignores Chi Wave.
| author | MMOSimca <MMOSimca@gmail.com> |
|---|---|
| date | Wed, 06 Aug 2014 04:31:49 -0400 |
| parents | 66b136635f6b |
| children | 84817627cb22 |
comparison
equal
deleted
inserted
replaced
| 327:c191c8a521fb | 328:3487529df8e5 |
|---|---|
| 45 local PLAYER_FACTION = _G.UnitFactionGroup("player") | 45 local PLAYER_FACTION = _G.UnitFactionGroup("player") |
| 46 local PLAYER_GUID | 46 local PLAYER_GUID |
| 47 local PLAYER_NAME = _G.UnitName("player") | 47 local PLAYER_NAME = _G.UnitName("player") |
| 48 local PLAYER_RACE = _G.select(2, _G.UnitRace("player")) | 48 local PLAYER_RACE = _G.select(2, _G.UnitRace("player")) |
| 49 | 49 |
| 50 local SPELL_ID_CHI_WAVE = 132464 | |
| 50 local SPELL_ID_DISGUISE = 121308 | 51 local SPELL_ID_DISGUISE = 121308 |
| 51 | 52 |
| 52 local ALLOWED_LOCALES = { | 53 local ALLOWED_LOCALES = { |
| 53 enUS = true, | 54 enUS = true, |
| 54 enGB = true, | 55 enGB = true, |
| 513 function UpdateDBEntryLocation(entry_type, identifier) | 514 function UpdateDBEntryLocation(entry_type, identifier) |
| 514 if not identifier then | 515 if not identifier then |
| 515 return | 516 return |
| 516 end | 517 end |
| 517 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData() | 518 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData() |
| 519 if not (zone_name and area_id and x and y and map_level) then | |
| 520 Debug("UpdateDBEntryLocation: Missing current location data - %s, %d, %d, %d, %d.", zone_name, area_id, x, y, map_level) | |
| 521 return | |
| 522 end | |
| 518 local entry = DBEntry(entry_type, identifier) | 523 local entry = DBEntry(entry_type, identifier) |
| 519 entry[difficulty_token] = entry[difficulty_token] or {} | 524 entry[difficulty_token] = entry[difficulty_token] or {} |
| 520 entry[difficulty_token].locations = entry[difficulty_token].locations or {} | 525 entry[difficulty_token].locations = entry[difficulty_token].locations or {} |
| 521 | 526 |
| 522 local zone_token = ("%s:%d"):format(zone_name, area_id) | 527 local zone_token = ("%s:%d"):format(zone_name, area_id) |
| 666 local source_id | 671 local source_id |
| 667 | 672 |
| 668 if current_loot.target_type == AF.ITEM then | 673 if current_loot.target_type == AF.ITEM then |
| 669 -- Items return the player as the source, so we need to use the item's ID (disenchant, milling, etc) | 674 -- Items return the player as the source, so we need to use the item's ID (disenchant, milling, etc) |
| 670 source_id = current_loot.identifier | 675 source_id = current_loot.identifier |
| 671 elseif current_loot.target_type == AF.OBJECT then | |
| 672 source_id = ("%s:%s"):format(current_loot.spell_label, select(2, ParseGUID(source_guid))) | |
| 673 else | 676 else |
| 674 source_id = select(2, ParseGUID(source_guid)) | 677 local unit_ID = select(2, ParseGUID(source_guid)) |
| 678 if unit_ID then | |
| 679 if current_loot.target_type == AF.OBJECT then | |
| 680 source_id = ("%s:%s"):format(current_loot.spell_label, unit_ID) | |
| 681 else | |
| 682 source_id = unit_ID | |
| 683 end | |
| 684 end | |
| 675 end | 685 end |
| 676 local entry = DBEntry(data_type, source_id) | 686 local entry = DBEntry(data_type, source_id) |
| 677 | 687 |
| 678 if entry then | 688 if entry then |
| 679 local loot_table = LootTable(entry, loot_type, top_field) | 689 local loot_table = LootTable(entry, loot_type, top_field) |
| 1112 | 1122 |
| 1113 if not npc then | 1123 if not npc then |
| 1114 return | 1124 return |
| 1115 end | 1125 end |
| 1116 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData() | 1126 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData() |
| 1127 if not (zone_name and area_id and x and y and map_level) then | |
| 1128 Debug("UpdateTargetLocation: Missing current location data - %s, %d, %d, %d, %d.", zone_name, area_id, x, y, map_level) | |
| 1129 return | |
| 1130 end | |
| 1117 local npc_data = npc:EncounterData(difficulty_token).stats[("level_%d"):format(_G.UnitLevel("target"))] | 1131 local npc_data = npc:EncounterData(difficulty_token).stats[("level_%d"):format(_G.UnitLevel("target"))] |
| 1118 local zone_token = ("%s:%d"):format(zone_name, area_id) | 1132 local zone_token = ("%s:%d"):format(zone_name, area_id) |
| 1119 npc_data.locations = npc_data.locations or {} -- TODO: Fix this. It is broken. Possibly something to do with the timed updates. | 1133 npc_data.locations = npc_data.locations or {} -- TODO: Fix this. It is broken. Possibly something to do with the timed updates. |
| 1120 | 1134 |
| 1121 local zone_data = npc_data.locations[zone_token] | 1135 local zone_data = npc_data.locations[zone_token] |
| 1432 do -- do-block | 1446 do -- do-block |
| 1433 local FLAGS_NPC = bit.bor(_G.COMBATLOG_OBJECT_TYPE_GUARDIAN, _G.COMBATLOG_OBJECT_CONTROL_NPC) | 1447 local FLAGS_NPC = bit.bor(_G.COMBATLOG_OBJECT_TYPE_GUARDIAN, _G.COMBATLOG_OBJECT_CONTROL_NPC) |
| 1434 local FLAGS_NPC_CONTROL = bit.bor(_G.COMBATLOG_OBJECT_AFFILIATION_OUTSIDER, _G.COMBATLOG_OBJECT_CONTROL_NPC) | 1448 local FLAGS_NPC_CONTROL = bit.bor(_G.COMBATLOG_OBJECT_AFFILIATION_OUTSIDER, _G.COMBATLOG_OBJECT_CONTROL_NPC) |
| 1435 | 1449 |
| 1436 local function RecordNPCSpell(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name) | 1450 local function RecordNPCSpell(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name) |
| 1437 if not spell_id or spell_id == SPELL_ID_DISGUISE then | 1451 if not spell_id or spell_id == SPELL_ID_CHI_WAVE or spell_id == SPELL_ID_DISGUISE then |
| 1438 return | 1452 return |
| 1439 end | 1453 end |
| 1440 local source_type, source_id = ParseGUID(source_guid) | 1454 local source_type, source_id = ParseGUID(source_guid) |
| 1441 | 1455 |
| 1442 if not source_id or not UnitTypeIsNPC(source_type) then | 1456 if not source_id or not UnitTypeIsNPC(source_type) then |
| 1746 end, | 1760 end, |
| 1747 [AF.OBJECT] = function() | 1761 [AF.OBJECT] = function() |
| 1748 GenericLootUpdate("objects", InstanceDifficultyToken()) | 1762 GenericLootUpdate("objects", InstanceDifficultyToken()) |
| 1749 end, | 1763 end, |
| 1750 [AF.ZONE] = function() | 1764 [AF.ZONE] = function() |
| 1765 if not (current_loot.map_level and current_loot.x and current_loot.y and current_loot.zone_data) then | |
| 1766 return | |
| 1767 end | |
| 1751 local location_token = ("%d:%d:%d"):format(current_loot.map_level, current_loot.x, current_loot.y) | 1768 local location_token = ("%d:%d:%d"):format(current_loot.map_level, current_loot.x, current_loot.y) |
| 1752 | 1769 |
| 1753 -- This will start life as a boolean true. | 1770 -- This will start life as a boolean true. |
| 1754 if _G.type(current_loot.zone_data[location_token]) ~= "table" then | 1771 if _G.type(current_loot.zone_data[location_token]) ~= "table" then |
| 1755 current_loot.zone_data[location_token] = { | 1772 current_loot.zone_data[location_token] = { |
| 2046 DatamineTT:SetMerchantItem(item_index) | 2063 DatamineTT:SetMerchantItem(item_index) |
| 2047 | 2064 |
| 2048 if not item_id then | 2065 if not item_id then |
| 2049 local item_name, item_link = DatamineTT:GetItem() | 2066 local item_name, item_link = DatamineTT:GetItem() |
| 2050 item_id = ItemLinkToID(item_link) | 2067 item_id = ItemLinkToID(item_link) |
| 2051 Debug("%s: GetMerchantItemLink() still ocassionally fails, apparently. Failed item's ID - %s", event_name, item_id) | 2068 if item_id then |
| 2069 Debug("%s: GetMerchantItemLink() still ocassionally fails, apparently. Failed item's ID - %s", event_name, item_id) | |
| 2070 else | |
| 2071 Debug("%s: GetMerchantItemLink() still ocassionally fails, apparently. Failed item's ID - nil", event_name) | |
| 2072 end | |
| 2052 end | 2073 end |
| 2053 | 2074 |
| 2054 if item_id and item_id > 0 then | 2075 if item_id and item_id > 0 then |
| 2055 local price_string = ActualCopperCost(copper_price, merchant_standing) | 2076 local price_string = ActualCopperCost(copper_price, merchant_standing) |
| 2056 | 2077 |
| 2415 unit_name = target_name | 2436 unit_name = target_name |
| 2416 unit_id = "target" | 2437 unit_id = "target" |
| 2417 end | 2438 end |
| 2418 local spell_flags = private.SPELL_FLAGS_BY_LABEL[spell_label] | 2439 local spell_flags = private.SPELL_FLAGS_BY_LABEL[spell_label] |
| 2419 local zone_name, area_id, x, y, map_level, instance_token = CurrentLocationData() | 2440 local zone_name, area_id, x, y, map_level, instance_token = CurrentLocationData() |
| 2441 if not (zone_name and area_id and x and y and map_level) then | |
| 2442 Debug("%s: Missing current location data - %s, %d, %d, %d, %d.", event_name, zone_name, area_id, x, y, map_level) | |
| 2443 return | |
| 2444 end | |
| 2420 | 2445 |
| 2421 table.wipe(current_action) | 2446 table.wipe(current_action) |
| 2422 current_action.instance_token = instance_token | 2447 current_action.instance_token = instance_token |
| 2423 current_action.map_level = map_level | 2448 current_action.map_level = map_level |
| 2424 current_action.x = x | 2449 current_action.x = x |
