В папке gamedata\configs\weapons лежат конфиги оружия. У каждого оружия в основной секции есть параметр upgrades, который содержит все доступные для этого оружия апгрейды. Второй параметр - installed_upgrades - содержит все предустановленные апгрейды, в основном на квестовых пушках. Третий параметр - upgrade_scheme - схема установки апгрейдов, иначе говоря ссылка на inventory_upgrade.xml, в котором задано графическое отображение иконок.
scheme_index - положение иконки, в данном случае это первый столбик первая строка. effects - это ссылка на секцию
Код
[up_gr_ac_pm] elements = up_ac_pm
section - это ссылка на секцию в файле w_pm_up.ltx, в котором прописано следующее (пояснений не требует):
Код
[up_sect_a_pm] cost = 120 value = +25 rpm = 50
property - это ссылка на xml-описатель, в данном случае он равен "скорострельность". Смотрим далее:
Код
precondition_functor = inventory_upgrades.precondition_functor_a precondition_parameter = a & b effect_functor = inventory_upgrades.effect_functor_a effect_parameter = on_weapon_upgrade_something_here
precondition_functor - это ссылка на ф-ию из inventory_upgrades.script, которая смотрит к какому механику мы приперлись, и в зависимости от его умения разрешает или запрещает проведение апгрейда. precondition_parameter пока непонятен. effect_functor - ф-ия отнимания денег за проведенный апгрейд
prereq_functor - судя по скриптам не используется, также как и ее параметры.
Код
name - название апгрейда description - описание апгрейда icon - иконка. все берется из xml файла соответствующего выбранному языку.
Вернемся в параметру effects. он указывает на нечто с названием up_ac_pm, такую же секцию апгрейда, но уже для параметра "отдача". Это апгрейд второго уровня, и он зависит от up_a_pm и up_c_pm. В итоге имеем, что ключевой точкой является параметр upgrades в файле конкретного ствола. Теперь, что нужно сделать, чтобы иметь возможность установить все апгрейды. Еще раз взглянем на этот параметр:
Так как up_gr_ab_pm ссылается на секцию, в которой прописаны сразу два апгрейда, то игра считает эти апгрейды взаимоисключающими. Поэтому нам надо просто разбить этот параметр на две части. Вот исправленная строчка:
Однако, секций up_gr_a_pm, up_gr_b_pm, up_gr_c_pm, up_gr_d_pm в файле апгрейдов для ствола может и не быть, поэтому заглянем в конец файла w_pm_up.ltx (мы ведь над ПМ-ом изгаляемся), и убедимся, что действительно, секций нет. Добавляем:
Код
[up_gr_a_pm] elements = up_a_pm [up_gr_b_pm] elements = up_b_pm [up_gr_c_pm] elements = up_c_pm [up_gr_d_pm] elements = up_d_pm
Теперь самое главное. Почти у каждого ствола есть несколько заранее модифицированных двойников, и они описаны обычно в конце конфига этого ствола. для ПМ-а это аж 3 секции: wpn_pm_minigame, wpn_pm_up и wpn_pm_9x19. И каждой из них за каким-то прописан параметр upgrades в точности повторяющий значение родительского класса. На кой делать наследование и повторять параметры - я не понимаю, но из-за этого придется для каждого модифицированного ствола скопировать этот параметр с разделенными апгрейдами. А еще лучше закомментировать эту строку, оставив только параметр installed_upgrades.