comparison Main.lua @ 535:4a7989584ae8 7.2.0-5

Rewrote World Quest recording to use a less-stateful (continent-based) method of gathering World Quests.
author MMOSimca
date Tue, 18 Apr 2017 20:30:31 -0400
parents 2bb33dbd3d7c
children ec2ee7b48c21
comparison
equal deleted inserted replaced
534:31d084e76340 535:4a7989584ae8
1001 end 1001 end
1002 1002
1003 1003
1004 -- Record data for a specific quest ID; reward data must be available or nothing will be recorded 1004 -- Record data for a specific quest ID; reward data must be available or nothing will be recorded
1005 -- When we reach this point, we've already checked for a valid mapID, questID, quest data, and worldQuestType 1005 -- When we reach this point, we've already checked for a valid mapID, questID, quest data, and worldQuestType
1006 local function RecordWorldQuestData(world_map_id, quest_id, api_data_table) 1006 local function RecordWorldQuestData(quest_id, continent_world_map_id, zone_world_map_id, api_data_table)
1007 1007
1008 -- Ensure we have location data and rewards (barely readable so putting it on multiple lines) 1008 -- Ensure we have location data and rewards (barely readable so putting it on multiple lines)
1009 -- (Honor is built in to the quest; it is not a sign rewards have been loaded) 1009 -- (Honor is built in to the quest; it is not a sign rewards have been loaded)
1010 if not api_data_table.x or not api_data_table.y or not api_data_table.floor or not 1010 if not api_data_table.x or not api_data_table.y or not api_data_table.floor or not
1011 (_G.GetQuestLogRewardXP(quest_id) > 0 or _G.GetNumQuestLogRewardCurrencies(quest_id) > 0 1011 (_G.GetQuestLogRewardXP(quest_id) > 0 or _G.GetNumQuestLogRewardCurrencies(quest_id) > 0
1012 or _G.GetNumQuestLogRewards(quest_id) > 0 or _G.GetQuestLogRewardMoney(quest_id) > 0 1012 or _G.GetNumQuestLogRewards(quest_id) > 0 or _G.GetQuestLogRewardMoney(quest_id) > 0
1013 or _G.GetQuestLogRewardArtifactXP(quest_id) > 0) then 1013 or _G.GetQuestLogRewardArtifactXP(quest_id) > 0) then
1014 return 1014 return
1015 end 1015 end
1016 1016
1017 -- Translate continent-level coordinates to zone-coordinates
1018 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
1019 local dX, dY = HereBeDragons:TranslateZoneCoordinates(oX, oY, continent_world_map_id, 0, zone_world_map_id, dFloor, false)
1020
1021 -- If the translation failed, stop here
1022 if not dX or not dY then return end
1023
1017 local entry = DBEntry("world_quests", quest_id) 1024 local entry = DBEntry("world_quests", quest_id)
1018
1019 if entry then 1025 if entry then
1020 1026
1021 -- Record location 1027 -- Record location
1022 entry["location"] = {} 1028 entry["location"] = {}
1023 entry["location"]["world_map_id"] = world_map_id 1029 entry["location"]["world_map_id"] = zone_world_map_id
1024 entry["location"]["x"] = (tonumber(api_data_table.x) or 0) * 100 1030 entry["location"]["x"] = dX * 100
1025 entry["location"]["y"] = (tonumber(api_data_table.y) or 0) * 100 1031 entry["location"]["y"] = dY * 100
1026 entry["location"]["floor"] = tonumber(api_data_table.floor) or 0 1032 entry["location"]["floor"] = dFloor
1027 1033
1028 -- Record simple rewards (XP, money, artifact XP, honor) 1034 -- Record simple rewards (XP, money, artifact XP, honor)
1029 entry["rewards"] = {} 1035 entry["rewards"] = {}
1030 entry["rewards"]["xp"] = tonumber(_G.GetQuestLogRewardXP(quest_id)) or 0 1036 entry["rewards"]["xp"] = tonumber(_G.GetQuestLogRewardXP(quest_id)) or 0
1031 entry["rewards"]["money"] = tonumber(_G.GetQuestLogRewardMoney(quest_id)) or 0 1037 entry["rewards"]["money"] = tonumber(_G.GetQuestLogRewardMoney(quest_id)) or 0
1065 1071
1066 function WDP:ProcessWorldQuests() 1072 function WDP:ProcessWorldQuests()
1067 -- 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) 1073 -- 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)
1068 if _G.UnitLevel("player") ~= 110 then return end 1074 if _G.UnitLevel("player") ~= 110 then return end
1069 1075
1070 local current_world_map_id = _G.GetCurrentMapAreaID() 1076 -- Get current continent and zones in current continent
1071 1077 local continentIndex, continentID = GetCurrentMapContinent()
1072 -- Iterate over known World Quest maps 1078 local continentMaps = { GetMapZones(continentIndex) }
1073 for i = 1, #private.WORLD_QUEST_MAP_IDS do 1079
1074 local world_map_id = private.WORLD_QUEST_MAP_IDS[i] 1080 -- Iterate over zones in continent
1075 1081 for i = 1, #continentMaps, 2 do
1076 -- Only bother checking the API if the world map in question is currently displayed 1082
1077 if current_world_map_id == world_map_id then 1083 -- Get data for World Quests
1078 1084 local api_data = C_TaskQuest.GetQuestsForPlayerByMapID(continentMaps[i], continentID);
1079 -- Get data for World Quests on map 1085
1080 local api_data = _G.C_TaskQuest.GetQuestsForPlayerByMapID(world_map_id) 1086 -- Iterate over the questIDs for each map, doing preload reward requests and creating SavedVariables entries
1081 1087 if api_data and type(api_data) == "table" and #api_data > 0 then
1082 -- Iterate over the questIDs for each map, doing preload reward requests and creating SavedVariables entries 1088 for _, current_data in ipairs(api_data) do
1083 if api_data and type(api_data) == "table" and #api_data > 0 then 1089
1084 for j = 1, #api_data do 1090 -- Check if we had a valid API table returned to us
1085 local current_data = api_data[j] 1091 if current_data and type(current_data) == "table" and current_data["questId"] then
1086 1092 local quest_id = tonumber(current_data["questId"]) or 0
1087 -- Check if we had a valid API table returned to us 1093
1088 if current_data and type(current_data) == "table" and current_data["questId"] then 1094 -- Check if we have quest data
1089 local quest_id = tonumber(current_data["questId"]) or 0 1095 if _G.HaveQuestData(quest_id) then
1090 1096 local tag_id, tag_name, world_quest_type, rarity, is_elite, tradeskill_line_index = _G.GetQuestTagInfo(quest_id)
1091 -- Check if we have quest data 1097
1092 if _G.HaveQuestData(quest_id) then 1098 -- Check for valid questID and whether or not it is a World Quest
1093 local tag_id, tag_name, world_quest_type, rarity, is_elite, tradeskill_line_index = _G.GetQuestTagInfo(quest_id) 1099 if quest_id > 0 and world_quest_type ~= nil then
1094 1100 _G.C_TaskQuest.RequestPreloadRewardData(quest_id)
1095 -- Check for valid questID and whether or not it is a World Quest 1101 RecordWorldQuestData(quest_id, continentID, continentMaps[i], current_data)
1096 if quest_id > 0 and world_quest_type ~= nil then
1097 _G.C_TaskQuest.RequestPreloadRewardData(quest_id)
1098 RecordWorldQuestData(world_map_id, quest_id, current_data)
1099 end
1100 end 1102 end
1101 end 1103 end
1102 end 1104 end
1103 end 1105 end
1104 end 1106 end