Implement legacy-compatible survey and unique rewards
This commit is contained in:
@@ -144,6 +144,24 @@ export const countOccupiedUniqueItems = (
|
||||
return counts;
|
||||
};
|
||||
|
||||
export const addOccupiedUniqueItemKeys = (
|
||||
counts: Map<string, number>,
|
||||
itemKeys: Iterable<string | null | undefined>,
|
||||
itemRegistry: Map<string, ItemModule>
|
||||
): Map<string, number> => {
|
||||
for (const itemKey of itemKeys) {
|
||||
if (!itemKey) {
|
||||
continue;
|
||||
}
|
||||
const module = itemRegistry.get(itemKey);
|
||||
if (!module || module.buyable) {
|
||||
continue;
|
||||
}
|
||||
counts.set(itemKey, (counts.get(itemKey) ?? 0) + 1);
|
||||
}
|
||||
return counts;
|
||||
};
|
||||
|
||||
const joinYearMonth = (year: number, month: number): number => year * 12 + month - 1;
|
||||
|
||||
const serializeSeed = (...values: Array<string | number>): string =>
|
||||
|
||||
@@ -5,6 +5,7 @@ import type { GeneralItemSlots } from '../src/domain/entities.js';
|
||||
import type { ItemModule } from '../src/items/types.js';
|
||||
import {
|
||||
type UniqueAcquireType,
|
||||
addOccupiedUniqueItemKeys,
|
||||
buildVoteUniqueSeed,
|
||||
countOccupiedUniqueItems,
|
||||
resolveUniqueConfig,
|
||||
@@ -131,4 +132,20 @@ describe('unique lottery', () => {
|
||||
expect(counts.get('uniqueItem')).toBe(1);
|
||||
expect(counts.get('buyableItem')).toBeUndefined();
|
||||
});
|
||||
|
||||
it('adds active auction and storage reservations without counting buyable items', () => {
|
||||
const itemRegistry = new Map<string, ItemModule>([
|
||||
['uniqueItem', buildItem('uniqueItem', 'weapon', false)],
|
||||
['buyableItem', buildItem('buyableItem', 'book', true)],
|
||||
]);
|
||||
|
||||
const counts = addOccupiedUniqueItemKeys(
|
||||
new Map([['uniqueItem', 1]]),
|
||||
['uniqueItem', 'uniqueItem', 'buyableItem', null],
|
||||
itemRegistry
|
||||
);
|
||||
|
||||
expect(counts.get('uniqueItem')).toBe(3);
|
||||
expect(counts.get('buyableItem')).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user