From 3c60dd9cfd386e57e8445166ab41a92b77777f7e Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 1 Aug 2021 20:03:57 -0500 Subject: add #1 leaderboards count leaderboard --- build/database.js | 63 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 18 deletions(-) (limited to 'build/database.js') diff --git a/build/database.js b/build/database.js index 6edb29b..be001ff 100644 --- a/build/database.js +++ b/build/database.js @@ -63,7 +63,8 @@ let accountsCollection; const leaderboardInfos = { highest_crit_damage: 'This leaderboard is capped at the integer limit because Hypixel, look at the highest critical damage leaderboard instead.', highest_critical_damage: 'uhhhhh yeah idk either', - leaderboards_count: 'This leaderboard counts how many leaderboards people are in the top 100 for.', + leaderboards_count: 'This leaderboard counts how many leaderboards players are in the top 100 for.', + top_1_leaderboards_count: 'This leaderboard counts how many leaderboards players are #1 for.', }; async function connect() { if (!process.env.db_uri) @@ -183,7 +184,8 @@ async function fetchAllMemberLeaderboardAttributes() { 'first_join', 'purse', 'visited_zones', - 'leaderboards_count' + 'leaderboards_count', + 'top_1_leaderboards_count' ]; } exports.fetchAllMemberLeaderboardAttributes = fetchAllMemberLeaderboardAttributes; @@ -369,6 +371,7 @@ async function fetchMemberLeaderboardSpots(player, profile) { } exports.fetchMemberLeaderboardSpots = fetchMemberLeaderboardSpots; async function getLeaderboardRequirement(name, leaderboardType) { + var _a, _b; let leaderboard; if (leaderboardType === 'member') leaderboard = await fetchMemberLeaderboardRaw(name); @@ -376,47 +379,71 @@ async function getLeaderboardRequirement(name, leaderboardType) { leaderboard = await fetchProfileLeaderboardRaw(name); // if there's more than 100 items, return the 100th. if there's less, return null if (leaderboard.length >= leaderboardMax) - return leaderboard[leaderboardMax - 1].value; + return { + top_100: leaderboard[leaderboardMax - 1].value, + top_1: leaderboard[1].value + }; + else if (leaderboard.length >= 1) + return { + top_100: null, + top_1: (_b = (_a = leaderboard[1]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : null + }; else - return null; + return { + top_100: null, + top_1: null + }; } /** Get the attributes for the member, but only ones that would put them on the top 100 for leaderboards */ async function getApplicableMemberLeaderboardAttributes(member) { const leaderboardAttributes = getMemberLeaderboardAttributes(member); const applicableAttributes = {}; + const applicableTop1Attributes = {}; for (const [leaderboard, attributeValue] of Object.entries(leaderboardAttributes)) { const requirement = await getLeaderboardRequirement(leaderboard, 'member'); const leaderboardReversed = isLeaderboardReversed(leaderboard); - if ((requirement === null) - || (leaderboardReversed ? attributeValue < requirement : attributeValue > requirement)) { + if ((requirement.top_100 === null) + || (leaderboardReversed ? attributeValue < requirement.top_100 : attributeValue > requirement.top_100)) { applicableAttributes[leaderboard] = attributeValue; } + if ((requirement.top_1 === null) + || (leaderboardReversed ? attributeValue < requirement.top_1 : attributeValue > requirement.top_1)) { + applicableTop1Attributes[leaderboard] = attributeValue; + } } - let leaderboardsCount = Object.keys(applicableAttributes).length; + // add the "leaderboards count" attribute + const leaderboardsCount = Object.keys(applicableAttributes).length; const leaderboardsCountRequirement = await getLeaderboardRequirement('leaderboards_count', 'member'); - if ((leaderboardsCountRequirement === null) - || (leaderboardsCount > leaderboardsCountRequirement)) { + if ((leaderboardsCountRequirement.top_100 === null) + || (leaderboardsCount > leaderboardsCountRequirement.top_100)) applicableAttributes['leaderboards_count'] = leaderboardsCount; - } + // add the "first leaderboards count" attribute + const top1LeaderboardsCount = Object.keys(applicableTop1Attributes).length; + const top1LeaderboardsCountRequirement = await getLeaderboardRequirement('top_1_leaderboards_count', 'member'); + if ((top1LeaderboardsCountRequirement.top_100 === null) + || (top1LeaderboardsCount > top1LeaderboardsCountRequirement.top_100)) + applicableAttributes['top_1_leaderboards_count'] = top1LeaderboardsCount; + console.log('top_1_leaderboards_count', applicableTop1Attributes, top1LeaderboardsCount, 'requirement', top1LeaderboardsCountRequirement); return applicableAttributes; } /** Get the attributes for the profile, but only ones that would put them on the top 100 for leaderboards */ async function getApplicableProfileLeaderboardAttributes(profile) { const leaderboardAttributes = getProfileLeaderboardAttributes(profile); const applicableAttributes = {}; + const applicableTop1Attributes = {}; for (const [leaderboard, attributeValue] of Object.entries(leaderboardAttributes)) { const requirement = await getLeaderboardRequirement(leaderboard, 'profile'); const leaderboardReversed = isLeaderboardReversed(leaderboard); - if ((requirement === null) - || (leaderboardReversed ? attributeValue < requirement : attributeValue > requirement)) { + if ((requirement.top_100 === null) + || (leaderboardReversed ? attributeValue < requirement.top_100 : attributeValue > requirement.top_100 + && attributeValue !== 0)) { applicableAttributes[leaderboard] = attributeValue; } - } - let leaderboardsCount = Object.keys(applicableAttributes).length; - const leaderboardsCountRequirement = await getLeaderboardRequirement('leaderboards_count', 'member'); - if (leaderboardsCountRequirement === null - || leaderboardsCount > leaderboardsCountRequirement) { - applicableAttributes['leaderboards_count'] = leaderboardsCount; + if ((requirement.top_1 === null) + || (leaderboardReversed ? attributeValue < requirement.top_1 : attributeValue > requirement.top_1 + && attributeValue !== 0)) { + applicableTop1Attributes[leaderboard] = attributeValue; + } } return applicableAttributes; } -- cgit