// 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 };