From 22ea650ebcc99113b7ecdbc7f76f33da05bc51a5 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Mon, 21 Oct 2024 11:54:59 +0200 Subject: [PATCH] Add achievement sniffer --- FreshShit/AchievementSniffer/event.lua | 13 +++ FreshShit/AchievementSniffer/event2.lua | 9 ++ FreshShit/AchievementSniffer/info | 135 +++++++++++++++++++++++ FreshShit/AchievementSniffer/init.lua | 88 +++++++++++++++ FreshShit/AchievementSniffer/scratch.lua | 9 ++ 5 files changed, 254 insertions(+) create mode 100644 FreshShit/AchievementSniffer/event.lua create mode 100644 FreshShit/AchievementSniffer/event2.lua create mode 100644 FreshShit/AchievementSniffer/info create mode 100644 FreshShit/AchievementSniffer/init.lua create mode 100644 FreshShit/AchievementSniffer/scratch.lua diff --git a/FreshShit/AchievementSniffer/event.lua b/FreshShit/AchievementSniffer/event.lua new file mode 100644 index 0000000..47d5071 --- /dev/null +++ b/FreshShit/AchievementSniffer/event.lua @@ -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 \ No newline at end of file diff --git a/FreshShit/AchievementSniffer/event2.lua b/FreshShit/AchievementSniffer/event2.lua new file mode 100644 index 0000000..dee0021 --- /dev/null +++ b/FreshShit/AchievementSniffer/event2.lua @@ -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 \ No newline at end of file diff --git a/FreshShit/AchievementSniffer/info b/FreshShit/AchievementSniffer/info new file mode 100644 index 0000000..a9e972f --- /dev/null +++ b/FreshShit/AchievementSniffer/info @@ -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 \ No newline at end of file diff --git a/FreshShit/AchievementSniffer/init.lua b/FreshShit/AchievementSniffer/init.lua new file mode 100644 index 0000000..2c47441 --- /dev/null +++ b/FreshShit/AchievementSniffer/init.lua @@ -0,0 +1,88 @@ +---@class aura_env +---@field achievements table +---@field Scan fun(playerName: string) + +---@class WeakAurasSaved +---@field Cyka table>> + +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 = {} diff --git a/FreshShit/AchievementSniffer/scratch.lua b/FreshShit/AchievementSniffer/scratch.lua new file mode 100644 index 0000000..30860b8 --- /dev/null +++ b/FreshShit/AchievementSniffer/scratch.lua @@ -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)) \ No newline at end of file