Skip to content

Commit 6eb4c65

Browse files
committed
hiscore player lookup
1 parent de66fd2 commit 6eb4c65

File tree

2 files changed

+53
-15
lines changed

2 files changed

+53
-15
lines changed

src/handlers/hiscores.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,13 @@ async function getHiscoreRanks({
1919
this.socket.sendMessage({ token, ranks, pages });
2020
}
2121

22-
module.exports = { getHiscoreRanks };
22+
async function getPlayerRanks({ token, username }) {
23+
username = username.toLowerCase();
24+
25+
const queryHandler = this.server.queryHandler;
26+
const ranks = queryHandler.getPlayerRanks(username) || null;
27+
28+
this.socket.sendMessage({ token, ranks });
29+
}
30+
31+
module.exports = { getHiscoreRanks, getPlayerRanks };

src/query-handler.js

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,12 @@ const PLAYER_JSON_FIELDS = [
5959
];
6060

6161
const TOTAL_EXP = `(\`exp_${skills.join('` + `exp_')}\`) AS \`experience\``;
62-
const RANKS_PER_PAGE = 4;
62+
const RANKS_PER_PAGE = 16;
6363

6464
function getPages(database) {
6565
return Math.ceil(
66-
database
67-
.prepare('SELECT COUNT(1) FROM `hiscore_ranks`')
68-
.pluck()
69-
.get() / RANKS_PER_PAGE
66+
database.prepare('SELECT COUNT(1) FROM `hiscore_ranks`').pluck().get() /
67+
RANKS_PER_PAGE
7068
);
7169
}
7270

@@ -101,7 +99,7 @@ class QueryHandler {
10199
'UPDATE `players` SET `password` = ? WHERE `username` = ?',
102100
getPlayer:
103101
'SELECT ' +
104-
GET_PLAYER_ATTRIBUTES.map((attr) => `\`${attr}\``).join(', ') +
102+
GET_PLAYER_ATTRIBUTES.map((attr) => `\`${attr}\``) +
105103
'FROM `players` WHERE `username` = ?',
106104
updatePlayerLogin:
107105
'UPDATE `players` SET `login_date` = ?, `login_ip` = ? ' +
@@ -117,9 +115,7 @@ class QueryHandler {
117115
'DELETE FROM `login_attempts` WHERE `last_attempt_date` <= ?',
118116
updatePlayer:
119117
'UPDATE `players` SET ' +
120-
SET_PLAYER_ATTRIBUTES.map((attr) => `${attr} = :${attr}`).join(
121-
', '
122-
) +
118+
SET_PLAYER_ATTRIBUTES.map((attr) => `${attr} = :${attr}`) +
123119
' WHERE `id` = :id',
124120
insertWorld:
125121
'INSERT OR REPLACE INTO `worlds` (`id`, `ip`, ' +
@@ -138,7 +134,12 @@ class QueryHandler {
138134
getTotalHiscoreRanksBetween:
139135
'SELECT `username`, `rank_total` AS `rank`, `total_level` AS ' +
140136
`\`level\`, ${TOTAL_EXP} FROM \`players\` WHERE ` +
141-
'`rank_total` BETWEEN ? AND ? ORDER BY `rank_total` ASC'
137+
'`rank_total` BETWEEN ? AND ? ORDER BY `rank_total` ASC',
138+
getPlayerRanks:
139+
`SELECT ${skills.map(
140+
(skill) => `\`exp_${skill}\`, \`rank_${skill}\``
141+
)}, \`total_level\`, ${TOTAL_EXP}, \`rank_total\` `+
142+
'FROM `players` WHERE `username` = ?'
142143
};
143144

144145
for (const [name, statement] of Object.entries(this.statements)) {
@@ -162,7 +163,6 @@ class QueryHandler {
162163
);
163164

164165
return getPages(this.database);
165-
166166
});
167167

168168
this.statements.getSkillHiscoreRanks = {};
@@ -182,7 +182,8 @@ class QueryHandler {
182182
] = this.database.prepare(
183183
`SELECT \`username\`, \`rank_${skill}\` AS \`rank\`, ` +
184184
`\`exp_${skill}\` AS \`experience\` FROM \`players\` WHERE ` +
185-
`\`rank_${skill}\` BETWEEN ? AND ? ORDER BY \`rank_total\` ASC`
185+
`\`rank_${skill}\` BETWEEN ? AND ? ORDER BY ` +
186+
`\`rank_${skill}\` ASC`
186187
);
187188

188189
this.updateSkillHiscoreRanks[skill] = this.database.transaction(
@@ -300,7 +301,7 @@ class QueryHandler {
300301
getLoginAttempts(ip) {
301302
const entry = this.statements.getLoginAttempts.get(ip);
302303
const attempts = entry ? entry.attempts : 0;
303-
const lastDate = entry ? entry['last_attempt_date'] : Date.now();
304+
const lastDate = entry ? entry.last_attempt_date : Date.now();
304305
return { attempts, lastDate };
305306
}
306307

@@ -352,7 +353,7 @@ class QueryHandler {
352353

353354
updateHiscoreRanks() {
354355
const pages = {
355-
overall: this.updateTotalHiscoreRanks(),
356+
overall: this.updateTotalHiscoreRanks()
356357
};
357358

358359
for (const skill of skills) {
@@ -406,6 +407,34 @@ class QueryHandler {
406407
});
407408
}
408409

410+
getPlayerRanks(username) {
411+
const res = this.statements.getPlayerRanks.get(username);
412+
413+
if (!res) {
414+
return;
415+
}
416+
417+
const ranks = {};
418+
419+
for (const skill of skills) {
420+
const experience = res[`exp_${skill}`];
421+
422+
ranks[skill] = {
423+
rank: res[`rank_${skill}`],
424+
experience: Math.floor(experience / 4),
425+
level: experienceToLevel(experience)
426+
};
427+
}
428+
429+
ranks.overall = {
430+
rank: res.rank_total,
431+
experience: Math.floor(res.experience / 4),
432+
level: res.total_level
433+
};
434+
435+
return ranks;
436+
}
437+
409438
sync() {
410439
this.database.pragma('journal_mode = WAL');
411440
this.createTables();

0 commit comments

Comments
 (0)