18 Commits

6 changed files with 164 additions and 85 deletions

View File

@@ -8,10 +8,9 @@ externals:
url: https://repos.wowace.com/wow/ace3/trunk/CallbackHandler-1.0 url: https://repos.wowace.com/wow/ace3/trunk/CallbackHandler-1.0
tag: latest tag: latest
Libs/LibQTip-1.0: Libs/LibQTip-1.0:
url: https://repos.wowace.com/wow/libqtip-1-0 url: https://repos.curseforge.com/wow/libqtip-1-0
tag: latest
Libs/LibDataBroker-1.1: Libs/LibDataBroker-1.1:
url: git://github.com/tekkub/libdatabroker-1-1.git url: https://github.com/tekkub/libdatabroker-1-1
tag: latest tag: latest
Libs/AceLocale-3.0: Libs/AceLocale-3.0:
url: https://repos.wowace.com/wow/ace3/trunk/AceLocale-3.0 url: https://repos.wowace.com/wow/ace3/trunk/AceLocale-3.0
@@ -40,3 +39,5 @@ externals:
Libs/LibDBIcon-1.0: Libs/LibDBIcon-1.0:
url: https://repos.wowace.com/wow/libdbicon-1-0/trunk/LibDBIcon-1.0 url: https://repos.wowace.com/wow/libdbicon-1-0/trunk/LibDBIcon-1.0
tag: latest tag: latest
enable-nolib-creation: no

View File

