| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
| Форум сталкер S.T.A.L.K.E.R.: Школа моддинга Уроки, вопросы по созданию модов Создание новых апгрейдов (Создание апгрейдов в сталкер) |
| Создание новых апгрейдов |
|
Создание новых апгрейдов
В данном руководстве рассматривается процесс создания собственного апгрейда для оружия на примере АК-74. Необходимые файлы 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). В value используется ссылка на текст, а не процентное значение. Шаг 3. Группы апгрейдов (тип №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. Текстовые описания В файле st_items_weapons_upgrades.xml добавляем текстовые блоки: Код Пакет апгрейдов №1 Пакет апгрейдов №1, включающий увеличение темпа стрельбы, уменьшение отдачи, установку подствольного гранатомёта и снижение веса оружия Пакет апгрейдов №1 «Убийца» Шаг 5. UI апгрейда Для отображения кнопки апгрейда используется параметр scheme_index. Значение 3,0 означает третий столбец и первую строку. Схема апгрейдов АК-74 задаётся параметром upgrade_scheme_u17b в файле w_ak74.ltx. Правки выполняются в inventory_upgrade_16.xml. Шаг 6. Новый тип апгрейда Добавляем тип prop_pack в файл upgrades_properties.ltx. Код [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. Он определяет функцию, формирующую описание апгрейда. Шаг 7. Скриптовая функция Добавляем функцию в inventory_upgrades.script: Код 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
|
| |||
| |||