@@ -59,14 +59,12 @@ const PLAYER_JSON_FIELDS = [
59
59
] ;
60
60
61
61
const TOTAL_EXP = `(\`exp_${ skills . join ( '` + `exp_' ) } \`) AS \`experience\`` ;
62
- const RANKS_PER_PAGE = 4 ;
62
+ const RANKS_PER_PAGE = 16 ;
63
63
64
64
function getPages ( database ) {
65
65
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
70
68
) ;
71
69
}
72
70
@@ -101,7 +99,7 @@ class QueryHandler {
101
99
'UPDATE `players` SET `password` = ? WHERE `username` = ?' ,
102
100
getPlayer :
103
101
'SELECT ' +
104
- GET_PLAYER_ATTRIBUTES . map ( ( attr ) => `\`${ attr } \`` ) . join ( ', ' ) +
102
+ GET_PLAYER_ATTRIBUTES . map ( ( attr ) => `\`${ attr } \`` ) +
105
103
'FROM `players` WHERE `username` = ?' ,
106
104
updatePlayerLogin :
107
105
'UPDATE `players` SET `login_date` = ?, `login_ip` = ? ' +
@@ -117,9 +115,7 @@ class QueryHandler {
117
115
'DELETE FROM `login_attempts` WHERE `last_attempt_date` <= ?' ,
118
116
updatePlayer :
119
117
'UPDATE `players` SET ' +
120
- SET_PLAYER_ATTRIBUTES . map ( ( attr ) => `${ attr } = :${ attr } ` ) . join (
121
- ', '
122
- ) +
118
+ SET_PLAYER_ATTRIBUTES . map ( ( attr ) => `${ attr } = :${ attr } ` ) +
123
119
' WHERE `id` = :id' ,
124
120
insertWorld :
125
121
'INSERT OR REPLACE INTO `worlds` (`id`, `ip`, ' +
@@ -138,7 +134,12 @@ class QueryHandler {
138
134
getTotalHiscoreRanksBetween :
139
135
'SELECT `username`, `rank_total` AS `rank`, `total_level` AS ' +
140
136
`\`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` = ?'
142
143
} ;
143
144
144
145
for ( const [ name , statement ] of Object . entries ( this . statements ) ) {
@@ -162,7 +163,6 @@ class QueryHandler {
162
163
) ;
163
164
164
165
return getPages ( this . database ) ;
165
-
166
166
} ) ;
167
167
168
168
this . statements . getSkillHiscoreRanks = { } ;
@@ -182,7 +182,8 @@ class QueryHandler {
182
182
] = this . database . prepare (
183
183
`SELECT \`username\`, \`rank_${ skill } \` AS \`rank\`, ` +
184
184
`\`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`
186
187
) ;
187
188
188
189
this . updateSkillHiscoreRanks [ skill ] = this . database . transaction (
@@ -300,7 +301,7 @@ class QueryHandler {
300
301
getLoginAttempts ( ip ) {
301
302
const entry = this . statements . getLoginAttempts . get ( ip ) ;
302
303
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 ( ) ;
304
305
return { attempts, lastDate } ;
305
306
}
306
307
@@ -352,7 +353,7 @@ class QueryHandler {
352
353
353
354
updateHiscoreRanks ( ) {
354
355
const pages = {
355
- overall : this . updateTotalHiscoreRanks ( ) ,
356
+ overall : this . updateTotalHiscoreRanks ( )
356
357
} ;
357
358
358
359
for ( const skill of skills ) {
@@ -406,6 +407,34 @@ class QueryHandler {
406
407
} ) ;
407
408
}
408
409
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
+
409
438
sync ( ) {
410
439
this . database . pragma ( 'journal_mode = WAL' ) ;
411
440
this . createTables ( ) ;
0 commit comments