@@ -9,7 +9,8 @@ private.QUESTS = {
LOCATION = { 34.4, 46.8 }, LOCATION = { 34.4, 46.8 },
MATS = { { COUNT = 1, ITEM_ID = 74864 }, { COUNT = 1, ITEM_ID = 74839 } }, MATS = { { COUNT = 1, ITEM_ID = 74864 }, { COUNT = 1, ITEM_ID = 74839 } },
REP_ID = 1277, REP_ID = 1277,
RECIPE_ID = 104302 RECIPE_ID = 104302,
COMPLETED = false
}, },
[30386] = { [30386] = {
NAME = L["A Dish for Ella"], NAME = L["A Dish for Ella"],
@@ -17,7 +18,8 @@ private.QUESTS = {
LOCATION = { 31.6, 58.0 }, LOCATION = { 31.6, 58.0 },
MATS = { { COUNT = 1, ITEM_ID = 74857 } }, MATS = { { COUNT = 1, ITEM_ID = 74857 } },
REP_ID = 1275, REP_ID = 1275,
RECIPE_ID = 104307 RECIPE_ID = 104307,
COMPLETED = false
}, },
[30421] = { [30421] = {
NAME = L["A Dish for Farmer Fung"], NAME = L["A Dish for Farmer Fung"],
@@ -25,7 +27,8 @@ private.QUESTS = {
LOCATION = { 48.2, 33.8 }, LOCATION = { 48.2, 33.8 },
MATS = { { COUNT = 1, ITEM_ID = 74839 } }, MATS = { { COUNT = 1, ITEM_ID = 74839 } },
REP_ID = 1283, REP_ID = 1283,
RECIPE_ID = 104310 RECIPE_ID = 104310,
COMPLETED = false
}, },
[30427] = { [30427] = {
NAME = L["A Dish for Fish"], NAME = L["A Dish for Fish"],
@@ -33,7 +36,8 @@ private.QUESTS = {
LOCATION = { 41.6, 30.0 }, LOCATION = { 41.6, 30.0 },
MATS = { { COUNT = 2, ITEM_ID = 74865 } }, MATS = { { COUNT = 2, ITEM_ID = 74865 } },
REP_ID = 1282, REP_ID = 1282,
RECIPE_ID = 104311 RECIPE_ID = 104311,
COMPLETED = false
}, },
[30390] = { [30390] = {
NAME = L["A Dish for Gina"], NAME = L["A Dish for Gina"],
@@ -41,7 +45,8 @@ private.QUESTS = {
LOCATION = { 53.2, 51.6 }, LOCATION = { 53.2, 51.6 },
MATS = { { COUNT = 1, ITEM_ID = 74856 } }, MATS = { { COUNT = 1, ITEM_ID = 74856 } },
REP_ID = 1281, REP_ID = 1281,
RECIPE_ID = 104304 RECIPE_ID = 104304,
COMPLETED = false
}, },
[30414] = { [30414] = {
NAME = L["A Dish for Haohan"], NAME = L["A Dish for Haohan"],
@@ -49,7 +54,8 @@ private.QUESTS = {
LOCATION = { 44.6, 34.0 }, LOCATION = { 44.6, 34.0 },
MATS = { { COUNT = 1, ITEM_ID = 74833 } }, MATS = { { COUNT = 1, ITEM_ID = 74833 } },
REP_ID = 1279, REP_ID = 1279,
RECIPE_ID = 104298 RECIPE_ID = 104298,
COMPLETED = false
}, },
[30439] = { [30439] = {
NAME = L["A Dish for Jogu"], NAME = L["A Dish for Jogu"],
@@ -57,7 +63,8 @@ private.QUESTS = {
LOCATION = { 53.6, 52.4 }, LOCATION = { 53.6, 52.4 },
MATS = { { COUNT = 2, ITEM_ID = 74841 } }, MATS = { { COUNT = 2, ITEM_ID = 74841 } },
REP_ID = 1273, REP_ID = 1273,
RECIPE_ID = 104301 RECIPE_ID = 104301,
COMPLETED = false
}, },
[30396] = { [30396] = {
NAME = L["A Dish for Old Hillpaw"], NAME = L["A Dish for Old Hillpaw"],
@@ -65,7 +72,8 @@ private.QUESTS = {
LOCATION = { 31.0, 53.0 }, LOCATION = { 31.0, 53.0 },
MATS = { { COUNT = 1, ITEM_ID = 74837 }, { COUNT = 5, ITEM_ID = 74841 } }, MATS = { { COUNT = 1, ITEM_ID = 74837 }, { COUNT = 5, ITEM_ID = 74841 } },
REP_ID = 1276, REP_ID = 1276,
RECIPE_ID = 104305 RECIPE_ID = 104305,
COMPLETED = false
}, },
[30408] = { [30408] = {
NAME = L["A Dish for Sho"], NAME = L["A Dish for Sho"],
@@ -73,7 +81,8 @@ private.QUESTS = {
LOCATION = { 29.6, 30.6 }, LOCATION = { 29.6, 30.6 },
MATS = { { COUNT = 1, ITEM_ID = 74856 }, { COUNT = 5, ITEM_ID = 74848 } }, MATS = { { COUNT = 1, ITEM_ID = 74856 }, { COUNT = 5, ITEM_ID = 74848 } },
REP_ID = 1278, REP_ID = 1278,
RECIPE_ID = 104299 RECIPE_ID = 104299,
COMPLETED = false
}, },
[30433] = { [30433] = {
NAME = L["A Dish for Tina"], NAME = L["A Dish for Tina"],
@@ -81,6 +90,7 @@ private.QUESTS = {
LOCATION = { 45.0, 33.8 }, LOCATION = { 45.0, 33.8 },
MATS = { { COUNT = 1, ITEM_ID = 74859 }, { COUNT = 5, ITEM_ID = 74843 } }, MATS = { { COUNT = 1, ITEM_ID = 74859 }, { COUNT = 5, ITEM_ID = 74843 } },
REP_ID = 1280, REP_ID = 1280,
RECIPE_ID = 104308 RECIPE_ID = 104308,
COMPLETED = false
} }
} }

View File

@@ -20,7 +20,7 @@ L["A Dish for Tina"] = true
L["|cFF00FF00Complete|r"] = true L["|cFF00FF00Complete|r"] = true
L["|cFFFF0000Not Complete|r"] = true L["|cFFFF0000Not Complete|r"] = true
L["|cFFFFFF00Click|r a quest in the tooltip to set a TomTom waypoint at the farmer's home"] = true L["|cFFFFFF00Click|r a quest in the tooltip to set a waypoint at the farmer's home"] = true
L["|cFFFFFF00Click|r the main button to toggle whether the tooltip stays open"] = true L["|cFFFFFF00Click|r the main button to toggle whether the tooltip stays open"] = true
L["|cFFFFFF00Right Click|r the main button to cycle through which ingredient to track"] = true L["|cFFFFFF00Right Click|r the main button to cycle through which ingredient to track"] = true
L["|cFFFFFF00Ctrl-Click|r the main button to queue craftable foods in Skillet"] = true L["|cFFFFFF00Ctrl-Click|r the main button to queue craftable foods in Skillet"] = true
@@ -34,7 +34,7 @@ L["Need"] = true
L["Gather:"] = true L["Gather:"] = true
L["Done"] = true L["Done"] = true
L["Disabled until level 90"] = true L["Disabled until level 10"] = true
L["Best Friends with everyone"] = true L["Best Friends with everyone"] = true

View File

@@ -197,8 +197,7 @@ function TillerTracker:OnInitialize()
private.pinned = false private.pinned = false
private.need_index = 1 private.need_index = 1
private.loaded = false private.loaded = false
private.item_wait_table = {} private.item_name_table = {}
private.item_wait_count = 0
-- Get rid of settings from before AceDB -- Get rid of settings from before AceDB
if TillerTrackerDB then if TillerTrackerDB then
@@ -258,33 +257,26 @@ function TillerTracker:OnEnableCore()
TillerTracker:Print(L["Loading..."]) TillerTracker:Print(L["Loading..."])
LDB.text = L["Loading..."] LDB.text = L["Loading..."]
-- Register to get item info events for now -- Load item info from cache
self:RegisterEvent("GET_ITEM_INFO_RECEIVED")
-- Attempt to load the cache
TillerTracker:LoadCache() TillerTracker:LoadCache()
-- If everything is cached we're good to go
if (private.item_wait_count == 0) then
TillerTracker:OnLoaded(self)
end
end end
function TillerTracker:LoadCache() function TillerTracker:LoadCache()
local item_count = 0
local item_loaded_count = 0
local item_table = {}
private.item_name_table = {}
-- Loop over each quest in the data -- Loop over each quest in the data
for _, quest_info in pairs(private.QUESTS) do for _, quest_info in pairs(private.QUESTS) do
-- Get the item ID of the food -- Get the item ID of the food
local food_id = quest_info["FOOD_ID"] local food_id = quest_info["FOOD_ID"]
-- Try to get the info for the food -- Add the food to the list of items
local food_name = GetItemInfo(food_id) item_table[food_id] = Item:CreateFromItemID(food_id)
item_count = item_count + 1
-- If the information wasn't available add it to the list of waiting items
if (food_name == nil) then
private.item_wait_table[food_id] = true
private.item_wait_count = private.item_wait_count + 1
end
-- Loop over the mats required to cook the food for the quest -- Loop over the mats required to cook the food for the quest
for _, mat_data in pairs(quest_info["MATS"]) do for _, mat_data in pairs(quest_info["MATS"]) do
@@ -292,32 +284,29 @@ function TillerTracker:LoadCache()
-- Get the item ID of the mat -- Get the item ID of the mat
local mat_id = mat_data["ITEM_ID"] local mat_id = mat_data["ITEM_ID"]
-- Try to get the info for the mat -- Add the mat to the list of items
local mat_name = GetItemInfo(mat_id) if (item_table[mat_id] == nil) then
item_table[mat_id] = Item:CreateFromItemID(mat_id)
-- If the information wasn't available add it to the list of waiting items item_count = item_count + 1
if (mat_name == nil) then
if (private.item_wait_table[mat_id] == nil) then
private.item_wait_table[mat_id] = true
private.item_wait_count = private.item_wait_count + 1
end
end end
end end
end end
end
function TillerTracker:GET_ITEM_INFO_RECEIVED() -- Loop over all items we need to cache
for id, _ in pairs(private.item_wait_table) do for _, item in pairs(item_table) do
if GetItemInfo(id) then
private.item_wait_table[id] = nil
private.item_wait_count = private.item_wait_count - 1 -- Wait for the item to load
end item:ContinueOnItemLoad(function()
end
-- If everything is cached we're good to go -- Save the name
if (private.item_wait_count == 0) then private.item_name_table[item:GetItemID()] = item:GetItemName()
TillerTracker:OnLoaded(self) item_loaded_count = item_loaded_count + 1
-- If everything is cached we're good to go
if (item_count == item_loaded_count) then
TillerTracker:OnLoaded(self)
end
end)
end end
end end
@@ -326,9 +315,6 @@ function TillerTracker:OnLoaded(self)
TillerTracker:Print(L["Loaded"]) TillerTracker:Print(L["Loaded"])
LDB.text = L["Loaded"] LDB.text = L["Loaded"]
-- Done with item info events
self:UnregisterEvent("GET_ITEM_INFO_RECEIVED")
self:RegisterEvent("QUEST_LOG_UPDATE") self:RegisterEvent("QUEST_LOG_UPDATE")
self:RegisterEvent("BAG_UPDATE") self:RegisterEvent("BAG_UPDATE")
@@ -340,14 +326,16 @@ end
local function Entry_OnMouseUp(frame, info, button) local function Entry_OnMouseUp(frame, info, button)
if button == "LeftButton" then if button == "LeftButton" then
if not _G.TomTom then
return
end
local m = TomTom:GetCurrentPlayerPosition()
local location = info["LOCATION"] local location = info["LOCATION"]
_G.TomTom:AddWaypoint(m, location[1] / 100, location[2] / 100, { title = info["NAME"] }) if _G.TomTom then
_G.TomTom:AddWaypoint(376, location[1] / 100, location[2] / 100, { title = info["NAME"] })
elseif C_Map.CanSetUserWaypointOnMap then
if C_Map.CanSetUserWaypointOnMap(376) then
local mapPoint = UiMapPoint.CreateFromCoordinates(376, location[1] / 100, location[2] / 100)
C_Map.SetUserWaypoint(mapPoint)
end
end
end end
end end
@@ -363,16 +351,20 @@ local function SetSort(cell, sort)
private.db.global.sort_dir = "ASC" private.db.global.sort_dir = "ASC"
end end
if not private.loaded then
return
end
TillerTracker:UpdateData() TillerTracker:UpdateData()
TillerTracker:UpdateTooltip() TillerTracker:UpdateTooltip()
end end
function TillerTracker:ReputationDone(reputationId) function TillerTracker:ReputationDone(reputationId)
-- Get the reputation information -- Get the reputation information
local _, friendRep = GetFriendshipReputation(reputationId) local friendRep = C_GossipInfo.GetFriendshipReputation(reputationId).standing
-- Done if over exalted -- Done if over exalted
return (friendRep > 42000) return (friendRep >= 42000)
end end
function TillerTracker:AllReputationsDone() function TillerTracker:AllReputationsDone()
@@ -385,9 +377,25 @@ function TillerTracker:AllReputationsDone()
return true return true
end end
function TillerTracker:GetAllCompletedQuestIDs()
if C_QuestLog.GetAllCompletedQuestIDs then
return C_QuestLog.GetAllCompletedQuestIDs()
elseif GetQuestsCompleted then
local completedQuestIds = {}
local questsCompleted = GetQuestsCompleted()
for quest_id in pairs(questsCompleted) do
table.insert(completedQuestIds, quest_id)
end
return completedQuestIds
end
end
function TillerTracker:UpdateData() function TillerTracker:UpdateData()
-- Get information on all quests completed -- Get information on all quests completed
local questsCompleted = C_QuestLog.GetAllCompletedQuestIDs() local questsCompleted = TillerTracker:GetAllCompletedQuestIDs()
-- Create a table to store our current inventory of required mats -- Create a table to store our current inventory of required mats
local inv_table = {} local inv_table = {}
@@ -399,6 +407,9 @@ function TillerTracker:UpdateData()
-- Loop over each quest in the data -- Loop over each quest in the data
for _, quest_info in pairs(private.QUESTS) do for _, quest_info in pairs(private.QUESTS) do
-- Reset completed to false
quest_info["COMPLETED"] = false
-- Loop over the mats required to cook the food for the quest -- Loop over the mats required to cook the food for the quest
for _, mat_data in pairs(quest_info["MATS"]) do for _, mat_data in pairs(quest_info["MATS"]) do
@@ -413,6 +424,15 @@ function TillerTracker:UpdateData()
end end
end end
-- Loop over each quest completed
for _, quest_id in pairs(questsCompleted) do
-- Set completed to true if it is one we're tracking
if (private.QUESTS[quest_id]) then
private.QUESTS[quest_id]["COMPLETED"] = true
end
end
-- Create a table to hold the information to display for each quest -- Create a table to hold the information to display for each quest
private.quest_table = {} private.quest_table = {}
private.quest_count = 0 private.quest_count = 0
@@ -427,7 +447,7 @@ function TillerTracker:UpdateData()
local food_id = quest_info["FOOD_ID"] local food_id = quest_info["FOOD_ID"]
-- Get the name of the food for display -- Get the name of the food for display
local food_name = GetItemInfo(food_id) local food_name = private.item_name_table[food_id]
-- Get how many of the food we have in our bags -- Get how many of the food we have in our bags
local food_count = GetItemCount(food_id, true, false) local food_count = GetItemCount(food_id, true, false)
@@ -444,7 +464,7 @@ function TillerTracker:UpdateData()
local quest_status = "" local quest_status = ""
local can_craft = 0 local can_craft = 0
if (questsCompleted[quest_id]) then if (quest_info["COMPLETED"]) then
-- Quest has already been completed today -- Quest has already been completed today
quest_status = L["|cFF00FF00Complete|r"] quest_status = L["|cFF00FF00Complete|r"]
else else
@@ -488,7 +508,7 @@ function TillerTracker:UpdateData()
if (mat_count > 0) then if (mat_count > 0) then
-- Get the name of the mat -- Get the name of the mat
local mat_name = GetItemInfo(mat_id) local mat_name = private.item_name_table[mat_id]
-- Set the mat need string to the count needed and the name -- Set the mat need string to the count needed and the name
local mat_need = mat_count .. " " .. mat_name local mat_need = mat_count .. " " .. mat_name
@@ -581,8 +601,8 @@ function TillerTracker:UpdateTooltip()
-- Add the line with info about the current quest -- Add the line with info about the current quest
line = private.tooltip:AddLine(quest["NAME_DISPLAY"], quest["FOOD_DISPLAY"], quest["AMOUNT_DISPLAY"], quest["STATUS"], quest["NEED"]) line = private.tooltip:AddLine(quest["NAME_DISPLAY"], quest["FOOD_DISPLAY"], quest["AMOUNT_DISPLAY"], quest["STATUS"], quest["NEED"])
-- If TomTom is installed then set the line script -- Set the line script if TomTom is installed or the game supports waypoints
if _G.TomTom then if C_Map.CanSetUserWaypointOnMap or _G.TomTom then
private.tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, { NAME = quest["NAME"], LOCATION = quest["LOCATION"] }) private.tooltip:SetLineScript(line, "OnMouseUp", Entry_OnMouseUp, { NAME = quest["NAME"], LOCATION = quest["LOCATION"] })
end end
end end
@@ -596,10 +616,10 @@ function TillerTracker:UpdateTooltip()
line = private.tooltip:AddLine() line = private.tooltip:AddLine()
private.tooltip:SetCell(line, 1, L["|cFFFFFF00Right Click|r the main button to cycle through which ingredient to track"], "LEFT", private.tooltip:GetColumnCount()) private.tooltip:SetCell(line, 1, L["|cFFFFFF00Right Click|r the main button to cycle through which ingredient to track"], "LEFT", private.tooltip:GetColumnCount())
-- If TomTom is installed then add a hint to the end -- Add a hint to the end if TomTom is installed or the game supports waypoints
if _G.TomTom then if C_Map.CanSetUserWaypointOnMap or _G.TomTom then
line = private.tooltip:AddLine() line = private.tooltip:AddLine()
private.tooltip:SetCell(line, 1, L["|cFFFFFF00Click|r a quest in the tooltip to set a TomTom waypoint at the farmer's home"], "LEFT", private.tooltip:GetColumnCount()) private.tooltip:SetCell(line, 1, L["|cFFFFFF00Click|r a quest in the tooltip to set a waypoint at the farmer's home"], "LEFT", private.tooltip:GetColumnCount())
end end
-- Add the Skillet hint if installed -- Add the Skillet hint if installed
@@ -627,7 +647,7 @@ function TillerTracker:UpdateText()
-- Loop over the need table -- Loop over the need table
for need_id, need_count in pairs(private.need_table) do for need_id, need_count in pairs(private.need_table) do
if need_index == private.need_index then if need_index == private.need_index then
LDB.text = L["Gather:"] .. " " .. need_count .. " " .. GetItemInfo(need_id) LDB.text = L["Gather:"] .. " " .. need_count .. " " .. private.item_name_table[need_id]
return return
end end
@@ -648,6 +668,10 @@ function LDB.OnEnter(self)
end end
function TillerTracker:QUEST_LOG_UPDATE() function TillerTracker:QUEST_LOG_UPDATE()
if not private.loaded then
return
end
TillerTracker:UpdateData() TillerTracker:UpdateData()
TillerTracker:UpdateText() TillerTracker:UpdateText()
@@ -659,6 +683,10 @@ function TillerTracker:QUEST_LOG_UPDATE()
end end
function TillerTracker:BAG_UPDATE() function TillerTracker:BAG_UPDATE()
if not private.loaded then
return
end
TillerTracker:UpdateData() TillerTracker:UpdateData()
TillerTracker:UpdateText() TillerTracker:UpdateText()
@@ -688,7 +716,12 @@ function TillerTracker:ChatCommand(input)
command = command:lower() command = command:lower()
if command == L["config"]:lower() then if command == L["config"]:lower() then
InterfaceOptionsFrame_OpenToCategory(private.optionsFrame) if Settings then
Settings.OpenToCategory("Tiller Tracker")
elseif InterfaceOptionsFrame_OpenToCategory then
InterfaceOptionsFrame_OpenToCategory("Tiller Tracker")
InterfaceOptionsFrame_OpenToCategory("Tiller Tracker")
end
elseif command == L["minimap"]:lower() then elseif command == L["minimap"]:lower() then
private.db.global.minimap_icon.hide = not private.db.global.minimap_icon.hide private.db.global.minimap_icon.hide = not private.db.global.minimap_icon.hide
TillerTracker:UpdateMinimapConfig() TillerTracker:UpdateMinimapConfig()
@@ -718,6 +751,10 @@ end
function TillerTracker:SetPlanAhead(value) function TillerTracker:SetPlanAhead(value)
private.db.global.plan_ahead = value private.db.global.plan_ahead = value
if not private.loaded then
return
end
TillerTracker:UpdateData() TillerTracker:UpdateData()
TillerTracker:UpdateText() TillerTracker:UpdateText()

View File

@@ -0,0 +1,31 @@
## Interface: 110205
## Title: Tiller Tracker
## Version: 11.0.7
## Notes: Helps with the daily Tiller food quests ("A Dish for...") by keeping track of what quests have been completed that day, how many dishes need to be cooked, and what materials are required.
## Author: Amanoa
## SavedVariables: TillerTrackerDB
## OptionalDeps: Ace3, AceEvent-3.0, LibQTip-1.0, LibStub, AceTimer-3.0, AceConsole-3.0
#@no-lib-strip@
Libs\LibStub\LibStub.lua
Libs\CallbackHandler-1.0\CallbackHandler-1.0.xml
Libs\AceAddon-3.0\AceAddon-3.0.xml
Libs\AceConsole-3.0\AceConsole-3.0.xml
Libs\AceEvent-3.0\AceEvent-3.0.xml
Libs\AceLocale-3.0\AceLocale-3.0.xml
Libs\AceTimer-3.0\AceTimer-3.0.xml
Libs\AceDB-3.0\AceDB-3.0.xml
Libs\AceGUI-3.0\AceGUI-3.0.xml
Libs\AceConfig-3.0\AceConfig-3.0.xml
Libs\LibQTip-1.0\lib.xml
Libs\LibDataBroker-1.1\LibDataBroker-1.1.lua
Libs\LibDBIcon-1.0\LibDBIcon-1.0.lua
#@end-no-lib-strip@
Locale\enUS.lua
Locale\frFR.lua
Locale\deDE.lua
Data.lua
Sort.lua
TillerTracker.lua

View File

@@ -1,6 +1,6 @@
## Interface: 90001 ## Interface: 50502
## Title: Tiller Tracker ## Title: Tiller Tracker
## Version: 9.0.2 ## Version: 11.0.7
## Notes: Helps with the daily Tiller food quests ("A Dish for...") by keeping track of what quests have been completed that day, how many dishes need to be cooked, and what materials are required. ## Notes: Helps with the daily Tiller food quests ("A Dish for...") by keeping track of what quests have been completed that day, how many dishes need to be cooked, and what materials are required.
## Author: Amanoa ## Author: Amanoa
## SavedVariables: TillerTrackerDB ## SavedVariables: TillerTrackerDB