Add achievement sniffer

This commit is contained in:
2024-10-21 11:54:59 +02:00
parent 5c6b37731d
commit 22ea650ebc
5 changed files with 254 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
--- PLAYER_TARGET_CHANGED
function()
local targetGuid = UnitGUID("target")
if not targetGuid then return end
if not string.match(targetGuid, "Player") then return end
local targetName = UnitName("target")
if not aura_env.config.recsan and WeakAurasSaved.Cyka.AchievementSniffer[targetName] then return end
-- aura_env.Scan(targetName)
local canInspect = CanInspect("target", true)
if canInspect then
SetAchievementComparisonUnit("target")
end
end

View File

@@ -0,0 +1,9 @@
--- INSPECT_ACHIEVEMENT_READY
function()
local targetGuid = UnitGUID("target")
if not targetGuid then return end
if not string.match(targetGuid, "Player") then return end
local targetName = UnitName("target")
if not aura_env.config.recsan and WeakAurasSaved.Cyka.AchievementSniffer[targetName] then return end
aura_env.Scan(targetName)
end

View File

@@ -0,0 +1,135 @@
main achievement frame is AchievementFrame
The tabs are
AchievementFrameTab1 2 3
First is "Achievements", 2nd guild and 3rd statistics
Statistics might also be useful but that would be hard to tell, for now
AchievementFrame > AchievementFrameComparison
The comparison frame is AchievementFrameComparisonContainer (N/A)
Scroll buttons are AchievementFrameComparisonContainerScrollBarScrollDownButton (scrollDown) and AchievementFrameComparisonContainerScrollBarScrollUpButton (scrollUp)
The actual individual achievement data is in
AchievementFrameComparisonContainerScrollChild (ScrollChild) (not a typo)
It has achievements listed as:
AchievementFrameComparisonContainerButton1 .. 10
Always seems to be 10
Scrolling should move 1 new into the view and 1 old out of view
The buttons themselves represent one row (one achievement)
Our achievement is found in
AchievementFrameComparisonContainerButton1Player (player)
AchievementFrameComparisonContainerButton1Friend (friend)
Ours has names while friend has no names
So we will have to use names from Player and dates from Friend
Name, title, is under AchievementFrameComparisonContainerButton1PlayerLabel (label)
Friend date achieved is under AchievementFrameComparisonContainerButton1FriendStatus (status)
We can also get achievement ID from the button frame
AchievementFrameComparisonContainerButton1P under the "id" property
Categories are under
AchievementFrameCategories (N/A) > AchievementFrameCategoriesContainer (N/A)
Structure is the same as AchievementFrameComparisonContainer
We have scroll child and scroll up/down
Although there's no scrolling so I'm not sure what we scroll
Not true - the buttons are categories to be expanded into
And clicking one does expand
So after we click we have to recalculate their positions
In AchievementFrameCategoriesContainer we have many buttons which correspond to categories
The best way of browsing them that I can see is reading the title of each
Since we are only interested in a few
AchievementFrameCategoriesContainerButton1 .. n
The title is the same structure as the achievement title
AchievementFrameCategoriesContainerButton1Label (label)
Under each button of course
We can also get the category ID and name from the button frame
AchievementFrameCategoriesContainerButton1
Under "categoryID" and "name"
[11:20 PM] [Virag's DT]: 23:20:04 INSPECT_ACHIEVEMENT_READY - (2) table: 000001AF07021540
Fires when the achievement frame is ready
Argument #2 is the GUID of the player
None is fired when the frame is closed...
I guess we'll have to check each frame we go over
See
canInspect = CanInspect("unit", showError)
Arguments:
unit - A unit to inspect (string, unitID)
showError - True to fire a UI_ERROR_MESSAGE event (causing the default UI to display an error message) if the unit cannot be inspected; otherwise false (boolean)
Returns:
canInspect - 1 if the unit can be inspected; otherwise nil (1nil)
Actually nevermind, this seems much easier and simpler:
completed, month, day, year = GetAchievementComparisonInfo(achievementID)
completed
boolean - Returns true/false depending on whether the unit has completed the achievement or not.
month
number - Month in which the unit has completed the achievement. Returns nil if completed is false.
day
number - Day of the month in which the unit has completed the achievement. Returns nil if completed is false.
year
number - Year (two digits, 21st century is assumed) in which the unit has completed the achievement. Returns nil if completed is false.
Only accurate after the after SetAchievementComparisonUnit is called and the INSPECT_ACHIEVEMENT_READY event has fired.
success = SetAchievementComparisonUnit(unit)
success
boolean - Returns true/false depending on whether the unit is valid.
-> INSPECT_ACHIEVEMENT_READY
522 -- Somebody Likes Me
523 -- 5 Exalted Reputations
524 -- 10 Exalted Reputations
521 -- 15 Exalted Reputations
520 -- 20 Exalted Reputations
519 -- 25 Exalted Reputations
518 -- 30 Exalted Reputations
1556 -- 25 Fish
1557 -- 50 Fish
1558 -- 100 Fish
238 -- An Honorable Kill
513 -- 100 Honorable Kills
515 -- 500 Honorable Kills
516 -- 1000 Honorable Kills
512 -- 5000 Honorable Kills
509 -- 10000 Honorable Kills
239 -- 25000 Honorable Kills
503 -- 50 Quests Completed
504 -- 100 Quests Completed
505 -- 250 Quests Completed
506 -- 500 Quests Completed
507 -- 1000 Quests Completed
1017 -- Can I Keep Him?
15 -- Plenty of Pets
1248 -- Plethora of Pets
1250 -- Shop Smart, Shop Pet...Smart
2516 -- Lil' Game Hunter
5876 -- Petting Zoo
11188 -- Broken Isles Explorer
11190 -- Broken Isles Pathfinder, Part One
11157 -- Loremaster of Legion
10763 -- Azsuna Matata
10790 -- Vrykul Story, Bro
11124 -- Good Suramaritan
10059 -- Ain't No Mountain High Enough
10698 -- That's Val'sharah Folks!
10672 -- Broken Isles Diplomat
10665 -- Explore Azsuna
10666 -- Explore Val'sharah
10667 -- Explore Highmountain
10668 -- Explore Stormheim
10669 -- Explore Suramar
12069 -- Explore Argus
2141 -- Stable Keeper
2142 -- Filling Up The Barn
2143 -- Leading the Cavalry
7382 -- Dynamic Duo
7383 -- Terrific Trio
7384 -- Quintessential Quintet
245 -- That Takes Class

View File

@@ -0,0 +1,88 @@
---@class aura_env
---@field achievements table<number, string>
---@field Scan fun(playerName: string)
---@class WeakAurasSaved
---@field Cyka table<string, table<string, table<number, string>>>
if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end
if not WeakAurasSaved.Cyka.AchievementSniffer then WeakAurasSaved.Cyka.AchievementSniffer = {} end
aura_env.achievements = {
522, -- Somebody Likes Me
523, -- 5 Exalted Reputations
524, -- 10 Exalted Reputations
521, -- 15 Exalted Reputations
520, -- 20 Exalted Reputations
519, -- 25 Exalted Reputations
518, -- 30 Exalted Reputations
1556, -- 25 Fish
1557, -- 50 Fish
1558, -- 100 Fish
238, -- An Honorable Kill
513, -- 100 Honorable Kills
515, -- 500 Honorable Kills
516, -- 1000 Honorable Kills
512, -- 5000 Honorable Kills
509, -- 10000 Honorable Kills
239, -- 25000 Honorable Kills
503, -- 50 Quests Completed
504, -- 100 Quests Completed
505, -- 250 Quests Completed
506, -- 500 Quests Completed
507, -- 1000 Quests Completed
1017, -- Can I Keep Him?
15, -- Plenty of Pets
1248, -- Plethora of Pets
1250, -- Shop Smart, Shop Pet...Smart
2516, -- Lil' Game Hunter
5876, -- Petting Zoo
11188, -- Broken Isles Explorer
11190, -- Broken Isles Pathfinder, Part One
11157, -- Loremaster of Legion
10763, -- Azsuna Matata
10790, -- Vrykul Story, Bro
11124, -- Good Suramaritan
10059, -- Ain't No Mountain High Enough
10698, -- That's Val'sharah Folks!
10672, -- Broken Isles Diplomat
10665, -- Explore Azsuna
10666, -- Explore Val'sharah
10667, -- Explore Highmountain
10668, -- Explore Stormheim
10669, -- Explore Suramar
12069, -- Explore Argus
2141, -- Stable Keeper
2142, -- Filling Up The Barn
2143, -- Leading the Cavalry
7382, -- Dynamic Duo
7383, -- Terrific Trio
7384, -- Quintessential Quintet
245, -- That Takes Class
}
---@param playerName string
aura_env.Scan = function(playerName)
WeakAurasSaved.Cyka.AchievementSniffer[playerName] = {}
for i, aid in ipairs(aura_env.achievements) do
local completed, month, day, year = GetAchievementComparisonInfo(aid)
local date = ""
if completed then
---@type string
local yearstr = "" .. year
if year < 100 then yearstr = "20" .. year end
date = string.format("%04d-%02d-%02d", yearstr, month, day)
end
local data = {
id = aid,
date = date,
completed = completed,
}
WeakAurasSaved.Cyka.AchievementSniffer[playerName][aid] = data
end
end
--/run WeakAurasSaved.Cyka.AchievementSniffer = {}

View File

@@ -0,0 +1,9 @@
local year = 20
local month = 7
local day = 12
if year < 100 then
year = "20" .. year
end
print(string.format("%4d-%02d-%02d", year, month, day))