Module:AchievementSystem: Difference between revisions
// via Wikitext Extension for VSCode |
// via Wikitext Extension for VSCode |
||
| Line 378: | Line 378: | ||
local userAchievements = Achievements.getUserAchievements(pageId) | local userAchievements = Achievements.getUserAchievements(pageId) | ||
return #userAchievements > 0 | return #userAchievements > 0 | ||
end | |||
-------------------------------------------------------------------------------- | |||
-- Check if a page/user has any badge-type achievements | |||
-- @param pageId - The page ID to check | |||
-- @param frame - The Scribunto frame object for preprocessing | |||
-- @return Boolean indicating if the page has any badge-type achievements | |||
-------------------------------------------------------------------------------- | |||
function Achievements.hasBadgeAchievements(pageId, frame) | |||
if not pageId or pageId == '' then | |||
return false | |||
end | |||
local userAchievements = Achievements.getUserAchievements(pageId) | |||
if #userAchievements == 0 then | |||
return false | |||
end | |||
local types = Achievements.loadTypes(frame) | |||
-- Build a lookup table for achievement types | |||
local typeDefinitions = {} | |||
for _, typeData in ipairs(types) do | |||
if typeData.id and typeData.type then | |||
typeDefinitions[typeData.id] = typeData | |||
end | |||
end | |||
-- Filter user achievements to only include badge types | |||
for _, achievement in ipairs(userAchievements) do | |||
local achType = achievement.type | |||
if achType and typeDefinitions[achType] and typeDefinitions[achType].type == "badge" then | |||
-- Found at least one badge, no need to check further | |||
return true | |||
end | |||
end | |||
-- No badge achievements were found | |||
return false | |||
end | end | ||