Skip to content

Commit 860336f

Browse files
authored
Add more context to player flagged review gains/losses
1 parent b154c20 commit 860336f

File tree

1 file changed

+58
-30
lines changed

1 file changed

+58
-30
lines changed

src/events/instances/PlayerFlaggedReview.ts

Lines changed: 58 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
Activity,
44
Boss,
55
formatNumber,
6+
getLevel,
67
isActivity,
78
isBoss,
89
isSkill,
@@ -439,35 +440,44 @@ async function handleRollback(username: string) {
439440
function getLargestSkillChanges(previous: SnapshotResponse, rejected: SnapshotResponse) {
440441
const lines: string[] = [];
441442

442-
const map = new Map<Skill, number>();
443+
const map = new Map<Skill, { start: number; end: number; delta: number }>();
443444

444445
Object.keys(previous.data.skills).map(s => {
445446
if (rejected.data.skills[s].experience === -1) return;
446-
map.set(
447-
s as Skill,
448-
Math.max(0, rejected.data.skills[s].experience) - Math.max(0, previous.data.skills[s].experience)
449-
);
447+
const start = Math.max(0, previous.data.skills[s].experience);
448+
const end = Math.max(0, rejected.data.skills[s].experience);
449+
map.set(s as Skill, { start, end, delta: end - start });
450450
});
451451

452-
const entries = Array.from(map.entries()).sort((a, b) => b[1] - a[1]);
452+
const entries = Array.from(map.entries()).sort((a, b) => b[1].delta - a[1].delta);
453453

454-
const biggestGains = entries.slice(0, 3).filter(v => v[1] > 0);
454+
const biggestGains = entries.slice(0, 3).filter(v => v[1].delta > 0);
455455

456456
const biggestLosses = entries
457457
.slice(entries.length - 3, entries.length)
458458
.reverse()
459-
.filter(v => v[1] < 0);
459+
.filter(v => v[1].delta < 0);
460460

461461
if (biggestGains.length > 0) {
462462
lines.push('\n');
463463
lines.push(`**Top Skill gains**`);
464-
lines.push(...biggestGains.map(g => `${MetricProps[g[0]].name}: \`+${formatNumber(g[1], true)}\``));
464+
lines.push(
465+
...biggestGains.map(
466+
g =>
467+
`${MetricProps[g[0]].name}: \`+${formatNumber(g[1].delta, true)}\` (lvl: \`${getLevel(g[1].start)}\` -> \`${getLevel(g[1].end)}\`)`
468+
)
469+
);
465470
}
466471

467472
if (biggestLosses.length > 0) {
468473
lines.push('\n');
469474
lines.push(`**🔻 Top Skill losses🔻**`);
470-
lines.push(...biggestLosses.map(l => `${MetricProps[l[0]].name}: \`${formatNumber(l[1], true)}\``));
475+
lines.push(
476+
...biggestLosses.map(
477+
l =>
478+
`${MetricProps[l[0]].name}: \`${formatNumber(l[1].delta, true)}\` (lvl: \`${getLevel(l[1].end)}\` -> \`${getLevel(l[1].start)}\`)`
479+
)
480+
);
471481
}
472482

473483
return lines;
@@ -476,34 +486,43 @@ function getLargestSkillChanges(previous: SnapshotResponse, rejected: SnapshotRe
476486
function getLargestBossChanges(previous: SnapshotResponse, rejected: SnapshotResponse) {
477487
const lines: string[] = [];
478488

479-
const map = new Map<Boss, number>();
489+
const map = new Map<Boss, { start: number; end: number; delta: number }>();
480490

481491
Object.keys(previous.data.bosses).map(b => {
482-
map.set(
483-
b as Boss,
484-
Math.max(0, rejected.data.bosses[b].kills) - Math.max(0, previous.data.bosses[b].kills)
485-
);
492+
const start = Math.max(0, previous.data.bosses[b].kills);
493+
const end = Math.max(0, rejected.data.bosses[b].kills);
494+
map.set(b as Boss, { start, end, delta: end - start });
486495
});
487496

488-
const entries = Array.from(map.entries()).sort((a, b) => b[1] - a[1]);
497+
const entries = Array.from(map.entries()).sort((a, b) => b[1].delta - a[1].delta);
489498

490-
const biggestGains = entries.slice(0, 3).filter(v => v[1] > 0);
499+
const biggestGains = entries.slice(0, 3).filter(v => v[1].delta > 0);
491500

492501
const biggestLosses = entries
493502
.slice(entries.length - 3, entries.length)
494503
.reverse()
495-
.filter(v => v[1] < 0);
504+
.filter(v => v[1].delta < 0);
496505

497506
if (biggestGains.length > 0) {
498507
lines.push('\n');
499508
lines.push(`**Top Boss gains**`);
500-
lines.push(...biggestGains.map(g => `${MetricProps[g[0]].name}: \`+${formatNumber(g[1], true)}\``));
509+
lines.push(
510+
...biggestGains.map(
511+
g =>
512+
`${MetricProps[g[0]].name}: \`+${formatNumber(g[1].delta, true)}\` (\`${formatNumber(g[1].start, true)}\` -> \`${formatNumber(g[1].end, true)}\`)`
513+
)
514+
);
501515
}
502516

503517
if (biggestLosses.length > 0) {
504518
lines.push('\n');
505519
lines.push(`**🔻 Top Boss losses 🔻**`);
506-
lines.push(...biggestLosses.map(l => `${MetricProps[l[0]].name}: \`${formatNumber(l[1], true)}\``));
520+
lines.push(
521+
...biggestLosses.map(
522+
l =>
523+
`${MetricProps[l[0]].name}: \`${formatNumber(l[1].delta, true)}\` (\`${formatNumber(l[1].start, true)}\` -> \`${formatNumber(l[1].end, true)}\`)`
524+
)
525+
);
507526
}
508527

509528
return lines;
@@ -512,34 +531,43 @@ function getLargestBossChanges(previous: SnapshotResponse, rejected: SnapshotRes
512531
function getLargestActivityChanges(previous: SnapshotResponse, rejected: SnapshotResponse) {
513532
const lines: string[] = [];
514533

515-
const map = new Map<Activity, number>();
534+
const map = new Map<Activity, { start: number; end: number; delta: number }>();
516535

517536
Object.keys(previous.data.activities).map(a => {
518-
map.set(
519-
a as Activity,
520-
Math.max(0, rejected.data.activities[a].score) - Math.max(0, previous.data.activities[a].score)
521-
);
537+
const start = Math.max(0, previous.data.activities[a].score);
538+
const end = Math.max(0, rejected.data.activities[a].score);
539+
map.set(a as Activity, { start, end, delta: end - start });
522540
});
523541

524-
const entries = Array.from(map.entries()).sort((a, b) => b[1] - a[1]);
542+
const entries = Array.from(map.entries()).sort((a, b) => b[1].delta - a[1].delta);
525543

526-
const biggestGains = entries.slice(0, 3).filter(v => v[1] > 0);
544+
const biggestGains = entries.slice(0, 3).filter(v => v[1].delta > 0);
527545

528546
const biggestLosses = entries
529547
.slice(entries.length - 3, entries.length)
530548
.reverse()
531-
.filter(v => v[1] < 0);
549+
.filter(v => v[1].delta < 0);
532550

533551
if (biggestGains.length > 0) {
534552
lines.push('\n');
535553
lines.push(`**Top Activity gains**`);
536-
lines.push(...biggestGains.map(g => `${MetricProps[g[0]].name}: \`+${formatNumber(g[1], true)}\``));
554+
lines.push(
555+
...biggestGains.map(
556+
g =>
557+
`${MetricProps[g[0]].name}: \`+${formatNumber(g[1].delta, true)}\` (\`${formatNumber(g[1].start, true)}\` -> \`${formatNumber(g[1].end, true)}\`)`
558+
)
559+
);
537560
}
538561

539562
if (biggestLosses.length > 0) {
540563
lines.push('\n');
541564
lines.push(`**🔻 Top Activity losses 🔻**`);
542-
lines.push(...biggestLosses.map(l => `${MetricProps[l[0]].name}: \`${formatNumber(l[1], true)}\``));
565+
lines.push(
566+
...biggestLosses.map(
567+
l =>
568+
`${MetricProps[l[0]].name}: \`${formatNumber(l[1].delta, true)}\` (\`${formatNumber(l[1].start, true)}\` -> \`${formatNumber(l[1].end, true)}\`)`
569+
)
570+
);
543571
}
544572

545573
return lines;

0 commit comments

Comments
 (0)