Mercurial > wow > wowdb-profiler
comparison Main.lua @ 562:2be7eedb205b 8.0.1-4
Fixed world quest parsing and recording.
author | Caleb Atherton <atcaleb@twitch.tv> |
---|---|
date | Sat, 21 Jul 2018 06:41:37 -0400 |
parents | bb5a42af4db0 |
children | 19c59ee05ab1 |
comparison
equal
deleted
inserted
replaced
561:bb5a42af4db0 | 562:2be7eedb205b |
---|---|
924 for index = 1, _G.GetNumLanguages() do | 924 for index = 1, _G.GetNumLanguages() do |
925 languages_known[_G.GetLanguageByIndex(index)] = true | 925 languages_known[_G.GetLanguageByIndex(index)] = true |
926 end | 926 end |
927 | 927 |
928 -- These timers loop indefinitely using Lua's infinity constant | 928 -- These timers loop indefinitely using Lua's infinity constant |
929 item_process_timer_handle = C_Timer.NewTicker(DELAY_PROCESS_ITEMS, WDP.ProcessItems, math.huge) | 929 item_process_timer_handle = C_Timer.NewTicker(DELAY_PROCESS_ITEMS, WDP.ProcessItems, nil) |
930 target_location_timer_handle = C_Timer.NewTicker(DELAY_UPDATE_TARGET_LOCATION, WDP.UpdateTargetLocation, math.huge) | 930 target_location_timer_handle = C_Timer.NewTicker(DELAY_UPDATE_TARGET_LOCATION, WDP.UpdateTargetLocation, nil) |
931 world_quest_timer_handle = C_Timer.NewTicker(DELAY_PROCESS_WORLD_QUESTS, WDP.ProcessWorldQuests, math.huge) | 931 world_quest_timer_handle = C_Timer.NewTicker(DELAY_PROCESS_WORLD_QUESTS, WDP.ProcessWorldQuests, nil) |
932 | 932 |
933 _G.hooksecurefunc("UseContainerItem", function(bag_index, slot_index, target_unit) | 933 _G.hooksecurefunc("UseContainerItem", function(bag_index, slot_index, target_unit) |
934 if target_unit then | 934 if target_unit then |
935 return | 935 return |
936 end | 936 end |
949 end | 949 end |
950 | 950 |
951 | 951 |
952 -- Record data for a specific quest ID; reward data must be available or nothing will be recorded | 952 -- Record data for a specific quest ID; reward data must be available or nothing will be recorded |
953 -- When we reach this point, we've already checked for a valid mapID, questID, quest data, and worldQuestType | 953 -- When we reach this point, we've already checked for a valid mapID, questID, quest data, and worldQuestType |
954 local function RecordWorldQuestData(quest_id, continent_world_map_id, zone_world_map_id, api_data_table) | 954 local function RecordWorldQuestData(quest_id, api_data_table) |
955 | |
956 -- Ensure we have location data and rewards (barely readable so putting it on multiple lines) | 955 -- Ensure we have location data and rewards (barely readable so putting it on multiple lines) |
957 -- (Honor is built in to the quest; it is not a sign rewards have been loaded) | 956 -- (Honor is built in to the quest; it is not a sign rewards have been loaded) |
958 if not api_data_table.x or not api_data_table.y or not api_data_table.floor or not | 957 if not api_data_table or not api_data_table.x or not api_data_table.y or not api_data_table.mapID or not |
959 (_G.GetQuestLogRewardXP(quest_id) > 0 or _G.GetNumQuestLogRewardCurrencies(quest_id) > 0 | 958 (_G.GetQuestLogRewardXP(quest_id) > 0 or _G.GetNumQuestLogRewardCurrencies(quest_id) > 0 |
960 or _G.GetNumQuestLogRewards(quest_id) > 0 or _G.GetQuestLogRewardMoney(quest_id) > 0 | 959 or _G.GetNumQuestLogRewards(quest_id) > 0 or _G.GetQuestLogRewardMoney(quest_id) > 0) then |
961 or _G.GetQuestLogRewardArtifactXP(quest_id) > 0) then | 960 --or _G.GetQuestLogRewardArtifactXP(quest_id) > 0) |
962 return | 961 return |
963 end | 962 end |
964 | |
965 -- Translate continent-level coordinates to zone-coordinates | |
966 local oX, oY, dFloor = tonumber(api_data_table.x) or 0, tonumber(api_data_table.y) or 0, tonumber(api_data_table.floor) or 0 | |
967 local dX, dY = HereBeDragons:TranslateZoneCoordinates(oX, oY, continent_world_map_id, 0, zone_world_map_id, dFloor, false) | |
968 | |
969 -- If the translation failed, stop here | |
970 if not dX or not dY then return end | |
971 | 963 |
972 local entry = DBEntry("world_quests", quest_id) | 964 local entry = DBEntry("world_quests", quest_id) |
973 if entry then | 965 if entry then |
974 | 966 |
975 -- Record location | 967 -- Record location |
976 entry["location"] = {} | 968 entry["location"] = {} |
977 entry["location"]["world_map_id"] = zone_world_map_id | 969 entry["location"]["world_map_id"] = api_data_table.mapID |
978 entry["location"]["x"] = dX * 100 | 970 entry["location"]["x"] = api_data_table.x * 100 |
979 entry["location"]["y"] = dY * 100 | 971 entry["location"]["y"] = api_data_table.y * 100 |
980 entry["location"]["floor"] = dFloor | |
981 | 972 |
982 -- Record simple rewards (XP, money, artifact XP, honor) | 973 -- Record simple rewards (XP, money, artifact XP, honor) |
983 entry["rewards"] = {} | 974 entry["rewards"] = {} |
984 entry["rewards"]["xp"] = tonumber(_G.GetQuestLogRewardXP(quest_id)) or 0 | 975 entry["rewards"]["xp"] = tonumber(_G.GetQuestLogRewardXP(quest_id)) or 0 |
985 entry["rewards"]["money"] = tonumber(_G.GetQuestLogRewardMoney(quest_id)) or 0 | 976 entry["rewards"]["money"] = tonumber(_G.GetQuestLogRewardMoney(quest_id)) or 0 |
986 local actualXP, scaling = _G.GetQuestLogRewardArtifactXP(quest_id) | 977 --local actualXP, scaling = _G.GetQuestLogRewardArtifactXP(quest_id) |
987 entry["rewards"]["artifact_xp"] = ("%d:%d"):format(tonumber(actualXP) or 0, tonumber(scaling) or 0) | 978 --entry["rewards"]["artifact_xp"] = ("%d:%d"):format(tonumber(actualXP) or 0, tonumber(scaling) or 0) |
988 entry["rewards"]["honor"] = tonumber(_G.GetQuestLogRewardHonor(quest_id)) or 0 | 979 entry["rewards"]["honor"] = tonumber(_G.GetQuestLogRewardHonor(quest_id)) or 0 |
989 | 980 |
990 -- Record currencies | 981 -- Record currencies |
991 entry["rewards"]["currency_count"] = tonumber(_G.GetNumQuestLogRewardCurrencies(quest_id)) or 0 | 982 entry["rewards"]["currency_count"] = tonumber(_G.GetNumQuestLogRewardCurrencies(quest_id)) or 0 |
992 | 983 |
1017 end | 1008 end |
1018 | 1009 |
1019 | 1010 |
1020 function WDP:ProcessWorldQuests() | 1011 function WDP:ProcessWorldQuests() |
1021 -- Ignore if player is low level (there are some world quests before max level now, but we can collect enough data from 110s alone still) | 1012 -- Ignore if player is low level (there are some world quests before max level now, but we can collect enough data from 110s alone still) |
1022 if _G.UnitLevel("player") >= 110 then return end | 1013 if _G.UnitLevel("player") < 110 then return end |
1023 | 1014 |
1024 local current_ui_map_id = C_Map.GetBestMapForUnit("player") | 1015 local current_ui_map_id = C_Map.GetBestMapForUnit("player") |
1025 local bounty_maps = MapUtil.GetRelatedBountyZoneMaps(current_ui_map_id) | 1016 local bounty_maps = MapUtil.GetRelatedBountyZoneMaps(current_ui_map_id) |
1026 | 1017 |
1027 -- Iterate over zones in continent | 1018 -- Iterate over zones in continent |
1031 local api_data = C_TaskQuest.GetQuestsForPlayerByMapID(bounty_maps[i]); | 1022 local api_data = C_TaskQuest.GetQuestsForPlayerByMapID(bounty_maps[i]); |
1032 local continent_ui_map_id = MapUtil.GetMapParentInfo(bounty_maps[i], _G.Enum.UIMapType.Continent) | 1023 local continent_ui_map_id = MapUtil.GetMapParentInfo(bounty_maps[i], _G.Enum.UIMapType.Continent) |
1033 | 1024 |
1034 -- Iterate over the questIDs for each map, doing preload reward requests and creating SavedVariables entries | 1025 -- Iterate over the questIDs for each map, doing preload reward requests and creating SavedVariables entries |
1035 if api_data and type(api_data) == "table" and #api_data > 0 then | 1026 if api_data and type(api_data) == "table" and #api_data > 0 then |
1036 for _, current_data in ipairs(api_data) do | 1027 for j = 1, #api_data do |
1037 | 1028 |
1038 -- Check if we had a valid API table returned to us | 1029 -- Check if we had a valid API table returned to us |
1039 if current_data and type(current_data) == "table" and current_data["questId"] then | 1030 if api_data[j] and type(api_data[j]) == "table" and api_data[j].questId then |
1040 local quest_id = tonumber(current_data["questId"]) or 0 | 1031 local quest_id = tonumber(api_data[j].questId) or 0 |
1041 | 1032 |
1042 -- Check if we have quest data | 1033 -- Check if we have quest data |
1043 if quest_id > 0 and _G.HaveQuestData(quest_id) and QuestUtils_IsQuestWorldQuest(quest_id) and current_data["mapID"] == bounty_maps[i] then | 1034 if quest_id > 0 and _G.HaveQuestData(quest_id) and QuestUtils_IsQuestWorldQuest(quest_id) and api_data[j].mapID == bounty_maps[i] then |
1044 _G.C_TaskQuest.RequestPreloadRewardData(quest_id) | 1035 _G.C_TaskQuest.RequestPreloadRewardData(quest_id) |
1045 RecordWorldQuestData(quest_id, continent_ui_map_id, bounty_maps[i], current_data) | 1036 RecordWorldQuestData(quest_id, api_data[j]) |
1046 end | 1037 end |
1047 end | 1038 end |
1048 end | 1039 end |
1049 end | 1040 end |
1050 end | 1041 end |