Сповіщення
Очистити все

Створення нових апгрейдів


NazarTmm
Ранг:
Досвідчений
Роль:
Модмейкер
Угруповання:
Бандити
Записи:
35
Приєднався:
10 місяців тому
Початок теми  

Нам необхідно мати 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

 

 


   
Цитата
Теги теми