| 1 | |
| 2 | |
| 3 | export default function act(obs, legal) { |
| 4 | let x = [...JSON.stringify([obs.zones, obs.log.length, obs.viewer, legal.length])].reduce((h, c) => (h * 31 + c.charCodeAt(0)) >>> 0, 7); |
| 5 | const rand = (n) => ((x = (x * 1103515245 + 12345) >>> 0) % n); |
| 6 | const l = legal[rand(legal.length)]; |
| 7 | const m = structuredClone(l.message); |
| 8 | if (l.validTargets.length && !Array.isArray(m.params.targets)) { |
| 9 | const t = l.validTargets[rand(l.validTargets.length)]; |
| 10 | m.params.targets = [t]; |
| 11 | m.params.target = t; |
| 12 | } |
| 13 | if (Array.isArray(m.params.cardIds) && !m.params.cardIds.length) { |
| 14 | const hand = obs.players[obs.viewer].hand ?? []; |
| 15 | const need = obs.pending?.discard?.min ?? 1; |
| 16 | m.params.cardIds = hand.slice(0, need).map((c) => c.id); |
| 17 | } |
| 18 | return m; |
| 19 | } |