2PlayerGame/detective-game/casegen/anonymous_letter.js
2026-08-15 14:07:39 +03:00

55 lines
3 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// casegen/anonymous_letter.js — генерація анонімного листа
const { pick, chance } = require('./rng');
function generateAnonymousLetter(ctx) {
const { r, killer, victim, citizens, add } = ctx;
const letterType = pick(r, [1, 2, 3]);
let detail = '';
if (letterType === 1) {
const hints = [
`Шукайте серед тих, хто носить ${killer.coat}.`,
`Вбивця — ${killer.sex === 'ч' ? 'чоловік' : 'жінка'} на зріст приблизно ${killer.height} см.`,
`Той, хто це зробив, має татуювання — "${killer.tattoo}".`,
`Вбивця працює ${killer.job === 'тимчасово не працює' ? 'без роботи' : killer.job + 'ом'}.`,
`Слід шукати серед мешканців будинку ${killer.home}.`
].filter(h => !h.includes('undefined') && !h.includes('null'));
if (hints.length === 0) return null;
detail = pick(r, hints) + ' Це все, що я можу сказати.';
} else if (letterType === 2) {
const innocent = pick(r, citizens.filter(c => c.id !== killer.id && c.id !== victim.id));
const falseHints = [
`Шукайте серед тих, хто носить ${innocent.coat}.`,
`Вбивця — ${innocent.sex === 'ч' ? 'чоловік' : 'жінка'} на зріст приблизно ${innocent.height} см.`,
`Той, хто це зробив, має татуювання — "${innocent.tattoo}".`,
`Вбивця працює ${innocent.job === 'тимчасово не працює' ? 'без роботи' : innocent.job + 'ом'}.`,
`Слід шукати серед мешканців будинку ${innocent.home}.`
].filter(h => !h.includes('undefined') && !h.includes('null'));
if (falseHints.length === 0) return null;
detail = pick(r, falseHints) + ' Не дайте йому втекти.';
} else {
const neutralHints = [
'Злочин стався близько півночі, але не раніше.',
'Жертва не була випадковою — її знали.',
'Місце злочину обране не випадково.',
'Слідів більше, ніж здається на перший погляд.',
'Дехто в районі знає більше, ніж говорить.'
];
detail = pick(r, neutralHints);
}
if (!detail) return null;
return add({
id: 'anonymous_letter',
side: 'analyst',
at: { type: 'start' },
title: 'Анонімний лист',
tag: 'підказка',
detail: `Лист без підпису, надісланий до відділку: «${detail}». Походження невідоме.`,
gives: {}
});
}
module.exports = { generateAnonymousLetter };