Боезапас

Как работает механика увеличения боезапаса?

Теория

В игре на крафт можно установить модуль боезапаса, который увеличивает количество снарядов и ракет. В этой статье рассказывается, как это работает.

Модуль боезапаса содержит в себе модификатор: число, на которое умножается количество снарядов в орудии (а после умножения округляется вверх).
Но, кроме модуля боезапаса, существуют еще и улучшения (перки), например, у кабин. Эти перки улучшают работу модуля боезапаса, но не увеличивают боезапас орудия непосредственно. Эти перки тоже представляют собой числа. Перков может быть несколько.

Общая формула количества снарядов, которое становится у орудия при установке модуля боезапаса выглядит так:

БЗО = СБО + СБО * ПБ * ( 1 + БП-1 + БП-2 + ... + БП-n )

где:

  • БЗО - боезапас общий
  • СБО - собственный боезапас орудия
  • ПБ - перк модуля типа “боезапас”
  • БП - перк, улучшающий работу модулей типа “боезапас”

Практика

Рассмотрим на примере орудия “Палач 88мм”, модуля “Боезапас увеличенный” и кабины “Гарпия”.
“Палач 88мм” имеет 10 снарядов.
“Боезапас увеличенный” увеличивает количество снарядов на 110%, т.е. значение перка равно 1.1
Кабина “Гарпия” улучшает работу модулей ипа “боеприпасы” на 50%, т.е. значение перка равно 0.5

Подставим все в формулу и получим:

БЗО = 10 + 10 * 1.1 * ( 1 + 0.5 ) = 26.5 ~ 27 шт

Теперь заменим обычный модуль “Боезапас увеличенный” на такой же, но улучшенный, с эффективностью, повышенной на 56%. В таком случае, в формуле появляется новый перк со значением 0.56, и формула приобретает такой вид:

БЗО = 10 + 10 * 1.1 * ( 1 + 0.5 + 0.56 ) = 32.66 ~ 33 шт

Теперь вопрос - почему улучшение оружия на боезапас работает как перк, а не увеличивает СБО, как должно быть следуя логике нормального человека???

Скорее всего потому, что большая часть параметров, в том числе и собственные показатели типа боезапаса, представлены константами.
В целях оптимизации базовые значения исходного класса (например какой-то пушки) никогда не подвергаются изменениям, поскольку подобное улучшение, с точки зрения кода, вынуждало бы иметь отдельный экземпляр, где значение боезапаса изменено что привело бы к непомерному разрастанию базы данных к примеру, особенно с учётом того что улучшенные вещи в игре можно только распылить или скрестить при переулучшениях.
Гораздо проще и экономичнее управлять подобными переменными не внутри класса того или иного предмета а изменять их извне посредством модификаторов называющихся перками.

Ну это исключительно мои предположения, исходящие из некоторых знаний ООП) а как там 6а самом деле фиг знает

Есть и другое соображение. Сейчас боезапас универсальный и подходит для всех.
Если делать боезапас не модификатором, а “числом снарядов”, то для каждой пушки пришлось бы делать свои индивидуальные боезапасы, что только внесло бы ненужную сумятицу.

так еще раз, речь об улучшении оружия на повышенный боезапас, которое таким же модификатором как бк является, и по непонятным причинам, в свою очередь бк, при расчете доп боезапаса, допы от улучшения не учитывает. Все считается отдельно, при этом, ни где об этом не сказано, введите тогда в игру понятие СБО…потому что исходя из описаний улучшения, боезапаса и т.д. все работает неправильно, не логично, криво и непонятно, впрочем как многое в этой игре. Я понимаю, Вы хотите попроще кодить, не париться особо, ну как было с резистом на оружии да? Но это очень сильно бьет по репутации игры…Но я знаю как вы относитесь к мнению игроков, и зачем я это пишу…

Дополнительно про боезапасы:

Если отстрелять столько снарядов, сколько дает один боезапас, при откреплении/подрыве боезапаса не будет дополнительной потери снарядов.

Судья имеет 10 боезапаса, при установке синей боеукладки получается 13, отстреливаем 3 снаряда, получается 10. Открепляем синюю боеукладку - снарядов все так же остается 10. Боезапас при этом все равно взрывается.

Отстрелить таким образом можно абсолютно любую боеукладку, и снаряды не будут теряться, при условии того, что боеукладка была потеряна после отстрела стольких снарядов, сколько дает 1 боезапас.