Release Healer Man 0.1.43
This commit is contained in:
1 parent
c7e8163790
commit
ccc01396cd
86 files changed
+2951
-198
No files matched your search
@@ -49,6 +49,35 @@ export function normalizeBossCardCollection(value: unknown): BossCardCollection
|
||||
return { counts, lastClaims };
|
||||
}
|
||||
|
||||
/** Sum independent legacy character logs; max reconciles copies of the same account log. */
|
||||
export function mergeBossCardCollections(collections: readonly unknown[], mode: "sum" | "max" = "max"): BossCardCollection {
|
||||
const counts: Record<string, BossCardCounts> = Object.create(null);
|
||||
const lastClaims: Record<string, string> = Object.create(null);
|
||||
for (const value of collections) {
|
||||
const collection = normalizeBossCardCollection(value);
|
||||
for (const [bossKey, entry] of Object.entries(collection.counts)) {
|
||||
const merged = counts[bossKey] ??= {};
|
||||
for (const rarity of BOSS_CARD_RARITIES) {
|
||||
const count = entry[rarity];
|
||||
if (count === undefined) continue;
|
||||
merged[rarity] = mode === "sum"
|
||||
? Math.min(Number.MAX_SAFE_INTEGER, (merged[rarity] ?? 0) + count)
|
||||
: Math.max(merged[rarity] ?? 0, count);
|
||||
}
|
||||
}
|
||||
for (const [spawnId, claim] of Object.entries(collection.lastClaims)) {
|
||||
const previous = lastClaims[spawnId];
|
||||
if (!previous) { lastClaims[spawnId] = claim; continue; }
|
||||
if (/^\d+:/.test(previous) && /^\d+:/.test(claim)) {
|
||||
const [previousTime, previousRevision] = previous.split(":").map(Number);
|
||||
const [time, revision] = claim.split(":").map(Number);
|
||||
if (time > previousTime || (time === previousTime && revision > previousRevision)) lastClaims[spawnId] = claim;
|
||||
} else if (claim > previous) lastClaims[spawnId] = claim;
|
||||
}
|
||||
}
|
||||
return { counts, lastClaims };
|
||||
}
|
||||
|
||||
/** Independent bonus rolls; Normal is always awarded, including with all three bonuses. */
|
||||
export function rollBossCards(random: () => number = Math.random): readonly BossCardRarity[] {
|
||||
return BOSS_CARD_RARITIES.filter((rarity) => {
|
||||
|
||||
Reference in new issue
Block a user