const LeaderboardPagePacket = require("../Packets/LeaderboardPage"); const leaderboards = require("../Data/leaderboard"); module.exports = async function (ws, message, player) { const leaderboardID = message.getUint8(1); const leaderboard = leaderboards[leaderboardID]; if (!leaderboard) return console.time("leaderboard 1"); const page = message.getUint16(2); if (!leaderboard.size) { const leaderboardCountFromDB = await execute(`SELECT COUNT(*) AS count FROM leaderboard_${leaderboardID + 1}`); if (!leaderboardCountFromDB.data) return console.info("leaderboard 2"); leaderboard.size = leaderboardCountFromDB.data[0].count; }; const lastPage = Math.ceil(leaderboard.size / 10); if (page <= 0 || page > lastPage) return; let entries = null; const startingFrom = (page - 1) * 10; const cachedEntries = leaderboard.cache[page]; if (cachedEntries) entries = cachedEntries; else { const leaderboardFromDB = await query(`SELECT accounts.id, accounts.username, leaderboard_${leaderboardID + 1}.amount FROM leaderboard_${leaderboardID + 1} INNER JOIN accounts ON accounts.id = leaderboard_${leaderboardID + 1}.id ORDER BY amount DESC LIMIT ?, 10`, [startingFrom]) if (!leaderboardFromDB.data) return console.info("leaderboard 3"); entries = leaderboardFromDB.data leaderboard.cache[page] = entries; }; const leaderboardPacket = LeaderboardPagePacket.init(leaderboardID, entries.length); entries.forEach(e => leaderboardPacket.update({ username: e.username, amount: e.amount })); player.map.registerIndividualNetworkPacket(player.id, leaderboardPacket.get()); };