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