Files
pirate-corsaire-server/Messages/LeaderboardPageMessage.js
T
2026-08-24 22:20:36 +02:00

42 lines
1.7 KiB
JavaScript

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());
};