SergOz, ты ошибаешься, грубо смысл «вероятности» насилуя. 50% — это именно 50%. И даже если предыдущих 5 раз результат был отрицательный, у 6-го вероятность остаётся 50%. Иначе это не полноценно случайные результаты и не значение вероятностей. ГСЧ в игре теперь качественный.
Quote: !!VR(random:y):R0/1/10;
!!FU&y>5:E; продолжить с вероятностью 50%
Наоборот, лучше 1..1000000 и отсев по 500000.
В остальном верно, у тебя ручной генератор для одного объекта. Для него верно писать «срабатывает Х раз из Y посещений», поскольку вероятность зависит от предыдущих посещений напрямую.
Я делал весьма схожий функционал, но без массива. Храним три значения: число успешных результатов, число заданных успешных результатов и общее число оставшихся результатов до перегенерации.
Скажем, 0 успешных было, 3 успешных гарантированно, 10 заходов осталось.
При посещении генерируем случайное из диапазона 1..заходов осталось и
успехом считаем значение <= (гарантированно - успешных).
Пример:
-) Случайное из 1..10 Выпало 7. 7 <= (3 - 0)? Нет, неудача.
-) Случайное из 1..9. Выпало 5. 5 <= (3 - 0)? Нет, неудача.
-) Случайное из 1..8. Выпало 2. 2 <= (3 - 0)? Да, успех.
-) Случайное из 1..7. Выпало 4. 4 <= (3 - 1)? Нет, неудача.
Если имеем 10/10 заходов, то сбрасываем счётчики на начальное состояние. Массив не нужен даже для сложных решений вроде 17 из 45.
Побочный эффект. Если пара раз повезло — дальше гарантированное «невезение», что человек точно так же болезненно воспринимает.