Нам необходимо иметь 7 файлов:
1. configs\weapons\upgrades\w_ak74_up.ltx
2. configs\text\rus\st_items_weapons_upgrades.xml
3. configs\weapons\upgrades_properties.ltx
4. configs\ui\inventory_upgrade_16.xml (для широкоформатных)
5. configs\weapons\w_ak74.ltx
6. configs\ui\textures_descr\ui_ingame2_common.xml
7. scripts\inventory_upgrades.script
Перед прочтением текста ниже рекомендуется прочитать содержание первого спойлера.
Итак, начнём по порядку:
1. Создадим главную секцию (секцию типа №2) нового апгрейда, скопировав любую другую и поменяв параметры и само название секции:
[up_pack_a_ak74]
scheme_index = 3, 0
known = 1
effects =
section = up_sect_pack_a_ak74
property = prop_pack
precondition_functor = inventory_upgrades.precondition_functor_a
precondition_parameter = true
effect_functor = inventory_upgrades.effect_functor_a
effect_parameter = something_here
; ui
prereq_functor = inventory_upgrades.prereq_functor_a
prereq_tooltip_functor = inventory_upgrades.prereq_tooltip_functor_a
prereq_params = up_pack_a_ak74
name = st_upg_pack_a_ak74
description = st_upg_pack_a_ak74_descr
icon = ui_wp_upgrade_30
Как видим, в параметре property "prop_pack", мы указали не сущствующий тип. Мы его создадим самостоятельно чуть позже.
2. Теперь создадим секцию типа №1, которую мы указали в параметре section "up_sect_pack_a_ak74":
[up_sect_pack_a_ak74]
cost = 5120
value = desc_value_pack_a
rpm = 100
cam_dispersion = -0.21;0.7
cam_dispersion_inc = -0.21;0.7
cam_step_angle_horz = -0.21;0.7
zoom_cam_dispersion = -0.2;0.6
zoom_cam_dispersion_inc = -0.2;0.6
zoom_cam_step_angle_horz = -0.2;0.6
grenade_launcher_status = 2
grenade_launcher_name = wpn_addon_grenade_launcher
grenade_launcher_x = 126
grenade_launcher_y = 24
control_inertion_factor = -0.2
inv_weight = -0.3
PDM_disp_vel_factor = -0.3;1.7
PDM_disp_accel_factor = -0.3;1.7
Здесь я собрал все улучшения четырёх апгрейдов, суммировав цену и делая скидку 20% (1600*4*0.8 = 5120) Отсюда и название апгрейда - st_upg_pack_a_ak74. В значении value я поставил "desc_value_pack_a". В данном случае в value присутствует ссылка на текстовый блок, а не кол-во процентов.
3. Теперь вернёмся в главную секцию. Т.к. апгрейд является пакетом апгрейдов up_sect_a_ak74,up_sect_c_ak74,up_sect_e_ak74,up_sect_g_ak74, то после проведения нашего апгрейда, четыре выше упомянутые должны выключиться. Для этого запишем наш апгрейд одновременно в несколько секций типов №3:
[up_gr_ab_ak74]
elements = up_a_ak74, up_b_ak74, up_pack_a_ak74
[up_gr_cd_ak74]
elements = up_c_ak74, up_d_ak74, up_pack_a_ak74
[up_gr_ef_ak74]
elements = up_e_ak74, up_f_ak74, up_pack_a_ak74
[up_gr_gh_ak74]
elements = up_g_ak74, up_h_ak74, up_pack_a_ak74
Т.к. из одной группы апгрейдов можно провести только один, то при проведении нашего апгрейда остальные "соседи" по группе апгрейдов выключатся.
4. Теперь, пользуясь файлом №2 запишем текстовые блоки, упомянутые в секциях типов №1 и №2.
<string id="st_upg_pack_a_ak74">
<text>Пакет апгрейдов №1</text>
</string>
<string id="st_upg_pack_a_ak74_descr">
<text>Пакет апгрейдов №1, включающий в себя увеличение темпа стрельбы, уменьшение отдачи, установку крепежа для подствольного гранатомёта, уменьшение веса оружия</text>
</string>
<string id="st_upg_pack_a_ak74">
<text>Пакет апгрейдов №1 Убийца</text>
</string>
5. Теперь создадим ui для нашего апгрейда для того, чтобы кнопка апгрейда была видна в дереве апгрейдов. В парамре scheme_index мы указали "3,0". Это значит, что в дереве апгрейдов этот апгрейд будет в 3-ем столбце и 0-ой строке. К каждому оружию предлагается своя схема дерева апгрейдов. Чтобы узнать схему АК74 откроем его конфиг (файл №5) и найдём параметр upgrade_scheme. Его значение - upgrade_scheme_u17b. Откроем файл №4 со схемами апгрейдов. Вот его общая структура:
<template name="[название схемы]">
[нулевой столбец]<column>
[нулевая строка нулевого столбца. Соответствует индексу 0,0]<cell x="[координата x]" y="[координата y]" />
[первая строка нулевого столбца. Соответствует индексу 0,1]<cell x="[координата x]" y="[координата y]" />
...
[конец нулевого столбца]</column>
[начало первого столбца]<column>
[нулевая строка первого столбца. Соответствует индексу 1,0]<cell x="[координата x]" y="[координата y]" />
...
[конец первого столбца]</column>
...
[конец схемы]</template>
Найдём интересующую нас схему и добавим столбец и строку:
<template name="upgrade_scheme_u17b">
<column>
<cell x="17" y="5" />
<cell x="17" y="50" />
<cell x="17" y="100" />
<cell x="17" y="145" />
<cell x="17" y="195" />
<cell x="17" y="240" />
<cell x="17" y="290" />
<cell x="17" y="335" />
<cell x="17" y="385" />
</column>
<column>
<cell x="100" y="50" />
<cell x="100" y="100" />
<cell x="100" y="240" />
<cell x="100" y="290" />
<cell x="100" y="385" />
</column>
<column>
<cell x="183" y="145" />
<cell x="183" y="195" />
<cell x="183" y="385" />
</column>
<column>
<cell x="183" y="5" />
</column>
</template>
6. Создадим новый тип апгрейдов: prop_pack. Для этого воспользуемся файлом №3.
Для начала добавим наш тип в начало файла:
[upgrades_properties]
prop_pack
prop_weight;; Вес
prop_silencer;; Глушитель
prop_underbarrel_slot;; Крепление подствольника
...
Теперь создадим новую секцию:
[prop_pack]
name = st_prop_weight
icon = ui_wp_propery_11
functor = inventory_upgrades.property_functor_d
params = hit_power, rpm, cost
В нашем случае важен только один параметр:
functor = inventory_upgrades.property_functor_d
Он указывает, какая скриптовая функция будет составлять описание. Вы можете сами рассмотреть остальные параметры: name - название типа апгрейда (даётся ссылка на текстовый блок), icon - ссылка на указатель иконок из файла №6.
7. Составим функцию описания апгрейда inventory_upgrades.property_functor_d. Для этого откроем файл №7 и впишем туда маленькую функцию:
function property_functor_d( param1, name )
local prorerty_name = char_ini:r_string(name, "name")
local value_table = utils.parse_names(param1)
local section = value_table[1]
if section then
local value = char_ini:r_string(section, "value")
if value then
return game.translate_string(value)
end
end
return game.translate_string(prorerty_name)
end
Автор: IQDDD