55 lines
3 KiB
JavaScript
55 lines
3 KiB
JavaScript
// 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 };
|