46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import type { Card } from './cards';
|
|
export type ChoamMarket = {
|
|
owner: string;
|
|
resume: 'phase' | 'storm';
|
|
blocked: string[];
|
|
tradeAttempted?: boolean;
|
|
sale?: { card: string; witness?: string; price: number };
|
|
trade?: { ally: string; offered: string; returned?: string };
|
|
};
|
|
/** A duplicate is an exact printed card name, not merely the same battle role. */
|
|
export function saleOptions(hand: Card[], blocked: string[] = []) {
|
|
return hand.flatMap((card) => {
|
|
if (blocked.includes(card.id)) return [];
|
|
const witness = hand.find(
|
|
(other) => other.id !== card.id && other.name === card.name,
|
|
);
|
|
return [
|
|
...(witness ? [{ card: card.id, witness: witness.id, price: 3 }] : []),
|
|
...(card.kind === 'worthless'
|
|
? [{ card: card.id, witness: undefined, price: 2 }]
|
|
: []),
|
|
];
|
|
});
|
|
}
|
|
|
|
export function quoteSale(
|
|
hand: Card[],
|
|
cardId: unknown,
|
|
witnessId: unknown,
|
|
blocked: string[] = [],
|
|
) {
|
|
const card = hand.find((c) => c.id === cardId && !blocked.includes(c.id));
|
|
if (!card) return undefined;
|
|
if (witnessId) {
|
|
const witness = hand.find(
|
|
(c) => c.id === witnessId && c.id !== card.id && c.name === card.name,
|
|
);
|
|
return witness
|
|
? { card: card.id, witness: witness.id, price: 3 }
|
|
: undefined;
|
|
}
|
|
return card.kind === 'worthless'
|
|
? { card: card.id, witness: undefined, price: 2 }
|
|
: undefined;
|
|
}
|