Обсуждение:Year Zero Engine
Как рассчитаны вероятности для лестницы костей
Сохраню тут алгоритм расчёта — на случай, если кто-то решит проверить, что всё посчитано правильно (а то я немного волнуюсь 😅).
const костиАтрибутов = [6, 8, 10, 12] const костиУмений = [null, 6, 8, 10, 12] const вариантыБроска = костиАтрибутов.map(атрибут => костиУмений.map(умение => ({ атрибут, умение }))).flat() // в вариантыБроска // [{атрибут: 6, умение: null}, {атрибут: 6, умение: 6}, ..., {атрибут: 12, умение: 12}] function шансНеудачиДляОднойКости(количествоГранейКости) { // Количество неудачных граней всегда 5 (1, 2, 3, 4, 5) return 5 / количествоГранейКости } function шансОбычнойНеудачи({ атрибут, умение }) { if (умение === null) { return шансНеудачиДляОднойКости(атрибут) } return шансНеудачиДляОднойКости(атрибут) * шансНеудачиДляОднойКости(умение) } function шансНеудачиСПереброской(вариантБроска) { return шансОбычнойНеудачи(вариантБроска)**2 } function шансОбычногоУспеха(вариантБроска) { return 1 - шансОбычнойНеудачи(вариантБроска) } function шансУспехаСПереброской(вариантБроска) { return 1 - шансНеудачиСПереброской(вариантБроска) } const вариантыСВероятностями = вариантыБроска.map( вариантБроска => ({ ...вариантБроска, успех: шансОбычногоУспеха(вариантБроска), успехСПереброской: шансУспехаСПереброской(вариантБроска) }) ) function вероятностьКакПроценты(вероятность) { return (Math.round(вероятность * 10000) / 100) + '%' } function отформатироватьВариантСВероятностью({ атрибут, умение, успех, успехСПереброской }) { const ячейкиТаблицы = [ `[[d${атрибут}]]`, умение === null ? '' : `[[d${умение}]]`, вероятностьКакПроценты(успех), вероятностьКакПроценты(успехСПереброской) ] return `|` + ячейкиТаблицы.join(' || ') } function отформатироватьТаблицу(вариантыСВероятностями) { const строки = [ '{| class="wikitable" style="margin:auto"\n! colspan="2" | Бросаемые кости !! rowspan="2" | Шанс успеха !! rowspan="2" | Шанс успеха с переброской', '! Атрибут !! Умение', ...вариантыСВероятностями.map(отформатироватьВариантСВероятностью), ] return строки.join("\n|-\n") + "\n|}" } console.log(отформатироватьТаблицу(вариантыСВероятностями))