Mercurial > wow > wowdb-profiler
comparison Main.lua @ 460:9f1d3224d316 6.2.2-1
Fixed Patch 6.2.0+ itemstring processing. While at it, significantly refactored code that records item data so it is vastly better.
author | MMOSimca <MMOSimca@gmail.com> |
---|---|
date | Mon, 26 Oct 2015 22:06:16 -0400 |
parents | 22f08f6717ea |
children | 94e59c64a328 |
comparison
equal
deleted
inserted
replaced
459:22f08f6717ea | 460:9f1d3224d316 |
---|---|
1012 self:HandleZoneChange("OnEnable") | 1012 self:HandleZoneChange("OnEnable") |
1013 self:GROUP_ROSTER_UPDATE() | 1013 self:GROUP_ROSTER_UPDATE() |
1014 end | 1014 end |
1015 | 1015 |
1016 | 1016 |
1017 local ScrapeItemUpgradeStats | |
1018 do | |
1019 local intermediary = {} | |
1020 | |
1021 function ScrapeItemUpgradeStats(item_id, upgrade_id, reforge_id) | |
1022 if not ALLOWED_LOCALES[CLIENT_LOCALE] then | |
1023 return | |
1024 end | |
1025 local create_entry | |
1026 | |
1027 table.wipe(intermediary) | |
1028 | |
1029 for line_index = 1, DatamineTT:NumLines() do | |
1030 local left_text = _G["WDPDatamineTTTextLeft" .. line_index]:GetText():trim() | |
1031 | |
1032 if not left_text or left_text == "" or left_text:find("Socket") or left_text:find("Set:") then | |
1033 break | |
1034 end | |
1035 local amount, stat = left_text:match("+(.-) (.*)") | |
1036 | |
1037 if amount and stat then | |
1038 create_entry = true | |
1039 intermediary[stat:lower():gsub(" ", "_"):gsub("|r", "")] = tonumber((amount:gsub(",", ""))) | |
1040 end | |
1041 end | |
1042 | |
1043 if not create_entry then | |
1044 return | |
1045 end | |
1046 local item = DBEntry("items", item_id) | |
1047 item.upgrade_id = upgrade_id | |
1048 item.upgrades = item.upgrades or {} | |
1049 item.upgrades[upgrade_id] = item.upgrades[upgrade_id] or {} | |
1050 | |
1051 for stat, amount in pairs(intermediary) do | |
1052 item.upgrades[upgrade_id][stat] = amount | |
1053 end | |
1054 end | |
1055 end -- do-block | |
1056 | |
1057 | |
1058 local function RecordItemData(item_id, item_link, process_bonus_ids, durability) | 1017 local function RecordItemData(item_id, item_link, process_bonus_ids, durability) |
1059 local _, _, item_string = item_link:find("^|%x+|H(.+)|h%[.+%]") | 1018 local _, _, item_string = item_link:find("^|%x+|H(.+)|h%[.+%]") |
1060 local item | 1019 local item |
1061 | 1020 |
1062 if item_string then | 1021 if item_string then |
1063 local item_results = { (":"):split(item_string) } | 1022 local item_results = { (":"):split(item_string) } |
1064 | 1023 |
1065 local suffix_id = tonumber(item_results[8]) | 1024 local suffix_id = tonumber(item_results[8]) or 0 |
1066 local unique_id = item_results[9] | 1025 local unique_id = item_results[9] or 0 |
1067 --local level = tonumber(item_results[10]) | 1026 --local level = tonumber(item_results[10]) |
1068 --local unknown = tonumber(item_results[11]) | 1027 --local specialization_id = tonumber(item_results[11]) |
1069 local upgrade_id = tonumber(item_results[12]) | 1028 --local unknown_upgrade_related_id = tonumber(item_results[12]) |
1070 local instance_difficulty_id = tonumber(item_results[13]) | 1029 local instance_difficulty_id = tonumber(item_results[13]) or 0 |
1071 local num_bonus_ids = tonumber(item_results[14]) | 1030 local num_bonus_ids = tonumber(item_results[14]) or 0 |
1072 | 1031 -- upgrade_id is optional since 6.2! can probably be detected using unknown_upgrade_related_id, but it's just as easy to check like this |
1073 if not num_bonus_ids or num_bonus_ids == 0 or not process_bonus_ids then | 1032 local upgrade_id = tonumber(item_results[15 + num_bonus_ids]) or 0 |
1074 if (suffix_id and suffix_id ~= 0) or (instance_difficulty_id and instance_difficulty_id ~= 0) then | 1033 |
1075 item = DBEntry("items", item_id) | 1034 -- If there is anything special (non-zero) for this item then we need to make note of everything |
1076 item.unique_id = bit.band(unique_id, 0xFFFF) | 1035 if math.max(suffix_id, instance_difficulty_id, num_bonus_ids, upgrade_id) ~= 0 then |
1077 | 1036 item = DBEntry("items", item_id) |
1078 if suffix_id and suffix_id ~= 0 then | 1037 item.suffix_id = suffix_id |
1079 item.suffix_id = suffix_id | 1038 item.unique_id = bit.band(unique_id, 0xFFFF) |
1080 end | 1039 item.instance_difficulty_id = instance_difficulty_id |
1081 | 1040 item.upgrade_id = upgrade_id |
1082 if instance_difficulty_id and instance_difficulty_id ~= 0 then | 1041 |
1083 item.instance_difficulty_id = instance_difficulty_id | 1042 if process_bonus_ids then |
1084 end | 1043 |
1085 | 1044 -- Get ready for bonus IDs |
1086 if not item.seen_bonuses then | 1045 if not item.seen_bonuses then |
1087 item.seen_bonuses = {} | 1046 item.seen_bonuses = {} |
1088 end | 1047 end |
1089 item.seen_bonuses["0"] = true | 1048 |
1090 end | 1049 if num_bonus_ids > 0 then |
1091 elseif num_bonus_ids > 0 then | 1050 -- We want the bonus ID combo output to be in the form ["bonusID1:bonusID2:bonusID3"] = true |
1092 item = DBEntry("items", item_id) | 1051 -- And sorted numerically with the smallest bonusID first |
1093 | 1052 local sorted_bonus_string = "" |
1094 item.unique_id = bit.band(unique_id, 0xFFFF) | 1053 local min_bonus_id_array = {} |
1095 item.instance_difficulty_id = instance_difficulty_id | 1054 for iterations = 1, num_bonus_ids do |
1096 | 1055 -- Find minimum of this iteration |
1097 if not item.seen_bonuses then | 1056 local min_bonus_id = 100000 |
1098 item.seen_bonuses = {} | 1057 for bonus_index = 1, num_bonus_ids do |
1099 end | 1058 local temp_bonus_id = tonumber(item_results[14 + bonus_index]) |
1100 | 1059 if temp_bonus_id and (not min_bonus_id_array[temp_bonus_id]) and (temp_bonus_id < min_bonus_id) then |
1101 -- We want the bonus ID combo output to be in the form ["bonusID1:bonusID2:bonusID3"] = true | 1060 min_bonus_id = temp_bonus_id |
1102 -- And sorted numerically with the smallest bonusID first | 1061 end |
1103 local sorted_bonus_string = "" | 1062 end |
1104 local min_bonus_id_array = {} | 1063 |
1105 for iterations = 1, num_bonus_ids do | 1064 -- Keep track of already processed IDs |
1106 -- Find minimum of this iteration | 1065 min_bonus_id_array[min_bonus_id] = true |
1107 local min_bonus_id = 100000 | 1066 |
1108 for bonus_index = 1, num_bonus_ids do | 1067 -- Build string |
1109 local temp_bonus_id = tonumber(item_results[14 + bonus_index]) | 1068 if iterations == 1 then |
1110 if temp_bonus_id and (not min_bonus_id_array[temp_bonus_id]) and (temp_bonus_id < min_bonus_id) then | 1069 sorted_bonus_string = sorted_bonus_string .. tostring(min_bonus_id) |
1111 min_bonus_id = temp_bonus_id | 1070 else |
1071 sorted_bonus_string = sorted_bonus_string .. ":" .. tostring(min_bonus_id) | |
1072 end | |
1112 end | 1073 end |
1113 end | 1074 |
1114 | 1075 item.seen_bonuses[sorted_bonus_string] = true |
1115 -- Keep track of already processed IDs | 1076 Debug("RecordItemData: Recorded bonus IDs %s for item %d.", sorted_bonus_string, item_id) |
1116 min_bonus_id_array[min_bonus_id] = true | |
1117 | |
1118 -- Build string | |
1119 if iterations == 1 then | |
1120 sorted_bonus_string = sorted_bonus_string .. tostring(min_bonus_id) | |
1121 else | 1077 else |
1122 sorted_bonus_string = sorted_bonus_string .. ":" .. tostring(min_bonus_id) | 1078 item.seen_bonuses["0"] = true |
1123 end | 1079 end |
1124 end | 1080 end |
1125 | |
1126 item.seen_bonuses[sorted_bonus_string] = true | |
1127 Debug("RecordItemData: Recorded bonus IDs %s for item %d.", sorted_bonus_string, item_id) | |
1128 else | |
1129 Debug("RecordItemData: num_bonus_ids is supposed to be 0 or positive, instead it was %d.", num_bonus_ids) | |
1130 end | |
1131 if upgrade_id and upgrade_id ~= 0 then | |
1132 DatamineTT:SetHyperlink(item_link) | |
1133 ScrapeItemUpgradeStats(item_id, upgrade_id) | |
1134 end | 1081 end |
1135 end | 1082 end |
1136 | 1083 |
1137 if durability and durability > 0 then | 1084 if durability and durability > 0 then |
1138 item = item or DBEntry("items", item_id) | 1085 item = item or DBEntry("items", item_id) |
1769 local BLACKLISTED_SPELLS = { | 1716 local BLACKLISTED_SPELLS = { |
1770 [117526] = true, -- Binding Shot (cast by Hunters) | 1717 [117526] = true, -- Binding Shot (cast by Hunters) |
1771 [121308] = true, -- Disguise (cast by Rogues) | 1718 [121308] = true, -- Disguise (cast by Rogues) |
1772 [132464] = true, -- Chi Wave (cast by Monks) | 1719 [132464] = true, -- Chi Wave (cast by Monks) |
1773 [132467] = true, -- Chi Wave (cast by Monks) | 1720 [132467] = true, -- Chi Wave (cast by Monks) |
1721 [167432] = true, -- Savagery (cast by Warsong Commander) | |
1722 [175077] = true, -- Fearsome Battle Standard (cast by Fearsome Battle Standard item) | |
1774 [176813] = true, -- Itchy Spores (cast by Marsh Creatures in Ashran) | 1723 [176813] = true, -- Itchy Spores (cast by Marsh Creatures in Ashran) |
1775 [183901] = true, -- Stolen Strength (cast by Felblood NPCs in Tanaan Jungle) | 1724 [183901] = true, -- Stolen Strength (cast by Felblood NPCs in Tanaan Jungle) |
1776 [183904] = true, -- Stolen Speed (cast by Felblood NPCs in Tanaan Jungle) | 1725 [183904] = true, -- Stolen Speed (cast by Felblood NPCs in Tanaan Jungle) |
1777 [183907] = true, -- Stolen Fervor (cast by Felblood NPCs in Tanaan Jungle) | 1726 [183907] = true, -- Stolen Fervor (cast by Felblood NPCs in Tanaan Jungle) |
1778 } | 1727 } |