Перед тем, как приступить к бою перед рубкой, попробуем слегка поизвращаться с расчетом пороговых значений. Например, при известных данных DefenceLevel (включая расовый модификатор и прочие примочки), какой суммарный боевой навык нашего десанта является минимально необходимым для возможного прохода палубы без потерь, а какой - гарантирует нам отсутствие потерь на палубе с вероятностью 98% (два процента все равно будут с потерями, это гарантировано алгоритмом).
Что ж, попробуем. У нас есть рассчитанный уровень DefenceLevel, считаем его пределы:
DefenceLevelmax = DefenceLevel + [0.1 * DefenceLevel] - 1
DefenceLevelmin = DefenceLevel - [0.1 * DefenceLevel]
Начнем с минимально достаточного уровня для прохода без потерь. Этот уровень будет в первую очередь зависеть от класса корабля.
Для М6 вероятность нулевых потерь начинается с появления вероятности выпадения Шанс6, для М1 / М2 / TL и ТМ - Шанс8, а для М7 - только в случае Шанс9 (см. таблицы выше). Когда такие шансы перестают быть нулевыми? Очевидно, когда параметр MIN (равный (DefenceLevelmin - AttackLevelmax)) хотя бы на единицу меньше X, где Х для Шанс6 равен -40, для Шанс8 равен -400, а для Шанс9 равен -550.
При каких условиях мы этого достигаем?
(DefenceLevelmin - AttackLevelmax) = Х - 1
AttackLevelmax = DefenceLevelmin - Х + 1
Но нам нужен сам уровень атаки, при котором мы получим нужный нам AttackLevelmax.
И вот тут зарыта собака. Нам надо отнять не 10%. Отнять надо 1/11. Почему? А вот почему:
AttackLevelmax = AttackLevel + AttackLevel / 10
AttackLevelmax = 11 AttackLevel / 10
AttackLevel = 10 * AttackLevelmax / 11 = AttackLevelmax - AttackLevelmax / 11
Поэтому:
AttackLevel(min needed) = (DefenceLevelmin + X + 1) - (DefenceLevelmin + X + 1) / 11,
где Х = 40 для М6, Х = 400 для М1 / М2 / TL и ТМ и Х = 550 для М7. (Минусы я убрал для упрощения, изменив знак перед Х.)
Здесь зарыта еще одна собака. Где? А вот она: AttackLevelmax = AttackLevel + [AttackLevel / 10] - 1
Так что в окончательную формулу надо добавить эту единичку, которая вычитается при расчете AttackLevelmax:
| AttackLevel(min needed) = DefenceLevelmin + X + 2 - [(DefenceLevelmin + X + 2) / 11]
где Х = 40 для М6, Х = 400 для М1 / М2 / TL и ТМ и Х = 550 для М7. |
| |
С уровнем, достаточным для гарантированного на 98% прохождения палубы без потерь, дело обстоит примерно аналогично, только на этот раз нам необходимо уже, чтобы минимальный уровень атаки гарантированно превосходил максимальный уровень защиты на нужную нам величину. Конкретно - на 400 для М6 и на 550 для всех остальных классов кораблей. Не буду тянуть резину. Все просто.
| AttackLevel(guarranteed 98%) = DefenceLevelmax + X + [(DefenceLevelmax + X) / 9],
где Х = 400 для М6 и Х = 550 для всех остальных. |
| |
Продолжаем тему. Теперь рассмотрим механику. Поэтому первым делом высчитываем HullDefence в зависимости от расы, класса и наличия поляризатора, а потом - его мин. и макс. значения.
Какой суммарный навык двух механиков достаточен для гарантированной прорезки корпуса?
Для этого должно соблюдаться условие: HullAttackmin >= HullDefencemax
Вот и считаем:
| HullAttack(guarranteed) = HullDefencemax + [HullDefencemax / 9]
Если [Используется аб. капсула] = TRUE, то HullAttack(guarranteed) = HullAttack(guarranteed) / 2
Если (HullAttack(guarranteed) - [HullAttack(guarranteed)]) > 0, то HullAttack(guarranteed) = [HullAttack(guarranteed)] +1 |
| |
Теперь считаем минимальный уровень, с которого прорезка вообще возможна. Данный параметр на практике нужен не столько для того, чтобы пытаться с ним прорезаться, сколько для того, чтобы знать, что ниже этого уровня прорезаться невозможно в принципе. Здесь пляшем уже от минимального уровня защиты.
| HullAttack(min needed) = HullDefencemin + 1 - [(HullDefencemin + 1) / 11]
Если [Используется аб. капсула] = TRUE, то HullAttack(min needed) = HullAttack(min needed) / 2
Если (HullAttack(min needed) - [HullAttack(min needed)]) > 0, то HullAttack(min needed) = [HullAttack(min needed)] +1 |
| |
Переходим к взлому компьютера. Здесь не может быть ни гарантированной удачи, ни гарантированного провала. Таков уж алгоритм. Мы можем посчитать только уровни, достаточные для максимального и минимального шанса удачи. А в остальном принцип тот же, только в этот раз совсем все просто.
Считаем DefenceLevel(min) и DefenceLevel(max) для данного корабля с учетом всех примочек.
| AttackLevel(guarranteed 95%) = DefenceLevel(max)
AttackLevel(min needed for > 2%) = DefenceLevel(min) |
| |
|