Нам необходимо иметь 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) нового апгрейда, скопировав
любую другую и поменяв параметры и само название секции: Code [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": Code [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: Code [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. Code <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 со схемами апгрейдов. Вот его общая структура: Code <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> Найдём интересующую нас схему и добавим столбец и строку: Code <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. Для начала добавим наш тип в начало файла: Code [upgrades_properties] prop_pack prop_weight ;; Вес prop_silencer ;; Глушитель prop_underbarrel_slot;; Крепление подствольника ... Теперь создадим новую секцию: Code [prop_pack] name = st_prop_weight icon = ui_wp_propery_11 functor = inventory_upgrades.property_functor_d params = hit_power, rpm, cost В нашем случае важен только один параметр: Code functor = inventory_upgrades.property_functor_d
Он указывает, какая скриптовая функция будет составлять описание. Вы
можете сами рассмотреть остальные параметры: name - название типа
апгрейда (даётся ссылка на текстовый блок), icon - ссылка на указатель
иконок из файла №6. 7. Составим функцию описания апгрейда
inventory_upgrades.property_functor_d. Для этого откроем файл №7 и
впишем туда маленькую функцию: Code 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
|