Нам необхідно мати 7 файлів:
1. configs\weapons\upgrades\w_ak74_up.ltx
2. configs\text\ua\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> [нульовий рядок нульового стовпця. [b]Відповідає індексу 0,0[/b]]<cell x="[координата x]" y="[координата y]" /> [Перший рядок нульового стовпця. [b]Відповідає індексу 0,1[/b]]<cell x="[координата x]" y="[координата y]" /> ... [кінець нульового стовпця]</column> [початок першого стовпця]<column> [Нульовий рядок першого стовпця. [b]Відповідає індексу 1,0[/b]]<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 [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